summaryrefslogtreecommitdiff
path: root/web/latexspider/latexweb.tex
blob: 325ba5dae0719a2d948105889b0fb80293dad61c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
\documentstyle[ltugboat]{article}

\let\tensl=\sl
\title{\WEB{} Adapted to \LaTeX{} --- a First Attempt}
\author{David Love}
\netaddress{d.love@daresbury.ac.uk}
\begin{document}
\maketitle
\noindent
Following Knuth's original Pascal/TeX{} \WEB{} system a number of
\WEB-like systems have been developed.  Mostly these use the same
plain \TeX{} formatting system and differ in the languages supported
(although Thimbleby's CWEB system uses Troff and there are non-\WEB{}
literate programming systems like Scheme\TeX{} and {\tt doc.sty} that
use \LaTeX)\footnote{For a \WEB{} bibliography, see Lisa M. C. Smith
and Mansur Samadzadeh, {\sl SIGPLAN Notices\/} {\bf 26} (1991) 14}\@.
There are two advantages to using \LaTeX{} rather than plain \TeX{}
for formatting:
\begin{itemize}
\item greater accessibility for many (familiarity and ease of use)
which may encourage more people to use it;
\item the availability of extra intrinsic \LaTeX{} facilities and
especially style options.  These might, for instance, support setting
your formal specification material as well as the code refined from
it, and in non-CM fonts.
\end{itemize}
This note describes a first attempt at integrating \LaTeX{} with
\WEB\ (actually Ramsey's Spider system for
`language-independent' \WEB s\footnote{Sometimes Spider doesn't do the
whole job for you: non-Algol-like languages may need the lexing
routines hacking.  This gives the complication of
amalgamating the basic \WEAVE{} change file for \LaTeX{} formatting
with changes for the lexical routines etc.}).

I have made minimal changes necessary for Spidery \WEB s to work with
\LaTeX\@.  These take the form of change files for the base {\tt
weave.web}, {\tt tangle.web} and {\tt spider.web} (which generates the
language-dependent parts), conversion of the {\tt webkernel.tex} macro
file to a \LaTeX{} sub-style and trivial updates to the make files.  A
trivial change to the {\tt c.spider} file that describes the
prettyprinting grammar for C was also necessary.  The result of
merging the change files with the original webs would be a {\tt
weave.web} that can be built for use with either plain \TeX\ or
\LaTeX\ using a makefile flag and a {\tt spider.web} that produces a
{\tt spider.awk} with a run-time switch to determine the formatter.
(\WEAVE\ cannot change the formatter assumed at run time, although it
would not be difficult to make it do so.)  \WEB\ files can be woven
with either a plain or \LaTeX\ \WEAVE\ if they avoid using
incompatible macros or define them appropriately in limbo
according to whether the \LaTeX\ macros are present.

The changes to {\tt spider.web} are minor; changes to {\tt weave.web}
and the macros are more extensive.  Many of the original \WEB{} macros
clash with \LaTeX{} names or conventions and have been changed
appropriately, but only where necessary.  The formatting style is
essentially unchanged apart from the use of the \LaTeX\ page headers
and contents list.  {\tt web.sty} is documented with {\tt doc.sty}
since it is a pity not to use literate techniques to build literate
programming tools---the bulk of the work!  There are some remaining
infelicities, such as floats being disrupted by the way the sectioning
code avoids page breaks and a lot of messiness due to the assumptions
of existing Spider descriptions.

This hack could be developed in other directions, for instance:
\begin{itemize}
\item proper parameterisation of the formatting commands, perhaps
modelled after {\tt makeindex};
\item adapting the formatting macros more to the \LaTeX{} style;
\item inclusion of a proper multi-level sectioning scheme.  I think
the extra structure would be helpful in large webs, but implementing
it would require considerable attention to the guts of \TANGLE{} and
\WEAVE\@.  (It affects \TANGLE{} through the comments it writes in the
code);
\item replacing the index processing with {\tt makeindex}.
\end{itemize}

The changes should be available from the Aston archive as {\tt
[.web.spiderweb]latexmods.shar}. 

\makesignature