Index: tools/nixysa/third_party/ply-3.1/doc/makedoc.py |
=================================================================== |
--- tools/nixysa/third_party/ply-3.1/doc/makedoc.py (revision 0) |
+++ tools/nixysa/third_party/ply-3.1/doc/makedoc.py (revision 0) |
@@ -0,0 +1,194 @@ |
+#!/usr/local/bin/python |
+ |
+############################################################################### |
+# Takes a chapter as input and adds internal links and numbering to all |
+# of the H1, H2, H3, H4 and H5 sections. |
+# |
+# Every heading HTML tag (H1, H2 etc) is given an autogenerated name to link |
+# to. However, if the name is not an autogenerated name from a previous run, |
+# it will be kept. If it is autogenerated, it might change on subsequent runs |
+# of this program. Thus if you want to create links to one of the headings, |
+# then change the heading link name to something that does not look like an |
+# autogenerated link name. |
+############################################################################### |
+ |
+import sys |
+import re |
+import string |
+ |
+############################################################################### |
+# Functions |
+############################################################################### |
+ |
+# Regexs for <a name="..."></a> |
+alink = re.compile(r"<a *name *= *\"(.*)\"></a>", re.IGNORECASE) |
+heading = re.compile(r"(_nn\d)", re.IGNORECASE) |
+ |
+def getheadingname(m): |
+ autogeneratedheading = True; |
+ if m.group(1) != None: |
+ amatch = alink.match(m.group(1)) |
+ if amatch: |
+ # A non-autogenerated heading - keep it |
+ headingname = amatch.group(1) |
+ autogeneratedheading = heading.match(headingname) |
+ if autogeneratedheading: |
+ # The heading name was either non-existent or autogenerated, |
+ # We can create a new heading / change the existing heading |
+ headingname = "%s_nn%d" % (filenamebase, nameindex) |
+ return headingname |
+ |
+############################################################################### |
+# Main program |
+############################################################################### |
+ |
+if len(sys.argv) != 2: |
+ print "usage: makedoc.py filename" |
+ sys.exit(1) |
+ |
+filename = sys.argv[1] |
+filenamebase = string.split(filename,".")[0] |
+ |
+section = 0 |
+subsection = 0 |
+subsubsection = 0 |
+subsubsubsection = 0 |
+nameindex = 0 |
+ |
+name = "" |
+ |
+# Regexs for <h1>,... <h5> sections |
+ |
+h1 = re.compile(r".*?<H1>(<a.*a>)*[\d\.\s]*(.*?)</H1>", re.IGNORECASE) |
+h2 = re.compile(r".*?<H2>(<a.*a>)*[\d\.\s]*(.*?)</H2>", re.IGNORECASE) |
+h3 = re.compile(r".*?<H3>(<a.*a>)*[\d\.\s]*(.*?)</H3>", re.IGNORECASE) |
+h4 = re.compile(r".*?<H4>(<a.*a>)*[\d\.\s]*(.*?)</H4>", re.IGNORECASE) |
+h5 = re.compile(r".*?<H5>(<a.*a>)*[\d\.\s]*(.*?)</H5>", re.IGNORECASE) |
+ |
+data = open(filename).read() # Read data |
+open(filename+".bak","w").write(data) # Make backup |
+ |
+lines = data.splitlines() |
+result = [ ] # This is the result of postprocessing the file |
+index = "<!-- INDEX -->\n<div class=\"sectiontoc\">\n" # index contains the index for adding at the top of the file. Also printed to stdout. |
+ |
+skip = 0 |
+skipspace = 0 |
+ |
+for s in lines: |
+ if s == "<!-- INDEX -->": |
+ if not skip: |
+ result.append("@INDEX@") |
+ skip = 1 |
+ else: |
+ skip = 0 |
+ continue; |
+ if skip: |
+ continue |
+ |
+ if not s and skipspace: |
+ continue |
+ |
+ if skipspace: |
+ result.append("") |
+ result.append("") |
+ skipspace = 0 |
+ |
+ m = h2.match(s) |
+ if m: |
+ prevheadingtext = m.group(2) |
+ nameindex += 1 |
+ section += 1 |
+ headingname = getheadingname(m) |
+ result.append("""<H2><a name="%s"></a>%d. %s</H2>""" % (headingname,section, prevheadingtext)) |
+ |
+ if subsubsubsection: |
+ index += "</ul>\n" |
+ if subsubsection: |
+ index += "</ul>\n" |
+ if subsection: |
+ index += "</ul>\n" |
+ if section == 1: |
+ index += "<ul>\n" |
+ |
+ index += """<li><a href="#%s">%s</a>\n""" % (headingname,prevheadingtext) |
+ subsection = 0 |
+ subsubsection = 0 |
+ subsubsubsection = 0 |
+ skipspace = 1 |
+ continue |
+ m = h3.match(s) |
+ if m: |
+ prevheadingtext = m.group(2) |
+ nameindex += 1 |
+ subsection += 1 |
+ headingname = getheadingname(m) |
+ result.append("""<H3><a name="%s"></a>%d.%d %s</H3>""" % (headingname,section, subsection, prevheadingtext)) |
+ |
+ if subsubsubsection: |
+ index += "</ul>\n" |
+ if subsubsection: |
+ index += "</ul>\n" |
+ if subsection == 1: |
+ index += "<ul>\n" |
+ |
+ index += """<li><a href="#%s">%s</a>\n""" % (headingname,prevheadingtext) |
+ subsubsection = 0 |
+ skipspace = 1 |
+ continue |
+ m = h4.match(s) |
+ if m: |
+ prevheadingtext = m.group(2) |
+ nameindex += 1 |
+ subsubsection += 1 |
+ subsubsubsection = 0 |
+ headingname = getheadingname(m) |
+ result.append("""<H4><a name="%s"></a>%d.%d.%d %s</H4>""" % (headingname,section, subsection, subsubsection, prevheadingtext)) |
+ |
+ if subsubsubsection: |
+ index += "</ul>\n" |
+ if subsubsection == 1: |
+ index += "<ul>\n" |
+ |
+ index += """<li><a href="#%s">%s</a>\n""" % (headingname,prevheadingtext) |
+ skipspace = 1 |
+ continue |
+ m = h5.match(s) |
+ if m: |
+ prevheadingtext = m.group(2) |
+ nameindex += 1 |
+ subsubsubsection += 1 |
+ headingname = getheadingname(m) |
+ result.append("""<H5><a name="%s"></a>%d.%d.%d.%d %s</H5>""" % (headingname,section, subsection, subsubsection, subsubsubsection, prevheadingtext)) |
+ |
+ if subsubsubsection == 1: |
+ index += "<ul>\n" |
+ |
+ index += """<li><a href="#%s">%s</a>\n""" % (headingname,prevheadingtext) |
+ skipspace = 1 |
+ continue |
+ |
+ result.append(s) |
+ |
+if subsubsubsection: |
+ index += "</ul>\n" |
+ |
+if subsubsection: |
+ index += "</ul>\n" |
+ |
+if subsection: |
+ index += "</ul>\n" |
+ |
+if section: |
+ index += "</ul>\n" |
+ |
+index += "</div>\n<!-- INDEX -->\n" |
+ |
+data = "\n".join(result) |
+ |
+data = data.replace("@INDEX@",index) + "\n"; |
+ |
+# Write the file back out |
+open(filename,"w").write(data) |
+ |
+ |
Property changes on: tools/nixysa/third_party/ply-3.1/doc/makedoc.py |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |