ToraToraWiki
ToraToraWiki 1.3.2(2014-04-20) を読む。
index.php
エントリーポイント。
主な流れは
- 初回起動時
- index.php -> app/install.inc
- 普段
index.php -> app/boot.inc -> app/main.inc -> main() -> ... -> app/theme/basic/html.php
...部分は app/page.inc -> app/handler/wiki.inc -> app/handler/wiki/wiki_convert.inc など。保存されているページを読み込む処理。
app/main.inc
本体。
- 各種設定の読み込み
- プラグインモジュール読み込み
- 短縮URLを option/shorturl.inc 呼び出しに置き換え
- ページ名の相対パスをフルパスに変換
- ページ読み込み。→ app/handle.inc でページ種別(wiki/text/file)ごとの処理へ。
- DOM生成 → PHPの DOMDocument::saveXML でHTML出力
app/main.inc: main()
- $OPTIONS はURLクエリーで与えられた"option"や"action"に適用するフィルター。 app/option/... を読み込んだ時に定義される。$OPTIONSにない"option"パラメーターは無効。
- $is_continue は app/option/... から app/main.inc(呼び出した側)へのフラグ。app/page.inc を実行するかどうか(ページをHTML化して返すかどうか)を示している。
- app/main.inc: main()
- app/option.inc: option() で(URLクエリーで指定された)"option"に応じた処理を呼び出す。それぞれ処理に応じたHTMLを返す。
- main()でHTMLが得られる。
- 実行した"option"によってはここで app/page.inc: page() を実行。保存されているページを元にしたHTMLを得る。
- main()は大体終わり。
- app/boot.incまで戻ってから、app/theme/... の html.php を呼び出す。これまでに作ったHTMLをテンプレートに埋め込んでレスポンスにする。
"action"
"action"は<form action="...">のaction? optionをさらに分岐させるための制御情報。
例えばURLや、POSTされたフォームデータに… … option=replace&action=write …があれば app/option/replace.inc: replace_write() が呼ばれる。
注目
- ./phpmd-log PHPMDで複雑そうなところを探す。
- ./app/dom.inc HTML生成に使われている。PHPが持つDOMDocumentライブラリでDOM生成 → DOMDocument::saveXML() でXHTML化。
- ./app/page.inc 名前の通りページを表す。app/storage_file.inc と仲良し。
- ./app/handler/wiki.inc
- ./app/handler/wiki/wiki_convert.inc パターンマッチではなく構文解析でToraToraWiki記法の解釈をしているみたい。字句解析(app/handler/wiki/wiki_parse.inc: wiki_lex())はパターンマッチ。字句パターンは app/handler/wiki.inc の冒頭にある正規表現。
- ./app/handler/wiki/wiki_parse.inc
- ./app/handler/wiki/wiki_lib.inc
ディレクトリ一覧
- app/
- ToraToraWiki本体
- app/handler/
- ページ種別ごとの処理
- app/handler/file/
- ページ種別"file"
- app/handler/wiki/
- ページ種別"wiki"の処理・記法の解析
- app/handler/wiki/function/
- ファンクションの定義
- app/manual/
- マニュアルになるページを連結したファイル
- app/option/
- URLクエリー"option"と"action"に対応する処理
app/main.inc(87): $main_page_output = option($args, '', $is_continue);
- app/otherwiki/
- 他のWikiシステムからの移行ツール
- app/plugin/
- プラグインを作ったらここに置く
- app/sentence/
ページ名や検索クエリーなどを意味ある文にする処理
自動リンクはページ名が単語境界に挟まれてるときだけ(Page1はPageにリンクしない)…とか、 検索クエリーは空白区切り、""でくくると空白も使える…などのルールが書かれている。
- app/theme/
- 外観のテーマに必要なもの
- app/tool/
- Wikiエンジンとは別に単体で動くツール
- resource/
- 画像や一般公開されているライブラリ
- storage/
- 運用中に作られるデータ
- theme/
- 外観のテーマ。「外観の設定」を反映したもの。
コメント
- Q8lZAD -- gvwrlvczua
- FStWtD -- ulugaaon