134 lines
5.8 KiB
Plaintext
134 lines
5.8 KiB
Plaintext
|
This is version 1.0 of unroff.
|
||
|
|
||
|
Unroff is a Scheme-based, programmable, extensible troff translator
|
||
|
with a back-end for the Hypertext Markup Language. Unroff is free
|
||
|
software and is distributed both as source and as precompiled binaries.
|
||
|
|
||
|
|
||
|
* Overview
|
||
|
|
||
|
Unroff reads and parses UNIX troff documents and translates the embedded
|
||
|
markup into a different format. Neither the actual output format nor
|
||
|
any knowledge about particular troff macro sets (-man, -ms, etc.) are
|
||
|
hard-wired into unroff. Instead, the translation process is controlled
|
||
|
by a set of user-supplied procedures written in the Scheme programming
|
||
|
language.
|
||
|
|
||
|
Translation rules for new output formats and troff macro packages can
|
||
|
be added easily by providing a corresponding set of Scheme procedures
|
||
|
(a `back-end'). Version 1.0 of unroff includes back-ends for translating
|
||
|
documents using the `man' and `ms' macros into the Hypertext Markup
|
||
|
Language (HTML) version 2.0. Additional requests facilitate use of
|
||
|
arbitrary hypertext links in troff documents.
|
||
|
|
||
|
|
||
|
* unroff and troff
|
||
|
|
||
|
In contrast to conventional troff `converters' (usually Perl scripts
|
||
|
some of which process nroff output) unroff includes a full troff parser
|
||
|
and closely mimics the troff processing engine.
|
||
|
|
||
|
This enables unroff to handle user-defined macros, strings, and
|
||
|
number registers, nested if-else requests, arbitrary fonts and font
|
||
|
positions, low-level formatting requests such as \l, \c, and \h, and
|
||
|
idiosyncrasies such as troff `copy mode' and the subtle differences
|
||
|
between request and macro invocations.
|
||
|
|
||
|
Unroff has adopted a number of groff extensions, among them long names
|
||
|
for macros, strings, number registers, and special characters, and the
|
||
|
escape sequences \$@ and \$*.
|
||
|
|
||
|
|
||
|
* unroff and Scheme
|
||
|
|
||
|
Unroff uses Elk, the Scheme-based Extension Language Kit, to achieve
|
||
|
programmability. It includes a full Scheme language implementation
|
||
|
with the usual amenities such as garbage collection, interactive
|
||
|
programming and testing, and dynamic loading. Standard Scheme has
|
||
|
been augmented by a set of new Scheme data types and primitives that
|
||
|
aid in writing new unroff back-ends.
|
||
|
|
||
|
A new troff request and an extension to the `.ig' request allow for
|
||
|
Scheme code to be embedded in troff documents; the code is then
|
||
|
evaluated on the fly as the documents are processed by unroff.
|
||
|
|
||
|
Unroff may be viewed as a prototype for hybrid applications that use
|
||
|
Scheme (in particular Elk) as their extension language. Approximately
|
||
|
half of its source consists of portable ANSI C code, and the other
|
||
|
half is written in Scheme and can be configured and tailored easily
|
||
|
without the need to recompile unroff. Authors of Elk-based applications
|
||
|
are encouraged to look into the source code or reuse parts of it for
|
||
|
their own projects.
|
||
|
|
||
|
As the time-critical Scheme primitives provided of unroff have been
|
||
|
coded in (efficient) C, its performance comes close to that of nroff
|
||
|
processing the same troff input.
|
||
|
|
||
|
|
||
|
* unroff and hypertext
|
||
|
|
||
|
troff documents that were originally written without intentions to
|
||
|
make them available in the World Wide Web (such as UNIX manual pages)
|
||
|
can easily be translated to the Hypertext Markup Language using the
|
||
|
predefined HTML back-ends.
|
||
|
|
||
|
As unroff closely simulates ordinary troff, even large or complex
|
||
|
documents (like technical reports or theses with many user-defined
|
||
|
macros) can be translated to HTML automatically without having to
|
||
|
add any structural cues to the documents.
|
||
|
|
||
|
The `-man' support has been tested with several hundred vendor- and
|
||
|
user-supplied manual pages and has produced good results in all but
|
||
|
less than a dozen cases (a few manual pages were found to make excessive
|
||
|
use of low-level troff constructs or to include tbl output verbatim).
|
||
|
|
||
|
|
||
|
* Managing hypertext documents with troff
|
||
|
|
||
|
Authors can benefit from unroff not only as a converter for existing
|
||
|
documents, but also when writing new documents that must exist both
|
||
|
in high-quality paper form and in the World Wide Web as hypertext.
|
||
|
|
||
|
Rather than writing hypertext documents directly in HTML (which is
|
||
|
cumbersome for long or complex texts), authors can continue using
|
||
|
ordinary troff together with the usual preprocessors and macro packages.
|
||
|
Unroff is then employed to produce the WWW form, while troff is used
|
||
|
in the normal way to typeset the same text, producing the printed
|
||
|
version (or, using nroff, an ASCII version if desired).
|
||
|
|
||
|
In this way authors of hypertext documents can take full advantage of
|
||
|
the usual troff facilities such as user-defined macros, conditional text,
|
||
|
tables, equations, and drawings, automatic table of contents generation,
|
||
|
footnotes/endnotes, indexes, etc., none of which are available when
|
||
|
composing documents directly in plain HTML.
|
||
|
|
||
|
Two new troff requests for embedding hypertext links in troff documents
|
||
|
are provided by the unroff HTML back-end. Arbitrary forward and backward
|
||
|
references using symbolic labels (rather than actual file names) among
|
||
|
groups of troff source files are supported. Another new request and
|
||
|
another extension to `.ig' allow for HTML code to be embedded directly
|
||
|
in troff documents. The hypertext capabilities are demonstrated by
|
||
|
the troff source of the Programmer's Manual that is part of the unroff
|
||
|
distribution.
|
||
|
|
||
|
|
||
|
* Availability
|
||
|
|
||
|
The source distribution of unroff 1.0 as well as binary distributions
|
||
|
(with full Scheme source code and documentation) are available under:
|
||
|
|
||
|
http://www.informatik.uni-bremen.de/~net/unroff/unroff.html#dist
|
||
|
|
||
|
You can obtain Elk 3.0 from the same WWW server at:
|
||
|
|
||
|
http://www.informatik.uni-bremen.de/~net/elk
|
||
|
|
||
|
Elk 3.0 is also available from a number of FTP servers including these:
|
||
|
|
||
|
ftp://ftp.x.org/contrib/devel_tools/elk-3.0.tar.gz
|
||
|
ftp://ftp.uni-bremen.de/pub/programming/languages/scheme/elk/elk-3.0.tar.gz
|
||
|
|
||
|
|
||
|
--
|
||
|
Oliver Laumann <net@cs.tu-berlin.de> # $Revision: 1.4 $
|