PluginScheme

Top > Hack > PluginScheme
Table of Contents

プラグイン開発の仕組みの改良案

好き勝手なことを言っているだけです。

実行中プラグイン名が欲しい

現在実行しているプラグイン名が何か変数に入っていて欲しい。

無論、プラグイン開発においてプラグイン名は明らかであるが、同じコードを別プラグイン間で再利用するような場合、プラグイン名が変数になっておいてくれるほうがうれしい。現状

$name = 'lsx'; 

のような一行を毎回自前で追加している。デフォルトで欲しい。

do_plugin_inline, convert, action, init 辺りで直前に global 変数を定義してやればよさそう?

EXT_PLUGIN_DIR か PLUGIN_DIR か

plus では EXT_PLUGIN_DIR (extend/plugin) が使用可能。 標準配布のディレクトリと分けられるので、独自にインストールしたプラグインを区別しやすく保守性があがる。

しかし、プラグイン開発の際は、EXT_PLUGIN_DIR と PLUGIN_DIR を両方サポートしなければならないという面倒が生じる。

例えば、プラグインディレクトリにプラグイン補助のライブラリを置く場合にその面倒が起こる。

現状プラグイン開発側で、EXT_PLUGIN_DIR . 'Markdown' 、 PLUGIN_DIR . 'Markdown' のように順繰りチェックすることになり、面倒くさい。さらには、厳密には、markdown.inc.php を置いたディレクトリの下を参照したいわけであり、そのチェックも行おうと思うとさらに面倒くさい。

よって、プラグインのあるディレクトリを保持しておいてくれる変数が欲しい

global $plugin_dir = array(); // somewhere

plugin.php#exist_plugin 関数で

foreach (array(EXT_PLUGIN_DIR,PLUGIN_DIR) as $p_dir) {
    if (file_exists($p_dir . $name . '.inc.php')) {
        $plugin_dir[$name] = $p_dir;
        break;
    }
}

のようなものが妥当だろうか。

プラグインの入れ子

たとえば

&ref(&linkr(hoge.html););

のようなもの。

現状は受け入れる側のプラグイン作者が

make_link($arg);

と引数処理すればできる(言い換えると、やらなければならない)。

wiki 本体側で前もって処理してくれる仕組みになっていると楽しいかも。

#しかし、make_link は htmlspecialchars してしまうので素のままではやっかいか。pukiwiki ではボツだろうな。

プラグインのパイプ

いっそのこと、

#lsx | #contentsx

のようなパイプができるとありがたい。 ただ、単純に出力だと、HTML が出力されるので、 パイプ用の出力、入力部分の扱うプラグインの仕組みを作らなければならないと思う。