Powered by SmartDoc

sdoc2man.xsl

2000年12月4日
河原 亮
ryokawa @stat.phys.kyushu-u.ac.jp
http://www.stat.phys.kyushu-u.ac.jp/~ryokawa/
SmartDoc文書をmanページに変換する

目次

概要

このマニュアルではSmartDoc文書をmanページ(roff -manフォーマット)に変換する方法について説明してます。具体的には.sdoc文書をPureSmartDocフォーマットに変換し、XSLTを用いてmanページに変換します。

対応している機能

以下の機能に対応しています。

(逆に、それ以外には対応していないとも言う(^ ^;;。)

ドキュメントとスタイルシートのアーカイブはsdoc2man-0.3.1.tar.gzです。

必要なもの

実行手順

以下に、具体的な実行の手順を示します。SmartDoc文書をfoo.sdocとします。

manページへの変換

XSLスタイルシートをつかって、manページに変換します。SmartDocがインストールされ、sdoc2man.xslが文書と同じディレクトリにあると仮定します。次のコマンドを実行します。

% sdoc -format:xslt -xslt.xsl:sdoc2man.xsl -xslt.suffix:man \
       -xslt.encoding:EUC-JP \
       -xslt.prepareRegexRule:sdoc2man_rule.xml \
       foo.sdoc

SmartDoc 0.67で追加されたXSLTジェネレータ機能、0.6.9betaで追加された正規表現処理を使っています。これでfoo.manが生成されます。

コマンドの入力が面倒な場合にはSmartDoc.propertiesファイルを同じディレクトリに作ると良いでしょう。

SmartDoc.properties
# argument0=sample.sdoc
verbose=true
toc=true
# index=true
format=html4,xslt,pure
packager=dir
# latex2e.box=AscmacLaTeX2eBoxHandler
# latex2e.program=AllttLaTeX2eProgramHandler
# latex2e.table=ArrayLaTeX2eTableHandler
# latex2e.imageLoc=htb
# latex2e.encoding=EUC-JP
xslt.xsl=sdoc2man.xsl
xslt.suffix=man
xslt.encoding=EUC-JP
xslt.prepareRegexRule=sdoc2man_rule.xml
html4.encoding=Shift_JIS

出力の確認

最後に正しくmanページに変換されたかどうかを確認します。

% cd xslt/
% ls -l foo.man
-rw-r--r--    1 ryouk    users        3219 Sep 22 16:21 foo.man
% groff -t -Tnippon -man foo.man

-Tnipponオプションはjgroffで日本語を出力するためのものです。一般的なシステムでは-Tasciiオプションを使います。このページを変換してみた結果がこのサンプル表示です。まだいろいろ問題点があります。

細かいオプション

sdoc2man.xslの最初のほうに3つのパラメータがあります。以下の部分です。

sdoc2man.xsl: 先頭
<xsl:param name="preamble_section" select="'1'"/>
<xsl:param name="preamble_source" select="''"/>
<xsl:param name="use_tbl" select="false()"/>

これらは変換の細かい仕様を決定します。必要に応じて書き換えてください。XSLTプロセッサによってはコマンドラインでこれらの値を設定できるものがあります。

preamble_section
man(7)の.THの第2引数に対応します。ページのセクション番号を指定します。
preamble_source
man(7)の.THの第4引数に対応します。コマンドの出自を指定します。
use_tbl
表の出力にtbl(1)プリプロセッサを使用するかどうかを指定します。true()のとき使用し、false()のとき使用せずただタブで区切りながら項目を縦横に並べます。いずれにせよ現在のバージョンでは普通の長方形のテーブルでないとうまく動かないでしょう。

問題点など

tableの使い方

簡単なtableに対応しています。

文字のエスケープ

XML文書ではピリオド、バックスラッシュを自由に使うことが出来ますがmanualページ(roff -manフォーマット)の中では特別な意味があるのでエスケープする必要があります。この処理はまだ実装していません。したがって現段階では文書を書く時に気をつける必要があります。これはSmartDoc0.6.9betaから搭載された正規表現機能で処理できるようになる予定です。以下にmanualページで良く使うエスケープを載せます。

manページ(roff -manフォーマット)で使われるエスケープ文字
文字 manページでの表記
\ \e
- \-
. \&.
` \`
' \'
" \"

manページ特有の情報

例えばmanページにはジャンルを示すセクション番号が必要ですがSmartDocにはこれを指定する場所がありません。現在はスタイルシートの中で1と仮定しています。簡単にカスタマイズできるようにスタイルシートのトップレベルのところでパラメータとして指定できます。セクションによってマニュアルページの構成はかなり変わるのでセクションごとに典型的なスタイルシートを作成することになると思います。

TODO

sdoc2man.xslはまだできたばかりでやるべきことがたくさんあります。いくつかここにあげておきます。

  1. エスケープ処理をより完全に
  2. バグフィックス
  3. 英語ドキュメント
  4. bibliography
  5. manのセクションやフォントに関する習慣との対応づけ
    1. スタイルシートのインポートで対応?
  6. マルチロケールへの対応
  7. 複雑な表への対応
    1. colgroupとかどうする?
    2. 曲がりなりにも自前でフォーマットしてpre出力?

更新履歴

用語集

XSL
XML Stylesheet Language. xml文書にスタイルを指定する他、他の形式への変換にも使われる。
XSLT
XSL Transformation. XSLを使ってxml文書を他の形式に変換する仕組み。
roff
UNIXで使われるテキスト整形プログラム(だと思う)。manページはroffフォーマットで書かれ、roffによって整形されて画面、psプリンタなどに出力される。groffはGNUによるroffの実装。

関連項目

  1. W3C XSL Transformations (XSLT)
  2. man(7)
  3. groff(1)
  4. troff(1)
  5. THE LINUX MAN-PAGE-HOWTO
  6. SmartDoc