impl step6
[jackhill/mal.git] / xslt / harness.py
CommitLineData
bfae91cc
A
1import os
2import readline
3import sys
4import xml.etree.ElementTree as ET
5
6fname = sys.argv[1]
ab29f6bd 7args = sys.argv[2:]
bfae91cc
A
8tree = ET.Element('mal')
9ET.SubElement(tree, 'stdin')
ab29f6bd
A
10
11if 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
19tree = ET.ElementTree(tree)
20
21try:
22 readline.read_history_file('.xslt_mal_history')
23except:
24 pass
25
ab29f6bd
A
26def 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
49if 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)
54else:
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')