mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-03-03 06:22:41 -08:00
619 lines
12 KiB
JavaScript
619 lines
12 KiB
JavaScript
/*
|
||
* Copyright (C) 2025 Yomitan Authors
|
||
*
|
||
* This program is free software: you can redistribute it and/or modify
|
||
* it under the terms of the GNU General Public License as published by
|
||
* the Free Software Foundation, either version 3 of the License, or
|
||
* (at your option) any later version.
|
||
*
|
||
* This program is distributed in the hope that it will be useful,
|
||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
* GNU General Public License for more details.
|
||
*
|
||
* You should have received a copy of the GNU General Public License
|
||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||
*/
|
||
|
||
// Mozc's default Romaji to Hiragana list referenced to create ROMAJI_TO_HIRAGANA
|
||
// https://github.com/google/mozc/blob/035668c3452fa98ac09462fd2cf556948964aad7/src/data/preedit/romanji-hiragana.tsv
|
||
export const ROMAJI_TO_HIRAGANA = {
|
||
// Double letters - these **must** always be matched first or further down matches may cause inserting `っ` from double letters to require extra logic
|
||
// There **must** be an entry for every accepted double letter
|
||
// To not disturb further matches, an extra letter must be appended after the `っ`
|
||
'qq': 'っq',
|
||
'vv': 'っv',
|
||
'll': 'っl',
|
||
'xx': 'っx',
|
||
'kk': 'っk',
|
||
'gg': 'っg',
|
||
'ss': 'っs',
|
||
'zz': 'っz',
|
||
'jj': 'っj',
|
||
'tt': 'っt',
|
||
'dd': 'っd',
|
||
'hh': 'っh',
|
||
'ff': 'っf',
|
||
'bb': 'っb',
|
||
'pp': 'っp',
|
||
'mm': 'っm',
|
||
'yy': 'っy',
|
||
'rr': 'っr',
|
||
'ww': 'っw',
|
||
'cc': 'っc',
|
||
|
||
// Length 4 - longest matches
|
||
'hwyu': 'ふゅ',
|
||
'xtsu': 'っ',
|
||
'ltsu': 'っ',
|
||
|
||
// Length 3
|
||
'vya': 'ゔゃ',
|
||
'vyi': 'ゔぃ',
|
||
'vyu': 'ゔゅ',
|
||
'vye': 'ゔぇ',
|
||
'vyo': 'ゔょ',
|
||
'kya': 'きゃ',
|
||
'kyi': 'きぃ',
|
||
'kyu': 'きゅ',
|
||
'kye': 'きぇ',
|
||
'kyo': 'きょ',
|
||
'gya': 'ぎゃ',
|
||
'gyi': 'ぎぃ',
|
||
'gyu': 'ぎゅ',
|
||
'gye': 'ぎぇ',
|
||
'gyo': 'ぎょ',
|
||
'sya': 'しゃ',
|
||
'syi': 'しぃ',
|
||
'syu': 'しゅ',
|
||
'sye': 'しぇ',
|
||
'syo': 'しょ',
|
||
'sha': 'しゃ',
|
||
'shi': 'し',
|
||
'shu': 'しゅ',
|
||
'she': 'しぇ',
|
||
'sho': 'しょ',
|
||
'zya': 'じゃ',
|
||
'zyi': 'じぃ',
|
||
'zyu': 'じゅ',
|
||
'zye': 'じぇ',
|
||
'zyo': 'じょ',
|
||
'tya': 'ちゃ',
|
||
'tyi': 'ちぃ',
|
||
'tyu': 'ちゅ',
|
||
'tye': 'ちぇ',
|
||
'tyo': 'ちょ',
|
||
'cha': 'ちゃ',
|
||
'chi': 'ち',
|
||
'chu': 'ちゅ',
|
||
'che': 'ちぇ',
|
||
'cho': 'ちょ',
|
||
'cya': 'ちゃ',
|
||
'cyi': 'ちぃ',
|
||
'cyu': 'ちゅ',
|
||
'cye': 'ちぇ',
|
||
'cyo': 'ちょ',
|
||
'dya': 'ぢゃ',
|
||
'dyi': 'ぢぃ',
|
||
'dyu': 'ぢゅ',
|
||
'dye': 'ぢぇ',
|
||
'dyo': 'ぢょ',
|
||
'tsa': 'つぁ',
|
||
'tsi': 'つぃ',
|
||
'tse': 'つぇ',
|
||
'tso': 'つぉ',
|
||
'tha': 'てゃ',
|
||
'thi': 'てぃ',
|
||
'thu': 'てゅ',
|
||
'the': 'てぇ',
|
||
'tho': 'てょ',
|
||
'dha': 'でゃ',
|
||
'dhi': 'でぃ',
|
||
'dhu': 'でゅ',
|
||
'dhe': 'でぇ',
|
||
'dho': 'でょ',
|
||
'twa': 'とぁ',
|
||
'twi': 'とぃ',
|
||
'twu': 'とぅ',
|
||
'twe': 'とぇ',
|
||
'two': 'とぉ',
|
||
'dwa': 'どぁ',
|
||
'dwi': 'どぃ',
|
||
'dwu': 'どぅ',
|
||
'dwe': 'どぇ',
|
||
'dwo': 'どぉ',
|
||
'nya': 'にゃ',
|
||
'nyi': 'にぃ',
|
||
'nyu': 'にゅ',
|
||
'nye': 'にぇ',
|
||
'nyo': 'にょ',
|
||
'hya': 'ひゃ',
|
||
'hyi': 'ひぃ',
|
||
'hyu': 'ひゅ',
|
||
'hye': 'ひぇ',
|
||
'hyo': 'ひょ',
|
||
'bya': 'びゃ',
|
||
'byi': 'びぃ',
|
||
'byu': 'びゅ',
|
||
'bye': 'びぇ',
|
||
'byo': 'びょ',
|
||
'pya': 'ぴゃ',
|
||
'pyi': 'ぴぃ',
|
||
'pyu': 'ぴゅ',
|
||
'pye': 'ぴぇ',
|
||
'pyo': 'ぴょ',
|
||
'fya': 'ふゃ',
|
||
'fyu': 'ふゅ',
|
||
'fyo': 'ふょ',
|
||
'hwa': 'ふぁ',
|
||
'hwi': 'ふぃ',
|
||
'hwe': 'ふぇ',
|
||
'hwo': 'ふぉ',
|
||
'mya': 'みゃ',
|
||
'myi': 'みぃ',
|
||
'myu': 'みゅ',
|
||
'mye': 'みぇ',
|
||
'myo': 'みょ',
|
||
'rya': 'りゃ',
|
||
'ryi': 'りぃ',
|
||
'ryu': 'りゅ',
|
||
'rye': 'りぇ',
|
||
'ryo': 'りょ',
|
||
'lyi': 'ぃ',
|
||
'xyi': 'ぃ',
|
||
'lye': 'ぇ',
|
||
'xye': 'ぇ',
|
||
'xka': 'ヵ',
|
||
'xke': 'ヶ',
|
||
'lka': 'ヵ',
|
||
'lke': 'ヶ',
|
||
'kwa': 'くぁ',
|
||
'kwi': 'くぃ',
|
||
'kwu': 'くぅ',
|
||
'kwe': 'くぇ',
|
||
'kwo': 'くぉ',
|
||
'gwa': 'ぐぁ',
|
||
'gwi': 'ぐぃ',
|
||
'gwu': 'ぐぅ',
|
||
'gwe': 'ぐぇ',
|
||
'gwo': 'ぐぉ',
|
||
'swa': 'すぁ',
|
||
'swi': 'すぃ',
|
||
'swu': 'すぅ',
|
||
'swe': 'すぇ',
|
||
'swo': 'すぉ',
|
||
'zwa': 'ずぁ',
|
||
'zwi': 'ずぃ',
|
||
'zwu': 'ずぅ',
|
||
'zwe': 'ずぇ',
|
||
'zwo': 'ずぉ',
|
||
'jya': 'じゃ',
|
||
'jyi': 'じぃ',
|
||
'jyu': 'じゅ',
|
||
'jye': 'じぇ',
|
||
'jyo': 'じょ',
|
||
'tsu': 'つ',
|
||
'xtu': 'っ',
|
||
'ltu': 'っ',
|
||
'xya': 'ゃ',
|
||
'lya': 'ゃ',
|
||
'wyi': 'ゐ',
|
||
'xyu': 'ゅ',
|
||
'lyu': 'ゅ',
|
||
'wye': 'ゑ',
|
||
'xyo': 'ょ',
|
||
'lyo': 'ょ',
|
||
'xwa': 'ゎ',
|
||
'lwa': 'ゎ',
|
||
'wha': 'うぁ',
|
||
'whi': 'うぃ',
|
||
'whu': 'う',
|
||
'whe': 'うぇ',
|
||
'who': 'うぉ',
|
||
|
||
// Length 2
|
||
'nn': 'ん',
|
||
'n\'': 'ん',
|
||
'va': 'ゔぁ',
|
||
'vi': 'ゔぃ',
|
||
'vu': 'ゔ',
|
||
've': 'ゔぇ',
|
||
'vo': 'ゔぉ',
|
||
'fa': 'ふぁ',
|
||
'fi': 'ふぃ',
|
||
'fe': 'ふぇ',
|
||
'fo': 'ふぉ',
|
||
'xn': 'ん',
|
||
'wu': 'う',
|
||
'xa': 'ぁ',
|
||
'xi': 'ぃ',
|
||
'xu': 'ぅ',
|
||
'xe': 'ぇ',
|
||
'xo': 'ぉ',
|
||
'la': 'ぁ',
|
||
'li': 'ぃ',
|
||
'lu': 'ぅ',
|
||
'le': 'ぇ',
|
||
'lo': 'ぉ',
|
||
'ye': 'いぇ',
|
||
'ka': 'か',
|
||
'ki': 'き',
|
||
'ku': 'く',
|
||
'ke': 'け',
|
||
'ko': 'こ',
|
||
'ga': 'が',
|
||
'gi': 'ぎ',
|
||
'gu': 'ぐ',
|
||
'ge': 'げ',
|
||
'go': 'ご',
|
||
'sa': 'さ',
|
||
'si': 'し',
|
||
'su': 'す',
|
||
'se': 'せ',
|
||
'so': 'そ',
|
||
'ca': 'か',
|
||
'ci': 'し',
|
||
'cu': 'く',
|
||
'ce': 'せ',
|
||
'co': 'こ',
|
||
'qa': 'くぁ',
|
||
'qi': 'くぃ',
|
||
'qu': 'く',
|
||
'qe': 'くぇ',
|
||
'qo': 'くぉ',
|
||
'za': 'ざ',
|
||
'zi': 'じ',
|
||
'zu': 'ず',
|
||
'ze': 'ぜ',
|
||
'zo': 'ぞ',
|
||
'ja': 'じゃ',
|
||
'ji': 'じ',
|
||
'ju': 'じゅ',
|
||
'je': 'じぇ',
|
||
'jo': 'じょ',
|
||
'ta': 'た',
|
||
'ti': 'ち',
|
||
'tu': 'つ',
|
||
'te': 'て',
|
||
'to': 'と',
|
||
'da': 'だ',
|
||
'di': 'ぢ',
|
||
'du': 'づ',
|
||
'de': 'で',
|
||
'do': 'ど',
|
||
'na': 'な',
|
||
'ni': 'に',
|
||
'nu': 'ぬ',
|
||
'ne': 'ね',
|
||
'no': 'の',
|
||
'ha': 'は',
|
||
'hi': 'ひ',
|
||
'hu': 'ふ',
|
||
'fu': 'ふ',
|
||
'he': 'へ',
|
||
'ho': 'ほ',
|
||
'ba': 'ば',
|
||
'bi': 'び',
|
||
'bu': 'ぶ',
|
||
'be': 'べ',
|
||
'bo': 'ぼ',
|
||
'pa': 'ぱ',
|
||
'pi': 'ぴ',
|
||
'pu': 'ぷ',
|
||
'pe': 'ぺ',
|
||
'po': 'ぽ',
|
||
'ma': 'ま',
|
||
'mi': 'み',
|
||
'mu': 'む',
|
||
'me': 'め',
|
||
'mo': 'も',
|
||
'ya': 'や',
|
||
'yu': 'ゆ',
|
||
'yo': 'よ',
|
||
'ra': 'ら',
|
||
'ri': 'り',
|
||
'ru': 'る',
|
||
're': 'れ',
|
||
'ro': 'ろ',
|
||
'wa': 'わ',
|
||
'wi': 'うぃ',
|
||
'we': 'うぇ',
|
||
'wo': 'を',
|
||
|
||
// Length 1 - shortest matches
|
||
'a': 'あ',
|
||
'i': 'い',
|
||
'u': 'う',
|
||
'e': 'え',
|
||
'o': 'お',
|
||
|
||
// Length 1 Special/Symbols
|
||
'.': '。',
|
||
',': '、',
|
||
':': ':',
|
||
'/': '・',
|
||
'!': '!',
|
||
'?': '?',
|
||
'~': '〜',
|
||
'-': 'ー',
|
||
'‘': '「',
|
||
'’': '」',
|
||
'“': '『',
|
||
'”': '』',
|
||
'[': '[',
|
||
']': ']',
|
||
'(': '(',
|
||
')': ')',
|
||
'{': '{',
|
||
'}': '}',
|
||
' ': ' ',
|
||
|
||
// n -> ん is a special case.
|
||
'n': 'ん',
|
||
};
|
||
|
||
export const HIRAGANA_TO_ROMAJI = {
|
||
// Length 2
|
||
'んい': 'n\'i',
|
||
'ゔぁ': 'va',
|
||
'ゔぃ': 'vi',
|
||
'ゔぉ': 'vo',
|
||
'ゔゃ': 'vya',
|
||
'ゔゅ': 'vyu',
|
||
'ゔぇ': 've',
|
||
'ゔょ': 'vyo',
|
||
'きゃ': 'kya',
|
||
'きぃ': 'kyi',
|
||
'きゅ': 'kyu',
|
||
'きぇ': 'kye',
|
||
'きょ': 'kyo',
|
||
'ぎゃ': 'gya',
|
||
'ぎぃ': 'gyi',
|
||
'ぎゅ': 'gyu',
|
||
'ぎぇ': 'gye',
|
||
'ぎょ': 'gyo',
|
||
'しゃ': 'sha',
|
||
'しぃ': 'syi',
|
||
'しゅ': 'shu',
|
||
'しぇ': 'she',
|
||
'しょ': 'sho',
|
||
'ちゃ': 'cya',
|
||
'ちゅ': 'chu',
|
||
'ちぇ': 'che',
|
||
'ちょ': 'cho',
|
||
'ちぃ': 'cyi',
|
||
'ぢゃ': 'dya',
|
||
'ぢぃ': 'dyi',
|
||
'ぢゅ': 'dyu',
|
||
'ぢぇ': 'dye',
|
||
'ぢょ': 'dyo',
|
||
'つぁ': 'tsa',
|
||
'つぃ': 'tsi',
|
||
'つぇ': 'tse',
|
||
'つぉ': 'tso',
|
||
'てゃ': 'tha',
|
||
'てぃ': 'thi',
|
||
'てゅ': 'thu',
|
||
'てぇ': 'the',
|
||
'てょ': 'tho',
|
||
'でゃ': 'dha',
|
||
'でぃ': 'dhi',
|
||
'でゅ': 'dhu',
|
||
'でぇ': 'dhe',
|
||
'でょ': 'dho',
|
||
'とぁ': 'twa',
|
||
'とぃ': 'twi',
|
||
'とぅ': 'twu',
|
||
'とぇ': 'twe',
|
||
'とぉ': 'two',
|
||
'どぁ': 'dwa',
|
||
'どぃ': 'dwi',
|
||
'どぅ': 'dwu',
|
||
'どぇ': 'dwe',
|
||
'どぉ': 'dwo',
|
||
'にゃ': 'nya',
|
||
'にぃ': 'nyi',
|
||
'にゅ': 'nyu',
|
||
'にぇ': 'nye',
|
||
'にょ': 'nyo',
|
||
'ひゃ': 'hya',
|
||
'ひぃ': 'hyi',
|
||
'ひゅ': 'hyu',
|
||
'ひぇ': 'hye',
|
||
'ひょ': 'hyo',
|
||
'びゃ': 'bya',
|
||
'びぃ': 'byi',
|
||
'びゅ': 'byu',
|
||
'びぇ': 'bye',
|
||
'びょ': 'byo',
|
||
'ぴゃ': 'pya',
|
||
'ぴぃ': 'pyi',
|
||
'ぴゅ': 'pyu',
|
||
'ぴぇ': 'pye',
|
||
'ぴょ': 'pyo',
|
||
'ふゃ': 'fya',
|
||
'ふょ': 'fyo',
|
||
'ふぁ': 'fa',
|
||
'ふゅ': 'fyu',
|
||
'ふぃ': 'fi',
|
||
'ふぇ': 'fe',
|
||
'ふぉ': 'fo',
|
||
'みゃ': 'mya',
|
||
'みぃ': 'myi',
|
||
'みゅ': 'myu',
|
||
'みぇ': 'mye',
|
||
'みょ': 'myo',
|
||
'りゃ': 'rya',
|
||
'りぃ': 'ryi',
|
||
'りゅ': 'ryu',
|
||
'りぇ': 'rye',
|
||
'りょ': 'ryo',
|
||
'くぁ': 'kwa',
|
||
'くぃ': 'kwi',
|
||
'くぅ': 'kwu',
|
||
'くぇ': 'kwe',
|
||
'くぉ': 'kwo',
|
||
'ぐぁ': 'gwa',
|
||
'ぐぃ': 'gwi',
|
||
'ぐぅ': 'gwu',
|
||
'ぐぇ': 'gwe',
|
||
'ぐぉ': 'gwo',
|
||
'すぁ': 'swa',
|
||
'すぃ': 'swi',
|
||
'すぅ': 'swu',
|
||
'すぇ': 'swe',
|
||
'すぉ': 'swo',
|
||
'ずぁ': 'zwa',
|
||
'ずぃ': 'zwi',
|
||
'ずぅ': 'zwu',
|
||
'ずぇ': 'zwe',
|
||
'ずぉ': 'zwo',
|
||
'じゃ': 'ja',
|
||
'じぃ': 'jyi',
|
||
'じゅ': 'ju',
|
||
'じぇ': 'je',
|
||
'じょ': 'jo',
|
||
'うぁ': 'wha',
|
||
'うぃ': 'wi',
|
||
'うぇ': 'we',
|
||
'うぉ': 'who',
|
||
'いぇ': 'ye',
|
||
|
||
// Length 1
|
||
'ん': 'n',
|
||
'あ': 'a',
|
||
'い': 'i',
|
||
'う': 'u',
|
||
'え': 'e',
|
||
'お': 'o',
|
||
'ゔ': 'vu',
|
||
'か': 'ka',
|
||
'き': 'ki',
|
||
'く': 'ku',
|
||
'け': 'ke',
|
||
'こ': 'ko',
|
||
'が': 'ga',
|
||
'ぎ': 'gi',
|
||
'ぐ': 'gu',
|
||
'げ': 'ge',
|
||
'ご': 'go',
|
||
'さ': 'sa',
|
||
'し': 'shi',
|
||
'す': 'su',
|
||
'せ': 'se',
|
||
'そ': 'so',
|
||
'ざ': 'za',
|
||
'じ': 'ji',
|
||
'ず': 'zu',
|
||
'ぜ': 'ze',
|
||
'ぞ': 'zo',
|
||
'た': 'ta',
|
||
'ち': 'chi',
|
||
'つ': 'tsu',
|
||
'て': 'te',
|
||
'と': 'to',
|
||
'だ': 'da',
|
||
'ぢ': 'di',
|
||
'づ': 'du',
|
||
'で': 'de',
|
||
'ど': 'do',
|
||
'な': 'na',
|
||
'に': 'ni',
|
||
'ぬ': 'nu',
|
||
'ね': 'ne',
|
||
'の': 'no',
|
||
'は': 'ha',
|
||
'ひ': 'hi',
|
||
'ふ': 'fu',
|
||
'へ': 'he',
|
||
'ほ': 'ho',
|
||
'ば': 'ba',
|
||
'び': 'bi',
|
||
'ぶ': 'bu',
|
||
'べ': 'be',
|
||
'ぼ': 'bo',
|
||
'ぱ': 'pa',
|
||
'ぴ': 'pi',
|
||
'ぷ': 'pu',
|
||
'ぺ': 'pe',
|
||
'ぽ': 'po',
|
||
'ま': 'ma',
|
||
'み': 'mi',
|
||
'む': 'mu',
|
||
'め': 'me',
|
||
'も': 'mo',
|
||
'や': 'ya',
|
||
'ゆ': 'yu',
|
||
'よ': 'yo',
|
||
'ら': 'ra',
|
||
'り': 'ri',
|
||
'る': 'ru',
|
||
'れ': 're',
|
||
'ろ': 'ro',
|
||
'わ': 'wa',
|
||
'ゐ': 'wi',
|
||
'ゑ': 'we',
|
||
'を': 'wo',
|
||
|
||
// Length 1 Special/Symbols
|
||
'。': '.',
|
||
'、': ',',
|
||
':': ':',
|
||
'・': '/',
|
||
'!': '!',
|
||
'?': '?',
|
||
'〜': '~',
|
||
'ー': '-',
|
||
'「': '‘',
|
||
'」': '’',
|
||
'『': '“',
|
||
'』': '”',
|
||
'[': '[',
|
||
']': ']',
|
||
'(': '(',
|
||
')': ')',
|
||
'{': '{',
|
||
'}': '}',
|
||
' ': ' ',
|
||
|
||
// Length 1 Small - Even though these are usually represented with `x` or `l` prepending them, in romaji it makes the most sense to not do that
|
||
'ゃ': 'ya',
|
||
'ゅ': 'yu',
|
||
'ょ': 'yo',
|
||
'ゎ': 'wa',
|
||
'ぁ': 'a',
|
||
'ぃ': 'i',
|
||
'ぅ': 'u',
|
||
'ぇ': 'e',
|
||
'ぉ': 'o',
|
||
'ヵ': 'ka',
|
||
'ヶ': 'ke',
|
||
|
||
// Double letters - these **must** always be matched last or they will break previous maches
|
||
'っq': 'qq',
|
||
'っv': 'vv',
|
||
'っx': 'xx',
|
||
'っk': 'kk',
|
||
'っg': 'gg',
|
||
'っs': 'ss',
|
||
'っz': 'zz',
|
||
'っj': 'jj',
|
||
'っt': 'tt',
|
||
'っd': 'dd',
|
||
'っh': 'hh',
|
||
'っf': 'ff',
|
||
'っb': 'bb',
|
||
'っp': 'pp',
|
||
'っm': 'mm',
|
||
'っy': 'yy',
|
||
'っr': 'rr',
|
||
'っw': 'ww',
|
||
'っc': 'cc',
|
||
|
||
// `っん` is a special case
|
||
'っn': 'n',
|
||
|
||
// single `っ` is weird, some converters just remove it, some leave the `っ` in kana, some replace with `xtsu` or `ltsu`
|
||
'っ': '',
|
||
};
|