web-dev-qa-db-ja.com

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

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

11
BH2017

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

その他のツール:

10
Criveti Mihai

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

mandocは、BSDマニュアルページに最適なmdocマクロ言語であるroffと、UNIXマニュアルの主な歴史的言語であるmanをコンパイルするツールスイートです。 。小さく、ISO C、ISCライセンスで、非常に高速です。ツールセットの主なコンポーネントは、mandoc検証コンパイラに基づくlibmandocユーティリティプログラムで、UNIX端末の出力をフォーマットします(ワイド-文字ロケール)、XHTML、HTML、PostScript、PDF。

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

pacmanは、ローカルにインストールされた mdocml package-sizeが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

enter image description here

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

6
mikeserv

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

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

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

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

https://github.com/n-t-roff/heirloom-doctools

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

man2htmlとともに、troffを使用すると、Nice htmlのマニュアルページを自動作成できます。

たとえば、 SchilliXのmanページ:

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

シリーボーンシェルと:

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ファイルシステムの一部です。タイトルなどに必要なschily makefilesystemの../conf/pre.htmlおよび../conf/post.htmlファイルに注意してください。この4つを必要に応じて変更できます。

強化されたman2thmlは、schilyツールの一部です(boshのマニュアルページの下部を参照)。

ところで、面白い情報:troff全体のソースコードと、soelimtblなどのすべてのヘルパープログラムのすべてのソースとmanプログラムsourceはmandocプログラムに必要なコードの半分にすぎず、mandocはほとんどのSolarisマニュアルページを壊すtblサポートが非常に限られています。

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

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

1
schily

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

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

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

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

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

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

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

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

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

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

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

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

0
Thomas Dickey