2007/01/29

flavourdir+themeと後方参照の罠

先々週の日曜から恩師に頼まれて高校生ドモにスキー教えてたら、最終日に熱出した。 なんとかスキー教習終えて家に帰って熱測ったら38度2分とかでてんの。ふざけてる。 オイラは恩師の頼みで仕方なく(会社にナイショで)無償奉仕で高校生にスキー教えた。 仕方なくである! キャホホーイ! その見返りが38度2分とはコレどういうことか。 キャホホーイ! 納得いかん。キャホホーイ! まあそんなわけで死んでました。今は生きてます。

さて本題に入ろうか。このブログのメインプログラムは言うまでもなく blosxomです。blosxomには Movable Type(以下"MT") と似たような「テンプレート機能」があります。ただし「テンプレート」と呼ばずに 「フレーバー」と呼びます。風味とか味つけとかいう意味らしいです。MTのテンプレートや 「テーマ」などのシステムがどういうものかは正直知らないですが、blosxomの場合は、 整形されたHTMLファイルとCSSとそれらに関連づけられた画像等を一セット用意すれば HTMLファイルを分割するだけでそれがフレーバーになる感じです。

で、ここに長所とも短所ともとれる特徴がある。blosxomの「フレーバー」システムは、 テンプレートといえるHTMLデータを、「content_type」「head」「date」「story」「foot」 の5つに分割して管理・保存しなければならないのです。例えば「cupy」というフレーバー (フレーバーの名前は自由につけることができる)を作成したとして、cupyフレーバーは 「content_type.cupy」「head.cupy」〜「foot.cupy」と、最低でも5つのファイルを作る 必要があるのです。つまりフレーバーの数が増えればそれに×5倍してファイル数の増える増える。 CSSや画像を別に用意する必要も(場合によっては)あるわけで。さらにその上、 フレーバーを設置するディレクトリは基本的に記事を設置するディレクトリと同じなの。 つまり記事データとフレーバーファイルがゴッチャ混ぜになってアララ大変なことにもなりかねぬ。

と、いうわけで例によってプラグインでこれを解決するのです。幸い、既に考案されてる プラグインに「flavourdir」という、記事を設置するディレクトリとフレーバーを設置する ディレクトリを分割してしまえるプラグインがあるのです。さらにその上、「theme」という わざわざ5分割して保存することなくフレーバーをひとまとめのファイルにして管理する プラグインもあったのです。ここにきてようやく表題に追いついた。

ようはこの二つのプラグインを合体さして「別ディレクトリに追いやりつつ見やすく、 管理しやすくしてしまおう」という魂胆。ソースを眺めて大体アタリをつけてれっつら ガチャン。プラグイン、バグった。当たり前やがな。そんなポン付けで動いたら誰も苦労せん。 それはさておきなんで動かないのだろうか。いつもここから俺のPerlのおべんきょうがはじまる。 ポン付けでも文法的にはさして問題なかった気はするのだが。む、む。 content_typeのフレーバーだけがなぜか適用されている事に気づいた。ということはアレか、 いやコレか。

色々考えてるうちに「後方参照」という単語に行きついた。

だれかまじめに教えてほしいんですけど、

do {
    処理
} while (条件文);

という処理があったときさー、

do {
    $q =~ /(foo)(bar)/;
    $a = $1;
    $b = $2;
} while ($p =~ s/(PATTERN)// and $1);

みたいなふうなコードがあったとしてさー、whileの条件文内でマッチした場合、 do内の処理の$a=$1にはPATTERNが入っちゃうわけでしょうか? とすると$2はfoo?  とりあえずなんとかはしたしうまいとこ動いてるようだけど、なんかしっくりしない。

とりあえず改造版flavourdir

1/30追記。ちゃんと使い方ぐらい書いておこうかと思った。

フレーバーを入れておきたいディレクトリを$flavour_dirに、フレーバーファイル の拡張子を$extに(フレーバー名でなくファイルの拡張子。)設定して、フォールバック の有無(もし$flavour_dirに希望のフレーバーが無かった場合、元のテンプレート機能、 つまり$blosxom::datadir内を漁ってフレーバーを探すかどうか)を指定したら、 $flavour_dirで指定したディレクトリにフレーバーを入れるだけ。フレーバーファイルの 書式は<!-- blosxom content_type text/html; charset=UTF-8 -->とか <!-- blosxom head --><!-- blosxom date --><!-- blosxom story --> <!-- blosxom foot -->を、それぞれのブロックの先頭に書いておけばOK。 というか本当に単純にflavourdir+themeしただけなのでここまで書いておきながら やっぱ別に説明とかいらなかったなーとか後悔。

Search

Option

Document

Comment

アイテム詐欺で「再」逮捕
11/30 : Virginia Williams
12/05 : Virginia Williams
12/09 : Virginia Williams
12/15 : Heidi Reynolds
12/23 : Heidi Reynolds
12/30 : Heidi Reynolds
01/05 : Heidi Reynolds
01/09 : 東京都の興信所激安の情報はこちら
01/11 : Heidi Reynolds
01/19 : Heidi Reynolds
春よ、来い
05/08 : simuzy
05/08 : simuzy
05/12 : そうこ
10/18 : 前世療法
パイソンPython
09/11 : ウブロブランド激安市場

Tackback

リタリンの処方が打ち切られた
03/27 : ノビじいの鬱々日記
foreshortenedプラグイン改造
01/23 : ISO TANK!

Log

2008年
2月 1月
2007年
4月 3月 2月 1月
2006年
12月 11月 10月 9月 7月 2月 1月
2005年
11月

Link