--- wikisrc/projects/project/troff.mdwn 2014/02/27 08:41:03 1.3 +++ wikisrc/projects/project/troff.mdwn 2014/02/27 09:04:43 1.4 @@ -10,14 +10,74 @@ category="userland" difficulty="hard" description=""" -Write a replacement for groff that is BSD licensed. Earlier versions of BSD -UNIX had one, so maybe it could be revived from an earlier version of BSD UNIX, -and updated to support newer groff-like features, at least enough to support our -current mandoc macros. - -Note: In March, 2009, there was some discussion regarding a -[groff/-mandoc replacement](http://mdocml.bsd.lv/) on the -[tech-userlevel](http://mail-index.NetBSD.org/tech-userlevel/2009/03/01/msg001766.html) -mailing list. + +While we now have mandoc for handling man pages, we currently still +need groff in the tree to handle miscellaneous docs that are not man +pages. + +This is itself an inadequate solution as the groff we have does not +support PDF output (which in this day and age is highly desirable) +... and while newer groff does support PDF output it does so via a +Perl script. Also, importing a newer groff is problematic for assorted +other reasons. + +We need a way to typeset miscellaneous articles that we can import +into base and that ideally is BSD licensed. (And that can produce +PDFs.) Currently it looks like there are three decent ways forward: + +* Design a new roff macro package that's comparable to mdoc (e.g. +supports semantic markup) but is for miscellaneous articles rather +than man pages, then teach mandoc to handle it. + +* Design a new set of markup tags comparable to mdoc (e.g. supports +semantic markup) but for miscellaneous articles, and a different less +ratty syntax for it, then teach mandoc to handle this. + +* Design a new set of markup tags comparable to mdoc (e.g. supports +semantic markup) but for miscellaneous articles, and a different less +ratty syntax for it, and write a new program akin to mandoc to handle +it. + +These are all difficult and a lot of work, and in the case of new +syntax are bound to cause a lot of shouting and stamping. Also, many +of the miscellaneous documents use various roff preprocessors and it +isn't clear how much of this mandoc can handle. + +None of these options is particularly appealing. + +There are also some less decent ways forward: + +* Pick one of the existing roff macro packages for miscellaneous +articles (ms, me, ...) and teach mandoc to handle it. Unfortunately +all of these macro packages are pretty ratty, they're underpowered +compared to mdoc, and none of them support semantic markup. + +* Track down one of the other older roff implementations, that are now +probably more or less free (e.g. ditroff), then stick to the existing +roff macro packages as above. In addition to the drawbacks cited +above, any of these programs are likely to be old nasty code that +needs a lot of work. + +* Teach the groff we have how to emit PDFs, then stick to the existing +roff macro packages as above. In addition to the drawbacks cited +above, this will likely be pretty nasty work and it's still got the +wrong license. + +* Rewrite groff as BSD-licensed code and provide support for +generating PDFs, then stick to the existing roff macro packages as +above. In addition to the drawbacks cited above, this is a horrific +amount of work. + +* Try to make something else do what we want. Unfortunately, TeX is a +nonstarter and the only other halfway realistic candidate is lout... +which is GPLv3 and at least at casual inspection looks like a horrible +mess of its own. + +These options are even less appealing. + +Maybe someone can think of a better idea. There are lots of choices if +we give up on typeset output, but that doesn't seem like a good plan +either. + """ ]]