Wema for perl のソースを読んでみた [wema]
前々から wema ってすごいなぁ、なんとか python でも動くように出来んのか?
・・・と思っていたのだけれど、最新の Wema 2.0.1 は
1.Ruby で書かれている
2.たいそうなフレームワーク上に書かれている
3.アプリ自体の機能が豊富なため、ややこしい
の三重苦で、とても私の手に負えるものではない。
ということで、しばらく放置していたのだが、
WEMA Watch http://labs.yagi.tc/wema/ に紹介されている
Wema for perl http://mujin.parfait.ne.jp/wema/wema.cgi は
1.Perlで書かれている
2.普通の CGI で、Perl の高度な機能( pm とかクラスとか)を使ってない
3.本家(Ruby版)の 0.5.1 から派生したもので機能的にシンプル
で、これなら何とか移植できそうか・・・という気がしてきた。
というわけで、以下は私だけにしか意味の分からない(かもしれない)メモ。
[wema.cgi 以外のデータファイル等]
wema.js
wema.css
そのまま使う Static なファイル。
data ディレクトリの中(data/.namemap とか)
書き込まれたデータは、data ディレクトリの中に 1 ページ 1ファイルで、どかどか入る
data/.namemap は ID(URLの一部)とページに表示する名前の map の入ったデータ(TAB区切り)
wema.tmpl
テンプレートファイル。wema.cgi の中にも HTML がいっぱい埋め込まれているので、wema.cgi と一緒でもいいかも。
[wema.cgi の処理]
initialize
... という関数はないけど、7 ~ 29 行をいつも通過して、ここで変数の初期化処理
include_template() を呼び出してのテンプレートの展開も、この最初の段階でやってる。
disp
一番最初に呼ばれる・・・というか initialize の次にこれだけが呼ばれてる大元の関数。
write_check(), disp_list(), disp_content() を呼び出す。
テンプレートの部分(head, edit, tail)はこの関数内で出力しているので、呼び出している関数の中では、たいやきのあんこの部分だけ出力している。
disp と write_check は役割分担が不明瞭なので、ソースを読むときは両方を同時に読むと良い。
disp_list
一覧表示の処理(LIST をクリックした時の表示)。
disp_content
特定のページの表示。
writeNameMap
data/.namemap の書き出し
readNameMap
data/.namemap の読み込み。名前 -> ID のハッシュを返す
get_id
名前からIDを取得
get_name
ID から名前の取得
convert_body
BODY 部分の HTML への変換。
2つ目の引数の文字列の WikiName っぽいところとかを、アンカー付きの HTML に変換する処理。
一つ目の引数は ファイルの更新時刻を知るためのものなのであまり重要でない。
write_check
REQUEST_METHOD が POST だったら
REQUEST のパラメータに従ったデータの追加・変更・削除の処理
Location ヘッダーを付けて、次ページへ飛ばす
REQUEST_METHOD が GET だったら
mode が make でページが作成されてないときはページを作成
Location ヘッダーを付けて次ページへ飛ばす。
mode が js の時はjavascript を出力(*mode=js となる条件は不明だが*)
何らかの出力をしたら関数自体は 0 を返す
この関数では出力してなくて、呼び出し側(sub disp())で HTML を出力して欲しいときは 1 を返す
js_out
パラメータの文字列を JavaScript で出力する HTML(document.writeln())を出力する。
include_template
テンプレートファイル wema.tmpl を読み込み変数 $head, $edit, $tail に入れる。
<!--???--> という部分を Perl の変数で置き換えてる。
<!--editbox-->lt;!--sweep--> は、表示・非表示を切り替えしてるだけ。(DustBox なら表示しないとか)
escHTML
HTML クォートしてるだけ
-------------------------------------------------------------------
mode のとりうる値
[(ブランク)] 304~334行目で処理。 どういうタイミングでここに入るか、未だ不明。
[set] (仮の値)wema.tmpl では初期値として設定してるけど、Perl でこの値は参照してない。
JavaScript の setpos () が呼ばれたときに CGI に渡るが
mode が、'',del,lock,unlock,recover,sweep じゃないときは、378~409行目を通って(mode の値には関係なく)ポジションを設定してる。
[list] LIST(一覧)
[make] 新規作成
[js] Perl のコード上では判定してるけど、どこで設定してるか不明
[del] 削除(ゴミ箱へ移動、もしくはゴミ箱のファイルを削除)
[sweep] ゴミ箱を空にする
[lock] LOCK
[unlock] UNLOCK
[recover] ゴミ箱から復旧
コメント 0
コメントの受付は締め切りました