• 追加された行はこの色です。
  • 削除された行はこの色です。
RIGHT:&tag(解析);
RIGHT:&tag(解析,目次);

*目次 [#f7fa0ef8]
#lsx(new=true);
-[[その他>WikiEngine/PukiWiki/1.3#misc]]

*関連 [#g4f3cf0f]
#lsx(tag=解析,new=true,except=^WikiEngine/PukiWiki/1.3(/.*)?$)

&aname(misc);
#br

*公式サイト [#b996dfd5]
http://pukiwiki.sourceforge.jp/


*継承されているクラスを含むファイル [#r132f3b4]
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と関連のあるファイル [#g851e69f]
lib\convert_html.php
lib\file.php
lib\html.php

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


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

そういうわけで…
-ページはBodyインスタンスになる
-#brなどのWikiFormatはElement系インスタンスのどれかになる
-Bodyインスタンスの中にはElement系インスタンスが複数入っている状態になる

#br

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

#br

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

#br

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

#br

Element系クラスの中でも、BodyとDivは特殊。
-Bodyは他のElement系クラスを生成することができる。
-Divはブロック型プラグインを1つ担当して呼び出すことができる。
*概要 [#u9a47e54]
テキスト(ページの内容)→オブジェクト→HTMLがPukiWikiの主な動作。
それ以外は他のWebアプリと同様な部分と、プラグインになる。
PukiWiki本体はプラグインを呼び出すためのフレームワーク。プラグインがPukiWikiの全機能を実現している。

#br

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