Linuxのマニュアルページをgroffを使用せずにHTMLに変換するにはどうすればよいですか?


11

Linuxのいくつかのmanページをgroffを使わずにHTMLに変換したいと思います。groffに対する私の偏見は、Sabayaon にローカライズされているように見える、PNGレンダリングの問題が原因です(これらの問題は、他のディストリビューションのVirtualBox VMでは発生しないようです)。これはバグだと思いますが、近いうちに解決策はないようですので、LinuxのmanページをHTMLに変換する方法が他にないか尋ねたいと思います。http://linux.die.net/manで HTMLページを使用することは、私が興味を持っているmanページのいくつかがそこにない(たとえば、emerge(1)そこにない)ため、許容できる解決策ではありません。


使ってみませんtroffか?これは無料。
2015

方法がわかりません。このサイトと関連サイトでいくつかの回答を読んで、groffの使い方を学びました。あなたがtroffに関する回答を書いてくれれば、この質問に対する他の回答の質によっては、それを受け入れるかもしれません。
BH2017

バグレポートをsabayonに送信して、バグを修正してもらいませんか?
cas

@cas最初のリンク(PNGレンダリングの問題)は、この質問をした頃に提出したSabayonバグレポートへのリンクです。
BH2017

warning: can't find font `b'メッセージのソースを見つけて修正してください。作成されたpngファイルはグラフィック形式の単なるテキストである傾向があるため、それが原因である可能性があります。インストールが必要なフォントパッケージが不足している可能性があります。
CAS

回答:


10

roffittroffman2htmlなどの代替手段はたくさんあります。manServerなどのperlベースのオンラインマンページブラウザーもあります。

私のお気に入りはですがpandoc、残念ながらデフォルトではROFF入力をサポートしていないようです(ただし、複数の変換フィルターを一緒にチェーンする必要がある場合は、おそらく使用できます)。

man2htmlの例:

zcat /usr/share/man/man1/dd.1.gz \ 
    | man2html \
    | sudo tee /var/www/html/dd.html

roffitの例:

git clone git://github.com/bagder/roffit.git
cd roffit
zcat /usr/share/man/man1/dd.1.gz \
    | perl roffit \
    | sudo tee /var/www/html/dd-roffit.html

その他のツール:

  • troffcvtもほぼ同じです。
  • 「本物」-http:troff //heirloom.sourceforge.net/doctools.htmlを試してみるつもりです。私はschilyがOpenSolarisと友人を念頭に置いていると思います:-)。

ああ、私はプログラムの名前だけでなく、それらを使用してmanページをHTMLに変換する方法にも興味があることを明確にすべきです。したがって、これらのプログラムの少なくとも1つを選択して、manページをHTMLに変換する方法を教えてください。
BH2017

編集ありがとうございます。でもいくつか質問があります。man2html例でstderrをhtmlファイルにリダイレクトするのはなぜですか?そして、なぜファイルにリダイレクトするのです/var/www/htmlか?Webサーバーは必要ありません。ローカルファイルにリダイレクトするだけで、ブラウザーでそのファイルを指定できます。また、man2html出力を確認しましたか?Archで試してみましたが、フォーマットされた出力が生成されません。
terdon

stderrをリダイレクトする必要はありません。無視してください:-)。/ var / www / htmlにリダイレクトして、テスト中に結果を表示できるようにしました(ssh経由でリモートシステムを使用しています)。する必要はありません-ローカルでブラウザを使用しても問題ありません。私は両方をチェックしました-そしてそれらは私のシステム上でOKに見えます。ただし、PNG(またはArchで発生した問題)を生成できるかどうかは確認しませんでした。
Criveti Mihai、2015

私はこの答えが好きだと思いますが、最終的には受け入れることになると思いますが、この答えには最後の問題があります。Sabayonがの.bz2代わりにフォーマットでマンページを使用しているのを参照してください.gz。同様に、bzip2で圧縮されたmanページで動作するものでzcat行を変更します。
BH2017

man2htmlはnroff出力を必要とし、trodd入力では機能しませんあなたの例は間違っています。
2015

6

この最初のビットは公式ウェブサイトからの恥知らずな裂け目です:

mandocコンパイルツールのスイートでmdocroffBSDマニュアルページのための選択のマクロ言語、およびman、UNIXのマニュアルのための主要な歴史的な言語。小さく、ISO C、ISCライセンスで、非常に高速です。ツールセットの主なコンポーネントは、検証コンパイラにmandoc基づくlibmandoc、UNIX端末(ワイド文字ロケールのサポート付き)、XHTML、HTML、PostScript、およびPDFの出力をフォーマットするユーティリティプログラムです。

mandocOpenBSDで主に開発されており、OpenBSDとBSD.lvプロジェクトの両方です。私たちは、関心のあるすべての無料のオペレーティングシステム、特にFreeBSD、NetBSD、DragonFly、illumos、Minix 3、GNU / Linux、およびpkgsrcポータブルパッケージビルドシステムを実行しているすべてのシステムをサポートするよう努めています。mandoc開発をサポートするには、OpenBSD財団への寄付を検討してください。

pacmanローカルにインストールされたmdocmlパッケージサイズは3.28MBであり、次の/usr/bin場所にあるバイナリが含まれていることを通知します。

/usr/bin/demandoc
/usr/bin/makewhatis
/usr/bin/mandoc
/usr/bin/mapropos
/usr/bin/mman
/usr/bin/mwhatis

それで私はできる:

mman -Thtml mman >/tmp/html
firefox file:///tmp/html

ここに画像の説明を入力してください

独自のスタイルシートを好きなように適用できます。すべてのドキュメントもオンラインです。そして、そのすべては、私が思うに、mandoc同様にコンパイルされています。


プロジェクトの名前はに変更されましたmandoc
フランクリンYu

5

まず、と呼ばれるプログラム複数あることに注意してください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年前に、私が合理的な仕事をしたと私が見つけた唯一のことは、man2htmlCプログラムとその出力を「味わう季節」に後処理することでした。

結局、私はずっと質の高い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手段bacリテラルの間でクランチされたメタ構文です。

私の改良版はman2html、これらのマークアップ規則を実装するかなり複雑なマクロを理解しています。

また、マニュアルのセクションに自動的に番号が付けられていることに注意してくださいman2html。これはすべて、理解するtroffコードによって行われます。


1

OpenSolarisはOSSとして提供されたため、無料のがありtroffます。

移植されたソースのセットはここにあります:

http://heirloom.sourceforge.net/doctools.html

しかし家宝は約以来死んだプロジェクトです。2007.あなたはチェックしたいかもしれません

https://github.com/nt-roff/heirloom-doctools

一部の人々は死んだ家宝のプロジェクトを続けています。

とともにman2html、troffを使用すると、優れたHTMLマニュアルページを自動作成できます。

たとえば、SchilliXのmanページを参照してください。

http://schillix.sourceforge.net/man/

Schily Bourne Shellで:

http://schillix.sourceforge.net/man/man1/bosh.1.html

これに満足し、適切なオプションを使用すると、manページが同じグループの他のドキュメントにリンクされます。私は例えばこのコマンドを使用します:

soelim sh.1 | tbl | nroff -u1 -Tlp -man - | col -x | \
                        (sed -e 's/XXX/sh.1/g' ../conf/pre.html; \
                        man2html  -cgiurl '../man$section$subsection/$title.$section$subsection.html' -compress -nodepage; \
                        cat ../conf/post.html) | \
                        egrep -v 'HTML|BODY'> sh.1.html

これはschilyツールのmakeファイルシステムの一部です。ファイルを注意../conf/pre.htmlし、../conf/post.htmlタイトルと他人のために必要とされるシリーmakefilesystemから。この4つを必要に応じて変更できます。

拡張man2thmlはschilyツールの一部です(boshmanページの下部を参照)。

ところで:面白い情報:全体のtroffソースコードのプラスのようなすべてのヘルパープログラムのすべてのソースsoelimtbl...プラスmanプログラムのソースは、半分しかあなたが必要なコードのあるmandocプログラムとmandoc非常に限られているtbl休憩ほとんどのSolarisの男というのサポートをページ。

mandocFreeBSDなどからのフォーマットされたtroffソースのサポートが必要な場合は、で動作する一連のmandocマクロを作成しましたtroffhttps://sourceforge.net/p/schillix-on/schillix-on/ci/default/tree/usr/src/cmd/troff/troff.d/tmac.d/でSchilliXソースを確認してください 。問題のコードファイルandocとにありますdoc*

manSchilliX-ON のプログラムソースは、nroff -mandocではなくを呼び出すように変更されましたnroff -man


ああ、あなたは私をそれに打ち負かした!私heirloom-doctoolsもインストールしました。mk.config:-) をいじる必要がありました。
Criveti Mihai

0

OPのPNGファイルに関する問題は、xtermのマニュアルページと制御シーケンスのドキュメントにgroffを使用した経験と一致しています。問題は、groffがPDFファイルから切り取られた画像としてテーブルをレンダリングしようとしていること、そして数年前からバグが多いことです。1990年代からncursesのドキュメントにPerlスクリプトman2htmlを使用してきましたが、他のプログラムでは、groffを使用してアドホックなhtmlおよびpdfファイルを生成する方が簡単であることがわかりました。PDFファイルは正常に機能します。htmlファイルにはありません。

同時に、Perlスクリプトには独自の問題がありました。

どちらも廃止されなかったため(および依存関係の追加や他の制限の導入により、提案された代替案は改善されなかったため)、man2htmlを改善することで問題を解決しました(いくつかの過程で加えたものに加えて)年)そして、プログラムごとに新しいconfigureスクリプトオプションを追加して、groffをデフォルトのマンページからHTMLへのコンバーターとして使用できるようにしましたが、オプションを設定するときにman2htmlを使用しました。これを行った後、groffで生成されたすべてのhtmlファイルを今年、私のWebサイトから削除しました。これを文書化しているウェブサイトに「man2html」ページがあります。実際のスクリプトは、その他のスクリプトページで入手できます

提案とコメントのいくつかは、man2htmlという名前の(少なくとも)2つのプログラムがあることに気づいていないようです。

  • Earl HoodによるPerlスクリプト(@ criveti-mihaiによってリンク)、および
  • Richard Verhoevenによって最初に作成された(そして@ criveti-mihaiによって与えられた例で想定されている)Cプログラム。

Cプログラムは独自のフォーマットを行い、nroff / groff /に依存しません。マンページを標準入力から読み取ることも、実際のファイルとして読み取ることもできます(とりわけ、マニュアルページを参照してください)。nroff構文のマニュアルページ "foo.1"を指定すると、次のコマンドのいずれかを使用してフォーマットできます。

man2html - <foo.1 >foo.1.html
cat foo.1 |man2html - >foo.1.html
man2html foo.1 >foo.1.html

Perlスクリプトは、フォーマットされたマニュアルページを(たとえば、nroffOPの質問ではのラッパーですgroff)から読み取ります。次のように使用できます。

nroff -man foo.1 |man2html >foo.1.html

Perlスクリプトの代替としてCプログラムを使用することを調査しましたが、それを破棄しました。

  • 出力のフォーマットはうまく機能しません。ncursesのterminfo.5ファイルを使った簡単なチェックで、出力フォーマットにエラーが見られます。
  • Cプログラムには、マンページマクロの概念が組み込まれています。これは、私のWebサイトのマニュアルページに必要なさまざまなケース(新しいマクロの作成を含む)をカバーしないものです。

ちなみに、このファイルで使用されている複数のリダイレクトは処理されます(これは、レガシーtroffの問題です。ncursesのインストール手順で、過去20年間groffを使用するよう勧められていた理由です)。


前述のように、man2htmlnroff出力を入力として受け取るため、manページのソースファイルを入力として使用できません。
schily 2015

1
@shilyそれはman2htmlあなたが話しているものに依存します。
Kaz

> Cプログラムには、マンページマクロの概念が組み込まれています。これは、Webサイトのマニュアルページに必要なさまざまなケース(新しいマクロの作成を含む)をカバーしないものです。 こちらをご覧ください:kylheku.com/cgit/man/log
Kaz
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.