Ruby 1.9.0でファイル先頭コメントからエンコーディングを抽出しそれをパーサで利用する
メモ。
http://d.hatena.ne.jp/macks/20071216#p1
http://d.hatena.ne.jp/Gimite/20080101/1199199332
などにもありますが、ファイル先頭のコメントの中でおまじないを書くとparserの文字コードが指定できます。
パーサの文字コードは、
というジレンマがある。ので、これを解決するために、先頭で文字コードを指定する技が作られた。
実際にやっているのはparse.yのset_file_encoding()。実際には、/coding(=|:)\s*[A-Za-z0-9_-]+/ みたいなパターンにマッチングさせてる感じ(たぶん不正確)。
呼び出しているのはparse.yの6028行あたりからはじまる case '#': のあたり。
得られた文字コード名を利用しているのはparser_set_encode()。encoding.cのrb_enc_find_index()を呼び出し、indexを取得できたらそれをparser->encにセットする。