]> granicus.if.org Git - python/commitdiff
Massive changes. Fewer warnings from the Python Library Reference. Still
authorFred Drake <fdrake@acm.org>
Tue, 17 Feb 1998 05:54:46 +0000 (05:54 +0000)
committerFred Drake <fdrake@acm.org>
Tue, 17 Feb 1998 05:54:46 +0000 (05:54 +0000)
messy, but the thing seems to be working without bombing completely today.
Formatting lib.texi with TeX doesn't seem to do too badly, either!

Info formatting isn't quite there; that might just have to disappear this
time.

Doc/partparse.py
Doc/tools/partparse.py

index fd71ff6414664f302f2b55019c20efbfbc6cef51..8fdd95b1dd263897e0ca78ce5dfc9fca04ebaed8 100644 (file)
 #     I don't want to be the schmuck who ends up re-writting it!
 #
 # -fld
+#
+# (sometime later...)
+#
+#  Ok, I've re-worked substantial chunks of this.  It's only getting worse.
+#     It just might be gone before the next source release.  (Yeah!)
+#
+# -fld
 
 import sys, string, regex, getopt, os
 
 from types import IntType, ListType, StringType, TupleType
 
+release_version = sys.version[:3]
+
 # Different parse modes for phase 1
 MODE_REGULAR = 0
 MODE_VERBATIM = 1
@@ -829,7 +838,7 @@ class Wobj:
 # ignore these commands
 ignoredcommands = ('bcode', 'ecode', 'hline', 'small', '/')
 # map commands like these to themselves as plaintext
-wordsselves = ('UNIX', 'ABC', 'C', 'ASCII', 'EOF', 'LaTeX')
+wordsselves = ('UNIX', 'ABC', 'C', 'ASCII', 'EOF', 'LaTeX', 'POSIX')
 # \{ --> {,  \} --> }, etc
 themselves = ('{', '}', ',', '.', '@', ' ', '\n') + wordsselves
 # these ones also themselves (see argargs macro in myformat.sty)
@@ -837,7 +846,7 @@ inargsselves = (',', '[', ']', '(', ')')
 # this is how *I* would show the difference between emph and strong
 #  code 1 means: fold to uppercase
 markcmds = {'code': ('', ''), 'var': 1, 'emph': ('_', '_'),
-         'strong': ('*', '*')}
+           'strong': ('*', '*')}
 
 # recognise patter {\FONTCHANGE-CMD TEXT} to \MAPPED-FC-CMD{TEXT}
 fontchanges = {'rm': 'r', 'it': 'i', 'em': 'emph', 'bf': 'b', 'tt': 't'}
@@ -1033,7 +1042,7 @@ enumeratesymbols = ['1', 'A', 'a']
 ## this routine will be called on \begin{funcdesc}{NAME}{ARGS}
 ##   or \funcline{NAME}{ARGS}
 ##
-def do_funcdesc(length, buf, pp, i):
+def do_funcdesc(length, buf, pp, i, index=1):
     startpoint = i-1
     ch = pp[startpoint]
     wh = ch.where
@@ -1114,9 +1123,8 @@ def do_excdesc(length, buf, pp, i):
        cat_class = 'exception'
        class_class = string.join(idxsi[2:])
     elif idxsi == ['built-in', 'exception', 'base', 'class']:
-       command = 'defcv'
-       cat_class = 'exception'
-       class_class = "exception base class"
+       command = 'defvr'
+       cat_class = 'exception base class'
     else:
        raise error, 'don\'t know what to do with indexsubitem ' + `idxsi`
 
@@ -1136,7 +1144,7 @@ def do_excdesc(length, buf, pp, i):
     return length, i
 
 ## same for datadesc or dataline...
-def do_datadesc(length, buf, pp, i):
+def do_datadesc(length, buf, pp, i, index=1):
     startpoint = i-1
     ch = pp[startpoint]
     wh = ch.where
@@ -1146,24 +1154,17 @@ def do_datadesc(length, buf, pp, i):
     length = length - (newi-i)
 
     idxsi = hist.indexsubitem  # words
-    command = ''
-    cat_class = ''
+    command = 'defcv'
+    cat_class = 'data'
     class_class = ''
     if idxsi[-1] in ('attribute', 'option'):
-       command = 'defcv'
        cat_class = idxsi[-1]
        class_class = string.join(idxsi[:-1])
     elif len(idxsi) == 3 and idxsi[:2] == ['in', 'module']:
-       command = 'defcv'
-       cat_class = 'data'
        class_class = string.join(idxsi[1:])
     elif len(idxsi) == 4 and idxsi[:3] == ['data', 'in', 'module']:
-       command = 'defcv'
-       cat_class = 'data'
        class_class = string.join(idxsi[2:])
     else:
-       command = 'defcv'
-       cat_class = 'data'
        class_class = string.join(idxsi)
 
     ch.chtype = chunk_type[CSLINE]
@@ -1194,8 +1195,7 @@ def do_opcodedesc(length, buf, pp, i):
     ch.chtype = CSLINE
     ch.data = "deffn"
 
-    cslinearg = [#chunk(GROUP, wh, [chunk(PLAIN, wh, "exception")]),
-                chunk(PLAIN, wh, 'exception '),
+    cslinearg = [chunk(PLAIN, wh, 'byte\ code\ instruction'),
                 chunk(GROUP, wh, [chunk(PLAIN, wh, "byte code instruction")]),
                 chunk(PLAIN, wh, ' '),
                 dataname,
@@ -1263,26 +1263,35 @@ def changeit(buf, pp):
 
        if ch.chtype == chunk_type[GROUP]:
            # check for {\em ...} constructs
-           if ch.data and \
-              ch.data[0].chtype == chunk_type[CSNAME] and \
-              fontchanges.has_key(s(buf, ch.data[0].data)):
-               k = s(buf, ch.data[0].data)
-               del ch.data[0]
+           data = ch.data
+           if data and \
+              data[0].chtype == chunk_type[CSNAME] and \
+              fontchanges.has_key(s(buf, data[0].data)):
+               k = s(buf, data[0].data)
+               del data[0]
                pp.insert(i-1, chunk(CSNAME, ch.where, fontchanges[k]))
                length, i = length+1, i+1
 
-           elif ch.data:
-               k = s(buf, ch.data[0].data)
-               if k == "fulllineitems":
-                   del ch.data[0]
-                   data = ch.data
-                   pp[i-1:i] = data
-                   i = i - 1
-                   length = length + len(data) - 1
-                   continue
+           elif data:
+               if len(data) \
+                  and data[0].chtype == chunk_type[GROUP] \
+                  and len(data[0].data) \
+                  and data[0].data[0].chtype == chunk_type[CSNAME] \
+                  and s(buf, data[0].data[0].data) == 'e':
+                   data[0] = data[0].data[0]
+                   print "invoking \\e magic group transform..."
+               else:
+##                 print "GROUP -- ch.data[0].data =", ch.data[0].data
+                   k = s(buf, data[0].data)
+                   if k == "fulllineitems":
+                       del data[0]
+                       pp[i-1:i] = data
+                       i = i - 1
+                       length = length + len(data) - 1
+                       continue
 
            # recursively parse the contents of the group
-           changeit(buf, ch.data)
+           changeit(buf, data)
 
        elif ch.chtype == chunk_type[IF]:
            # \if...
@@ -1325,24 +1334,27 @@ def changeit(buf, pp):
                          chunk(GROUP, ch.where, [])]
                length, i = length+2, i+2
 
-           elif envname == 'itemize':
+           elif envname in ('itemize', 'list'):
                if hist.itemizenesting > len(itemizesymbols):
                    raise error, 'too deep itemize nesting'
+               if envname == 'list':
+                   del pp[i:i+2]
+                   length = length - 2
                ingroupch = [chunk(CSNAME, ch.where,
-                         itemizesymbols[hist.itemizenesting])]
+                                  itemizesymbols[hist.itemizenesting])]
                hist.itemizenesting = hist.itemizenesting + 1
                pp[i:i] = [chunk(CSLINE, ch.where, 'itemize'),
-                         chunk(GROUP, ch.where, ingroupch)]
+                          chunk(GROUP, ch.where, ingroupch)]
                length, i = length+2, i+2
 
            elif envname == 'enumerate':
                if hist.enumeratenesting > len(enumeratesymbols):
                    raise error, 'too deep enumerate nesting'
                ingroupch = [chunk(PLAIN, ch.where,
-                         enumeratesymbols[hist.enumeratenesting])]
+                                  enumeratesymbols[hist.enumeratenesting])]
                hist.enumeratenesting = hist.enumeratenesting + 1
                pp[i:i] = [chunk(CSLINE, ch.where, 'enumerate'),
-                         chunk(GROUP, ch.where, ingroupch)]
+                          chunk(GROUP, ch.where, ingroupch)]
                length, i = length+2, i+2
 
            elif envname == 'description':
@@ -1408,20 +1420,22 @@ def changeit(buf, pp):
                    raise 'STILL, SOMETHING wrong', `i`
 
 
-           elif envname == 'funcdesc':
+           elif envname in ('funcdesc', 'funcdescni'):
                pp.insert(i, chunk(PLAIN, ch.where, ''))
                i, length = i+1, length+1
-               length, i = do_funcdesc(length, buf, pp, i)
+               length, i = do_funcdesc(length, buf, pp, i,
+                                       envname=="funcdesc")
 
            elif envname == 'excdesc':
                pp.insert(i, chunk(PLAIN, ch.where, ''))
                i, length = i+1, length+1
                length, i = do_excdesc(length, buf, pp, i)
 
-           elif envname == 'datadesc':
+           elif envname in ('datadesc', 'datadescni'):
                pp.insert(i, chunk(PLAIN, ch.where, ''))
                i, length = i+1, length+1
-               length, i = do_datadesc(length, buf, pp, i)
+               length, i = do_datadesc(length, buf, pp, i,
+                                       envname=="datadesc")
 
            elif envname == 'opcodedesc':
                pp.insert(i, chunk(PLAIN, ch.where, ''))
@@ -1458,7 +1472,7 @@ def changeit(buf, pp):
                           chunk(GROUP, ch.where, [
                               chunk(PLAIN, ch.where, 'example')])]
                i, length = i+2, length+2
-           elif envname == 'itemize':
+           elif envname in ('itemize', 'list'):
                hist.itemizenesting = hist.itemizenesting - 1
                pp[i:i] = [chunk(CSLINE, ch.where, 'end'),
                           chunk(GROUP, ch.where, [
@@ -1483,7 +1497,8 @@ def changeit(buf, pp):
                pp.insert(i, chunk(DENDLINE, ch.where, '\n'))
                i, length = i+1, length+1
 
-           elif envname in ('funcdesc', 'excdesc', 'datadesc'):
+           elif envname in ('funcdesc', 'excdesc', 'datadesc',
+                            'funcdescni', 'datadescni'):
                pp[i:i] = [chunk(CSLINE, ch.where, 'end'),
                           chunk(GROUP, ch.where, [
                               chunk(PLAIN, ch.where, hist.command)])]
@@ -1546,30 +1561,41 @@ def changeit(buf, pp):
                # \, --> , \[ --> [, \] --> ]
                ch.chtype = chunk_type[PLAIN]
 
-           elif s_buf_data == 'renewcommand':
-               # \renewcommand{\indexsubitem}....
-               i, length = i-1, length-1
-               del pp[i]
-               length, newi = getnextarg(length, buf, pp, i)
-               if newi-i == 1 \
-                         and i < length \
-                         and pp[i].chtype == chunk_type[CSNAME] \
-                         and s(buf, pp[i].data) == 'indexsubitem':
-                   del pp[i:newi]
-                   length = length - (newi-i)
-                   length, newi = getnextarg(length, buf, pp, i)
-                   text = flattext(buf, pp[i:newi])
-                   if text[:1] != '(' or text[-1:] != ')':
-                       raise error, \
-                             'expected indexsubitem enclosed in parenteses'
-                   words = string.split(text[1:-1])
-                   hist.indexsubitem = words
-##                 print 'set hist.indexsubitem =', words
-                   del text, words
-               else:
-                   print 'WARNING: renewcommand with unsupported arg removed'
-               del pp[i:newi]
-               length = length - (newi-i)
+           elif s_buf_data == 'setindexsubitem':
+               stuff = pp[i].data
+               if len(stuff) != 1:
+                   raise error, "parameter to \\setindexsubitem{} too long"
+               if pp[i].chtype != chunk_type[GROUP]:
+                   raise error, "bad chunk type following \\setindexsubitem" \
+                         "\nexpected GROUP, got " + str(ch.chtype)
+               text = s(buf, stuff[0].data)
+               if text[:1] != '(' or text[-1:] != ')':
+                   raise error, \
+                         'expected indexsubitem enclosed in parenteses'
+               hist.indexsubitem = string.split(text[1:-1])
+               del stuff, text
+               del pp[i-1:i+1]
+               i = i - 1
+               length = length - 2
+
+           elif s_buf_data == 'newcommand':
+               print "ignoring definition of \\" + s(buf, pp[i].data[0].data)
+               del pp[i-1:i+2]
+               i = i - 1
+               length = length - 3
+
+           elif s_buf_data == 'mbox':
+               stuff = pp[i].data
+               pp[i-1:i+1] = stuff
+               i = i - 1
+               length = length + len(stuff) - 2
+
+           elif s_buf_data == 'version':
+               ch.chtype = chunk_type[PLAIN]
+               ch.data = release_version
+
+           elif s_buf_data == 'program':
+               ch.data = "strong"
 
            elif s_buf_data == "fulllineitems":
                del pp[i-1]
@@ -1641,7 +1667,7 @@ def changeit(buf, pp):
                    pp.insert(i, chunk(GROUP, ch.where, []))
                    i, length = i+1, length+1
            elif s_buf_data in themselves:
-               # \UNIX --> UNIX
+               # \UNIX --> &UNIX;
                ch.chtype = chunk_type[PLAIN]
                if i != length \
                          and pp[i].chtype == chunk_type[GROUP] \
@@ -1651,6 +1677,12 @@ def changeit(buf, pp):
            elif s_buf_data in for_texi:
                pass
 
+           elif s_buf_data == 'manpage':
+               ch.data = 'emph'
+               sect = s(buf, pp[i+1].data[0].data)
+               pp[i+1].data = "(%s)" % sect
+               pp[i+1].chtype = chunk_type[PLAIN]
+
            elif s_buf_data == 'e':
                # "\e" --> "\"
                ch.data = '\\'
@@ -1661,10 +1693,6 @@ def changeit(buf, pp):
                # @item @<cts. of itemargmacro>{a1}
                #  a2 [ -- a3]
                #
-               ##print 'LINEIIIIII!!!!!!!'
-##                             wobj = Wobj()
-##                             dumpit(buf, wobj.write, pp[i-1:i+5])
-##                             print '--->' + wobj.data + '<----'
                if not hist.inenv:
                    raise error, 'no environment for lineiii'
                if (hist.inenv[0] != 'tableiii') and \
@@ -1679,10 +1707,6 @@ def changeit(buf, pp):
                             chunk(GROUP, 0, pp[i:newi])]
                del pp[i:newi]
                length = length - (newi-i)
-##                             print 'ITEM ARG: --->',
-##                             wobj = Wobj()
-##                             dumpit(buf, wobj.write, ingroupch)
-##                             print wobj.data, '<---'
                pp.insert(i, chunk(GROUP, ch.where, ingroupch))
                grouppos = i
                i, length = i+1, length+1
@@ -1693,11 +1717,6 @@ def changeit(buf, pp):
                    pp.insert(i, chunk(PLAIN, ch.where, '  ---  '))
                    i = newi + 1
                    length = length + 1
-##                                     pp[grouppos].data = pp[grouppos].data \
-##                                               + [chunk(PLAIN, ch.where, '  ')] \
-##                                               + pp[i:newi]
-##                                     del pp[i:newi]
-##                                     length = length - (newi-i)
                if length != len(pp):
                    raise 'IN LINEIII IS THE ERR', `i`
 
@@ -1708,7 +1727,8 @@ def changeit(buf, pp):
                ## also: remove commas and quotes
                ch.chtype = chunk_type[CSLINE]
                length, newi = getnextarg(length, buf, pp, i)
-               afternodenamecmd = next_command_p(length, buf, pp, newi, 'nodename')
+               afternodenamecmd = next_command_p(length, buf,
+                                                 pp, newi, 'nodename')
                if afternodenamecmd < 0:
                    cp1 = crcopy(pp[i:newi])
                    pp[i:newi] = [chunk(GROUP, ch.where, pp[i:newi])]
@@ -1716,7 +1736,8 @@ def changeit(buf, pp):
                    text = flattext(buf, cp1)
                    text = invent_node_names(text)
                else:
-                   length, endarg = getnextarg(length, buf, pp, afternodenamecmd)
+                   length, endarg = getnextarg(length, buf,
+                                               pp, afternodenamecmd)
                    cp1 = crcopy(pp[afternodenamecmd:endarg])
                    del pp[newi:endarg]
                    length = length - (endarg-newi)
@@ -1726,7 +1747,6 @@ def changeit(buf, pp):
                    text = flattext(buf, cp1)
                if text[-1] == '.':
                    text = text[:-1]
-##                             print 'FLATTEXT:', `text`
                if text in hist.nodenames:
                    print 'WARNING: node name ' + `text` + ' already used'
                    out.doublenodes.append(text)
@@ -1900,7 +1920,7 @@ def changeit(buf, pp):
                ch.data = 'cindex'
                length, newi = getnextarg(length, buf, pp, i)
                ingroupch = [chunk(CSNAME, wh, 'code'),
-                         chunk(GROUP, wh, pp[i:newi])]
+                            chunk(GROUP, wh, pp[i:newi])]
 
                del pp[i:newi]
                length = length - (newi-i)
@@ -2045,14 +2065,14 @@ def changeit(buf, pp):
                          chunk(GROUP, ch.where, ingroupch)]
                i, length = i+2, length+2
 
-##         elif s_buf_data == 'indexsubitem':
-##             ch.data = flattext(buf, [ch])
-##             ch.chtype = chunk_type[PLAIN]
-
            elif s_buf_data == 'seemodule':
                ch.data = "code"
+               # this is needed for just one of the input files... -sigh-
+               while pp[i+1].chtype == chunk_type[COMMENT]:
+                   i = i + 1
                data = pp[i+1].data
-               data.insert(0, chunk(PLAIN, ch.where, " ("))
+               oparen = chunk(PLAIN, ch.where, " (")
+               data.insert(0, oparen)
                data.append(chunk(PLAIN, ch.where, ")"))
                pp[i+1:i+2] = data
                length = length + len(data) - 1
@@ -2068,9 +2088,14 @@ def changeit(buf, pp):
                ch.chtype = PLAIN
                ch.data = "    "
 
-           elif s_buf_data in ('noindent', 'indexsubitem'):
+           elif s_buf_data in ('noindent', 'indexsubitem', 'footnote'):
                pass
 
+           elif s_buf_data in ('url', 'module', 'function', 'cfunction',
+                               'keyword', 'method', 'exception', 'constant',
+                               'email', 'class'):
+               ch.data = "code"
+
            elif s_buf_data == 'label':
                name = s(buf, pp[i].data[0].data)
                del pp[i-1:i+1]
@@ -2078,6 +2103,17 @@ def changeit(buf, pp):
                i = i - 1
                label_nodes[name] = hist.nodenames[-1]
 
+           elif s_buf_data == 'rfc':
+               ch.chtype = chunk_type[PLAIN]
+               ch.data = "RFC " + s(buf, pp[i].data[0].data)
+               del pp[i]
+               length = length - 1
+
+           elif s_buf_data == 'Large':
+               del pp[i-1]
+               i = i - 1
+               length = length - 1
+
            elif s_buf_data == 'ref':
                name = s(buf, pp[i].data[0].data)
                if label_nodes.has_key(name):
@@ -2220,12 +2256,13 @@ def dumpit(buf, wm, pp):
 
 
 def main():
+    global release_version
     outfile = None
     headerfile = 'texipre.dat'
     trailerfile = 'texipost.dat'
 
     try:
-       opts, args = getopt.getopt(sys.argv[1:], 'o:h:t:')
+       opts, args = getopt.getopt(sys.argv[1:], 'o:h:t:v:')
     except getopt.error:
        args = []
 
@@ -2238,6 +2275,7 @@ def main():
        if opt == '-o': outfile = arg
        if opt == '-h': headerfile = arg
        if opt == '-t': trailerfile = arg
+       if opt == '-v': release_version = arg
 
     if not outfile:
        root, ext = os.path.splitext(args[0])
index fd71ff6414664f302f2b55019c20efbfbc6cef51..8fdd95b1dd263897e0ca78ce5dfc9fca04ebaed8 100644 (file)
 #     I don't want to be the schmuck who ends up re-writting it!
 #
 # -fld
+#
+# (sometime later...)
+#
+#  Ok, I've re-worked substantial chunks of this.  It's only getting worse.
+#     It just might be gone before the next source release.  (Yeah!)
+#
+# -fld
 
 import sys, string, regex, getopt, os
 
 from types import IntType, ListType, StringType, TupleType
 
+release_version = sys.version[:3]
+
 # Different parse modes for phase 1
 MODE_REGULAR = 0
 MODE_VERBATIM = 1
@@ -829,7 +838,7 @@ class Wobj:
 # ignore these commands
 ignoredcommands = ('bcode', 'ecode', 'hline', 'small', '/')
 # map commands like these to themselves as plaintext
-wordsselves = ('UNIX', 'ABC', 'C', 'ASCII', 'EOF', 'LaTeX')
+wordsselves = ('UNIX', 'ABC', 'C', 'ASCII', 'EOF', 'LaTeX', 'POSIX')
 # \{ --> {,  \} --> }, etc
 themselves = ('{', '}', ',', '.', '@', ' ', '\n') + wordsselves
 # these ones also themselves (see argargs macro in myformat.sty)
@@ -837,7 +846,7 @@ inargsselves = (',', '[', ']', '(', ')')
 # this is how *I* would show the difference between emph and strong
 #  code 1 means: fold to uppercase
 markcmds = {'code': ('', ''), 'var': 1, 'emph': ('_', '_'),
-         'strong': ('*', '*')}
+           'strong': ('*', '*')}
 
 # recognise patter {\FONTCHANGE-CMD TEXT} to \MAPPED-FC-CMD{TEXT}
 fontchanges = {'rm': 'r', 'it': 'i', 'em': 'emph', 'bf': 'b', 'tt': 't'}
@@ -1033,7 +1042,7 @@ enumeratesymbols = ['1', 'A', 'a']
 ## this routine will be called on \begin{funcdesc}{NAME}{ARGS}
 ##   or \funcline{NAME}{ARGS}
 ##
-def do_funcdesc(length, buf, pp, i):
+def do_funcdesc(length, buf, pp, i, index=1):
     startpoint = i-1
     ch = pp[startpoint]
     wh = ch.where
@@ -1114,9 +1123,8 @@ def do_excdesc(length, buf, pp, i):
        cat_class = 'exception'
        class_class = string.join(idxsi[2:])
     elif idxsi == ['built-in', 'exception', 'base', 'class']:
-       command = 'defcv'
-       cat_class = 'exception'
-       class_class = "exception base class"
+       command = 'defvr'
+       cat_class = 'exception base class'
     else:
        raise error, 'don\'t know what to do with indexsubitem ' + `idxsi`
 
@@ -1136,7 +1144,7 @@ def do_excdesc(length, buf, pp, i):
     return length, i
 
 ## same for datadesc or dataline...
-def do_datadesc(length, buf, pp, i):
+def do_datadesc(length, buf, pp, i, index=1):
     startpoint = i-1
     ch = pp[startpoint]
     wh = ch.where
@@ -1146,24 +1154,17 @@ def do_datadesc(length, buf, pp, i):
     length = length - (newi-i)
 
     idxsi = hist.indexsubitem  # words
-    command = ''
-    cat_class = ''
+    command = 'defcv'
+    cat_class = 'data'
     class_class = ''
     if idxsi[-1] in ('attribute', 'option'):
-       command = 'defcv'
        cat_class = idxsi[-1]
        class_class = string.join(idxsi[:-1])
     elif len(idxsi) == 3 and idxsi[:2] == ['in', 'module']:
-       command = 'defcv'
-       cat_class = 'data'
        class_class = string.join(idxsi[1:])
     elif len(idxsi) == 4 and idxsi[:3] == ['data', 'in', 'module']:
-       command = 'defcv'
-       cat_class = 'data'
        class_class = string.join(idxsi[2:])
     else:
-       command = 'defcv'
-       cat_class = 'data'
        class_class = string.join(idxsi)
 
     ch.chtype = chunk_type[CSLINE]
@@ -1194,8 +1195,7 @@ def do_opcodedesc(length, buf, pp, i):
     ch.chtype = CSLINE
     ch.data = "deffn"
 
-    cslinearg = [#chunk(GROUP, wh, [chunk(PLAIN, wh, "exception")]),
-                chunk(PLAIN, wh, 'exception '),
+    cslinearg = [chunk(PLAIN, wh, 'byte\ code\ instruction'),
                 chunk(GROUP, wh, [chunk(PLAIN, wh, "byte code instruction")]),
                 chunk(PLAIN, wh, ' '),
                 dataname,
@@ -1263,26 +1263,35 @@ def changeit(buf, pp):
 
        if ch.chtype == chunk_type[GROUP]:
            # check for {\em ...} constructs
-           if ch.data and \
-              ch.data[0].chtype == chunk_type[CSNAME] and \
-              fontchanges.has_key(s(buf, ch.data[0].data)):
-               k = s(buf, ch.data[0].data)
-               del ch.data[0]
+           data = ch.data
+           if data and \
+              data[0].chtype == chunk_type[CSNAME] and \
+              fontchanges.has_key(s(buf, data[0].data)):
+               k = s(buf, data[0].data)
+               del data[0]
                pp.insert(i-1, chunk(CSNAME, ch.where, fontchanges[k]))
                length, i = length+1, i+1
 
-           elif ch.data:
-               k = s(buf, ch.data[0].data)
-               if k == "fulllineitems":
-                   del ch.data[0]
-                   data = ch.data
-                   pp[i-1:i] = data
-                   i = i - 1
-                   length = length + len(data) - 1
-                   continue
+           elif data:
+               if len(data) \
+                  and data[0].chtype == chunk_type[GROUP] \
+                  and len(data[0].data) \
+                  and data[0].data[0].chtype == chunk_type[CSNAME] \
+                  and s(buf, data[0].data[0].data) == 'e':
+                   data[0] = data[0].data[0]
+                   print "invoking \\e magic group transform..."
+               else:
+##                 print "GROUP -- ch.data[0].data =", ch.data[0].data
+                   k = s(buf, data[0].data)
+                   if k == "fulllineitems":
+                       del data[0]
+                       pp[i-1:i] = data
+                       i = i - 1
+                       length = length + len(data) - 1
+                       continue
 
            # recursively parse the contents of the group
-           changeit(buf, ch.data)
+           changeit(buf, data)
 
        elif ch.chtype == chunk_type[IF]:
            # \if...
@@ -1325,24 +1334,27 @@ def changeit(buf, pp):
                          chunk(GROUP, ch.where, [])]
                length, i = length+2, i+2
 
-           elif envname == 'itemize':
+           elif envname in ('itemize', 'list'):
                if hist.itemizenesting > len(itemizesymbols):
                    raise error, 'too deep itemize nesting'
+               if envname == 'list':
+                   del pp[i:i+2]
+                   length = length - 2
                ingroupch = [chunk(CSNAME, ch.where,
-                         itemizesymbols[hist.itemizenesting])]
+                                  itemizesymbols[hist.itemizenesting])]
                hist.itemizenesting = hist.itemizenesting + 1
                pp[i:i] = [chunk(CSLINE, ch.where, 'itemize'),
-                         chunk(GROUP, ch.where, ingroupch)]
+                          chunk(GROUP, ch.where, ingroupch)]
                length, i = length+2, i+2
 
            elif envname == 'enumerate':
                if hist.enumeratenesting > len(enumeratesymbols):
                    raise error, 'too deep enumerate nesting'
                ingroupch = [chunk(PLAIN, ch.where,
-                         enumeratesymbols[hist.enumeratenesting])]
+                                  enumeratesymbols[hist.enumeratenesting])]
                hist.enumeratenesting = hist.enumeratenesting + 1
                pp[i:i] = [chunk(CSLINE, ch.where, 'enumerate'),
-                         chunk(GROUP, ch.where, ingroupch)]
+                          chunk(GROUP, ch.where, ingroupch)]
                length, i = length+2, i+2
 
            elif envname == 'description':
@@ -1408,20 +1420,22 @@ def changeit(buf, pp):
                    raise 'STILL, SOMETHING wrong', `i`
 
 
-           elif envname == 'funcdesc':
+           elif envname in ('funcdesc', 'funcdescni'):
                pp.insert(i, chunk(PLAIN, ch.where, ''))
                i, length = i+1, length+1
-               length, i = do_funcdesc(length, buf, pp, i)
+               length, i = do_funcdesc(length, buf, pp, i,
+                                       envname=="funcdesc")
 
            elif envname == 'excdesc':
                pp.insert(i, chunk(PLAIN, ch.where, ''))
                i, length = i+1, length+1
                length, i = do_excdesc(length, buf, pp, i)
 
-           elif envname == 'datadesc':
+           elif envname in ('datadesc', 'datadescni'):
                pp.insert(i, chunk(PLAIN, ch.where, ''))
                i, length = i+1, length+1
-               length, i = do_datadesc(length, buf, pp, i)
+               length, i = do_datadesc(length, buf, pp, i,
+                                       envname=="datadesc")
 
            elif envname == 'opcodedesc':
                pp.insert(i, chunk(PLAIN, ch.where, ''))
@@ -1458,7 +1472,7 @@ def changeit(buf, pp):
                           chunk(GROUP, ch.where, [
                               chunk(PLAIN, ch.where, 'example')])]
                i, length = i+2, length+2
-           elif envname == 'itemize':
+           elif envname in ('itemize', 'list'):
                hist.itemizenesting = hist.itemizenesting - 1
                pp[i:i] = [chunk(CSLINE, ch.where, 'end'),
                           chunk(GROUP, ch.where, [
@@ -1483,7 +1497,8 @@ def changeit(buf, pp):
                pp.insert(i, chunk(DENDLINE, ch.where, '\n'))
                i, length = i+1, length+1
 
-           elif envname in ('funcdesc', 'excdesc', 'datadesc'):
+           elif envname in ('funcdesc', 'excdesc', 'datadesc',
+                            'funcdescni', 'datadescni'):
                pp[i:i] = [chunk(CSLINE, ch.where, 'end'),
                           chunk(GROUP, ch.where, [
                               chunk(PLAIN, ch.where, hist.command)])]
@@ -1546,30 +1561,41 @@ def changeit(buf, pp):
                # \, --> , \[ --> [, \] --> ]
                ch.chtype = chunk_type[PLAIN]
 
-           elif s_buf_data == 'renewcommand':
-               # \renewcommand{\indexsubitem}....
-               i, length = i-1, length-1
-               del pp[i]
-               length, newi = getnextarg(length, buf, pp, i)
-               if newi-i == 1 \
-                         and i < length \
-                         and pp[i].chtype == chunk_type[CSNAME] \
-                         and s(buf, pp[i].data) == 'indexsubitem':
-                   del pp[i:newi]
-                   length = length - (newi-i)
-                   length, newi = getnextarg(length, buf, pp, i)
-                   text = flattext(buf, pp[i:newi])
-                   if text[:1] != '(' or text[-1:] != ')':
-                       raise error, \
-                             'expected indexsubitem enclosed in parenteses'
-                   words = string.split(text[1:-1])
-                   hist.indexsubitem = words
-##                 print 'set hist.indexsubitem =', words
-                   del text, words
-               else:
-                   print 'WARNING: renewcommand with unsupported arg removed'
-               del pp[i:newi]
-               length = length - (newi-i)
+           elif s_buf_data == 'setindexsubitem':
+               stuff = pp[i].data
+               if len(stuff) != 1:
+                   raise error, "parameter to \\setindexsubitem{} too long"
+               if pp[i].chtype != chunk_type[GROUP]:
+                   raise error, "bad chunk type following \\setindexsubitem" \
+                         "\nexpected GROUP, got " + str(ch.chtype)
+               text = s(buf, stuff[0].data)
+               if text[:1] != '(' or text[-1:] != ')':
+                   raise error, \
+                         'expected indexsubitem enclosed in parenteses'
+               hist.indexsubitem = string.split(text[1:-1])
+               del stuff, text
+               del pp[i-1:i+1]
+               i = i - 1
+               length = length - 2
+
+           elif s_buf_data == 'newcommand':
+               print "ignoring definition of \\" + s(buf, pp[i].data[0].data)
+               del pp[i-1:i+2]
+               i = i - 1
+               length = length - 3
+
+           elif s_buf_data == 'mbox':
+               stuff = pp[i].data
+               pp[i-1:i+1] = stuff
+               i = i - 1
+               length = length + len(stuff) - 2
+
+           elif s_buf_data == 'version':
+               ch.chtype = chunk_type[PLAIN]
+               ch.data = release_version
+
+           elif s_buf_data == 'program':
+               ch.data = "strong"
 
            elif s_buf_data == "fulllineitems":
                del pp[i-1]
@@ -1641,7 +1667,7 @@ def changeit(buf, pp):
                    pp.insert(i, chunk(GROUP, ch.where, []))
                    i, length = i+1, length+1
            elif s_buf_data in themselves:
-               # \UNIX --> UNIX
+               # \UNIX --> &UNIX;
                ch.chtype = chunk_type[PLAIN]
                if i != length \
                          and pp[i].chtype == chunk_type[GROUP] \
@@ -1651,6 +1677,12 @@ def changeit(buf, pp):
            elif s_buf_data in for_texi:
                pass
 
+           elif s_buf_data == 'manpage':
+               ch.data = 'emph'
+               sect = s(buf, pp[i+1].data[0].data)
+               pp[i+1].data = "(%s)" % sect
+               pp[i+1].chtype = chunk_type[PLAIN]
+
            elif s_buf_data == 'e':
                # "\e" --> "\"
                ch.data = '\\'
@@ -1661,10 +1693,6 @@ def changeit(buf, pp):
                # @item @<cts. of itemargmacro>{a1}
                #  a2 [ -- a3]
                #
-               ##print 'LINEIIIIII!!!!!!!'
-##                             wobj = Wobj()
-##                             dumpit(buf, wobj.write, pp[i-1:i+5])
-##                             print '--->' + wobj.data + '<----'
                if not hist.inenv:
                    raise error, 'no environment for lineiii'
                if (hist.inenv[0] != 'tableiii') and \
@@ -1679,10 +1707,6 @@ def changeit(buf, pp):
                             chunk(GROUP, 0, pp[i:newi])]
                del pp[i:newi]
                length = length - (newi-i)
-##                             print 'ITEM ARG: --->',
-##                             wobj = Wobj()
-##                             dumpit(buf, wobj.write, ingroupch)
-##                             print wobj.data, '<---'
                pp.insert(i, chunk(GROUP, ch.where, ingroupch))
                grouppos = i
                i, length = i+1, length+1
@@ -1693,11 +1717,6 @@ def changeit(buf, pp):
                    pp.insert(i, chunk(PLAIN, ch.where, '  ---  '))
                    i = newi + 1
                    length = length + 1
-##                                     pp[grouppos].data = pp[grouppos].data \
-##                                               + [chunk(PLAIN, ch.where, '  ')] \
-##                                               + pp[i:newi]
-##                                     del pp[i:newi]
-##                                     length = length - (newi-i)
                if length != len(pp):
                    raise 'IN LINEIII IS THE ERR', `i`
 
@@ -1708,7 +1727,8 @@ def changeit(buf, pp):
                ## also: remove commas and quotes
                ch.chtype = chunk_type[CSLINE]
                length, newi = getnextarg(length, buf, pp, i)
-               afternodenamecmd = next_command_p(length, buf, pp, newi, 'nodename')
+               afternodenamecmd = next_command_p(length, buf,
+                                                 pp, newi, 'nodename')
                if afternodenamecmd < 0:
                    cp1 = crcopy(pp[i:newi])
                    pp[i:newi] = [chunk(GROUP, ch.where, pp[i:newi])]
@@ -1716,7 +1736,8 @@ def changeit(buf, pp):
                    text = flattext(buf, cp1)
                    text = invent_node_names(text)
                else:
-                   length, endarg = getnextarg(length, buf, pp, afternodenamecmd)
+                   length, endarg = getnextarg(length, buf,
+                                               pp, afternodenamecmd)
                    cp1 = crcopy(pp[afternodenamecmd:endarg])
                    del pp[newi:endarg]
                    length = length - (endarg-newi)
@@ -1726,7 +1747,6 @@ def changeit(buf, pp):
                    text = flattext(buf, cp1)
                if text[-1] == '.':
                    text = text[:-1]
-##                             print 'FLATTEXT:', `text`
                if text in hist.nodenames:
                    print 'WARNING: node name ' + `text` + ' already used'
                    out.doublenodes.append(text)
@@ -1900,7 +1920,7 @@ def changeit(buf, pp):
                ch.data = 'cindex'
                length, newi = getnextarg(length, buf, pp, i)
                ingroupch = [chunk(CSNAME, wh, 'code'),
-                         chunk(GROUP, wh, pp[i:newi])]
+                            chunk(GROUP, wh, pp[i:newi])]
 
                del pp[i:newi]
                length = length - (newi-i)
@@ -2045,14 +2065,14 @@ def changeit(buf, pp):
                          chunk(GROUP, ch.where, ingroupch)]
                i, length = i+2, length+2
 
-##         elif s_buf_data == 'indexsubitem':
-##             ch.data = flattext(buf, [ch])
-##             ch.chtype = chunk_type[PLAIN]
-
            elif s_buf_data == 'seemodule':
                ch.data = "code"
+               # this is needed for just one of the input files... -sigh-
+               while pp[i+1].chtype == chunk_type[COMMENT]:
+                   i = i + 1
                data = pp[i+1].data
-               data.insert(0, chunk(PLAIN, ch.where, " ("))
+               oparen = chunk(PLAIN, ch.where, " (")
+               data.insert(0, oparen)
                data.append(chunk(PLAIN, ch.where, ")"))
                pp[i+1:i+2] = data
                length = length + len(data) - 1
@@ -2068,9 +2088,14 @@ def changeit(buf, pp):
                ch.chtype = PLAIN
                ch.data = "    "
 
-           elif s_buf_data in ('noindent', 'indexsubitem'):
+           elif s_buf_data in ('noindent', 'indexsubitem', 'footnote'):
                pass
 
+           elif s_buf_data in ('url', 'module', 'function', 'cfunction',
+                               'keyword', 'method', 'exception', 'constant',
+                               'email', 'class'):
+               ch.data = "code"
+
            elif s_buf_data == 'label':
                name = s(buf, pp[i].data[0].data)
                del pp[i-1:i+1]
@@ -2078,6 +2103,17 @@ def changeit(buf, pp):
                i = i - 1
                label_nodes[name] = hist.nodenames[-1]
 
+           elif s_buf_data == 'rfc':
+               ch.chtype = chunk_type[PLAIN]
+               ch.data = "RFC " + s(buf, pp[i].data[0].data)
+               del pp[i]
+               length = length - 1
+
+           elif s_buf_data == 'Large':
+               del pp[i-1]
+               i = i - 1
+               length = length - 1
+
            elif s_buf_data == 'ref':
                name = s(buf, pp[i].data[0].data)
                if label_nodes.has_key(name):
@@ -2220,12 +2256,13 @@ def dumpit(buf, wm, pp):
 
 
 def main():
+    global release_version
     outfile = None
     headerfile = 'texipre.dat'
     trailerfile = 'texipost.dat'
 
     try:
-       opts, args = getopt.getopt(sys.argv[1:], 'o:h:t:')
+       opts, args = getopt.getopt(sys.argv[1:], 'o:h:t:v:')
     except getopt.error:
        args = []
 
@@ -2238,6 +2275,7 @@ def main():
        if opt == '-o': outfile = arg
        if opt == '-h': headerfile = arg
        if opt == '-t': trailerfile = arg
+       if opt == '-v': release_version = arg
 
     if not outfile:
        root, ext = os.path.splitext(args[0])