Mercurial > repo
comparison ply-3.8/doc/makedoc.py @ 7267:343ff337a19b
<ais523> ` tar -xf ply-3.8.tar.gz
author | HackBot |
---|---|
date | Wed, 23 Mar 2016 02:40:16 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
7266:61a39a120dee | 7267:343ff337a19b |
---|---|
1 #!/usr/local/bin/python | |
2 | |
3 ############################################################################### | |
4 # Takes a chapter as input and adds internal links and numbering to all | |
5 # of the H1, H2, H3, H4 and H5 sections. | |
6 # | |
7 # Every heading HTML tag (H1, H2 etc) is given an autogenerated name to link | |
8 # to. However, if the name is not an autogenerated name from a previous run, | |
9 # it will be kept. If it is autogenerated, it might change on subsequent runs | |
10 # of this program. Thus if you want to create links to one of the headings, | |
11 # then change the heading link name to something that does not look like an | |
12 # autogenerated link name. | |
13 ############################################################################### | |
14 | |
15 import sys | |
16 import re | |
17 import string | |
18 | |
19 ############################################################################### | |
20 # Functions | |
21 ############################################################################### | |
22 | |
23 # Regexs for <a name="..."></a> | |
24 alink = re.compile(r"<a *name *= *\"(.*)\"></a>", re.IGNORECASE) | |
25 heading = re.compile(r"(_nn\d)", re.IGNORECASE) | |
26 | |
27 def getheadingname(m): | |
28 autogeneratedheading = True; | |
29 if m.group(1) != None: | |
30 amatch = alink.match(m.group(1)) | |
31 if amatch: | |
32 # A non-autogenerated heading - keep it | |
33 headingname = amatch.group(1) | |
34 autogeneratedheading = heading.match(headingname) | |
35 if autogeneratedheading: | |
36 # The heading name was either non-existent or autogenerated, | |
37 # We can create a new heading / change the existing heading | |
38 headingname = "%s_nn%d" % (filenamebase, nameindex) | |
39 return headingname | |
40 | |
41 ############################################################################### | |
42 # Main program | |
43 ############################################################################### | |
44 | |
45 if len(sys.argv) != 2: | |
46 print "usage: makedoc.py filename" | |
47 sys.exit(1) | |
48 | |
49 filename = sys.argv[1] | |
50 filenamebase = string.split(filename,".")[0] | |
51 | |
52 section = 0 | |
53 subsection = 0 | |
54 subsubsection = 0 | |
55 subsubsubsection = 0 | |
56 nameindex = 0 | |
57 | |
58 name = "" | |
59 | |
60 # Regexs for <h1>,... <h5> sections | |
61 | |
62 h1 = re.compile(r".*?<H1>(<a.*a>)*[\d\.\s]*(.*?)</H1>", re.IGNORECASE) | |
63 h2 = re.compile(r".*?<H2>(<a.*a>)*[\d\.\s]*(.*?)</H2>", re.IGNORECASE) | |
64 h3 = re.compile(r".*?<H3>(<a.*a>)*[\d\.\s]*(.*?)</H3>", re.IGNORECASE) | |
65 h4 = re.compile(r".*?<H4>(<a.*a>)*[\d\.\s]*(.*?)</H4>", re.IGNORECASE) | |
66 h5 = re.compile(r".*?<H5>(<a.*a>)*[\d\.\s]*(.*?)</H5>", re.IGNORECASE) | |
67 | |
68 data = open(filename).read() # Read data | |
69 open(filename+".bak","w").write(data) # Make backup | |
70 | |
71 lines = data.splitlines() | |
72 result = [ ] # This is the result of postprocessing the file | |
73 index = "<!-- INDEX -->\n<div class=\"sectiontoc\">\n" # index contains the index for adding at the top of the file. Also printed to stdout. | |
74 | |
75 skip = 0 | |
76 skipspace = 0 | |
77 | |
78 for s in lines: | |
79 if s == "<!-- INDEX -->": | |
80 if not skip: | |
81 result.append("@INDEX@") | |
82 skip = 1 | |
83 else: | |
84 skip = 0 | |
85 continue; | |
86 if skip: | |
87 continue | |
88 | |
89 if not s and skipspace: | |
90 continue | |
91 | |
92 if skipspace: | |
93 result.append("") | |
94 result.append("") | |
95 skipspace = 0 | |
96 | |
97 m = h2.match(s) | |
98 if m: | |
99 prevheadingtext = m.group(2) | |
100 nameindex += 1 | |
101 section += 1 | |
102 headingname = getheadingname(m) | |
103 result.append("""<H2><a name="%s"></a>%d. %s</H2>""" % (headingname,section, prevheadingtext)) | |
104 | |
105 if subsubsubsection: | |
106 index += "</ul>\n" | |
107 if subsubsection: | |
108 index += "</ul>\n" | |
109 if subsection: | |
110 index += "</ul>\n" | |
111 if section == 1: | |
112 index += "<ul>\n" | |
113 | |
114 index += """<li><a href="#%s">%s</a>\n""" % (headingname,prevheadingtext) | |
115 subsection = 0 | |
116 subsubsection = 0 | |
117 subsubsubsection = 0 | |
118 skipspace = 1 | |
119 continue | |
120 m = h3.match(s) | |
121 if m: | |
122 prevheadingtext = m.group(2) | |
123 nameindex += 1 | |
124 subsection += 1 | |
125 headingname = getheadingname(m) | |
126 result.append("""<H3><a name="%s"></a>%d.%d %s</H3>""" % (headingname,section, subsection, prevheadingtext)) | |
127 | |
128 if subsubsubsection: | |
129 index += "</ul>\n" | |
130 if subsubsection: | |
131 index += "</ul>\n" | |
132 if subsection == 1: | |
133 index += "<ul>\n" | |
134 | |
135 index += """<li><a href="#%s">%s</a>\n""" % (headingname,prevheadingtext) | |
136 subsubsection = 0 | |
137 skipspace = 1 | |
138 continue | |
139 m = h4.match(s) | |
140 if m: | |
141 prevheadingtext = m.group(2) | |
142 nameindex += 1 | |
143 subsubsection += 1 | |
144 subsubsubsection = 0 | |
145 headingname = getheadingname(m) | |
146 result.append("""<H4><a name="%s"></a>%d.%d.%d %s</H4>""" % (headingname,section, subsection, subsubsection, prevheadingtext)) | |
147 | |
148 if subsubsubsection: | |
149 index += "</ul>\n" | |
150 if subsubsection == 1: | |
151 index += "<ul>\n" | |
152 | |
153 index += """<li><a href="#%s">%s</a>\n""" % (headingname,prevheadingtext) | |
154 skipspace = 1 | |
155 continue | |
156 m = h5.match(s) | |
157 if m: | |
158 prevheadingtext = m.group(2) | |
159 nameindex += 1 | |
160 subsubsubsection += 1 | |
161 headingname = getheadingname(m) | |
162 result.append("""<H5><a name="%s"></a>%d.%d.%d.%d %s</H5>""" % (headingname,section, subsection, subsubsection, subsubsubsection, prevheadingtext)) | |
163 | |
164 if subsubsubsection == 1: | |
165 index += "<ul>\n" | |
166 | |
167 index += """<li><a href="#%s">%s</a>\n""" % (headingname,prevheadingtext) | |
168 skipspace = 1 | |
169 continue | |
170 | |
171 result.append(s) | |
172 | |
173 if subsubsubsection: | |
174 index += "</ul>\n" | |
175 | |
176 if subsubsection: | |
177 index += "</ul>\n" | |
178 | |
179 if subsection: | |
180 index += "</ul>\n" | |
181 | |
182 if section: | |
183 index += "</ul>\n" | |
184 | |
185 index += "</div>\n<!-- INDEX -->\n" | |
186 | |
187 data = "\n".join(result) | |
188 | |
189 data = data.replace("@INDEX@",index) + "\n"; | |
190 | |
191 # Write the file back out | |
192 open(filename,"w").write(data) | |
193 | |
194 |