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

ホームページ|目次|クイックガイド|イントロダクション|チュートリアル: 初級篇|チュートリアル: 中級篇|チュートリアル: 上級篇|付録|その他
ヘッダとフッタ-本文ファイル-目次ファイル-インデックスファイルの自動生成

ヘッダとフッタ



 g_body.bat、g_cnts.batは、どれもテキスト本体の前後にヘッダフッタファイルというものを付加してHTMLファイルを生成します。また、type=2などを指定して長い形式のファイルを作るときには、2つのソーステキストファイルの間に中仕切りファイル(middle.dat)というものを挿入することもできます。出力されるHTMLファイルの外観を決める上でもっとも重要な意味を持つのは、前節で説明した設定ファイルやコマンド行で指定できるオプション群ですが、これら3つのファイルは、それに次いで重要です。本節では、これらについて説明します。
 HTMLファイルには、テキスト本体のほかに前後のページへのリンクや、<HTML><HEAD></HEAD>タグなどが付いているものです。“クイックガイド”で示したようなページを手で作ると、これらを1つ1つのファイルに追加していかなければなりません。<HTML></HTML>タグのように、どのファイルでもまったく同じものなら、それでもあまりミスはありませんが、前後のページへのリンクなどは注意していないと2つ前のページへのリンクが混ざってしまったり、存在しないページへのリンクを挿入したりしてしまいます。また、背景色や文字の色を一斉に変更したい場合など、何十個ものファイルを同時に編集しなければならなくなって、泣きたい気分になるでしょう。OLBCKのヘッダ、フッタ、中仕切りファイルは、これらの共通部分を一元管理することによってオンラインブック全体の管理を容易にします
 ヘッダ、フッタは、HTMLファイルからテキスト本体を取り除いた部分ですから、いわゆるHTMLのヘッダ部とは異なります。たとえば、付属のhead.datは次のような内容になっています。

<HTML>
<HEAD>
<TITLE>$etit</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#002000" LINK="#000077" VLINK="#007700">

<HEAD>文のほか<BODY>文も含まれていることに注意してください。この<BODY>文がすべてのページの色を変えるときの鍵を握っています。たとえば、ここを次のように変えてみましょう。

<BODY BGCOLOR="#000000" TEXT="#FFFFFF" LINK="#7777FF" VLINK="#77FF77">


目次ファイルも含め、すべてのページが次のような色になります。

[変な色]

色の具体的な設定方法については、OLBCKの問題ではなく、HTMLの問題ですので、ここではこれ以上触れません。興味のある方は次のページをご覧ください。

[ページの色の設定]

 ヘッダファイルはheadオプションで指定します。デフォルトは、head.datです。フッタファイルはfootオプションで指定し、デフォルトはfoot.dat、中仕切りファイルはmiddleオプションで、デフォルトはなし(空文字列)です。つまり、middleオプションを特に指定しない場合には、中仕切りファイルは挿入されません。また、sup_hfオプションに1をセットすると(デフォルトは0)、ヘッダ、フッタは追加されません
 ところで、上のhead.datには、$etitという見慣れない記号が含まれています。これは一種のマクロで、OLBCKの処理によって別の文字列に置き換えられます。ヘッダ、フッタ、中仕切りファイルで使えるこれらのマクロをまとめておきましょう。

名前 意味
$prevf_o 前のページのファイル名
$prev_o 前のページのタイトル(index.datの第2フィールド)
$prevf_i 同じページの1つ上の節の参照名(<a href=#****>の#****
$prev_i 同じページの1つ上の節のタイトル(index.datの第2フィールド)
$nextf_o 次のページのファイル名
$next_o 次のページのタイトル(index.datの第2フィールド)
$nextf_i 同じページの1つ下の節の参照名(<a href=#****>の#****
$next_i 同じページの1つ下の節のタイトル(index.datの第2フィールド)
$all_o すべてのページの参照とタイトル
$all_i ページ内のすべての節の参照とタイトル
$contents 目次ファイルのファイル名(contentsオプションの内容)
$etit そのページのタイトル(主としてタイトルバー用。index.datの第3フィールド)
$egtit そのページのタイトル(主としてタイトルバー用。egtitleオプションの内容)
$issue そのページのタイトル(主としてタイトルバー用。issueオプションの内容)

 $prev*、$next*という形の合計8つは、前後のページへのリンクを挿入するためのものです。たとえば、次のフッタファイルの例を見てください(これは、付属のconfig.datがデフォルトで使うfoot.datの内容です)。

<HR><FONT SIZE="1"><I>|<A HREF="$contents">目次|</A>
<A HREF="$prevf_o">前頁($prev_o)|</A>
<A HREF="$nextf_o">次頁($next_o)|</A></I></FONT>
<HR>
</BODY>
</HTML>

この部分は、たとえば次のように展開されます(これは、“クイックガイド”で示したAbsolute BAKAの2篇目、「かれぇ」の該当箇所の内容です)。

<HR><FONT SIZE="1"><I>|<A HREF="indexs.html">目次|</A>
<A HREF="ab001.html">前頁(マルチメディア)|</A>
<A HREF="ab003.html">次頁(ぽこぽこピッ)|</A></I></FONT>
<HR>
</BODY>
</HTML>

 $prevf_oと書かれていたところは前のページのファイル名であるab001.htmlに、$nextf_oは次のページのファイル名であるab003.htmlに置き換えられています(これらのファイル名は、インデックスファイルの第1フィールドのファイル名から拡張子を取り除き、extオプションの内容を付加したものになります。ファイル名に拡張子が付けられていない場合には、元のファイル名にextオプションを付加します。なお、extオプションのデフォルトはhtmlです)。同様に、prev_oは前のページのタイトル(インデックスファイルの2つ目のフィールド)、next_oは次のページのタイトルに置き換えられています。つまり、$*f_oは前後のページのファイル名、$*_o(_の前にfが付いていないもの)は前後のページのタイトルに対応しているわけです。ページの前後関係は、“クイックガイド”でも説明したように、インデックスファイルのなかの行の順番で決まります。インデックスファイルの行の順番を変えて、g_shortをもう1度実行すれば、ページの関係も自動的に変わります。たとえば、“クイックガイド”のindex.datの内容を次のように変えてみましょう。

ab003.txt:ぽこぽこピッ:ぽこぽこピッ
ab002.txt:かれぇ:かれぇ
ab001.txt:マルチメデア:マルチメディア

 このインデックスファイルを使ってg_shortを実行すると、次のようなものが作成されます。

[順番の異なるインデックスファイルの出力]

 さて、今説明したのは$*_oという形式のものでした。$*_iという形で同じようなものがもう4種類用意されています。oとiとではどのように違うのでしょうか?
 この$*_iという形のものは、g_longが使うmiddle.datに含まれています。

<HR size="5">
<font size="1"><i><A HREF="$prevf_i">|前($prev_i)</a>|
<A HREF="$nextf_i">次($next_i)|</a></i></font>

そして、“クイックガイド”の例の場合、この部分は、次のように展開されます。

<HR size="5">
<font size="1"><i><A HREF="#ab001.txt">|前(マルチメディア)</a>|
<A HREF="#ab003.txt">次(ぽこぽこピッ)|</a></i></font>

$prevf_i$nextf_i#...という形に展開されていることに注意してください(この#...の部分は、インデックスファイルの第1フィールドの内容に#を付けただけのものです)。これは同じファイルの特定の位置を参照しているアンカーです。つまり、$*_oという形式は前後の別のファイルへのリンクになるのに対し、$*_iという形式は同じファイルのなかの前後のアンカーへのリンクになるわけです。oにはoutiにはinというニュアンスが込められています。ですから、個々のソーステキストファイルを別々のHTMLファイルに変えるtype=1の場合には$*_iの形式は無意味ですし、すべてのソーステキストファイルを1つのHTMLファイルにまとめるtype=2の場合には、$*_oの形式は無意味です。
 さて、前のページとか同じファイルのなかの前後のアンカーと簡単に説明してしまいましたが、最後のページの次のページや、ページ冒頭の上のアンカーといったものをどう処理するかが問題です。これらは、lnktype_olnktype_iオプションで指定します(このオプションを使うのはg_bodyのみ)。この2つのオプションには、次の4つの値を指定できます。

意味
1 目次へのリンクを挿入する
2 先頭から末尾、末尾から先頭という形で循環するリンクを挿入する
3 $prev_*、$next_*の代わりにnoneオプションで指定した文字列を表示する(リンクにはならない)。
4 $prev*、$next*とHTMLの<A>、</A>文全体を取り除く(ヘッダ、フッタなどの<A HREF...から</A>までの全体を取り除く)

lnttype_o=2、3、4を指定したときの“クイックガイド”のサンプルは、それぞれ次のようになります。

[lnktype_o=2]
[lnktype_o=3]
[lnktype_o=4]

lnktype_oのデフォルトは1lnktype_iのデフォルトは4です。それ以外の値を使うときには、設定ファイルかコマンド行で指定してください。なお、lnktype_*として3、4を指定した場合、かならず、<A HREF=>"$prevf_o"のように、$prevf_*、$nextf_*の前後に""を挿入するのを忘れないでください。""を忘れると、期待した効果が得られません。また、lnktype_*として1を指定したとき、最初の$prev_*や最後の$next_*は、cntstrオプションで指定された文字列になります。デフォルトは、スクリプトに日本語を埋め込まないようにするためにContentsになっていますので、もし使う場合には設定ファイルで指定してください。また、lnktype_*3のときに使われるnoneオプション(g_bodyのみ)のデフォルトはnoneです。これも、使う場合には、設定ファイルで明示的に日本語の文字列を指定してください。
 $contentsは$prevf_*、$nextf_*の親戚筋にあたるもので、目次ファイルの参照に展開されます(先ほどのhead.datにも含まれていましたので、見落とされた方はもう1度見てみてください)。このときに使われる参照はcontentsオプションで指定します。contentsオプションの値としては、contents.htmlのようなファイル名やcontents.html#fooファイル名のうしろに#をはさんで<A NAME>タグで指定したアンカーを付けた形のものを指定できます。#fooのようなものが付けられている場合、g_bodyは値をそのまま使いますが、g_cnts#以下を取り除きます。ですから、目次ファイル名として#を含むファイル名を使うのは避けてください。なお、contentsオプション(すなわちg_cntsの出力ファイル)のデフォルトは、index.htmlです。
 $all_o$all_iは、$prev*や$next*の親玉のようなもので、前後だけではなく、すべてのページ(または節)のリンクをまとめたものに置き換わります。つまり、<a href=xxx>XXX</a><a href=yyy>YYY</a>...といった感じのものです。しかし、これをそのままつなげて表示しても、わけのわからないものになってしまいますので、sep_all_osep_all_iオプションでセパレータを指定できます。たとえば、例のサンプルについて、sep_all_iとして|を指定し、中仕切りファイルに$all_iを入れると、次のようになります。

[$all_i付き中仕切り]

 $etitは、タイトルバーテキストで使うことを想定したものですが、ほかの用途に使っても、もちろんかまいません。インデックスファイルでタイトルを2つ並べて指定するようになっているのは、この$etitのためで、インデックスファイルの第3フィールドの内容がここに表示されます。日本語表記のページでも、タイトルバーくらいはローマ字表記にすべきだというInternet文化があるようですが、$etitという仕様はこの文化にお付き合いしたものです。しかし、$etit用のインデックスファイル第3フィールドにローマ字(英語)タイトルを入れるかどうかは、もちろん、ユーザーの自由です。なお、type=2の場合、$etitetitleオプションの内容(デフォルトは“Body Text”)に置き換えられます。また、目次ファイルの$etitは、ecntstrオプションの内容(デフォルトはcntstrオプションの内容。繰り返しになりますが、cntstrオプションのデフォルトは“Contents”です)に置き換えられます。
 $egtit$issueマクロもタイトルバーテキストで使うことを想定したものです。これらは、本文ファイルでも目次ファイルでもegtitleissueオプションの内容に置き換えられます。$egtitはオンラインブック全体の総合タイトル、$issueは雑誌などの号数を想定して用意したものですが、もちろん、どのような用途に使ってもかまいません。egtitleissueオプションのデフォルトは空文字列です。
 さて、ヘッダ、フッタファイルは目次ファイルでも共用されますが、マクロのなかで目次ページでも役に立つのは$etit、$egtit、$issueだけです。そこで、目次ページでは、$etit以外のマクロが含まれているは読み飛ばされます。つまり、マクロの部分だけではなく、行全体が消えてしまうのです。そのため、ヘッダ、フッタを書くときには、ちょっとパズルめいた作業が必要になります。たとえば、次のフッタの例を見てください。

<HR><font size="1">
<I>
<A HREF="../index.html">ホームページ</A>
|<A HREF="$contents">目次|</A>
$all_o
<HR>
mail: <A HREF="mailto:nyagao@aplabs.co.jp">nyagao@aplabs.co.jp</a>
</I></font>
</BODY>
</HTML>

sep_all_oを“|”にした場合、本文ページでは、“ホームページ|目次|ページ1|ページ2|...”という形式で表示され、目次ページでは“ホームページ”とだけ表示されます。“ホームページ”というテキストと“目次”というテキストを区切る“|”をどちらの行に入れるかがミソです。
 最後に中仕切りファイルについて一言。中仕切りファイルは、2つのソーステキストファイルの間に挿入されるという表現には曖昧なところがあります。正確に言うと、デフォルトでは個々のソーステキストファイルの直前に挿入されます。中仕切りファイルに$prev*_i、$next*_iを入れた場合のことを考えてみてください。ファイルの直後に中仕切りファイルを挿入すると、nextはすぐ下を指すだけで無意味ですし、prevは2つ前を指すような感じを与えます。それよりは、中仕切りファイルから見て、テキスト1つ分ずつ前後を指した方が便利でしょう。なお、ページの冒頭は、ヘッダ、中仕切り、テキストという順番になります。type 1のように、1つのテキストから1ページを作る場合などは、この中仕切りは邪魔になることがあるでしょう(特にファイル名を指定しなければ中仕切りファイルは挿入されませんが)。このようなときには、midtypeオプションとして0を指定してください。この場合、最初のテキストの手前には、中仕切りは挿入されなくなりますが、2つ目以降のテキストの手前には、通常通り中仕切りが挿入されます。midtypeオプションのデフォルトは1です。

ホームページ|目次|クイックガイド|イントロダクション|チュートリアル: 初級篇|チュートリアル: 中級篇|チュートリアル: 上級篇|付録|その他
ヘッダとフッタ-本文ファイル-目次ファイル-インデックスファイルの自動生成

ソーステキストファイルと本文ファイル



 本文ファイルは、ソーステキストファイルに前節で説明したヘッダ、フッタ、中仕切りファイルを挿入して作成されます。本節では、ソーステキストファイルと本文ファイルの関係について説明します。つまり、本節ではg_bodyのみを取り上げ、g_cntsは取り上げません。逆に、目次ファイルについて説明する次節では、g_cntsのみを取り上げ、g_bodyについては取り上げません。
 クイックガイドでも説明しましたが、ソーステキストファイルは、通常のテキストファイルでかまいませんが、タイトルと本文の間に空行を1つ挿入する必要があります。タイトルは複数の行にまたがっていてもかまいません。このような処理をしているのは、タイトルには副題などがついている場合があり、必ずしも1行で終わるとは限らないからです。なお、先頭行が空行になっている場合には、その空行がタイトル行と見なされてしまいます。
 g_bodyは、一度ソーステキストを最初から最後まで読んで、タイトル部分の行を覚えてから前後にHTMLタグで装飾を付けます。この装飾は、sur_titend_titで指定できます。
 sur_titは、<B>、<H1>など、</何とか>というタグで打ち消す必要のあるタグを挿入するためのオプションです。<B>、<H1 ALIGN="RIGHT">など、“/”なしのタグを指定すれば、perlスクリプトが自動的に</B>、</H1>などのタグを作ってタイトル部の末尾に付加します。デフォルトは空文字列です。
 end_titは、<HR>、<BR>など、</何とか>を使わないタグを指定するためのオプションで、指定されたタグはタイトル部の末尾にsur_titの打ち消しタグに続いて挿入されます。<IMG SRC="foo.gif”>のようなものを指定すれば、グラフィックデータを挿入することもできます。このオプションデフォルトは空文字列です。
 なお、タイトルは、本文ファイル(インデックスファイルの第1フィールドで指定されたファイル)の最初の空行までに書かれている内容で、インデックスフィールドの第2、第3フィールドの内容ではありません。両者がたまたま同じならヘッダ、フッタなどの$all、$prev_oなどや目次ページと本文とで同じものがタイトルとして表示されますが、違っていれば両者の間にずれが生じます。
 残りの部分は本文として扱われます。本文全体も、sur_bdyオプションで指定されたタグで囲むことができます。たとえば、<B>、<FONT SIZE="4">、<CENTER>(あとの2つはNetscape専用タグですが)などです。
 本文内の改行の位置には、自動的に<BR>タグが追加されます。HTMLファイル内の改行は、ブラウザの表示では無視されてしまいますから、この<BR>タグの自動付加はただのテキストファイルをHTMLファイルに変換する上で重要な意味を持っています。
 しかし、本文ファイルには一切タグを入れてはならないというわけではありません。詩のようなものなら、タグは不要でしょうが、このマニュアルのようなものはタグが必要ですし、それらを自動的に付加できるほど、OLBCKは賢くありません(少なくとも、このタイプのプログラムで自動処理するときには、タグが必要なところには何らかのマーキングが必要です)。それでも、OLBCKは改行の位置には<BR>タグを付加しようとしますので、OLBCKを使うときには、<BR>タグについては忘れることができます。
 しかし、タグのなかには自動改行の意味を持っているものもあります。そこで、現在のところ、<DL*>、</DL>、<DT>、<DD>、<UL>、</UL>、<OL>、</OL>、<DIR>、</DIR>、<MENU>、</MENU>、<LI*>、<TABLE*>、</TABLE>、<TR>、<TH*>、</TH>、<TD*>、</TD>、<HR*>、<Hd>、</Hd>(dは数字)、<P*>、<BR>タグ(小文字も可)が含まれている行と<PRE>から</PRE>までの間の行には<BR>を付加しないようにしています(<BR>を付加すべきでないほかのタグがありましたら教えてください)。また、sup_brオプションを1にすると、<BR>は一切付加されません(デフォルトは0)。
 元ファイルがプレーンテキストでタグが含まれていない場合でも、<、>などがテキストに含まれていると、それらはタグと間違われて表示されない可能性があります。そこで、notagオプションというものが用意されています。notagがデフォルトの0になっている場合、<、>、&、"は、&lt;、&gt;、&amp;、&quot;に変換されます。タグを埋め込む場合には、かならずnotag1にしてください。
 ソーステキストファイルでも、擬似マクロを1つだけ使うことができます。 "<ファイル名>"という形式のものをソーステキストに埋め込んでおくと、その位置に<ファイル名>で指定されたファイルが読み込まれて、本文ファイル内に挿入されます。ただし、$の前に'が含まれている場合には、 "<ファイル名>"という形のものがそのまま本文ファイルに書き込まれます。また、1行に2つの$includeが含まれている場合、2つ目のものは変換されませんが、これで困ることはまずないと思います。$includeでインクルードされたファイルの行末には<BR>は付加されません。この機能は、g_cntsで作成したリストを本文ファイルに埋め込みたい場合などに使うことを想定したものです。g_cntsにもbaseオプションというものがありますが、baseを使った場合には、地のテキストに1つのリストしか挿入できません。そこで、ver.0.91を公開したあとで、この機能を追加しました。
 本文ファイルのファイル名は、type=1の場合には、インデックスファイル第1フィールドのファイル名の拡張子をhtml(正確に言うと、extオプションで指定された拡張子)に置き換えたものになります。type=2の場合には、bodyオプションで指定したファイル名(0.91では拡張子の操作をしていましたが、現在のバージョンでは拡張子の操作はしません)になります(デフォルトはbody.html)。extオプションについては、こちらを参照してください。

ホームページ|目次|クイックガイド|イントロダクション|チュートリアル: 初級篇|チュートリアル: 中級篇|チュートリアル: 上級篇|付録|その他
ヘッダとフッタ-本文ファイル-目次ファイル-インデックスファイルの自動生成

目次ファイル



 本節では、前節とは異なり、主としてg_cntsの動作とg_cntsが生成する目次ファイルについて説明します。g_bodyの動作とg_bodyが生成する本文ファイルについては前節を参照してください。
 目次ファイルは、本文ファイルを使わず、インデックスファイルの内容をベースに作成されます。もちろん、ヘッダ、フッタファイルも使われますし、設定ファイルの設定も使われます。設定のなかには、本文ファイルの作成でも使われるものもありますし、目次ファイルだけで使われるものもあります。
 目次ファイルのタイトルは、cntstrオプションの文字列とsur_titend_titオプションの内容によって自動的に生成されます。しかし、本文中のリンクとして使われるcntstrは単純に“目次”と指定しておきたいが、目次ファイルでは“Absolute BAKA 目次”のように指定したいという場合もあるでしょう。そのような場合は、目次タイトルの方をcnttitオプションで指定してください。cnttitのデフォルトはcntstrの内容です。また、ヘッダの$etitも同様に、デフォルトがcntstrの内容となっているecntstrオプションで指定します。なお、タイトルに対する装飾は、sur_c_tit(デフォルトはsur_titの内容)、end_c_tit(デフォルトはend_titの内容)オプションで指定します。つまり、放っておけば本文ファイルと同じ形で装飾されますが、本文ファイルとは異なる外観を与えることもできるわけです。
 目次本体は、全体の冒頭にlststrオプション、個々のアイテムの冒頭にitmstrオプションの内容を挿入した形で作成されます。lststrに<UL>、<OL>、<DL>など、itmstrに<LI>、<DT><DD><IMG SRC="***">などを指定すれば、リスト表示が得られます。なお、目次の個々の項目の末尾には、lststrオプションが空文字列の場合に限り、<BR>が付加されますが、本文ファイルの場合と同様にsup_brオプションを1にすれば<BR>の付加を禁止できます。
 目次本体の全体は、sur_c_bdyオプション(デフォルトはsur_bdyの内容)のタグによって囲まれます。また、目次の個々の行はsur_c_itmオプションの内容に囲まれ、冒頭にsta_c_itmオプションの内容、末尾にend_c_itmオプションの内容が付加されます。これらの*_c_itmオプションのデフォルトはすべて空文字列です。
 さて以上のような目次ページは、タイトルと項目リストがあるだけでちょっと寂しい感じがします。そこで、非常にad hocな機能として、ベースファイル機能というものを用意しました。ベースファイルは、baseオプション(デフォルトは空文字列。空文字列の場合には先ほど説明した手順で単純なタイトル行を作ります)で指定されるファイルで、内容はヘッダ、フッタ、リストを取り除いたHTMLファイルという感じのものですが、リストを挿入すべき場所を指定する$includeという擬似マクロを指定できます(その後、ソーステキストに付加した$includeマクロとは異なり、ファイル名を指定できないことに注意してください。baseはg_cntsのオプションなので、$includeの対象はg_cntsの出力に限られてしまうわけです)。g_cntsは、このファイルにたいしては<BR>の追加など、“親切な”処理は一切行いません。単純に$includeの位置に目次リストを挿入するだけです。ベースファイルを指定した場合には、cnttitも使われませんので、タイトル的なものを付けたければベースファイルのなかで直接書く必要があります。
 目次ファイルでも、本文ファイルと同様に、sup_hfオプションを1にすれば、ヘッダ、フッタは使われません。さらに、cnttitによるタイトルも付加されません。ただし、baseが指定されている場合、ベースファイルは挿入されます。ややこしいことをしていますが、type=2で作成した長いHTMLファイルの冒頭に目次を付加したいときのことを考えるとこれが好都合なのです。まず、baseが指定されているconfig.datを作ります。次に、copyコマンドなどでindex.datとまったく同じindex2.datファイルを作ってから、その1行目に

index.htm:目次:目次

を付加します。そして、

call g_cnts "type=2" "sup_hf=1" "base=ab.bse"
call g_body long.cfg "index=index2.dat" "type=2" "contents=body.html" "middle=pn_i.mdl" "notag[1]=0"


という内容のバッチファイルを作って実行します(バッチにしなくてもかまいませんが、繰り返し実行する可能性が高いので、しておけば何かと楽です)。生成されたbody.htmlは次のようなものになっているはずです。

[一体型ファイル]

目次ファイルについては、中級篇の目次の階層化でも再び説明しますので、ここで説明されている以上のことをしたい方は参照してみてください。

ホームページ|目次|クイックガイド|イントロダクション|チュートリアル: 初級篇|チュートリアル: 中級篇|チュートリアル: 上級篇|付録|その他
ヘッダとフッタ-本文ファイル-目次ファイル-インデックスファイルの自動生成

インデックスファイルの自動生成



 初級篇の最後に、インデックスファイルを自動生成する方法について説明しておきましょう。ファイルの数が4、5個くらいまでなら、インデックスファイルの作成もそれほど面倒な仕事ではありませんが、10個を超えると非常に面倒になります。しかし、インデックスファイルは、ページの前後を規定するものですから、闇雲にファイルをリストアップすればよいというものではありません。インデックスファイル自体には、ファイル名が特定の規則に従っていなければならないという理由はありませんが、インデックスファイルの自動生成のためには、ある規則に従ってファイル名を付けていただく必要があります。
 その規則とは、
同じ桁数(1桁から4桁)で1から順番に数字が入っていること。2桁なら01、02、03、04、...3桁なら001、002、003、...という形です。
数字の前後に文字列が入っている場合には、それらの文字列がすべてのファイルで共通していること
拡張子が同じになっていること
の3つです。たとえば、ab001.txt、ab002.txt...というファイルは、この3条件を満たします。この3つの条件が揃っていて、タイトルと本文の間に空行が入っていれば(本文ファイルを生成できる形のテキストファイルになっていれば)、g_ind.bat(MS-DOSの場合、Macintoshではg_ind.scriptまたはg_ind.pl、UNIXではg_ind)というperlスクリプトを使ってインデックスファイルを自動生成できます。
 g_indのオプションは、次の6つです。

オプション 意味
out出力ファイル名。デフォルトは標準出力
digits数字の桁数。デフォルトは2
extファイルの拡張子。デフォルトはTXT
prefix数字の前の共通文字列。デフォルトは空文字列
suffix数字の後の共通文字列。デフォルトは空文字列
ath_enbl著者名を有効にするかどうかのフラグ。デフォルトは0。これについては中級篇の“著者名”を参照してください

例によって、オプションはdigits=3のような形式で指定します(=の両側にスペースをはさまないこと。また、環境に合わせて適当に""で囲むこと)。たとえば次のようにして実行すると、

g_ind "prefix=ab" "digits=3" "out=index.dat"

先ほどのab001.txt、ab002.txt、...というファイル群に対応するインデックスファイル、index.datが作成されます。なお、g_ind.batは、標準エラー出力に

ab001.txt was processed
ab002.txt was processed
ab003.txt was processed


といううるさいメッセージを出力します。
 タイトルの判定は、g_bodyと同じ方法で行います。複数行にまたがるタイトルは改行を取り除いた形で取り込まれます。“クイックガイド”で示したインデックスファイルの例とは異なり、第3フィールドのあとに“:”が3つ追加されていますが、これらは中級篇以降で使うフィールドのためのものです。初級篇を超える機能を使う場合(いや、たいした機能ではないんですけれども)には、これらのフィールドを手で調整していただく必要がありますが、ここまでで説明した機能だけで満足できる場合には気にする必要はありません。
 要するにg_indはちょっとした気休めに過ぎません。最初から上の3つのルールに従ってファイルを作っていればともかく、そうでない名前のファイルしかないときには、いちいちファイル名を変えるよりも、最初から手で作った方が早いでしょう。インデックスファイルを作るのが面倒だというのは、OLBCKの最大の弱点です。しかし、たとえばインデックスファイルの行を入れ替えて、g_body、g_cntsを再実行すれば、前後のページへのリンクや目次は一瞬のうちに更新されます。OLBCKの最大の長所の1つは、インデックスファイル(あるいは設定ファイル、ヘッダファイルなど)を変えるだけで、一度作ってしまったファイルを簡単に更新できるところにあります。
 最後にインデックスファイルについて若干説明を補っておきます。インデックスファイルのフィールドが“:”によって区切られることは再三説明してきましたが、“:”という文字は、タイトルなどでよく使われます。しかし、タイトルとして“BAKA:マルチメディア”というようなものを指定しようとすると、BAKA”で1フィールド、マルチメディア”で1フィールドと見なされてしまいます。これではまずいので、タイトルなどの一部として:を使いたいときには、前に'を追加して、':と書くようにしてください。これは設定ファイルで#を使いたいときと同じですし、実際、インデックスファイルでも、#以下はコメントとして扱われます。また、行頭、行末、:の前後のスペース、タブも、設定ファイルと同様に取り除かれます。

ホームページ |目次| クイックガイド|イントロダクション|チュートリアル: 初級篇|チュートリアル: 中級篇|チュートリアル: 上級篇|付録|その他
ヘッダとフッタ-本文ファイル-目次ファイル-インデックスファイルの自動生成
mail: nyagao@longtail.co.jp