diff env/lib/python3.7/site-packages/docutils/writers/docutils_xml.py @ 5:9b1c78e6ba9c draft default tip

"planemo upload commit 6c0a8142489327ece472c84e558c47da711a9142"
author shellac
date Mon, 01 Jun 2020 08:59:25 -0400
parents 79f47841a781
children
line wrap: on
line diff
--- a/env/lib/python3.7/site-packages/docutils/writers/docutils_xml.py	Thu May 14 16:47:39 2020 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,199 +0,0 @@
-# $Id: docutils_xml.py 8368 2019-08-27 12:10:14Z milde $
-# Author: David Goodger, Paul Tremblay, Guenter Milde
-# Maintainer: docutils-develop@lists.sourceforge.net
-# Copyright: This module has been placed in the public domain.
-
-"""
-Simple document tree Writer, writes Docutils XML according to
-http://docutils.sourceforge.net/docs/ref/docutils.dtd.
-"""
-
-__docformat__ = 'reStructuredText'
-
-import sys
-import xml.sax.saxutils
-
-import docutils
-from docutils import frontend, writers, nodes
-
-if sys.version_info >= (3, 0):
-    from io import StringIO  # noqa
-else:
-    from StringIO import StringIO  # noqa
-
-
-if sys.version_info >= (3, 0):
-    unicode = str  # noqa
-
-
-class RawXmlError(docutils.ApplicationError): pass
-
-
-class Writer(writers.Writer):
-
-    supported = ('xml',)
-    """Formats this writer supports."""
-
-    settings_spec = (
-        '"Docutils XML" Writer Options',
-        None,
-        (('Generate XML with newlines before and after tags.',
-          ['--newlines'],
-          {'action': 'store_true', 'validator': frontend.validate_boolean}),
-         ('Generate XML with indents and newlines.',
-          ['--indents'], #@ TODO use integer value for number of spaces?
-          {'action': 'store_true', 'validator': frontend.validate_boolean}),
-         ('Omit the XML declaration.  Use with caution.',
-          ['--no-xml-declaration'],
-          {'dest': 'xml_declaration', 'default': 1, 'action': 'store_false',
-           'validator': frontend.validate_boolean}),
-         ('Omit the DOCTYPE declaration.',
-          ['--no-doctype'],
-          {'dest': 'doctype_declaration', 'default': 1,
-           'action': 'store_false', 'validator': frontend.validate_boolean}),))
-
-    settings_defaults = {'output_encoding_error_handler': 'xmlcharrefreplace'}
-
-    config_section = 'docutils_xml writer'
-    config_section_dependencies = ('writers',)
-
-    output = None
-    """Final translated form of `document`."""
-
-    def __init__(self):
-        writers.Writer.__init__(self)
-        self.translator_class = XMLTranslator
-
-    def translate(self):
-        self.visitor = visitor = self.translator_class(self.document)
-        self.document.walkabout(visitor)
-        self.output = ''.join(visitor.output)
-
-
-class XMLTranslator(nodes.GenericNodeVisitor):
-
-    xml_declaration = '<?xml version="1.0" encoding="%s"?>\n'
-    # TODO: add stylesheet options similar to HTML and LaTeX writers?
-    #xml_stylesheet = '<?xml-stylesheet type="text/xsl" href="%s"?>\n'
-    doctype = (
-        '<!DOCTYPE document PUBLIC'
-        ' "+//IDN docutils.sourceforge.net//DTD Docutils Generic//EN//XML"'
-        ' "http://docutils.sourceforge.net/docs/ref/docutils.dtd">\n')
-    generator = '<!-- Generated by Docutils %s -->\n'
-
-    xmlparser = xml.sax.make_parser()
-    """SAX parser instance to check/exctract raw XML."""
-    xmlparser.setFeature(
-        "http://xml.org/sax/features/external-general-entities", True)
-
-    def __init__(self, document):
-        nodes.NodeVisitor.__init__(self, document)
-
-        # Reporter
-        self.warn = self.document.reporter.warning
-        self.error = self.document.reporter.error
-
-        # Settings
-        self.settings = settings = document.settings
-        self.indent = self.newline = ''
-        if settings.newlines:
-            self.newline = '\n'
-        if settings.indents:
-            self.newline = '\n'
-            self.indent = '    ' #@ TODO make this configurable?
-        self.level = 0  # indentation level
-        self.in_simple = 0 # level of nesting inside mixed-content elements
-        self.fixed_text = 0 # level of nesting inside FixedText elements
-
-        # Output
-        self.output = []
-        if settings.xml_declaration:
-            self.output.append(
-                self.xml_declaration % settings.output_encoding)
-        if settings.doctype_declaration:
-            self.output.append(self.doctype)
-        self.output.append(self.generator % docutils.__version__)
-
-        # initialize XML parser
-        self.the_handle=TestXml()
-        self.xmlparser.setContentHandler(self.the_handle)
-
-    # generic visit and depart methods
-    # --------------------------------
-
-    simple_nodes = (nodes.TextElement,
-                    nodes.image, nodes.colspec, nodes.transition) # empty elements
-
-    def default_visit(self, node):
-        """Default node visit method."""
-        if not self.in_simple:
-            self.output.append(self.indent*self.level)
-        self.output.append(node.starttag(xml.sax.saxutils.quoteattr))
-        self.level += 1
-        # @@ make nodes.literal an instance of FixedTextElement?
-        if isinstance(node, (nodes.FixedTextElement, nodes.literal)):
-            self.fixed_text += 1
-        if isinstance(node, self.simple_nodes):
-            self.in_simple += 1
-        if not self.in_simple:
-            self.output.append(self.newline)
-
-    def default_departure(self, node):
-        """Default node depart method."""
-        self.level -= 1
-        if not self.in_simple:
-            self.output.append(self.indent*self.level)
-        self.output.append(node.endtag())
-        if isinstance(node, (nodes.FixedTextElement, nodes.literal)):
-            self.fixed_text -= 1
-        if isinstance(node, self.simple_nodes):
-            self.in_simple -= 1
-        if not self.in_simple:
-            self.output.append(self.newline)
-
-
-    # specific visit and depart methods
-    # ---------------------------------
-
-    def visit_Text(self, node):
-        text = xml.sax.saxutils.escape(node.astext())
-        # indent text if we are not in a FixedText element:
-        if not self.fixed_text:
-            text = text.replace('\n', '\n'+self.indent*self.level)
-        self.output.append(text)
-
-    def depart_Text(self, node):
-        pass
-
-    def visit_raw(self, node):
-        if 'xml' not in node.get('format', '').split():
-            # skip other raw content?
-            # raise nodes.SkipNode
-            self.default_visit(node)
-            return
-        # wrap in <raw> element
-        self.default_visit(node)      # or not?
-        xml_string = node.astext()
-        self.output.append(xml_string)
-        self.default_departure(node)  # or not?
-        # Check validity of raw XML:
-        if isinstance(xml_string, unicode) and sys.version_info < (3, 0):
-            xml_string = xml_string.encode('utf8')
-        try:
-            self.xmlparser.parse(StringIO(xml_string))
-        except xml.sax._exceptions.SAXParseException as error:
-            col_num = self.the_handle.locator.getColumnNumber()
-            line_num =  self.the_handle.locator.getLineNumber()
-            srcline = node.line
-            if not isinstance(node.parent, nodes.TextElement):
-                srcline += 2 # directive content start line
-            msg = 'Invalid raw XML in column %d, line offset %d:\n%s' % (
-                   col_num, line_num, node.astext())
-            self.warn(msg, source=node.source, line=srcline+line_num-1)
-        raise nodes.SkipNode # content already processed
-
-
-class TestXml(xml.sax.handler.ContentHandler):
-
-    def setDocumentLocator(self, locator):
-        self.locator = locator