まず、と呼ばれるプログラムが複数あることに注意してください。man2html
呼び出されるユーティリティの1つman2html
は、1990年代後半にアイントホーフェン工科大学のRichard Verhoevenによって1990年代後半に最初に書かれたCプログラムです。プログラムの内部はかなり風変わりです。しかし、それが生のmanページのソースではなく、で動作する利点があるtroff
か、nroff
出力を。このプログラムは、フレデリコルシフレディのmanスイートに追加されました。
プログラムはman
およびmandoc
マクロのセマンティクスを理解し、妥当なHTML構造を出力します。たとえば、次のようにインデントされた段落を使用するとします。
.IPワード
の定義
語。
.RS
プログラムはHTML定義リストを出力します。
私は1つの非常に大きなmanページ(ほとんどのメガバイトのソース、およびでレターサイズのPDFに変換すると400ページ近くの長さgroff
)を維持します。
$ ls -l txr.1
-rw-rw-r-- 1 kaz kaz 980549 1月3日11:38 txr.1
これをHTMLに変換する必要があったとき、約5年前に、私が合理的な仕事をしたと私が見つけた唯一のことは、man2html
Cプログラムとその出力を「味わう季節」に後処理することでした。
結局、私はずっと質の高いHTML文書が欲しかったので、troff
マクロを書き始めました。Cプログラムの限界が痛々しいほど明らかになったので、私はそれをフォークしました。私のgitサイトでは、man2htmlへの30個のパッチを含むgitリポジトリを見つけることができます。これらのパッチは多くのバグを修正し、troffマクロ、条件、ループ、およびその他の構造を解釈する機能が大幅に改善されてプログラムを強化します。また、M2
レジスターを追加しました。これを使用して、レジスターが実行されていることを検出し、man2html
条件付きでいくつかのことを異なる方法で実行できるコードを記述できます(例として、下にスクロールしてください)。また.M2SS
、カスタムHTMLヘッダーセクションを出力するコマンドを追加しました。
私の大きなマンページはここでホストされています。これはで作成man2html
され、私のgenman.txr
プログラムで後処理され、セクションを再配置し、ドキュメント全体にハイパーリンクを追加します。また、目次の内部リンクを(任意の列挙ではなくハッシュに基づく)安定したURLに書き換え、JavaScriptを使用して目次を折りたたみ可能にします。
myが使用する正確なコマンド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
構文:
(defstruct {<name> |(<name> <arg> *)} <super>
<スロット指定子> *)
defstructマクロは新しい構造タイプを定義し、登録します
<name>の下にあります。これはバインド可能なシンボルである必要があります。
バインド可能な関数。同様に、すべての<slot>の名前は
バインド可能なシンボルでもあります。
上記で、パラメータがでどのように示されて<angle>
<brackets>
いるかに注意してください。HTMLバージョンでは、イタリック体で表示されます。
構文セクションは、次のようにソースコードに表示されます。
.coNPマクロ@ defstruct
.synb
.mets(defstruct >> {name | >>(name << arg *)} <super
.mets \ \ << slot-specifier *)
.syne
これは、すべて同じドキュメントで定義されたカスタムマクロです。の下.mets
で< b
は、手段b
はメタ構文変数です。>> a b
手段a
は具体的な構文であり、その隣にはb
スペースが介在しないメタ構文があり、<> a b c
手段b
はa
とc
リテラルの間でクランチされたメタ構文です。
私の改良版はman2html
、これらのマークアップ規則を実装するかなり複雑なマクロを理解しています。
また、マニュアルのセクションに自動的に番号が付けられていることに注意してくださいman2html
。これはすべて、理解するtroffコードによって行われます。
troff
か?これは無料。