と思ったら。
irb(main):001:0> require 'text/hatena' => true irb(main):002:0> p=Text::Hatena.new => #<Text::Hatena:0x55c134 @sectionanchor="o-", @ilevel=0, @baseuri="", @texthandler=#<Proc:0x00358f5c@./text/hatena.rb:16>, @html="", @invalidnode=[], @permalink=""> irb(main):003:0> p.parse("\n\nAAA") NoMethodError: undefined method `each' for nil:NilClass from ./text/hatena/html_filter.rb:105:in `emptyelemtaghandler' from ./text/hatena/html_filter.rb:50:in `parse' from ./text/hatena/html_filter.rb:44:in `parse' from ./text/hatena.rb:46:in `parse' from (irb):3
ざっと見たところおぼろげながら分かった気がするので直してみました。これで大丈夫なのか確証は持てませんが。
Index: hatena/html_filter.rb =================================================================== --- hatena/html_filter.rb (revision 9) +++ hatena/html_filter.rb (working copy) @@ -102,15 +102,17 @@ def emptyelemtaghandler(tagname, attr, text) if tagname =~ @allowtag @html << "<#{tagname}" - attr.each do |p, v| - if p =~ @allallowattr - elsif @allowattr[tagname.to_sym] && /^#{@allowattr[tagname.to_sym]}$/i =~ p - else - next - end - v = sanitize(v) - @html << %Q| #{p}="#{v}"| - end + unless attr == nil + attr.each do |p, v| + if p =~ @allallowattr + elsif @allowattr[tagname.to_sym] && /^#{@allowattr[tagname.to_sym]}$/i =~ p + else + next + end + v = sanitize(v) + @html << %Q| #{p}="#{v}"| + end + end @html << " />" else @html << sanitize(text)
http://kotomishome.hp.infoseek.co.jp/docs/html_filter.rb.patch