diff options
Diffstat (limited to 'Tools/scripts/texi2html.py')
-rwxr-xr-x | Tools/scripts/texi2html.py | 363 |
1 files changed, 185 insertions, 178 deletions
diff --git a/Tools/scripts/texi2html.py b/Tools/scripts/texi2html.py index c06d812..fbf32d6 100755 --- a/Tools/scripts/texi2html.py +++ b/Tools/scripts/texi2html.py @@ -1,4 +1,4 @@ -#! /usr/bin/env python3 +#! /usr/bin/env python # Convert GNU texinfo files into HTML, one file per node. # Based on Texinfo 2.14. @@ -78,11 +78,11 @@ spprog = re.compile('[\n@{}&<>]') # Special characters in # running text # # menu item (Yuck!) -miprog = re.compile(r'^\* ([^:]*):(:|[ \t]*([^\t,\n.]+)([^ \t\n]*))[ \t\n]*') -# 0 1 1 2 3 34 42 0 -# ----- ---------- --------- -# -|----------------------------- -# ----------------------------------------------------- +miprog = re.compile('^\* ([^:]*):(:|[ \t]*([^\t,\n.]+)([^ \t\n]*))[ \t\n]*') +# 0 1 1 2 3 34 42 0 +# ----- ---------- --------- +# -|----------------------------- +# ----------------------------------------------------- @@ -114,14 +114,14 @@ class HTMLNode: self.lines = [] def write(self, *lines): - for line in lines: - self.lines.append(line) + map(self.lines.append, lines) def flush(self): - with open(self.dirname + '/' + makefile(self.name), 'w') as fp: - fp.write(self.prologue) - fp.write(self.text) - fp.write(self.epilogue) + fp = open(self.dirname + '/' + makefile(self.name), 'w') + fp.write(self.prologue) + fp.write(self.text) + fp.write(self.epilogue) + fp.close() def link(self, label, nodename, rel=None, rev=None): if nodename: @@ -173,7 +173,7 @@ class HTMLNode: self.link(' Next', self.next, rel='Next') self.link(' Prev', self.prev, rel='Previous') self.link(' Up', self.up, rel='Up') - if self.name != self.topname: + if self.name <> self.topname: self.link(' Top', self.topname) @@ -256,8 +256,8 @@ class TexinfoParser: while line and (line[0] == '%' or blprog.match(line)): line = fp.readline() lineno = lineno + 1 - if line[:len(MAGIC)] != MAGIC: - raise SyntaxError('file does not begin with %r' % (MAGIC,)) + if line[:len(MAGIC)] <> MAGIC: + raise SyntaxError, 'file does not begin with %r' % (MAGIC,) self.parserest(fp, lineno) # Parse the contents of a file, not expecting a MAGIC header @@ -275,7 +275,7 @@ class TexinfoParser: if not self.skip: self.process(accu) accu = [] if initial_lineno > 0: - print('*** EOF before @bye') + print '*** EOF before @bye' break lineno = lineno + 1 mo = cmprog.match(line) @@ -306,10 +306,10 @@ class TexinfoParser: accu.append(line) # if self.skip: - print('*** Still skipping at the end') + print '*** Still skipping at the end' if self.stack: - print('*** Stack not empty at the end') - print('***', self.stack) + print '*** Stack not empty at the end' + print '***', self.stack if self.includedepth == 0: while self.nodestack: self.nodestack[-1].finalize() @@ -318,7 +318,7 @@ class TexinfoParser: # Start saving text in a buffer instead of writing it to a file def startsaving(self): - if self.savetext is not None: + if self.savetext <> None: self.savestack.append(self.savetext) # print '*** Recursively saving text, expect trouble' self.savetext = '' @@ -338,9 +338,9 @@ class TexinfoParser: try: text = ''.join(args) except: - print(args) + print args raise TypeError - if self.savetext is not None: + if self.savetext <> None: self.savetext = self.savetext + text elif self.nodefp: self.nodefp.write(text) @@ -349,8 +349,8 @@ class TexinfoParser: # Complete the current node -- write footnotes and close file def endnode(self): - if self.savetext is not None: - print('*** Still saving text at end of node') + if self.savetext <> None: + print '*** Still saving text at end of node' dummy = self.collectsavings() if self.footnotes: self.writefootnotes() @@ -361,7 +361,7 @@ class TexinfoParser: self.link('Next', next) self.link('Prev', prev) self.link('Up', up) - if self.nodename != self.topname: + if self.nodename <> self.topname: self.link('Top', self.topname) self.write('<HR>\n') self.write('</BODY>\n') @@ -382,10 +382,10 @@ class TexinfoParser: # This mostly distinguishes between menus and normal text def process(self, accu): if self.debugging > 1: - print('!'*self.debugging, 'process:', self.skip, self.stack, end=' ') - if accu: print(accu[0][:30], end=' ') - if accu[0][30:] or accu[1:]: print('...', end=' ') - print() + print '!'*self.debugging, 'process:', self.skip, self.stack, + if accu: print accu[0][:30], + if accu[0][30:] or accu[1:]: print '...', + print if self.inmenu(): # XXX should be done differently for line in accu: @@ -461,7 +461,7 @@ class TexinfoParser: continue if c == '}': if not stack: - print('*** Unmatched }') + print '*** Unmatched }' self.write('}') continue cmd = stack[-1] @@ -473,9 +473,9 @@ class TexinfoParser: continue method() continue - if c != '@': + if c <> '@': # Cannot happen unless spprog is changed - raise RuntimeError('unexpected funny %r' % c) + raise RuntimeError, 'unexpected funny %r' % c start = i while i < n and text[i] in string.ascii_letters: i = i+1 if i == start: @@ -509,32 +509,32 @@ class TexinfoParser: continue method() if stack: - print('*** Stack not empty at para:', stack) + print '*** Stack not empty at para:', stack # --- Handle unknown embedded @-commands --- def unknown_open(self, cmd): - print('*** No open func for @' + cmd + '{...}') + print '*** No open func for @' + cmd + '{...}' cmd = cmd + '{' self.write('@', cmd) - if cmd not in self.unknown: + if not self.unknown.has_key(cmd): self.unknown[cmd] = 1 else: self.unknown[cmd] = self.unknown[cmd] + 1 def unknown_close(self, cmd): - print('*** No close func for @' + cmd + '{...}') + print '*** No close func for @' + cmd + '{...}' cmd = '}' + cmd self.write('}') - if cmd not in self.unknown: + if not self.unknown.has_key(cmd): self.unknown[cmd] = 1 else: self.unknown[cmd] = self.unknown[cmd] + 1 def unknown_handle(self, cmd): - print('*** No handler for @' + cmd) + print '*** No handler for @' + cmd self.write('@', cmd) - if cmd not in self.unknown: + if not self.unknown.has_key(cmd): self.unknown[cmd] = 1 else: self.unknown[cmd] = self.unknown[cmd] + 1 @@ -554,21 +554,21 @@ class TexinfoParser: file = os.path.join(self.includedir, file) try: fp = open(file, 'r') - except IOError as msg: - print('*** Can\'t open include file', repr(file)) + except IOError, msg: + print '*** Can\'t open include file', repr(file) return - with fp: - print('!'*self.debugging, '--> file', repr(file)) - save_done = self.done - save_skip = self.skip - save_stack = self.stack - self.includedepth = self.includedepth + 1 - self.parserest(fp, 0) - self.includedepth = self.includedepth - 1 + print '!'*self.debugging, '--> file', repr(file) + save_done = self.done + save_skip = self.skip + save_stack = self.stack + self.includedepth = self.includedepth + 1 + self.parserest(fp, 0) + self.includedepth = self.includedepth - 1 + fp.close() self.done = save_done self.skip = save_skip self.stack = save_stack - print('!'*self.debugging, '<-- file', repr(file)) + print '!'*self.debugging, '<-- file', repr(file) # --- Special Insertions --- @@ -764,7 +764,7 @@ class TexinfoParser: elif os.path.exists(imagelocation+'.gif'): # MySQL uses GIF files filename += '.gif' else: - print("*** Cannot find image " + imagelocation) + print "*** Cannot find image " + imagelocation #TODO: what is 'ext'? self.write('<IMG SRC="', filename, '"', \ width and (' WIDTH="' + width + '"') or "", \ @@ -803,7 +803,7 @@ class TexinfoParser: def close_i(self): self.write('</I>') def open_footnote(self): - # if self.savetext is not None: + # if self.savetext <> None: # print '*** Recursive footnote -- expect weirdness' id = len(self.footnotes) + 1 self.write(self.FN_SOURCE_PATTERN % {'id': repr(id)}) @@ -871,8 +871,8 @@ class TexinfoParser: cmd = line[a:b] args = line[b:].strip() if self.debugging > 1: - print('!'*self.debugging, 'command:', self.skip, self.stack, \ - '@' + cmd, args) + print '!'*self.debugging, 'command:', self.skip, self.stack, \ + '@' + cmd, args try: func = getattr(self, 'do_' + cmd) except AttributeError: @@ -890,8 +890,8 @@ class TexinfoParser: func(args) def unknown_cmd(self, cmd, args): - print('*** unknown', '@' + cmd, args) - if cmd not in self.unknown: + print '*** unknown', '@' + cmd, args + if not self.unknown.has_key(cmd): self.unknown[cmd] = 1 else: self.unknown[cmd] = self.unknown[cmd] + 1 @@ -899,11 +899,11 @@ class TexinfoParser: def do_end(self, args): words = args.split() if not words: - print('*** @end w/o args') + print '*** @end w/o args' else: cmd = words[0] - if not self.stack or self.stack[-1] != cmd: - print('*** @end', cmd, 'unexpected') + if not self.stack or self.stack[-1] <> cmd: + print '*** @end', cmd, 'unexpected' else: del self.stack[-1] try: @@ -915,8 +915,8 @@ class TexinfoParser: def unknown_end(self, cmd): cmd = 'end ' + cmd - print('*** unknown', '@' + cmd) - if cmd not in self.unknown: + print '*** unknown', '@' + cmd + if not self.unknown.has_key(cmd): self.unknown[cmd] = 1 else: self.unknown[cmd] = self.unknown[cmd] + 1 @@ -953,7 +953,8 @@ class TexinfoParser: self.values[args] = None def bgn_ifset(self, args): - if args not in self.values or self.values[args] is None: + if args not in self.values.keys() \ + or self.values[args] is None: self.skip = self.skip + 1 self.stackinfo[len(self.stack)] = 1 else: @@ -964,10 +965,11 @@ class TexinfoParser: self.skip = self.skip - 1 del self.stackinfo[len(self.stack) + 1] except KeyError: - print('*** end_ifset: KeyError :', len(self.stack) + 1) + print '*** end_ifset: KeyError :', len(self.stack) + 1 def bgn_ifclear(self, args): - if args in self.values and self.values[args] is not None: + if args in self.values.keys() \ + and self.values[args] is not None: self.skip = self.skip + 1 self.stackinfo[len(self.stack)] = 1 else: @@ -978,17 +980,17 @@ class TexinfoParser: self.skip = self.skip - 1 del self.stackinfo[len(self.stack) + 1] except KeyError: - print('*** end_ifclear: KeyError :', len(self.stack) + 1) + print '*** end_ifclear: KeyError :', len(self.stack) + 1 def open_value(self): self.startsaving() def close_value(self): key = self.collectsavings() - if key in self.values: + if key in self.values.keys(): self.write(self.values[key]) else: - print('*** Undefined value: ', key) + print '*** Undefined value: ', key # --- Beginning a file --- @@ -1049,10 +1051,10 @@ class TexinfoParser: self.nodelinks = parts [name, next, prev, up] = parts[:4] file = self.dirname + '/' + makefile(name) - if file in self.filenames: - print('*** Filename already in use: ', file) + if self.filenames.has_key(file): + print '*** Filename already in use: ', file else: - if self.debugging: print('!'*self.debugging, '--- writing', file) + if self.debugging: print '!'*self.debugging, '--- writing', file self.filenames[file] = 1 # self.nodefp = open(file, 'w') self.nodename = name @@ -1167,7 +1169,7 @@ class TexinfoParser: self.expand(args) self.write('</', type, '>\n') if self.debugging or self.print_headers: - print('---', args) + print '---', args def do_contents(self, args): # pass @@ -1441,7 +1443,7 @@ class TexinfoParser: else: # some other character, e.g. '-' args = self.itemarg + ' ' + args - if self.itemnumber is not None: + if self.itemnumber <> None: args = self.itemnumber + '. ' + args self.itemnumber = increment(self.itemnumber) if self.stack and self.stack[-1] == 'table': @@ -1540,14 +1542,14 @@ class TexinfoParser: self.indextitle['vr'] = 'Variable' # self.whichindex = {} - for name in self.indextitle: + for name in self.indextitle.keys(): self.whichindex[name] = [] def user_index(self, name, args): - if name in self.whichindex: + if self.whichindex.has_key(name): self.index(name, args) else: - print('*** No index named', repr(name)) + print '*** No index named', repr(name) def do_cindex(self, args): self.index('cp', args) def do_findex(self, args): self.index('fn', args) @@ -1562,15 +1564,15 @@ class TexinfoParser: def do_synindex(self, args): words = args.split() - if len(words) != 2: - print('*** bad @synindex', args) + if len(words) <> 2: + print '*** bad @synindex', args return [old, new] = words - if old not in self.whichindex or \ - new not in self.whichindex: - print('*** bad key(s) in @synindex', args) + if not self.whichindex.has_key(old) or \ + not self.whichindex.has_key(new): + print '*** bad key(s) in @synindex', args return - if old != new and \ + if old <> new and \ self.whichindex[old] is not self.whichindex[new]: inew = self.whichindex[new] inew[len(inew):] = self.whichindex[old] @@ -1580,18 +1582,18 @@ class TexinfoParser: def do_printindex(self, args): words = args.split() for name in words: - if name in self.whichindex: + if self.whichindex.has_key(name): self.prindex(name) else: - print('*** No index named', repr(name)) + print '*** No index named', repr(name) def prindex(self, name): iscodeindex = (name not in self.noncodeindices) index = self.whichindex[name] if not index: return if self.debugging: - print('!'*self.debugging, '--- Generating', \ - self.indextitle[name], 'index') + print '!'*self.debugging, '--- Generating', \ + self.indextitle[name], 'index' # The node already provides a title index1 = [] junkprog = re.compile('^(@[a-z]+)?{') @@ -1614,7 +1616,7 @@ class TexinfoParser: for sortkey, key, node in index1: if (key, node) == (prevkey, prevnode): continue - if self.debugging > 1: print('!'*self.debugging, key, ':', node) + if self.debugging > 1: print '!'*self.debugging, key, ':', node self.write('<DT>') if iscodeindex: key = '@code{' + key + '}' if key != prevkey: @@ -1627,10 +1629,11 @@ class TexinfoParser: def report(self): if self.unknown: - print('--- Unrecognized commands ---') - cmds = sorted(self.unknown.keys()) + print '--- Unrecognized commands ---' + cmds = self.unknown.keys() + cmds.sort() for cmd in cmds: - print(cmd.ljust(20), self.unknown[cmd]) + print cmd.ljust(20), self.unknown[cmd] class TexinfoParserHTML3(TexinfoParser): @@ -1769,83 +1772,87 @@ class HTMLHelp: # PROJECT FILE try: - with open(projectfile, 'w') as fp: - print('[OPTIONS]', file=fp) - print('Auto Index=Yes', file=fp) - print('Binary TOC=No', file=fp) - print('Binary Index=Yes', file=fp) - print('Compatibility=1.1', file=fp) - print('Compiled file=' + resultfile + '', file=fp) - print('Contents file=' + contentfile + '', file=fp) - print('Default topic=' + defaulttopic + '', file=fp) - print('Error log file=ErrorLog.log', file=fp) - print('Index file=' + indexfile + '', file=fp) - print('Title=' + title + '', file=fp) - print('Display compile progress=Yes', file=fp) - print('Full-text search=Yes', file=fp) - print('Default window=main', file=fp) - print('', file=fp) - print('[WINDOWS]', file=fp) - print('main=,"' + contentfile + '","' + indexfile - + '","","",,,,,0x23520,222,0x1046,[10,10,780,560],' - '0xB0000,,,,,,0', file=fp) - print('', file=fp) - print('[FILES]', file=fp) - print('', file=fp) - self.dumpfiles(fp) - except IOError as msg: - print(projectfile, ':', msg) + fp = open(projectfile,'w') + print>>fp, '[OPTIONS]' + print>>fp, 'Auto Index=Yes' + print>>fp, 'Binary TOC=No' + print>>fp, 'Binary Index=Yes' + print>>fp, 'Compatibility=1.1' + print>>fp, 'Compiled file=' + resultfile + '' + print>>fp, 'Contents file=' + contentfile + '' + print>>fp, 'Default topic=' + defaulttopic + '' + print>>fp, 'Error log file=ErrorLog.log' + print>>fp, 'Index file=' + indexfile + '' + print>>fp, 'Title=' + title + '' + print>>fp, 'Display compile progress=Yes' + print>>fp, 'Full-text search=Yes' + print>>fp, 'Default window=main' + print>>fp, '' + print>>fp, '[WINDOWS]' + print>>fp, ('main=,"' + contentfile + '","' + indexfile + + '","","",,,,,0x23520,222,0x1046,[10,10,780,560],' + '0xB0000,,,,,,0') + print>>fp, '' + print>>fp, '[FILES]' + print>>fp, '' + self.dumpfiles(fp) + fp.close() + except IOError, msg: + print projectfile, ':', msg sys.exit(1) # CONTENT FILE try: - with open(contentfile, 'w') as fp: - print('<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">', file=fp) - print('<!-- This file defines the table of contents -->', file=fp) - print('<HTML>', file=fp) - print('<HEAD>', file=fp) - print('<meta name="GENERATOR" ' - 'content="Microsoft® HTML Help Workshop 4.1">', file=fp) - print('<!-- Sitemap 1.0 -->', file=fp) - print('</HEAD>', file=fp) - print('<BODY>', file=fp) - print(' <OBJECT type="text/site properties">', file=fp) - print(' <param name="Window Styles" value="0x800025">', file=fp) - print(' <param name="comment" value="title:">', file=fp) - print(' <param name="comment" value="base:">', file=fp) - print(' </OBJECT>', file=fp) - self.dumpnodes(fp) - print('</BODY>', file=fp) - print('</HTML>', file=fp) - except IOError as msg: - print(contentfile, ':', msg) + fp = open(contentfile,'w') + print>>fp, '<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">' + print>>fp, '<!-- This file defines the table of contents -->' + print>>fp, '<HTML>' + print>>fp, '<HEAD>' + print>>fp, ('<meta name="GENERATOR" ' + 'content="Microsoft® HTML Help Workshop 4.1">') + print>>fp, '<!-- Sitemap 1.0 -->' + print>>fp, '</HEAD>' + print>>fp, '<BODY>' + print>>fp, ' <OBJECT type="text/site properties">' + print>>fp, ' <param name="Window Styles" value="0x800025">' + print>>fp, ' <param name="comment" value="title:">' + print>>fp, ' <param name="comment" value="base:">' + print>>fp, ' </OBJECT>' + self.dumpnodes(fp) + print>>fp, '</BODY>' + print>>fp, '</HTML>' + fp.close() + except IOError, msg: + print contentfile, ':', msg sys.exit(1) # INDEX FILE try: - with open(indexfile, 'w') as fp: - print('<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">', file=fp) - print('<!-- This file defines the index -->', file=fp) - print('<HTML>', file=fp) - print('<HEAD>', file=fp) - print('<meta name="GENERATOR" ' - 'content="Microsoft® HTML Help Workshop 4.1">', file=fp) - print('<!-- Sitemap 1.0 -->', file=fp) - print('</HEAD>', file=fp) - print('<BODY>', file=fp) - print('<OBJECT type="text/site properties">', file=fp) - print('</OBJECT>', file=fp) - self.dumpindex(fp) - print('</BODY>', file=fp) - print('</HTML>', file=fp) - except IOError as msg: - print(indexfile , ':', msg) + fp = open(indexfile ,'w') + print>>fp, '<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">' + print>>fp, '<!-- This file defines the index -->' + print>>fp, '<HTML>' + print>>fp, '<HEAD>' + print>>fp, ('<meta name="GENERATOR" ' + 'content="Microsoft® HTML Help Workshop 4.1">') + print>>fp, '<!-- Sitemap 1.0 -->' + print>>fp, '</HEAD>' + print>>fp, '<BODY>' + print>>fp, '<OBJECT type="text/site properties">' + print>>fp, '</OBJECT>' + self.dumpindex(fp) + print>>fp, '</BODY>' + print>>fp, '</HTML>' + fp.close() + except IOError, msg: + print indexfile , ':', msg sys.exit(1) def dumpfiles(self, outfile=sys.stdout): - filelist = sorted(self.filenames.values()) + filelist = self.filenames.values() + filelist.sort() for filename in filelist: - print(filename, file=outfile) + print>>outfile, filename def dumpnodes(self, outfile=sys.stdout): self.dumped = {} @@ -1853,10 +1860,10 @@ class HTMLHelp: nodename, dummy, dummy, dummy, dummy = self.nodelist[0] self.topnode = nodename - print('<UL>', file=outfile) + print>>outfile, '<UL>' for node in self.nodelist: self.dumpnode(node,0,outfile) - print('</UL>', file=outfile) + print>>outfile, '</UL>' def dumpnode(self, node, indent=0, outfile=sys.stdout): if node: @@ -1865,16 +1872,16 @@ class HTMLHelp: self.current = nodename # Have we been dumped already? - if nodename in self.dumped: + if self.dumped.has_key(nodename): return self.dumped[nodename] = 1 # Print info for this node - print(' '*indent, end=' ', file=outfile) - print('<LI><OBJECT type="text/sitemap">', end=' ', file=outfile) - print('<param name="Name" value="' + nodename +'">', end=' ', file=outfile) - print('<param name="Local" value="'+ filename +'">', end=' ', file=outfile) - print('</OBJECT>', file=outfile) + print>>outfile, ' '*indent, + print>>outfile, '<LI><OBJECT type="text/sitemap">', + print>>outfile, '<param name="Name" value="' + nodename +'">', + print>>outfile, '<param name="Local" value="'+ filename +'">', + print>>outfile, '</OBJECT>' # Does this node have menu items? try: @@ -1887,13 +1894,13 @@ class HTMLHelp: if menu: currentnode = self.current if currentnode != self.topnode: # XXX this is a hack - print(' '*indent + '<UL>', file=outfile) + print>>outfile, ' '*indent + '<UL>' indent += 2 for item in menu: menunode = self.getnode(item) self.dumpnode(menunode,indent,outfile) if currentnode != self.topnode: # XXX this is a hack - print(' '*indent + '</UL>', file=outfile) + print>>outfile, ' '*indent + '</UL>' indent -= 2 def getnode(self, nodename): @@ -1907,16 +1914,16 @@ class HTMLHelp: # (args,nodename) == (key,location) def dumpindex(self, outfile=sys.stdout): - print('<UL>', file=outfile) + print>>outfile, '<UL>' for (key,location) in self.indexlist: key = self.codeexpand(key) location = makefile(location) location = self.dirname + '/' + location - print('<LI><OBJECT type="text/sitemap">', end=' ', file=outfile) - print('<param name="Name" value="' + key + '">', end=' ', file=outfile) - print('<param name="Local" value="' + location + '">', end=' ', file=outfile) - print('</OBJECT>', file=outfile) - print('</UL>', file=outfile) + print>>outfile, '<LI><OBJECT type="text/sitemap">', + print>>outfile, '<param name="Name" value="' + key + '">', + print>>outfile, '<param name="Local" value="' + location + '">', + print>>outfile, '</OBJECT>' + print>>outfile, '</UL>' def codeexpand(self, line): co = self.codeprog.match(line) @@ -1993,7 +2000,7 @@ def fixfunnychars(addr): def increment(s): if not s: return '1' - for sequence in string.digits, string.ascii_lowercase, string.ascii_uppercase: + for sequence in string.digits, string.lowercase, string.uppercase: lastc = s[-1] if lastc in sequence: i = sequence.index(lastc) + 1 @@ -2033,9 +2040,9 @@ def test(): if sys.argv[1] == '-H': helpbase = sys.argv[2] del sys.argv[1:3] - if len(sys.argv) != 3: - print('usage: texi2hh [-d [-d]] [-p] [-c] [-3] [-H htmlhelp]', \ - 'inputfile outputdirectory') + if len(sys.argv) <> 3: + print 'usage: texi2hh [-d [-d]] [-p] [-c] [-3] [-H htmlhelp]', \ + 'inputfile outputdirectory' sys.exit(2) if html3: @@ -2056,12 +2063,12 @@ def test(): try: fp = open(file, 'r') - except IOError as msg: - print(file, ':', msg) + except IOError, msg: + print file, ':', msg sys.exit(1) - with fp: - parser.parse(fp) + parser.parse(fp) + fp.close() parser.report() htmlhelp.finalize() |