rename upstream-man-pages to upstream-doc
[clinton/guile-figl.git] / upstream-doc / manglsl / xhtml / makeindex.pl
CommitLineData
7faf1d71
AW
1#!/usr/bin/perl\r
2\r
3sub Usage {\r
4print \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
14sub PrintHeader {\r
15print '<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
28sub PrintFooter {\r
29print '\r
30<P>\r
31<center>\r
32<small>OpenGL Shading Language (GLSL) Reference Pages Copyright &copy 2011 Khronos Group, Inc.</small>\r
33</center>\r
34</P>\r
35</body>\r
36</html>\r
37';\r
38}\r
39\r
40sub 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
51sub 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
59sub 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
71if (@ARGV != 2)\r
72{\r
73 Usage();\r
74 die;\r
75}\r
76\r
77# grab list of generated XHTML files\r
78opendir(DIR,$ARGV[0]) or die "couldn't open directory";\r
79\r
80@files = readdir(DIR);\r
81close(DIR);\r
82@files = sort {uc($a) cmp uc($b)} @files;\r
83\r
84PrintHeader();\r
85\r
86my @glsl;\r
87my @builtins;\r
88\r
89my @realEntrypoints;\r
90my @pageNames;\r
91\r
92#pre-create list of all true entrypoint names\r
93\r
94foreach (@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
118foreach (@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
137foreach (@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
196my @toc;\r
197\r
198if ($#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
216print '<center>';\r
217print '<div id="container">';\r
218foreach (@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> &nbsp; ";\r
225}\r
226if ($#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
230print "</div>\n\n\n";\r
231print '</center>';\r
232\r
233# output the tables\r
234\r
235if ($#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
262if ($#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
272PrintFooter();\r