公式サイト Edit

http://pukiwiki.sourceforge.jp/

継承されているクラスを含むファイル Edit

lib\config.php
lib\convert_html.php
lib\diff.php
lib\make_link.php

※plugin\以下を除く。

plugin\以下で継承されているクラスを含むファイル
plugin\attach.inc.php
plugin\dump.inc.php
plugin\map.inc.php
plugin\showrss.inc.php
plugin\tracker.inc.php

ページ内のWikiTextはオブジェクト化される。
それ以外は非オブジェクト指向。

ConfigTable
設定類のうちWiki上でできるもの
Element
記法
Link
リンク

…はオブジェクト化してある。
プラグイン記法の一部になっている。

make_linkと関連のあるファイル Edit

lib\convert_html.php
lib\file.php
lib\html.php

require()の実行は全てlib\pukiwiki.phpで行われている。

ページ編集はインスタンス構造の編集 Edit

ページの内容がElement系インスタンスの設計書になっている。
Element系のクラスにはBody、Div、Tableなどがある。
どのページもElement系インスタンスの1つ(Bodyインスタンス)として扱われ、ページ内のWiki記法もElement系インスタンスのどれかになる。
ブロックWiki記法には他のWiki記法を入れることができるが、これは入れ子構造のElement系インスタンスになる。

そういうわけで…

  • ページはBodyインスタンスになる
  • #brなどのWiki記法はElement系インスタンスのどれかになる
  • Bodyインスタンスの中にはElement系インスタンスが複数入っている状態になる
 

Wiki記法ごとに異なるHTMLが生成されるが、この差異がElement系サブクラスの違い。
Wiki記法はどれも引数を受けてHTMLを生成するが、こういった共通部分がElementというスーパークラスで定義されている。

 

入れ子構造になったElement系インスタンスはDecoratorパターンになっており、HTML生成時にはその入れ子構造に対応したHTMLを生成するようになっている。

 

Keyword:Decorator
※Decoratorパターンは「付け加え」のパターン。コードを複雑にせずに機能を付け加える。PukiWikiではWiki記法プラグイン呼び出しの多重構造を実現するために用いられている。このパターンによって、新しいWiki記法プラグインを追加するとき、何も工夫せずに他のWiki記法と入れ子構造にすることができる。
(全てのプラグインはElement系クラスの1つになるので、何も考えなくてもDecoratorパターンの一部になる)

 

Element系クラスの中でも、Body*1とDiv*2は特別な機能を持つ。

  • Bodyは他のElement系クラスを生成することができる。
  • Divはブロックプラグインを1つ担当して呼び出すことができる。

概要 Edit

テキスト(ページの内容)→オブジェクト化→HTML化がPukiWikiの主な動作。
それ以外は一般的なWebアプリと同様な基礎部分と、プラグインになる。

PukiWiki本体はプラグインを呼び出すためのフレームワーク。本体から呼び出されたプラグインPukiWikiの全機能を実現している。

 

プラグイン部分はプラグインに一任されていて、制約はない。限られているのは呼び出される条件くらい。
プラグインを呼び出すにはページ内にプラグイン呼び出しのWiki記法を書いたり、URLクエリーにプラグイン名を書く必要がある。