トップ 差分 一覧 Farm ソース 検索 ヘルプ RSS ログイン

BugTrack-plugin/203

ページの作成や編集にはユーザ登録が必要です。

複数行プラグインを可能にするプラグイン

  • 投稿者: KG
  • カテゴリ: 修正
  • 優先度: 重要
  • 状態: 提案
  • 日時: 2005年04月28日 02時30分14秒

 内容

FSWiki4.0で実装予定の複数行プラグインへの対応をFSWiki3.5系で実現します。

  • 添付ファイルの中には、プラグイン本体と複数行プラグインのサンプルを含みます。

なお、ここで紹介するプラグインは将来公開されるFSWiki4.0の複数行プラグインとは実装方法が異なる可能性がありますので、互換性に関しては期待しない方がよいでしょう。

[重要]fswiki 3.6.3 以降をご利用の方へ

フル機能版ではなく機能縮小版を使用してください。機能縮小版が必要かどうかの目安としては、複数行プラグイン拡張を無効にして正常な動作をしない場合のみ適用してください。機能縮小版では、Wiki::process_plugin の置換と process_outline 機能の追加のみ行っています。

  インストール

添付ファイルを解凍し、各ディレクトリに展開してください。また、プラグイン設定画面で _ex_block を有効にしてください。

また、サンプルとして blocksample プラグインを同封しています。

依存関係

本プラグインでは以下のモジュール内の関数をオーバーライドしています。

  • Wiki::process_plugin
  • Wiki::Parser::parse
  • Wiki::CacheParser::process_cache

これらの関数を別のパッチ等で変更を加えている方は、本プラグイン導入後に既存の変更箇所が無効になってしまいますので、本プラグインへパッチ等の変更箇所を適用する必要があります。

また、以下の関数を追加しています。

  • Wiki::add_block_plugin
  • Wiki::process_outline
  • Wiki::HTMLParser::l_block
  • Wiki::Parser::l_block
  • Wiki::CacheParser::l_block
  • plugin::pdf::PDFParser::l_block

  複数行プラグインの作成について...

プラグインの種別としてインライン、パラグラフと同様の WIKI形式、HTML形式をサポートしています。

WIKI形式の場合は、処理後のWikiソースがさらにparserによって処理されます。したがって、WIKI形式の場合のみ入子になった複数行プラグインに対応できます。

HTML形式で入子の複数行プラグインへ対応する場合は、プラグイン内部でparserを使用して処理する必要があります。この辺りの使用は、インライン、パラグラフと同様です。

複数行プラグインとして blocksample プラグインを同封していますので参考にしてください。

複数行プラグインの登録方法

Install.pm に以下のように add_block_plugin を使用して登録します。

add_block_plugin(プラグイン名,モジュール名,種別)
  • 種別は WIKI または HTML が指定できます。

複数行プラグイン・モジュール

登録した複数行プラグインのモジュールに以下の関数を追加します。

sub block {
	my $self   = shift;
	my $wiki   = shift;
	my $source = shift;
	my $args1  = shift;
	my $args2  = shift;
	  :
	my $buf = "";
	  :
	return $buf;
}
  • $source は複数行の内部のWikiソースが渡されます。
  • $argsX はパラメータです。

アウトライン・プラグインへの対応

通常、HTML形式のプラグインではプラグイン内部でWIKIソースをパースする場合、以下のような方法を行います。

my $html = $wiki->process_wiki($source);

これを、以下のように変更します。

my $html = $wiki->process_outline($source, $self->{parser});

これにより、Outlineプラグイン対応のパース結果が得られます。逆に、Outlineプラグインへ対応したくない場合は上記の process_wiki を利用してください。

上記の $self->{parser} は、本来 WIKI形式出力のプラグインでないと利用できませんがこの複数行プラグイン導入後は、全てのHTML出力のプラグイン形式でも利用できるように修正しています。

  複数行プラグインの記述方法

以下の記述で複数行プラグインが呼び出されます。

{{プラグイン名 パラメータ1,パラメータ2,...
〜ソース〜
}}

ソース部分が block 関数の $source に入ります。

  ライセンス

GPLでお願いします。

  更新履歴

2005/04/28 - 公開中止
  • 新規作成
2005/05/03 - blockplugin_20050503.zip(868)
  • Parser.pm パッチのバグ修正
2005/10/11 - _ex_block_20051011.zip(899)
  • プラグイン化
2005/10/17 - _ex_block_20051017.zip(820)
  • PDF出力時にエラーになるのを修正
    • PDF出力時は、ソース部をそのまま出力するようにして暫定対応
2005/12/19 - _ex_block_20051219.zip(800)
  • Outlineプラグイン対応の為に process_outline を追加
  • アウトライン表示対応の blocksample3 をサンプルとして追加
2005/12/21 - _ex_block_20051221.zip(810)
  • WIKI形式のインラインプラグイン利用時におけるバグ修正
2006/01/14 - _ex_block_20060114.zip(793)
  • キャッシュ利用時への対応
2006/03/03 - _ex_block_20060303.zip(1452)
  • <プラグインインスタンス>->{command} へ呼出に使用したプラグイン名を保存するようにした。(今後の機能拡張用)
  • PDF周りのバグ修正
    • インラン・プラグイン利用時にハッシュリファレンスが表示されてしまう。
2018/05/21 - _ex_block_mini_20180521.zip(223)
  • 自サイトで公開していたFSWiki3.6.3以降用の機能縮小版です。
  • FSWiki3.6.3以降は標準で複数行プラグインに対応していますが、旧複数行プラグインを使用している方で正しく動作しない場合は機能縮小版を導入してください。

 コメント

  • http://kgsoft.jf.land.to/fswiki/wiki.cgi?page=FSWiki%2FPlugins%2Fblockplugin のサイトで、開発中のコード整形プラグインをサンプルとして載せています。 - KG (2005年04月29日 01時19分23秒)
  • バグ修正して再度アップしました。 - KG (2005年05月03日 09時56分08秒)
  • プラグインとして作成し直しました。 - KG (2005年10月11日 20時25分07秒)
  • PDF出力時のエラーに対応しました。なお、PDF出力はソース部を出力するだけにしています。 - KG (2005年10月17日 00時48分05秒)
  • 登録種別のHTML、WIKIは大文字のみで記述する仕様ですね。この仕様を発見するのに戸惑ったので、周知の意味でコメントさせていただきます。 - A_M (2005年12月16日 18時48分33秒)
  • Outlineプラグイン対応の為の修正を行いました。ただし、自動で対応するわけではなく、個別にブロックプラグイン内で対応していただくことになります。詳細は上記「 アウトライン・プラグインへの対応」を参照してください。 - KG (2005年12月19日 17時00分13秒)
  • 【ご相談】2005/12/19版を導入すると拙作の簡易ページャプラグインの出力が数値として表示されてしまいます。拙作のプラグインの方でも解決方法を模索しておりますが、なかなか打開策を見いだせずにおります。急ぎませんので、「こうしたら対応できるかもしれない」というのが有りましたら、ご教示いただければ幸いです。 - A_M (2005年12月21日 02時29分12秒)
  • 申し訳ないです。動作をちゃんと確認できていませんでした。parse_line からの戻りが配列だったのを変更していたのですが、そこでおかしくなっていました。修正版をご確認ください。私のところでは pager_index が一応動作して問題ないことを確認しています。 - KG (2005年12月21日 03時38分29秒)
  • 素早いご対応を有難うございます。最新版の動作を確認いたしました。 - A_M (2005年12月21日 06時01分36秒)
  • 使っていてどうも規則性が掴めずにいることがあるのですが…。複数行プラグインの入れ子(複数行プラグインの中に複数行プラグインを記述)が有効な場合と、有効でない場合(外側のものだけが有効になる場合)があるのですが、この違いってなんなのでしょう? 例えば、複数行書式プラグイン集のb_indentとかだと入れ子が可能なのですがb_ulistとかでは入れ子ができません。内容にもよるのでしょうか? - あき (2006年02月18日 13時01分05秒)
  • BugTrack-plugin/254を見てみましたが、これらの違いは $wiki->process_xxxx() にて処理するソースによって変わります。パラメータで渡される $source 全体を process_outline もしくは process_wiki で処理した場合は、内部に記述されている ブロック型プラグインが処理されますが、b_ulist では1行ずつ処理しているので、ブロック型プラグインの入口と出口が分かれてしまいます。この場合、ブロック型プラグインとして認識できないのです。 - KG (2006年02月18日 13時57分46秒)
  • なるほど、疑問がクリアになりました。原因が分かれば当然の話ですね。ありがとうございます。改良すれば有効にできそうです。それから、これを利用すれば新しくWikiパーサもどきなんかも作成できそうですね。 - あき (2006年02月18日 19時30分00秒)
  • こっそりバグ修正と機能追加です。 - KG (2006年03月03日 18時34分50秒)
  • このプラグイン、 「〜プラグインは存在しません。」の前後に改行が必要ですが、改行なしでも有効になるように(つまりインライン対応)修正できないでしょうか。->発端。インライン専用として分けてもよいので出来る限り対応お願いします。 - Custom (2006年10月16日 01時54分15秒)
  • う〜ん、ちょっと考えただけでもパーサーの修正箇所が結構増えますねぇ・・・。機能が複雑になりそうなのであまり対応したくはないのですが・・・。範囲指定(コメントのinとout)の2つのインラインプラグインに分けて利用するとどうでしょうか?他のプラグインでそういうのありましたよねぇ。 - KG (2006年10月16日 02時53分13秒)
  • いや、よく見たら記述方法を限定すれば簡単に出来そうではあるなぁ・・・。でも、中途半端なプラグイン記述になりますので個人的には実装したいとは思いませんねぇ。 - KG (2006年10月16日 03時21分09秒)
  • ありがとうございます。BugTrack-plugin/164などのことでしょうか。これもインラインではなくパラグラフだと思うのですが。 - Custom (2006年10月16日 07時25分16秒)
  • 3.6.4に適用した場合に,attachプラグインと干渉しておりました.fswiki 3.6.3 開発版へ対応したバージョンを適用することで問題は解消しました.が,今直接KGさんのサイトにアクセスできないので,対応が必要かと思います. - べ。 (2010年11月20日 14時06分49秒)
  • 3.6.4でこのプラグインを有効にしますと、他のプラグイン(Helpページやwiki_list_sortその他色々)が読み込めない状況になってしまうのですが、KG殿はじめどなた様か、3.6.4への対応版のリリース、是非、お願いできませんでしょうか。 - たった (2011年06月06日 22時16分30秒)
  • 宛 たったさん: リリース版では、FSWiki 3.6.3 以降から標準で複数行プラグインに対応していますので、FSWiki 3.6.4 でこのプラグインを使用する必要性はないと思うのですが…。 - ぐうます (2011年06月06日 22時47分00秒)
  • ぐうますさん、早々のお返事ありがとうございます。子ウィキの方で、このプラグインのチェックを外して再度表示した所、あり難い事に複数行に対応されているっぽいようです。たけぞうさん、KG殿、ぐうますさんはじめその他皆さんにも感謝致します!お騒がせしてすいませんです - たった (2011年06月06日 23時03分27秒)
  • 自サイトにて公開していた機能縮小版(β版)をこちらにて公開しました。_ex_block_mini_20180521.zip(223) - KG (2018年05月21日 14時35分30秒)
お名前: コメント: