{"version":3,"sources":["../src/util.ts","../src/core.ts","../src/index.ts"],"names":["ROMANIZATION_SYSTEM","isHiragana","ch","isKatakana","isKana","isKanji","isJapanese","hasHiragana","str","i","hasKatakana","hasKana","hasKanji","hasJapanese","toRawHiragana","toRawKatakana","toRawRomaji","system","romajiSystem","reg_tsu","reg_xtsu","pnt","r","result","reg_hatu","match","indices","mStr","max","getStrType","hasKJ","hasHK","patchTokens","tokens","t","cr","j","kanaToHiragana","kanaToHiragna","kanaToKatakana","kanaToRomaji","escapeRegExp","s","Util","Kuroshiro","analyzer","options","e","rawTokens","token","romajiConv","preToken","hi","tmp","hpattern","hc","hmatches","pickKJ","hc1","notations","pattern","isLastTokenKanji","subs","c","matches","pickKanji","c1","c2","c3","rubyFor","notation","base","typ","hira","pron","shouldRuby","isKatakanaLocal","isNewline","segments","n","ruby","nl","last","text","cursor","start","end","rt","n0","n1","n2","n3","n4","n5","shouldUseRuby","isKanjiLocal","core_default","index_default"],"mappings":"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AA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,OAAG,IAAA,CACH,MAAA,CAAG,IAAA,CAEH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,KACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,OAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CAEH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,KACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CAGH,OAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,KACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CAEH,MAAA,CAAG,IAAA,CACH,OAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,KACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CAEH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,OAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,KAEH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,OAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CAEH,MAAA,CAAG,KACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,OAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,KAGH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,OAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CAEH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,KACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CAEH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,OAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,KACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,OAAG,IAAA,CAEH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,KACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CAEH,OAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,KACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CACH,MAAA,CAAG,IAAA,CAGH,YAAA,CAAI,KAAA,CACJ,aAAI,KAAA,CACJ,YAAA,CAAI,KAAA,CACJ,YAAA,CAAI,KAAA,CACJ,YAAA,CAAI,MACJ,YAAA,CAAI,KAAA,CACJ,YAAA,CAAI,KAAA,CACJ,YAAA,CAAI,KAAA,CACJ,aAAI,KAAA,CACJ,YAAA,CAAI,KAAA,CACJ,YAAA,CAAI,KAAA,CACJ,YAAA,CAAI,KAAA,CACJ,YAAA,CAAI,KAAA,CACJ,YAAA,CAAI,KAAA,CACJ,YAAA,CAAI,KAAA,CACJ,YAAA,CAAI,MACJ,YAAA,CAAI,KAAA,CACJ,YAAA,CAAI,KAAA,CACJ,YAAA,CAAI,KAAA,CACJ,YAAA,CAAI,KAAA,CACJ,YAAA,CAAI,KAAA,CACJ,YAAA,CAAI,KAAA,CACJ,YAAA,CAAI,KAAA,CACJ,aAAI,KAAA,CACJ,YAAA,CAAI,KAAA,CACJ,YAAA,CAAI,KAAA,CACJ,YAAA,CAAI,KAAA,CACJ,YAAA,CAAI,KAAA,CACJ,YAAA,CAAI,KAAA,CACJ,YAAA,CAAI,KAAA,CACJ,YAAA,CAAI,MACJ,YAAA,CAAI,KAAA,CACJ,YAAA,CAAI,KAAA,CACJ,YAAA,CAAI,KAAA,CACJ,aAAI,KAAA,CACJ,YAAA,CAAI,KAAA,CACJ,YAAA,CAAI,KAAA,CACJ,YAAA,CAAI,MACJ,YAAA,CAAI,KAAA,CACJ,YAAA,CAAI,KAAA,CACJ,YAAA,CAAI,KAAA,CACJ,YAAA,CAAI,KAAA,CAGJ,YAAA,CAAI,KAAA,CACJ,YAAA,CAAI,KAAA,CACJ,YAAA,CAAI,KAAA,CACJ,aAAI,KAAA,CACJ,YAAA,CAAI,KAAA,CACJ,YAAA,CAAI,KAAA,CACJ,YAAA,CAAI,MACJ,YAAA,CAAI,KAAA,CACJ,YAAA,CAAI,KAAA,CACJ,YAAA,CAAI,KAAA,CACJ,aAAI,KAAA,CACJ,YAAA,CAAI,KAAA,CACJ,YAAA,CAAI,KAAA,CACJ,YAAA,CAAI,KAAA,CACJ,YAAA,CAAI,KAAA,CACJ,YAAA,CAAI,KAAA,CACJ,YAAA,CAAI,KAAA,CACJ,YAAA,CAAI,MACJ,YAAA,CAAI,KAAA,CACJ,YAAA,CAAI,KAAA,CACJ,YAAA,CAAI,KAAA,CACJ,aAAI,KAAA,CACJ,YAAA,CAAI,KAAA,CACJ,YAAA,CAAI,KAAA,CACJ,YAAA,CAAI,MACJ,YAAA,CAAI,KAAA,CACJ,YA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","file":"index.mjs","sourcesContent":["import type { Token } from \"./types.js\";\n\nconst KATAKANA_HIRAGANA_SHIFT = \"\\u3041\".charCodeAt(0) - \"\\u30a1\".charCodeAt(0);\nconst HIRAGANA_KATAKANA_SHIFT = \"\\u30a1\".charCodeAt(0) - \"\\u3041\".charCodeAt(0);\nconst ROMANIZATION_SYSTEM = {\n    NIPPON: \"nippon\",\n    PASSPORT: \"passport\",\n    HEPBURN: \"hepburn\"\n} as const;\n\n/**\n * Check if given char is a hiragana\n *\n * @param {string} ch Given char\n * @return {boolean} if given char is a hiragana\n */\nconst isHiragana = function (ch: string) {\n    ch = ch[0];\n    return ch >= \"\\u3040\" && ch <= \"\\u309f\";\n};\n\n/**\n * Check if given char is a katakana\n *\n * @param {string} ch Given char\n * @return {boolean} if given char is a katakana\n */\nconst isKatakana = function (ch: string) {\n    ch = ch[0];\n    return ch >= \"\\u30a0\" && ch <= \"\\u30ff\";\n};\n\n/**\n * Check if given char is a kana\n *\n * @param {string} ch Given char\n * @return {boolean} if given char is a kana\n */\nconst isKana = function (ch: string) {\n    return isHiragana(ch) || isKatakana(ch);\n};\n\n/**\n * Check if given char is a kanji\n *\n * @param {string} ch Given char\n * @return {boolean} if given char is a kanji\n */\nconst isKanji = function (ch: string) {\n    ch = ch[0];\n    return (ch >= \"\\u4e00\" && ch <= \"\\u9fcf\")\n        || (ch >= \"\\uf900\" && ch <= \"\\ufaff\")\n        || (ch >= \"\\u3400\" && ch <= \"\\u4dbf\");\n};\n\n/**\n * Check if given char is a Japanese\n *\n * @param {string} ch Given char\n * @return {boolean} if given char is a Japanese\n */\nconst isJapanese = function (ch: string) {\n    return isKana(ch) || isKanji(ch);\n};\n\n/**\n * Check if given string has hiragana\n *\n * @param {string} str Given string\n * @return {boolean} if given string has hiragana\n */\nconst hasHiragana = function (str: string) {\n    for (let i = 0; i < str.length; i++) {\n        if (isHiragana(str[i])) return true;\n    }\n    return false;\n};\n\n/**\n * Check if given string has katakana\n *\n * @param {string} str Given string\n * @return {boolean} if given string has katakana\n */\nconst hasKatakana = function (str: string) {\n    for (let i = 0; i < str.length; i++) {\n        if (isKatakana(str[i])) return true;\n    }\n    return false;\n};\n\n/**\n * Check if given string has kana\n *\n * @param {string} str Given string\n * @return {boolean} if given string has kana\n */\nconst hasKana = function (str: string) {\n    for (let i = 0; i < str.length; i++) {\n        if (isKana(str[i])) return true;\n    }\n    return false;\n};\n\n/**\n * Check if given string has kanji\n *\n * @param {string} str Given string\n * @return {boolean} if given string has kanji\n */\nconst hasKanji = function (str: string) {\n    for (let i = 0; i < str.length; i++) {\n        if (isKanji(str[i])) return true;\n    }\n    return false;\n};\n\n/**\n * Check if given string has Japanese\n *\n * @param {string} str Given string\n * @return {boolean} if given string has Japanese\n */\nconst hasJapanese = function (str: string) {\n    for (let i = 0; i < str.length; i++) {\n        if (isJapanese(str[i])) return true;\n    }\n    return false;\n};\n\n/**\n * Convert kana to hiragana\n *\n * @param {string} str Given string\n * @return {string} Hiragana string\n */\nconst toRawHiragana = function (str: string) {\n    return [...str].map((ch) => {\n        if (ch > \"\\u30a0\" && ch < \"\\u30f7\") {\n            return String.fromCharCode(ch.charCodeAt(0) + KATAKANA_HIRAGANA_SHIFT);\n        }\n        return ch;\n    }).join(\"\");\n};\n\n/**\n * Convert kana to katakana\n *\n * @param {string} str Given string\n * @return {string} Katakana string\n */\nconst toRawKatakana = function (str: string) {\n    return [...str].map((ch) => {\n        if (ch > \"\\u3040\" && ch < \"\\u3097\") {\n            return String.fromCharCode(ch.charCodeAt(0) + HIRAGANA_KATAKANA_SHIFT);\n        }\n        return ch;\n    }).join(\"\");\n};\n\n/**\n * Convert kana to romaji\n *\n * @param {string} str Given string\n * @param {string} system To which romanization system the given string is converted\n * @return {string} Romaji string\n */\nconst toRawRomaji = function (str: string, system?: string) {\n    system = system || ROMANIZATION_SYSTEM.HEPBURN;\n\n    const romajiSystem: Record<string, Record<string, string>> = {\n        nippon: {\n            // 数字と記号\n            \"１\": \"1\",\n            \"２\": \"2\",\n            \"３\": \"3\",\n            \"４\": \"4\",\n            \"５\": \"5\",\n            \"６\": \"6\",\n            \"７\": \"7\",\n            \"８\": \"8\",\n            \"９\": \"9\",\n            \"０\": \"0\",\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            あ: \"a\",\n            い: \"i\",\n            う: \"u\",\n            え: \"e\",\n            お: \"o\",\n            ア: \"a\",\n            イ: \"i\",\n            ウ: \"u\",\n            エ: \"e\",\n            オ: \"o\",\n\n            か: \"ka\",\n            き: \"ki\",\n            く: \"ku\",\n            け: \"ke\",\n            こ: \"ko\",\n            カ: \"ka\",\n            キ: \"ki\",\n            ク: \"ku\",\n            ケ: \"ke\",\n            コ: \"ko\",\n\n            さ: \"sa\",\n            し: \"si\",\n            す: \"su\",\n            せ: \"se\",\n            そ: \"so\",\n            サ: \"sa\",\n            シ: \"si\",\n            ス: \"su\",\n            セ: \"se\",\n            ソ: \"so\",\n\n            た: \"ta\",\n            ち: \"ti\",\n            つ: \"tu\",\n            て: \"te\",\n            と: \"to\",\n            タ: \"ta\",\n            チ: \"ti\",\n            ツ: \"tu\",\n            テ: \"te\",\n            ト: \"to\",\n\n            な: \"na\",\n            に: \"ni\",\n            ぬ: \"nu\",\n            ね: \"ne\",\n            の: \"no\",\n            ナ: \"na\",\n            ニ: \"ni\",\n            ヌ: \"nu\",\n            ネ: \"ne\",\n            ノ: \"no\",\n\n            // 直音-清音(ハ～ヲ)\n            は: \"ha\",\n            ひ: \"hi\",\n            ふ: \"hu\",\n            へ: \"he\",\n            ほ: \"ho\",\n            ハ: \"ha\",\n            ヒ: \"hi\",\n            フ: \"hu\",\n            ヘ: \"he\",\n            ホ: \"ho\",\n\n            ま: \"ma\",\n            み: \"mi\",\n            む: \"mu\",\n            め: \"me\",\n            も: \"mo\",\n            マ: \"ma\",\n            ミ: \"mi\",\n            ム: \"mu\",\n            メ: \"me\",\n            モ: \"mo\",\n\n            や: \"ya\",\n            ゆ: \"yu\",\n            よ: \"yo\",\n            ヤ: \"ya\",\n            ユ: \"yu\",\n            ヨ: \"yo\",\n\n            ら: \"ra\",\n            り: \"ri\",\n            る: \"ru\",\n            れ: \"re\",\n            ろ: \"ro\",\n            ラ: \"ra\",\n            リ: \"ri\",\n            ル: \"ru\",\n            レ: \"re\",\n            ロ: \"ro\",\n\n            わ: \"wa\",\n            ゐ: \"wi\",\n            ゑ: \"we\",\n            を: \"wo\",\n            ワ: \"wa\",\n            ヰ: \"wi\",\n            ヱ: \"we\",\n            ヲ: \"wo\",\n\n            // 直音-濁音(ガ～ボ)、半濁音(パ～ポ)\n            が: \"ga\",\n            ぎ: \"gi\",\n            ぐ: \"gu\",\n            げ: \"ge\",\n            ご: \"go\",\n            ガ: \"ga\",\n            ギ: \"gi\",\n            グ: \"gu\",\n            ゲ: \"ge\",\n            ゴ: \"go\",\n\n            ざ: \"za\",\n            じ: \"zi\",\n            ず: \"zu\",\n            ぜ: \"ze\",\n            ぞ: \"zo\",\n            ザ: \"za\",\n            ジ: \"zi\",\n            ズ: \"zu\",\n            ゼ: \"ze\",\n            ゾ: \"zo\",\n\n            だ: \"da\",\n            ぢ: \"di\",\n            づ: \"du\",\n            で: \"de\",\n            ど: \"do\",\n            ダ: \"da\",\n            ヂ: \"di\",\n            ヅ: \"du\",\n            デ: \"de\",\n            ド: \"do\",\n\n            ば: \"ba\",\n            び: \"bi\",\n            ぶ: \"bu\",\n            べ: \"be\",\n            ぼ: \"bo\",\n            バ: \"ba\",\n            ビ: \"bi\",\n            ブ: \"bu\",\n            ベ: \"be\",\n            ボ: \"bo\",\n\n            ぱ: \"pa\",\n            ぴ: \"pi\",\n            ぷ: \"pu\",\n            ぺ: \"pe\",\n            ぽ: \"po\",\n            パ: \"pa\",\n            ピ: \"pi\",\n            プ: \"pu\",\n            ペ: \"pe\",\n            ポ: \"po\",\n\n            // 拗音-清音(キャ～リョ)\n            きゃ: \"kya\",\n            きゅ: \"kyu\",\n            きょ: \"kyo\",\n            しゃ: \"sya\",\n            しゅ: \"syu\",\n            しょ: \"syo\",\n            ちゃ: \"tya\",\n            ちゅ: \"tyu\",\n            ちょ: \"tyo\",\n            にゃ: \"nya\",\n            にゅ: \"nyu\",\n            にょ: \"nyo\",\n            ひゃ: \"hya\",\n            ひゅ: \"hyu\",\n            ひょ: \"hyo\",\n            みゃ: \"mya\",\n            みゅ: \"myu\",\n            みょ: \"myo\",\n            りゃ: \"rya\",\n            りゅ: \"ryu\",\n            りょ: \"ryo\",\n            キャ: \"kya\",\n            キュ: \"kyu\",\n            キョ: \"kyo\",\n            シャ: \"sya\",\n            シュ: \"syu\",\n            ショ: \"syo\",\n            チャ: \"tya\",\n            チュ: \"tyu\",\n            チョ: \"tyo\",\n            ニャ: \"nya\",\n            ニュ: \"nyu\",\n            ニョ: \"nyo\",\n            ヒャ: \"hya\",\n            ヒュ: \"hyu\",\n            ヒョ: \"hyo\",\n            ミャ: \"mya\",\n            ミュ: \"myu\",\n            ミョ: \"myo\",\n            リャ: \"rya\",\n            リュ: \"ryu\",\n            リョ: \"ryo\",\n\n            // 拗音-濁音(ギャ～ビョ)、半濁音(ピャ～ピョ)、合拗音(クヮ、グヮ)\n            ぎゃ: \"gya\",\n            ぎゅ: \"gyu\",\n            ぎょ: \"gyo\",\n            じゃ: \"zya\",\n            じゅ: \"zyu\",\n            じょ: \"zyo\",\n            ぢゃ: \"dya\",\n            ぢゅ: \"dyu\",\n            ぢょ: \"dyo\",\n            びゃ: \"bya\",\n            びゅ: \"byu\",\n            びょ: \"byo\",\n            ぴゃ: \"pya\",\n            ぴゅ: \"pyu\",\n            ぴょ: \"pyo\",\n            くゎ: \"kwa\",\n            ぐゎ: \"gwa\",\n            ギャ: \"gya\",\n            ギュ: \"gyu\",\n            ギョ: \"gyo\",\n            ジャ: \"zya\",\n            ジュ: \"zyu\",\n            ジョ: \"zyo\",\n            ヂャ: \"dya\",\n            ヂュ: \"dyu\",\n            ヂョ: \"dyo\",\n            ビャ: \"bya\",\n            ビュ: \"byu\",\n            ビョ: \"byo\",\n            ピャ: \"pya\",\n            ピュ: \"pyu\",\n            ピョ: \"pyo\",\n            クヮ: \"kwa\",\n            グヮ: \"gwa\",\n\n            // 小書きの仮名、符号\n            ぁ: \"a\",\n            ぃ: \"i\",\n            ぅ: \"u\",\n            ぇ: \"e\",\n            ぉ: \"o\",\n            ゃ: \"ya\",\n            ゅ: \"yu\",\n            ょ: \"yo\",\n            ゎ: \"wa\",\n            ァ: \"a\",\n            ィ: \"i\",\n            ゥ: \"u\",\n            ェ: \"e\",\n            ォ: \"o\",\n            ャ: \"ya\",\n            ュ: \"yu\",\n            ョ: \"yo\",\n            ヮ: \"wa\",\n            ヵ: \"ka\",\n            ヶ: \"ke\",\n            ん: \"n\",\n            ン: \"n\",\n            // ー: \"\",\n            \"　\": \" \",\n\n            // 外来音(イェ～グォ)\n            いぇ: \"ye\",\n            // うぃ: \"\",\n            // うぇ: \"\",\n            // うぉ: \"\",\n            きぇ: \"kye\",\n            // くぁ: \"\",\n            くぃ: \"kwi\",\n            くぇ: \"kwe\",\n            くぉ: \"kwo\",\n            // ぐぁ: \"\",\n            ぐぃ: \"gwi\",\n            ぐぇ: \"gwe\",\n            ぐぉ: \"gwo\",\n            イェ: \"ye\",\n            // ウィ: \"\",\n            // ウェ: \"\",\n            // ウォ: \"\",\n            // ヴ: \"\",\n            // ヴァ: \"\",\n            // ヴィ: \"\",\n            // ヴェ: \"\",\n            // ヴォ: \"\",\n            // ヴュ: \"\",\n            // ヴョ: \"\",\n            キェ: \"kye\",\n            // クァ: \"\",\n            クィ: \"kwi\",\n            クェ: \"kwe\",\n            クォ: \"kwo\",\n            // グァ: \"\",\n            グィ: \"gwi\",\n            グェ: \"gwe\",\n            グォ: \"gwo\",\n\n            // 外来音(シェ～フョ)\n            しぇ: \"sye\",\n            じぇ: \"zye\",\n            すぃ: \"swi\",\n            ずぃ: \"zwi\",\n            ちぇ: \"tye\",\n            つぁ: \"twa\",\n            つぃ: \"twi\",\n            つぇ: \"twe\",\n            つぉ: \"two\",\n            // てぃ: \"ti\",\n            // てゅ: \"tyu\",\n            // でぃ: \"di\",\n            // でゅ: \"dyu\",\n            // とぅ: \"tu\",\n            // どぅ: \"du\",\n            にぇ: \"nye\",\n            ひぇ: \"hye\",\n            ふぁ: \"hwa\",\n            ふぃ: \"hwi\",\n            ふぇ: \"hwe\",\n            ふぉ: \"hwo\",\n            ふゅ: \"hwyu\",\n            ふょ: \"hwyo\",\n            シェ: \"sye\",\n            ジェ: \"zye\",\n            スィ: \"swi\",\n            ズィ: \"zwi\",\n            チェ: \"tye\",\n            ツァ: \"twa\",\n            ツィ: \"twi\",\n            ツェ: \"twe\",\n            ツォ: \"two\",\n            // ティ: \"ti\",\n            // テュ: \"tyu\",\n            // ディ: \"di\",\n            // デュ: \"dyu\",\n            // トゥ: \"tu\",\n            // ドゥ: \"du\",\n            ニェ: \"nye\",\n            ヒェ: \"hye\",\n            ファ: \"hwa\",\n            フィ: \"hwi\",\n            フェ: \"hwe\",\n            フォ: \"hwo\",\n            フュ: \"hwyu\",\n            フョ: \"hwyo\"\n        },\n        passport: {\n            // 数字と記号\n            \"１\": \"1\",\n            \"２\": \"2\",\n            \"３\": \"3\",\n            \"４\": \"4\",\n            \"５\": \"5\",\n            \"６\": \"6\",\n            \"７\": \"7\",\n            \"８\": \"8\",\n            \"９\": \"9\",\n            \"０\": \"0\",\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            あ: \"a\",\n            い: \"i\",\n            う: \"u\",\n            え: \"e\",\n            お: \"o\",\n            ア: \"a\",\n            イ: \"i\",\n            ウ: \"u\",\n            エ: \"e\",\n            オ: \"o\",\n\n            か: \"ka\",\n            き: \"ki\",\n            く: \"ku\",\n            け: \"ke\",\n            こ: \"ko\",\n            カ: \"ka\",\n            キ: \"ki\",\n            ク: \"ku\",\n            ケ: \"ke\",\n            コ: \"ko\",\n\n            さ: \"sa\",\n            し: \"shi\",\n            す: \"su\",\n            せ: \"se\",\n            そ: \"so\",\n            サ: \"sa\",\n            シ: \"shi\",\n            ス: \"su\",\n            セ: \"se\",\n            ソ: \"so\",\n\n            た: \"ta\",\n            ち: \"chi\",\n            つ: \"tsu\",\n            て: \"te\",\n            と: \"to\",\n            タ: \"ta\",\n            チ: \"chi\",\n            ツ: \"tsu\",\n            テ: \"te\",\n            ト: \"to\",\n\n            な: \"na\",\n            に: \"ni\",\n            ぬ: \"nu\",\n            ね: \"ne\",\n            の: \"no\",\n            ナ: \"na\",\n            ニ: \"ni\",\n            ヌ: \"nu\",\n            ネ: \"ne\",\n            ノ: \"no\",\n\n            // 直音-清音(ハ～ヲ)\n            は: \"ha\",\n            ひ: \"hi\",\n            ふ: \"fu\",\n            へ: \"he\",\n            ほ: \"ho\",\n            ハ: \"ha\",\n            ヒ: \"hi\",\n            フ: \"fu\",\n            ヘ: \"he\",\n            ホ: \"ho\",\n\n            ま: \"ma\",\n            み: \"mi\",\n            む: \"mu\",\n            め: \"me\",\n            も: \"mo\",\n            マ: \"ma\",\n            ミ: \"mi\",\n            ム: \"mu\",\n            メ: \"me\",\n            モ: \"mo\",\n\n            や: \"ya\",\n            ゆ: \"yu\",\n            よ: \"yo\",\n            ヤ: \"ya\",\n            ユ: \"yu\",\n            ヨ: \"yo\",\n\n            ら: \"ra\",\n            り: \"ri\",\n            る: \"ru\",\n            れ: \"re\",\n            ろ: \"ro\",\n            ラ: \"ra\",\n            リ: \"ri\",\n            ル: \"ru\",\n            レ: \"re\",\n            ロ: \"ro\",\n\n            わ: \"wa\",\n            ゐ: \"i\",\n            ゑ: \"e\",\n            を: \"o\",\n            ワ: \"wa\",\n            ヰ: \"i\",\n            ヱ: \"e\",\n            ヲ: \"o\",\n\n            // 直音-濁音(ガ～ボ)、半濁音(パ～ポ)\n            が: \"ga\",\n            ぎ: \"gi\",\n            ぐ: \"gu\",\n            げ: \"ge\",\n            ご: \"go\",\n            ガ: \"ga\",\n            ギ: \"gi\",\n            グ: \"gu\",\n            ゲ: \"ge\",\n            ゴ: \"go\",\n\n            ざ: \"za\",\n            じ: \"ji\",\n            ず: \"zu\",\n            ぜ: \"ze\",\n            ぞ: \"zo\",\n            ザ: \"za\",\n            ジ: \"ji\",\n            ズ: \"zu\",\n            ゼ: \"ze\",\n            ゾ: \"zo\",\n\n            だ: \"da\",\n            ぢ: \"ji\",\n            づ: \"zu\",\n            で: \"de\",\n            ど: \"do\",\n            ダ: \"da\",\n            ヂ: \"ji\",\n            ヅ: \"zu\",\n            デ: \"de\",\n            ド: \"do\",\n\n            ば: \"ba\",\n            び: \"bi\",\n            ぶ: \"bu\",\n            べ: \"be\",\n            ぼ: \"bo\",\n            バ: \"ba\",\n            ビ: \"bi\",\n            ブ: \"bu\",\n            ベ: \"be\",\n            ボ: \"bo\",\n\n            ぱ: \"pa\",\n            ぴ: \"pi\",\n            ぷ: \"pu\",\n            ぺ: \"pe\",\n            ぽ: \"po\",\n            パ: \"pa\",\n            ピ: \"pi\",\n            プ: \"pu\",\n            ペ: \"pe\",\n            ポ: \"po\",\n\n            // 拗音-清音(キャ～リョ)\n            きゃ: \"kya\",\n            きゅ: \"kyu\",\n            きょ: \"kyo\",\n            しゃ: \"sha\",\n            しゅ: \"shu\",\n            しょ: \"sho\",\n            ちゃ: \"cha\",\n            ちゅ: \"chu\",\n            ちょ: \"cho\",\n            にゃ: \"nya\",\n            にゅ: \"nyu\",\n            にょ: \"nyo\",\n            ひゃ: \"hya\",\n            ひゅ: \"hyu\",\n            ひょ: \"hyo\",\n            みゃ: \"mya\",\n            みゅ: \"myu\",\n            みょ: \"myo\",\n            りゃ: \"rya\",\n            りゅ: \"ryu\",\n            りょ: \"ryo\",\n            キャ: \"kya\",\n            キュ: \"kyu\",\n            キョ: \"kyo\",\n            シャ: \"sha\",\n            シュ: \"shu\",\n            ショ: \"sho\",\n            チャ: \"cha\",\n            チュ: \"chu\",\n            チョ: \"cho\",\n            ニャ: \"nya\",\n            ニュ: \"nyu\",\n            ニョ: \"nyo\",\n            ヒャ: \"hya\",\n            ヒュ: \"hyu\",\n            ヒョ: \"hyo\",\n            ミャ: \"mya\",\n            ミュ: \"myu\",\n            ミョ: \"myo\",\n            リャ: \"rya\",\n            リュ: \"ryu\",\n            リョ: \"ryo\",\n\n            // 拗音-濁音(ギャ～ビョ)、半濁音(ピャ～ピョ)、合拗音(クヮ、グヮ)\n            ぎゃ: \"gya\",\n            ぎゅ: \"gyu\",\n            ぎょ: \"gyo\",\n            じゃ: \"ja\",\n            じゅ: \"ju\",\n            じょ: \"jo\",\n            ぢゃ: \"ja\",\n            ぢゅ: \"ju\",\n            ぢょ: \"jo\",\n            びゃ: \"bya\",\n            びゅ: \"byu\",\n            びょ: \"byo\",\n            ぴゃ: \"pya\",\n            ぴゅ: \"pyu\",\n            ぴょ: \"pyo\",\n            // くゎ: \"\",\n            // ぐゎ: \"\",\n            ギャ: \"gya\",\n            ギュ: \"gyu\",\n            ギョ: \"gyo\",\n            ジャ: \"ja\",\n            ジュ: \"ju\",\n            ジョ: \"jo\",\n            ヂャ: \"ja\",\n            ヂュ: \"ju\",\n            ヂョ: \"jo\",\n            ビャ: \"bya\",\n            ビュ: \"byu\",\n            ビョ: \"byo\",\n            ピャ: \"pya\",\n            ピュ: \"pyu\",\n            ピョ: \"pyo\",\n            // クヮ: \"\",\n            // グヮ: \"\",\n\n            // 小書きの仮名、符号\n            ぁ: \"a\",\n            ぃ: \"i\",\n            ぅ: \"u\",\n            ぇ: \"e\",\n            ぉ: \"o\",\n            ゃ: \"ya\",\n            ゅ: \"yu\",\n            ょ: \"yo\",\n            ゎ: \"wa\",\n            ァ: \"a\",\n            ィ: \"i\",\n            ゥ: \"u\",\n            ェ: \"e\",\n            ォ: \"o\",\n            ャ: \"ya\",\n            ュ: \"yu\",\n            ョ: \"yo\",\n            ヮ: \"wa\",\n            ヵ: \"ka\",\n            ヶ: \"ke\",\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            ヴ: \"b\"\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        hepburn: {\n            // 数字と記号\n            \"１\": \"1\",\n            \"２\": \"2\",\n            \"３\": \"3\",\n            \"４\": \"4\",\n            \"５\": \"5\",\n            \"６\": \"6\",\n            \"７\": \"7\",\n            \"８\": \"8\",\n            \"９\": \"9\",\n            \"０\": \"0\",\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            あ: \"a\",\n            い: \"i\",\n            う: \"u\",\n            え: \"e\",\n            お: \"o\",\n            ア: \"a\",\n            イ: \"i\",\n            ウ: \"u\",\n            エ: \"e\",\n            オ: \"o\",\n\n            か: \"ka\",\n            き: \"ki\",\n            く: \"ku\",\n            け: \"ke\",\n            こ: \"ko\",\n            カ: \"ka\",\n            キ: \"ki\",\n            ク: \"ku\",\n            ケ: \"ke\",\n            コ: \"ko\",\n\n            さ: \"sa\",\n            し: \"shi\",\n            す: \"su\",\n            せ: \"se\",\n            そ: \"so\",\n            サ: \"sa\",\n            シ: \"shi\",\n            ス: \"su\",\n            セ: \"se\",\n            ソ: \"so\",\n\n            た: \"ta\",\n            ち: \"chi\",\n            つ: \"tsu\",\n            て: \"te\",\n            と: \"to\",\n            タ: \"ta\",\n            チ: \"chi\",\n            ツ: \"tsu\",\n            テ: \"te\",\n            ト: \"to\",\n\n            な: \"na\",\n            に: \"ni\",\n            ぬ: \"nu\",\n            ね: \"ne\",\n            の: \"no\",\n            ナ: \"na\",\n            ニ: \"ni\",\n            ヌ: \"nu\",\n            ネ: \"ne\",\n            ノ: \"no\",\n\n            // 直音-清音(ハ～ヲ)\n            は: \"ha\",\n            ひ: \"hi\",\n            ふ: \"fu\",\n            へ: \"he\",\n            ほ: \"ho\",\n            ハ: \"ha\",\n            ヒ: \"hi\",\n            フ: \"fu\",\n            ヘ: \"he\",\n            ホ: \"ho\",\n\n            ま: \"ma\",\n            み: \"mi\",\n            む: \"mu\",\n            め: \"me\",\n            も: \"mo\",\n            マ: \"ma\",\n            ミ: \"mi\",\n            ム: \"mu\",\n            メ: \"me\",\n            モ: \"mo\",\n\n            や: \"ya\",\n            ゆ: \"yu\",\n            よ: \"yo\",\n            ヤ: \"ya\",\n            ユ: \"yu\",\n            ヨ: \"yo\",\n\n            ら: \"ra\",\n            り: \"ri\",\n            る: \"ru\",\n            れ: \"re\",\n            ろ: \"ro\",\n            ラ: \"ra\",\n            リ: \"ri\",\n            ル: \"ru\",\n            レ: \"re\",\n            ロ: \"ro\",\n\n            わ: \"wa\",\n            ゐ: \"i\",\n            ゑ: \"e\",\n            を: \"o\",\n            ワ: \"wa\",\n            ヰ: \"i\",\n            ヱ: \"e\",\n            ヲ: \"o\",\n\n            // 直音-濁音(ガ～ボ)、半濁音(パ～ポ)\n            が: \"ga\",\n            ぎ: \"gi\",\n            ぐ: \"gu\",\n            げ: \"ge\",\n            ご: \"go\",\n            ガ: \"ga\",\n            ギ: \"gi\",\n            グ: \"gu\",\n            ゲ: \"ge\",\n            ゴ: \"go\",\n\n            ざ: \"za\",\n            じ: \"ji\",\n            ず: \"zu\",\n            ぜ: \"ze\",\n            ぞ: \"zo\",\n            ザ: \"za\",\n            ジ: \"ji\",\n            ズ: \"zu\",\n            ゼ: \"ze\",\n            ゾ: \"zo\",\n\n            だ: \"da\",\n            ぢ: \"ji\",\n            づ: \"zu\",\n            で: \"de\",\n            ど: \"do\",\n            ダ: \"da\",\n            ヂ: \"ji\",\n            ヅ: \"zu\",\n            デ: \"de\",\n            ド: \"do\",\n\n            ば: \"ba\",\n            び: \"bi\",\n            ぶ: \"bu\",\n            べ: \"be\",\n            ぼ: \"bo\",\n            バ: \"ba\",\n            ビ: \"bi\",\n            ブ: \"bu\",\n            ベ: \"be\",\n            ボ: \"bo\",\n\n            ぱ: \"pa\",\n            ぴ: \"pi\",\n            ぷ: \"pu\",\n            ぺ: \"pe\",\n            ぽ: \"po\",\n            パ: \"pa\",\n            ピ: \"pi\",\n            プ: \"pu\",\n            ペ: \"pe\",\n            ポ: \"po\",\n\n            // 拗音-清音(キャ～リョ)\n            きゃ: \"kya\",\n            きゅ: \"kyu\",\n            きょ: \"kyo\",\n            しゃ: \"sha\",\n            しゅ: \"shu\",\n            しょ: \"sho\",\n            ちゃ: \"cha\",\n            ちゅ: \"chu\",\n            ちょ: \"cho\",\n            にゃ: \"nya\",\n            にゅ: \"nyu\",\n            にょ: \"nyo\",\n            ひゃ: \"hya\",\n            ひゅ: \"hyu\",\n            ひょ: \"hyo\",\n            みゃ: \"mya\",\n            みゅ: \"myu\",\n            みょ: \"myo\",\n            りゃ: \"rya\",\n            りゅ: \"ryu\",\n            りょ: \"ryo\",\n            キャ: \"kya\",\n            キュ: \"kyu\",\n            キョ: \"kyo\",\n            シャ: \"sha\",\n            シュ: \"shu\",\n            ショ: \"sho\",\n            チャ: \"cha\",\n            チュ: \"chu\",\n            チョ: \"cho\",\n            ニャ: \"nya\",\n            ニュ: \"nyu\",\n            ニョ: \"nyo\",\n            ヒャ: \"hya\",\n            ヒュ: \"hyu\",\n            ヒョ: \"hyo\",\n            ミャ: \"mya\",\n            ミュ: \"myu\",\n            ミョ: \"myo\",\n            リャ: \"rya\",\n            リュ: \"ryu\",\n            リョ: \"ryo\",\n\n            // 拗音-濁音(ギャ～ビョ)、半濁音(ピャ～ピョ)、合拗音(クヮ、グヮ)\n            ぎゃ: \"gya\",\n            ぎゅ: \"gyu\",\n            ぎょ: \"gyo\",\n            じゃ: \"ja\",\n            じゅ: \"ju\",\n            じょ: \"jo\",\n            ぢゃ: \"ja\",\n            ぢゅ: \"ju\",\n            ぢょ: \"jo\",\n            びゃ: \"bya\",\n            びゅ: \"byu\",\n            びょ: \"byo\",\n            ぴゃ: \"pya\",\n            ぴゅ: \"pyu\",\n            ぴょ: \"pyo\",\n            // くゎ: \"\",\n            // ぐゎ: \"\",\n            ギャ: \"gya\",\n            ギュ: \"gyu\",\n            ギョ: \"gyo\",\n            ジャ: \"ja\",\n            ジュ: \"ju\",\n            ジョ: \"jo\",\n            ヂャ: \"ja\",\n            ヂュ: \"ju\",\n            ヂョ: \"jo\",\n            ビャ: \"bya\",\n            ビュ: \"byu\",\n            ビョ: \"byo\",\n            ピャ: \"pya\",\n            ピュ: \"pyu\",\n            ピョ: \"pyo\",\n            // クヮ: \"\",\n            // グヮ: \"\",\n\n            // 小書きの仮名、符号\n            ぁ: \"a\",\n            ぃ: \"i\",\n            ぅ: \"u\",\n            ぇ: \"e\",\n            ぉ: \"o\",\n            ゃ: \"ya\",\n            ゅ: \"yu\",\n            ょ: \"yo\",\n            ゎ: \"wa\",\n            ァ: \"a\",\n            ィ: \"i\",\n            ゥ: \"u\",\n            ェ: \"e\",\n            ォ: \"o\",\n            ャ: \"ya\",\n            ュ: \"yu\",\n            ョ: \"yo\",\n            ヮ: \"wa\",\n            ヵ: \"ka\",\n            ヶ: \"ke\",\n            ん: \"n\",\n            ン: \"n\",\n            // ー: \"\",\n            \"　\": \" \",\n\n            // 外来音(イェ～グォ)\n            いぇ: \"ye\",\n            うぃ: \"wi\",\n            うぇ: \"we\",\n            うぉ: \"wo\",\n            きぇ: \"kye\",\n            くぁ: \"kwa\",\n            くぃ: \"kwi\",\n            くぇ: \"kwe\",\n            くぉ: \"kwo\",\n            ぐぁ: \"gwa\",\n            ぐぃ: \"gwi\",\n            ぐぇ: \"gwe\",\n            ぐぉ: \"gwo\",\n            イェ: \"ye\",\n            ウィ: \"wi\",\n            ウェ: \"we\",\n            ウォ: \"wo\",\n            ヴ: \"vu\",\n            ヴァ: \"va\",\n            ヴィ: \"vi\",\n            ヴェ: \"ve\",\n            ヴォ: \"vo\",\n            ヴュ: \"vyu\",\n            ヴョ: \"vyo\",\n            キェ: \"kye\",\n            クァ: \"kwa\",\n            クィ: \"kwi\",\n            クェ: \"kwe\",\n            クォ: \"kwo\",\n            グァ: \"gwa\",\n            グィ: \"gwi\",\n            グェ: \"gwe\",\n            グォ: \"gwo\",\n\n            // 外来音(シェ～フョ)\n            しぇ: \"she\",\n            じぇ: \"je\",\n            // すぃ: \"\",\n            // ずぃ: \"\",\n            ちぇ: \"che\",\n            つぁ: \"tsa\",\n            つぃ: \"tsi\",\n            つぇ: \"tse\",\n            つぉ: \"tso\",\n            てぃ: \"ti\",\n            てゅ: \"tyu\",\n            でぃ: \"di\",\n            でゅ: \"dyu\",\n            とぅ: \"tu\",\n            どぅ: \"du\",\n            にぇ: \"nye\",\n            ひぇ: \"hye\",\n            ふぁ: \"fa\",\n            ふぃ: \"fi\",\n            ふぇ: \"fe\",\n            ふぉ: \"fo\",\n            ふゅ: \"fyu\",\n            ふょ: \"fyo\",\n            シェ: \"she\",\n            ジェ: \"je\",\n            // スィ: \"\",\n            // ズィ: \"\",\n            チェ: \"che\",\n            ツァ: \"tsa\",\n            ツィ: \"tsi\",\n            ツェ: \"tse\",\n            ツォ: \"tso\",\n            ティ: \"ti\",\n            テュ: \"tyu\",\n            ディ: \"di\",\n            デュ: \"dyu\",\n            トゥ: \"tu\",\n            ドゥ: \"du\",\n            ニェ: \"nye\",\n            ヒェ: \"hye\",\n            ファ: \"fa\",\n            フィ: \"fi\",\n            フェ: \"fe\",\n            フォ: \"fo\",\n            フュ: \"fyu\",\n            フョ: \"fyo\"\n        }\n    };\n\n    const reg_tsu = /(っ|ッ)([bcdfghijklmnopqrstuvwyz])/gm;\n    const reg_xtsu = /っ|ッ/gm;\n\n    let pnt = 0;\n    let ch;\n    let r;\n    let result = \"\";\n\n    // [PASSPORT] 長音省略 「―」の場合\n    if (system === ROMANIZATION_SYSTEM.PASSPORT) {\n        str = str.replace(/ー/gm, \"\");\n    }\n\n    // [NIPPON|HEPBURN] 撥音の特殊表記 a、i、u、e、o、y\n    if (system === ROMANIZATION_SYSTEM.NIPPON || system === ROMANIZATION_SYSTEM.HEPBURN) {\n        const reg_hatu = new RegExp(/(ん|ン)(?=あ|い|う|え|お|ア|イ|ウ|エ|オ|ぁ|ぃ|ぅ|ぇ|ぉ|ァ|ィ|ゥ|ェ|ォ|や|ゆ|よ|ヤ|ユ|ヨ|ゃ|ゅ|ょ|ャ|ュ|ョ)/g);\n        let match;\n        const indices = [];\n        while ((match = reg_hatu.exec(str)) !== null) {\n            indices.push(match.index + 1);\n        }\n        if (indices.length !== 0) {\n            let mStr = \"\";\n            for (let i = 0; i < indices.length; i++) {\n                if (i === 0) {\n                    mStr += `${str.slice(0, indices[i])}'`;\n                }\n                else {\n                    mStr += `${str.slice(indices[i - 1], indices[i])}'`;\n                }\n            }\n            mStr += str.slice(indices[indices.length - 1]);\n            str = mStr;\n        }\n    }\n\n    // [ALL] kana to roman chars\n    const max = str.length;\n    while (pnt <= max) {\n        r = romajiSystem[system][str.substring(pnt, pnt + 2)];\n        if (r) {\n            result += r;\n            pnt += 2;\n        }\n        else {\n            ch = str.substring(pnt, pnt + 1);\n            r = romajiSystem[system][ch];\n            result += r ? r : ch;\n            pnt += 1;\n        }\n    }\n    result = result.replace(reg_tsu, \"$2$2\");\n\n    // [PASSPORT|HEPBURN] 子音を重ねて特殊表記\n    if (system === ROMANIZATION_SYSTEM.PASSPORT || system === ROMANIZATION_SYSTEM.HEPBURN) {\n        result = result.replace(/cc/gm, \"tc\");\n    }\n\n    result = result.replace(reg_xtsu, \"tsu\");\n\n    // [PASSPORT|HEPBURN] 撥音の特殊表記 b、m、p\n    if (system === ROMANIZATION_SYSTEM.PASSPORT || system === ROMANIZATION_SYSTEM.HEPBURN) {\n        result = result.replace(/nm/gm, \"mm\");\n        result = result.replace(/nb/gm, \"mb\");\n        result = result.replace(/np/gm, \"mp\");\n    }\n\n    // [NIPPON] 長音変換\n    if (system === ROMANIZATION_SYSTEM.NIPPON) {\n        result = result.replace(/aー/gm, \"â\");\n        result = result.replace(/iー/gm, \"î\");\n        result = result.replace(/uー/gm, \"û\");\n        result = result.replace(/eー/gm, \"ê\");\n        result = result.replace(/oー/gm, \"ô\");\n    }\n\n    // [HEPBURN] 長音変換\n    if (system === ROMANIZATION_SYSTEM.HEPBURN) {\n        result = result.replace(/aー/gm, \"ā\");\n        result = result.replace(/iー/gm, \"ī\");\n        result = result.replace(/uー/gm, \"ū\");\n        result = result.replace(/eー/gm, \"ē\");\n        result = result.replace(/oー/gm, \"ō\");\n    }\n\n    return result;\n};\n\n/**\n * Get the type of given string\n *\n * @param {string} str Given string\n * @return {number} Type number. 0 for pure kanji, 1 for kanji-kana-mixed, 2 for pure kana, 3 for others\n */\nconst getStrType = function (str: string) {\n    let hasKJ = false;\n    let hasHK = false;\n    for (let i = 0; i < str.length; i++) {\n        if (isKanji(str[i])) {\n            hasKJ = true;\n        }\n        else if (isHiragana(str[i]) || isKatakana(str[i])) {\n            hasHK = true;\n        }\n    }\n    if (hasKJ && hasHK) return 1;\n    if (hasKJ) return 0;\n    if (hasHK) return 2;\n    return 3;\n};\n\n/**\n * Patch tokens for conversion\n * @param {Object} tokens Given tokens\n * @return {Object} Patched tokens\n */\nconst patchTokens = function (tokens: Token[]): Token[] {\n    const result: Token[] = tokens.map(t => ({ ...t }));\n\n    // patch for token structure\n    for (let cr = 0; cr < result.length; cr++) {\n        if (hasJapanese(result[cr].surface_form)) {\n            if (!result[cr].reading) {\n                if (result[cr].surface_form.split(\"\").every(isKana)) {\n                    result[cr].reading = toRawKatakana(result[cr].surface_form);\n                }\n                else {\n                    result[cr].reading = result[cr].surface_form;\n                }\n            }\n            else if (hasHiragana(result[cr].reading!)) {\n                result[cr].reading = toRawKatakana(result[cr].reading!);\n            }\n        }\n        else {\n            result[cr].reading = result[cr].surface_form;\n        }\n    }\n\n    // patch for 助動詞\"う\" after 動詞\n    for (let i = 0; i < result.length; i++) {\n        if (result[i].pos && result[i].pos === \"助動詞\" && (result[i].surface_form === \"う\" || result[i].surface_form === \"ウ\")) {\n            if (i - 1 >= 0 && result[i - 1].pos && result[i - 1].pos === \"動詞\") {\n                result[i - 1].surface_form += \"う\";\n                if (result[i - 1].pronunciation) {\n                    result[i - 1].pronunciation += \"ー\";\n                }\n                else {\n                    result[i - 1].pronunciation = `${result[i - 1].reading ?? \"\"}ー`;\n                }\n                result[i - 1].reading = (result[i - 1].reading ?? \"\") + \"ウ\";\n                result.splice(i, 1);\n                i--;\n            }\n        }\n    }\n\n    // patch for \"っ\" at the tail of 動詞、形容詞\n    for (let j = 0; j < result.length; j++) {\n        if (result[j].pos && (result[j].pos === \"動詞\" || result[j].pos === \"形容詞\") && result[j].surface_form.length > 1 && (result[j].surface_form[result[j].surface_form.length - 1] === \"っ\" || result[j].surface_form[result[j].surface_form.length - 1] === \"ッ\")) {\n            if (j + 1 < result.length) {\n                result[j].surface_form += result[j + 1].surface_form;\n                if (result[j].pronunciation) {\n                    result[j].pronunciation += result[j + 1].pronunciation ?? \"\";\n                }\n                else {\n                    result[j].pronunciation = `${result[j].reading ?? \"\"}${result[j + 1].reading ?? \"\"}`;\n                }\n                result[j].reading = (result[j].reading ?? \"\") + (result[j + 1].reading ?? \"\");\n                result.splice(j + 1, 1);\n                j--;\n            }\n        }\n    }\n\n    return result;\n};\n\n/**\n * Convert kana to hiragana\n *\n * @param {string} str Given string\n * @return {string} Hiragana string\n */\nconst kanaToHiragana = function (str: string) {\n    return toRawHiragana(str);\n};\n\n/**\n * Convert kana to hiragana\n *\n * @deprecated Misspelled legacy name. Use {@link kanaToHiragana} instead. Will be removed in the next major version.\n * @param {string} str Given string\n * @return {string} Hiragana string\n */\nconst kanaToHiragna = kanaToHiragana;\n\n/**\n * Convert kana to katakana\n *\n * @param {string} str Given string\n * @return {string} Katakana string\n */\nconst kanaToKatakana = function (str: string) {\n    return toRawKatakana(str);\n};\n\n/**\n * Convert kana to romaji\n *\n * @param {string} str Given string\n * @param {string} system To which romanization system the given string is converted. [\"nippon\"|\"passport\"|\"hepburn\"]\n * @return {string} Romaji string\n */\nconst kanaToRomaji = function (str: string, system?: string) {\n    return toRawRomaji(str, system);\n};\n\nexport {\n    // language\n    ROMANIZATION_SYSTEM,\n    getStrType,\n    patchTokens,\n    isHiragana,\n    isKatakana,\n    isKana,\n    isKanji,\n    isJapanese,\n    hasHiragana,\n    hasKatakana,\n    hasKana,\n    hasKanji,\n    hasJapanese,\n    toRawHiragana,\n    toRawKatakana,\n    toRawRomaji,\n    kanaToHiragana,\n    kanaToHiragna,\n    kanaToKatakana,\n    kanaToRomaji\n};\n","import {\n    ROMANIZATION_SYSTEM,\n    getStrType,\n    patchTokens,\n    isHiragana,\n    isKatakana,\n    isKana,\n    isKanji,\n    isJapanese,\n    hasHiragana,\n    hasKatakana,\n    hasKana,\n    hasKanji,\n    hasJapanese,\n    toRawHiragana,\n    toRawKatakana,\n    toRawRomaji,\n    kanaToHiragana,\n    kanaToHiragna,\n    kanaToKatakana,\n    kanaToRomaji\n} from \"./util.js\";\nimport type { Analyzer, ConvertOptions, FuriganaMapResult, FuriganaSegment, Token } from \"./types.js\";\n\n/**\n * Internal notation tuple produced while building okurigana/furigana output.\n * type: 1 = kanji, 2 = kana, 3 = others\n */\ntype NotationType = 1 | 2 | 3;\ntype Notation = [base: string, type: NotationType, hiragana: string, pronunciation: string];\n\nconst escapeRegExp = (s: string) => s.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n\nconst Util = {\n    isHiragana,\n    isKatakana,\n    isKana,\n    isKanji,\n    isJapanese,\n    hasHiragana,\n    hasKatakana,\n    hasKana,\n    hasKanji,\n    hasJapanese,\n    kanaToHiragana,\n    /** @deprecated Misspelled legacy name. Use kanaToHiragana instead. Will be removed in the next major version. */\n    kanaToHiragna,\n    kanaToKatakana,\n    kanaToRomaji\n};\n\n/**\n * Kuroshiro Class\n */\nclass Kuroshiro {\n    static Util = Util;\n    private _analyzer: Analyzer | null = null;\n    private _furiganaMapDeprecationWarned = false;\n\n    /**\n     * Initialize Kuroshiro\n     * @memberOf Kuroshiro\n     * @instance\n     * @returns {Promise} Promise object represents the result of initialization\n     */\n    async init(analyzer: Analyzer): Promise<void> {\n        if (!analyzer || typeof analyzer !== \"object\" || typeof analyzer.init !== \"function\" || typeof analyzer.parse !== \"function\") {\n            throw new Error(\"Invalid initialization parameter.\");\n        }\n        else if (this._analyzer == null) {\n            await analyzer.init();\n            this._analyzer = analyzer;\n        }\n        else {\n            throw new Error(\"Kuroshiro has already been initialized.\");\n        }\n    }\n\n    /**\n     * Convert given string to target syllabary with options available\n     * @memberOf Kuroshiro\n     * @instance\n     * @param {string} str Given String\n     * @param {Object} [options] Settings Object\n     * @param {string} [options.to=\"hiragana\"] Target syllabary [\"hiragana\"|\"katakana\"|\"romaji\"]\n     * @param {string} [options.mode=\"normal\"] Convert mode [\"normal\"|\"spaced\"|\"okurigana\"|\"furigana\"]\n     * @param {string} [options.includeKatakana=false] Whether to include Katakana in Furigana mode\n     * @param {string} [options.romajiSystem=\"hepburn\"] Romanization System [\"nippon\"|\"passport\"|\"hepburn\"]\n     * @param {string} [options.delimiter_start=\"(\"] Delimiter(Start)\n     * @param {string} [options.delimiter_end=\")\"] Delimiter(End)\n     * @returns {Promise} Promise object represents the result of conversion\n     */\n    async convert(str: string, options?: ConvertOptions): Promise<string | FuriganaMapResult | FuriganaSegment[]> {\n        options = options || {};\n        options.to = options.to || \"hiragana\";\n        options.mode = options.mode || \"normal\";\n        options.includeKatakana = options.includeKatakana || false;\n        options.romajiSystem = options.romajiSystem || ROMANIZATION_SYSTEM.HEPBURN;\n        options.delimiter_start = options.delimiter_start || \"(\";\n        options.delimiter_end = options.delimiter_end || \")\";\n        str = str || \"\";\n\n        if ([\"hiragana\", \"katakana\", \"romaji\"].indexOf(options.to) === -1) {\n            throw new Error(\"Invalid Target Syllabary.\");\n        }\n\n        if ([\"normal\", \"spaced\", \"okurigana\", \"furigana\", \"furigana_segments\", \"furigana_map\"].indexOf(options.mode) === -1) {\n            throw new Error(\"Invalid Conversion Mode.\");\n        }\n\n        const ROMAJI_SYSTEMS = Object.keys(ROMANIZATION_SYSTEM).map(e => ROMANIZATION_SYSTEM[e as keyof typeof ROMANIZATION_SYSTEM]);\n        if (ROMAJI_SYSTEMS.indexOf(options.romajiSystem) === -1) {\n            throw new Error(\"Invalid Romanization System.\");\n        }\n\n        if (this._analyzer === null) {\n            throw new Error(\"Kuroshiro has not been initialized. Please call init() first.\");\n        }\n        const rawTokens = await this._analyzer.parse(str);\n        type PatchedToken = Token & { reading: string };\n        const tokens = patchTokens(rawTokens) as PatchedToken[];\n\n        if (options.mode === \"normal\" || options.mode === \"spaced\") {\n            switch (options.to) {\n                case \"katakana\":\n                    if (options.mode === \"normal\") {\n                        return tokens.map(token => token.reading).join(\"\");\n                    }\n                    return tokens.map(token => token.reading).join(\" \");\n                case \"romaji\": {\n                    const romajiConv = (token: any) => {\n                        let preToken;\n                        if (hasJapanese(token.surface_form)) {\n                            preToken = token.pronunciation || token.reading;\n                        }\n                        else {\n                            preToken = token.surface_form;\n                        }\n                        return toRawRomaji(preToken, options.romajiSystem);\n                    };\n                    if (options.mode === \"normal\") {\n                        return tokens.map(romajiConv).join(\"\");\n                    }\n                    return tokens.map(romajiConv).join(\" \");\n                }\n                case \"hiragana\":\n                    for (let hi = 0; hi < tokens.length; hi++) {\n                        if (hasKanji(tokens[hi].surface_form)) {\n                            if (!hasKatakana(tokens[hi].surface_form)) {\n                                tokens[hi].reading = toRawHiragana(tokens[hi].reading);\n                            }\n                            else {\n                                // handle katakana-kanji-mixed tokens\n                                tokens[hi].reading = toRawHiragana(tokens[hi].reading);\n                                let tmp = \"\";\n                                let hpattern = \"\";\n                                for (let hc = 0; hc < tokens[hi].surface_form.length; hc++) {\n                                    if (isKanji(tokens[hi].surface_form[hc])) {\n                                        hpattern += \"(.*)\";\n                                    }\n                                    else {\n                                        hpattern += isKatakana(tokens[hi].surface_form[hc]) ? toRawHiragana(tokens[hi].surface_form[hc]) : escapeRegExp(tokens[hi].surface_form[hc]);\n                                    }\n                                }\n                                const hreg = new RegExp(hpattern);\n                                const hmatches = hreg.exec(tokens[hi].reading);\n                                if (hmatches) {\n                                    let pickKJ = 0;\n                                    for (let hc1 = 0; hc1 < tokens[hi].surface_form.length; hc1++) {\n                                        if (isKanji(tokens[hi].surface_form[hc1])) {\n                                            tmp += hmatches[pickKJ + 1];\n                                            pickKJ++;\n                                        }\n                                        else {\n                                            tmp += tokens[hi].surface_form[hc1];\n                                        }\n                                    }\n                                    tokens[hi].reading = tmp;\n                                }\n                            }\n                        }\n                        else {\n                            tokens[hi].reading = tokens[hi].surface_form;\n                        }\n                    }\n                    if (options.mode === \"normal\") {\n                        return tokens.map(token => token.reading).join(\"\");\n                    }\n                    return tokens.map(token => token.reading).join(\" \");\n                default:\n                    throw new Error(\"Unknown option.to param\");\n            }\n        }\n        else if (options.mode === \"okurigana\" || options.mode === \"furigana\" || options.mode === \"furigana_segments\" || options.mode === \"furigana_map\") {\n            const notations: Notation[] = [];\n            for (let i = 0; i < tokens.length; i++) {\n                const strType = getStrType(tokens[i].surface_form);\n                switch (strType) {\n                    case 0:\n                        notations.push([tokens[i].surface_form, 1, toRawHiragana(tokens[i].reading), tokens[i].pronunciation || tokens[i].reading]);\n                        break;\n                    case 1: {\n                        let pattern = \"\";\n                        let isLastTokenKanji = false;\n                        const subs = []; // recognize kanjis and group them\n                        for (let c = 0; c < tokens[i].surface_form.length; c++) {\n                            if (isKanji(tokens[i].surface_form[c])) {\n                                if (!isLastTokenKanji) { // ignore successive kanji tokens (#10)\n                                    isLastTokenKanji = true;\n                                    pattern += \"(.+)\";\n                                    subs.push(tokens[i].surface_form[c]);\n                                }\n                                else {\n                                    subs[subs.length - 1] += tokens[i].surface_form[c];\n                                }\n                            }\n                            else {\n                                isLastTokenKanji = false;\n                                subs.push(tokens[i].surface_form[c]);\n                                pattern += isKatakana(tokens[i].surface_form[c]) ? toRawHiragana(tokens[i].surface_form[c]) : escapeRegExp(tokens[i].surface_form[c]);\n                            }\n                        }\n                        const reg = new RegExp(`^${pattern}$`);\n                        const matches = reg.exec(toRawHiragana(tokens[i].reading));\n                        if (matches) {\n                            let pickKanji = 1;\n                            for (let c1 = 0; c1 < subs.length; c1++) {\n                                if (isKanji(subs[c1][0])) {\n                                    notations.push([subs[c1], 1, matches[pickKanji], toRawKatakana(matches[pickKanji])]);\n                                    pickKanji += 1;\n                                }\n                                else {\n                                    notations.push([subs[c1], 2, toRawHiragana(subs[c1]), toRawKatakana(subs[c1])]);\n                                }\n                            }\n                        }\n                        else {\n                            notations.push([tokens[i].surface_form, 1, toRawHiragana(tokens[i].reading), tokens[i].pronunciation || tokens[i].reading]);\n                        }\n                        break;\n                    }\n                    case 2:\n                        for (let c2 = 0; c2 < tokens[i].surface_form.length; c2++) {\n                            notations.push([tokens[i].surface_form[c2], 2, toRawHiragana(tokens[i].reading[c2]), tokens[i].pronunciation?.[c2] ?? tokens[i].reading[c2]]);\n                        }\n                        break;\n                    case 3:\n                        for (let c3 = 0; c3 < tokens[i].surface_form.length; c3++) {\n                            notations.push([tokens[i].surface_form[c3], 3, tokens[i].surface_form[c3], tokens[i].surface_form[c3]]);\n                        }\n                        break;\n                    default:\n                        throw new Error(\"Unknown strType\");\n                }\n            }\n            // Compute the ruby reading for a notation, or undefined when it carries none.\n            const rubyFor = (notation: Notation): string | undefined => {\n                const base = notation[0];\n                const typ = notation[1]; // 1=kanji, 2=kana, 3=others\n                const hira = notation[2];\n                const pron = notation[3];\n\n                let shouldRuby = false;\n                if (typ === 1) {\n                    shouldRuby = true; // kanji always get ruby\n                }\n                else if (typ === 2) {\n                    const isKatakanaLocal = base !== hira; // katakana differs from its hiragana form\n                    shouldRuby = !!options.includeKatakana && isKatakanaLocal;\n                }\n                if (!shouldRuby) return undefined;\n\n                switch (options.to) {\n                    case \"katakana\":\n                        return toRawKatakana(hira);\n                    case \"romaji\":\n                        return toRawRomaji(pron, options.romajiSystem);\n                    case \"hiragana\":\n                    default:\n                        return hira;\n                }\n            };\n\n            // Structured segment list: [{ text, ruby? }, ...]\n            if (options.mode === \"furigana_segments\") {\n                const isNewline = (ch: string) => ch === \"\\n\" || ch === \"\\r\";\n                const segments: FuriganaSegment[] = [];\n                for (let n = 0; n < notations.length; n++) {\n                    const base = notations[n][0];\n                    const ruby = rubyFor(notations[n]);\n                    if (ruby !== undefined) {\n                        segments.push({ text: base, ruby });\n                        continue;\n                    }\n                    // Ruby-less text: merge with the previous ruby-less run of the\n                    // same kind (newline vs non-newline); newlines never merge with text.\n                    const nl = isNewline(base[base.length - 1]);\n                    const last = segments[segments.length - 1];\n                    if (last && last.ruby === undefined && isNewline(last.text[last.text.length - 1]) === nl) {\n                        last.text += base;\n                    }\n                    else {\n                        segments.push({ text: base });\n                    }\n                }\n                return segments;\n            }\n\n            // Special mode: return structured ruby span map { text, ruby: [{s,e,rt}] }\n            // @deprecated Use \"furigana_segments\" instead; will be removed in the next major version.\n            if (options.mode === \"furigana_map\") {\n                if (!this._furiganaMapDeprecationWarned) {\n                    this._furiganaMapDeprecationWarned = true;\n                    console.warn(\"[kuroshiro-enhance] mode \\\"furigana_map\\\" is deprecated and will be removed in the next major version; use \\\"furigana_segments\\\" instead.\");\n                }\n                let text = \"\";\n                const ruby = [];\n                let cursor = 0;\n                for (let n = 0; n < notations.length; n++) {\n                    const base = notations[n][0];\n                    const start = cursor;\n                    const end = start + base.length;\n\n                    const rt = rubyFor(notations[n]);\n                    if (rt !== undefined) {\n                        ruby.push({ s: start, e: end, rt });\n                    }\n\n                    text += base;\n                    cursor = end;\n                }\n                return { text, ruby };\n            }\n\n            let result = \"\";\n            switch (options.to) {\n                case \"katakana\":\n                    if (options.mode === \"okurigana\") {\n                        for (let n0 = 0; n0 < notations.length; n0++) {\n                            if (notations[n0][1] !== 1) {\n                                result += notations[n0][0];\n                            }\n                            else {\n                                result += notations[n0][0] + options.delimiter_start + toRawKatakana(notations[n0][2]) + options.delimiter_end;\n                            }\n                        }\n                    }\n                    else { // furigana\n                        for (let n1 = 0; n1 < notations.length; n1++) {\n                            if (notations[n1][1] !== 1) {\n                                result += notations[n1][0];\n                            }\n                            else {\n                                result += `<ruby>${notations[n1][0]}<rp>${options.delimiter_start}</rp><rt>${toRawKatakana(notations[n1][2])}</rt><rp>${options.delimiter_end}</rp></ruby>`;\n                            }\n                        }\n                    }\n                    return result;\n                case \"romaji\":\n                    if (options.mode === \"okurigana\") {\n                        for (let n2 = 0; n2 < notations.length; n2++) {\n                            if (notations[n2][1] !== 1) {\n                                result += notations[n2][0];\n                            }\n                            else {\n                                result += notations[n2][0] + options.delimiter_start + toRawRomaji(notations[n2][3], options.romajiSystem) + options.delimiter_end;\n                            }\n                        }\n                    }\n                    else { // furigana\n                        for (let n3 = 0; n3 < notations.length; n3++) {\n                            if (notations[n3][1] === 3) {\n                                // For non-Japanese characters (like punctuation), don't add ruby\n                                result += notations[n3][0];\n                            }\n                            else {\n                                // For all Japanese characters (kanji and kana), add ruby with romaji\n                                result += `<ruby>${notations[n3][0]}<rp>${options.delimiter_start}</rp><rt>${toRawRomaji(notations[n3][3], options.romajiSystem)}</rt><rp>${options.delimiter_end}</rp></ruby>`;\n                            }\n                        }\n                    }\n                    return result;\n                case \"hiragana\":\n                    if (options.mode === \"okurigana\") {\n                        for (let n4 = 0; n4 < notations.length; n4++) {\n                            if (notations[n4][1] !== 1) {\n                                result += notations[n4][0];\n                            }\n                            else {\n                                result += notations[n4][0] + options.delimiter_start + notations[n4][2] + options.delimiter_end;\n                            }\n                        }\n                    }\n                    else { // furigana\n                        for (let n5 = 0; n5 < notations.length; n5++) {\n                            const isKatakanaLocal = notations[n5][0] !== notations[n5][2];\n                            const shouldUseRuby = (options.includeKatakana && isKatakanaLocal);\n\n                            const isKanjiLocal = notations[n5][1] === 1;\n\n                            if (shouldUseRuby || isKanjiLocal) {\n                                result += `<ruby>${notations[n5][0]}<rp>${options.delimiter_start}</rp><rt>${notations[n5][2]}</rt><rp>${options.delimiter_end}</rp></ruby>`;\n                            }\n                            else {\n                                result += notations[n5][0];\n                            }\n                        }\n                    }\n                    return result;\n                default:\n                    throw new Error(\"Invalid Target Syllabary.\");\n            }\n        }\n        throw new Error(\"Invalid Conversion Mode.\");\n    }\n}\n\nexport default Kuroshiro;\n","import Kuroshiro from \"./core\";\n\nexport default Kuroshiro;\nexport * from \"./types\";\n"]}