コードDJ第a回 – HTML5とそれ以外を判別する

毎週火曜日、Help me, hackers!に上がったコードを紹介していくコードDJ 第a回。

コレを作ってて2ヶ月近くポストして無かったですけどなにか?

Actually sorry

(@佐々木健介)

komagata a.k.a. DJです。

今回紹介するのはコレ。

Ham CutletをHTML5に対応する – Help me, hackers!

HTMLのインデントを綺麗にする誰得サービスHam Cutlet。内部で使ってるHamlがデフォルトxhtmlなのでhtml5を食わせるとコードが破壊される。それを解決してくれたナイスガイがmat_aki a.k.a. youroomの中の人。ありがとう!

mat_akiのパッチはこのコードに集約される。

app.rb at 236baf240828a805726a49adb8c76fd4f048f802 from mataki’s hamcutlet – GitHub

[cc lang=”ruby”] def html2haml(html)

html5 = (doctype = Hpricot(html).children.detect{ |e| e.doctype? }) ? doctype.public_id.nil? : false

haml = Haml::HTML.new(html.gsub(/t/, ‘ ‘)).render

Haml::Engine.new(haml, :attr_wrapper => ‘”‘, :format => html5 ? :html5 : :xhtml ).render

end[/cc]

doctypeを見てHTML5なのか、それ以外なのかを判断してる。

[cc lang=”html”][/cc]

XHTML 1.0のdoctypeはこんな感じ。PUBLICなんとかがある。

[cc lang=”html”][/cc]

HTML5のdoctypeはこんな感じでシンプル。

Hpricotを使って「doctypeがあるけどpublicなんとかが無いものはHTML5」としている。Haml::Engineが元からやって欲しいような気もするが、将来のバージョンではそうなるのかもしれない。

Contributors to komagata/hamcutlet - GitHub

気づいたらHam Cutletもいつのまにやら色んなプログラマーの手が入ってるプロジェクトになってる。kyannyの気付かない内にmat_akiとコラボレーションしてる状態になってるんじゃないかなどと考えると面白い。オマエら一緒のコードいじってるぜ!

comments powered by Disqus