uink version 0.0.2 Copyright (C) Katsuhiro Ueno 2000 Mar 13, 2000 $Id: README-uink,v 1.2 2000/06/16 08:45:38 katsu Exp $ == 1. uink とは? uink は、テキスト文書を整形するためのプリプロセッサ(?) です。 もはやプリプロセッサとは呼べないシロモノと化しているかもしれませんが、 プリプロセッサを意識して作ったのは確かです。 命令埋め込み型のプリプロセッサとは違い、実際の文書とは別に 「テンプレート」を用意し、それを各文書に適用することで 前処理や整形処理を行います。 複数のテキスト文書のフォーマットを統一するのに最適です。 反面、CGI 等の内容を動的に生成するような目的には向いていません。 文書の構造を表現することを重視した XML/SGML とは畑が異なります。 uink と XML/SGML をうまく組み合わせれば、XML/SGML で文書内容の 構造化を図りつつ uink で XML/SGML ソースの体裁を保つ、といった こともできそうです。 == 2. 必要なモノ (多分) ruby-1.4.3 以降 == 3. インストール方法 特になし。 uink のパーミッションや最初の一行を適当に変更して パスの通ったディレクトリに置くとかすれば OK です。 == 4. 開発動機 複数の文書を同じフォーマットに統一したい時ってよくあると思います。 例えば「ヘッダーやフッターを統一したい、さらには将来の変更にも 柔軟に対応したい」とか。こういう目的にはプリプロセッサを使ってやると 作業量も減って幸せになれるのですが、いくつかプリプロセッサを 物色しているうちに、疑問点や不満に思う点が出てきました。 例えば… 1. プリプロセッサの命令を覚えないと使えない。 これは当たり前 (^^;。しかし、個人ではいいとしても 複数人で文書を管理する時には問題になります。 プリプロセッサの使える人だけが作業するか、 全員がプリプロセッサの使い方を覚えないといけません。 2. プリプロセッサが無いと使えない。 これも当たり前なんですが(笑)、特にマイナーなものの場合は そのプリプロセッサが使える環境より使えない環境のほうが 圧倒的に多いはず。複数人の場合は作業できる人が限定されて、 1. と同じ理由でドツボ。 3. プリプロセッサ命令が埋めこまれていて見にくい (or 醜い)。 HTML 文書等のはっきり構造化された文書では プリプロセッサ命令によって構造が乱されてしまいます。 編集後、直に文法チェッカーにかけられなくて、やる気喪失。 ちゅーか、脇役に過ぎないはずなのに実際の文書の中身より しっかり自己主張するプリプロセッサ命令ってウザくない?(笑) 4. ソースと出力の同期を取る必要がある。 ソースをいくらいじってもプリプロセッサに通さなければ 意味がありません。つまり、どんな些細な変更でも いちいちプリプロセッサを起動しないと出力を確認できないわけです。 これが非常に面倒臭い。コンパイルは好きですか? 5. 出力のほうに変更が加えられても対応できない。 ソースに加えられた変更を出力に反映することはできても、 出力に加えられた変更をソースに反映することは困難です。 ソースと出力を管理する主体がそれぞれ異なる場合とかだと ひょっとするとヤバいかも。 …などなど。 既存のプリプロセッサは、このような問題点を抱えているものが ほとんどのように思いました。僕はこの問題のためにプリプロセッサを 使うのを渋っていたんですが、そうこうしているうち、ある日突然、 命令の埋め込みをやめればいいことに気づきました。 その考え方を少し発展させ、具体的にカタチにしたのが uink です。 従来の命令埋め込み型のプリプロセッサと違い、uink には 次のような特長があります。 1. 文書そのものは常に自己完結した形を保つ。 uink によって文書の一部が削られたり、補助情報を追加されたり といったことはありません。 uink を使うために命令を埋めこむ、といったこともありません。 文書は常に uink から独立した形を維持します。 おかげで、uink の使い方を知らなかろうが uink が 使えない環境であろうが、はたまた将来 uink を使うのを やめようが (^^;;; 全然問題無しです。 2. 出力をそのまま入力にできる。 ソースを uink に通して得られた出力は、そのままで uink 可読の形式になっています。 一旦出力を得られればソースは破棄しても構いません。 ソースと出力が区分されないので、ソースと出力の同期を 考える必要が無くなります。変更を加える対象は常に uink のソースです。 3. 出力フォーマットを細かく指定できる。 特に空白系は強いです。例えば、見出しの前の空行の数や インデントの深さ等を細かく制御することができます。 XML & XSL 程の自由度は無いにせよ、文書を全く別の フォーマットに変換することもできます。 さて、ここまで長々と開発動機なんかを書いてきたわけですけど、 ダラダラと長いのにはワケがあります。 こういった考え方や動作を簡潔に表す言葉が思いつかないんです (汗;; おかげで同種のプログラムが存在するかどうかを調べることが できないばかりか、スクラッチするにしろプログラム名をどうするか 非常に悩みました。 ワケの分からないコトバをいくつか考えてはみたんですが、 結局「うまく言えないけど」から取って "uink"。 「ウィンク」じゃありません。「ういんく」です。 # ふつー頭の `u' は「う」と読まないらしい… # `u' を「ア」と読む場合は末尾の `k' を発音せずに `i' を長音化すると # いい感じかも(笑)。 uink は (少なくとも僕にとっては) 非常に実験色の強いプログラムです。 些細なことでも構いませんので、ご意見を頂ければ幸いです。 == 5. 使い方 uink -h uink --help ヘルプメッセージを表示します。 uink --version バージョン情報を表示します。 uink [options] -s