Rubyではてな記法をパースしよう
よくid:hakobe932が「CP○Nにはid:jkondoの書いたはてな記法パーサがあるんだよ」などと自慢していましたが,Rubyでも探せばちゃんとあるんです.
http://rubyforge.org/projects/hparser/
Hatena format parser for Ruby. This format used at Hatena Diary (http://d.hatena.ne.jp) which is blog service in Japan.
id:mzpさん,ご苦労様です.とても同世代とは思えない….
コードをチラチラと読んでみたところ,相当複雑な作りで,とても読み切る事はできなさそう.時間をかけて少しずつ読んでいこうかな(多分読まない).でもこれは勉強になると思う.すごく.
使ってみた.
で,hparserのwikiを見ながら,ほとんどそのままやってみた.
require 'rubygems' require 'hparser' unless filename = ARGV.shift puts "usage: #{$0} [text file]" exit end text = File.open(filename).read parser = HParser::Parser.new hatena = parser.parse text puts hatena.map{|e| e.to_html}
適当なテキストファイルを作成して,実行してみる.
$ ruby hatena.rb text.txt <h1>こんにちは,世界</h1> <p>はてな記法パーサを試してみます.</p> <p>[<a href="http://d.hatena.ne/jp">http://d.hatena.ne/jp</a>:title=はてな]</p> <ol><li>sudo</li><li>gem</li><li>install</li><li>hparser</li></ol>
リンク記法の辺りが,非常に怪しい.そのうち改善されると信じて….
続きはオマケ.
関係無いけれど
本題とは関係無いんだけれども,Rubyの不思議に出会ってしまった.
puts hatena.map{|e| e.to_html} puts hatena.map do |e| e.to_html end
これは同じ結果が返ると思ってたんですが,実際に実行してみるとこうなります.
<h1>こんにちは,世界</h1> <p>はてな記法パーサを試してみます.</p> <p>[<a href="http://d.hatena.ne/jp">http://d.hatena.ne/jp</a>:title=はてな]</p> <ol><li>sudo</li><li>gem</li><li>install</li><li>hparser</li></ol> <pre>$ sudo gem install hparser</pre> #<HParser::Block::Head:0x5f18c0> #<HParser::Block::P:0x5ee490> #<HParser::Block::P:0x5ea070> #<HParser::Block::OrderList:0x6c908> #<HParser::Block::SuperPre:0x6c3f4>
ブレースとdo-endは同じだと思ってたんですが,微妙に挙動が変わるんですね.