Index: hatena_style.rb =================================================================== --- hatena_style.rb (リビジョン 37218) +++ hatena_style.rb (作業コピー) @@ -293,10 +293,17 @@ @title = Hatena::Title.new('') # dummy @body = self @elems = Array.new + pbuffer = '' # paragraph buffer + flush_pbuffer = lambda{ + next if pbuffer.empty? + @elems.push Hatena::Paragraph.new(pbuffer) + pbuffer.replace('') + } lines = str.concat("\n").scan(/.*\n/) until lines.empty? case when lines[0][0] == ?- + flush_pbuffer.call buffer = '' until lines.empty? break unless lines[0][0] == ?- @@ -304,6 +311,7 @@ end @elems.push Hatena::Itemize.new(buffer) when lines[0][0] == ?+ + flush_pbuffer.call buffer = '' until lines.empty? break unless lines[0][0] == ?+ @@ -311,6 +319,7 @@ end @elems.push Hatena::Enumerate.new(buffer) when lines[0][0] == ?: + flush_pbuffer.call buffer = '' until lines.empty? break unless lines[0][0] == ?: @@ -319,6 +328,7 @@ end @elems.push Hatena::Description.new(buffer) when lines[0] == ">>\n" + flush_pbuffer.call buffer = '' nest = 0 until lines.empty? @@ -329,6 +339,7 @@ end @elems.push Hatena::Quote.new(buffer) when lines[0] == ">|\n" + flush_pbuffer.call buffer = '' until lines.empty? str1 = lines.shift @@ -337,6 +348,7 @@ end @elems.push Hatena::Verbatim.new(buffer) when lines[0] == ">||\n" + flush_pbuffer.call buffer = '' until lines.empty? str1 = lines.shift @@ -345,11 +357,13 @@ end @elems.push Hatena::SuperVerbatim.new(buffer) when lines[0][0,5] == '><$/ =~ lines.shift end when lines[0][0,2] == '><' + flush_pbuffer.call buffer = '' until lines.empty? str1 = lines.shift @@ -358,15 +372,13 @@ end @elems.push Hatena::UnParagraph.new(buffer) else - buffer = '' - until lines.empty? - break if /\A(\-|\+|\:|\>[\<\>\|])/ =~ lines[0] and not buffer.empty? - buffer.concat lines.shift - break if buffer[-3..-1] == "\n\n\n" + pbuffer.concat lines.shift + if pbuffer[-3..-1] == "\n\n\n" + flush_pbuffer.call end - @elems.push Hatena::Paragraph.new(buffer) end end + flush_pbuffer.call end end