romaji-fuzzy-search
Version:
Generates a regular expression for "Romaji Fuzzy Search"
324 lines (323 loc) • 12.2 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.indexedRomajiDictionary = exports.romajiDictionary = exports.convertHiraganaToKatakana = void 0;
/**
* ひらがな文字をカタカナ文字へ変換する。
*
* 渡せることを想定しているひらがなは、以下の範囲)
* - http://www.unicode.org/charts/PDF/U3040.pdf の 3041-3094, 309D, 309E 。
* - 正規表現にすると /[ぁ-ゔゝゞ]/ の範囲。
*
* それらを以下のカタカナへ変換する)
* - http://www.unicode.org/charts/PDF/U30A0.pdf の 30A0-30F4, 30FD, 30FE 。
* - 正規表現にすると /[ァ-ヴヽヾ]/ の範囲。
*/
const convertHiraganaToKatakana = (text) => {
let result = '';
let pointer = 0;
let codePoint;
while (codePoint = text.codePointAt(pointer)) {
if (codePoint === undefined) {
break;
}
else if (codePoint < 12353 ||
codePoint > 12436 && codePoint !== 12445 && codePoint !== 12446) {
throw new Error('Can not convert the code point to a katakana.');
}
result += String.fromCodePoint(codePoint + 96);
pointer++;
}
return result;
};
exports.convertHiraganaToKatakana = convertHiraganaToKatakana;
const hiraWithKata = (hiragana) => {
return [hiragana, exports.convertHiraganaToKatakana(hiragana)];
};
exports.romajiDictionary = [
//
// 1 文字
//
['a', ...hiraWithKata('あ')],
['i', ...hiraWithKata('い')],
['u', ...hiraWithKata('う')],
['e', ...hiraWithKata('え')],
['o', ...hiraWithKata('お')],
['n', ...hiraWithKata('ん')],
// TODO: ひらなが・カタカナの分類ではない。
['-', 'ー', 'ー'],
//
// 2 文字
//
['la', ...hiraWithKata('ぁ')],
['li', ...hiraWithKata('ぃ')],
['lu', ...hiraWithKata('ぅ')],
['le', ...hiraWithKata('ぇ')],
['lo', ...hiraWithKata('ぉ')],
['xa', ...hiraWithKata('ぁ')],
['xi', ...hiraWithKata('ぃ')],
['xu', ...hiraWithKata('ぅ')],
['xe', ...hiraWithKata('ぇ')],
['xo', ...hiraWithKata('ぉ')],
['va', ...hiraWithKata('ゔぁ')],
['vi', ...hiraWithKata('ゔぃ')],
['vu', ...hiraWithKata('ゔ')],
['ve', ...hiraWithKata('ゔぇ')],
['vo', ...hiraWithKata('ゔぉ')],
['ka', ...hiraWithKata('か')],
['ki', ...hiraWithKata('き')],
['ku', ...hiraWithKata('く')],
['ke', ...hiraWithKata('け')],
['ko', ...hiraWithKata('こ')],
['qa', ...hiraWithKata('くぁ')],
['qi', ...hiraWithKata('くぃ')],
['qu', ...hiraWithKata('くぅ')],
['qe', ...hiraWithKata('くぇ')],
['qo', ...hiraWithKata('くぉ')],
['ga', ...hiraWithKata('が')],
['gi', ...hiraWithKata('ぎ')],
['gu', ...hiraWithKata('ぐ')],
['ge', ...hiraWithKata('げ')],
['go', ...hiraWithKata('ご')],
['sa', ...hiraWithKata('さ')],
['si', ...hiraWithKata('し')],
['su', ...hiraWithKata('す')],
['se', ...hiraWithKata('せ')],
['so', ...hiraWithKata('そ')],
['za', ...hiraWithKata('ざ')],
['zi', ...hiraWithKata('じ')],
['zu', ...hiraWithKata('ず')],
['ze', ...hiraWithKata('ぜ')],
['zo', ...hiraWithKata('ぞ')],
['ja', ...hiraWithKata('じゃ')],
['ji', ...hiraWithKata('じ')],
['ju', ...hiraWithKata('じゅ')],
['je', ...hiraWithKata('じぇ')],
['jo', ...hiraWithKata('じょ')],
['ta', ...hiraWithKata('た')],
['ti', ...hiraWithKata('ち')],
['tu', ...hiraWithKata('つ')],
['te', ...hiraWithKata('て')],
['to', ...hiraWithKata('と')],
['da', ...hiraWithKata('だ')],
['di', ...hiraWithKata('ぢ')],
['du', ...hiraWithKata('づ')],
['de', ...hiraWithKata('で')],
['do', ...hiraWithKata('ど')],
['na', ...hiraWithKata('な')],
['ni', ...hiraWithKata('に')],
['nu', ...hiraWithKata('ぬ')],
['ne', ...hiraWithKata('ね')],
['no', ...hiraWithKata('の')],
['ha', ...hiraWithKata('は')],
['hi', ...hiraWithKata('ひ')],
['hu', ...hiraWithKata('ふ')],
['he', ...hiraWithKata('へ')],
['ho', ...hiraWithKata('ほ')],
['fa', ...hiraWithKata('ふぁ')],
['fi', ...hiraWithKata('ふぃ')],
['fu', ...hiraWithKata('ふ')],
['fe', ...hiraWithKata('ふぇ')],
['fo', ...hiraWithKata('ふぉ')],
['ba', ...hiraWithKata('ば')],
['bi', ...hiraWithKata('び')],
['bu', ...hiraWithKata('ぶ')],
['be', ...hiraWithKata('べ')],
['bo', ...hiraWithKata('ぼ')],
['pa', ...hiraWithKata('ぱ')],
['pi', ...hiraWithKata('ぴ')],
['pu', ...hiraWithKata('ぷ')],
['pe', ...hiraWithKata('ぺ')],
['po', ...hiraWithKata('ぽ')],
['ma', ...hiraWithKata('ま')],
['mi', ...hiraWithKata('み')],
['mu', ...hiraWithKata('む')],
['me', ...hiraWithKata('め')],
['mo', ...hiraWithKata('も')],
['ya', ...hiraWithKata('や')],
['yu', ...hiraWithKata('ゆ')],
['ye', ...hiraWithKata('いぇ')],
['yo', ...hiraWithKata('よ')],
['ra', ...hiraWithKata('ら')],
['ri', ...hiraWithKata('り')],
['ru', ...hiraWithKata('る')],
['re', ...hiraWithKata('れ')],
['ro', ...hiraWithKata('ろ')],
['wa', ...hiraWithKata('わ')],
['wi', ...hiraWithKata('うぃ')],
['wu', ...hiraWithKata('う')],
['we', ...hiraWithKata('うぇ')],
['wo', ...hiraWithKata('を')],
['nn', ...hiraWithKata('ん')],
//
// 3 文字
//
['vya', ...hiraWithKata('ゔゃ')],
['vyu', ...hiraWithKata('ゔゅ')],
['vye', ...hiraWithKata('ゔょ')],
['kya', ...hiraWithKata('きゃ')],
['kyi', ...hiraWithKata('きぃ')],
['kyu', ...hiraWithKata('きゅ')],
['kye', ...hiraWithKata('きぇ')],
['kyo', ...hiraWithKata('きょ')],
['gya', ...hiraWithKata('ぎゃ')],
['gyi', ...hiraWithKata('ぎぃ')],
['gyu', ...hiraWithKata('ぎゅ')],
['gye', ...hiraWithKata('ぎぇ')],
['gyo', ...hiraWithKata('ぎょ')],
['qya', ...hiraWithKata('くゃ')],
['qyi', ...hiraWithKata('くぃ')],
['qyu', ...hiraWithKata('くゅ')],
['qye', ...hiraWithKata('くぇ')],
['qyo', ...hiraWithKata('くょ')],
['sya', ...hiraWithKata('しゃ')],
['syi', ...hiraWithKata('しぃ')],
['syu', ...hiraWithKata('しゅ')],
['sye', ...hiraWithKata('しぇ')],
['syo', ...hiraWithKata('しょ')],
['sha', ...hiraWithKata('しゃ')],
['shi', ...hiraWithKata('し')],
['shu', ...hiraWithKata('しゅ')],
['she', ...hiraWithKata('しぇ')],
['sho', ...hiraWithKata('しょ')],
['jya', ...hiraWithKata('じゃ')],
['jyi', ...hiraWithKata('じぃ')],
['jyu', ...hiraWithKata('じゅ')],
['jye', ...hiraWithKata('じぇ')],
['jyo', ...hiraWithKata('じょ')],
['zya', ...hiraWithKata('じゃ')],
['zyi', ...hiraWithKata('じぃ')],
['zyu', ...hiraWithKata('じゅ')],
['zye', ...hiraWithKata('じぇ')],
['zyo', ...hiraWithKata('じょ')],
['tya', ...hiraWithKata('ちゃ')],
['tyi', ...hiraWithKata('ちぃ')],
['tyu', ...hiraWithKata('ちゅ')],
['tye', ...hiraWithKata('ちぇ')],
['tyo', ...hiraWithKata('ちょ')],
['cya', ...hiraWithKata('ちゃ')],
['cyi', ...hiraWithKata('ちぃ')],
['cyu', ...hiraWithKata('ちゅ')],
['cye', ...hiraWithKata('ちぇ')],
['cyo', ...hiraWithKata('ちょ')],
['cha', ...hiraWithKata('ちゃ')],
['chi', ...hiraWithKata('ち')],
['chu', ...hiraWithKata('ちゅ')],
['che', ...hiraWithKata('ちぇ')],
['cho', ...hiraWithKata('ちょ')],
['dya', ...hiraWithKata('ぢゃ')],
['dyi', ...hiraWithKata('ぢぃ')],
['dyu', ...hiraWithKata('ぢゅ')],
['dye', ...hiraWithKata('ぢぇ')],
['dyo', ...hiraWithKata('ぢょ')],
['tsu', ...hiraWithKata('つ')],
['kka', ...hiraWithKata('っか')],
['kki', ...hiraWithKata('っき')],
['kku', ...hiraWithKata('っく')],
['kke', ...hiraWithKata('っけ')],
['kko', ...hiraWithKata('っこ')],
['gga', ...hiraWithKata('っが')],
['ggi', ...hiraWithKata('っぎ')],
['ggu', ...hiraWithKata('っぐ')],
['gge', ...hiraWithKata('っげ')],
['ggo', ...hiraWithKata('っご')],
['ssa', ...hiraWithKata('っさ')],
['ssi', ...hiraWithKata('っし')],
['ssu', ...hiraWithKata('っす')],
['sse', ...hiraWithKata('っせ')],
['sso', ...hiraWithKata('っそ')],
['zza', ...hiraWithKata('っざ')],
['zzi', ...hiraWithKata('っじ')],
['zzu', ...hiraWithKata('っず')],
['zze', ...hiraWithKata('っぜ')],
['zzo', ...hiraWithKata('っぞ')],
['tta', ...hiraWithKata('った')],
['tti', ...hiraWithKata('っち')],
['ttu', ...hiraWithKata('っつ')],
['tte', ...hiraWithKata('って')],
['tto', ...hiraWithKata('っと')],
['dda', ...hiraWithKata('っだ')],
['ddi', ...hiraWithKata('っぢ')],
['ddu', ...hiraWithKata('っづ')],
['dde', ...hiraWithKata('っで')],
['ddo', ...hiraWithKata('っど')],
['hha', ...hiraWithKata('っは')],
['hhi', ...hiraWithKata('っひ')],
['hhu', ...hiraWithKata('っふ')],
['hhe', ...hiraWithKata('っへ')],
['hho', ...hiraWithKata('っほ')],
['bba', ...hiraWithKata('っば')],
['bbi', ...hiraWithKata('っび')],
['bbu', ...hiraWithKata('っぶ')],
['bbe', ...hiraWithKata('っべ')],
['bbo', ...hiraWithKata('っぼ')],
['ppa', ...hiraWithKata('っぱ')],
['ppi', ...hiraWithKata('っぴ')],
['ppu', ...hiraWithKata('っぷ')],
['ppe', ...hiraWithKata('っぺ')],
['ppo', ...hiraWithKata('っぽ')],
['mma', ...hiraWithKata('っま')],
['mmi', ...hiraWithKata('っみ')],
['mmu', ...hiraWithKata('っむ')],
['mme', ...hiraWithKata('っめ')],
['mmo', ...hiraWithKata('っも')],
['yya', ...hiraWithKata('っや')],
['yyu', ...hiraWithKata('っゆ')],
['yyo', ...hiraWithKata('っよ')],
['rra', ...hiraWithKata('っら')],
['rri', ...hiraWithKata('っり')],
['rru', ...hiraWithKata('っる')],
['rre', ...hiraWithKata('っれ')],
['rro', ...hiraWithKata('っろ')],
['wwa', ...hiraWithKata('っわ')],
['wwu', ...hiraWithKata('っう')],
['wwo', ...hiraWithKata('っを')],
['tha', ...hiraWithKata('てゃ')],
['thi', ...hiraWithKata('てぃ')],
['thu', ...hiraWithKata('てゅ')],
['the', ...hiraWithKata('てぇ')],
['tho', ...hiraWithKata('てょ')],
['dha', ...hiraWithKata('でゃ')],
['dhi', ...hiraWithKata('でぃ')],
['dhu', ...hiraWithKata('でゅ')],
['dhe', ...hiraWithKata('でぇ')],
['dho', ...hiraWithKata('でょ')],
['nya', ...hiraWithKata('にゃ')],
['nyi', ...hiraWithKata('にぃ')],
['nyu', ...hiraWithKata('にゅ')],
['nye', ...hiraWithKata('にぇ')],
['nyo', ...hiraWithKata('にょ')],
['bya', ...hiraWithKata('びゃ')],
['byi', ...hiraWithKata('びぃ')],
['byu', ...hiraWithKata('びゅ')],
['bye', ...hiraWithKata('びぇ')],
['byo', ...hiraWithKata('びょ')],
['fya', ...hiraWithKata('ふゃ')],
['fyi', ...hiraWithKata('ふぃ')],
['fyu', ...hiraWithKata('ふゅ')],
['fye', ...hiraWithKata('ふぇ')],
['fyo', ...hiraWithKata('ふょ')],
['hya', ...hiraWithKata('ひゃ')],
['hyi', ...hiraWithKata('ひぃ')],
['hyu', ...hiraWithKata('ひゅ')],
['hye', ...hiraWithKata('ひぇ')],
['hyo', ...hiraWithKata('ひょ')],
['pya', ...hiraWithKata('ぴゃ')],
['pyi', ...hiraWithKata('ぴぃ')],
['pyu', ...hiraWithKata('ぴゅ')],
['pye', ...hiraWithKata('ぴぇ')],
['pyo', ...hiraWithKata('ぴょ')],
['mya', ...hiraWithKata('みゃ')],
['myi', ...hiraWithKata('みぃ')],
['myu', ...hiraWithKata('みゅ')],
['mye', ...hiraWithKata('みぇ')],
['myo', ...hiraWithKata('みょ')],
['rya', ...hiraWithKata('りゃ')],
['ryi', ...hiraWithKata('りぃ')],
['ryu', ...hiraWithKata('りゅ')],
['rye', ...hiraWithKata('りぇ')],
['ryo', ...hiraWithKata('りょ')],
];
exports.indexedRomajiDictionary = exports.romajiDictionary.reduce((acc, item) => {
acc[item[0]] = item;
return acc;
}, {});