]> granicus.if.org Git - python/commitdiff
write_esis(): Added support for ENTITY_REFERENCE nodes.
authorFred Drake <fdrake@acm.org>
Thu, 26 Aug 1999 17:51:56 +0000 (17:51 +0000)
committerFred Drake <fdrake@acm.org>
Thu, 26 Aug 1999 17:51:56 +0000 (17:51 +0000)
Doc/tools/sgmlconv/docfixer.py

index a56ac6e3c8eda61f93fe8454324e4dffc0675831..21d3522cf51923bf3567b3f8204c39109d70caf9 100755 (executable)
@@ -15,6 +15,7 @@ import xml.dom.core
 
 from xml.dom.core import \
      ELEMENT, \
+     ENTITY_REFERENCE, \
      TEXT
 
 
@@ -74,7 +75,7 @@ xml.dom.core.Document.get_childNodes = get_childNodes
 
 def get_first_element(doc, gi):
     for n in doc.childNodes:
-        if n.nodeName == gi:
+        if n.get_nodeName() == gi:
             return n
 
 def extract_first_element(doc, gi):
@@ -86,11 +87,11 @@ def extract_first_element(doc, gi):
 
 def find_all_elements(doc, gi):
     nodes = []
-    if doc.nodeName == gi:
+    if doc.get_nodeName() == gi:
         nodes.append(doc)
     for child in doc.childNodes:
         if child.nodeType == ELEMENT:
-            if child.tagName == gi:
+            if child.get_tagName() == gi:
                 nodes.append(child)
             for node in child.getElementsByTagName(gi):
                 nodes.append(node)
@@ -99,7 +100,7 @@ def find_all_elements(doc, gi):
 def find_all_child_elements(doc, gi):
     nodes = []
     for child in doc.childNodes:
-        if child.nodeName == gi:
+        if child.get_nodeName() == gi:
             nodes.append(child)
     return nodes
 
@@ -107,10 +108,10 @@ def find_all_elements_from_set(doc, gi_set):
     return __find_all_elements_from_set(doc, gi_set, [])
 
 def __find_all_elements_from_set(doc, gi_set, nodes):
-    if doc.nodeName in gi_set:
+    if doc.get_nodeName() in gi_set:
         nodes.append(doc)
     for child in doc.childNodes:
-        if child.nodeType == ELEMENT:
+        if child.get_nodeType() == ELEMENT:
             __find_all_elements_from_set(child, gi_set, nodes)
     return nodes
 
@@ -143,7 +144,7 @@ def simplify(doc, fragment):
             docelem.insertBefore(text, docelem.firstChild)
             docelem.insertBefore(node, text)
         docelem.insertBefore(doc.createTextNode("\n"), docelem.firstChild)
-    while fragment.firstChild and fragment.firstChild.nodeType == TEXT:
+    while fragment.firstChild and fragment.firstChild.get_nodeType() == TEXT:
         fragment.removeChild(fragment.firstChild)
 
 
@@ -153,9 +154,9 @@ def cleanup_root_text(doc):
     for n in doc.childNodes:
         prevskip = skip
         skip = 0
-        if n.nodeType == TEXT and not prevskip:
+        if n.get_nodeType() == TEXT and not prevskip:
             discards.append(n)
-        elif n.nodeName == "COMMENT":
+        elif n.get_nodeName() == "COMMENT":
             skip = 1
     for node in discards:
         doc.removeChild(node)
@@ -177,8 +178,8 @@ def fixup_descriptors(doc, fragment):
 def find_and_fix_descriptors(doc, container):
     children = container.childNodes
     for child in children:
-        if child.nodeType == ELEMENT:
-            tagName = child.tagName
+        if child.get_nodeType() == ELEMENT:
+            tagName = child.get_tagName()
             if tagName in DESCRIPTOR_ELEMENTS:
                 rewrite_descriptor(doc, child)
             elif tagName == "subsection":
@@ -200,7 +201,7 @@ def rewrite_descriptor(doc, descriptor):
     #   6. Put it back together.
     #
     # 1.
-    descname = descriptor.tagName
+    descname = descriptor.get_tagName()
     index = 1
     if descname[-2:] == "ni":
         descname = descname[:-2]
@@ -235,7 +236,7 @@ def rewrite_descriptor(doc, descriptor):
     pos = skip_leading_nodes(children)
     if pos < len(children):
         child = children[pos]
-        if child.nodeName == "args":
+        if child.get_nodeName() == "args":
 ##             bwrite("found <args> in descriptor, moving to <signature>\n")
 ##             ewrite(descriptor.toxml() + "\n---\n")
             # create an <args> in <signature>:
@@ -251,8 +252,8 @@ def rewrite_descriptor(doc, descriptor):
     # 3, 4.
     pos = skip_leading_nodes(children, pos)
     while pos < len(children) \
-          and children[pos].nodeName in (linename, "versionadded"):
-        if children[pos].tagName == linename:
+          and children[pos].get_nodeName() in (linename, "versionadded"):
+        if children[pos].get_tagName() == linename:
             # this is really a supplemental signature, create <signature>
             sig = methodline_to_signature(doc, children[pos])
             newchildren.append(sig)
@@ -307,7 +308,7 @@ def move_children(origin, dest, start=0):
 def handle_appendix(doc, fragment):
     # must be called after simplfy() if document is multi-rooted to begin with
     docelem = get_documentElement(fragment)
-    toplevel = docelem.tagName == "manual" and "chapter" or "section"
+    toplevel = docelem.get_tagName() == "manual" and "chapter" or "section"
     appendices = 0
     nodes = []
     for node in docelem.childNodes:
@@ -339,13 +340,14 @@ def handle_labels(doc, fragment):
         if not id:
             continue
         parent = label.parentNode
-        if parent.tagName == "title":
+        parentTagName = parent.get_tagName()
+        if parentTagName == "title":
             parent.parentNode.setAttribute("id", id)
         else:
             parent.setAttribute("id", id)
         # now, remove <label id="..."/> from parent:
         parent.removeChild(label)
-        if parent.tagName == "title":
+        if parentTagName == "title":
             parent.normalize()
             children = parent.childNodes
             if children[-1].nodeType == TEXT:
@@ -357,8 +359,8 @@ def fixup_trailing_whitespace(doc, wsmap):
     while queue:
         node = queue[0]
         del queue[0]
-        if wsmap.has_key(node.nodeName):
-            ws = wsmap[node.tagName]
+        if wsmap.has_key(node.get_nodeName()):
+            ws = wsmap[node.get_tagName()]
             children = node.childNodes
             children.reverse()
             if children[0].nodeType == TEXT:
@@ -366,8 +368,8 @@ def fixup_trailing_whitespace(doc, wsmap):
                 children[0].data = data
             children.reverse()
             # hack to get the title in place:
-            if node.tagName == "title" \
-               and node.parentNode.firstChild.nodeType == ELEMENT:
+            if node.get_tagName() == "title" \
+               and node.parentNode.firstChild.get_nodeType() == ELEMENT:
                 node.parentNode.insertBefore(doc.createText("\n  "),
                                              node.parentNode.firstChild)
         for child in node.childNodes:
@@ -393,7 +395,7 @@ def cleanup_trailing_parens(doc, element_names):
     while queue:
         node = queue[0]
         del queue[0]
-        if rewrite_element(node.tagName):
+        if rewrite_element(node.get_tagName()):
             children = node.childNodes
             if len(children) == 1 \
                and children[0].nodeType == TEXT:
@@ -416,7 +418,7 @@ def contents_match(left, right):
         if nodeType != r.nodeType:
             return 0
         if nodeType == ELEMENT:
-            if l.tagName != r.tagName:
+            if l.get_tagName() != r.get_tagName():
                 return 0
             # should check attributes, but that's not a problem here
             if not contents_match(l, r):
@@ -447,7 +449,7 @@ def create_module_info(doc, section):
             modauthor.getAttribute("name")))
         modauthor.removeAttribute("name")
     platform = extract_first_element(section, "platform")
-    if section.tagName == "section":
+    if section.get_tagName() == "section":
         modinfo_pos = 2
         modinfo = doc.createElement("moduleinfo")
         moddecl = extract_first_element(section, "declaremodule")
@@ -472,7 +474,7 @@ def create_module_info(doc, section):
         if title:
             children = title.childNodes
             if len(children) >= 2 \
-               and children[0].nodeName == "module" \
+               and children[0].get_nodeName() == "module" \
                and children[0].childNodes[0].data == name:
                 # this is it; morph the <title> into <short-synopsis>
                 first_data = children[1]
@@ -516,7 +518,7 @@ def create_module_info(doc, section):
         children = section.childNodes
         for i in range(len(children)):
             node = children[i]
-            if node.nodeName == "moduleinfo":
+            if node.get_nodeName() == "moduleinfo":
                 nextnode = children[i+1]
                 if nextnode.nodeType == TEXT:
                     data = nextnode.data
@@ -549,7 +551,7 @@ def fixup_table(doc, table):
     children = table.childNodes
     for child in children:
         if child.nodeType == ELEMENT:
-            tagName = child.tagName
+            tagName = child.get_tagName()
             if tagName == "hline" and prev_row is not None:
                 prev_row.setAttribute("rowsep", "1")
             elif tagName == "row":
@@ -567,9 +569,9 @@ def fixup_table(doc, table):
             table.removeChild(child)
             continue
         if nodeType == ELEMENT:
-            if child.tagName != "hline":
+            if child.get_tagName() != "hline":
                 raise ConversionError(
-                    "unexpected <%s> in table" % child.tagName)
+                    "unexpected <%s> in table" % child.get_tagName())
             table.removeChild(child)
             continue
         raise ConversionError(
@@ -598,7 +600,7 @@ def fixup_row(doc, row):
 def move_elements_by_name(doc, source, dest, name, sep=None):
     nodes = []
     for child in source.childNodes:
-        if child.nodeName == name:
+        if child.get_nodeName() == name:
             nodes.append(child)
     for node in nodes:
         source.removeChild(node)
@@ -638,7 +640,7 @@ PARA_LEVEL_PRECEEDERS = (
 
 def fixup_paras(doc, fragment):
     for child in fragment.childNodes:
-        if child.nodeName in RECURSE_INTO_PARA_CONTAINERS:
+        if child.get_nodeName() in RECURSE_INTO_PARA_CONTAINERS:
             fixup_paras_helper(doc, child)
     descriptions = find_all_elements(fragment, "description")
     for description in descriptions:
@@ -650,7 +652,7 @@ def fixup_paras_helper(doc, container, depth=0):
     children = container.childNodes
     start = skip_leading_nodes(children)
     while len(children) > start:
-        if children[start].nodeName in RECURSE_INTO_PARA_CONTAINERS:
+        if children[start].get_nodeName() in RECURSE_INTO_PARA_CONTAINERS:
             # Something to recurse into:
             fixup_paras_helper(doc, children[start])
         else:
@@ -673,7 +675,7 @@ def build_para(doc, parent, start, i):
         child = children[j]
         nodeType = child.nodeType
         if nodeType == ELEMENT:
-            if child.tagName in BREAK_ELEMENTS:
+            if child.get_tagName() in BREAK_ELEMENTS:
                 after = j
                 break
         elif nodeType == TEXT:
@@ -747,7 +749,7 @@ def skip_leading_nodes(children, start=0):
                 return start
             # all whitespace, just skip
         elif nodeType == ELEMENT:
-            tagName = child.tagName
+            tagName = child.get_tagName()
             if tagName in RECURSE_INTO_PARA_CONTAINERS:
                 return start
             if tagName not in PARA_LEVEL_ELEMENTS + PARA_LEVEL_PRECEEDERS:
@@ -777,7 +779,7 @@ def fixup_signatures(doc, fragment):
 
 def fixup_args(doc, arglist):
     for child in arglist.childNodes:
-        if child.nodeName == "optional":
+        if child.get_nodeName() == "optional":
             # found it; fix and return
             arglist.insertBefore(doc.createTextNode("["), child)
             optkids = child.childNodes
@@ -800,7 +802,7 @@ def fixup_sectionauthors(doc, fragment):
         sectauth.removeAttribute("name")
         after = section.childNodes[2]
         title = section.childNodes[1]
-        if title.nodeName != "title":
+        if title.get_nodeName() != "title":
             after = section.childNodes[0]
         section.insertBefore(doc.createTextNode("\n  "), after)
         section.insertBefore(sectauth, after)
@@ -843,7 +845,7 @@ def fixup_refmodindexes(fragment):
 
 def fixup_refmodindexes_chunk(container):
     # node is probably a <para>; let's see how often it isn't:
-    if container.tagName != PARA_ELEMENT:
+    if container.get_tagName() != PARA_ELEMENT:
         bwrite("--- fixup_refmodindexes_chunk(%s)\n" % container)
     module_entries = find_all_elements(container, "module")
     if not module_entries:
@@ -854,7 +856,7 @@ def fixup_refmodindexes_chunk(container):
         children = entry.childNodes
         if len(children) != 0:
             bwrite("--- unexpected number of children for %s node:\n"
-                   % entry.tagName)
+                   % entry.get_tagName())
             ewrite(entry.toxml() + "\n")
             continue
         found = 0
@@ -911,7 +913,7 @@ def write_esis(doc, ofp, knownempty):
     for node in doc.childNodes:
         nodeType = node.nodeType
         if nodeType == ELEMENT:
-            gi = node.tagName
+            gi = node.get_tagName()
             if knownempty(gi):
                 if node.hasChildNodes():
                     raise ValueError, \
@@ -929,6 +931,8 @@ def write_esis(doc, ofp, knownempty):
             ofp.write(")%s\n" % gi)
         elif nodeType == TEXT:
             ofp.write("-%s\n" % esistools.encode(node.data))
+        elif nodeType == ENTITY_REFERENCE:
+            ofp.write("&%s\n" % node.get_nodeName())
         else:
             raise RuntimeError, "unsupported node type: %s" % nodeType