diff options
Diffstat (limited to 'docutils/parsers/losslessrst/__init__.py')
-rw-r--r-- | docutils/parsers/losslessrst/__init__.py | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/docutils/parsers/losslessrst/__init__.py b/docutils/parsers/losslessrst/__init__.py new file mode 100644 index 000000000..07eddabd5 --- /dev/null +++ b/docutils/parsers/losslessrst/__init__.py @@ -0,0 +1,54 @@ +# $Id$ +# Author: Stefan Rank <strank(AT)strank(DOT)info> +# Copyright: This module has been placed in the public domain. + +""" +This is ``docutils.parsers.losslessrst`` package. +A subclass of the rst parser that retains additional information +during parsing to allow exact reconstruction of the input. +(See the ``docutils.parsers.rst`` parser for general documentation + +The node structure created is fully compatible with the rst parser. +Additional information is stored in one attribute per node. +(named lossless?) + +""" + +__docformat__ = 'reStructuredText' + + +import docutils.parsers +import docutils.statemachine +from docutils.parsers.losslessrst import states +from docutils import frontend, nodes + + +class Parser(docutils.parsers.rst.Parser): + + """The lossless reStructuredText parser.""" + + supported = ('losslessrst', 'lossless') + """Aliases this parser supports.""" + + def __init__(self, rfc2822=None, inliner=None): + if rfc2822: + self.initial_state = 'RFC2822Body' + else: + self.initial_state = 'Body' + self.state_classes = states.state_classes + self.inliner = inliner + + def parse(self, inputstring, document): + """Parse `inputstring` and populate `document`, a document tree.""" + self.setup_parse(inputstring, document) + self.statemachine = states.RSTStateMachine( + state_classes=self.state_classes, + initial_state=self.initial_state, + debug=document.reporter.debug_flag) + inputlines = docutils.statemachine.string2lines( + inputstring, tab_width=document.settings.tab_width, + convert_whitespace=1) + self.statemachine.run(inputlines, document, inliner=self.inliner) + self.finish_parse() + + |