Shift_JIS: 全角→半角変換

Shift_JISの全角文字を半角文字に変換するrubyの拡張ライブラリを作成した。
中身は変換テーブル*1を用意してマッピングを行っているだけの単純なものだが、毎回一から作るのは若干面倒なので、まとめてここにおいておく(ruby/sjis_conv-0.1.0.tar.gz)

使えるメソッドは一つだけ。

> require 'sjis_conv'
> SjisConv::zen2han 'ヴァイオリン'
=> "ヴァイオリン"

変換対象文字は以下の通り。

# カタカナ
ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノ
ハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヲンヴ

# 英数字
0123456789
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz

# 記号  ※ このリストが適切かどうかは不明
 、。.・:;?!^_/〜|’”“()[]{}「」+=<>$%#&*@

C99の機能*2を使用しているので、コンパイラによっては上手く動かないかもしれない(gcc-4.2でしか試していない)

*1:実際にはswitch分岐

*2:可変長配列。これを使う必然性は特にはないけど使ってみた。