summaryrefslogtreecommitdiff
path: root/tools/quicktest.py
diff options
context:
space:
mode:
authorgoodger <goodger@929543f6-e4f2-0310-98a6-ba3bd3dd1d04>2002-04-20 03:01:52 +0000
committergoodger <goodger@929543f6-e4f2-0310-98a6-ba3bd3dd1d04>2002-04-20 03:01:52 +0000
commit101671ae44e1686680c80cd07b452aabeb88fb63 (patch)
treec3e859c167fc0259d708de65ec5e703293d63f68 /tools/quicktest.py
parent3522fa4da8a8aec1e7da46cf4eb4a5239ed17bfd (diff)
downloaddocutils-101671ae44e1686680c80cd07b452aabeb88fb63.tar.gz
Initial revision
git-svn-id: http://svn.code.sf.net/p/docutils/code/trunk/docutils@18 929543f6-e4f2-0310-98a6-ba3bd3dd1d04
Diffstat (limited to 'tools/quicktest.py')
-rwxr-xr-xtools/quicktest.py185
1 files changed, 185 insertions, 0 deletions
diff --git a/tools/quicktest.py b/tools/quicktest.py
new file mode 100755
index 000000000..df295f66a
--- /dev/null
+++ b/tools/quicktest.py
@@ -0,0 +1,185 @@
+#!/usr/bin/env python
+
+"""
+:Author: Garth Kidd
+:Contact: garth@deadlybloodyserious.com
+:Author: David Goodger
+:Contact: goodger@users.sourceforge.net
+:Revision: $Revision$
+:Date: $Date$
+:Copyright: This module has been placed in the public domain.
+"""
+
+import sys, os, getopt
+import docutils.utils
+from docutils.parsers.rst import Parser
+
+
+usage_header = """\
+quicktest.py: quickly test the restructuredtext parser.
+
+Usage::
+
+ quicktest.py [options] [filename]
+
+``filename`` is the name of the file to use as input (default is stdin).
+
+Options:
+"""
+
+options = [('pretty', 'p',
+ 'output pretty pseudo-xml: no "&abc;" entities (default)'),
+ ('test', 't', 'output test-ready data (input & expected output, '
+ 'ready to be copied to a parser test module)'),
+ ('rawxml', 'r', 'output raw XML'),
+ ('styledxml=', 's', 'output raw XML with XSL style sheet reference '
+ '(filename supplied in the option argument)'),
+ ('xml', 'x', 'output pretty XML (indented)'),
+ ('debug', 'd', 'debug mode (lots of output)'),
+ ('help', 'h', 'show help text')]
+"""See distutils.fancy_getopt.FancyGetopt.__init__ for a description of the
+data structure: (long option, short option, description)."""
+
+def usage():
+ print usage_header
+ for longopt, shortopt, description in options:
+ if longopt[-1:] == '=':
+ opts = '-%s arg, --%sarg' % (shortopt, longopt)
+ else:
+ opts = '-%s, --%s' % (shortopt, longopt),
+ print '%-15s' % opts,
+ if len(opts) > 14:
+ print '%-16s' % '\n',
+ while len(description) > 60:
+ limit = description.rindex(' ', 0, 60)
+ print description[:limit].strip()
+ description = description[limit + 1:]
+ print '%-15s' % ' ',
+ print description
+
+def _pretty(input, document, optargs):
+ return document.pformat()
+
+def _rawxml(input, document, optargs):
+ return document.asdom().toxml()
+
+def _styledxml(input, document, optargs):
+ docnode = document.asdom().childNodes[0]
+ return '%s\n%s\n%s' % (
+ '<?xml version="1.0" encoding="ISO-8859-1"?>',
+ '<?xml-stylesheet type="text/xsl" href="%s"?>' % optargs['styledxml'],
+ docnode.toxml())
+
+def _prettyxml(input, document, optargs):
+ return document.asdom().toprettyxml(' ', '\n')
+
+def _test(input, document, optargs):
+ tq = '"""'
+ output = document.pformat() # same as _pretty()
+ return """\
+ totest['change_this_test_name'] = [
+[%s\\
+%s
+%s,
+%s\\
+%s
+%s],
+]
+""" % ( tq, escape(input.rstrip()), tq, tq, escape(output.rstrip()), tq )
+
+def escape(text):
+ """
+ Return `text` in a form compatible with triple-double-quoted Python strings.
+ """
+ text = text.replace('\\', '\\\\') # escape backslashes
+ text = text.replace('"""', '""\\"') # break up triple-double-quotes
+ text = text.replace(' \n', ' \\n\\\n') # protect trailing whitespace
+ return text
+
+_outputFormatters = {
+ 'rawxml': _rawxml,
+ 'styledxml': _styledxml,
+ 'xml': _prettyxml,
+ 'pretty' : _pretty,
+ 'test': _test
+ }
+
+def format(outputFormat, input, document, optargs):
+ formatter = _outputFormatters[outputFormat]
+ return formatter(input, document, optargs)
+
+def getArgs():
+ if os.name == 'mac' and len(sys.argv) <= 1:
+ return macGetArgs()
+ else:
+ return posixGetArgs(sys.argv[1:])
+
+def posixGetArgs(argv):
+ outputFormat = 'pretty'
+ # convert fancy_getopt style option list to getopt.getopt() arguments
+ shortopts = ''.join([option[1] + ':' * (option[0][-1:] == '=')
+ for option in options if option[1]])
+ longopts = [option[0] for option in options if option[0]]
+ try:
+ opts, args = getopt.getopt(argv, shortopts, longopts)
+ except getopt.GetoptError:
+ usage()
+ sys.exit(2)
+ optargs = {'debug': 0}
+ for o, a in opts:
+ if o in ['-h', '--help']:
+ usage()
+ sys.exit()
+ elif o in ['-r', '--rawxml']:
+ outputFormat = 'rawxml'
+ elif o in ['-s', '--styledxml']:
+ outputFormat = 'styledxml'
+ optargs['styledxml'] = a
+ elif o in ['-x', '--xml']:
+ outputFormat = 'xml'
+ elif o in ['-p', '--pretty']:
+ outputFormat = 'pretty'
+ elif o in ['-t', '--test']:
+ outputFormat = 'test'
+ elif o in ['-d', '--debug']:
+ optargs['debug'] = 1
+ else:
+ raise getopt.GetoptError, "getopt should have saved us!"
+ if len(args) > 1:
+ print "Only one file at a time, thanks."
+ usage()
+ sys.exit(1)
+ if len(args) == 1:
+ inputFile = open(args[0])
+ else:
+ inputFile = sys.stdin
+ return inputFile, outputFormat, optargs
+
+def macGetArgs():
+ import EasyDialogs
+ EasyDialogs.Message("""\
+In the following window, please:
+
+1. Choose an output format from the "Option" list.
+2. Click "Add" (if you don't, the default format will
+ be "pretty").
+3. Click "Add existing file..." and choose an input file.
+4. Click "OK".""")
+ optionlist = [(longopt, description)
+ for (longopt, shortopt, description) in options]
+ argv = EasyDialogs.GetArgv(optionlist=optionlist, addnewfile=0, addfolder=0)
+ return posixGetArgs(argv)
+
+def main():
+ inputFile, outputFormat, optargs = getArgs() # process cmdline arguments
+ parser = Parser()
+ input = inputFile.read()
+ document = docutils.utils.newdocument(debug=optargs['debug'])
+ parser.parse(input, document)
+ output = format(outputFormat, input, document, optargs)
+ print output,
+
+
+if __name__ == '__main__':
+ sys.stderr = sys.stdout
+ main()