首先,应该注意,有多个程序被称为man2html
。
所谓的一个实用程序man2html
是1990年代末由埃因霍温科技大学的Richard Verhoeven在1990年代末最初编写的C程序。该程序的内部构造非常古怪。但是,它的优点是它的原始手册页来源的作品,而不是troff
或nroff
输出。该程序已添加到Frederico Lucifredi的男士套房中。
该程序了解man
和mandoc
宏的语义,并输出合理的HTML结构。例如,当您使用缩进的段落时,如下所示:
.IP字
的定义
字。
.RS
该程序将显示一个HTML定义列表。
我维护着一个非常大的手册页(当通过转换为字母大小的PDF时,它的源页面大部分为兆字节,而将近400页groff
):
$ ls -l txr.1
-rw-rw-r-- 1 kaz kaz 980549 Jan 3 11:38 txr.1
大约五年前,当我需要将其转换为HTML时,我发现做得合理的唯一事情是man2html
C程序,以及将其输出后处理为“按时品尝”的程序。
最终,我想要一个质量更好的HTML文档,因此我开始编写troff
宏。C程序的局限性变得显而易见,因此我分叉了它。在我的git网站上,您可以找到一个git repo,其中包含对man2html的30个补丁。这些修补程序修复了许多错误,并以大大提高的解释troff宏,条件,循环和其他结构的能力增强了程序。我还添加了一个M2
寄存器,通过该寄存器,您可以编写代码来检测其是否在运行,man2html
并可以有条件地执行某些操作(例如,向下滚动)。同样,我添加了一个.M2SS
命令,该命令可让您发出自定义HTML标头部分。
我的大手册页托管在这里。这是通过man2html
,由我的genman.txr
程序进行后处理而产生的,该程序重新排列了各个部分,并在整个文档中添加了超链接。它还将目录中的内部链接重写为稳定的URL(基于散列而不是任意枚举),并通过某些Javascript使目录可折叠。
我使用的确切命令Makefile
:
man2html txr.1 | ./txr genman.txr-> txr-manpage.html
tbl txr.1 | pdfroff -man --no-toc-> txr-manpage.pdf
有关输出在HTML之间有条件不同的示例,nroff
我们可以看一下man
输出的一部分:
9.19.4宏解构
句法:
(defstruct {<名称> |(<名称> <arg> *)} <超级>
<插槽说明符> *)
defstruct宏定义新的结构类型和寄存器
根据<name>,它必须是可绑定的符号
可绑定功能。同样,每个<slot>的名称必须
也是可绑定的符号。
上面,请注意如何在中表示参数<angle>
<brackets>
。在HTML版本中,它们以斜体显示。
语法部分出现在源代码中,如下所示:
.coNP宏@ defstruct
.synb
.mets(defstruct >> {name | >>(name << arg *)} <超级
.mets \ \ <<插槽说明*)
.syne
这是同一文档中定义的所有自定义宏。下.mets
,< b
装置b
是一种元句法变量。>> a b
mean a
是一种具体的语法,其次是b
没有任何中间空格的元语法,而<> a b c
means b
是在a
和c
字面量之间加紧的元语法。
我改进后的版本man2html
理解了实现这些标记约定的相当复杂的宏。
另外,请注意手册是如何自动为各部分编号的:全部由troff代码完成,这可以man2html
理解。
troff
?这是免费的。