UNPKG

jaconv

Version:

Japanese character conversion library

1 lines 13 kB
{"version":3,"sources":["src/main/ts/jaconv/hebon.ts","src/main/ts/jaconv/katahira.ts","src/main/ts/jaconv/node.ts","src/main/ts/jaconv/zenhan.ts"],"names":[],"mappings":"AAYA,kBAAU,MAAM,CAAC;IAoDf;;OAEG;IACH,SAAgB,OAAO,CAAC,GAAI,MAAM,UAoEjC;CACF;ACvID,kBAAU,MAAM,CAAC;IAOf;;OAEG;IACH,SAAgB,UAAU,CAAC,GAAI,MAAM,UAQpC;IAED;;OAEG;IACH,SAAgB,UAAU,CAAC,GAAI,MAAM,UAQpC;CACF;AC7BD,kBAAU,MAAM,CAAC;CAOhB;ACLD,kBAAU,MAAM,CAAC;IA4Sf;;OAEG;IACH,SAAgB,UAAU,CAAC,GAAI,MAAM,UAEpC;IAED;;OAEG;IACH,SAAgB,UAAU,CAAC,GAAI,MAAM,UAEpC;IAED;;OAEG;IACH,SAAgB,SAAS,CAAC,GAAI,MAAM,UAEnC;IAED;;OAEG;IACH,SAAgB,SAAS,CAAC,GAAI,MAAM,UAEnC;IAED;;;OAGG;IACH,SAAgB,KAAK,CAAC,GAAI,MAAM,UAE/B;IAED;;;OAGG;IACH,SAAgB,KAAK,CAAC,GAAI,MAAM,UAE/B;IAED;;;OAGG;IACH,SAAgB,SAAS,CAAC,GAAI,MAAM,UAEnC;CACF","file":"jaconv.d.ts","sourcesContent":["//---------------------------------------------------------------------\n// ヘボン式ローマ字変換\n//\n// Copyright (c) 2011 Kazuhiko Arase\n//\n// URL: https://github.com/kazuhikoarase/jaconv\n//\n// Licensed under the MIT license:\n// http://www.opensource.org/licenses/mit-license.php\n//\n//---------------------------------------------------------------------\n\nnamespace jaconv {\n\n // 'ん' は、別途ハンドリングするのでデータに含めない\n var hebonMap : { [ hiragana : string ] : string } = {\n 'あ':'A','い':'I','う':'U','え':'E','お':'O',\n 'か':'KA','き':'KI','く':'KU','け':'KE','こ':'KO',\n 'さ':'SA','し':'SHI','す':'SU','せ':'SE','そ':'SO',\n 'た':'TA','ち':'CHI','つ':'TSU','て':'TE','と':'TO',\n 'な':'NA','に':'NI','ぬ':'NU','ね':'NE','の':'NO',\n 'は':'HA','ひ':'HI','ふ':'FU','へ':'HE','ほ':'HO',\n 'ま':'MA','み':'MI','む':'MU','め':'ME','も':'MO',\n 'や':'YA','ゆ':'YU','よ':'YO',\n 'ら':'RA','り':'RI','る':'RU','れ':'RE','ろ':'RO',\n 'わ':'WA','ゐ':'I','ゑ':'E','を':'O',\n 'ぁ':'A','ぃ':'I','ぅ':'U','ぇ':'E','ぉ':'O',\n 'が':'GA','ぎ':'GI','ぐ':'GU','げ':'GE','ご':'GO',\n 'ざ':'ZA','じ':'JI','ず':'ZU','ぜ':'ZE','ぞ':'ZO',\n 'だ':'DA','ぢ':'JI','づ':'ZU','で':'DE','ど':'DO',\n 'ば':'BA','び':'BI','ぶ':'BU','べ':'BE','ぼ':'BO',\n 'ぱ':'PA','ぴ':'PI','ぷ':'PU','ぺ':'PE','ぽ':'PO',\n 'きゃ':'KYA','きゅ':'KYU','きょ':'KYO',\n 'しゃ':'SHA','しゅ':'SHU','しょ':'SHO',\n 'ちゃ':'CHA','ちゅ':'CHU','ちょ':'CHO','ちぇ':'CHE',\n 'にゃ':'NYA','にゅ':'NYU','にょ':'NYO',\n 'ひゃ':'HYA','ひゅ':'HYU','ひょ':'HYO',\n 'みゃ':'MYA','みゅ':'MYU','みょ':'MYO',\n 'りゃ':'RYA','りゅ':'RYU','りょ':'RYO',\n 'ぎゃ':'GYA','ぎゅ':'GYU','ぎょ':'GYO',\n 'じゃ':'JA','じゅ':'JU','じょ':'JO',\n 'びゃ':'BYA','びゅ':'BYU','びょ':'BYO',\n 'ぴゃ':'PYA','ぴゅ':'PYU','ぴょ':'PYO'\n };\n\n var aaSet : { [ aa : string ] : boolean } = {\n 'AA': true, 'EE': true, 'II': false, // I は連続しても省略しない\n 'OO': true, 'OU': true, 'UU': true\n };\n\n var getHebon = function(s : string, index : number) {\n var h : string = null;\n var c : string = null;\n if (index + 1 < s.length) {\n c = s.substring(index, index + 2);\n h = hebonMap[c];\n }\n if (!h && index < s.length) {\n c = s.substring(index, index + 1);\n h = hebonMap[c];\n }\n return {c: c, h: h || null};\n };\n\n /**\n * 全角ひらがなをヘボン式ローマ字で半角英文字に変換します。\n */\n export function toHebon(s : string) {\n\n var hebon = '';\n var lastHebon = '';\n var lastChar = '';\n var i = 0;\n\n while (i < s.length) {\n\n var hr = getHebon(s, i);\n\n if (hr.c == 'っ') {\n\n // 'っち'\n var nextHr = getHebon(s, i + 1);\n if (nextHr.h != null) {\n if (nextHr.h.indexOf('CH') == 0) {\n hr.h = 'T';\n } else {\n hr.h = nextHr.h.substring(0, 1);\n }\n }\n\n } else if (hr.c == 'ん') {\n\n // B,M,P の前の 'ん' は 'M' とする。\n var nextHr = getHebon(s, i + 1);\n if (nextHr.h != null && 'BMP'.indexOf(nextHr.h.charAt(0) ) != -1) {\n hr.h = 'M';\n } else {\n hr.h = 'N';\n }\n\n } else if (hr.c == 'ー') {\n\n // 長音は無視\n hr.h = '';\n }\n\n if (hr.h != null) {\n\n // 変換できる文字の場合\n if (lastHebon != null) {\n\n // 連続する母音の除去\n var htest = lastHebon + hr.h;\n if (htest.length > 2) {\n htest = htest.substring(htest.length - 2);\n }\n if (aaSet[htest]) {\n hr.h = '';\n }\n }\n\n hebon += hr.h;\n\n } else {\n\n // 変換できない文字の場合\n hebon += hr.c;\n }\n\n lastHebon = hr.h;\n lastChar = hr.c;\n i += hr.c.length;\n }\n\n return hebon;\n }\n}\n","\nnamespace jaconv {\n\n var minHira = 'ぁ'.charCodeAt(0);\n var maxHira = 'ゖ'.charCodeAt(0);\n var minKata= 'ァ'.charCodeAt(0);\n var maxKata = 'ヶ'.charCodeAt(0);\n\n /**\n * 全角ひらがなを全角カタカナに変換します。\n */\n export function toKatakana(s : string) {\n var res = '';\n for (var i = 0; i < s.length; i += 1) {\n var cd = s.charCodeAt(i);\n res += (minHira <= cd && cd <= maxHira)?\n String.fromCharCode(cd - minHira + minKata) : s.charAt(i);\n }\n return res;\n }\n\n /**\n * 全角カタカナを全角ひらがなに変換します。\n */\n export function toHiragana(s : string) {\n var res = '';\n for (var i = 0; i < s.length; i += 1) {\n var cd = s.charCodeAt(i);\n res += (minKata <= cd && cd <= maxKata)?\n String.fromCharCode(cd - minKata + minHira) : s.charAt(i);\n }\n return res;\n }\n}\n","//---------------------------------------------------------------------\n// node \n//\n\nnamespace jaconv {\n // export\n declare var exports : any;\n declare var module : any;\n if (typeof exports === 'object') {\n module.exports = jaconv;\n }\n}\n","//---------------------------------------------------------------------\n// 全角・半角変換\n//\n// 2005/2/26 Kazuhiko Arase\n//\n\nnamespace jaconv {\n\n var asciiData = [\n\n '\\u0020', '\\u3000',\n '!', '!',\n\n // 2重引用符\n //'\\\"', '"',\n '\\\"', '”', // 一対多の変換の逆変換は先優先\n '\\\"', '“',\n\n '#', '#',\n '$', '$',\n '%', '%',\n '&', '&',\n '\\'', '’',\n '(', '(',\n ')', ')',\n '*', '*',\n '+', '+',\n ',', ',',\n '-', '-',\n '.', '.',\n '/', '/',\n '0', '0',\n '1', '1',\n '2', '2',\n '3', '3',\n '4', '4',\n '5', '5',\n '6', '6',\n '7', '7',\n '8', '8',\n '9', '9',\n ':', ':',\n ';', ';',\n '<', '<',\n '=', '=',\n '>', '>',\n '?', '?',\n '@', '@',\n 'A', 'A',\n 'B', 'B',\n 'C', 'C',\n 'D', 'D',\n 'E', 'E',\n 'F', 'F',\n 'G', 'G',\n 'H', 'H',\n 'I', 'I',\n 'J', 'J',\n 'K', 'K',\n 'L', 'L',\n 'M', 'M',\n 'N', 'N',\n 'O', 'O',\n 'P', 'P',\n 'Q', 'Q',\n 'R', 'R',\n 'S', 'S',\n 'T', 'T',\n 'U', 'U',\n 'V', 'V',\n 'W', 'W',\n 'X', 'X',\n 'Y', 'Y',\n 'Z', 'Z',\n '[', '[',\n\n // 円記号\n //'\\\\', '\',\n '\\\\', '¥',\n\n ']', ']',\n '^', '^',\n '_', '_',\n '`', '‘',\n 'a', 'a',\n 'b', 'b',\n 'c', 'c',\n 'd', 'd',\n 'e', 'e',\n 'f', 'f',\n 'g', 'g',\n 'h', 'h',\n 'i', 'i',\n 'j', 'j',\n 'k', 'k',\n 'l', 'l',\n 'm', 'm',\n 'n', 'n',\n 'o', 'o',\n 'p', 'p',\n 'q', 'q',\n 'r', 'r',\n 's', 's',\n 't', 't',\n 'u', 'u',\n 'v', 'v',\n 'w', 'w',\n 'x', 'x',\n 'y', 'y',\n 'z', 'z',\n '{', '{',\n '|', '|',\n '}', '}',\n '~', '~'\n ];\n\n var kanaData = [\n '。', '。',\n '「', '「',\n '」', '」',\n '、', '、',\n '・', '・',\n 'ヲ', 'ヲ',\n\n 'ァ', 'ァ',\n 'ィ', 'ィ',\n 'ゥ', 'ゥ',\n 'ェ', 'ェ',\n 'ォ', 'ォ',\n\n 'ャ', 'ャ',\n 'ュ', 'ュ',\n 'ョ', 'ョ',\n\n 'ッ', 'ッ',\n\n 'ー', 'ー',\n\n 'ア', 'ア',\n 'イ', 'イ',\n 'ウ', 'ウ',\n 'エ', 'エ',\n 'オ', 'オ',\n\n 'カ', 'カ',\n 'キ', 'キ',\n 'ク', 'ク',\n 'ケ', 'ケ',\n 'コ', 'コ',\n\n 'ガ', 'ガ',\n 'ギ', 'ギ',\n 'グ', 'グ',\n 'ゲ', 'ゲ',\n 'ゴ', 'ゴ',\n\n 'サ', 'サ',\n 'シ', 'シ',\n 'ス', 'ス',\n 'セ', 'セ',\n 'ソ', 'ソ',\n\n 'ザ', 'ザ',\n 'ジ', 'ジ',\n 'ズ', 'ズ',\n 'ゼ', 'ゼ',\n 'ゾ', 'ゾ',\n\n 'タ', 'タ',\n 'チ', 'チ',\n 'ツ', 'ツ',\n 'テ', 'テ',\n 'ト', 'ト',\n\n 'ダ', 'ダ',\n 'ヂ', 'ヂ',\n 'ヅ', 'ヅ',\n 'デ', 'デ',\n 'ド', 'ド',\n\n 'ナ', 'ナ',\n 'ニ', 'ニ',\n 'ヌ', 'ヌ',\n 'ネ', 'ネ',\n 'ノ', 'ノ',\n\n 'ハ', 'ハ',\n 'ヒ', 'ヒ',\n 'フ', 'フ',\n 'ヘ', 'ヘ',\n 'ホ', 'ホ',\n\n 'バ', 'バ',\n 'ビ', 'ビ',\n 'ブ', 'ブ',\n 'ベ', 'ベ',\n 'ボ', 'ボ',\n\n 'パ', 'パ',\n 'ピ', 'ピ',\n 'プ', 'プ',\n 'ペ', 'ペ',\n 'ポ', 'ポ',\n\n 'マ', 'マ',\n 'ミ', 'ミ',\n 'ム', 'ム',\n 'メ', 'メ',\n 'モ', 'モ',\n\n 'ヤ', 'ヤ',\n 'ユ', 'ユ',\n 'ヨ', 'ヨ',\n\n 'ラ', 'ラ',\n 'リ', 'リ',\n 'ル', 'ル',\n 'レ', 'レ',\n 'ロ', 'ロ',\n\n 'ワ', 'ワ',\n 'ン', 'ン',\n\n 'ヴ', 'ヴ',\n\n '゛', '゙',\n '゜', '゚',\n\n 'ヰ', 'イ',\n 'ヱ', 'エ',\n 'ヮ', 'ワ',\n 'ヵ', 'カ',\n 'ヶ', 'ケ'\n ];\n\n declare type StringMap = { [k : string] : string };\n\n var createConversionMap = function(data : string[]) {\n\n var map1 : StringMap = {};\n var map2 : StringMap = {};\n\n var add = function(s1 : string, s2 : string) {\n if (!map1[s1]) {\n map1[s1] = s2;\n }\n if (!map2[s2]) {\n map2[s2] = s1;\n }\n };\n\n var convert = function(s : string, reverse : boolean) {\n\n var map = !reverse? map1 : map2;\n\n var converted = '';\n\n for (var i = 0; i < s.length; i += 1) {\n\n if (i + 1 < s.length) {\n var c = map[s.substring(i, i + 2)];\n if (c) {\n converted += c;\n i += 1;\n continue;\n }\n }\n\n var c = map[s.substring(i, i + 1)];\n if (c) {\n converted += c;\n continue;\n }\n\n // 変換テーブルに該当無し\n converted += s.substring(i, i + 1);\n }\n\n return converted;\n }\n\n if (data.length % 2 != 0) {\n throw 'bad data length:' + data.length;\n }\n var len = data.length / 2;\n for (var i = 0; i < len; i += 1) {\n add(data[i * 2], data[i * 2 + 1]);\n }\n\n return { convert : convert };\n };\n\n //---------------------------------------------------------\n // 全角-半角 マッピング (ASCII)\n //\n\n var asciiMap = createConversionMap(asciiData);\n\n //---------------------------------------------------------\n // 全角-半角 マッピング (カタカナ)\n //\n\n var kanaMap = createConversionMap(kanaData);\n\n // exports\n\n /**\n * 全角英数記号を半角に変換します。\n */\n export function toHanAscii(s : string) {\n return asciiMap.convert(s, true);\n }\n\n /**\n * 半角英数記号を全角に変換します。\n */\n export function toZenAscii(s : string) {\n return asciiMap.convert(s, false);\n }\n\n /**\n * 全角カタカナを半角に変換します。\n */\n export function toHanKana(s : string) {\n return kanaMap.convert(s, false);\n }\n\n /**\n * 半角カタカナを全角に変換します。\n */\n export function toZenKana(s : string) {\n return kanaMap.convert(s, true);\n }\n\n /**\n * 全角英数記号、カタカナを半角に変換します。\n * (toHanAscii, toHanKana の組み合わせ)\n */\n export function toHan(s : string) {\n return toHanAscii(toHanKana(s) );\n }\n\n /**\n * 半角英数記号、カタカナを全角に変換します。\n * (toZenAscii, toZenKana の組み合わせ)\n */\n export function toZen(s : string) {\n return toZenAscii(toZenKana(s) );\n }\n\n /**\n * 全角英数記号を半角に、半角カタカナを全角に変換します。\n * (toHanAscii, toZenKana の組み合わせ)\n */\n export function normalize(s : string) {\n return toHanAscii(toZenKana(s) );\n }\n}\n"]}