OLBCK(イントロダクション)

ホームページ|目次|クイックガイド|イントロダクション|チュートリアル: 初級篇|チュートリアル: 中級篇|チュートリアル: 上級篇|付録|その他
基本コンセプト-動作の仕組み

基本コンセプト



 さて、テキストをHTML化するといっても、あまりにも漠然としています。ここでは、本キットがどのようなコンセプトでHTMLを生成するかを簡単に説明します。
 テキストエディタなどで書いたテキストファイルがあっても、それをホームページで公開するためにはさまざまなHTMLタグを付けなければなりません。先ほどの例は3篇しかありませんでしたが、数十篇になったら単調な作業をうんざりするほど繰り返さなければなります。しかし、単調な作業の繰り返しとは、まさにコンピュータにさせるべき仕事です。そういう仕事はコンピュータにさせて、書き手はテキストを書こうというのがOLBCKの第1の目標です。クイックガイドの項でも示したように、OLBCKを使えば、index.datというテキストファイルを作るだけで、元のテキストにはまったく手を触れずにHTMLファイルを作ることができます(“インデックスファイルの自動生成”でも示すように、詩のテキストファイルに名前を付けるときに一定のルールに従えば、index.datも自動的に作成できます)。
 しかし、HTMLファイルには、ただのテキストファイルにはないさまざまな情報が含まれています。たとえば、クイックガイドのサンプル詩集で作品タイトルと本文の間に横線が入っていたのにお気付きでしょうか。タイトルと本文の文字サイズも異なっています。しかし、横線などいらないという方もいらっしゃるでしょうし、タイトルをセンタリングしたいという方もいらっしゃるでしょう。ご安心ください。変えられます。そればかりでなく、背景、文字などの色もすべてのファイルで一斉に変更できますし、前後のページへのリンクの位置や表示方法も変えられます。これらのスタイルの変更にはhead.dat、foot.dat、config.datというまた別のファイルを使います。特にconfig.datは、head.dat、foot.dat、index.datとして利用するファイル名も指定できます(ですから、これからはヘッダ、フッタ、インデックスファイルと呼ぶことにしましょう)。そして、コマンド行パラメータを使えば、config.dat(設定ファイル)の名前さえ指定できます(次の“動作の仕組み”の節を参照してください)。本キットの第2の目標は、このような柔軟性です。次節からは、この第2の目標について詳しく説明することにします。ただし、あらかじめお断りしておきますが、カスタマイズのためには、HTMLについてのある程度の知識が必要です。

ホームページ|目次|クイックガイド|イントロダクション|チュートリアル: 初級篇|チュートリアル: 中級篇|チュートリアル: 上級篇|付録|その他
基本コンセプト-動作の仕組み

動作の仕組み



 ここでは、少し抽象的な話が続きますが、とにかくこの内容を話しておかないと、先に進めません。辛抱してついてきてください。
 まず、“クイックガイド”のg_short、g_longコマンドの仕組みを少し説明しておきます。MS-DOS版では、この2つは実際にはバッチファイルとなっています(Mac、UNIX版でも、同じ意味のAppleScriptプログラムやシェルスクリプトになっているだけで、していることは基本的に同じです)

C:>type g_short.bat
@echo off
call g_body "type=1" %1 %2 %3 %4 %5 %6 %7 %8 %9
call g_cnts "type=1" %1 %2 %3 %4 %5 %6 %7 %8 %9

C:>type g_long.bat
@echo off
call g_body "type=2" long.cfg %1 %2 %3 %4 %5 %6 %7 %8 %9
call g_cnts "type=2" %1 %2 %3 %4 %5 %6 %7 %8 %9


 %1〜%9は、コマンド行で指定されたパラメータを示すためのバッチファイル固有の記法です。そして、call文が使われていることからもわかるように、g_body、g_cntsもバッチファイルですが、g_body.batとg_cnts.batは、実際にはperlのスクリプトともなっています。詳しく説明するとややこしくなりますが(「ntperlについての注意事項」)、perlには、前後の指定された部分を無視する機能があります。その無視される部分にバッチコマンドを入れ、perlスクリプトの部分をcommand.comに解釈させないように、バッチファイルのgoto文で飛び越すようにすれば、同じファイルをまずバッチファイルとして使い、次にperlスクリプトとして使うということができます(これは、わからなくてもかまわない話なので、わからなくてもそのまま読み飛ばしてください。また、バッチファイル兼用perlスクリプトというものを使っているのは、ntperlの奇妙な挙動を回避するための奥の手であり、Mac、UNIX版では、この部分の話は完全に無視できます)。なお、これらのスクリプトバッチファイルを単独で実行する場合には、

C:>g_cnts "type=1"

のようにcallを付ける必要はありません。また、これらのスクリプトファイルは、次のような形でも実行できます(この場合、拡張子の.batは省略できません。かならず付けて実行してください)。

C:>perl -Sx g_cnts.bat type=1

 さて、これらのスクリプトは、オプションを指定することによって動作を変えることができます。たとえば、上記のjperlコマンド行のなかに

type=1

という部分が含まれていますが、このtype=1がオプションの例です。g_cnts.batは、type=1を指定すれば短い無数のHTMLファイルのための目次を出力しますが、type=2を指定すると長い1つのHTMLファイル用の目次を出力するように動作が変わるのです。
 2つのスクリプトで指定できるオプションは、かなり共通しています。それぞれのスクリプトは、自分が使うオプションについてはかならずデフォルトの値を用意しています。このデフォルトを変えたいときには、設定ファイル(config.dat)を使います。先ほどのサンプルが使っていたconfig.datの内容はたとえば次のようになっています。

body = ab.html
cntstr = 目次                # 目次ページ表示文字列
sur_tit = <h2><b>            # タイトルのまわりの修飾
end_tit = <hr>               # タイトルのうしろの修飾
lststr = <UL>                # 目次用タグ
itmstr = <LI>                # 目次アイテム用タグ
sep_all_o = |                # $all_o用セパレータ
sep_all_i = |                # $all_i用セパレータ

どれも<オプション名> = <値>という形式になっていることに注意してください。#以下は(正確に言うと、#の手前のタブとスペースも)無視されますので、コメントを入れることができます。ただし、オプションの値の一部として#を使いたい場合には、'#のように'を付けてください。#に限らず、'が付けられている文字は、'を取り除いた文字そのものとして扱われます。ですから、オプションの値の一部として'を使いたい場合には、''としてください。なお、オプション名と=の間のスペース、タブ、=と値の間のスペース、タブも無視されます。
 さて、これらのオプションはすべてコマンド行でも指定できます。コマンド行で指定するときには、かならず<オプション名>=<値>というように=の左右にスペースを入れないようにしてください。また、MS-DOS版のバッチファイル(g_body、g_cntsなど)に“=”付きのオプションを指定するときには、オプション全体を""で囲む必要があります。囲まないと、“=”は取り除かれてしまうのです。g_short、g_cntsなどのバッチファイルに渡されている“=”付きオプションが""で囲まれているのはそのためです(なお、Windows 3.1のDOSボックスでは、""で囲んでいても“=”は取り除かれてしまいます。Windows 95以前のMS-DOSでは、設定ファイル名以外のものをコマンド行で指定するのは不可能だと考えてください)。逆に、複数のオプションを一対の""で囲むことも避けてください。""で囲んだもの全体が1つのオプションと見なされてしまいます。さらに、バッチファイルを使わない場合でも、<、>、|など、コマンド行で特別な意味を持つ文字を使う場合には、""で囲む必要があります(これはUNIX版でも同様です。Mac版でもlststr=<DL COMPACT>のようにスペースを含むオプションを指定するときには。""で囲んでください)。
 コマンド行で指定されたオプションは、config.datの指定よりも優先されます。つまり、デフォルト<設定ファイル<コマンド行という力関係があるわけです。
 コマンド行では、設定ファイル名も指定できます。=の含まれていないコマンド行パラメータは設定ファイル名と見なされます(=の含まれていないコマンド行パラメータが複数ある場合には、最後に指定されたものが設定ファイル名と見なされます)。たとえば、

C:>g_body config2.dat

のように指定すれば、config.datではなく、config2.datの内容を使ってスクリプトを制御することができます(なお、“=”が含まれていないので、このオプションは""なしで指定できます)。
 この方式のオプションには、ちょっとした問題があります。存在しないオプションを指定しても、g_bodyやg_cntsはエラーメッセージを生成しないのです。存在しないオプションは単純に無視されます。しかし、ちょっとしたスペルミスなどは、誰でもしてしまうことです。エラーメッセージが表示されないため、スペルミスをした本人はスペルミスに気付かず、しかし、g_bodyやg_cntsは期待通りに動いてくれないので、大変イライラすることでしょう。このような場合には、まずオプションが正しく指定されているかどうかをチェックしてください。オプションはすべて小文字で指定するようになっており、大文字になっているだけでも正しく認識されません。しかし、上級篇で触れる機能を実現するためには、存在しないオプションに対してエラーメッセージを表示することができない仕組みになっています。そういうわけで、今後とも、オプションのエラーチェックを実行する予定はありません。
 ややこしい話が続いて申し訳ありませんでした。こんなこといちいち覚えてられないよという方は、
OLBCKの動作は設定ファイルで変えられる
設定ファイルでは、“<オプション名>=<値>”という形式でオプションを指定する
設定ファイル名は、コマンド行オプションとして指定できる
という3点だけを覚えておいてください。

ホームページ |目次| クイックガイド|イントロダクション|チュートリアル: 初級篇|チュートリアル: 中級篇|チュートリアル: 上級篇|付録|その他
基本コンセプト-動作の仕組み
mail: nyagao@longtail.co.jp