# $Id: sanitize.pl,v 1.11 2003/06/20 10:51:44 rf Exp rf $ # provides the sanitize_line function used by all texfaq2* files # # will not compile standing alone # Convert a LaTeX line to HTML: sub sanitize_line { s"\&"\&\;"g; s"\<"\<\;"g; s"\>"\>\;"g; if ($converting && !$ignoring) { s"\\vspace\*\{[^\}]*\}""g; s"``"\""g; s"''"\""g; s"^\s*$"
";
s"\%.*"";
s"\\obracesymbol\{\}"\&lbrace\;"g;
s"\\cbracesymbol\{\}"\&rbrace\;"g;
s"\\\{"\&lbrace\;"g;
s"\\\}"\&rbrace\;"g;
s"\\ae\{\}"\æ\;"g;
s"\\AllTeX\{\}"(La)TeX"g;
s"\\twee\{\}"2e"g;
s"\\LaTeXe\{\}"LaTeX2e"g;
s"\\LaTeXo\{\}"LaTeX 2.09"g;
s"\\MF\{\}"Metafont"g;
s"\\MP\{\}"MetaPost"g;
s"\\BV\{\}"Baskerville"g;
s"\\TUGboat\{\}"TUGboat"g;
s"\\PDFTeX\{\}"PDFTeX"g;
s"\\PDFLaTeX\{\}"PDFLaTeX"g;
s"\\CONTeXT\{\}"ConTeXt"g;
s"\\NTS\{\}"NTS"g;
s"\\eTeX\{\}"e-TeX"g;
s"\\Eplain\{\}"Eplain"g;
s"\\TeXsis\{\}"TeXsis"g;
s"\\YandY\{\}"Y&Y"g;
s"\\WYSIWYG\{\}"WYSIWYG"g;
s"\\PS\{\}"PostScript"g;
s"\\dots\{\}"..."g;
s"\\ldots\{\}"..."g;
s"\\large""g;
s"\\pounds\{\}"£"g;
s"\\arrowhyph\{\}"-> "g;
s"\\protect""g;
s"\-\-\-"\-"g;
s"\-\-"\-"g;
s"\\(\w+)\{\}"$1"g;
s"\\\"a"\ä\;"g;
s"\\\"o"\ö\;"g;
s"\\\'e"\é\;"g;
s"\\\^e"\ê\;"g;
s"\\\'o"\ó\;"g;
s"\\ss"\ß\;"g;
s"`"'"g;
s"\\label\{[^\}]*\}""g;
s"\\acro\{([^\}]*)\}"$1"g;
s"\\ensuremath\{([^\}]*)\}"$1"g;
s"\\emph\{([^\}]*)\}"$1"g;
s"\\textit\{([^\}]*)\}"$1"g;
s"\\textsl\{([^\}]*)\}"$1"g;
s"\\meta\{([^\}]*)\}"<\;$1>\;"g;
s"\\texttt\{([^\}]*)\}"$1
"g;
s"\\textbf\{([^\}]*)\}"$1"g;
s"\\csx\{([^\}]*)\}"\\$1
"g;
s"\\parens\{([^\}]*)\}"$1"g;
s"\\oparen\{\}""g;
s"\\cparen\{\}""g;
s"\~"\\textasciitilde{}"g if s"\\href\{([^\}]*)\}\{([^\}]*)\}"$2";
s"\\Q\{([^\}]*)\}""g;
s"\\checked\{([^\}]*)\}\{([^\}]*)\}""g;
s"\\footnote\{([^\}]*)\}""g;
s"\\thinspace\{\}" "g;
s"\\section\{([^\}]*)\}""g;
s"\\subsection\{([^\}]*)\}""g;
s"\$\\pi\$"pi"g;
s"\$([^\$]*)\$"$1"g;
s"\\ISBN\{([^\}]*)\}"ISBN $1"g;
s"\\ProgName\|([^\|]*)\|"$1"g;
s"\\ProgName\{([^\}]*)\}"$1"g;
s"\\FontName\|([^\|]*)\|"$1"g;
s"\\FontName\{([^\}]*)\}"$1"g;
s"\\Package\|([^\|]*)\|"$1"g;
s"\\Package\{([^\}]*)\}"$1"g;
s"\\Class\|([^\|]*)\|"$1"g;
s"\\Class\{([^\}]*)\}"$1"g;
s"\\Email\|([^\|]*)\|"$1"g;
s"\\mailto\|([^\|]*)\|"$1"g;
s"\\File\|([^\|]*)\|"$1"g;
s"\\Newsgroup\|([^\|]*)\|"$1"g;
s"\~"\\textasciitilde{}"g if s"\\URL\{([^\}]*)\}"\$1\<\/a\>"g;
s"\\FTP\|([^\|]*)\|"\$1\<\/a\>"g;
s"\\CTAN\{([^\|]*)\}"\$1\<\/a\>"g;
s"\\Qref\[([^\]]*)\]\{([^\}]*)\}\{([^\}]*)\}"$2"g;
s"\\Qref\{([^\}]*)\}\{([^\}]*)\}"$1"g;
s"\\cmdinvoke\{([^\}]*)\}\{([^\}]*)\}\{([^\}]*)\}\{([^\}]*)\}\{([^\}]*)\}"\\$1\{$2\}\{$3\}\{$4\}\{$5\}
"g;
s"\\cmdinvoke\{([^\}]*)\}\[([^\]]*)\]\{([^\}]*)\}"\\$1\[$2\]\{$3\}
"g;
s"\\cmdinvoke\{([^\}]*)\}\{([^\}]*)\}\[([^\]]*)\]"\\$1\{$2\}\[$3\]
"g;
s"\\cmdinvoke\{([^\}]*)\}\{([^\}]*)\}\{([^\}]*)\}"\\$1\{$2\}\{$3\}
"g;
s"\\cmdinvoke\{([^\}]*)\}\{([^\}]*)\}"\\$1\{$2\}
"g;
s"\\cmdinvoke\{([^\}]*)\}\[([^\]]*)\]"\\$1\[$2\]
"g;
s"\\cmdinvoke\*\{([^\}]*)\}\{([^\}]*)\}\{([^\}]*)\}"\\$1\{
$2\}\{
$3\}
"g;
s"\\environment\{([^\}]*)\}"$1
"g;
s"\\pkgoption\{([^\}]*)\}"$1
"g;
s"\\path\|([^\|]*)\|"$1"g;
s"\\begin\{htmlversion\}.*\n""g;
s"\\end\{htmlversion\}.*\n""g;
s"\\begin\{quote\}"
"g; s"\\end\{quote\}""g; s"\\begin\{description\}"
$1
"g;
s"\\\_"\_"g;
s"\\textpercent"\%"g; # can't have \% in source...
s"\\\$"\$"g;
s"\\\#"\#"g;
s"\\ " "g;
s"\\\&"\&"g;
s"\\\@""g;
s"\\\;" "g;
s"\\\," "g;
s"\~" "g;
s"\\nobreakspace" "g;
s"\\textasciitilde"\~"g;
s"\\textbar"\|"g;
s"\\cs\"\\"g;
s"\&lbrace\;"\{";
s"\&rbrace\;"\}";
s"\\symbol\{([^\}]*)\}"$SymbolChar{$1}"g;
s"\{\}""g;
s"\\keywords\{([^\}]*)\}""g;
s"\\relax""g;
s"\\hphantom\{[^\}]*\}""g;
s"\\nothtml\{[^\}]*\}""g;
s"\\latexhtml\{[^\}]*\}\{([^\}]*)\}"$1"g;
s"\\htmlonly\{([^\}]*)\}"$1"g;
}
if ( s"\\begin\{ctanrefs\}""g ) {
$itemset = "";
$enditemset = "";
}
if ( s"\\end\{ctanrefs\}"
"g ) {
$itemset = "";
$enditemset = "";
}
while ( /\\CTANref\{([^\}]*)\}/ ) {
my $repl=generate_CTAN_ref("$1");
s/\\CTANref\{([^\}]*)\}/$repl/;
}
$converting = 0 if s"\\begin\{verbatim\}""g;
$converting = 1 if s"\\end\{verbatim\}"
"g;
$ignoring++ if s"\\htmlignore""g;
$ignoring-- if s"\\endhtmlignore""g;
$ignoring++ if s"\\begin\{comment\}""g;
$ignoring-- if s"\\end\{comment\}""g;
$ignoring++ if s"\\begin\{footnoteenv\}""g;
$ignoring-- if s"\\end\{footnoteenv\}""g;
$_ = "" if $ignoring;
}
sub generate_CTAN_ref {
if ( $ctanref_plus{$1} > 0 ) {
$ret = "\$ctanref{$1}\<\/a\>";
$ret .= " (\$fmt_2_name\<\/a\>";
$ret .= ", \$fmt_3_name\<\/a\>)";
} elsif ( $ctanref_plus{$1} = 0 ) {
$ret = "\" .
"$ctanref{$1}\<\/a\>";
} else {
$ret = "\" .
"$ctanref{$1}\<\/a\>";
}
$ret;
}
1;