/
cmdline.py
executable file
·120 lines (91 loc) · 2.89 KB
/
cmdline.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#!/usr/bin/env python2.5
# -*-mode: python -*- -*- coding: utf-8 -*-
"""
"""
__version__="unknown"
import time
import sys
import cgi
import glob
import os.path
from optparse import OptionParser
import debugtools
from debugtools import debug
import rif
import error
import plugin
# one of these messes up namespace handling in AST2
# ...
###import ps_parse
####import ps_lex
###import bld_xml_out
###import fsxml_out
###import xps_out
####import gend_mps_in
###import blindfold
###import bnf_out
###import ply_out
###import dump_out
###import plugins.test_1
def run():
plugin.import_all()
parser = OptionParser(usage="%prog [options] input-location",
version=__version__)
parser.set_defaults(verbose=True)
parser.set_defaults(output="-")
parser.add_option("-q", "--quiet",
action="store_false", dest="verbose",
help="don't print status messages to stderr")
parser.add_option("-D", "--debug",
action="append", dest="debugTags",
help="turn on debugging of a particular type (try 'all')")
#parser.add_option("-O", "--output", action="store", dest="output",
# help="Save the output to this file (else stdout)")
plugin.add_to_OptionParser(parser)
(options, args) = parser.parse_args()
# feed the options back, somehow...
# plugin.options_from_OptionParser(options) maybe?
if options.debugTags:
debugtools.tags.update(options.debugTags)
verbose = options.verbose
debug('cmdline', 'args:', args)
plugins = plugin.combined(options)
if plugins.can_run("system_test"):
if plugins.system_test():
sys.exit(0)
else:
sys.exit(1)
if len(args) != 1:
parser.print_help()
sys.exit(1)
input_filename = args[0]
if input_filename == "-":
input_stream = sys.stdin
else:
input_stream = open(input_filename, "r")
input_text = input_stream.read()
debug('cmdline', 'read %d bytes' % len(input_text))
iproc = plugin.get_one_plugin(["parse"], options)
try:
doc = iproc.parse(input_text)
except error.SyntaxError, e:
err = ""
err += e.message + "\n"
err += e.illustrate_position()
print >>sys.stderr, err
return
for p in plugin.get_plugins(["transform"], options):
doc = p.transform(doc)
for p in plugin.get_plugins(["analyze"], options):
report = p.analyze(doc)
print "\nReport from %s plugin:" % p.id
print report
print
out_stream = sys.stdout
oproc = plugin.get_one_plugin(["serialize"], options)
debug('cmdline', 'Output processor=', oproc)
oproc.serialize(doc, out_stream)
if __name__ == "__main__":
import doctest, sys
doctest.testmod(sys.modules[__name__])
run()