Commit | Line | Data |
---|---|---|
bfae91cc A |
1 | import os |
2 | import readline | |
3 | import sys | |
4 | import xml.etree.ElementTree as ET | |
5 | ||
6 | fname = sys.argv[1] | |
ab29f6bd | 7 | args = sys.argv[2:] |
bfae91cc A |
8 | tree = ET.Element('mal') |
9 | ET.SubElement(tree, 'stdin') | |
ab29f6bd A |
10 | |
11 | if len(args) > 0: | |
12 | args0 = args[0] | |
13 | ET.SubElement(tree, 'argv') | |
14 | for a in tree.iter('mal'): | |
15 | for a in a.iter('argv'): | |
16 | for arg in args[1:]: | |
17 | ET.SubElement(a, 'arg').text = arg | |
18 | ||
bfae91cc A |
19 | tree = ET.ElementTree(tree) |
20 | ||
21 | try: | |
22 | readline.read_history_file('.xslt_mal_history') | |
23 | except: | |
24 | pass | |
25 | ||
ab29f6bd A |
26 | def transform(do_print=True): |
27 | global tree | |
bfae91cc A |
28 | |
29 | tree.write('xslt_input.xml') | |
30 | if os.system(f'saxon -xsl:"{fname}" -s:xslt_input.xml > xslt_output.xml 2> xsl_error.xml'): | |
31 | with open('xsl_error.xml', 'r') as f: | |
32 | print(f.readlines()[0]) | |
ab29f6bd | 33 | return |
342a5b36 A |
34 | else: |
35 | with open('xsl_error.xml', 'r') as f: | |
36 | print(f.read(), end='') | |
37 | ||
bfae91cc | 38 | tree = ET.parse('xslt_output.xml') |
ab29f6bd A |
39 | if do_print: |
40 | stdout = '' | |
41 | for a in tree.iter('mal'): | |
42 | for a in a.iter('stdout'): | |
43 | stdout = a | |
44 | print(stdout.text) | |
45 | stdout.clear() | |
46 | del stdout | |
47 | ||
48 | ||
49 | if len(args) > 0: | |
bfae91cc | 50 | for a in tree.iter('mal'): |
ab29f6bd A |
51 | for a in tree.iter('stdin'): |
52 | a.text = f'(load-file "{args0}")' | |
53 | transform(False) | |
54 | else: | |
55 | while True: | |
56 | try: | |
57 | x = input('user> ') | |
58 | except EOFError: | |
59 | break | |
60 | except KeyboardInterrupt: | |
61 | break | |
62 | ||
63 | for a in tree.iter('mal'): | |
64 | for a in a.iter('stdin'): | |
65 | a.text = x | |
66 | ||
67 | transform() | |
bfae91cc | 68 | |
ab29f6bd | 69 | readline.write_history_file('.xslt_mal_history') |