2 "# Below is a stripped down version of bib2xhtml used by doxygen.\n"
3 "# For the full version see http://www.spinellis.gr/sw/textproc/bib2xhtml/\n"
5 "# Convert from bibtex to XHTML.\n"
7 "# (C) Copyright 1995, 1996 David Hull.\n"
8 "# (David Hull / hull@cs.uiuc.edu / http://www.uiuc.edu/ph/www/dlhull)\n"
10 "# (C) Copyright 2002-2010 Diomidis Spinellis\n"
11 "# http://www.spinellis.gr\n"
13 "# This program is free software. You can redistribute it and/or modify\n"
14 "# it under the terms of the GNU General Public License. See the\n"
15 "# files README and COPYING for details.\n"
17 "# This source code contains UTF-8 characters. You might want to use\n"
18 "# an appropriate editor, if you want to view/modify the LaTeX to Unicode\n"
19 "# substitution commands.\n"
23 "use open IO => ':crlf';\n"
24 "$label_styles{'numbered'} = $LABEL_NUMBERED = 2;\n"
25 "$list_start[$LABEL_NUMBERED] = 'dl class=\"citelist\"';\n"
26 "$list_end[$LABEL_NUMBERED] = \"/dl\";\n"
30 " s/\\\\\\'(\\001\\d+)\\{([AEIOUaeiou])\\1\\}/&$2acute;/gs;\n"
31 " s/\\\\\\'([AEIOUaeiou])/&$1acute;/g;\n"
32 " s/\\\\\\`(\\001\\d+)\\{([AEIOUaeiou])\\1\\}/&$2grave;/gs;\n"
33 " s/\\\\\\`([AEIOUaeiou])/&$1grave;/g;\n"
34 " s/\\\\\\\"(\\001\\d+)\\{([AEIOUaeiouy])\\1\\}/&$2uml;/gs;\n"
35 " s/\\\\\\\"([AEIOUaeiouy])/&$1uml;/g;\n"
36 " s/\\\\\\~(\\001\\d+)\\{([ANOano])\\1\\}/&$2tilde;/gs;\n"
37 " s/\\\\\\~([ANOano])/&$1tilde;/g;\n"
38 " s/\\\\\\^(\\001\\d+)\\{([AEIOUaeiou])\\1\\}/&$2circ;/gs;\n"
39 " s/\\\\\\^([AEIOUaeiou])/&$1circ;/g;\n"
40 " s/\\\\c(\\001\\d+)\\{([Cc])\\1\\}/&$2cedil;/gs;\n"
41 " s/\\\\u(\\001\\d+)\\{(.)\\1\\}/$2/gs;\n"
42 " s/\\\\v(\\001\\d+)\\{(.)\\1\\}/$2/gs;\n"
43 " s/\\\\([lL])\\b/$1/g;\n"
44 " s/\\\\\\=(\\001\\d+)\\{(.)\\1\\}/$2/gs;\n"
45 " s/\\\\\\=(.)/$1/g;\n"
46 " s/\\\\\\.(\\001\\d+)\\{(.)\\1\\}/$2/gs;\n"
47 " s/\\\\\\.(.)/$1/g;\n"
48 " s/\\\\([Oo])\\b\\s*/&$1slash;/g;\n"
49 " s/\\\\AA\\b\\s*/Å/g;\n"
50 " s/\\\\aa\\b\\s*/å/g;\n"
51 " s/\\\\AE\\b\\s*/Æ/g;\n"
52 " s/\\\\ae\\b\\s*/æ/g;\n"
53 " s/\\\\ss\\b\\s*/ß/g;\n"
54 " s/\\\\S\\b\\s*/§/g;\n"
55 " s/\\\\P\\b\\s*/¶/g;\n"
56 " s/\\\\pounds\\b\\s*/£/g;\n"
57 " s/\\?\\`/¿/g;\n"
58 " s/\\!\\`/¡/g;\n"
59 " s/\\-\\-\\-/—/g;\n"
60 " s/([^\\!])\\-\\-([^\\>])/$1–$2/g;\n"
61 " s/\\\\([aA]lpha)\\b/&$1;/g;\n"
62 " s/\\\\([bB]eta)\\b/&$1;/g;\n"
63 " s/\\\\([gG]amma)\\b/&$1;/g;\n"
64 " s/\\\\([dD]elta)\\b/&$1;/g;\n"
65 " s/\\\\varepsilon\\b/ε/g;\n"
66 " s/\\\\([eE]psilon)\\b/&$1;/g;\n"
67 " s/\\\\([zZ]eta)\\b/&$1;/g;\n"
68 " s/\\\\([eE]ta)\\b/&$1;/g;\n"
69 " s/\\\\([tT]heta)\\b/&$1;/g;\n"
70 " s/\\\\vartheta\\b/θ/g;\n"
71 " s/\\\\([iI]ota)\\b/&$1;/g;\n"
72 " s/\\\\([kK]appa)\\b/&$1;/g;\n"
73 " s/\\\\([lL]ambda)\\b/&$1;/g;\n"
74 " s/\\\\([mM]u)\\b/&$1;/g;\n"
75 " s/\\\\([nN]u)\\b/&$1;/g;\n"
76 " s/\\\\([xX]i)\\b/&$1;/g;\n"
77 " s/\\\\([oO]micron)\\b/&$1;/g;\n"
78 " s/\\\\([pP]i)\\b/&$1;/g;\n"
79 " s/\\\\varpi\\b/π/g;\n"
80 " s/\\\\([rR]ho)\\b/&$1;/g;\n"
81 " s/\\\\varrho\\b/ρ/g;\n"
82 " s/\\\\([sS]igma)\\b/&$1;/g;\n"
83 " s/\\\\varsigma\\b/ς/g;\n"
84 " s/\\\\([tT]au)\\b/&$1;/g;\n"
85 " s/\\\\([uU]psilon)\\b/&$1;/g;\n"
86 " s/\\\\([pP]hi)\\b/&$1;/g;\n"
87 " s/\\\\varphi\\b/φ/g;\n"
88 " s/\\\\([cC]hi)\\b/&$1;/g;\n"
89 " s/\\\\([pP]si)\\b/&$1;/g;\n"
90 " s/\\\\([oO]mega)\\b/&$1;/g;\n"
91 " s/\\\\S\\b/§/g;\n"
92 " s/^\\\\circ\\b/°/g;\n"
93 " s/\\\\infty\\b/∞/g;\n"
94 " s/\\\\emptyset\\b/∅/g;\n"
95 " s/\\\\pm\\b/±/g;\n"
96 " s/\\\\times\\b/×/g;\n"
97 " s/\\\\cdot\\b/⋅/g;\n"
98 " s/\\\\partial\\b/∂/g;\n"
99 " s/\\\\nabla\\b/∇/g;\n"
100 " s/\\\\surd\\b/√/g;\n"
101 " s/\\\\perp\\b/⊥/g;\n"
102 " s/\\\\sum\\b/∑/g;\n"
103 " s/\\\\int\\b/∫/g;\n"
104 " s/\\\\prod\\b/∏/g;\n"
105 " s/\\\\sim\\b/∼/g;\n"
106 " s/\\\\approx\\b/≈/g;\n"
107 " s/\\\\ne\\b/≠/g;\n"
108 " s/\\\\equiv\\b/≡/g;\n"
109 " s/\\\\propto\\b/∝/g;\n"
110 " s/\\\\le\\b/≤/g;\n"
111 " s/\\\\ge\\b/≥/g;\n"
112 " s/\\\\leftarrow\\b/←/g;\n"
113 " s/\\\\rightarrow\\b/→/g;\n"
114 " s/\\\\in\\b/∈/g;\n"
115 " s/\\\\notin\\b/∉/g;\n"
116 " s/\\\\lceil\\b/⌈/g;\n"
117 " s/\\\\rceil\\b/⌉/g;\n"
118 " s/\\\\lfloor\\b/⌊/g;\n"
119 " s/\\\\rfloor\\b/⌋/g;\n"
121 "foreach (@ARGV) {\n"
122 " if (/\\.bib$/) {\n"
124 " $bibfile =~ s/\\.bib$//;\n"
125 " push(@bibfiles,$bibfile);\n"
130 "exit(1) unless defined($htmlfile);\n"
131 "$bibdatacmd=\"\\\\bibdata{\".join(',',@bibfiles).\"}\";\n"
132 "$label_style = $LABEL_NUMBERED;\n"
133 "$bstfile = \"doxygen\";\n"
135 "open(HTMLFILE,\">$htmlfile$$\");\n"
136 "if (open(OHTMLFILE, \"$htmlfile\")) {\n"
137 " $mode = (stat OHTMLFILE)[2] & 0xfff;\n"
139 " print \"Error opening $htmlfile\\n\";\n"
142 "$beginstring = \"<!-- BEGIN CITATIONS -->\";\n"
143 "$endstring = \"<!-- END CITATIONS -->\";\n"
146 "while (<OHTMLFILE>) {\n"
148 " last loop if m/^$beginstring$/;\n"
151 "while (<OHTMLFILE>) {\n"
153 " last loop if m/^$endstring$/;\n"
154 " push(@citations, $2) if m/^([^\\\\]*)?(.+\\})(.*)?$/;\n"
156 "push(@citations, $bibdatacmd);\n"
157 "$auxfile = \"bib$$\";\n"
158 "push(@tmpfiles, \"$auxfile.aux\");\n"
159 "open(AUXFILE, \">$auxfile\" . \".aux\");\n"
160 "print AUXFILE \"\\\\relax\\n\\\\bibstyle{$bstfile}\\n\";\n"
161 "foreach $citation (@citations) {\n"
162 " print AUXFILE \"$citation\\n\";\n"
165 "push(@tmpfiles, \"$auxfile.blg\");\n"
166 "push(@tmpfiles, \"$auxfile.bbl\");\n"
167 "`bibtex $auxfile 2>&1`;\n"
170 " print \"bibtex command failed: $!\\n\";\n"
172 "$beginstring = \"<!-- BEGIN BIBLIOGRAPHY -->\";\n"
173 "$endstring = \"<!-- END BIBLIOGRAPHY -->\";\n"
175 "while (<OHTMLFILE>) {\n"
176 " last loop if m/^$beginstring$/;\n"
180 "while (<OHTMLFILE>) {\n"
181 " last loop if m/^$endstring$/;\n"
183 "print HTMLFILE \"$beginstring\\n\";\n"
184 "$t = $auxfile . \".bbl\";\n"
186 "open(BBLFILE, \"<$t\") || die \"error opening $t: $!\\n\";\n"
189 "while (<BBLFILE>) {\n"
190 " if (($nentry == 0) && (m/^#/)) {\n"
191 " if ((m/#\\s*label-style:\\s*(\\S+)/) && (! defined $label_style)) {\n"
192 " $label_style = $label_styles{$1};\n"
193 " if (! defined $label_style) {\n"
194 " print STDERR \"label style unknown: \\n\";\n"
201 " ($bcite, $blabel) = m+<dt><a name=\\\"([^\\\"]*)\\\">\\[([^\\]]*)\\]</a></dt><dd>+;\n"
202 " $blabel = \"$nentry\";\n"
203 " $bibcite{$bcite} = $blabel;\n"
206 "$label_style = $LABEL_DEFAULT if (! defined $label_style);\n"
207 "$list_start = $list_start[$label_style];\n"
208 "$list_end = $list_end[$label_style];\n"
209 "print HTMLFILE \"<$list_start>\\n\\n\";\n"
210 "open(BBLFILE, \"<$t\") || die \"error opening $t: $!\\n\";\n"
213 "while (<BBLFILE>) {\n"
214 " next loop if (($nentry == 0) && (m/^#/));\n"
216 " s/\\\\\\{/\\002/g;\n"
217 " s/\\\\\\}/\\003/g;\n"
218 " s/\\\\\\$/\\004/g;\n"
220 " local ($c, $l, $z) = (0, 0, ());\n"
221 " s/([\\{\\}])/join(\"\",\"\\001\",($1 eq \"\\{\" ? $z[$l++]=$c++ : $z[--$l]),$1)/ge;\n"
224 " s/(\\.(<\\/cite>|<\\/a>|\\')+)\\./$1/g;\n"
225 " s:(<dt><a name=\\\"[^\\\"]*\\\">\\[)[^\\]]*(\\]</a></dt><dd>):$1$nentry$2:;\n"
226 " while (m/(\\\\(cite(label)?)(\\001\\d+)\\{([^\\001]+)\\4\\})/) {\n"
229 " $doxref = defined($3);\n"
231 " if (! defined $bibcite{$bcite}) {\n"
232 " $blabel = \" [\" . $bcite . \"]\";\n"
233 " } elsif ($doxref) {\n"
234 " $blabel = \" <a href=\\\"#$bcite\\\">[\" . $bibcite{$bcite} . \"]<\\/a>\";\n"
236 " $blabel = \" [\" . $bibcite{$bcite} . \"]\";\n"
238 " $old =~ s/(\\W)/\\\\$1/g;\n"
239 " s/\\s*$old/$blabel/g;\n"
241 " s/In (<a href=\\\"[^\\\"]*\\\">)([^\\[]+) \\[(\\2)/In $1\\[$2/;\n"
242 " s/\\\\htmladdnormallink(foot)?(\\001\\d+)\\{([^\\001]+)\\2\\}(\\001\\d+)\\{([^\\001]+)\\4\\}/<a href=\"$5\">$3<\\/a>/gs;\n"
243 " s/\\&/\\005/g;\n"
244 " s/\\\\?&/&/g;\n"
245 " s/\\005/&/g;\n"
247 " while (m/\\\\char([\\'\\\"]?[0-9a-fA-F]+)/) {\n"
249 " if ($r =~ s/^\\'//) {\n"
251 " } elsif ($r =~ s/^\\\"//) {\n"
254 " s/\\\\char$o\\s*/&#$r;/g;\n"
256 " s/{\\\\etalchar\\001(\\d+)\\{(.)}\\001\\1\\}/$2/g;\n"
257 " s/\\\\par\\b/<p \\/>/g;\n"
258 " s/\\\\url(\\001\\d+)\\{(.*)\\1\\}/<a href=\"$2\">$2<\\/a>/gs;\n"
259 " s/\\\\href(\\001\\d+)\\{(.*)\\1\\}(\\001\\d+)\\{([^\\001]*)\\3\\}/<a href=\"$2\">$4<\\/a>/gs;\n"
260 " s/\\\\href(\\001\\d+)\\{(.*)\\1\\}/<a href=\"$2\">$2<\\/a>/gs;\n"
261 " s/(\\001\\d+)\\{\\\\rm\\s+(.*)\\1\\}/$2/gs;\n"
262 " s/\\\\textrm(\\001\\d+)\\{(.*)\\1\\}/$2/gs;\n"
263 " s/(\\001\\d+)\\{\\\\em\\s+(.*)\\1\\}/<em>$2<\\/em>/gs;\n"
264 " s/(\\001\\d+)\\{\\\\it\\s+(.*)\\1\\}/<i>$2<\\/i>/gs;\n"
265 " s/(\\001\\d+)\\{\\\\bf\\s+(.*)\\1\\}/<b>$2<\\/b>/gs;\n"
266 " s/(\\001\\d+)\\{\\\\tt\\s+(.*)\\1\\}/<tt>$2<\\/tt>/gs;\n"
267 " s/\\\\emph(\\001\\d+)\\{(.*)\\1\\}/<em>$2<\\/em>/gs;\n"
268 " s/\\\\textit(\\001\\d+)\\{(.*)\\1\\}/<i>$2<\\/i>/gs;\n"
269 " s/\\\\textbf(\\001\\d+)\\{(.*)\\1\\}/<b>$2<\\/b>/gs;\n"
270 " s/\\\\texttt(\\001\\d+)\\{(.*)\\1\\}/<tt>$2<\\/tt>/gs;\n"
271 " s/\\\\mathrm(\\001\\d+)\\{(.*)\\1\\}/$2/gs;\n"
272 " s/\\\\mathnormal(\\001\\d+)\\{(.*)\\1\\}/$2/gs;\n"
273 " s/\\\\mathsf(\\001\\d+)\\{(.*)\\1\\}/$2/gs;\n"
274 " s/\\\\mathbf(\\001\\d+)\\{(.*)\\1\\}/<b>$2<\\/b>/gs;\n"
275 " s/\\\\mathcal(\\001\\d+)\\{(.*)\\1\\}/<i>$2<\\/i>/gs;\n"
276 " s/\\\\mathit(\\001\\d+)\\{(.*)\\1\\}/<i>$2<\\/i>/gs;\n"
277 " s/\\\\mathtt(\\001\\d+)\\{(.*)\\1\\}/<tt>$2<\\/tt>/gs;\n"
278 " s/\\\\bibxhtmlname(\\001\\d+)\\{(.*)\\1\\}/$2/ges;\n"
281 " $t =~ s/\\^(\\001\\d+)\\{\\\\circ\\1\\}/\\&\\#176;/gs;\n"
282 " $t =~ s/\\^\\\\circ/\\&\\#176;/g;\n"
283 " $t =~ s/\\^(\\001\\d+)\\{(.*)\\1\\}/<sup>$2<\\/sup>/gs;\n"
284 " $t =~ s/\\^(\\w)/<sup>$1<\\/sup>/g;\n"
285 " $t =~ s/\\_(\\001\\d+)\\{(.*)\\1\\}/<sub>$2<\\/sub>/gs;\n"
286 " $t =~ s/\\_(\\w)/<sub>$1<\\/sub>/g;\n"
289 " s/(\\$([^\\$]+)\\$)/&domath($2)/ge;\n"
290 " s/(\\\\\\((([^\\\\]|\\\\[^\\(\\)])+)\\\\\\))/&domath($2)/ge;\n"
291 " s/\\\\mbox(\\001\\d+)\\{(.*)\\1\\}/$2/gs;\n"
292 " while (s/(\\<a href\\=\\\"[^\"]*?)\\~/$1\\005/g) { ; }\n"
293 " s/([^\\\\])~/$1 /g;\n"
294 " s/\\\\\\,/ /g;\n"
295 " s/\\\\ldots\\b/…/g;\n"
296 " s/\\\\dots\\b/…/g;\n"
299 " s/\\\\textasciitilde\\b\\s*/~/g;\n"
300 " s/\\\\([\\#\\&\\%\\~\\_\\^\\|])/$1/g;\n"
302 " s/\\001(\\d+)\\{\\\\[A-Za-z]+\\001(\\d+)\\{([^\\001]*)\\001\\2\\}\\001\\1\\}/$3/g;\n"
303 " s/\\\\([A-Za-z]+)/ $1 /g;\n"
304 " s+In <a href=\\\"[^\\\"]*\\\"></a>++;\n"
305 " s/\\001\\d+[\\{\\}]//gs;\n"
306 " tr/\\002\\003\\004/{}$/;\n"
307 " print HTMLFILE $_;\n"
310 "print HTMLFILE \"<$list_end>\\n\\n$endstring\\n\";\n"
311 "while (<OHTMLFILE>) {\n"
314 "close (OHTMLFILE);\n"
316 "chmod($mode, \"$htmlfile$$\");\n"
317 "rename(\"$htmlfile$$\", $htmlfile);\n"
318 "unlink(@tmpfiles);\n"