summaryrefslogtreecommitdiff
path: root/Master/texmf-doc/doc/english/FAQ-en/texfaq2html
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-doc/doc/english/FAQ-en/texfaq2html')
-rw-r--r--Master/texmf-doc/doc/english/FAQ-en/texfaq2html434
1 files changed, 434 insertions, 0 deletions
diff --git a/Master/texmf-doc/doc/english/FAQ-en/texfaq2html b/Master/texmf-doc/doc/english/FAQ-en/texfaq2html
new file mode 100644
index 00000000000..f8e2f5d7181
--- /dev/null
+++ b/Master/texmf-doc/doc/english/FAQ-en/texfaq2html
@@ -0,0 +1,434 @@
+#!/usr/bin/perl
+#
+# ========================================================================
+# @perl-file{
+# author = "Alan Jeffrey",
+# version = "0.19",
+# date = "15 January 1996",
+# time = "12:26:55 GMT",
+# filename = "texfaq2html",
+# address = "School of Cognitive and Computing Sciences
+# University of Sussex
+# Brighton BN1 9QH
+# UK",
+# FAX = "+44 1273 671320"
+# email = "alanje@cogs.sussex.ac.uk",
+# codetable = "ISO/ASCII",
+# keywords = "LaTeX FAQ HTML",
+# supported = "yes",
+# abstract = "This perl script converts the UKTUG TeX FAQ
+# LaTeX source document into HTML, on the fly."
+# package = "stands alone",
+# dependencies = "faqbody.tex, newfaq.aux, dirctan.tex,
+# filectan,tex",
+# }
+# ========================================================================
+
+# A script to provide a searchable WWW interface to the the UKTUG TeX
+# FAQ file.
+#
+# The script takes parameters in the form of the QUERY_STRING environment
+# variable.
+
+# Copyright 1994 Alan Jeffrey
+# Maintenance, since 1997, Robin Fairbairns
+
+require "sanitize.pl";
+
+# The site-specific stuff:
+
+$default_web = "www.tex.ac.uk";
+$href_script="http://$default_web/cgi-bin/texfaq2html";
+$home = "$ENV{FAQ_HOME}" || "/anfs/www/VH-tex/faq-source";
+$texfaq = "faqbody.tex";
+$auxfaq = "newfaq.aux";
+$ctandir = "dirctan.tex";
+$ctanfiles = "filectan.tex";
+$archive_list = "archive.list";
+
+# defaults; these have to be allowed by the $archive_list file
+
+$default_archive = "cam.ctan.org";
+$fmt_1 = ".tar.gz";
+$fmt_2 = ".zip";
+$fmt_2_name = "zip";
+$fmt_3 = "/";
+$fmt_3_name = "browse";
+
+# protocols for transferring files, browsing directories
+$proto_f = "ftp";
+$host_f = $default_archive;
+$proto_d = "http";
+$host_d = $default_web;
+
+$proto_1 = $proto_2 = $proto_f;
+$host_1 = $host_2 = $host_f;
+$proto_3 = $proto_d;
+$host_3 = $host_d;
+
+# table of symbols we believe in
+%SymbolChar = (
+ 92 => "\\",
+ 123 => "\{",
+ 125 => "\}"
+);
+
+# This script produces HTML:
+
+print ("Content-type: text/html\n\n");
+
+# Parse the arguments, and substitute hex(nn) for %nn:
+
+$_=$ENV{QUERY_STRING};
+
+while (/(\b\w*)\=([^\&]*)/g) {
+ ($key,$val)=($1,$2);
+ $val =~ s/\+/ /g;
+ $val =~ s/\%(\w\w)/sprintf("%c",hex($&))/eg;
+ $key =~ s/^archive$/a/;
+ $keys{$key} = $val;
+}
+
+$original_keyword = $keys{'keyword'};
+$original_keyword =~ s/ /\+/g;
+$keyword = $keys{'keyword'};
+$keyword =~ s/\+/ /g;
+$introduction = $keys{'introduction'};
+$question = $keys{'question'};
+$label = $keys{'label'};
+
+if ( $arch = $keys{'a'} ) {
+ $got_arch = 1;
+ $xtra_k = '&a=' . $arch }
+else {
+ $arch = $default_archive }
+
+grep ($question{$_}=1, split(/\s+/,$question));
+grep ($label{"Q-$_"}=1, split(/\s+/,$label));
+
+# By default, we convert LaTeX to HTML.
+
+$converting = 1;
+$ignoring = 0;
+$sectioning = 0;
+
+# two things used in conversion of \item[ ]
+
+$itemset = "";
+$enditemset = "";
+
+# Get the list of CTAN directories:
+
+open (CTANDIR, "$home/$ctandir")
+ || &oh_dear ("Couldn't open $ctandir");
+
+while (<CTANDIR>) {
+ if ( /\\CTANdirectory\{([^\}]*)\}\{([^\}]*)\}/ ) {
+ $ctanref{$1} = "$2";
+ $ctanref_plus{$1} = 1;
+ } elsif ( /\\CTANdirectory\*\{([^\}]*)\}\{([^\}]*)\}/ ) {
+ $ctanref{$1} = "$2/";
+ $ctanref_plus{$1} = 0;
+ }
+}
+
+# Get the list of CTAN files
+
+open (CTANFILES, "$home/$ctanfiles")
+ || &oh_dear ("Couldn't open $ctanfiles");
+
+while (<CTANFILES>) {
+
+ if ( /\\CTANfile\{([^\}]*)\}\{([^\}]*)\}/ ) {
+ $ctanref{$1} = "$2";
+ $ctanref_plus{$1} = -1;
+ }
+}
+
+# Get the list of allowable archives
+
+open (ARCHIVE_LIST, "$home/$archive_list")
+ || &oh_dear ("Couldn't open $archive_list");
+
+while (<ARCHIVE_LIST>) {
+ chop;
+ ($archive, $root_dir) = split(/\s+/, $_, 2);
+ $archive_root{$archive} = $root_dir;
+}
+unless ( $this_root = $archive_root{$arch} ) {
+ &oh_dear("Archive $arch isn't in my list") }
+$arch_root = "$arch/$this_root/";
+
+# Get the Qrefs:
+
+open (AUXFAQ, "$home/$auxfaq")
+ || &oh_dear ("Couldn't open $auxfaq");
+
+$last_question = -1;
+$labels = "";
+
+while (<AUXFAQ>) {
+ if (/\\newlabel\{([^\}]*)\}\{\{([^\}]*)\}/) {
+ $last_question = $2;
+ next if ( !( ($this_Qlabel = $1) =~ /^Q-/ ) );
+ $this_label = $this_Qlabel;
+ $this_label =~ s/^Q-//;
+ $label_list{$last_question} = $this_label . $xtra_k;
+ $question{$last_question}=1 if $label{$this_Qlabel};
+ if ($question{$last_question}) {
+ $qref{$this_Qlabel} = "#[$this_Qlabel]";
+ $labels .= "+" . $this_label;
+ } else {
+ $qref{$this_Qlabel} =
+ "$href_script?label=$this_label$xtra_k";
+ }
+ }
+}
+
+# $labels to hold a (list of) label names for these question(s)
+$labels =~ s/^\+//;
+
+# Open the FAQ file:
+
+open (TEXFAQ, "$home/$texfaq")
+ || &oh_dear ("Couldn't open $texfaq");
+
+# Run through to the introduction, grabbing useful info.
+
+while (<TEXFAQ>) {
+ last if /\\section\{Introduction\}/;
+ $fileversion=$1 if /\\def\\faqfileversion\{([^\}]*)\}/;
+ $filedate=$1 if /\\def\\faqfiledate\{([^\}]*)\}/;
+}
+
+# Print the title (and build up some information for the trailer):
+
+$next_question = $previous_question = -1;
+
+$title_modifier="";
+if ($question || $label) {
+ $question_count=0;
+ foreach $key ( keys %question ) {
+ $question_count++;
+ $title_modifier=" -- question label \"$label_list{$key}\"";
+ $next_question = $key + 1;
+ if ( $key > 1 ) {
+ $previous_question = $key - 1;
+ }
+ }
+ if ( $question_count > 1 ) {
+ $title_modifier="";
+ $next_question = $previous_question = -1;
+ $url_name = "these questions";
+ } else {
+ $url_name = "this question";
+ }
+}
+
+if ( $next_question > 0 &&
+ $next_question > $last_question ) { $next_question = -1 };
+
+printf ("
+<html><head>
+<title>TeX Frequently Asked Questions $title_modifier</title>
+</head><body>
+<h1 align=\"center\">Welcome to the UK List of<br>
+ TeX Frequently Asked Questions<br>
+ on the Web</h1>
+");
+
+# Blast out the introduction until we get to the first section.
+
+if ($introduction) {
+ print "<center>Skip to <a href=#search>Search</a>";
+ if ( $question || $label || $keyword ) {
+ print "\n";
+ } else {
+ print " or <a href=#questions>List of questions</a></center>\n";
+ }
+ print "<h2>Introduction</h2>\n";
+ while (<TEXFAQ>) {
+ last if /\\section/;
+ &sanitize_line;
+ print;
+ }
+} else {
+ $_ = "";
+}
+
+# Produce the form.
+
+printf "
+<h2><a name=search>Searching</a></h2>
+<form action=\"$href_script\" method=get>
+The index of Frequently Asked Questions about TeX is searchable.<br>
+Please enter your keyword here:";
+if ( $got_arch ) {
+ printf "\n<input type=hidden name=a value=\"$arch\">";
+}
+print <<SEARCHES;
+<input type=\"text\" name=\"keyword\">&nbsp;&nbsp;
+then press here: <input type=\"submit\" value=\"search\">, &nbsp;&nbsp; or:
+</form>
+<!-- Search Google -->
+<center>
+<FORM method=GET action="http://www.google.com/search">
+<TABLE bgcolor="#FFFFFF"><tr><td>
+<A HREF="http://www.google.com/">
+<IMG SRC="http://www.google.com/logos/Logo_40wht.gif"
+border="0" ALT="Google" align="absmiddle"></A>
+<INPUT TYPE="text" name="q" size="25" maxlength="255" value="">
+<INPUT TYPE="hidden" name="q" value="TeX Frequently Asked Questions">
+<INPUT TYPE="hidden" name="sitesearch" value="tex.ac.uk">
+<INPUT TYPE="hidden" name="as_eq" value="matches">
+<INPUT type="submit" name="btnG" VALUE="Google Search">
+</td></tr></TABLE>
+</FORM>
+</center>
+<!-- Search Google -->
+<hr>
+
+SEARCHES
+
+
+if ($question || $label) {
+ do {
+ if (s/^\s*\\Question(\[.*\])?\{(.*)\}\s*$/$2/) {
+ $qnum++;
+ &sanitize_line;
+ if ($question{$qnum}) {
+ print "<h2>";
+ print "<a name=\"$1\">" if $1;
+ print;
+ print "</a>" if $1;
+ print "</h2>\n";
+ }
+ } elsif ($question{$qnum}) {
+ $printed = 1;
+ &sanitize_line;
+ print;
+ }
+ } while (<TEXFAQ>);
+ print "<p>\n";
+ if ( ! $printed ) {
+ print "<h2>Warning</h2>\n";
+ print "There is no question '$question'!<p>\n"
+ if $question;
+ print "There is no question with label '$label'!<p>\n"
+ if $label;
+ }
+} else {
+ if ($keyword) {
+ $_=$keyword;
+ sanitize_line;
+ print "Questions matching the expression '";
+ print;
+ print "'";
+ foreach $kwd ( split /\+/, $keyword ) {
+ $kwds{$kwd} = 1;
+ }
+ } else {
+ $kwds{"."} = 1;
+ $sectioning = 1;
+ }
+ print "<ul>";
+ $firstsection = 1;
+ do {
+ if ($sectioning && $converting) {
+ if (/^\s*\\section\{(.*)\}\s*$/ ) {
+ $_=$1;
+ &sanitize_line;
+ if ( $firstsection ) {
+ print "</ul><h3><a name=questions>$_</a></h3><ul>\n";
+ $firstsection = 0;
+ } else {
+ print "</ul><h3>$_</h3><ul>\n";
+ }
+ $_="";
+ } elsif ( /^\s*\\subsection\{(.*)\}\s*$/ ) {
+ $_=$1;
+ &sanitize_line;
+ print "</ul><h4>$_</h4><ul>\n";
+ $_="";
+ }
+ }
+ &sanitize_line;
+ if (/^\s*\\Question(\[.*\])?\{(.*)\}\s*$/) {
+ $qnum++;
+ $entry = "<li><a href=\"$href_script?label=$label_list{$qnum}$xtra_k\">$2</a>\n";
+ }
+ foreach $kwd ( keys %kwds ) {
+ if (/$kwd/i && $qnum) {
+ print $entry;
+ $entry = "";
+ $matches{$qnum} = 1;
+ last;
+ }
+ }
+ } while (<TEXFAQ>);
+ print "</ul>";
+ @matches=sort(keys(%matches));
+ if ($#matches == -1) {
+ print "<em>There were no matches.</em><p>\n";
+ } elsif ($#matches == 0) {
+ print "There was one match.<p>\n";
+ } else {
+ $stupid_perl = @matches;
+ print "There were $stupid_perl matches. ",
+ "You can get all of them by pressing ",
+ "<a href=\"$href_script?question=",
+ (join("+",@matches)),$xtra_k,
+ "\">here</a>.<p>\n";
+ }
+}
+
+# An error report:
+
+sub oh_dear {
+ print "<i>This shouldn\'t happen!</i><p>\n",
+ $_[0],
+ "\n<p>Please report this!\n";
+ die $_;
+}
+
+# print links to other questions
+
+
+# Print a tail.
+
+printf("
+<hr><address>
+ Maintenance of the
+ <a href=\"http://www.tex.ac.uk/faq\">TeX FAQ</a>
+ is coordinated by Robin Fairbairns.<p>
+");
+if ( $next_question >0 && $previous_question > 0 ) {
+ print "Go to <a href=\"$href_script?label=$label_list{$previous_question}\">\
+ previous question</a>, or
+ <a href=\"$href_script?label=$label_list{$next_question}\">\
+ next question</a>";
+}
+elsif ( $next_question > 0 ) {
+ print "Go to <a href=\"$href_script?label=$label_list{$next_question}\">\
+ next question</a>";
+}
+elsif ( $previous_question > 0 ) {
+ print "Go to <a href=\"$href_script?label=$label_list{$previous_question}\">\
+ previous question</a>";
+}
+print "<p>\n";
+
+if ( $question || $label ) {
+ print "URL for $url_name: $href_script?label=$labels<p>\n";
+}
+
+printf("
+ Comments, suggestions, or error reports? - see
+ \"<a href=\"$href_script?label=noans+newans\">how to improve the FAQ</a>\".
+<p>
+ This is FAQ version $fileversion, last modified on $filedate.
+</address>
+</body></html>
+");
+
+# That's it!