全角/半角カタカナ編。失敗。

カタカナの全角→半角を難しく変換するコード。やっている最中に別の方法思いついたので途中でポスト。ひらがな→カタカナは簡単なのでひらがなを半角カタカナに変更するんだったらひらがな→カタカナ→半角カタカナが一番かも...。

コード(途中...)

関数はバギーです。使い物になりません><!

String.prototype.toHankakuCase = function()
{
    var i, t, c, f, m, a = [];

    m =
    {
        0x30AB:0xFF6F
    };

    for(i=0,f=this.length;i<f;i++)
    {
        c = this.charCodeAt(i);

        switch(true)
        {
            case (c in m): a.push(m[c]); break;
            // ァア−ォオ
            case (0x30A1 <= c && c <= 0x30AA):
                t = c & 0x1;
                a.push([0xFF70,0xFF66][t] + ((c - 0x30A0 + t) >> 1));
                break;
            // カガ−チヂ
            case (0x30AB <= c && c <= 0x30C9):
                if(0x30CF < c){ c--; };
                t = c & 0x1;
                a.push(0xFF76 + ((c-0x30AB+t) >> 1));
                if(!t){ a.push(0xFF9E); };
                break;
            // ハバパ−ホボポ
            case (0x30CF <= c && c <= 0x30DD):
                t = c % 3;
                a.push(0xFF8A + ((c-0x30CF-t) / 3));
                if(t){ a.push([0xFF9E,0xFF9F][t-1]) };
                break;
            // マ−モ
            case (0x30DE <= c && c <= 0x30E2):
                a.push(0xFF93 + c - 0x30DE);
                break;
/*
            case ((0x30E3 <= c && c <= 0x30e8)):
                t = c & 0x1;
                a.push([0xFF94,0xFF96][t] + ((c - 0x30E2 + t) >> 1));
                break;
*/
            // ラ−ロ
            case ((0x30E9 <= c && c <= 0x30ED)):
                a.push(0xFF97 + c - 0x30E9);
                break;
        };
    };

    return String.fromCharCode.apply(null, a);
};

alert("ラリルレロ".toHankakuCase());