diff options
Diffstat (limited to 'Demo')
-rw-r--r-- | Demo/parser/README | 2 | ||||
-rw-r--r-- | Demo/parser/pprint.py | 135 |
2 files changed, 0 insertions, 137 deletions
diff --git a/Demo/parser/README b/Demo/parser/README index 3d775aa..ec45ca9 100644 --- a/Demo/parser/README +++ b/Demo/parser/README @@ -20,8 +20,6 @@ Files: handle nested constructs easily using the functions and classes in example.py. - pprint.py -- function to pretty-print Python values. - test_parser.py program to put the parser module through it's paces. parser.tex -- LaTex driver file for formatting the parser module diff --git a/Demo/parser/pprint.py b/Demo/parser/pprint.py deleted file mode 100644 index 87a0cfd..0000000 --- a/Demo/parser/pprint.py +++ /dev/null @@ -1,135 +0,0 @@ -# pprint.py -# -# Author: Fred L. Drake, Jr. -# fdrake@cnri.reston.va.us, fdrake@intr.net -# -# This is a simple little module I wrote to make life easier. I didn't -# see anything quite like it in the library, though I may have overlooked -# something. I wrote this when I was trying to read some heavily nested -# tuples with fairly non-descriptive content. This is modelled very much -# after Lisp/Scheme - style pretty-printing of lists. If you find it -# useful, thank small children who sleep at night. - -"""Support to pretty-print lists, tuples, & dictionaries recursively. -Very simple, but useful, especially in debugging data structures. - -Constants ---------- - -INDENT_PER_LEVEL - Amount of indentation to use for each new recursive level. The - default is 1. This must be a non-negative integer, and may be set - by the caller before calling pprint(). - -MAX_WIDTH - Maximum width of the display. This is only used if the - representation *can* be kept less than MAX_WIDTH characters wide. - May be set by the user before calling pprint() if needed. - -""" - -INDENT_PER_LEVEL = 1 - -MAX_WIDTH = 80 - -from types import DictType, ListType, TupleType - - -def pformat(seq): - """Format a Python object into a pretty-printed representation. - - The representation is returned with no trailing newline. - - """ - import StringIO - sio = StringIO.StringIO() - pprint(seq, stream=sio) - str = sio.getvalue() - if str and str[-1] == '\n': - str = str[:-1] - return str - - -def pprint(seq, stream=None, indent=0, allowance=0): - """Pretty-print a list, tuple, or dictionary. - - seq - List, tuple, or dictionary object to be pretty-printed. Other - object types are permitted by are not specially interpreted. - - stream - Output stream. If not provided, `sys.stdout' is used. This - parameter must support the `write()' method with a single - parameter, which will always be a string. It may be a - `StringIO.StringIO' object if the result is needed as a - string. - - Indentation is done according to `INDENT_PER_LEVEL', which may be - set to any non-negative integer before calling this function. The - output written on the stream is a perfectly valid representation - of the Python object passed in, with indentation to assist - human-readable interpretation. The output can be used as input - without error, given readable representations of all elements are - available via `repr()'. Output is restricted to `MAX_WIDTH' - columns where possible. - - """ - if stream is None: - import sys - stream = sys.stdout - - rep = `seq` - typ = type(seq) - sepLines = len(rep) > (MAX_WIDTH - 1 - indent - allowance) - - if sepLines and (typ is ListType or typ is TupleType): - # Pretty-print the sequence. - stream.write(((typ is ListType) and '[') or '(') - - length = len(seq) - if length: - indent = indent + INDENT_PER_LEVEL - pprint(seq[0], stream, indent, allowance + 1) - - if len(seq) > 1: - for ent in seq[1:]: - stream.write(',\n' + ' '*indent) - pprint(ent, stream, indent, allowance + 1) - - indent = indent - INDENT_PER_LEVEL - - stream.write(((typ is ListType) and ']') or ')') - - elif typ is DictType and sepLines: - stream.write('{') - - length = len(seq) - if length: - indent = indent + INDENT_PER_LEVEL - items = seq.items() - items.sort() - key, ent = items[0] - rep = `key` + ': ' - stream.write(rep) - pprint(ent, stream, indent + len(rep), allowance + 1) - - if len(items) > 1: - for key, ent in items[1:]: - rep = `key` + ': ' - stream.write(',\n' + ' '*indent + rep) - pprint(ent, stream, indent + len(rep), allowance + 1) - - indent = indent - INDENT_PER_LEVEL - - stream.write('}') - - else: - stream.write(rep) - - # Terminate the 'print' if we're not a recursive invocation. - if not indent: - stream.write('\n') - - -# -# end of file |