338 lines
		
	
	
		
			9.3 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
		
		
			
		
	
	
			338 lines
		
	
	
		
			9.3 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
|   | ## HTML output | ||
|  | # Copyright (C) 1993-1995 Ian Jackson. | ||
|  | 
 | ||
|  | # This file is free software; you can redistribute it and/or modify | ||
|  | # it under the terms of the GNU General Public License as published by | ||
|  | # the Free Software Foundation; either version 2, or (at your option) | ||
|  | # any later version. | ||
|  | 
 | ||
|  | # It is distributed in the hope that it will be useful, | ||
|  | # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
|  | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||
|  | # GNU General Public License for more details. | ||
|  | 
 | ||
|  | # You should have received a copy of the GNU General Public License | ||
|  | # along with GNU Emacs; see the file COPYING.  If not, write to | ||
|  | # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
|  | # Boston, MA 02111-1307, USA. | ||
|  | 
 | ||
|  | # (Note: I do not consider works produced using these BFNN processing | ||
|  | # tools to be derivative works of the tools, so they are NOT covered | ||
|  | # by the GPL.  However, I would appreciate it if you credited me if | ||
|  | # appropriate in any documents you format using BFNN.) | ||
|  | 
 | ||
|  | %saniarray= ('<','lt', '>','gt', '&','amp', '"','quot'); | ||
|  | 
 | ||
|  | sub html_init { | ||
|  |     $html_prefix = './'.$prefix; | ||
|  |     $html_prefix =~ s:^\.//:/:; | ||
|  |     system('rm','-r',"$html_prefix.html"); | ||
|  |     system('mkdir',"$html_prefix.html"); | ||
|  |     open(HTML,">$html_prefix.html/index.html"); | ||
|  |     print HTML "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 3.2//EN\">\n"; | ||
|  |     print HTML "<html>\n"; | ||
|  |     $html_needpara= -1; | ||
|  |     $html_end=''; | ||
|  |     chop($html_date=`date '+%d %B %Y'`); | ||
|  |     chop($html_year=`date '+%Y'`); | ||
|  | } | ||
|  | 
 | ||
|  | sub html_startup { | ||
|  |     print HTML <<END; | ||
|  | <head><title> | ||
|  | $user_title | ||
|  | </title> | ||
|  | <link rev="made" href="mailto:$user_authormail"> | ||
|  | <link rel="Contents" href="index.html"> | ||
|  | <link rel="Start" href="index.html"> | ||
|  | <META name="description" | ||
|  |       content="Frequently asked questions and answers (FAQ) for FFTW."> | ||
|  | <link rel="Bookmark" title="FFTW FAQ" href="index.html"> | ||
|  | <LINK rel="Bookmark" title="FFTW Home Page" | ||
|  |       href="http://www.fftw.org"> | ||
|  | <LINK rel="Bookmark" title="FFTW Manual" | ||
|  |       href="http://www.fftw.org/doc/"> | ||
|  | </head><body text="#000000" bgcolor="#FFFFFF"><h1> | ||
|  | $user_title | ||
|  | </h1> | ||
|  | END | ||
|  |     &html_readrefs($_[0]); | ||
|  |     if (length($user_copyrightref)) { | ||
|  |         local ($refn) = $qrefn{$user_copyrightref}; | ||
|  |         if (!length($refn)) { | ||
|  |             warn "unknown question (copyright) `$user_copyrightref'"; | ||
|  |         } | ||
|  |         $refn =~ m/(\d+)\.(\d+)/; | ||
|  |         local ($s,$n) = ($1,$2); | ||
|  |         $html_copyrighthref= ($s == $html_sectionn)?'':"section$s.html"; | ||
|  |         $html_copyrighthref.= "#$qn2ref{$s,$n}"; | ||
|  |     } | ||
|  | } | ||
|  | 
 | ||
|  | sub html_close { | ||
|  |     print HTML $html_end,"<address>\n$user_author\n"; | ||
|  |     print HTML "- $html_date\n</address><br>\n"; | ||
|  |     print HTML "Extracted from $user_title,\n"; | ||
|  |     print HTML "<A href=\"$html_copyrighthref\">" if length($html_copyrighthref); | ||
|  |     print HTML "Copyright © $html_year $user_copyholder."; | ||
|  |     print HTML "</A>" if length($html_copyrighthref); | ||
|  |     print HTML "\n</body></html>\n"; | ||
|  |     close(HTML); | ||
|  | } | ||
|  | 
 | ||
|  | sub html_startmajorheading { | ||
|  |     local ($ref, $this,$next,$back) = @_; | ||
|  |     local ($nextt,$backt); | ||
|  |     $this =~ s/^Section /section/;  $html_sectionn= $ref; | ||
|  |     $next =~ s/^Section /section/ && ($nextt= $sn2title{$'}); | ||
|  |     $back =~ s/^Section /section/ ? ($backt= $sn2title{$'}) : ($back=''); | ||
|  |     if ($html_sectionn) { | ||
|  |         &html_close; | ||
|  |         open(HTML,">$html_prefix.html/$this.html"); | ||
|  | 	print HTML "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 3.2//EN\">\n"; | ||
|  |         print HTML "<html>\n"; | ||
|  |         $html_end= "<hr>\n"; | ||
|  |         $html_end.= "Next: <a href=\"$next.html\" rel=precedes>$nextt</a>.<br>\n" | ||
|  |             if $next; | ||
|  |         $html_end.= "Back: <a href=\"$back.html\" rev=precedes>$backt</a>.<br>\n" | ||
|  |             if $back; | ||
|  |         $html_end.= "<a href=\"index.html\" rev=subdocument>"; | ||
|  |         $html_end.= "Return to contents</a>.<p>\n"; | ||
|  |         print HTML <<END; | ||
|  | <head><title> | ||
|  | $user_brieftitle - Section $html_sectionn | ||
|  | </title> | ||
|  | <link rev="made" href="mailto:$user_authormail"> | ||
|  | <link rel="Contents" href="index.html"> | ||
|  | <link rel="Start" href="index.html"> | ||
|  | END | ||
|  |         print HTML "<link rel=\"Next\" href=\"$next.html\">" if $next; | ||
|  | 	print HTML "<link rel=\"Previous\" href=\"$back.html\">" if $back; | ||
|  |         print HTML <<END; | ||
|  | <link rel="Bookmark" title="FFTW FAQ" href="index.html"> | ||
|  | </head><body text="#000000" bgcolor="#FFFFFF"><h1> | ||
|  | $user_brieftitle - Section $html_sectionn <br> | ||
|  | END | ||
|  |         $html_needpara= -1; | ||
|  |     } | ||
|  |     else { | ||
|  | 	print HTML "\n<h1>\n"; | ||
|  | 	$html_needpara=-1; | ||
|  |     } | ||
|  | } | ||
|  | 
 | ||
|  | sub html_endmajorheading { | ||
|  |     print HTML "\n</h1>\n\n"; | ||
|  |     $html_needpara=-1; | ||
|  | } | ||
|  | 
 | ||
|  | sub html_startminorheading { | ||
|  |     local ($ref, $this) = @_; | ||
|  |     $html_needpara=0; | ||
|  |     $this =~ m/^Question (\d+)\.(\d+)/; | ||
|  |     local ($s,$n) = ($1,$2); | ||
|  |     print HTML "\n<h2><A name=\"$qn2ref{$s,$n}\">\n"; | ||
|  | } | ||
|  | 
 | ||
|  | sub html_endminorheading { | ||
|  |     print HTML "\n</A></h2>\n\n"; | ||
|  |     $html_needpara=-1; | ||
|  | } | ||
|  | 
 | ||
|  | sub html_newsgroup { &arg('newsgroup'); } | ||
|  | sub html_endnewsgroup { &endarg('newsgroup'); } | ||
|  | sub html_do_newsgroup { | ||
|  |     print HTML "<A href=\"news:$_[0]\"><code>$_[0]</code></A>"; | ||
|  | } | ||
|  | 
 | ||
|  | sub html_email { &arg('email'); } | ||
|  | sub html_endemail { &endarg('email'); } | ||
|  | sub html_do_email { | ||
|  |     print HTML "<A href=\"mailto:$_[0]\"><code>$_[0]</code></A>"; | ||
|  | } | ||
|  | 
 | ||
|  | sub html_courier    { print HTML "<code>" ; } | ||
|  | sub html_endcourier { print HTML "</code>"; } | ||
|  | sub html_italic     { print HTML "<i>"   ; } | ||
|  | sub html_enditalic  { print HTML "</i>"  ; } | ||
|  | 
 | ||
|  | sub html_docref { &arg('docref'); } | ||
|  | sub html_enddocref { &endarg('docref'); } | ||
|  | sub html_do_docref { | ||
|  |     if (!defined($html_refval{$_[0]})) { | ||
|  |         warn "undefined HTML reference $_[0]"; | ||
|  |         $html_refval{$n}='UNDEFINED'; | ||
|  |     } | ||
|  |     print HTML "<A href=\"$html_refval{$_[0]}\">"; | ||
|  |     &recurse($_[0]); | ||
|  |     print HTML "</A>"; | ||
|  | } | ||
|  | 
 | ||
|  | sub html_readrefs { | ||
|  |     local ($p); | ||
|  |     open(HTMLREFS,"<$_[0]") || (warn("failed to open HTML refs $_[0]: $!"),return); | ||
|  |     while(<HTMLREFS>) { | ||
|  |         next if m/^\\\s/; | ||
|  |         s/\s*\n$//; | ||
|  |         if (s/^\\prefix\s*//) { | ||
|  |             $p= $'; next; | ||
|  |         } elsif (s/^\s*(\S.*\S)\s*\\\s*//) { | ||
|  |             $_=$1; $v=$'; | ||
|  |             s/\\\\/\\/g; | ||
|  |             $html_refval{$_}= $p.$v; | ||
|  |         } else { | ||
|  |             warn("ununderstood line in HTML refs >$_<"); | ||
|  |         } | ||
|  |     } | ||
|  |     close(HTMLREFS); | ||
|  | } | ||
|  |      | ||
|  | sub html_ftpsilent { &arg('ftpsilent'); } | ||
|  | sub html_endftpsilent { &endarg('ftpsilent'); } | ||
|  | sub html_do_ftpsilent { | ||
|  |     if ($_[0] =~ m/:/) { | ||
|  |         $html_ftpsite= $`; | ||
|  |         $html_ftpdir= $'.'/'; | ||
|  |     } else { | ||
|  |         $html_ftpsite= $_[0]; | ||
|  |         $html_ftpdir= ''; | ||
|  |     } | ||
|  | } | ||
|  | 
 | ||
|  | sub html_ftpon { &arg('ftpon'); } | ||
|  | sub html_endftpon { &endarg('ftpon'); } | ||
|  | sub html_do_ftpon { | ||
|  | #print STDERR "ftpon($_[0])\n"; | ||
|  |     $html_ftpsite= $_[0]; $html_ftpdir= ''; | ||
|  |     print HTML "<code>"; | ||
|  |     &recurse($_[0]); | ||
|  |     print HTML "</code>"; | ||
|  | } | ||
|  | 
 | ||
|  | sub html_ftpin { &arg('ftpin'); } | ||
|  | sub html_endftpin { &endarg('ftpin'); } | ||
|  | sub html_do_ftpin { | ||
|  | #print STDERR "ftpin($_[0])\n"; | ||
|  |     print HTML "<A href=\"ftp://$html_ftpsite$html_ftpdir$_[0]\"><code>"; | ||
|  |     &recurse($_[0]); | ||
|  |     print HTML "</code></A>"; | ||
|  | } | ||
|  | 
 | ||
|  | sub html_text { | ||
|  |     print HTML "\n<p>\n" if $html_needpara > 0; | ||
|  |     $html_needpara=0; | ||
|  |     $html_stuff= &html_sanitise($_[0]); | ||
|  |     while ($html_stuff =~ s/^(.{40,70}) //) { | ||
|  |         print HTML "$1\n"; | ||
|  |     } | ||
|  |     print HTML $html_stuff; | ||
|  | } | ||
|  | 
 | ||
|  | sub html_tab { | ||
|  |     $htmltabignore++ || warn "html tab ignored"; | ||
|  | } | ||
|  | 
 | ||
|  | sub html_newline       { print HTML "<br>\n"    ;                       } | ||
|  | sub html_startverbatim { print HTML "<pre>\n"   ;                       } | ||
|  | sub html_verbatim      { print HTML &html_sanitise($_[0]),"\n";         } | ||
|  | sub html_endverbatim   { print HTML "</pre>\n"  ;  $html_needpara= -1;  } | ||
|  | 
 | ||
|  | sub html_endpara { | ||
|  |     $html_needpara || $html_needpara++; | ||
|  | } | ||
|  | 
 | ||
|  | sub html_finish { | ||
|  |     &html_close; | ||
|  | } | ||
|  | 
 | ||
|  | sub html_startindex { | ||
|  |     print HTML "<ul>\n"; | ||
|  | } | ||
|  | 
 | ||
|  | sub html_endindex { | ||
|  |     print HTML "</ul><hr>\n"; | ||
|  | } | ||
|  | 
 | ||
|  | sub html_startindexitem { | ||
|  |     local ($ref,$qval) = @_; | ||
|  |     $qval =~ m/Q(\d+)\.(\d+)/; | ||
|  |     local ($s,$n) = ($1,$2); | ||
|  |     print HTML "<li><a href=\""; | ||
|  |     print HTML ($s == $html_sectionn)?'':"section$s.html"; | ||
|  |     print HTML "#$qn2ref{$s,$n}\" rel=subdocument>Q$s.$n. "; | ||
|  |     $html_indexunhead=''; | ||
|  | } | ||
|  | 
 | ||
|  | sub html_startindexmainitem { | ||
|  |     local ($ref,$s) = @_; | ||
|  |     $s =~ m/\d+/; $s= $&; | ||
|  |     print HTML "<br><br>" if ($s > 1); | ||
|  |     print HTML "<li><b><font size=\"+2\"><a href=\"section$s.html\" rel=subdocument>Section $s.  "; | ||
|  |     $html_indexunhead='</font></b>'; | ||
|  | } | ||
|  | 
 | ||
|  | sub html_endindexitem { | ||
|  |     print HTML "</a>$html_indexunhead\n"; | ||
|  | } | ||
|  | 
 | ||
|  | sub html_startlist { | ||
|  |     print HTML "\n"; | ||
|  |     $html_itemend="<ul>"; | ||
|  | } | ||
|  | 
 | ||
|  | sub html_endlist { | ||
|  |     print HTML "$html_itemend\n</ul>\n"; | ||
|  |     $html_needpara=-1 | ||
|  | } | ||
|  | 
 | ||
|  | sub html_item { | ||
|  |     print HTML "$html_itemend\n<li>"; | ||
|  |     $html_itemend=""; | ||
|  |     $html_needpara=-1; | ||
|  | } | ||
|  | 
 | ||
|  | sub html_startpackedlist { | ||
|  |     print HTML "\n"; | ||
|  |     $html_itemend="<dir>"; | ||
|  | } | ||
|  | 
 | ||
|  | sub html_endpackedlist { | ||
|  |     print HTML "$html_itemend\n</dir>\n"; | ||
|  |     $html_needpara=-1; | ||
|  | } | ||
|  | 
 | ||
|  | sub html_packeditem { | ||
|  |     print HTML "$html_itemend\n<li>"; | ||
|  |     $html_itemend=""; | ||
|  |     $html_needpara=-1; | ||
|  | } | ||
|  | 
 | ||
|  | sub html_startindent   { print HTML "<blockquote>\n"; } | ||
|  | sub html_endindent     { print HTML "</blockquote>\n"; } | ||
|  | 
 | ||
|  | sub html_pageref { | ||
|  |     local ($ref,$sq) = @_; | ||
|  |     $sq =~ m/(\d+)\.(\d+)/; | ||
|  |     local ($s,$n) = ($1,$2); | ||
|  |     print HTML "<A href=\""; | ||
|  |     print HTML ($s == $html_sectionn)?'':"section$s.html"; | ||
|  |     print HTML "#$qn2ref{$s,$n}\">Q$sq \`"; | ||
|  | } | ||
|  | 
 | ||
|  | sub html_endpageref { | ||
|  |     print HTML "'</A>"; | ||
|  | } | ||
|  | 
 | ||
|  | sub html_sanitise { | ||
|  |     local ($in) = @_; | ||
|  |     local ($out); | ||
|  |     while ($in =~ m/[<>&"]/) { | ||
|  |         $out.= $`. '&'. $saniarray{$&}. ';'; | ||
|  |         $in=$'; | ||
|  |     } | ||
|  |     $out.= $in; | ||
|  |     $out; | ||
|  | } | ||
|  | 
 | ||
|  | 1; |