• Source
    1. function asc(args){
    2. if (typeof args == "string") {
    3. // 全角カタカナ⇒半角カタカナ
    4.  
    5. //変換テーブル:2つの配列の要素数が一致しない場合空白文字が戻り値になる、かならず揃えること
    6. //replace_table_base:変換対象(検索)文字(wchar_t)
    7. //replace_table_to:置換文字(wchar_t)
    8. //ッ, ヮ, ワ, ヰ, ヱ, ヲ, ン, ヵ, ヶ
    9. var replace_table_base = [
    10. 0x30c3, 0x30ee, 0x30ef, 0x30f0, 0x30f1, 0x30f1, 0x30f3, 0x30f5, 0x30f6
    11. ]
    12. var replace_table_to = [
    13. 0xff6f, 0xff9c, 0xff9c, 0xff72, 0xff74, 0xff66, 0xff9d, 0xff76, 0xff79
    14. ]
    15. if(replace_table_base.length != replace_table_to.length) return "";//プログラミングミス防止
    16. // 変換テーブルによる変換
    17. for(var i = 0; i < replace_table_to.length; i++){
    18. args = args.replace(new RegExp(String.fromCharCode(replace_table_base[i]), "g"), String.fromCharCode(replace_table_to[i]));
    19. }
    20.  
    21. args = args.replace(/ヴ/g, "ヴ");
    22.  
    23. args = args.replace(/[ァ-オ]/g, function(s){
    24. var c1 = s.charCodeAt(0);
    25. var c2 = c1 / 2;
    26. if(c1 % 2){
    27. return String.fromCharCode(c2 + 0xe717);//小さいカナ
    28. }
    29. else{
    30. return String.fromCharCode(c2 + 0xe720);//普通のかな
    31. }
    32. });
    33. args = args.replace(/[カ-ヂ]/g, function(s){
    34. var c1 = s.charCodeAt(0);
    35. var c2 = c1 / 2;
    36. if(c1 % 2){
    37. return String.fromCharCode(c2 + 0xe721);//無濁点
    38. }
    39. else{
    40. return String.fromCharCode(c2 + 0xe720, 0xff9f);//有濁点
    41. }
    42. });
    43. args = args.replace(/[ツ-ド]/g, function(s){
    44. var c1 = s.charCodeAt(0);
    45. var c2 = c1 / 2;
    46. if(c1 % 2){
    47. return String.fromCharCode(c2 + 0xe720, 0xff9f);//有濁点
    48. }
    49. return String.fromCharCode(c2 + 0xe720);
    50. });
    51. args = args.replace(/[ナ-ハ]/g, function(s){
    52. return String.fromCharCode(s.charCodeAt(0) + 0xcebb);
    53. });
    54. args = args.replace(/[バ-ポ]/g, function(s){
    55. var c1 = s.charCodeAt(0);
    56. var c2 = c1 / 3;
    57. switch(c1 % 3){
    58. case 2:
    59. return String.fromCharCode(c2 + 0xEF45, 0xff9f);//゚
    60. break;
    61. case 1:
    62. return String.fromCharCode(c2 + 0xEF45, 0xff9e);//゙
    63. default:
    64. return String.fromCharCode(c2 + 0xEF45);
    65. break;
    66. }
    67. });
    68. args = args.replace(/[マ-モ]/g, function(s){
    69. return String.fromCharCode(s.charCodeAt(0) + 0xceb1);
    70. });
    71. args = args.replace(/[ャ-ョ]/g, function(s){
    72. var c1 = s.charCodeAt(0);
    73. var c2 = c1 / 2;
    74. if(c1 % 2){
    75. return String.fromCharCode(c2 + 0xe6fb);//小さいカナ
    76. }
    77. else{
    78. return String.fromCharCode(c2 + 0xe722);//普通のかな
    79. }
    80. });
    81. args = args.replace(/[ヨ-ロ]/g, function(s){
    82. return String.fromCharCode(s.charCodeAt(0) + 0xceae);
    83. });
    84.  
    85. return args;
    86. } else {
    87. var s = "";
    88. for (var i = 0; i < args.length; i++) {
    89. s += args[i];
    90. }
    91. return s;
    92. }
    93. }