#topicpath

*複数行のプラグイン引数を可能に -- [[matsuda]] [#vf81cae4]

プラグインで何行にもわたるような文章を処理したい場合に便利な機能です。

(参考:[[org:自作プラグイン/graphviz.inc.php]])

このパッチを当てると、ブロック型プラグインでヒアドキュメント形式による複数行の引数指定が可能になります。

 #name(arg)<<EOF
 ...
 ...
 EOF

(arg)は省略できます。

また、次のように記述すれば、&amp;now;のようなユーザ定義ルールによるページ書き込み時の置換を抑制することができます。

 #name<<PRE:EOF
 ...
 ...
 EOF

ヒアドキュメントはプラグインに最後の引数として渡されます。

**ダウンロード [#vdb2e74d]

|バージョン|ファイル|変更点|h
|1.4|&ref(convert_html.php.3.diff); &color(red){Reverted!}; &br;&ref(file.php.diff);&br;&ref(plugin.php.2.diff); &color(red){New!};|引数が無い場合でもカンマによる分割をしないようにしました(修正版)。|
|1.3|&ref(convert_html.php.4.diff);&br;&ref(file.php.diff);&br;&ref(plugin.php.diff);|引数が無い場合でもカンマによる分割をしないようにしました。|
|1.2|&ref(convert_html.php.3.diff);&br;&ref(file.php.diff);&br;&ref(plugin.php.diff);|ヒアドキュメントはカンマによる分割をしないようにしました。|
|1.1|&ref(convert_html.php.2.diff);&br;&ref(file.php.diff);|skyさんの変更(引数指定)を取り込みました。整形済テキスト用の表記を追加しました。|
|1.0|&ref(convert_html.php.diff);|初版|

**コメント [#kf0ad095]
-[[org:自作プラグイン/codehighlight.inc.php]]に使ってみました。 (10/29 変更)-- [[sky]] &new{2004-10-26 (火) 18:40:45};
  			if (preg_match('/^(#.*)<<([A-Z0-9_]+)$/',$line, $matches)) {
 +				if (preg_match('/^(#.*)\((.*)\)$/',$matches[1], $mat)) {
 +					$line = $mat[1]. "(" . $mat[2] . ",";
 +				} else {
 +					$line = $matches[1] . "(";
 +				} 
  				$line = $matches[1] . "(";
このようにすれば #name(arg)<<EOF の形で呼び出せます。プラグインの引数でargとヒアドキュメントを区別したい時に使っています -- [[sky]] &new{2004-10-26 (火) 18:40:45};
-ユーザ定義ルール(&amp;now;など)は展開されてしまうようです。 -- [[matsuda]] &new{2004-10-26 (火) 19:13:28};
-ユーザ定義ルールの置換を抑制できるようにしてみました。 -- [[matsuda]] &new{2004-10-27 (水) 13:57:21};
 #name<<PRE:EOF
 ...
 EOF
&ref(convert_html.php.2.diff);&br;
&ref(file.php.diff);&br;
-関連ありそうなページを発見([[書式再定義/ブロック構造の実現]])。 -- [[matsuda]] &new{2004-10-28 (木) 18:43:35};
-PRE: の時にカンマ '','' を展開しない方法を考えた方は教えて頂けませんか。現在は応急的対策として一度別の文字に変換してからPluginで元のカンマに戻しています。これだと全てのプラグインに逆変換させなければいけません。 -- [[sky]] &new{2004-10-29 (金) 08:52:05};
--convert_html に次のコードを追加して、プラグインで"& sbquo;"をカンマに置換しています。
   $stop_word = $matches[3];
   while (count($lines)) {
 +    if (substr($matches[2], 0, strlen('PRE:')) == 'PRE:'){
 +       $lines = preg_replace("/\,/", "&sbquo;", $lines);
 +    }
      $next_line = array_shift($lines);
      if (substr($next_line, 0, strlen($stop_word)) == $stop_word){
--通常の引数の記述ができるようになったので、ヒアドキュメントの部分はカンマによる分割をしないほうが良いですかね。「&amp;sbquo;」というのは、入力される文字列には絶対現れないでしょうか。 -- [[matsuda]] &new{2004-10-29 (金) 09:26:25};
--PRE:のありなしに関わらずカンマによる分割をしないようにすれば、インライン型プラグインの&amp;name(){...};の記述と対応するので美しい気がします。 -- [[matsuda]] &new{2004-10-29 (金) 09:41:49};
--カンマによる分割をしないようにしました(v1.2)。最初の"\r"を通常の引数とヒアドキュメントの区切りにすることで、特殊な文字の使用を避けてみました。 -- [[matsuda]] &new{2004-10-29 (金) 11:11:13};
-素早い対応ありがとうございます。引数が無い時にはこれまで同様カンマで分割されてしまうため、引数の代わりにカンマを挿入するようにしました。 -- [[sky]] &new{2004-10-29 (金) 14:06:17};
--これ(v1.3)だと、空の引数が2つ出来てしまいますね。 -- [[matsuda]] &new{2004-10-29 (金) 15:41:47};
--plugin.php側の修正にバグがあったので直しました(v1.4)。 -- [[matsuda]] &new{2004-10-29 (金) 15:56:11};

#comment

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Site admin: PukiWiki Development Team

PukiWiki 1.5.4+ © 2001-2022 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u12. HTML convert time: 0.288 sec.

OSDN