[Python-checkins] r68972 - in doctools/converter/converter: __init__.py latexparser.py restwriter.py tokenizer.py

georg.brandl python-checkins at python.org
Mon Jan 26 22:08:02 CET 2009


Author: georg.brandl
Date: Mon Jan 26 22:08:02 2009
New Revision: 68972
Log:
add some support for math.
Modified:
 doctools/converter/converter/__init__.py
 doctools/converter/converter/latexparser.py
 doctools/converter/converter/restwriter.py
 doctools/converter/converter/tokenizer.py
Modified: doctools/converter/converter/__init__.py
==============================================================================
--- doctools/converter/converter/__init__.py	(original)
+++ doctools/converter/converter/__init__.py	Mon Jan 26 22:08:02 2009
@@ -3,7 +3,7 @@
 Documentation converter - high level functions
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
- :copyright: 2007-2008 by Georg Brandl.
+ :copyright: 2007-2009 by Georg Brandl.
 :license: BSD.
 """
 
@@ -42,6 +42,7 @@
 coutf.close()
 else:
 outf.close()
+ p.finish() # print warnings about unrecognized commands
 return 1, r.warnings
 except Exception, err:
 if doraise:
Modified: doctools/converter/converter/latexparser.py
==============================================================================
--- doctools/converter/converter/latexparser.py	(original)
+++ doctools/converter/converter/latexparser.py	Mon Jan 26 22:08:02 2009
@@ -5,7 +5,7 @@
 
 For more documentation, look into the ``restwriter.py`` file.
 
- :copyright: 2007-2008 by Georg Brandl.
+ :copyright: 2007-2009 by Georg Brandl.
 :license: BSD.
 """
 
@@ -84,6 +84,16 @@
 def __init__(self, tokenstream, filename):
 self.tokens = tokenstream
 self.filename = filename
+ self.unrecognized = set()
+
+ def finish(self):
+ if len(self.unrecognized) != 0:
+ print '\n\nWARNING:\nThe following latex commands are not recognized and are ' \
+ 'ignored by this script. You may want to extend the DocParser class and ' \
+ 'define functions such as handle_CMD to handle them. You can also override '\
+ 'handle_unrecognized.\n'
+ for cmd in self.unrecognized:
+ print cmd
 
 def parse(self):
 self.rootnode = RootNode(self.filename, None)
@@ -94,16 +104,25 @@
 def parse_until(self, condition=None, endatbrace=False):
 nodelist = NodeList()
 bracelevel = 0
+ mathmode = False
+ math = ''
 for l, t, v, r in self.tokens:
 if condition and condition(t, v, bracelevel):
 return nodelist.flatten()
- if t == 'command':
+ if mathmode:
+ if t == 'mathmode':
+ nodelist.append(InlineNode('math', [TextNode(math)]))
+ math = ''
+ mathmode = False
+ else:
+ math += r
+ elif t == 'command':
 if len(v) == 1 and not v.isalpha():
 nodelist.append(self.handle_special_command(v))
 continue
 handler = getattr(self, 'handle_' + v, None)
 if not handler:
- raise ParserError('no handler for \\%s command' % v, l)
+ handler = self.handle_unrecognized(v, l)
 nodelist.append(handler())
 elif t == 'bgroup':
 bracelevel += 1
@@ -116,7 +135,7 @@
 elif t == 'tilde':
 nodelist.append(NbspNode())
 elif t == 'mathmode':
- pass # ignore math mode
+ mathmode = True
 elif t == 'parasep':
 nodelist.append(ParaSepNode())
 else:
@@ -412,6 +431,11 @@
 }
 
 # ------------------------- special handlers -----------------------------
+ def handle_unrecognized(self, name, line):
+ def handler():
+ self.unrecognized.add(name)
+ return EmptyNode()
+ return handler
 
 def handle_special_command(self, cmdname):
 if cmdname in '{}%$^#&_ ':
Modified: doctools/converter/converter/restwriter.py
==============================================================================
--- doctools/converter/converter/restwriter.py	(original)
+++ doctools/converter/converter/restwriter.py	Mon Jan 26 22:08:02 2009
@@ -956,6 +956,9 @@
 # stray commands from distutils
 elif cmdname in ('argument name', 'value', 'attribute', 'option name'):
 self.visit_wrapped('*', content, '*')
+ elif cmdname == 'math':
+ math = node.args[0]
+ self.visit_wrapped(':math:`', math, '`')
 else:
 self.visit_wrapped(':%s:`' % (self.role_mapping[cmdname] or cmdname),
 self.get_textonly_node(
Modified: doctools/converter/converter/tokenizer.py
==============================================================================
--- doctools/converter/converter/tokenizer.py	(original)
+++ doctools/converter/converter/tokenizer.py	Mon Jan 26 22:08:02 2009
@@ -60,7 +60,7 @@
 elif self.scan(r'\n[ \t]*'):
 yield lineno, 'text', ' ', self.mtext
 lineno += 1
- elif self.scan(r'[^\\%}{\[\]~\n]+'):
+ elif self.scan(r'[^\\%}{\[\]~\n\$]+'):
 yield lineno, 'text', self.mtext, self.mtext
 else:
 raise RuntimeError('unexpected text on line %d: %r' %


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /