<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
<META NAME="resource-type" CONTENT="document">
<LINK REL="stylesheet" HREF="index.css" TYPE="text/css" MEDIA="all">
<TITLE>mdocml | mdoc macro compiler</TITLE>
</HEAD>
<BODY>
<TABLE CLASS="frame" SUMMARY="[frame]">
<COL WIDTH="100%">
<TBODY>
<TR>
<TD>
<DIV CLASS="head">
<B>mdocml</B> – mdoc macro compiler
</DIV>
</TD>
</TR>
<TR>
<TD VALIGN="top">
<H1>
DESCRIPTION
</H1>
<P>
<SPAN CLASS="nm">mdocml</SPAN> is a suite of tools compiling <Q>-mdoc</Q>, the roff macro package
of choice for BSD manual pages, and <Q>-man</Q>, the predominant historical package for UNIX
manuals. The mission of <SPAN CLASS="nm">mdocml</SPAN> is to deprecate <A
HREF="http://www.gnu.org/software/groff/" CLASS="external">groff</A>, the GNU roff implementation, for
displaying -mdoc pages whilst providing token support for -man.
</P>
<P>
Why? groff amounts to over 5 MB of source code, most of which is C++ and all of which is GPL. 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).
</P>
<P>
The core of <SPAN CLASS="nm">mdocml</SPAN> is composed of the <i>libmdoc</i> and <i>libman</i>
validating compiler libraries. Both are simple, fast libraries operating on memory buffers, so they may
be used for a variety of front-ends (terminal-based, CGI and so on). The primary front-end is <i>
mandoc</i>, which formats manuals for display on the terminal.
</P>
<P>
The <SPAN CLASS="nm">mdocml</SPAN> utility is a <A CLASS="external" HREF="http://bsd.lv/">BSD.lv
Project</A> member.
</P>
</TD>
</TR>
<TR>
<TD>
<H1>
SOURCES
</H1>
<P>
Sources correctly build and install on DragonFly BSD, FreeBSD, OpenBSD, NetBSD, and GNU/Linux operating
systems, tested variously on i386, AMD64, alpha, and others. The most current version is <SPAN
CLASS="attn">@VERSION@</SPAN>, dated <SPAN class="attn">@VDATE@</SPAN>. A full <A
HREF="ChangeLog.html">ChangeLog</A> (<A HREF="ChangeLog.txt">txt</A>) is written with each release.
</P>
<H2>
Current
</H2>
<TABLE WIDTH="100%" SUMMARY="Current Sources">
<COL WIDTH="200">
<COL>
<TBODY>
<TR>
<TD>Source archive</TD>
<TD>
<A HREF="/snapshots/mdocml.tar.gz">/snapshots/mdocml.tar.gz</A>
(<A HREF="/snapshots/mdocml.md5">md5</A>)
</TD>
</TR>
<TR>
<TD>Online source</TD>
<TD>
<A CLASS="external" HREF="http://mdocml.bsd.lv/cgi-bin/cvsweb/?cvsroot=mdocml">cvsweb</A>
</TD>
</TR>
</TBODY>
</TABLE>
<H2>
Downstream
</H2>
<TABLE WIDTH="100%" SUMMARY="Downstream Sources">
<COL WIDTH="200">
<COL>
<TBODY>
<TR>
<TD>DragonFly BSD</TD>
<TD>
<A HREF="http://gitweb.dragonflybsd.org/dragonfly.git/tree/HEAD:/usr.bin/mandoc"
CLASS="external">usr.bin/mandoc</A>
</TD>
</TR>
<TR>
<TD>FreeBSD</TD>
<TD>
<A HREF="http://www.freebsd.org/cgi/cvsweb.cgi/ports/textproc/mdocml/"
CLASS="external">ports/textproc/mdocml</A>
</TD>
</TR>
<TR>
<TD>NetBSD</TD>
<TD>
<A HREF="http://cvsweb.netbsd.org/bsdweb.cgi/src/external/bsd/mdocml/"
CLASS="external">src/external/bsd/mdocml</A>
</TD>
</TR>
<TR>
<TD>OpenBSD</TD>
<TD>
<A HREF="http://www.openbsd.org/cgi-bin/cvsweb/src/usr.bin/mandoc/"
CLASS="external">src/usr.bin/mandoc</A>
</TD>
</TR>
</TBODY>
</TABLE>
<H2>
Historical
</H2>
<TABLE WIDTH="100%" SUMMARY="Archived Sources">
<COL WIDTH="200">
<COL>
<TBODY>
<TR>
<TD>Source archive</TD>
<TD>
<A HREF="/snapshots/">/snapshots/</A>
</TD>
</TR>
</TBODY>
</TABLE>
</TD>
</TR>
<TR>
<TD>
<H1>
DOCUMENTATION
</H1>
<P>
These manuals are generated automatically and refer to the current snapshot.
</P>
<TABLE WIDTH="100%" SUMMARY="Documentation">
<COL WIDTH="200">
<COL>
<TBODY>
<TR>
<TD><A HREF="mandoc.1.html">mandoc(1)</A> (<A HREF="mandoc.1.txt">text</A>)</TD>
<TD>format and display UNIX manuals</TD>
</TR>
<TR>
<TD><A HREF="mandoc_char.7.html">mandoc_char(7)</A> (<A HREF="mandoc_char.7.txt">text</A>)</TD>
<TD>mandoc special characters</TD>
</TR>
<TR>
<TD><A HREF="mdoc.7.html">mdoc(7)</A> (<A HREF="mdoc.7.txt">text</A>)</TD>
<TD>mdoc language reference</TD>
</TR>
<TR>
<TD><A HREF="man.7.html">man(7)</A> (<A HREF="man.7.txt">text</A>)</TD>
<TD>man language reference</TD>
</TR>
<TR>
<TD><A HREF="manuals.7.html">manuals(7)</A> (<A HREF="manuals.7.txt">text</A>)</TD>
<TD>a guide to writing UNIX manuals</TD>
</TR>
<TR>
<TD><A HREF="mdoc.3.html">mdoc(3)</A> (<A HREF="mdoc.3.txt">text</A>)</TD>
<TD>mdoc macro compiler library</TD>
</TR>
<TR>
<TD><A HREF="man.3.html">man(3)</A> (<A HREF="man.3.txt">text</A>)</TD>
<TD>man macro compiler library</TD>
</TR>
<TR>
<TD><A HREF="roff.7.html">roff(7)</A> (<A HREF="roff.7.txt">text</A>)</TD>
<TD>roff language reference</TD>
</TR>
</TBODY>
</TABLE>
</TD>
</TR>
<TR>
<TD>
<H1>
CONTACT
</H1>
<P>
For all issues related to <SPAN CLASS="nm">mdocml</SPAN>, contact Kristaps Dzonsons, kris<A
CLASS="external"
HREF="http://mailhide.recaptcha.net/d?k=01M6h_w7twDp58ZgH57eWC_w==&c=Q2DBUt401ePlSeupJFrq_Q=="
TITLE="Reveal this e-mail address">...</A>@bsd.lv.
</P>
<P>
You may also subscribe to several mailing lists (these require subscription, which is moderated). An
archive is not yet available.
</P>
<TABLE WIDTH="100%" SUMMARY="Mailing Lists">
<COL WIDTH="200">
<COL>
<TBODY>
<TR>
<TD>
disc<A CLASS="external" TITLE="Reveal this e-mail address"
HREF="http://www.google.com/recaptcha/mailhide/d?k=01KQ80PFH5n3BBNpF5Gs4sRg==&c=EV1QytpQqTHSItc2IXvZyocgYLPnG5K0JKw_gwMC9yc=">...</a>@mdocml.bsd.lv
</TD>
<TD>high-level discussions and version announcements</TD>
</TR>
<TR>
<TD>
tec<A CLASS="external" TITLE="Reveal this e-mail address"
HREF="http://www.google.com/recaptcha/mailhide/d?k=014mgcCKFE_qqo9NLETCAiEA==&c=-y6beh3b_SMDe6Iauc3PW-c1wlVbRqYJdj1RETN9WMs=">...</a>@mdocml.bsd.lv
</TD>
<TD>low-level discussions</TD>
</TR>
<TR>
<TD>
sou<A CLASS="external" TITLE="Reveal this e-mail address"
HREF="http://www.google.com/recaptcha/mailhide/d?k=01prQrAZhhl2EbIwVcRfABsQ==&c=KtTW4Yic9xk-8g40KzJoca4fR3MYXv28g8NC6OQV-T8=">...</a>@mdocml.bsd.lv
</TD>
<TD>source commit messages</TD>
</TR>
</TBODY>
</TABLE>
</TD>
</TR>
<TR>
<TD>
<H1>
NEWS
</H1>
<TABLE WIDTH="100%" CELLPADDING="2">
<COL CLASS="date">
<TBODY>
<TR>
<TD VALIGN="top"><SPAN CLASS="date">xx-05-2010</SPAN></TD>
Day 1 of Rostock hackathon: proper handling of quotations in tab-separated
column lists, finished patching of SYNOPSIS breaking (1.9.25), fixed pre-comment
white-space stripping, added end-of-sentence spacing to black partial-implicit
macros, relaxed column warnings, relaxed acceptence of bad standards arguments,
significant documentation of lists in <A HREF="mdoc.7.html">mdoc(7)</A>.
Version: <SPAN CLASS="rev">1.9.26</SPAN>.
<TD VALIGN="top">
</TR>
<TR>
<TD VALIGN="top"><SPAN CLASS="date">13-05-2010</SPAN></TD>
<TD VALIGN="top">
Fixed handling of <Q>\*(Ba</Q> escape. Backed out <SPAN
CLASS="flag">-fno-ign-chars</SPAN> (pointless complexity). Fixed erroneous
breaking of literal lines. Fixed SYNOPSIS breaking lines before non-initial
macros. Changed default section ordering. Most importantly, the framework for
end-of-sentence double-spacing is in place, now implemented for the
<Q>end-of-sentence, end-of-line</Q> rule. This is a stable roll-back point
before the mandoc hackathon in Rostock!
Version: <SPAN CLASS="rev">1.9.25</SPAN>.
</TR>
<TR>
<TD VALIGN="top"><SPAN CLASS="date">09-05-2010</SPAN></TD>
<TD VALIGN="top">
Rolled back break-at-hyphen. <SPAN CLASS="flag">-DUGLY</SPAN> is now the
default (no feature splits!). Free-form text is not de-chunked any more: lines
are passed whole-sale into the front-end, including whitespace. Added mailing
lists. Lastly, <SPAN CLASS="nm">mdocml</SPAN> is the focus of two <A
CLASS="external" HREF="http://socghop.appspot.com/">Google Summer of Code</A>
projects this year: <Q><A CLASS="external"
HREF="http://netbsd-soc.sourceforge.net/projects/mandoc_ps/">mandoc -Tps</A></Q>
(NetBSD) and <Q><A CLASS="external"
HREF="http://wiki.freebsd.org/SummerOfCode2010Projects">BSD-licensed
Text-Processing Tools</A></Q> (FreeBSD).
Version: <SPAN CLASS="rev">1.9.24</SPAN>.
</TD>
</TR>
<TR>
<TD VALIGN="top"><SPAN CLASS="date">07-04-2010</SPAN></TD>
<TD VALIGN="top">
<SPAN CLASS="nm">mdocml</SPAN> has been linked to the <A CLASS="external"
HREF="http://www.openbsd.org/faq/current.html#20100403">OpenBSD build</a>. This
version incorporates many small changes, mostly from patches by OpenBSD,
allowing crufty manuals to slip by with warnings instead of erroring-out. Some
subtle semantic issues, such as punctuation scope, have also been fixed.
Lastly, some issues with <SPAN CLASS="flag">-Thtml</SPAN> have been fixed, which
prompted an update to the <A HREF="mandoc.1.html">online</A> <A
HREF="mandoc_char.7.html">manual</A> <A HREF="man.7.html">pages</A> style
layout. Version: <SPAN CLASS="rev">1.9.23</SPAN>.
</TD>
</TR>
<TR>
<TD VALIGN="top"><SPAN CLASS="date">31-03-2010</SPAN></TD>
<TD VALIGN="top">
Version <SPAN CLASS="rev">1.9.22</SPAN>: adjusted merge of the significant work
by Ingo Schwarze in getting <Q>Xo</Q> blocks (block full implicit, e.g.,
<Q>It</Q> for non-columnar lists) to work properly. This isn't enabled by
default: you must specify <SPAN CLASS="flag">-DUGLY</SPAN> as a compiler flag
(see the Makefile for details).
</TD>
</TR>
<TR>
<TD VALIGN="top"><SPAN CLASS="date">30-03-2010</SPAN></TD>
<TD VALIGN="top">
Version <SPAN CLASS="rev">1.9.20</SPAN>: more efforts to get roff instructions
in -man documents under control. Note that roff instructions embedded in
line-scoped, next-line macros (e.g. <Q>B</Q>) are not supported. Leading
punctuation for -mdoc macros, such as <Q>Fl ( ( a</Q>, are now correctly
handled.
</TD>
</TR>
<TR>
<TD VALIGN="top"><SPAN CLASS="date">27-03-2010</SPAN></TD>
<TD VALIGN="top">
Version <SPAN CLASS="rev">1.9.18</SPAN>: many fixes (largely pertaining to
scope) and improvements (e.g., handling of apostrophe-control macros, which
fixes the strange <Q>BR</Q> seen in some macro output) to handling roff
instructions in -man documents.
</TD>
</TR>
<TR>
<TD VALIGN="top"><SPAN CLASS="date">25-03-2010</SPAN></TD>
<TD VALIGN="top">
Version <SPAN CLASS="rev">1.9.17</SPAN> highlights: accept <A
HREF="http://perldoc.perl.org/" CLASS="external">perlpod</A> standard preamble.
Also accept (and discard) <Q>de</Q>, <Q>dei</Q>, <Q>am</Q>, <Q>ami</Q>, and
<Q>ig</Q> roff macro blocks.
</TD>
</TR>
<TR>
<TD VALIGN="top"><SPAN CLASS="date">22-03-2010</SPAN></TD>
<TD VALIGN="top">
Version <SPAN CLASS="rev">1.9.16</SPAN> highlights: inspired by patches and bug
reports by Ingo Schwarze, allowed <SPAN CLASS="flag">-man</SPAN> to accept
non-printing elements to be nested within next-line scopes, such as <Q>br</Q>
within <Q>B</Q> or <Q>TH</Q>, which is valid roff. Longsoon architecture also
noted and Makefile cleaned up.
</TD>
</TR>
<TR>
<TD VALIGN="top"><SPAN CLASS="date">18-02-2010</SPAN></TD>
<TD VALIGN="top">
Moved to our new <A HREF="http://bsd.lv" CLASS="external">BSD.lv</A> home.
Version <SPAN CLASS="rev">1.9.15</SPAN> highlights: XHTML is now an acceptable
output mode for <A HREF="mandoc.1.html">mandoc(1)</A>; <Q>Xr</Q> made more
compatible with groff; <Q>Vt</Q> fixed when invoked in SYNOPSIS; <Q>\\</Q>
escape removed; end-of-line white-space detected for all lines; subtle bug
fixed in list display for some modes; compatibility layer checked in for
compilation in diverse UNIX systems; and column lengths handled correctly.
</TD>
</TR>
</TBODY>
</TABLE>
</TD>
</TR>
<TR>
<TD>
<DIV CLASS="foot">
Copyright © 2008–2010 Kristaps Dzonsons, $Date$
</DIV>
</TD>
</TR>
</TBODY>
</TABLE>
</BODY>
</HTML>