方針

  • 字下げ書式では、行頭の空白は無視されるため、従来の空白整形済みテキストに代わる書式が必要。
  • 書式には目に見える文字を当てるべし。
  • 先頭が「^」で始まる「H整形/Hat整形」を導入。
    • 正規表現で行頭を示す「^」から連想:「^」は真の行頭、以降は一字一句そのまま出力。
    • Wikiで引用を表す矢印形「>」や「<」からの連想:実際、何かの引用である場合が多い。
  • 以降では便宜上、空白で始まる整形済みテキストの書式を「S整形/Space整形」で区別。

仕様

  • 行頭が「^」の行は整形済み書式と見なす。基本仕様はS整形に同じ。
        ^    「^」より左は字下げ、「^」より右は整形済みテキスト。
  • S整形とH整形の混用は無効。段が一旦切られる。

改造

  1. lib/convert_html.php で、S整形のクラス class Preコピー。場所は任意だが、流れ的にS整形の直後で、
      1
      2
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
     13
     14
     15
     16
     17
     18
     19
     20
     21
     22
     23
     24
     25
     26
     27
    
    !    // '^ 'Hat-beginning sentence
    !    // '^ 'Hat-beginning sentence
    !    // '^ 'Hat-beginning sentence
    !    class HPre extends Element  // for Indent extension
         {
    !        function HPre(& $root, $text)
             {
                 parent::Element();
                 $this->elements[] = htmlspecialchars(substr($text, 1));
             }
     
             function canContain(& $obj)
             {
    !            return is_a($obj, 'HPre');
             }
     
             function & insert(& $obj)
             {
                 $this->elements[] = $obj->elements[0];
                 return $this;
             }
     
             function toString()
             {
                 return $this->wrap(join("\n", $this->elements), 'pre');
             }
         }
    
    • !」で始まる行は class Pre との差分。
    • 'HPre' はH整形の識別キーであり、クラス名との一致が必要。
  2. 同ファイルの class Bodyfunction parsewhile (! empty($lines)) 中にて、Pre に関する分岐をコピーし、
      1
      2
      3
      4
      5
      6
      7
      8
      9
     10
     11
    
             // Pre
    -        if ($head == ' ' || $head == "\t") {
    +        if (!$indent_format && ($head == ' ' || $head == "\t")) {
                 $this->last = & $this->last->add(new Pre($this, $line));
                 continue;
             }
    +        // HPre
    +        if ($head == '^') {
    +            $this->last = & $this->last->add(new HPre($this, $line));
    +            continue;
    +        }
    
    • !$indent_format && は字下げ書式でS整形を無効化する条件。
    • if ($head == '^') はH整形への分岐。
リロード   新規 編集 解凍 差分 添付 複製 改名   初基 一覧 検索 最新 バックアップ リンク元   ヘルプ   最終更新のRSS
Last-modified: 2012.0229 (水) 0805.5400 (4433d)