diff --git a/Doc/partparse.py b/Doc/partparse.py
index 36ffb6c..d3b850f 100644
--- a/Doc/partparse.py
+++ b/Doc/partparse.py
@@ -836,9 +836,10 @@
 	self.data = self.data + data
 
 # ignore these commands
-ignoredcommands = ('bcode', 'ecode', 'hline', 'small', '/')
+ignoredcommands = ('hline', 'small', '/', 'tableofcontents', 'Large')
 # map commands like these to themselves as plaintext
-wordsselves = ('UNIX', 'ABC', 'C', 'ASCII', 'EOF', 'LaTeX', 'POSIX')
+wordsselves = ('UNIX', 'ABC', 'C', 'ASCII', 'EOF', 'LaTeX', 'POSIX', 'TeX',
+	       'SliTeX')
 # \{ --> {,  \} --> }, etc
 themselves = ('{', '}', ',', '.', '@', ' ', '\n') + wordsselves
 # these ones also themselves (see argargs macro in myformat.sty)
@@ -851,10 +852,6 @@
 # recognise patter {\FONTCHANGE-CMD TEXT} to \MAPPED-FC-CMD{TEXT}
 fontchanges = {'rm': 'r', 'it': 'i', 'em': 'emph', 'bf': 'b', 'tt': 't'}
 
-# transparent for these commands
-for_texi = ('emph', 'var', 'strong', 'code', 'kbd', 'key', 'dfn', 'samp',
-	    'file', 'r', 'i', 't')
-
 
 # try to remove macros and return flat text
 def flattext(buf, pp):
@@ -874,11 +871,10 @@
 	    pass
 	elif ch.chtype == chunk_type[CSNAME]:
 	    s_buf_data = s(buf, ch.data)
-	    if s_buf_data in themselves or hist.inargs and s_buf_data in inargsselves:
+	    if convertible_csname(s_buf_data):
+		ch.chtype, ch.data, nix = conversion(s_buf_data)
+	    if hist.inargs and s_buf_data in inargsselves:
 		ch.chtype = chunk_type[PLAIN]
-	    elif s_buf_data == 'e':
-		ch.chtype = chunk_type[PLAIN]
-		ch.data = '\\'
 	    elif len(s_buf_data) == 1 \
 		      and s_buf_data in onlylatexspecial:
 		ch.chtype = chunk_type[PLAIN]
@@ -993,6 +989,7 @@
 def startchange():
     global hist, out
 
+    hist.chaptertype = "chapter"
     hist.inenv = []
     hist.nodenames = []
     hist.cindex = []
@@ -1013,17 +1010,42 @@
 # same for enumerate
 enumeratesymbols = ['1', 'A', 'a']
 
+# Map of things that convert one-to-one.  Each entry is a 3-tuple:
+#
+#	new_chtype, new_data, nix_trailing_empty_group
+#
 d = {}
+# add stuff that converts from one name to another:
 for name in ('url', 'module', 'function', 'cfunction',
 	     'keyword', 'method', 'exception', 'constant',
 	     'email', 'class', 'member', 'cdata', 'ctype',
-	     'member'):
-    d[name] = 'code'
-d['program'] = 'strong'
-d['sectcode'] = 'code'
+	     'member', 'sectcode', 'verb'):
+    d[name] = chunk_type[CSNAME], 'code', 0
+for name in ('emph', 'var', 'strong', 'code', 'kbd', 'key',
+	     'dfn', 'samp', 'file', 'r', 'i', 't'):
+    d[name] = chunk_type[CSNAME], name, 0
+d['program'] = chunk_type[CSNAME], 'strong', 0
+d['\\'] = chunk_type[CSNAME], '*', 0
+# add stuff that converts to text:
+for name in themselves:
+    d[name] = chunk_type[PLAIN], name, 0
+for name in wordsselves:
+    d[name] = chunk_type[PLAIN], name, 1
+for name in ',[]()':
+    d[name] = chunk_type[PLAIN], name, 0
+# a lot of these are LaTeX2e additions
+for name, value in [('quotedblbase', ',,'), ('quotesinglbase', ','),
+		    ('textquotedbl', '"'), ('LaTeXe', 'LaTeX2e'),
+		    ('e', '\\'), ('textquotedblleft', "``"),
+		    ('textquotedblright', "''"), ('textquoteleft', "`"),
+		    ('textquoteright', "'"), ('textbackslash', '\\'),
+		    ('textbar', '|'), ('textless', '<'),
+		    ('textgreater', '>'), ('textasciicircum', '^'),
+		    ('Cpp', 'C++'), ('copyright', '')]:
+    d[name] = chunk_type[PLAIN], value, 1
 convertible_csname = d.has_key
 conversion = d.get
-del d, name
+del d, name, value
 
 ##
 ## \begin{ {func,data,exc}desc }{name}...
@@ -1261,6 +1283,7 @@
     while 1:
 	# sanity check: length should always equal len(pp)
 	if len(pp) != length:
+	    print i, pp[i]
 	    raise 'FATAL', 'inconsistent length. thought ' + `length` + ', but should really be ' + `len(pp)`
 	if i >= length:
 	    break
@@ -1404,7 +1427,7 @@
 		    raise error, 'Sorry, expected plain text argument'
 		hist.itemargmacro = s(buf, pp[i].data)
 		if convertible_csname(hist.itemargmacro):
-		    hist.itemargmacro = conversion(hist.itemargmacro)
+		    hist.itemargmacro = conversion(hist.itemargmacro)[1]
 		del pp[i:newi]
 		length = length - (newi-i)
 
@@ -1466,7 +1489,7 @@
 		length = length + len(chunks) - 1
 		i = i + len(chunks) - 1
 
-	    elif envname in ('sloppypar', 'flushleft'):
+	    elif envname in ('sloppypar', 'flushleft', 'document'):
 		pass
 
 	    else:
@@ -1523,7 +1546,7 @@
 			       chunk(PLAIN, ch.where, "deffn")])]
 		i, length = i+2, length+2
 
-	    elif envname in ('seealso', 'sloppypar', 'flushleft'):
+	    elif envname in ('seealso', 'sloppypar', 'flushleft', 'document'):
 		pass
 
 	    else:
@@ -1541,9 +1564,11 @@
 		    pp[i:i+1]=cp + [
 			chunk(PLAIN, ch.where, ']')]
 		    length = length+len(cp)
+
 	    elif s_buf_data in ignoredcommands:
 		del pp[i-1]
 		i, length = i-1, length-1
+
 	    elif s_buf_data == '@' and \
 		      i != length and \
 		      pp[i].chtype == chunk_type[PLAIN] and \
@@ -1551,10 +1576,22 @@
 		# \@. --> \. --> @.
 		ch.data = '.'
 		del pp[i]
-		length = length-1
+		length = length - 1
+
+	    elif convertible_csname(s_buf_data):
+		ch.chtype, ch.data, nix = conversion(s_buf_data)
+		try:
+		    if nix and pp[i].chtype == chunk_type[GROUP] \
+		       and len(pp[i].data) == 0:
+			del pp[i]
+			length = length - 1
+		except IndexError:
+		    pass
+
 	    elif s_buf_data == '\\':
 		# \\ --> \* --> @*
 		ch.data = '*'
+
 	    elif len(s_buf_data) == 1 and \
 		      s_buf_data in onlylatexspecial:
 		ch.chtype = chunk_type[PLAIN]
@@ -1567,6 +1604,11 @@
 		    del pp[i]
 		    length = length-1
 
+	    elif s_buf_data == "appendix":
+		hist.chaptertype = "appendix"
+		del pp[i-1]
+		i, length = i-1, length-1
+
 	    elif hist.inargs and s_buf_data in inargsselves:
 		# This is the special processing of the
 		# arguments of the \begin{funcdesc}... or
@@ -1597,6 +1639,13 @@
 		i = i - 1
 		length = length - 3
 
+	    elif s_buf_data == 'renewcommand':
+		print "ignoring redefinition 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
@@ -1672,6 +1721,7 @@
 			  or pp[i].data != []:
 		    pp.insert(i, chunk(GROUP, ch.where, []))
 		    i, length = i+1, length+1
+
 	    elif s_buf_data in themselves:
 		# \UNIX --> &UNIX;
 		ch.chtype = chunk_type[PLAIN]
@@ -1680,8 +1730,14 @@
 			  and pp[i].data == []:
 		    del pp[i]
 		    length = length-1
-	    elif s_buf_data in for_texi:
-		pass
+
+## 	    elif s_buf_data == 'copyright':
+## 		if (pp[i].chtype == chunk_type[GROUP]
+## 		    and not pp[i].data):
+## 		    del pp[i]
+## 		    length = length - 1
+## 		del pp[i-1]
+## 		i, length = i-1, length-1
 
 	    elif s_buf_data == 'manpage':
 		ch.data = 'emph'
@@ -1689,10 +1745,6 @@
 		pp[i+1].data = "(%s)" % sect
 		pp[i+1].chtype = chunk_type[PLAIN]
 
-	    elif s_buf_data == 'e':
-		# "\e" --> "\"
-		ch.data = '\\'
-		ch.chtype = chunk_type[PLAIN]
 	    elif s_buf_data in ('lineiii', 'lineii'):
 		# This is the most tricky one
 		# \lineiii{a1}{a2}[{a3}] -->
@@ -1726,11 +1778,14 @@
 		if length != len(pp):
 		    raise 'IN LINEIII IS THE ERR', `i`
 
-	    elif s_buf_data in ('chapter', 'section', 'subsection', 'subsubsection'):
+	    elif s_buf_data in ('chapter', 'section',
+				'subsection', 'subsubsection'):
 		#\xxxsection{A} ---->
 		# @node A, , ,
 		# @xxxsection A
 		## also: remove commas and quotes
+		if s_buf_data == "chapter":
+		    ch.data = hist.chaptertype
 		ch.chtype = chunk_type[CSLINE]
 		length, newi = getnextarg(length, buf, pp, i)
 		afternodenamecmd = next_command_p(length, buf,
@@ -1915,7 +1970,7 @@
 		pp.insert(i, chunk(GROUP, ch.where, ingroupch))
 		length, i = length+1, i+1
 
-	    elif s_buf_data in ('stindex', 'kwindex'):
+	    elif s_buf_data == 'stindex':
 		# XXX must actually go to newindex st
 		what = (s_buf_data[:2] == "st") and "statement" or "keyword"
 		wh = ch.where
@@ -2091,12 +2146,13 @@
 		ch.chtype = PLAIN
 		ch.data = "    "
 
+	    elif s_buf_data in ('usepackage', 'input'):
+		del pp[i-1:i+1]
+		i, length = i-1, length-2
+
 	    elif s_buf_data in ('noindent', 'indexsubitem', 'footnote'):
 		pass
 
-	    elif convertible_csname(s_buf_data):
-		ch.data = conversion(s_buf_data)
-
 	    elif s_buf_data == 'label':
 		name = s(buf, pp[i].data[0].data)
 		del pp[i-1:i+1]
@@ -2110,11 +2166,6 @@
 		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):
@@ -2154,12 +2205,12 @@
 
 	if ch.chtype == chunk_type[CSNAME]:
 	    s_buf_data = s(buf, ch.data)
-            if s_buf_data == 'e':
-                wm('\\')
-                continue
-            if s_buf_data == '$':
-                wm('$')
-                continue
+##             if s_buf_data == 'e':
+##                 wm('\\')
+##                 continue
+##             if s_buf_data == '$':
+##                 wm('$')
+##                 continue
 	    wm('@' + s_buf_data)
 	    if s_buf_data == 'node' and \
 		      pp[i].chtype == chunk_type[PLAIN] and \
@@ -2232,13 +2283,11 @@
 		wm('\n')
 
 	elif ch.chtype == chunk_type[COMMENT]:
-## 	    print 'COMMENT: previous chunk =', pp[i-2]
-## 	    if pp[i-2].chtype == chunk_type[PLAIN]:
-## 		print 'PLAINTEXT =', `s(buf, pp[i-2].data)`
 	    if s(buf, ch.data) and \
 		      regex.match('^[ \t]*$', s(buf, ch.data)) < 0:
 		if i >= 2 \
-		   and pp[i-2].chtype not in (chunk_type[ENDLINE], chunk_type[DENDLINE]) \
+		   and pp[i-2].chtype not in (chunk_type[ENDLINE],
+					      chunk_type[DENDLINE]) \
 		   and not (pp[i-2].chtype == chunk_type[PLAIN]
 			    and regex.match('\\(.\\|\n\\)*[ \t]*\n$', s(buf, pp[i-2].data)) >= 0):
 		    wm('\n')
