From a8b37ad9fff331b0ba32b27dc83c7af43f6c3fa6 Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Thu, 19 Aug 1999 16:00:41 +0000 Subject: [PATCH] Scrit by Marc-Andre Lemburg to generate htmlentitydefs.py. --- Tools/scripts/parseentities.py | 65 ++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100755 Tools/scripts/parseentities.py diff --git a/Tools/scripts/parseentities.py b/Tools/scripts/parseentities.py new file mode 100755 index 00000000000..b708116f010 --- /dev/null +++ b/Tools/scripts/parseentities.py @@ -0,0 +1,65 @@ +#!/usr/local/bin/python +""" Utility for parsing HTML entity definitions available from: + + http://www.w3.org/ as e.g. + http://www.w3.org/TR/REC-html40/HTMLlat1.ent + + Input is read from stdin, output is written to stdout in form of a + Python snippet defining a dictionary "entitydefs" mapping literal + entity name to character or numeric entity. + + Marc-Andre Lemburg, mal@lemburg.com, 1999. + Use as you like. NO WARRANTIES. + +""" +import re,sys +import TextTools + +entityRE = re.compile('') + +def parse(text,pos=0,endpos=None): + + pos = 0 + if endpos is None: + endpos = len(text) + d = {} + while 1: + m = entityRE.search(text,pos,endpos) + if not m: + break + name,charcode,comment = m.groups() + d[name] = charcode,comment + pos = m.end() + return d + +def writefile(f,defs): + + f.write("entitydefs = {\n") + items = defs.items() + items.sort() + for name,(charcode,comment) in items: + if charcode[:2] == '&#': + code = int(charcode[2:-1]) + if code < 256: + charcode = "'\%o'" % code + else: + charcode = repr(charcode) + else: + charcode = repr(charcode) + comment = TextTools.collapse(comment) + f.write(" '%s':\t%s, \t# %s\n" % (name,charcode,comment)) + f.write('\n}\n') + +if __name__ == '__main__': + if len(sys.argv) > 1: + infile = open(sys.argv[1]) + else: + infile = sys.stdin + if len(sys.argv) > 2: + outfile = open(sys.argv[2],'w') + else: + outfile = sys.stdout + text = infile.read() + defs = parse(text) + writefile(outfile,defs) +