mdocml – UNIX manpage compiler, current version @VERSION@ (@VDATE@)
Sources: current, cvsweb (archives)
mdocml is a suite of tools compiling mdoc, the roff macro package of choice for BSD manual pages, and man, the predominant historical package for UNIX manuals. The mission of mdocml is to deprecate groff, the GNU troff implementation, for displaying mdoc pages whilst providing token support for man.
Why? groff amounts to over 5 MB of source code, most of which is C++ and GPL version 3. It runs slowly, produces uncertain output, and varies in operation from system to system. mdocml strives to fix this (respectively small, C, ISC-licensed, fast and regular).
mdocml consists of the libmandoc validating compiler and mandoc, which interfaces with the compiler library to format output for UNIX terminals (with support for wide-character locales), XHTML, HTML, PostScript, and PDF. It also includes preconv for recoding multibyte manuals, demandoc for emitting only text parts of manuals, mandocdb for indexing manuals, apropos (includes whatis mode) for indexed manual search, and man.cgi for indexed manual search online. It is a BSD.lv project.
Disambiguation: mdocml is often referred to by its installed binary, mandoc
.
mdocml is in ISO C99 and should build and run on any modern system; however, you'll need sqlite3 to build apropos (links to whatis),
man.cgi, and mandocdb.
To build and install into /usr/local/, just run make install
.
Be careful: the preconv, apropos, and whatis binary names are usually taken by existing utilities.
Several systems come bundled with mdocml utilities.
If your system does not appear below, the maintainers have not contacted me and it should not be considered
official
.
Please contact us if you plan on maintaining a downstream version!
DragonFly BSD | contrib/mdocml (1.12.2 sources) lib/libmandoc usr.bin/mandoc (build system) |
FreeBSD 10.0, -CURRENT | contrib/mdocml (1.12.1 sources) usr.bin/mandoc (build system) |
FreeBSD 9.x, 8.x | ports/textproc/mdocml (1.12.1 port) |
NetBSD | src/external/bsd/mdocml (1.12.1 sources plus patches and build system) |
OpenBSD | src/usr.bin/mandoc (1.12.2 sources and build system) |
pkgsrc | textproc/mdocml (1.12.2 port) |
Minix3 | external/bsd/mdocml (1.10.9 sources and build system) |
Alpine Linux | aports/main/mdocml (1.12.2 port) |
These manuals are generated automatically and refer to the current release. They are the authoritative documentation for the mdocml system.
apropos(1) | search the manual page database |
demandoc(1) | emit only text of UNIX manuals |
mandoc(1) | format and display UNIX manuals |
preconv(1) | recode multibyte UNIX manuals |
mandoc(3) | mandoc macro compiler library |
tbl(3) | roff table parser library for mandoc |
eqn(7) | eqn-mandoc language reference |
man(7) | man language reference |
man.cgi(7) | cgi for manpage query and display |
mandoc_char(7) | mandoc special characters |
mdoc(7) | mdoc language reference |
roff(7) | roff-mandoc language reference |
tbl(7) | tbl-mandoc language reference |
mandocdb(8) | index UNIX manuals |
Use the mailing lists for bug-reports, patches, questions, etc. Please check the TODO for known issues before posting. All lists are subscription-only: send a blank e-mail to the listed address to subscribe. Beyond that, contact Kristaps at kris...@bsd.lv. Archives are available at Gmane.
disc...@mdocml.bsd.lv | bug-reports, general questions, and announcements |
tec...@mdocml.bsd.lv | patches and system discussions |
sou...@mdocml.bsd.lv | source commit messages |
xx-xx-2013: version 1.13.0
The mandocdb tools (mandocdb, apropos (absorbing whatis), and man.cgi) have been re-written to use sqlite3 as a database.
05-10-2013: version 1.12.2
The mdoc(7) to man(7) converter,
to be called as mandoc -Tman
, is now fully functional.
The mandoc(1) utility now supports the -Ios
(default operating system)
input option, and the -Tutf8
output mode now actually works.
The mandocdb(8) utility no longer truncates existing databases when starting to build new ones, but only replaces them when the build actually succeeds.
The man(7) parser now supports the PD macro (paragraph distance), and (for GNU man-ext compatibility only) EX (example block) and EE (example end). Plus several bugfixes regarding indentation, line breaks, and vertical spacing, and regarding RS following TP.
The roff(7) parser now supports the \f(BI (bold+italic) font escape, the \z (zero cursor advance) escape and the cc (change control character) and it (input line trap) requests. Plus bugfixes regarding the \t (tab) escape, nested escape sequences, and conditional requests.
In mdoc(7), several bugs were fixed related to UTF-8 output of quoting enclosures, delimiter handling, list indentation and horizontal and vertical spacing, formatting of the Lk, %U, and %C macros, plus some bugfixes related to the handling of syntax errors like badly nested font blocks, stray Ta macros outside column lists, unterminated It Xo blocks, and non-text children of Nm blocks.
In tbl(7), the width of horizontal spans and the vertical spacing around tables was corrected, and in man(7) files, a crash was fixed that was triggered by some particular unclosed T{ macros.
For mandoc developers, we now provide a tbl(3) library manual and gmdiff
,
a very small, very simplistic groff-versus-mandoc output comparison tool.
23-03-2012: version 1.12.1
Significant work on apropos and mandocdb. These tools are now much more robust. A whatis implementation is now handled as an apropos mode. These tools are also able to minimally handle pre-formatted pages, that is, those already formatted by another utility such as GNU troff.
The man.cgi script is also now available for wider testing. It interfaces with mandocdb manuals cached by catman. HTML output is generated on-the-fly by libmandoc or internal methods to convert pre-formatted pages.
The mailing list archive for the discuss and tech lists are being hosted by Gmane at gmane.comp.tools.mdocml.user and gmane.comp.tools.mdocml.devel, respectively.
Lastly, I'm no longer providing binaries, as nobody has asked for them.
Copyright © 2008–2011 Kristaps Dzonsons, © 2013 Ingo Schwarze, $Date$