예제 #1
0
파일: xml.py 프로젝트: wwjiang007/sphinx
 def write_doc(self, docname: str, doctree: Node) -> None:
     # work around multiple string % tuple issues in docutils;
     # replace tuples in attribute values with lists
     doctree = doctree.deepcopy()
     for domain in self.env.domains.values():
         xmlns = "xmlns:" + domain.name
         doctree[xmlns] = "https://www.sphinx-doc.org/"  # type: ignore
     for node in doctree.findall(nodes.Element):
         for att, value in node.attributes.items():
             if isinstance(value, tuple):
                 node.attributes[att] = list(value)
             value = node.attributes[att]
             if isinstance(value, list):
                 for i, val in enumerate(value):
                     if isinstance(val, tuple):
                         value[i] = list(val)
     destination = StringOutput(encoding='utf-8')
     self.writer.write(doctree, destination)
     outfilename = path.join(self.outdir,
                             os_path(docname) + self.out_suffix)
     ensuredir(path.dirname(outfilename))
     try:
         with open(outfilename, 'w', encoding='utf-8') as f:
             f.write(self.writer.output)
     except OSError as err:
         logger.warning(__("error writing file %s: %s"), outfilename, err)
예제 #2
0
    def add_node(self, env: BuildEnvironment, node: Node, targetnode: Node,
                 lineno: int):
        """
		Add a node.

		:param env: The Sphinx build environment.
		:param node:
		:param targetnode:
		:param lineno:
		"""

        if not hasattr(env, self.attr_name):
            setattr(env, self.attr_name, [])

        all_nodes = getattr(env, self.attr_name)

        all_nodes.append({
            "docname": env.docname,
            "lineno": lineno,
            "installation_node": node.deepcopy(),
            "target": targetnode,
        })