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

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

用例:
#contents

**用例 [#v59369bb]
-[[org:自作プラグイン/graphviz.inc.php]]
-[[org:自作プラグイン/codehighlight.inc.php]]
-[[org:自作プラグイン/null.inc.php]]

**解説 [#n3028032]

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

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

(arg)は省略できます。

また、PRE:を加えれば、ユーザ定義ルール(&amp;now;など)のページ書き込み時の置換を抑制することができます。

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

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

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

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

**アンケート [#a417422e]

-ヒアドキュメント形式は分かり易いですか?
#vote(はい[3],いいえ[0])

-標準にとりこまれるといいな。
#vote(ぜひ[3],だめ[0])

**コメント [#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};
--引数が無い問題は解決しましたが、引数の2文字目が削除されてしまいました(v1.4)。 -- [[sky]] &new{2004-10-29 (金) 14:06:17};
--手元ではうまく動いてます。多分、$pos = strpos($args, "\r")を括弧で囲んでないためだと思います。 -- [[matsuda]] &new{2004-10-29 (金) 18:44:00};
--その通りコピーミスでした。すみません。 -- [[sky]] &new{2004-10-30 (金) 00:59:17};
-ヒアドキュメントは主に出力として使用されると思われるので、あらかじめサニタイズしたほうが良いでしょうか。サニタイズした場合、用途が制限されてしまうような可能性はあるでしょうか。 -- [[matsuda]] &new{2004-11-01 (月) 18:55:03};
--今のヒアドキュメントのプラグインへの渡し方ではヒアドキュメントが通常の引数と区別できないため、必ずプラグイン側で再度サニタイズが必要になる。 -- [[matsuda]] &new{2004-11-01 (月) 18:58:04};
-私も時々、どういうカタチ(UI含む)にするのが使いやすいだろうか、あるいは実現できるのだろうかを考えている今日このごろです。 -- [[henoheno]] &new{2004-11-01 (月) 21:22:36};

#comment


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

PukiWiki 1.5.3+ © 2001-2020 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u12. HTML convert time: 0.120 sec.

OSDN