aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/Tools/scripts/texi2html.py
diff options
context:
space:
mode:
Diffstat (limited to 'Tools/scripts/texi2html.py')
-rwxr-xr-xTools/scripts/texi2html.py307
1 files changed, 152 insertions, 155 deletions
diff --git a/Tools/scripts/texi2html.py b/Tools/scripts/texi2html.py
index 57db166df1e..af2147a76bb 100755
--- a/Tools/scripts/texi2html.py
+++ b/Tools/scripts/texi2html.py
@@ -1,4 +1,4 @@
-#! /usr/bin/env python
+#! /usr/bin/env python3
# Convert GNU texinfo files into HTML, one file per node.
# Based on Texinfo 2.14.
@@ -114,7 +114,8 @@ class HTMLNode:
self.lines = []
def write(self, *lines):
- map(self.lines.append, lines)
+ for line in lines:
+ self.lines.append(line)
def flush(self):
fp = open(self.dirname + '/' + makefile(self.name), 'w')
@@ -173,7 +174,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 +257,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 +276,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 +307,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 +319,7 @@ class TexinfoParser:
# Start saving text in a buffer instead of writing it to a file
def startsaving(self):
- if self.savetext <> None:
+ if self.savetext != None:
self.savestack.append(self.savetext)
# print '*** Recursively saving text, expect trouble'
self.savetext = ''
@@ -338,9 +339,9 @@ class TexinfoParser:
try:
text = ''.join(args)
except:
- print args
+ print(args)
raise TypeError
- if self.savetext <> None:
+ if self.savetext != None:
self.savetext = self.savetext + text
elif self.nodefp:
self.nodefp.write(text)
@@ -349,8 +350,8 @@ class TexinfoParser:
# Complete the current node -- write footnotes and close file
def endnode(self):
- if self.savetext <> 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 +362,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 +383,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,
- if accu: print accu[0][:30],
- if accu[0][30:] or accu[1:]: print '...',
- print
+ 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()
if self.inmenu():
# XXX should be done differently
for line in accu:
@@ -461,7 +462,7 @@ class TexinfoParser:
continue
if c == '}':
if not stack:
- print '*** Unmatched }'
+ print('*** Unmatched }')
self.write('}')
continue
cmd = stack[-1]
@@ -473,9 +474,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 +510,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 not self.unknown.has_key(cmd):
+ if cmd not in self.unknown:
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 not self.unknown.has_key(cmd):
+ if cmd not in self.unknown:
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 not self.unknown.has_key(cmd):
+ if cmd not in self.unknown:
self.unknown[cmd] = 1
else:
self.unknown[cmd] = self.unknown[cmd] + 1
@@ -554,10 +555,10 @@ class TexinfoParser:
file = os.path.join(self.includedir, file)
try:
fp = open(file, 'r')
- except IOError, msg:
- print '*** Can\'t open include file', repr(file)
+ except IOError as msg:
+ print('*** Can\'t open include file', repr(file))
return
- print '!'*self.debugging, '--> file', repr(file)
+ print('!'*self.debugging, '--> file', repr(file))
save_done = self.done
save_skip = self.skip
save_stack = self.stack
@@ -568,7 +569,7 @@ class TexinfoParser:
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 +765,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 "", \
@@ -871,8 +872,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 +891,8 @@ class TexinfoParser:
func(args)
def unknown_cmd(self, cmd, args):
- print '*** unknown', '@' + cmd, args
- if not self.unknown.has_key(cmd):
+ print('*** unknown', '@' + cmd, args)
+ if cmd not in self.unknown:
self.unknown[cmd] = 1
else:
self.unknown[cmd] = self.unknown[cmd] + 1
@@ -899,11 +900,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 +916,8 @@ class TexinfoParser:
def unknown_end(self, cmd):
cmd = 'end ' + cmd
- print '*** unknown', '@' + cmd
- if not self.unknown.has_key(cmd):
+ print('*** unknown', '@' + cmd)
+ if cmd not in self.unknown:
self.unknown[cmd] = 1
else:
self.unknown[cmd] = self.unknown[cmd] + 1
@@ -953,8 +954,7 @@ class TexinfoParser:
self.values[args] = None
def bgn_ifset(self, args):
- if args not in self.values.keys() \
- or self.values[args] is None:
+ if args not in self.values or self.values[args] is None:
self.skip = self.skip + 1
self.stackinfo[len(self.stack)] = 1
else:
@@ -965,11 +965,10 @@ 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.keys() \
- and self.values[args] is not None:
+ if args in self.values and self.values[args] is not None:
self.skip = self.skip + 1
self.stackinfo[len(self.stack)] = 1
else:
@@ -980,17 +979,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.keys():
+ if key in self.values:
self.write(self.values[key])
else:
- print '*** Undefined value: ', key
+ print('*** Undefined value: ', key)
# --- Beginning a file ---
@@ -1051,10 +1050,10 @@ class TexinfoParser:
self.nodelinks = parts
[name, next, prev, up] = parts[:4]
file = self.dirname + '/' + makefile(name)
- if self.filenames.has_key(file):
- print '*** Filename already in use: ', file
+ if file in self.filenames:
+ 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
@@ -1169,7 +1168,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
@@ -1443,7 +1442,7 @@ class TexinfoParser:
else:
# some other character, e.g. '-'
args = self.itemarg + ' ' + args
- if self.itemnumber <> None:
+ if self.itemnumber != None:
args = self.itemnumber + '. ' + args
self.itemnumber = increment(self.itemnumber)
if self.stack and self.stack[-1] == 'table':
@@ -1542,14 +1541,14 @@ class TexinfoParser:
self.indextitle['vr'] = 'Variable'
#
self.whichindex = {}
- for name in self.indextitle.keys():
+ for name in self.indextitle:
self.whichindex[name] = []
def user_index(self, name, args):
- if self.whichindex.has_key(name):
+ if name in self.whichindex:
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)
@@ -1564,15 +1563,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 not self.whichindex.has_key(old) or \
- not self.whichindex.has_key(new):
- print '*** bad key(s) in @synindex', args
+ if old not in self.whichindex or \
+ new not in self.whichindex:
+ 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]
@@ -1582,18 +1581,18 @@ class TexinfoParser:
def do_printindex(self, args):
words = args.split()
for name in words:
- if self.whichindex.has_key(name):
+ if name in self.whichindex:
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]+)?{')
@@ -1616,7 +1615,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:
@@ -1629,11 +1628,10 @@ class TexinfoParser:
def report(self):
if self.unknown:
- print '--- Unrecognized commands ---'
- cmds = self.unknown.keys()
- cmds.sort()
+ print('--- Unrecognized commands ---')
+ cmds = sorted(self.unknown.keys())
for cmd in cmds:
- print cmd.ljust(20), self.unknown[cmd]
+ print(cmd.ljust(20), self.unknown[cmd])
class TexinfoParserHTML3(TexinfoParser):
@@ -1773,86 +1771,85 @@ class HTMLHelp:
# PROJECT FILE
try:
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
+ 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')
- print>>fp, ''
- print>>fp, '[FILES]'
- print>>fp, ''
+ '0xB0000,,,,,,0', file=fp)
+ print('', file=fp)
+ print('[FILES]', file=fp)
+ print('', file=fp)
self.dumpfiles(fp)
fp.close()
- except IOError, msg:
- print projectfile, ':', msg
+ except IOError as msg:
+ print(projectfile, ':', msg)
sys.exit(1)
# CONTENT FILE
try:
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&reg; 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>'
+ 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&reg; 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>>fp, '</BODY>'
- print>>fp, '</HTML>'
+ print('</BODY>', file=fp)
+ print('</HTML>', file=fp)
fp.close()
- except IOError, msg:
- print contentfile, ':', msg
+ except IOError as msg:
+ print(contentfile, ':', msg)
sys.exit(1)
# INDEX FILE
try:
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&reg; 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>'
+ 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&reg; 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>>fp, '</BODY>'
- print>>fp, '</HTML>'
+ print('</BODY>', file=fp)
+ print('</HTML>', file=fp)
fp.close()
- except IOError, msg:
- print indexfile , ':', msg
+ except IOError as msg:
+ print(indexfile , ':', msg)
sys.exit(1)
def dumpfiles(self, outfile=sys.stdout):
- filelist = self.filenames.values()
- filelist.sort()
+ filelist = sorted(self.filenames.values())
for filename in filelist:
- print>>outfile, filename
+ print(filename, file=outfile)
def dumpnodes(self, outfile=sys.stdout):
self.dumped = {}
@@ -1860,10 +1857,10 @@ class HTMLHelp:
nodename, dummy, dummy, dummy, dummy = self.nodelist[0]
self.topnode = nodename
- print>>outfile, '<UL>'
+ print('<UL>', file=outfile)
for node in self.nodelist:
self.dumpnode(node,0,outfile)
- print>>outfile, '</UL>'
+ print('</UL>', file=outfile)
def dumpnode(self, node, indent=0, outfile=sys.stdout):
if node:
@@ -1872,16 +1869,16 @@ class HTMLHelp:
self.current = nodename
# Have we been dumped already?
- if self.dumped.has_key(nodename):
+ if nodename in self.dumped:
return
self.dumped[nodename] = 1
# Print info for this node
- 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>'
+ 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)
# Does this node have menu items?
try:
@@ -1894,13 +1891,13 @@ class HTMLHelp:
if menu:
currentnode = self.current
if currentnode != self.topnode: # XXX this is a hack
- print>>outfile, ' '*indent + '<UL>'
+ print(' '*indent + '<UL>', file=outfile)
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>>outfile, ' '*indent + '</UL>'
+ print(' '*indent + '</UL>', file=outfile)
indent -= 2
def getnode(self, nodename):
@@ -1914,16 +1911,16 @@ class HTMLHelp:
# (args,nodename) == (key,location)
def dumpindex(self, outfile=sys.stdout):
- print>>outfile, '<UL>'
+ print('<UL>', file=outfile)
for (key,location) in self.indexlist:
key = self.codeexpand(key)
location = makefile(location)
location = self.dirname + '/' + location
- 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>'
+ 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)
def codeexpand(self, line):
co = self.codeprog.match(line)
@@ -2000,7 +1997,7 @@ def fixfunnychars(addr):
def increment(s):
if not s:
return '1'
- for sequence in string.digits, string.lowercase, string.uppercase:
+ for sequence in string.digits, string.ascii_lowercase, string.ascii_uppercase:
lastc = s[-1]
if lastc in sequence:
i = sequence.index(lastc) + 1
@@ -2040,9 +2037,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:
@@ -2063,8 +2060,8 @@ def test():
try:
fp = open(file, 'r')
- except IOError, msg:
- print file, ':', msg
+ except IOError as msg:
+ print(file, ':', msg)
sys.exit(1)
parser.parse(fp)