# $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\}"
"g; s"\\end\{description\}"
"g; s"\\begin\{booklist\}"
"g; s"\\end\{booklist\}"
"g; s"\\begin\{proglist\}"
"g; s"\\end\{proglist\}"
"g; s"\\begin\{itemize\}""g; s"\\begin\{enumerate\}"
    "g; s"\\end\{enumerate\}"
"g; s"\\item\s*\[\\normalfont\{\}([^\]]*)\]"
$1
"g; s"\\item\s*\[([^\]]*)\]"
$itemset$1$enditemset
"g; s"\\item"
  • "g; s"\\\\(\[[^\]]*\])?"
    "g; s"\|([^\|]+)\|"$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;