同一情報掲載先:dev:PukiWiki/1.4/ちょっと便利に/インライン・マルチラインコメント

インライン・マルチラインコメント Edit

org:自作プラグイン/null.inc.phpとpukiwiki.ini.phpのPKWKEXP_DISABLE_MULTILINE_PLUGIN_HACKを有効にすることで、同様のことが実現できます。改造には危険を伴います。どのように実現するかは各自の判断・責任でお願いします。

発端 Edit

//コメント

は,1行コメントでかつ,

文章 //コメント

のように,行中にコメントを書けない。

phpの/* ~ */のようなコメント機能が欲しい。

仕様 Edit

  • 見出し内はコメントアウトされない*1
  • 整形済みテキスト内はコメントアウトされない*2
  • phpと同じ/* ~ */を使いたかったが、fixed_heading_anchorの処理を回避するのが面倒*3だったので、MediaWikiと同じ<!-- ~ -->にしました。
  • <!-- ~ -->のコメントより、//のコメントの方が優先されます。*5
  • テストが十分ではないかもしれません。問題がありましたらコメントください。

テキスト整形ルール Edit

コメントは表示されません

文章1<!--コメント-->文章2
文章1<!--コメント-->
<!--コメント-->文章1
文章1<!--コメント-->文章2<!--コメント-->文章3

文章1<!--コメント
コメント
-->文章2

null.inc.phpにできないが,この改造でできること Edit

  • 表組み構造をコメントアウト
    |A|B|C|<!--D|--E|-->
    |aaa|bbb|ccc|<!--ddd|eee|-->
  • 行の途中から複数行コメントアウト
    文章<!--コメント
    コメント-->
  • 複数行コメントアウト中,行の途中までコメントアウト
    <!--コメント
    コメント
    コメント-->文章
  • 上2件の合せ技
    文章1<!--コメント
    コメント-->文章2

    文章1文章2
    と解釈されます。

差分 Edit

改造は自己責任で

convert_html.php,v 1.18

--- convert_html.org.php	Sat May 13 07:29:58 2006
+++ convert_html.php	Sat May 26 14:49:15 2007
@@ -885,6 +885,20 @@
 			// Line Break
 			if (substr($line, -1) == '~')
 				$line = substr($line, 0, -1) . "\r";
+
+			// Escape inline and multiline comments 
+			$line = preg_replace('/\<\!--(.*)--\>/U','',$line);
+			if (preg_match('/^(.*)\<\!--/U',$line, $matches)) {
+				$line = $matches[1];
+				while (! empty($lines)) {
+					if (preg_match('/--\>(.*)$/U', array_shift($lines), $matches)) {
+ 						$line .= $matches[1];
+						break;
+					}
+				}
+			}
+			$head = $line{0}; // replace head
 			
 			// Other Character
 			if (isset($this->classes[$head])) {

  • devでツッコミを受けた後の修正版
    --- convert_html.org.php	Sat May 13 07:29:58 2006
    +++ convert_html.php	Tue May 29 06:43:56 2007
    @@ -885,6 +885,25 @@
     			// Line Break
     			if (substr($line, -1) == '~')
     				$line = substr($line, 0, -1) . "\r";
    +
    +			// Escape inline and multiline comments 
    +			if (strpos($line,'<!--') !== false) {
    +				$line = preg_replace('/\<\!--(.*)--\>/U','',$line);
    +				if (preg_match('/^(.*)\<\!--/U',$line, $matches)) {
    +					$line = $matches[1];
    +					while (! empty($lines)) {
    +						if (preg_match('/^(?!\/\/).*--\>(.*)$/U', array_shift($lines), $matches)) {
    + 							$line .= $matches[1];
    +							break;
    +						}
    +					}
    +				}
    +				if ($line == '') {
    +					$this->last = & $this;
    +					continue;
    +				}
    +				$head = $line{0}; // replace head
    +			}
     			
     			// Other Character
     			if (isset($this->classes[$head])) {







*1 *見出し<!--コメント-->のコメントは表示されます
*2 プログラムソースを張りたい時があると思いますので
*3 行頭に*/があるとアンカーが付いてしまう*4
*4 lib/file.phpのmake_str_rulesが付けてくれる XD
*5 行頭//-->ではコメントを終了できません

添付ファイル: fileconvert_html.php.diff 298件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 下位頁新規  一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-02-21 Sun 22:41:09 JST (3161d)
Valid XHTML 1.1 Valid CSS