___ Region Oriented Ascii Processor [USAGE] ___
使い方
======
シェル上で以下のように打鍵すると、処理されたデータが標準出力に出力される。
$ roap.py スクリプトファイル 入力ファイル
スクリプトファイルについて
==========================
スクリプトファイルは、XMLで記述され、
記述された正規表現のマッチング処理をしながら、外部プロセッサを呼び出していく。
例えば、ある定型フォーマット(例えば、見出しにはテキストの次の行を`='で埋める
という決まりがあるとする)をHTMLへ変換したい場合は、見出しとして認識されるように
フォーマット認識ファイルに書いてやり、認識されたテキストを外部のツール
(python、perl、sed、awk、などで書かれてるようなスクリプトなど)を起動して
標準入力へ渡し、返って来る標準出力を受ける。これを繰り返すことで、
フォーマットが変換されていく。
領域の定義
----------
ルート要素をroapとして、次のように認識する領域を設定する。
regex text
regex text
...
どの外部プロセッサにかければ良いかを判断するために、マッチング処理を行う。
region要素にはそれぞれ外部プロセッサを指定しておく。
match要素には正規表現を含んだ文字列と、適用される行数(range属性)を指定する。
また、「*」なら、0行以上、「+」なら1行以上のマッチング指定となる。
極端な例
--------
以下の例では、全ての領域をcatにフィルタする。
.*
このファイル自身(USAGE.ja)を入力ファイルとし、
前述のスクリプトを書いたテキストファイルをcat.xmlとすると、
以下のようなコマンドを打鍵することになる。
$ roap.py cat.xml USAGE.ja
実行するとわかるとおもうが、空行が詰められて出力されているのがわかるはずだ。
つまり、空行を区切りとして認識しているので、空行そのものは出力されない。
基本的な例
----------
さっきの例では実用的な使い方とは言い難いので、もうすこし使えそうな例を示す。
\s+___ .* ___
.*
=+
.*
-+
.*
o .*
.*
このスクリプトでは、5つの領域を定義している。これらの正規表現は、
この文書を処理することができるようになっている。
そしてこれらを実際に処理するものはPythonのスクリプトである。
実際の内容はexamplesディレクトリにあるサンプルコードを眺めて欲しい。
大事なこと
----------
region要素の並べ方に注目してもらうと分かるかもしれないが、
ある一定の決まりがある。それは、下の方に行くほど、
マッチングのパターン定義が曖昧になる傾向があるということだ。
これはどういうことかと言うと、roapは入力ファイルから領域を読みとって、
それをregion要素の一番上からマッチするかどうかを試していく。
全部試したところで、一つもマッチしなければ出力さえされないのである。
前述の例の最後にあるregion要素はどんな文字列が来てもマッチするので、
出力がされないということはない。
もし、このパターン定義が一番上(最初)に来ている場合は、
全て最初にマッチングしてしまうことになり、
それ以降のパターン定義は無視されるということになる。
その他思い付く使い方
====================
o データベースへの登録バッチ処理
o LaTeX、HTMLなどのマークアップ文書作成支援
バグ報告はurago@users.sourceforge.netへ。