[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Groff] Mission statement, 3rd draft

From: Peter Schaffter
Subject: [Groff] Mission statement, 3rd draft
Date: Sun, 23 Mar 2014 22:40:44 -0400
User-agent: Mutt/1.5.21 (2010-09-15)

Subject to a few wording changes (suggestions welcome), this
represents the final version of the mission statement.

Steve Izma wrote well on the subject of structured text files,
so to demonstrate, I'm not cleaning this version up for email,
but including it as I wrote it, with the semantic tags in place.
Conversion of this kind of file to other formats, including
groff, is absurdly easy.  Filtered through a simple sed script,
the resulting mom file preserves all of the semantics, has *no*
low-level groff requests, and requires exactly 4 trivial tweaks
(to satisfy my personal aesthetics).  I'll be happy to post the
mommified version if anyone wants to see it.


[title] "Groff Mission Statement"
[subtitle] "2014"
[draft] 3

    As the most widely-deployed implementation of troff in use
today, groff holds an important place in the Unix universe.  Often
dismissed as a legacy program for formatting manual pages, groff
is in fact a complete typesetting package.  Its powerful backend
and flexible macro language are routinely used in the production of
high-quality documents, from business correspondence to complex,
technical reports and plate-ready books.  While maintaining a record
for backward compatibility, groff continues to evolve, and plays a
leading role in the development of free typesetting software.
    Ongoing development of groff will be directed into two main
  - core groff
    - the backend; low-level formatting requests
  - program usage
    - general-purpose macro sets; manpages

[heading 1] "Core groff"

[heading 2] "The backend"

    Groff currently uses a greedy algorithm to justify text, but the
Knuth-Plass algorithm ("paragraph-at-once"), implemented in TeX,
Heirloom troff, and elsewhere, achieves a more uniform "typographic
grey" with less user intervention.  One of the most exciting
challenges facing groff will be implementing paragraph-at-once
formatting.  It's a big job, but with groff's clean codebase and
knowledgeable community, it is hoped additional developers
will step forward and contribute their programming skills.
    Equally important for the future are instituting native support
for TrueType, OpenType, and other non-Type1 PostScript fonts, and
improving Unicode support.

[heading 2] "Low-level formatting requests"

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

[heading 1] "Program usage"

[heading 2] "General-purpose macro sets"

    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.
    The most active area of groff development in the past decade
has been in macro sets, with [macroset]mom[macroset] alone adding
over 13,000 lines of code and 1MB of documentation to the project.
Support for existing macro sets and the design/development of new
ones will therefore play a key role in groff's future.

[heading 2] "Manpages"

    The need for Unix manuals to render cleanly to multiple output
media favours structural rather than presentational markup,
however the classical [manpage]man[manpage](7) macros remain
almost exclusively presentational.  [manpage]mdoc[manpage](7)
provides a semantically superior alternative, but the use of
[manpage]man[manpage](7) is deeply rooted in GNU-based systems.
    Future work on manpages will entail improving the semantic
clarity of the [manpage]man[manpage](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.  Concurrent with work on [manpage]man[manpage](7), the
use of [manpage]mdoc[manpage](7) will be actively supported and
    To summarize, the goal of this two-pronged strategy is to foster
manpage markup that
  - renders cleanly to the terminal
  - respects presentational markup when output to PostScript
  - allows semantic analysis
  - is portable

[heading 1] "Looking forward, looking back"

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


Peter Schaffter

reply via email to

[Prev in Thread] Current Thread [Next in Thread]