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 />");
}*/