OLBCK(チュートリアル: 上級篇)

ホームページ|目次|クイックガイド|イントロダクション|チュートリアル: 初級篇|チュートリアル: 中級篇|チュートリアル: 上級篇|付録|その他
カテゴリ-中くらいのサイズのファイル

カテゴリ



 さて、ここからチュートリアルも上級篇に入るわけですが、1つだけ理解しておいていただきたいことがあります。それは、上級という言葉の意味です。上級篇などと言っていますが、これから説明する機能が上級だというわけではありません。単に設定が面倒だというだけのことです。つまり、面倒なわりに大した結果g得られないかもしれません。以下の2節はそのつもりで読んでください。
 さて、中級篇までは、インデックスファイルにリストアップされたすべてのファイルをまったく同じ基準でHTML化する方法を示してきました。しかし、いつもかならず同じ様式でなければならないというのは、少し窮屈です。たとえば、雑誌を作る場合など、たいていのページは著者名を持つものになるでしょうが、編集後記のように著者名を持たないページが混ざることがあるはずです。詩と評論と対談で本文のフォントサイズを変えたいという場合もあるでしょう。
 インデックスファイルのカテゴリフィールドは、そのようなときに使います。

<オリジナルテキストファイル名>:<目次用タイトル>:<タイトルバー用タイトル>:<参照番号>:<目次レベル>:<カテゴリ>:<漢字著者名1>:<かな著者名1>:<漢字著者名2>:<かな著者名2>...

カテゴリフィールドに何かを指定しても、対応するオプションを指定しなければ、無意味です。たとえば、“特殊”というカテゴリを指定した行については、sur_bdyオプションとして<center>を指定したい場合には、設定ファイルかコマンド行でsur_bdy[特殊]=<center>と指定します。つまり、[]のなかにカテゴリ名を挿入した形で新たなオプションを指定するわけです。[]付きオプションを指定していないオプションについては、[]なしオプションが適用されます。
 カテゴリは、“,”で区切って複数指定することができます。たとえば、インデックスファイルに次のような行を挿入した場合、

ab001.txt:マルチメディア:マルチメディア:::multi,media

この行には“multi”カテゴリと“media”カテゴリの両方が適用されます。
 すべてのオプションについてカテゴリが指定できるわけではありません。たとえば、contentsオプションなどにカテゴリを指定できるようにしたら、HTMLファイル全体の構造がおかしくなってしまいますので、このようなオプションにはカテゴリを指定できません。カテゴリを指定できるオプションをここでまとめておきましょう。

g_body関連
出力ファイルごとにカテゴライズできるもの
ヘッダファイル(head
フッタファイル(foot
中仕切りファイル表示タイプ(midtype
入力ファイルごとにカテゴライズできるもの
中仕切りファイル(middle
タグなしページ(notag
タイトル装飾関連オプション(sur_titend_tit
本文装飾関連オプション(sur_bdy
著者名装飾関連オプション(ath_enblesur_athend_athsep_ath
インデックスファイル操作オプション(ignore
g_cnts関連
リストスタイル関連(lststritmstrlststr(<レベル>)itmstr(<レベル>)
著者名装飾関連オプション(ath_c_enblsur_c_athsta_c_athend_c_athsep_c_ath
アイテム装飾関連オプション(sur_c_itmsta_c_itmend_c_itm
インデックスファイル操作オプション(ignoreintact

 lststritmstr(レベル)付きのものをカテゴライズするときには、lststr(1)[特殊]のようにレベルを先に書いて下さい。逆に書いた場合には、無意味なオプションとして無視されます。
 このなかで、“インデックスファイル操作関連”とされているオプションについてはまだ説明していませんので、説明しておきましょう。
 g_body、g_cntsがともに使うignoreオプションは、1をセットするとインデックスファイルの行を無視するようになります。デフォルトは0です。設定ファイルやコマンド行で単純にignore=1を指定すれば、g_bodyやg_cntsは何のファイルも生成せずに終了してしまいます。そういう意味で、ignoreはカテゴリ機能がなければ無意味なオプションです。たとえば、cntsonlyというカテゴリを作ってg_bodyを呼び出すときにignore[cntsonly]=1を指定すれば、cntsonlyカテゴリの部分は、行頭に#を付けたときと同様に、g_bodyからは無視されてしまいます。しかし、ignoreオプションをまったく付けずにg_cntsを実行すれば、目次ファイルにはcntsonlyが指定されている行も含み込まれるようになります。このマニュアルの“中くらいのサイズのファイル”の部分は、この機能を使って作成していますので、マニュアルをダウンロードされた方は参考にしてください。
 intactオプションは、g_cnts専用です。これもカテゴリを使わない場合にはほとんど無意味ですが、intact=1を指定すると、インデックスファイルの第1フィールドに対する操作を行いません。デフォルトは0です。“拡張子の設定”で説明するとお約束したのは、このオプションです。インデックスファイルに、

ab.mov:ばかなビデオ:ばかなビデオ:::mov

のような行を挿入し、g_bodyを実行するときにはignore{mov]=1を指定し、g_cntsを実行するときにはintact{mov]=1を指定すれば、“ばかなビデオ”以外の行のテキストファイルをHTML化すると同時に、“ばかなビデオ”に対する正しいリンクが挿入された目次ファイルを作ることができます。
 g_body関連で“出力ファイルごとにカテゴライズできるもの”に含まれているオプションのカテゴリは、その出力ファイルを作成するために使われる入力ファイル群のなかの最初のファイルによって指定されます。しかし、この文は変な感じがしませんか? 今までの説明では、出力ファイルはインデックスファイルの各行に1つか(type=1)、全体で1つか(type=2)の2つに1つに感じられたはずです。
 しかし、これでは長すぎるファイルと短すぎるファイルのどちらかしかできません。OLBCKでは、インデックスファイル内の一部の入力ファイルを1つにまとめて、長すぎず、短すぎない出力ファイルを作ることができます。次節“中くらいのサイズのファイル”のテーマはまさにこれです。

ホームページ|目次|クイックガイド|イントロダクション|チュートリアル: 初級篇|チュートリアル: 中級篇|チュートリアル: 上級篇|付録|その他
カテゴリ-中くらいのサイズのファイル

中くらいのサイズのファイル~擬似マクロの取り扱い~使用例~type=2について

中くらいのサイズのファイル



 今まではtypeオプションとして1を指定すれば、入力ファイル1つにつき1つの出力ファイル(短いファイル)、2を指定すれば、入力ファイル全部で1つの出力ファイル(長いファイル)が作成されると説明してきましたが、typeオプションのデフォルトが何かということは説明していませんでした。実は、typeのデフォルトは、1でも2でもなく、0なのです。1とか2は、インデックスファイルの参照番号フィールドの値に関わらず、短いファイルや長いファイルを強制的に生成するための設定で、デフォルトの0は、そのような強制的な処理を行わず、参照番号フィールドの指定に従って、短いファイルや長いファイルや中くらいのファイルを作ります。そこで、OLBCKには、type=1を指定してg_bodyとg_cntsを呼び出すg_shorttype=2を指定してg_body、g_cntsを呼び出すg_longに対応する形で、typeオプションを指定しないでg_body、g_cntsを呼び出すg_htmlというものも添付してあります。
 さて、この参照番号ですが、うまい用語を思い付けなかったので、こういうわかりにくい名前になってしまいましたが、どの行をベースに出力ファイルを作るかを指定します。この行をルート:根、この行を参照しているこの行以外の行をブランチ:枝と呼ぶことにします。ルートとして指定できる行は、自分自身か自分よりも手前の行です(特に指定しなければ自分自身をルートとして参照します)。自分よりもあとの行を指定した場合には、
index file error: root file should be placed before branch files

というよくわからないエラーメッセージが表示されて処理は止まってしまいます。また、すでに別の行を参照している行を参照しようとすると、

index file error: branch files should refer to root

というこれまたよくわからないエラーメッセージが表示されて処理は止まります。
 ルートの第2、第3フィールドは、ヘッダ、フッタなどの$all_o$prev_o$next_o$etitで表示される文字列を供給します。第1フィールドは空でなければ、拡張子部分をextオプションの内容に置き換えて出力ファイル名を供給します。空の場合には、ブランチのなかで第1フィールドを持っている行のなかでもっとも手前の行が出力ファイル名を供給します。ブランチのなかにも第1フィールドを持っているものがない場合には、g_bodyはそのルートとブランチの全体を完全に無視しますが、g_cntsは

index file error: Couldn't find the root file

というさらに要領を得ないエラーメッセージを出力して止まってしまいます(実害はありませんが、この部分は改良の余地があると思っています)。

中くらいのサイズのファイル~擬似マクロの取り扱い~使用例~type=2について

$all_o、$all_iなどの擬似マクロの扱い


 ヘッダ、フッタなどの擬似マクロは、次の基準に従って作成されます。

$*_o
<A>タグの参照
ルートまたは第1フィールドが指定されている最初のブランチの第1フィールドの拡張子をextオプションの内容に置き換えたもの
タイトルテキスト
ルートの第2フィールドの内容
$*_i
<A>タグの参照
第1フィールドが指定されているファイルの第1フィールドにプレフィクス#を付けたもの
タイトルテキスト
第1フィールドが指定されているファイルの第2フィールドの内容

 目次ファイルの個々の入力ファイルに対応する部分は、<A HREF="[出力ファイル名]#[入力ファイル名]">という形で参照されます。

中くらいのサイズのファイル~擬似マクロの取り扱い~使用例~type=2について

使用例


 さて、以上の説明はわかりにくいと思いますので、例を使って具体的に説明しましょう。たとえば、このマニュアルのインデックスファイルの冒頭数行は次のようになっています。

k01.txt:クイックガイド:クイックガイド : :0 :クイック:
:イントロダクション:イントロダクション : :0
k02.txt:基本コンセプト:基本コンセプト :2 :1 : :
k03.txt:動作の仕組み :動作の仕組み :2 :1 : :
:チュートリアル': 初級篇:チュートリアル': 初級篇: :0 :
k04.txt:ヘッダとフッタ:ヘッダとフッタ :5 :1 : :
k05.txt:本文ファイル:本文ファイル :5 :1 : :
k06.txt:目次ファイル:目次ファイル :5 :1 : :
k07.txt:インデックスファイルの自動生成:インデックスファイルの自動生成:5 :1::


 ルートは1、2、5行目です。1行目は、ブランチを持っていませんので、短いファイルをつくるときと同じ要領で作成されます。2行目は、3行目、4行目をブランチとして従えています。しかし、2行目の第1フィールドは空文字列になっており、ブランチのなかで第1フィールドが空になっていない最初の行は3行目です。そのため、$all_oのこの部分に該当するところは、次のように展開されます。

<A HREF="k02.html">イントロダクション</A>

そして$all_iのこの部分に該当するところは、次のように展開されます。

<A HREF="#k02.txt">基本コンセプト</A>-<A HREF="#k03.txt">動作の仕組み</A>


中くらいのサイズのファイル~擬似マクロの取り扱い~使用例~type=2について

type=2についての補足


 今までの説明からもおわかりいただけるように、すべての行の参照番号フィールドが空になっているインデックスファイルから作成されるHTMLファイル群は、type=1を指定したときに作成されるファイル群と同じです。しかし、すべての行の参照番号フィールドが1になっているインデックスファイルから作成されるHTMLファイルは、type=2を指定したときに作成されるファイルとは異なります。両者の違いをまとめると次のようになります。
type=2を指定した場合、出力ファイル名はbodyオプションの内容になるが、そうでなければ、インデックスファイル内の第1フィールドが空でない最初の行から作成された出力ファイル名が使われる。
type=2を指定した場合、$etitle擬似マクロの内容はetitleオプションの内容になるが、そうでなければ、1行目の第3フィールドの内容になる。
type=2を指定した場合、$all_oは空文字列になるが、そうでなければ、インデックスファイル内の第1フィールドが空でない最初の行から作成された出力ファイル名だけを要素とする$all_oが作成される。
以上からもわかるように、1個の長いファイルを作るときには、すべての行の参照番号フィールドに1をセットするより、type=2を指定した方がよいでしょう。


ホームページ |目次| クイックガイド|イントロダクション|チュートリアル: 初級篇|チュートリアル: 中級篇|チュートリアル: 上級篇|付録|その他
カテゴリ-中くらいのサイズのファイル
mail: nyagao@longtail.co.jp