LaTeX の flushleft や flushright を

はてなアイデア 3973」の要望の昨日のもの以外の2つで実現したいことは、つきつめると詩や台本用に LaTeX の center、flushleft、flushright 環境のような機能が欲しいということになるのだと思います。
flushleft 等の機能をもった、LaTeX や Texinfo では、どこに改行を入れるのかを記号で指定しなければならないのですが、Wiki 風にしておくなら、そんな記号入れのような面倒なことを執筆者に求めずに、ずばり改行を入れたところが改行になるのが良さそうです。
はてな記法の中で、改行が改行の意味を持つ記法は 「>|……|<」 ですから、これをちょっとひねって、次のように記述するようにするのが直感的だろうなと考えました。

 >|left
 Hatena::Text::PPT は、
 
 左揃えの夢を見るのか。
 |<

leftの代わりに、centerleft にすれば、それぞれ左揃え、中揃え、右揃えを表します。
続いて、生成される HTML ですが、次のようにすればスタイルシートで制御できて良さそうです。br 要素が自動的に行末に追加されるようになります。これで、pre とは異なり、長い行は自然に折り返されて、改行したい場所で必ず改行がおこなわれるようになります。

 <div class="flushleft">Hatena::Text::PPT は、<br />
 <br />
 左揃えの夢を見るのか。</div>

それでは、昨日の BNF にルールを付け加えて、上の出力に変換するようにしてみます。比較のために「>|……|<」も追加しておきます。なお、下のルールでは、本家のはてな記法とは結果が異なり、常に </div></pre> と直前の行の間には改行が入らないようにしました。

Block ::=
    /^$/
  | /^>\|left$/i {$result .= "<div class=\"flushleft\">"}
    Justify {$result .= "</div>\n"}
  | /^>\|center$/i {$result .= "<div class=\"center\">"}
    Justify {$result .= "</div>\n"}
  | /^>\|right$/i {$result .= "<div class=\"flushright\">"}
    Justify {$result .= "</div>\n"}
  | /^>\|$/ {$result .= "<pre>"}     Pre {$result .= "</pre>\n"}
  | /^>>$/  {$result .= "<blockquote>\n"} BQ {$result .= "</blockquote>\n"}
  | /./     {$result .= "<p>" . $&}  P {$result .= "</p>\n"}

BQ ::= 略 (昨日のエントリを参照)
P ::= 略 (同上)

Justify ::= # 1行目の処理 <div class="..">に改行なしで続ける。
    /^\|<$/
  | /.?/   {$result .= $&} Justify2
  | ε

Justify2 ::= # 2行目以降の処理 すべての行を改行と br 要素を付けて追加する。
    /^\|<$/
  | /.?/   {$result .= "<br />\n$&"} Justify2
  | ε

Pre ::=
    /\|<$/ {$result .= $` if $`}
  | /.?/   {$result .= $&} Pre2
  | ε

Pre2 ::=
    /\|<$/ {$result .= "\n$`" if $`}
  | /.?/   {$result .= "\n$&"} Pre2
  | ε