SSブログ

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] ゴミ箱から復旧


nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントの受付は締め切りました

Facebook コメント

トラックバック 0