#!/usr/local/bin/ruby =begin 【mkdiary.rb 用サンプ ルの「本文→HTMLフィルタ」】 mkdiary.rb のメイル処理モードでは、(見出しの次の行からの)本文相当部分 を適当に見繕ってHTML形式にするスクリプトを指定できる。たとえば、このへ ぼいスクリプトを使う場合は ~/.mkdiaryrc に bodyfilter=body2html と書いて、このスクリプトを動作している mkdiary.rb と同じディレクトリに コピーすると、メイル処理でこのスクリプトを利用するようになる。 このスクリプトが自動生成できるHTML要素と、その元となるメイル本文は以下の通り。 段落(

) 行頭から文章を書き始めた部分から、空行まで。 引用段落(

) タブ一個直後に文章を書き始めた部分から、空行まで。 叫び(

) タブ二個直後に文章を書き始めた部分から、空行まで。 各行の末尾にそれぞれ
が追加される。 PRE段落(
) スペース一個直後に文章を書き始めた部分から、空行まで。 箇条書() タブ一個直後に "* " (アスタリスク+半角スペース) 番号付き箇条書(
) タブ一個直後に 半角数字半角ピリオド 大見出し(

) 行頭に半角の = と半角スペースがあると

ほげほげ

になる 全ての単位は空行で区切られるので終わりたい部分には改行だけの行を入れ忘れ ないように注意すること!! またいずれの単位も行頭が < ではじまっている場合 はその行を生HTMLの記述だとみなしてそのまま表示し、次の行に判断を先送りす る。 変換例: 【メイル本文】------------------------------------------------------------ m=変換方法 行頭からどんどん続けていく部分は HTMLでの p エレメントとなる。ただし、 1. タブ一個 + 数字 + ピリオド 2. タブ一個 + * + スペース 3. タブ一個 + 文章 4. タブ二個 + 文章 5. スペース一個 + 式 という部分は特別に処理される。それぞれ、番号付き箇条書, 箇条書, ブロック クォート、センタリング+でかい文字、クォートしたpreエレメント、に変換され る。なお、特別にセンタリングや <a href=...> などを示すような簡易記号を導 入する予定は無い。なぜなら、簡易記法を導入すると、どんどん増やしたくなり、 それ自身を覚えるのが大変になって来て だったらHTML覚えた方が早い という元の黙阿弥状態になってしまうからである。 【変換後のHTML部分】------------------------------------------------------

変換方法

行頭からどんどん続けていく部分は HTMLでの p エレメントとなる。ただし、

  1. タブ一個 + 数字 + ピリオド
  2. タブ一個 + * + スペース
  3. タブ一個 + 文章
  4. タブ二個 + 文章
  5. スペース一個 + 式

という部分は特別に処理される。それぞれ、番号付き箇条書, 箇条書, ブロック クォート、センタリング+でかい文字、クォートしたpreエレメント、に変換され る。なお、特別にセンタリングや <a href=...> などを示すような簡易記号を導 入する予定は無い。なぜなら、簡易記法を導入すると、どんどん増やしたくなり、 それ自身を覚えるのが大変になって来て

という元の木阿弥状態になってしまうからである。

--------------------------------------------------------------------------- これを使えば割と楽にメイルでHTMLが書けるだろう。でもあれだな、携帯電話だ とTABコードが入れられないか。んー、じゃあ、スペース二個でTAB一個の代わり という風にでもしておくか。 =end $quotestarter = "
\n

" $quoteender = "

\n
" $samplestarter = "
\n
"
$sampleender	= "
\n
" $shoutstarter = "

" $shoutender = "

" $ulpattern = "[-*]\s" $ulstarter = "" $olpattern = "(\\d+\.\|\\(?\\d+\\))" $olstarter = "
    " $olender = "
" $tab = "(\t| )" in_p = false in_qt = false in_ul = false in_ol = false in_pre = false in_samp = false in_shout = false ender = '' while line=gets if (in_p || in_qt || in_shout || in_samp) then if /^$/ =~ line print "#{ender}\n" if in_p in_p= false elsif in_qt in_qt = false elsif in_shout in_shout = false elsif in_samp in_samp = false end else # continues if in_samp then line.sub!(/^ /, '') # strip one indent exactly (in
)
      else
	line.sub!(/^\s*/, '')
      end
      if (in_shout) then print "
" end print line end elsif (in_ul) if /^#{$tab}#{$ulpattern}/ =~ line print "
  • " + $' elsif /^$/ =~ line in_ul = false print "#{ender}\n" else print line end elsif (in_ol) if /^#{$tab}#{$olpattern}/ =~ line print "
  • " + $' elsif /^$/ =~ line in_ol = false print "#{ender}\n" else print line end elsif (in_pre) print line if %r,
  • $, =~ line in_pre = false end elsif /^ print line elsif /^#{$tab}#{$tab}\S/ =~ line print "#{$shoutstarter}" + line.sub!(/^\s*/, '') in_shout = true; ender = $shoutender elsif /^#{$tab}#{$ulpattern}/ =~ line line = $' print "#{$ulstarter}\n
  • " + line in_ul = true; ender = $ulender elsif /^#{$tab}#{$olpattern}/ =~ line line = $' print "#{$olstarter}\n
  • " + line in_ol = true; ender = $olender elsif /^#{$tab}\S/ =~ line print "#{$quotestarter}" + line.sub!(/^\s*/, '') in_qt = true; ender = $quoteender elsif /^
    /i =~ line
        print line
        in_pre = true
      elsif /^ \S/ =~ line
        print "#{$samplestarter}" + line.sub!(/^\s*/, '')
        in_samp = true; ender = $sampleender
      elsif /^(m=|= +)(.*)$/ =~ line 
        print "

    " + $2 + "

    \n" elsif /^\S/ =~ line print "

    " + line in_p = true; ender = "

    "; end end if (in_p) print "

    \n" elsif (in_qt) print "#{$quoteender}\n" elsif (in_shout) print "#{$shoutender}\n" elsif (in_samp) print "#{$sampleender}\n" elsif (in_ol) print "#{$olender}\n" elsif (in_ul) print "#{$ulender}\n" elsif (in_shout) print "#{$shoutender}\n" end