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