String .toKatakana() / .toHiragana

by ethertank

JavaScript

String.prototype.toKatakana || (String.prototype.toKatakana = function() {
    for (var c, i = 0, l = this.length, o = ""; i < l; ++i) {
        c = this.charCodeAt(i);
        o += String.fromCharCode(12352 < c && c < 12439 || c === 12445 || c === 12446 ? c + 96 : c);
    }
    return o;
});


String.prototype.toHiragana || (String.prototype.toHiragana = function() {
    for (var c, i = 0, l = this.length, o = ""; i < l; ++i) {
        c = this.charCodeAt(i);
        o += String.fromCharCode(12448 < c && c < 12535 || c === 12541 || c === 12542 ? c - 96 : c);
    }
    return o;
});


document.write(
    
"ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをんゔゕゖゝゞ".toKatakana() + "<hr />" +

"ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶヷヸヹヺヽヾ".toHiragana()
       
);
               
//alert(typeof "a".charCodeAt(0));

//check
/*
var sk = [];
for (var i = 0; i < 86; i++) {
    sk.push(String.fromCharCode(0x30a1 + i));
}
console.log(sk.join(""));

var sh = [];
for (var i = 0; i < 86; i++) {
    sh.push(String.fromCharCode(0x3041 + i));
}
console.log(sh.join(""));
*/

// "ヷヸヹヺ"
/*
document.write("ゝゞ".toKatakana());
document.write("ヽヾ".toHiragana());
*/

/*
0x3099 : ゙
0x309a : ゚
0x309b : ゛
0x309c : ゜
0x309d : ゝ
0x309e : ゞ
0x309f : ゟ
0x30a0 : ゠
*/

/*
0x30f7 : ヷ
0x30f8 : ヸ
0x30f9 : ヹ
0x30fa : ヺ
0x30fb : ・
0x30fc : ー
0x30fd : ヽ
0x30fe : ヾ
0x30ff : ヿ
*/

/*alert((0x30fd-0x309d).toString(16));
document.write("<hr />");

var s = 12446,
    //※開始文字
    len = 96,
    //※個数
    i = s;

for (len += s; i < len; ++i) {
    var cCode = "0x" + i.toString(16);
    document.write(cCode + " : " + String.fromCharCode(cCode) + "<br />");
}*/