357 lines
14 KiB
HTML
357 lines
14 KiB
HTML
<!DOCTYPE html>
|
||
<html>
|
||
<head>
|
||
<title>Unroff</title>
|
||
</head>
|
||
<body>
|
||
<h1>Unroff</h1><i>Unroff</i> 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.
|
||
<p>Unroff was originally written by Oliver Laumann around 1995.
|
||
It is now maintained by volunteers at the Scheme
|
||
Conservatory.</p>
|
||
<h2>Contents</h2>
|
||
<ul>
|
||
<li>
|
||
<a href="#overview">Overview</a>
|
||
</li>
|
||
<li>
|
||
<a href="#troff">Unroff and Troff</a>
|
||
</li>
|
||
<li>
|
||
<a href="#scheme">Unroff and Scheme</a>
|
||
</li>
|
||
<li>
|
||
<a href="#hypertext">Unroff and Hypertext</a>
|
||
</li>
|
||
<li>
|
||
<a href="#managing">Managing Hypertext Documents with
|
||
Troff</a>
|
||
</li>
|
||
<li>
|
||
<a href="#dist">Source and Binary Distributions</a>
|
||
</li>
|
||
<li>
|
||
<a href="#browse">Browsing Source, Documentation,
|
||
Examples</a>
|
||
</li>
|
||
<li>
|
||
<a href="#news">What's New?</a>
|
||
</li>
|
||
</ul>
|
||
<h2><a name="overview" id="overview">Overview</a></h2>Unroff
|
||
reads and parses UNIX troff documents and translates the embedded
|
||
markup into a different format (see <b>Figure 1</b>). 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 <a href=
|
||
"https://en.wikipedia.org/wiki/Scheme_%28programming_language%29">
|
||
<i>Scheme</i></a> programming language.
|
||
<p>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.</p>
|
||
<hr>
|
||
<img src="fig1.gif" alt="[Overview of unroff functionality]">
|
||
<hr>
|
||
<h2><a name="troff" id="troff">Unroff and Troff</a></h2>
|
||
<p>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 <i>copy mode</i> and the
|
||
subtle differences between request and macro invocations. Unroff
|
||
has adopted a number of <i>groff</i> extensions, among them long
|
||
names for macros, strings, number registers, and special
|
||
characters, and the escape sequences \$@ and \$*.</p>
|
||
<h2><a name="scheme" id="scheme">Unroff and Scheme</a></h2>Unroff
|
||
uses <a href=
|
||
"http://www.informatik.uni-bremen.de/~net/elk"><i>Elk</i></a>,
|
||
the Scheme-based Extension Language Kit, to achieve
|
||
programmability (see <b>Figure 2</b>). It includes a full Scheme
|
||
language implementation with the usual amenities such as garbage
|
||
collection, interactive programming and testing, and dynamic
|
||
loading. To help writing new unroff back-ends, unroff has
|
||
augmented standard Scheme by a set of new Scheme data types and
|
||
primitives.
|
||
<hr>
|
||
<img src="fig2.gif" alt=
|
||
"[unroff and Elk/Scheme-code relationship]">
|
||
<hr>
|
||
<p>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.</p>
|
||
<p>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.</p>
|
||
<p>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.</p>
|
||
<h2><a name="hypertext" id="hypertext">Unroff and
|
||
Hypertext</a></h2>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.
|
||
<p>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.</p>
|
||
<p>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 <i>tbl</i> output verbatim).</p>
|
||
<h2><a name="managing" id="managing">Managing Hypertext Documents
|
||
with Troff</a></h2>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.
|
||
<p>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).</p>
|
||
<p>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.</p>
|
||
<p>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 (see <b>Figure 3</b>). 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.</p>
|
||
<hr>
|
||
<img src="fig3.gif" alt="[troff document with hypertext links]">
|
||
<hr>
|
||
<h2><a name="dist" id="dist">Source and Binary
|
||
Distributions</a></h2>You need Elk 2.2 or <a href=
|
||
"http://www.informatik.uni-bremen.de/~net/elk">Elk 3.0</a> and an
|
||
ANSI C compiler to compile and install unroff from the source
|
||
distribution.
|
||
<p>If you do not have Elk at your site and do not want to install
|
||
it, or if you just wish to have a quick look at unroff, download
|
||
the binary distribution for your system. Otherwise, use of the
|
||
source distribution is recommended.</p>
|
||
<p>The unroff executable is linked dynamically in the binary
|
||
distributions for systems with shared libraries.</p>
|
||
<ul>
|
||
<li>
|
||
<b>Source Distribution</b> (about 80 Kbytes)
|
||
<ul>
|
||
<li>
|
||
<a href=
|
||
"https://files.scheme.org/unroff-1.0.tar.gz">unroff-1.0.tar.gz</a>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
<ul>
|
||
<li>
|
||
<b>Binary Distributions</b> (about 200 Kbytes each)
|
||
<ul>
|
||
<li>
|
||
<a href=
|
||
"https://files.scheme.org/unroff-1.0-alpha-dec-osf3.0.tar.gz">
|
||
unroff-1.0-alpha-dec-osf3.0.tar.gz</a>
|
||
</li>
|
||
<li>
|
||
<a href=
|
||
"https://files.scheme.org/unroff-1.0-hppa1.1-hp-hpux9.tar.gz">
|
||
unroff-1.0-hppa1.1-hp-hpux9.tar.gz</a>
|
||
</li>
|
||
<li>
|
||
<a href=
|
||
"https://files.scheme.org/unroff-1.0-i486-unknown-linux1.2.8.tar.gz">
|
||
unroff-1.0-i486-unknown-linux1.2.8.tar.gz</a>
|
||
</li>
|
||
<li>
|
||
<a href=
|
||
"https://files.scheme.org/unroff-1.0-m68k-next-ns3.tar.gz">
|
||
unroff-1.0-m68k-next-ns3.tar.gz</a>
|
||
</li>
|
||
<li>
|
||
<a href=
|
||
"https://files.scheme.org/unroff-1.0-mips-dec-ultrix4.2.tar.gz">
|
||
unroff-1.0-mips-dec-ultrix4.2.tar.gz</a>
|
||
</li>
|
||
<li>
|
||
<a href=
|
||
"https://files.scheme.org/unroff-1.0-mips-sgi-irix5.3.tar.gz">
|
||
unroff-1.0-mips-sgi-irix5.2.tar.gz</a>
|
||
</li>
|
||
<li>
|
||
<a href=
|
||
"https://files.scheme.org/unroff-1.0-rs6000-ibm-aix3.2.tar.gz">
|
||
unroff-1.0-rs6000-ibm-aix3.2.tar.gz</a>
|
||
</li>
|
||
<li>
|
||
<a href=
|
||
"https://files.scheme.org/unroff-1.0-sparc-sun-solaris2.tar.gz">
|
||
unroff-1.0-sparc-sun-solaris2.tar.gz</a>
|
||
</li>
|
||
<li>
|
||
<a href=
|
||
"https://files.scheme.org/unroff-1.0-sparc-sun-sunos4.tar.gz">
|
||
unroff-1.0-sparc-sun-sunos4.tar.gz</a>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
<ul>
|
||
<li>The <b>Elk 3.0 Distribution</b> is available here:
|
||
<ul>
|
||
<li>
|
||
<a href=
|
||
"ftp://ftp.x.org/contrib/devel_tools/elk-3.0.tar.gz">X
|
||
Consortium Public FTP Server</a>
|
||
</li>
|
||
<li>
|
||
<a href=
|
||
"ftp://ftp.cs.indiana.edu/pub/scheme-repository/imp/elk-3.0.tar.gz">
|
||
Scheme Repository at Indiana University</a>
|
||
</li>
|
||
<li>
|
||
<a href=
|
||
"ftp://ftp.tzi.uni-bremen.de/tzi/dmn/elk/elk-3.0.tar.gz">Universit<EFBFBD>t
|
||
Bremen, Germany</a>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
<h2><a name="browse" id="browse">Browsing Source, Documentation,
|
||
Examples</a></h2>You can have a look at the unroff source code
|
||
and documentation without having to download the distribution.
|
||
All the HTML documents mentioned below have been produced with
|
||
unroff from the corresponding troff source (observe the
|
||
automatically created hypertext links in the Programmer's
|
||
Manual).
|
||
<ul>
|
||
<li>
|
||
<b>Source Code</b>
|
||
<ul>
|
||
<li>Snoop around in the <a href=
|
||
"https://gitea.scheme.org/conservatory/unroff">unroff</a>
|
||
source tree
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
<ul>
|
||
<li>
|
||
<b>Documentation</b>
|
||
<ul>
|
||
<li>Manual page <b>unroff.1</b> as <a href=
|
||
"doc/unroff.1.html">HTML</a>, <a href=
|
||
"doc/unroff.1.ps">PostScript</a>, <a href=
|
||
"doc/unroff.1">source</a>
|
||
</li>
|
||
<li>Manual page <b>unroff-html.1</b> as <a href=
|
||
"doc/unroff-html.1.html">HTML</a>, <a href=
|
||
"doc/unroff-html.1.ps">PostScript</a>, <a href=
|
||
"doc/unroff-html.1">source</a>
|
||
</li>
|
||
<li>Manual page <b>unroff-html-man.1</b> as <a href=
|
||
"doc/unroff-html-man.1.html">HTML</a>, <a href=
|
||
"doc/unroff-html-man.1.ps">PostScript</a>, <a href=
|
||
"doc/unroff-html-man.1">source</a>
|
||
</li>
|
||
<li>Manual page <b>unroff-html-ms.1</b> as <a href=
|
||
"doc/unroff-html-ms.1.html">HTML</a>, <a href=
|
||
"doc/unroff-html-ms.1.ps">PostScript</a>, <a href=
|
||
"doc/unroff-html-ms.1">source</a>
|
||
</li>
|
||
<li>
|
||
<b>Programmer's Manual</b> as HTML
|
||
<ul>
|
||
<li>
|
||
<a href="doc/manual.html">single document</a>
|
||
</li>
|
||
<li>
|
||
<a href="doc/m.html">split at level-1 headers</a>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li>
|
||
<b>Programmer's Manual</b> as <a href=
|
||
"doc/manual.ps">PostScript</a> or <a href=
|
||
"doc/manual.ms">source</a>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
<ul>
|
||
<li>
|
||
<b>More Examples</b>
|
||
<ul>
|
||
<li>X11R6 Release Notes in -ms format (<a href=
|
||
"examples/RELNOTES.ms">source</a>)
|
||
<ul>
|
||
<li>
|
||
<a href="examples/rel.html">single HTML
|
||
document</a><br>
|
||
with user-defined TOC at end (-ms index macros)
|
||
</li>
|
||
<li>
|
||
<a href="examples/r.html">split at level-1
|
||
headers</a><br>
|
||
with automatic TOC at first page
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li>UNIX <a href="examples/pathconf.2.html">man page</a>
|
||
with tables (<a href="examples/pathconf.2">pathconf.2</a>)
|
||
</li>
|
||
<li>X11 <a href="examples/XtSetArg.3.html">man page</a>
|
||
with user-defined macros (<a href=
|
||
"examples/XtSetArg.3">XtSetArg.3</a>)
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
<h2><a name="news" id="news">What's New?</a></h2>
|
||
<p><i>January 28, 1996:</i> <b>Unofficial Patch with -me
|
||
support</b></p>
|
||
<blockquote>
|
||
George Helffrich has contributed a patch for unroff-1.0 that
|
||
includes, among other things, an experimental implementation of
|
||
a backend for the -me macros and several fixes for the code
|
||
that deals with equations. A detailed table of contents of at
|
||
the beginning of the patch kit:
|
||
<p><a href=
|
||
"contrib/me-misc-patch.diff"><b>me-misc-patch</b></a> <i>(39
|
||
kbytes)</i></p>
|
||
</blockquote>
|
||
<p><i>February 13, 1997:</i> <b>Another Unofficial
|
||
Patch</b></p>
|
||
<blockquote>
|
||
George Helffrich has contributed another large patch kit for
|
||
unroff-1.0 that fixes several things in the -me support
|
||
contributed earlier and in the -ms package and also adds some
|
||
new functionality.
|
||
<p><a href="contrib/misc-patch-2.diff"><b>misc-patch-2</b></a>
|
||
<i>(79 kbytes)</i></p>
|
||
</blockquote>
|
||
</body>
|
||
</html>
|