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

ホームページ|目次|クイックガイド|イントロダクション|チュートリアル: 初級篇|チュートリアル: 中級篇|チュートリアル: 上級篇|付録|その他
環境変数OLBCK-拡張子の設定-フレーム機能の活用-著者名の表示-目次の階層化

環境変数OLBCK



 OLBCKでHTMLファイルを作成するために使う入力テキスト、インデックス、ヘッダ、フッタ、中仕切り、ベース、設定ファイルのうち、ヘッダ、フッタ、中仕切り、ベース、設定ファイルは、複数のプロジェクトで共通に使えるという性質を持っています。それに対して、入力テキスト、インデックスファイルは、個々のプロジェクトに固有なファイルです。
 この共通に使えるファイルをプロジェクトごとにあっちのディレクトリ、こっちのディレクトリにコピーするのはムダというものでしょう。そこで、g_bodyg_cntsは、環境変数OLBCKで指定されたディレクトリを覗くことができるようになっています。この機能を利用すれば、さまざまなヘッダ、フッタファイルを1つのディレクトリに集めて繰り返し使うことができます。なお、環境変数はOLBCKの機能ではありませんので、詳細については次のページを参照してください。

[環境変数ってなに?]

 環境変数OLBCKの設定方法は、環境変数PATHの設定方法と同じです。MS-DOSの場合、PATHには

C:>PATH=C:\WINDOWS;C:\WINDOWS\COMMAND;C:\WINDOWS\SYSTEM;C:\BIN

のような設定方法もありますが、OLBCKはPATHのようにシステムと密接な関係を持つものではありませんので、SET文を使う必要があります。たとえば、C:\OLBCKとC:\ETC\OLBCKの2つのディレクトリを指定する場合には、次のようになります。

C:>SET OLBCK=C:\OLBCK;C:\ETC\OLBCK

 Macintoshには環境変数という概念はありませんが、AppleScriptでMacPerl 5を制御する場合には、環境変数をエミュレートして渡すことができます。そこで、付属のAppleScriptファイルは、ダイアログボックスを使ってOLBCKファイルが格納されているフォルダを問い合わせ、そのフォルダをg_body.pl、g_cnts.plに渡しています。ダイアログで1つのフォルダを指定する関係から、Mac版のOLBCKフォルダは1つだけに制限されます。
 環境変数OLBCKが設定されている場合でも、それらが指すディレクトリより、カレントディレクトリのファイルの方が優先して使われます(Mac版の場合は、ダイアログで指定したOLBCKフォルダよりも、別のダイアログで指定したソーステキストファイルフォルダの方が優先されます)。また、環境変数OLBCKが複数のディレクトリを参照している場合には、先に指定されたディレクトリの方が優先されます。たとえば、設定ファイルとしてconfig.datを使うものとして、config.datという名前のファイルがC:\OLBCKディレクトリとカレントディレクトリの両方にあれば、カレントディレクトリのconfig.datが使われます。カレントディレクトリにはなく、C:\OLBCKとC:\ETC\OLBCKにある場合には、C:\OLBCKに格納されているファイルが使われます(先ほどの設定の場合)。そして、このconfig.datがヘッダファイルとしてhead2.datを指定している場合、head2.datがカレントディレクトリとOLBCKディレクトリの両方にあれば、カレントディレクトリのhead2.datが使われます。いつも使っている設定ファイルと少し違うものを試してみたい場合には、カレントディレクトリにOLBCKの設定ファイルをコピーして、変更を加え、いつもと同じコマンド行でスクリプトを実行してみればよいわけです。

ホームページ|目次|クイックガイド|イントロダクション|チュートリアル: 初級篇|チュートリアル: 中級篇|チュートリアル: 上級篇|付録|その他
環境変数OLBCK-拡張子の設定-フレーム機能の活用-著者名の表示-目次の階層化

拡張子の設定



 すでに説明したように、type=2が指定されていなければ、g_bodyはインデックスファイルの第1フィールドで指定されたファイルから拡張子を取り除き(拡張子が付けられていない場合にはそのまま)、拡張子htmlを付けます。g_cntsが作成する目次ファイルも、g_bodyが生成したファイルを参照するわけですから、g_cntsもインデックスファイルの第1フィールドの内容にg_bodyとまったく同じ操作を施して、参照のためのタグを生成します(0.91の場合には、長いファイル名がサポートされる以前のMS-DOSで動作するjperlをターゲットとしていましたので、MS-DOS版で付加される拡張子はhtmlではなく、htmでしたが、今度のバージョンからはMS-DOS版のメインターゲットをWindows NT用のntperl 5にしましたので、MS-DOS、Mac、UNIXのどのバージョンでも、htmlが使われます)。この付加される拡張子は、実際には変更できます。変更したい場合には、extオプションを使います。つまり、htmlという拡張子は、extオプションのデフォルトだったわけです。
 さて、g_cntsは、オンラインブックの作成という当初の目的を離れて、単純にリスト形式のページ(あるいはページの部分)を作成したいときに一般的に利用できます。しかし、リストアイテムの参照先が常にhtmlファイルだとは限りません。たとえば、.movファイルのようなバイナリファイルを直接参照するようなアイテムを含めたい場合もあるでしょう(私のホームページもそのような形になっていますが)。このような場合、インデックスファイルの第1フィールドのファイル名が一律に変更されてしまうのは迷惑です。このようなときのためのオプションも実は用意してあります。しかし、そのためには、上級篇の“カテゴリ”の内容を理解していただく必要があります。問題のオプションについても“カテゴリ”の節で説明しますので、興味のある方は参照してください。

ホームページ|目次|クイックガイド|イントロダクション|チュートリアル: 初級篇|チュートリアル: 中級篇|チュートリアル: 上級篇|付録|その他
環境変数OLBCK-拡張子の設定-フレーム機能の活用-著者名の表示-目次の階層化

Netscape 2.0のフレーム機能を活用するために



 周知の通り、Netscape 2.0には、ウィンドウをフレームと呼ばれる小ウィンドウに分割し、複数のHTMLファイルを同時に表示する機能があります。たとえば、ウィンドウを左右に分割して左半分に目次を表示し、右半分に本文を表示することができるわけです。1つのフレーム対応ウィンドウを表示するためには、フレームの定義のためのHTMLファイルと個々のフレームのためのHTMLファイルが必要です。OLBCKには、ウィンドウを左右に分割するフレーム定義HTMLが添付されています(nt2.html。ver.0.91では添付するのを忘れてしまいました。申し訳ありません)。
 フレーム機能を使った場合、<a>タグにtarget="..."というオプションを付けて出力先のフレームを指定します。フレームの名前は、フレーム定義HTMLの<frame>タグのname="..."オプションで指定します(<frame>には、フレームに最初に表示すべきHTMLファイルを指定するためのsrc="..."オプションもあります)。target="..."オプションのない<a>タグは、同じフレームに新しいHTMLファイルを表示します。
 以上からもわかるように、目次ファイルから別のフレームに本文ファイルを表示したい場合には、target="..."オプションを指定しなければなりません。そこで、OLBCKでは、設定ファイルでtargetオプションを指定すれば、g_cntsが生成する目次ファイルの<A>タグにtarget="..."オプションが自動的に付けられるようになっています。OLBCKのtargetオプションの内容が<A>タグのtarget="..."の...の部分に収まるわけです。
 逆に、本文ファイルの方は、$all_*$prev_*といったものを指定してほかの本文ファイルや同じファイルのなかにリンクを張る必要はなくなるでしょう(張っても、同じフレームに表示するだけなら何の問題もありません)。しかし、まったく別のページに対するリンクを張る場合には<A>タグのtarget=...オプションでこまめにターゲットウィンドウを指定しなければなりません。target=...を忘れたばかりに、同じフレームのなかに外部ページが表示されたりするのは、かっこ悪いものです(ちなみに、フレームなしのウィンドウに新しいページを表示したい場合には、target="_top"と指定します)。
 フレーム機能は、目次と本文というような関係の2つのHTMLファイルを表示するときには確かに便利ですが、ページが細分化される分、醜くもなります。そこで、同じ内容について、フレーム機能を使うページとそうでないページの両方を用意しているサイトもあるようです(私も実はそうしていますが)。このようなとき、同じ本文ファイルから違う名前のHTMLファイルを2つ作らなければならない場合があります。たとえば、フレーム機能を使うときには前後のページへのリンクのないページを使い、フレーム機能を使わないときには前後のページへのリンクを持つページを使うようなケースです。そのようなときには、suffixオプションを使うと便利です。たとえば、suffixとしてaを指定すると、a001.txtからa001a.htmla002.txtからa002a.htmlというように、拡張子の手前にaが挿入されます。もちろん、出力されるファイル名だけではなく、リンクとして埋め込まれるファイル名にもaは挿入されますので、リンクがずれることはありません。suffixのデフォルトは、当然空文字列です。
 このように2種類のHTMLファイルを使い分けるときには、<A>タグのtarget=...にも注意が必要です。“_top”のようにシステムで定義されている名前なら問題はありませんが、フレーム機能を使っていないページからユーザーの側で定義した名前をターゲットとしてジャンプすると、突然新しいウィンドウが作成されてしまいます。そこで、g_bodyは、targetオプションが空文字列になっている場合には、入力ファイルのtarget="..."という部分を取り除きます。フレーム機能を使わないけれども、target="..."を取り除かれても困るという場合には、あまり美しくない方法ですが、targetオプションとして_topを指定してください。

ホームページ|目次|クイックガイド|イントロダクション|チュートリアル: 初級篇|チュートリアル: 中級篇|チュートリアル: 上級篇|付録|その他
環境変数OLBCK-拡張子の設定-フレーム機能の活用-著者名の表示-目次の階層化

著者名の表示



 本はともかく、雑誌の場合には、タイトルのあとに著者名が続くのが普通です。そこで、OLBCKでも、著者名の表示に対応することにしました。しかし、OLBCKには、テキストのなかに著者名が含まれているかどうかはわかりません。そこで、この機能を使うときには、ath_enblオプションとして1を指定し、このテキストには著者名が含まれているのだということをOLBCKに教えてやってください。ath_enblのデフォルトは0です。
 ath_enblが1になっている場合、g_bodyは1行目から最初の空行までをタイトル、そこから次の空行までを著者名とみなします。ここまでは、タイトルの処理とよく似ていますが、著者名の場合は、この2つ目のブロックに含まれているテキストを完全に読み飛ばし、インデックスファイルに書かれている著者名をHTMLファイルに埋め込んでいくところが異なります。
 しかし、今までに示したインデックスファイルには、著者名などどこにも含まれていません。いったいどこに著者名を書くというのでしょうか?
 実は、インデックスファイルの本当の形式は、次のようになっています。

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

 つまり、著者名の数だけ永遠に続く形式になっているわけです(新しいフィールドが必要になったときに困ってしまう形式でもありますが)。このうち、参照番号は“中くらいのサイズのファイル”、目次レベルは“目次の階層化”、カテゴリは“カテゴリ”の節で説明します。参照番号以下のフィールドはオプションであり、指定されていなければ該当する機能が使われない(正確に言えばデフォルトの設定が使われる)だけで、問題が起きることはありません。今までの説明でこれらのフィールドを無視してきたのはそのためです。
 さて、この著者名フィールドですが、g_indを実行するときに"ath_enbl=1"を指定すれば、漢字著者名の部分だけ自動生成することができます。インデックスファイルに正しく著者名をセットするためには、元のテキストファイルは次のような形式になっていなければなりません。

タイトル1行目
タイトル2行目
...
(空行)
著者1人目
著者2人目
...
(空行)
本文1行目


 そして、かな著者名の部分は、かならず手で入力しておいてください。ここが空フィールドになっていると、後ろを読まない場合があります。このかな著者名は、複数のインデックスファイルから著者別インデックスを作成するときに使います(この処理を行うスクリプトは近いうちにOLBCKに追加する予定です)。
 あとは、装飾です。タイトルのときと同様のsur_athend_athオプションのほか、複数の著者名を区切るためのsep_athオプションというものもあります。これらのデフォルトはすべて空文字列です。
 著者名は目次ファイルでも表示できます。しかし、著者名の表示という点では、目次ファイルと本文ファイルとで異なる扱いが必要になる場合があります。そこで、そのような場合にはath_c_enblオプションを指定します。1なら著者名を表示し、0なら表示しません。ath_c_enblのデフォルトは、ath_enblの内容です。
 著者名を表示するかどうかと、それをどのように表示するか(表示形態)はまた別の問題です。そして、タイトルの横に著者名を表示することの多い目次ファイルとタイトルとは別の行に著者名を表示することの多い本文ファイルとでは、基本的に表示形態は異なるものになるでしょう。そこで、目次ファイル用の装飾オプションは、本文ファイル用の装飾オプションとは切り分けられています。目次ファイルでは、sur_c_athend_c_athsep_c_athオプションを使います。さらに、目次ファイルには、sta_c_athというオプションもあります。目次ファイルでは、sur_c_athなどに自動改行の意味を持つタグを指定しない限り、タイトルと著者名は同じ行に続けて表示されます。そのため、そのまま放っておけば、タイトルと著者名がくっついてしまうのです。sta_c_athはタイトルと著者名を離すためのオプションです。どのような文字列でも指定できますが、HTMLファイルでは、タブ文字は無視されてしまいますし、スペースも1つにまとめられたり取り除かれたりしてしまいます。また、設定ファイル内のスペースやタブも、無視されてしまいます。そこで、日本語ページの場合は、全角スペースを使うとよいでしょう。全角スペースなら入れた数だけ隙間をいれることができます。また、sur_c_bdyオプションとして<PRE>を指定しておけば、sta_c_athオプションのスペースも生きるでしょう(さらに、あまり美しくないやり方ですが、<B> </B>というものを指定すれば、<PRE>や全角スペースを使わなくても、確実にスペースを挿入できます)。なお、sur_c_itmはタイトルと著者名の両方を囲み、end_c_itmは著者名の後ろに挿入されます。

ホームページ|目次|クイックガイド|イントロダクション|チュートリアル: 初級篇|チュートリアル: 中級篇|チュートリアル: 上級篇|付録|その他
環境変数OLBCK-拡張子の設定-フレーム機能の活用-著者名の表示-目次の階層化

目次の階層化



 今までの目次は、1レベルの単純なリストでした。簡単なドキュメントならこれでも充分役に立つかもしれませんが、一定の規模を越えるドキュメントでは、もっと複雑な目次が必要になるはずです。そのようなときには、インデックスファイルの目次レベルフィールドを使います。

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

 目次フィールドのデフォルトは、空文字列(0と同じ意味)です。1、2、3などの数字を指定すると、その数だけレベルが下になります。逆に-1を指定すれば、インデントレベルがまったくなくなります。たとえば、クイックガイドで示したインデックスファイルを次のように書き換えてみましょう。

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

このインデックスファイルからg_cntsで目次ファイルを生成すると、次のようなものができます。

[レベル付き目次]

 しかし、どのレベルでもリストの形が同じでは面白くありません。そこで、lststritmstrは、目次レベルごとに指定できるようになっています。この機能を使う場合、目次レベル1ならlststr(1)、目次レベル2ならlststr(2)のように()でレベルを囲む形のオプションを使います。たとえば、lststr(1)=<OL>とすれば、目次レベル0から目次レベル1に移る境界に<OL>、逆に目次レベル1から目次0に移る境界に</OL>が挿入されます。このような指定で目次ファイルを作成すると、次のようなものになります。

[レベルによってリストスタイルが異なる目次]

あるレベルのlststritmstrのデフォルトは直前のレベルのlststritmstrです。
 ところで、インデックスファイルの第1フィールドは空文字列にすることができます。第1フィールドが空文字列でも、第2フィールドの内容は目次ファイルに表示されますが、リンクは作成されません(ちょうどこのマニュアルの目次ページの“イントロダクション”、“チュートリアル: 初級篇”のように)。このようなエントリを使えば、わかりやすい階層構造を持つ目次を作ることができるでしょう。また、このマニュアルの変更履歴は、第1フィールドが空文字列のインデックスファイルから自動生成しています。第1フィールドが空文字列になっているエントリの使い方については、“中くらいのサイズのファイル”でも、取り上げます。

ホームページ |目次| クイックガイド|イントロダクション|チュートリアル: 初級篇|チュートリアル: 中級篇|チュートリアル: 上級篇|付録|その他
環境変数OLBCK-拡張子の設定-フレーム機能の活用-著者名の表示-目次の階層化
mail: nyagao@longtail.co.jp