You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
224 lines
7.7 KiB
224 lines
7.7 KiB
8 months ago
|
<!DOCTYPE HTML>
|
||
|
<html lang="en">
|
||
|
|
||
|
<head>
|
||
|
<meta charset="UTF-8">
|
||
|
<title>Groff Mission Statement - 2014</title>
|
||
|
<link rel="stylesheet"
|
||
|
type="text/css"
|
||
|
href="groff-mission-statement.css">
|
||
|
<link rel="author"
|
||
|
href="mailto:peter@schaffter.ca">
|
||
|
<link rel="stylesheet"
|
||
|
type="text/css"
|
||
|
href="http://fonts.googleapis.com/css?family=Cardo">
|
||
|
</head>
|
||
|
|
||
|
<body>
|
||
|
|
||
|
<div class="main">
|
||
|
|
||
|
<h1>
|
||
|
Groff Mission Statement
|
||
|
<br/>
|
||
|
2014
|
||
|
</h1>
|
||
|
|
||
|
<span class="divider">☙</span>
|
||
|
|
||
|
<p class="initial">
|
||
|
As the most widely deployed implementation of troff in use today,
|
||
|
groff holds an important place in the Unix universe. Frequently
|
||
|
and erroneously dismissed as a legacy program for formatting
|
||
|
Unix manuals (manpages), groff is in fact a sophisticated system
|
||
|
for producing high-quality typeset material, from business
|
||
|
correspondence to complex technical reports and plate-ready books.
|
||
|
With an impressive record for backward compatibility, it continues
|
||
|
to evolve and play a leading role in the development of free
|
||
|
typesetting software.
|
||
|
</p>
|
||
|
|
||
|
<p>
|
||
|
Future development will focus on groff’s typesetting
|
||
|
capabilities, the goal being to improve automatic formatting
|
||
|
of documents with no corresponding loss of user control over
|
||
|
typographic details. In addition to the core binary, where much
|
||
|
of the work will be done, the system comprises a macro language,
|
||
|
pre-built macro sets, pre- and post-processors, and drivers for
|
||
|
outputting to various formats. The guiding principle for changes
|
||
|
to these parts will be to improve and extend, not alter, especially
|
||
|
with respect to established usage.
|
||
|
</p>
|
||
|
|
||
|
<p>
|
||
|
A key part of the project’s mandate will be to redress issues
|
||
|
that have historically discouraged widespread adoption of groff.
|
||
|
Issues include the perceived superiority of
|
||
|
<span class="mkern">T</span><span class="tex">e</span>X
|
||
|
for general-purpose typesetting, the long and somewhat unfortunate
|
||
|
association with manpages, and the difficulty of mastering
|
||
|
groff’s low-level typesetting requests.
|
||
|
</p>
|
||
|
|
||
|
<p>
|
||
|
Broadly speaking, development will be channelled into two areas:
|
||
|
<ul>
|
||
|
<li><span class="diamond-bullet">♦</span>
|
||
|
<a href="#core">core groff</a></li>
|
||
|
<ul class="second-level">
|
||
|
<li>– the typesetting backend and low-level formatting requests</li>
|
||
|
</ul>
|
||
|
<li><span class="diamond-bullet">♦</span>
|
||
|
<a href="#usage">program usage</a></li>
|
||
|
<ul class="second-level">
|
||
|
<li>– general-purpose macro sets and manpages</li>
|
||
|
</ul>
|
||
|
</ul>
|
||
|
Improvements and enhancements to other areas of the system will
|
||
|
continue to form a routine part of groff’s growth, with active
|
||
|
support for contributions provided by a team of groff mavens.
|
||
|
</p>
|
||
|
|
||
|
<h2 id="core">Core groff</h2>
|
||
|
|
||
|
<h3 class="backend">The backend</h3>
|
||
|
|
||
|
<p class="initial" style="margin-top: -.75em">
|
||
|
Groff currently uses a greedy algorithm to format paragraphs one
|
||
|
line at a time, but the
|
||
|
Knuth-<span class="pkern">P</span>lass
|
||
|
algorithm, implemented in
|
||
|
<span class="mkern">T</span><span class="tex">e</span>X,
|
||
|
Heirloom troff and elsewhere, optimizes linebreaks throughout whole
|
||
|
paragraphs and achieves a more uniform typographic grey. One of
|
||
|
the most exciting challenges facing groff will be implementing an
|
||
|
improved formatting algorithm, the most likely candidate being
|
||
|
Knuth-<span class="pkern">P</span>lass.
|
||
|
It’s a big job, but with groff’s clean codebase and
|
||
|
helpful community of experts, it is hoped additional developers will
|
||
|
step forward and contribute their programming skills.
|
||
|
</p>
|
||
|
|
||
|
<p>
|
||
|
Equally important will be instituting native support for
|
||
|
<span class="mkern">T</span>rue<span class="mkern">T</span>ype,
|
||
|
Open
|
||
|
<span class="mkern">T</span>ype,
|
||
|
and other
|
||
|
non<span class="mkern">-T</span>ype1
|
||
|
PostScript fonts, and improving Unicode support.
|
||
|
</p>
|
||
|
|
||
|
<h3 class="requests">Low-level formatting requests</h3>
|
||
|
|
||
|
<p class="initial" style="margin-top: -.75em">
|
||
|
Supplementary low-level formatting requests will continue to be
|
||
|
added, and the behaviour of some existing requests reviewed, with
|
||
|
care taken to maintain backward compatibility whenever modifications
|
||
|
are deemed worthwhile.
|
||
|
</p>
|
||
|
|
||
|
<p>
|
||
|
At the request level, groff’s use of integer arithmetic and
|
||
|
linear evaluation of expressions hearkens back to the stone age.
|
||
|
While not top-priority, these and other historical encumbrances
|
||
|
(read “annoyances”) will be addressed—again, with
|
||
|
a watchful eye toward backward compatibility.
|
||
|
</p>
|
||
|
|
||
|
<h2 id="usage">Program usage</h2>
|
||
|
|
||
|
<h3>General-purpose macro sets</h3>
|
||
|
|
||
|
<p class="initial" style="margin-top: -.75em">
|
||
|
Macro sets form the primary user interface to groff. Well-designed,
|
||
|
well-documented sets help make groff accessible to users—new
|
||
|
users in particular. Adoption or rejection of the program is often
|
||
|
based on whether available sets meet user needs without requiring
|
||
|
mastery of low-level requests. Learning curve and ease of use are
|
||
|
equally important.
|
||
|
</p>
|
||
|
|
||
|
<p>
|
||
|
The most active area of groff development in the past decade
|
||
|
has been in macro sets, with
|
||
|
<a href="http://www.schaffter.ca/mom/mom-01.html">mom</a>
|
||
|
alone adding over 13,000 lines of code and 1MB of documentation to
|
||
|
the project. Support for existing macro sets and the design and
|
||
|
development of new ones will therefore play a significant role in
|
||
|
groff’s future.
|
||
|
</p>
|
||
|
|
||
|
<h3 style="margin-top: .5em">Manpages</h3>
|
||
|
|
||
|
<p class="initial" style="margin-top: -.75em">
|
||
|
The need for Unix manuals to render cleanly to multiple output media
|
||
|
favours structural rather than presentational markup, however the
|
||
|
classical
|
||
|
<span class="manpage">man</span>(7)
|
||
|
macros remain almost exclusively presentational.
|
||
|
<span class="manpage">mdoc</span>(7)
|
||
|
provides a semantically superior alternative, but the use of
|
||
|
<span class="manpage">man</span>(7)
|
||
|
is deeply rooted in Unix.
|
||
|
</p>
|
||
|
|
||
|
<p>
|
||
|
Future work on manpages will entail improving the semantic clarity
|
||
|
of the
|
||
|
<span class="manpage">man</span>(7)
|
||
|
macros, decoupling them as much as possible from low-level
|
||
|
presentational requests. The aim will be to ease conversion of
|
||
|
manpages to markup languages that do not rely on groff for display
|
||
|
and printing, e.g. XML, while preserving the full presentational
|
||
|
richness of manpages processed with groff.
|
||
|
</p>
|
||
|
|
||
|
<p>
|
||
|
Concurrent with work on
|
||
|
<span class="manpage">man</span>(7),
|
||
|
<span class="manpage">mdoc</span>(7)
|
||
|
will be actively supported and its use promoted.
|
||
|
</p>
|
||
|
|
||
|
<p>
|
||
|
To summarize, the goal of this two-pronged strategy is to foster
|
||
|
manpage markup that:
|
||
|
<ul>
|
||
|
<li><span class="diamond-bullet">♦</span>
|
||
|
renders cleanly to the terminal</li>
|
||
|
<li><span class="diamond-bullet">♦</span>
|
||
|
respects presentational markup when output to PostScript</li>
|
||
|
<li><span class="diamond-bullet">♦</span>
|
||
|
allows semantic analysis</li>
|
||
|
<li><span class="diamond-bullet">♦</span>
|
||
|
is portable</li>
|
||
|
</ul>
|
||
|
</p>
|
||
|
|
||
|
<h2>Looking forward, looking back</h2>
|
||
|
|
||
|
<p class="initial" style="margin-top: .5em">
|
||
|
Backward compatibility with existing documents and usage will
|
||
|
remain a top priority, as will avoiding feature-bloat and increased
|
||
|
overheads. Groff’s viability and vitality rest as much on
|
||
|
these as on forward-looking development.
|
||
|
</p>
|
||
|
|
||
|
<p>
|
||
|
Finally, it is hoped that users of and contributors to groff will
|
||
|
promote its use, providing unobtrusive advocacy to encourage more
|
||
|
widespread adoption of the program, thereby increasing the pool of
|
||
|
potential contributors and developers and furthering the cause of
|
||
|
good typography.
|
||
|
</p>
|
||
|
|
||
|
<p class="copyright">
|
||
|
<small>©2014 Free Software Foundation, Inc.<br>
|
||
|
51 Franklin St, Fifth Floor, Boston, MA 02110, USA</small>
|
||
|
</p>
|
||
|
|
||
|
</div>
|
||
|
|
||
|
</body>
|