Commit | Line | Data |
---|---|---|
7faf1d71 AW |
1 | #!/usr/bin/perl\r |
2 | \r | |
3 | sub Usage {\r | |
4 | print \r | |
5 | "Usage: makeindex xhtmldir xmldir\r | |
6 | where xhtmldir contains a directory full of OpenGL .xml XHTML man pages -AND-\r | |
7 | where xmldir contains a directory full of OpenGL .xml source XML man pages\r | |
8 | \r | |
9 | probably want to redirect output into a file like\r | |
10 | ./makeindex.pl . .. > ./index.html\r | |
11 | "\r | |
12 | }\r | |
13 | \r | |
14 | sub PrintHeader {\r | |
15 | print '<html>\r | |
16 | <head>\r | |
17 | <link rel="stylesheet" type="text/css" href="../../mancommon/opengl-man.css" />\r | |
18 | <title>OpenGL Shading Language Reference Pages</title>\r | |
19 | </head>\r | |
20 | <body>\r | |
21 | <a name="top"></a>\r | |
22 | <center><h1>OpenGL Shading Language Reference Pages</h1></center>\r | |
23 | <br/><br/>\r | |
24 | \r | |
25 | ';\r | |
26 | }\r | |
27 | \r | |
28 | sub PrintFooter {\r | |
29 | print '\r | |
30 | <P>\r | |
31 | <center>\r | |
32 | <small>OpenGL Shading Language (GLSL) Reference Pages Copyright © 2011 Khronos Group, Inc.</small>\r | |
33 | </center>\r | |
34 | </P>\r | |
35 | </body>\r | |
36 | </html>\r | |
37 | ';\r | |
38 | }\r | |
39 | \r | |
40 | sub TableElementForFilename {\r | |
41 | my $name = shift;\r | |
42 | \r | |
43 | my $strippedname = $name;\r | |
44 | $strippedname =~ s/\.xml//;\r | |
45 | print "\t";\r | |
46 | print '<tr><td><a target="pagedisp" href="' , $name , '">';\r | |
47 | print "$strippedname";\r | |
48 | print "</a></td></tr>\n";\r | |
49 | }\r | |
50 | \r | |
51 | sub BeginTable {\r | |
52 | my $letter = shift;\r | |
53 | print "<a name=\"$letter\"></a><br/><br/>\n";\r | |
54 | print '<table width="200" class="sample">';\r | |
55 | print "\t<th>";\r | |
56 | print "$letter</th>\n";\r | |
57 | }\r | |
58 | \r | |
59 | sub EndTable {\r | |
60 | print "\t";\r | |
61 | print '<tr><td align="right"><a href="#top">Top</a></td></tr>';\r | |
62 | print "\n</table>\n\n";\r | |
63 | }\r | |
64 | \r | |
65 | \r | |
66 | \r | |
67 | ##############\r | |
68 | # main\r | |
69 | ##############\r | |
70 | \r | |
71 | if (@ARGV != 2)\r | |
72 | {\r | |
73 | Usage();\r | |
74 | die;\r | |
75 | }\r | |
76 | \r | |
77 | # grab list of generated XHTML files\r | |
78 | opendir(DIR,$ARGV[0]) or die "couldn't open directory";\r | |
79 | \r | |
80 | @files = readdir(DIR);\r | |
81 | close(DIR);\r | |
82 | @files = sort {uc($a) cmp uc($b)} @files;\r | |
83 | \r | |
84 | PrintHeader();\r | |
85 | \r | |
86 | my @glsl;\r | |
87 | my @builtins;\r | |
88 | \r | |
89 | my @realEntrypoints;\r | |
90 | my @pageNames;\r | |
91 | \r | |
92 | #pre-create list of all true entrypoint names\r | |
93 | \r | |
94 | foreach (@files)\r | |
95 | {\r | |
96 | if (/xml/)\r | |
97 | {\r | |
98 | $parentName = $ARGV[1] . '/' . $_;\r | |
99 | if (open(PARENT, $parentName))\r | |
100 | {\r | |
101 | @funcs = <PARENT>;\r | |
102 | @funcs = grep(/<funcdef>/, @funcs);\r | |
103 | foreach (@funcs)\r | |
104 | {\r | |
105 | $func = $_;\r | |
106 | $func =~ s/.*<function>//;\r | |
107 | $func =~ s/<\/function>.*\n//;\r | |
108 | \r | |
109 | push (@realEntrypoints, $func);\r | |
110 | }\r | |
111 | close(PARENT);\r | |
112 | }\r | |
113 | }\r | |
114 | }\r | |
115 | \r | |
116 | #pre-create list of page names\r | |
117 | \r | |
118 | foreach (@files)\r | |
119 | {\r | |
120 | if (/xml/)\r | |
121 | {\r | |
122 | $parentName = $ARGV[1] . '/' . $_;\r | |
123 | if (open(PARENT, $parentName))\r | |
124 | {\r | |
125 | my $entrypoint = $_;\r | |
126 | $entrypoint =~ s/\.xml//;\r | |
127 | \r | |
128 | push (@pageNames, $entrypoint);\r | |
129 | \r | |
130 | close(PARENT);\r | |
131 | }\r | |
132 | }\r | |
133 | }\r | |
134 | \r | |
135 | #sort the files into gl, glut, glu, and glX\r | |
136 | \r | |
137 | foreach (@files)\r | |
138 | {\r | |
139 | if (/xml/)\r | |
140 | {\r | |
141 | # filter out entrypoint variations that don't have their own man pages\r | |
142 | my $needIndexEntry = 0;\r | |
143 | \r | |
144 | # continue only if parent page exists (e.g. glColor) OR \r | |
145 | # different parent page exists with matching entrypoint (e.g. glEnd)\r | |
146 | my $entrypoint = $_;\r | |
147 | $entrypoint =~ s/\.xml//;\r | |
148 | \r | |
149 | foreach (@pageNames)\r | |
150 | {\r | |
151 | if ($_ eq $entrypoint)\r | |
152 | {\r | |
153 | # it has its own man page\r | |
154 | $needIndexEntry = 1;\r | |
155 | }\r | |
156 | }\r | |
157 | \r | |
158 | if ($needIndexEntry == 0)\r | |
159 | {\r | |
160 | foreach (@realEntrypoints)\r | |
161 | {\r | |
162 | if ($_ eq $entrypoint)\r | |
163 | {\r | |
164 | # it's a real entrypoint, but make sure not a variation\r | |
165 | $needIndexEntry = 1;\r | |
166 | \r | |
167 | foreach (@pageNames)\r | |
168 | {\r | |
169 | my $alteredEntrypoint = $entrypoint;\r | |
170 | $alteredEntrypoint =~ s/$_//;\r | |
171 | \r | |
172 | if (!($alteredEntrypoint eq $entrypoint))\r | |
173 | {\r | |
174 | $needIndexEntry = 0;\r | |
175 | }\r | |
176 | }\r | |
177 | }\r | |
178 | }\r | |
179 | }\r | |
180 | \r | |
181 | #if ($needIndexEntry)\r | |
182 | if (substr($_, 0, 3) eq "gl_")\r | |
183 | {\r | |
184 | push (@builtins, $_);\r | |
185 | }\r | |
186 | else\r | |
187 | {\r | |
188 | push (@glsl, $_);\r | |
189 | }\r | |
190 | }\r | |
191 | }\r | |
192 | \r | |
193 | \r | |
194 | #output the table of contents\r | |
195 | \r | |
196 | my @toc;\r | |
197 | \r | |
198 | if ($#glsl > 0)\r | |
199 | {\r | |
200 | $currentletter = "";\r | |
201 | $opentable = 0;\r | |
202 | \r | |
203 | foreach (@glsl)\r | |
204 | {\r | |
205 | $name = $_;\r | |
206 | $firstletter = uc(substr($name, 0, 1));\r | |
207 | if ($firstletter ne $currentletter)\r | |
208 | {\r | |
209 | push (@toc, $firstletter);\r | |
210 | $currentletter = $firstletter;\r | |
211 | }\r | |
212 | }\r | |
213 | }\r | |
214 | \r | |
215 | \r | |
216 | print '<center>';\r | |
217 | print '<div id="container">';\r | |
218 | foreach (@toc)\r | |
219 | {\r | |
220 | print '<b><a href="#';\r | |
221 | print $_;\r | |
222 | print '" style="text-decoration:none"> ';\r | |
223 | print $_;\r | |
224 | print " </a></b> ";\r | |
225 | }\r | |
226 | if ($#builtins > 0)\r | |
227 | {\r | |
228 | print '<br/><b><a href="#Built-in Variables" style="text-decoration:none">Built-in Variables</a></b>';\r | |
229 | }\r | |
230 | print "</div>\n\n\n";\r | |
231 | print '</center>';\r | |
232 | \r | |
233 | # output the tables\r | |
234 | \r | |
235 | if ($#glsl > 0)\r | |
236 | {\r | |
237 | $currentletter = "";\r | |
238 | $opentable = 0;\r | |
239 | \r | |
240 | foreach (@glsl)\r | |
241 | {\r | |
242 | $name = $_;\r | |
243 | $firstletter = uc(substr($name, 0, 1));\r | |
244 | if ($firstletter ne $currentletter)\r | |
245 | {\r | |
246 | if ($opentable == 1)\r | |
247 | {\r | |
248 | EndTable();\r | |
249 | }\r | |
250 | BeginTable($firstletter);\r | |
251 | $opentable =1;\r | |
252 | $currentletter = $firstletter;\r | |
253 | }\r | |
254 | TableElementForFilename($_);\r | |
255 | }\r | |
256 | if ($opentable)\r | |
257 | {\r | |
258 | EndTable();\r | |
259 | }\r | |
260 | }\r | |
261 | \r | |
262 | if ($#builtins > 0)\r | |
263 | {\r | |
264 | BeginTable("Built-in Variables");\r | |
265 | foreach (@builtins)\r | |
266 | {\r | |
267 | TableElementForFilename($_);\r | |
268 | }\r | |
269 | EndTable();\r | |
270 | }\r | |
271 | \r | |
272 | PrintFooter();\r |