This is now perl5 friendly.
Make server side include hooks for headers and footers controlled by a command line switch and document the feature.
This commit is contained in:
parent
aacd778ef0
commit
5a288d129a
usr.bin/sgmlfmt
@ -1,5 +1,5 @@
|
||||
.Dd August 30, 1995
|
||||
.Os FreeBSD 2.0.5
|
||||
.Dd October 7, 1995
|
||||
.Os FreeBSD 2.1
|
||||
.Dt SGMLFMT 1
|
||||
.Sh NAME
|
||||
.Nm sgmlfmt
|
||||
@ -8,6 +8,7 @@
|
||||
.Nm
|
||||
.Fl f Ar format
|
||||
.Op Fl links
|
||||
.Op Fl ssi
|
||||
.Op Fl i Ar name ...
|
||||
.Ar file
|
||||
.Sh DESCRIPTION
|
||||
@ -63,25 +64,6 @@ This is actually an intermediate conversion used by the
|
||||
.Fl f Ar ascii
|
||||
format option.
|
||||
.El
|
||||
.It Fl links
|
||||
When used with the
|
||||
.Fl f Ar html
|
||||
option, for each
|
||||
.Li <label id="foo">
|
||||
in the document source
|
||||
.Nm
|
||||
generates a symbolic link
|
||||
.Pa foo.html
|
||||
pointing to the numbered
|
||||
.Pa .html
|
||||
file containing the reference. Since the number of the file
|
||||
containing a particular section can change when a document
|
||||
is modified, this provides a convenient hook by which separate
|
||||
documents can provide links into another document without the
|
||||
links becoming invalid when the target document is modified.
|
||||
When creating a symbolic link, any occurence of a slash (/) in label
|
||||
is replaced with percent (%), while any occurence of a space is replaced
|
||||
with an underscore (_).
|
||||
.It Fl i Ar name
|
||||
Pretend that
|
||||
.Dl <!ENTITY % name "INCLUDE">
|
||||
@ -101,6 +83,43 @@ and will use
|
||||
in the status keyword specification of a
|
||||
marked section declaration. In this case the effect of the
|
||||
option will be to cause the marked section not to be ignored.
|
||||
.It Fl links
|
||||
When used with the
|
||||
.Fl f Ar html
|
||||
option, for each
|
||||
.Li <label id="foo">
|
||||
in the document source
|
||||
.Nm
|
||||
generates a symbolic link
|
||||
.Pa foo.html
|
||||
pointing to the numbered
|
||||
.Pa .html
|
||||
file containing the reference. Since the number of the file
|
||||
containing a particular section can change when a document
|
||||
is modified, this provides a convenient hook by which separate
|
||||
documents can provide links into another document without the
|
||||
links becoming invalid when the target document is modified.
|
||||
When creating a symbolic link, any occurence of a slash (/) in label
|
||||
is replaced with percent (%), while any occurence of a space is replaced
|
||||
with an underscore (_).
|
||||
.It Fl ssi
|
||||
When used with the
|
||||
.Fl f Ar html
|
||||
option, hooks will be placed to have an http server include a
|
||||
custom header and footer on the document using the server side
|
||||
include mechanism. This mechanism is supported by the Apache and
|
||||
NCSA http servers and possibly others. Included files are named
|
||||
.Pa file.hdr
|
||||
and
|
||||
.Pa file.ftr
|
||||
for the header and footer of the
|
||||
.Pa file.html .
|
||||
Other pages include file are named
|
||||
.Pa file.ftr1 ,
|
||||
.Pa file.ftr2 ...
|
||||
.Pa file.ftrn
|
||||
where the number corresponds to the depth of the file from
|
||||
.Pa file.html .
|
||||
.El
|
||||
.Pp
|
||||
If the input file name ends with
|
||||
@ -138,9 +157,8 @@ The linuxdoc DTD was written by Matt Welsh
|
||||
and based on the Qwertz DTD written by Tom Gordon
|
||||
.Aq thomas.gordon@gmd.de .
|
||||
.Sh BUGS
|
||||
The ASCII output has many, many bugs including no table of
|
||||
contents, no meaningful cross references, and numerous formatting
|
||||
errors.
|
||||
The ASCII output has many, many bugs including no meaningful
|
||||
cross references, and numerous formatting problems.
|
||||
.Pp
|
||||
A line in the SGML source file beginning with a period (.) will
|
||||
confuse
|
||||
@ -157,8 +175,11 @@ the
|
||||
.Li </heading>
|
||||
tags are omitted following a
|
||||
sectioning tag such as
|
||||
.Li <sect> . Furthermore, all text between
|
||||
.Li <heading>
|
||||
and
|
||||
.Li </heading>
|
||||
must be on one line.
|
||||
.Li <sect> .
|
||||
.Pp
|
||||
Beginning and ending tags for the
|
||||
.Li <tag>
|
||||
element must occur on the same line for correct formatting with
|
||||
the
|
||||
.Fl ascii
|
||||
option.
|
||||
|
@ -1,23 +1,10 @@
|
||||
#!/usr/bin/perl
|
||||
# $Id: sgmlfmt.pl,v 1.6 1995/08/31 00:14:02 jfieber Exp $
|
||||
# $Id: sgmlfmt.pl,v 1.7 1995/09/22 18:24:32 jfieber Exp $
|
||||
|
||||
# Format an sgml document tagged according to the linuxdoc DTD.
|
||||
# by John Fieber <jfieber@freebsd.org> for the FreeBSD documentation
|
||||
# project.
|
||||
#
|
||||
# Usage: sgmlformat -format [-format ...] [-links] inputfile [inputfile ...]
|
||||
#
|
||||
# -format outputfile format
|
||||
# -------------------------------------------------------------
|
||||
# -html inputfile.html HTML
|
||||
# -txt | -ascii inputfile.ascii ascii text
|
||||
# -tex | -latex inputfile.tex LaTeX
|
||||
# -nroff inputfile.nroff groff for ms macros
|
||||
# -ps inputfile.ps postscript
|
||||
#
|
||||
# -links For each <label id="foo">, make a symbolic
|
||||
# link foo.html -> inputfile-n.html.
|
||||
#
|
||||
# Bugs:
|
||||
#
|
||||
# Text lines that start with a period (.) confuse the conversions that
|
||||
@ -27,6 +14,8 @@
|
||||
# Although legal by the DTD, it the ascii formatting gets botched if
|
||||
# the <heading></heading> tags are omitted following a <sect?>.
|
||||
#
|
||||
# Beginning and end tags for the <tag> element must occur on the same line.
|
||||
#
|
||||
# The whole approach of using sgmlsasp and passing a few things
|
||||
# through for processing by this script is doomed. This whole thing
|
||||
# needs to be re-thought and a better DTD should be used anyway.
|
||||
@ -71,7 +60,7 @@ if (! $ENV{"SGML_PATH"}) {
|
||||
|
||||
sub usage {
|
||||
print "Usage:\n";
|
||||
print "sgmlfmt -f <format> [-i <namea> [-i <nameb> ...]] [-links] filename[.sgml]\n";
|
||||
print "sgmlfmt -f <format> [-i <namea> ...] [-links] [-ssi] file\n";
|
||||
print "where <format> is one of: html, latex, ascii, nroff\n";
|
||||
}
|
||||
#
|
||||
@ -247,7 +236,7 @@ sub gen_html {
|
||||
print bar;
|
||||
# count up the number of files to be generated
|
||||
# and gather assorted info about the document structure
|
||||
if (/^<@@sect>/) {
|
||||
if (/^<\@\@sect>/) {
|
||||
$sl++; # current section level
|
||||
$sc++; # current section number
|
||||
$st_sl[$sc] = $sl;
|
||||
@ -289,21 +278,21 @@ sub gen_html {
|
||||
$st_pl[$sc] = $maxlevel;
|
||||
}
|
||||
}
|
||||
if (/^<@@endsect>/) {
|
||||
if (/^<\@\@endsect>/) {
|
||||
$sl--;
|
||||
}
|
||||
|
||||
# record section titles
|
||||
if (/^<@@head>/) {
|
||||
if (/^<\@\@head>/) {
|
||||
chop;
|
||||
s/^<@@head>//;
|
||||
s/^<\@\@head>//;
|
||||
$st_header[$sc] = $_;
|
||||
}
|
||||
|
||||
# record the section number that a label occurs in
|
||||
if (/^<@@label>/) {
|
||||
if (/^<\@\@label>/) {
|
||||
chop;
|
||||
s/^<@@label>//;
|
||||
s/^<\@\@label>//;
|
||||
if ($references{$_} eq "") {
|
||||
$references{$_} = "$filecount";
|
||||
if ($opt_links) {
|
||||
@ -353,27 +342,35 @@ sub html2html {
|
||||
|
||||
tagsw: {
|
||||
# titles and headings
|
||||
if (s/^<@@title>//) {
|
||||
if (s/^<\@\@title>//) {
|
||||
chop;
|
||||
$st_header[0] = $_;
|
||||
$st_parent[0] = -1;
|
||||
print tocfile "<HEAD>\n<TITLE>$st_header[0]</TITLE>\n</HEAD>\n";
|
||||
print tocfile "<H1>$st_header[0]</H1>\n";
|
||||
|
||||
$header[$st_ol[$sc]] =
|
||||
"<HTML>\n<HEAD>\n<TITLE>$st_header[0]</TITLE>\n" .
|
||||
"</HEAD>\n<BODY>\n" .
|
||||
"<!--#include virtual=\"./$fileroot.hdr\" -->" .
|
||||
"\n<H1>$st_header[0]</H1>\n";
|
||||
$footer[$st_ol[$sc]] =
|
||||
"\n<!--#include virtual=\"./$fileroot.ftr\" -->" .
|
||||
"\n</BODY>\n</HTML>\n";
|
||||
"</HEAD>\n<BODY>\n";
|
||||
if ($opt_ssi) { # Server Side Include hook
|
||||
$header[$st_ol[$sc]] .=
|
||||
"<!--#include virtual=\"./$fileroot.hdr\" -->";
|
||||
}
|
||||
$header[$st_ol[$sc]] .= "\n<H1>$st_header[0]</H1>\n";
|
||||
|
||||
$footer[$st_ol[$sc]] = "\n";
|
||||
if ($opt_ssi) { # Server Side Include hook
|
||||
$footer[$st_ol[$sc]] .=
|
||||
"<!--#include virtual=\"./$fileroot.ftr\" -->";
|
||||
}
|
||||
$footer[$st_ol[$sc]] .= "\n</BODY>\n</HTML>\n";
|
||||
last tagsw;
|
||||
}
|
||||
|
||||
#
|
||||
# HEADER begin
|
||||
#
|
||||
if (s/^<@@head>//) {
|
||||
if (s/^<\@\@head>//) {
|
||||
chop;
|
||||
|
||||
if ($part == 1) {
|
||||
@ -386,14 +383,18 @@ sub html2html {
|
||||
# set up headers and footers
|
||||
if ($st_sl[$sc] > 0 && $st_sl[$sc] <= $maxlevel) {
|
||||
$header[$st_ol[$sc]] =
|
||||
"<HTML>\n<HEAD>\n<TITLE>$_</TITLE>\n</HEAD>\n" .
|
||||
"<BODY>\n" .
|
||||
"<!--#include virtual=\"./$fileroot.hdr$st_ol[$sc]\" -->" .
|
||||
"\n$navbar[$st_ol[$sc]]\n<HR>\n";
|
||||
$footer[$st_ol[$sc]] =
|
||||
"<HR>\n$navbar[$st_ol[$sc]]\n" .
|
||||
"<!--#include virtual=\"./$fileroot.ftr$st_ol[$sc]\" -->" .
|
||||
"\n</BODY>\n</HTML>";
|
||||
"<HTML>\n<HEAD>\n<TITLE>$_</TITLE>\n</HEAD>\n<BODY>\n";
|
||||
if ($opt_ssi) { # Server Side Include hook
|
||||
$header[$st_ol[$sc]] .=
|
||||
"<!--#include virtual=\"./$fileroot.hdr$st_ol[$sc]\" -->";
|
||||
}
|
||||
$header[$st_ol[$sc]] .= "\n$navbar[$st_ol[$sc]]\n<HR>\n";
|
||||
$footer[$st_ol[$sc]] = "<HR>\n$navbar[$st_ol[$sc]]\n";
|
||||
if ($opt_ssi) { # Server Side Include hook
|
||||
$footer[$st_ol[$sc]] .=
|
||||
"<!--#include virtual=\"./$fileroot.ftr$st_ol[$sc]\" -->";
|
||||
}
|
||||
$footer[$st_ol[$sc]] .= "\n</BODY>\n</HTML>";
|
||||
}
|
||||
|
||||
# Add this to the master table of contents
|
||||
@ -429,7 +430,7 @@ sub html2html {
|
||||
#
|
||||
# HEADER end
|
||||
#
|
||||
if (s/^<@@endhead>//) {
|
||||
if (s/^<\@\@endhead>//) {
|
||||
if ($part == 1) {
|
||||
$text[0] .= "</H1>\n";
|
||||
$part = 0;
|
||||
@ -457,7 +458,7 @@ sub html2html {
|
||||
}
|
||||
|
||||
# sectioning
|
||||
if (s/^<@@part>//) {
|
||||
if (s/^<\@\@part>//) {
|
||||
$part = 1;
|
||||
$partnum++;
|
||||
last tagsw;
|
||||
@ -466,7 +467,7 @@ sub html2html {
|
||||
#
|
||||
# BEGINNING of a section
|
||||
#
|
||||
if (s/^<@@sect>//) {
|
||||
if (s/^<\@\@sect>//) {
|
||||
# Increment the section counter and save it on a stack
|
||||
# for future reference.
|
||||
$sc++;
|
||||
@ -492,7 +493,7 @@ sub html2html {
|
||||
#
|
||||
# END of a section
|
||||
#
|
||||
if (s/^<@@endsect>//) {
|
||||
if (s/^<\@\@endsect>//) {
|
||||
|
||||
# Remember the section number! Subsections may have
|
||||
# altered the global $sc variable.
|
||||
@ -520,12 +521,12 @@ sub html2html {
|
||||
}
|
||||
|
||||
# cross references
|
||||
if (s/^<@@label>//) {
|
||||
if (s/^<\@\@label>//) {
|
||||
chop;
|
||||
$text[$st_ol[$sc]] .= "<A NAME=\"$_\"></A>";
|
||||
last tagsw;
|
||||
}
|
||||
if (s/^<@@ref>//) {
|
||||
if (s/^<\@\@ref>//) {
|
||||
chop;
|
||||
$refname = $_;
|
||||
if ($references{$_} eq "") {
|
||||
@ -537,26 +538,26 @@ sub html2html {
|
||||
}
|
||||
last tagsw;
|
||||
}
|
||||
if (s/^<@@endref>//) {
|
||||
if (s/^<\@\@endref>//) {
|
||||
# $text[$st_ol[$sc]] .= "</A>";
|
||||
last tagsw;
|
||||
}
|
||||
if (s/^<@@refnam>//) {
|
||||
if (s/^<\@\@refnam>//) {
|
||||
$text[$st_ol[$sc]] .= "$refname</A>";
|
||||
last tagsw;
|
||||
}
|
||||
# URLs
|
||||
if (s/^<@@url>//) {
|
||||
if (s/^<\@\@url>//) {
|
||||
chop;
|
||||
$urlname = $_;
|
||||
$text[$st_ol[$sc]] .= "<A HREF=\"$urlname\">";
|
||||
last tagsw;
|
||||
}
|
||||
if (s/^<@@urlnam>//) {
|
||||
if (s/^<\@\@urlnam>//) {
|
||||
$text[$st_ol[$sc]] .= "$urlname</A>";
|
||||
last tagsw;
|
||||
}
|
||||
if (s/^<@@endurl>//) {
|
||||
if (s/^<\@\@endurl>//) {
|
||||
# $text[$st_ol[$sc]] .= "</A>";
|
||||
last tagsw;
|
||||
}
|
||||
@ -590,7 +591,7 @@ sub navbar {
|
||||
"<A HREF=\"${fileroot}.html\"><EM>$st_header[0]</EM></A>\n";
|
||||
$i = $st_parent[$sc];
|
||||
while ($i > 0) {
|
||||
$itext = " : <A HREF=\"${fileroot}$st_file[$i].html\"><EM>$st_header[$i]</EM></A>\n$itext";
|
||||
$itext = " $colon <A HREF=\"${fileroot}$st_file[$i].html\"><EM>$st_header[$i]</EM></A>\n$itext";
|
||||
$i = $st_parent[$i];
|
||||
}
|
||||
$navbar[$st_ol[$sc]] .= "$itext $colon <EM>$st_header[$sc]</EM><BR>\n";
|
||||
@ -667,7 +668,7 @@ sub extlink {
|
||||
|
||||
sub main {
|
||||
# Check arguments
|
||||
if (!&NGetOpt('f=s', 'links', 'i:s@')) {
|
||||
if (!&NGetOpt('f=s', 'links', 'ssi', 'i:s@')) {
|
||||
&usage;
|
||||
exit 1;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user