目次 Edit

関連 Edit

 

公式サイト 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
WikiFormat
Link
リンク

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

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

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

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

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

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

そういうわけで…

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

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

 

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

 

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

 

Element系クラスの中でも、BodyとDivは特殊。

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

概要 Edit

テキスト(ページの内容)→オブジェクト→HTMLがPukiWikiの主な動作。
それ以外は他のWebアプリと同様な部分と、プラグインになる。
PukiWiki本体はプラグインを呼び出すためのフレームワークプラグインPukiWikiの全機能を実現している。

 

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