我需要选择一个标准发行版,以便将我自己开发的系统转换为 ELF 格式。Caldera 发布了两个 Linux Desktop 产品的预览版,价格和功能都降低了。由于看起来不错,我购买了它,希望他们能在 Preview II 中转为 ELF(他们做到了)。我很高兴参与了他们的 1.0 Beta 自愿计划,其中包括他们的 1.0 系统的副本。
vh-man2html 的起源是我发送给 Caldera 用户邮件列表的一封电子邮件。这个邮件列表由 Caldera 建立,作为一个论坛,Caldera 的员工有时可以在这里贡献信息并回答用户的问题。(我应该补充一点,这个论坛是非正式的,不是官方支持渠道。)我提交了一个愿望清单,希望添加到产品中。我的一个愿望是
Man Pages—通过 Man-page CGI 转换器将 man pages 集成到帮助浏览器中。全文搜索?(以及 man -k 搜索)。
Caldera 似乎非常乐于接受意见,所以在我的消息中,我也建议
我们的一些客户有机会创建一些必要的东西。如果 Caldera/Red-Hat 已经在研究这些东西,那么了解一下可能会有所帮助。
由于这个建议,列表中的另一位贡献者 Matthias Watermann (Matthias@oln.Comlink.APC.org) 建议 RosettaMan 可能是答案
http://www.cs.berkeley.edu/~phelps/tcltk/index.html
他提供了一个示例脚本,它启发了我自己寻找解决方案。我在 RosettaMan 方面取得了一些成功,它适用于格式化的 man pages,并使用 man 命令根据需要进行格式化。这种技术非常适合许多“商业” Unix 系统,在这些系统中,仅以格式化形式分发 man pages 已经成为一种常见的做法。然而,Linux 确实带有源代码,并且 Red Hat 和 Caldera 都选择以源代码形式存储所有 man pages。拥有源代码意味着可以更准确地翻译成 HTML。缺乏源代码,加上 RosettaMan 的分发限制,让我开始思考是否有其他可以使用 man 源代码的替代方案。
我使用我的网络浏览器搜索了一个 man 源代码到 HTML 的转换器。在我找到的参考文献中,有一篇是 Richard Verhoeven (rcb5@win.tue.nl) 在埃因霍温理工大学的个人主页上对 man 到 HTML 转换器的总结
http://wsinwp01.win.tue.nl:1234/maninfo.html
Richard 不仅总结了几个可用的转换器,他还提供了他自己的努力,并且没有商业用途的限制。Richard 的代码直接生成了漂亮的 HTML;因此,看起来大部分的困难工作已经完成了。
从我对 RosettaMan 的研究中,我得到了几个 awk 脚本,用于生成两种 man pages 的索引。mansec(man section)脚本搜索 man-path 目录层次结构,构建一个仅包含 man pages 名称的索引。manwhatis 脚本处理每个 man 层次结构中找到的 whatis 文件,以构建一个名称-标题索引。
我稍微修改了 Richard 的程序,使其更可配置—我添加了一个 Makefile、我的脚本和必要的魔法来构建 Red Hat rpm 包。我与 Richard 核实以确保我没有对他的工作采取太多的自由,他似乎很高兴看到他的工作得到应用。
在测试过程中,我使用 man-1.4 包进行了一些有趣的实验,这是 Red Hat 附带的标准 man pager 包。来自 man-1.4 的 makewhatis 脚本需要 30 分钟才能创建必要的 whatis 文件。通过减少脚本运行 awk 子脚本的次数,我能够将这个时间减少到 1.5 分钟。这里的技巧是传递 awk 文件列表,让它在一个 awk 运行中打开和处理。以前,makewhatis 为每个文件启动一个新的 awk,因此进程创建和初始化时间占据了运行时间的主要部分。我与 man-1.4 的维护者 Andries Brouwer (Andries.Brouwer@cwi.nl) 进行了交流,他非常有帮助,使脚本得到了改进并整合到 man-1.4g 中。
在三月和四月期间,我通过 Caldera 的网站向 Caldera 用户发布了 vh-man2html-1.0 和 1.1。我在 1.1 版本中通过使用一个名为 glimpse 的程序添加了全文搜索。在这个阶段,我发现 vh-man2html 在格式化某些 man pages 时存在问题。大多数 Linux 系统上使用的 man pages 的源代码有两种形式。大多数页面使用 man 宏,这是在 ATT 派生的 Unix 上找到的原始 troff 宏。但有些页面,最著名的是网络页面,是使用 Berkeley Unix mandoc 宏编写的。Richard 的程序仅用于翻译 man 宏。幸运的是,Richard 的代码结构使得我能够添加额外的代码来解析 mandoc 宏。这个过程又花费了一个月的业余时间。由于我无法找到关于 mandoc 手册的良好文档,因此这项任务变得更加复杂。有人有任何线索吗?
到五月初,我已经在我的系统上安装的每个 man page 上测试了 vh-man2html,并且完善了它处理 man 和 mandoc 页面的能力。此时,我将其命名为 vh-man2html 并发布了 1.3 版本。1.4 版本添加了能够处理使用 compress 或 gzip 压缩的 man 源代码的改进。