#indnet

方針 EditToHeaderToFooter

  • Wikiは行指向のため、コードの見通しが悪くなりがち。字下げを導入でコード可読性を改善。特にリストでの改行とか、複数行プラグインとか。

仕様 EditToHeaderToFooter

  • 字下げ書式モードでは、行頭の空白は無視。
    • ただし、複数行プラグインの引数に対しては、プラグインの先頭行の字下げ分のみを無視。~
        例:
        ^    #plugin(){{
        ^        arg
        ^        arg
        ^    }}
        は、
        ^#plugin(){{
        ^    arg
        ^    arg
        ^}}
        と等価。
  • 疑似プラグイン #indent で字下げ書式モードに切り替え。
  • 疑似プラグイン #noindent で天突き書式モードに切り替え。
  • デフォルトは天突き書式。
  • 字下げ書式では、行頭が空白の整形済みテキストは無効。

改造 EditToHeaderToFooter

  • pukiwiki.ini.php の適当な場所にて、
       #code(diff){{
       + $indent_format = 0;
       }}
    • $indent_format は天突きと字下げを表すフラグ。
      • ##$indent_format = 0# ⇔ 天突き書式。(デフォルト)
      • ##$indent_format = 1# ⇔ 字下げ書式。
  • convert_html.phpfunction parse 入り口直後にて、
       #code(diff){{
            function parse(& $lines)
            {
       +        global $indent_format;
                
                $this->last = & $this;
                $matches = array();
       +        $indent = "";
       }}
    • $indent = ""; は字下げした深さを格納する変数。複数行プラグインで利用。
  • convert_html.phpfunction parsewhile (!empty($lines))直後にて、
       #code(diff){{{{
                while (! empty($lines)) {
                    $line   = array_shift($lines);
                    
       +             // Indent extension
       +             if ($indent_format)
       +             {
       +                 preg_match('/^(\s*)(.*)$/', $line, $matches);
       +                 $indent = strlen($matches[1]);
       +                 $line   =        $matches[2] ;
       +             }
       +             
       +             if (rtrim($line) == '#indent') {
       +                 $indent_format = 1;
       +                 continue;
       +             }
       +             if (rtrim($line) == '#noindent') {
       +                 $indent_format = 0;
       +                 continue;
       +             }
                     
                     // Escape comments
                     if (substr($line, 0, 2) == '//') continue;
       }}}}
    • $line = array_shift($lines); でラインを切り出すため、この後に記述。
    • Escape commentsなど全てが字下げの影響を受けるため、これらの前に記述。
    • if (rtrim($line) == '#indent') {...} は字下げ書式へ切り替える疑似プラグイン
    • if (rtrim($line) == '#noindent') {...} は天突き書式へ切り替える疑似プラグイン

      課題 EditToHeaderToFooter

  • #indent」と「#noindent」による文脈の切り替えは良くない。
    • 互換性を捨て、字下げ書式に限定すべきか?
    初基 一覧 検索 最新 バックアップ リンク元   ヘルプ   最終更新のRSS