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 $
 |