var input_temp_loader = [] var last_manchu_char = "" /** * * @param {string} manchuPinyinChar * @param {string} dictType * @returns */ function getManchuChar(manchuPinyinChar, dictType) { if (dictType == DICT_TYPE.MULINDE_DICT) return MULINDE_DICT[manchuPinyinChar] ?? ""; if (dictType == DICT_TYPE.TAIQING_DICT) return TAIQING_DICT[manchuPinyinChar] ?? ""; if (dictType == DICT_TYPE.BABELPAD_DICT) return BABELPAD_DICT[manchuPinyinChar] ?? ""; if (dictType == DICT_TYPE.XINMANHAN_DICT) return XINMANHAN_DICT[manchuPinyinChar] ?? ""; if (dictType == DICT_TYPE.WUTI_DICT) return WUTI_DICT[manchuPinyinChar] ?? ""; if (dictType == DICT_TYPE.MULINDE_REVERSE_DICT) return MULINDE_REVERSE_DICT[manchuPinyinChar] ?? ""; if (dictType == DICT_TYPE.TAIQING_REVERSE_DICT) return TAIQING_REVERSE_DICT[manchuPinyinChar] ?? ""; if (dictType == DICT_TYPE.BABELPAD_REVERSE_DICT) return BABELPAD_REVERSE_DICT[manchuPinyinChar] ?? ""; if (dictType == DICT_TYPE.XINMANHAN_REVERSE_DICT) return XINMANHAN_REVERSE_DICT[manchuPinyinChar] ?? ""; if (dictType == DICT_TYPE.WUTI_REVERSE_DICT) return WUTI_REVERSE_DICT[manchuPinyinChar] ?? ""; return ""; } /** * * @param {string} manchuPinyinChar * @param {string} dictType * @returns {[string, boolean]} [manchuChar, ifDeleteFrontChar] */ function tryToGetManchuChar(manchuPinyinChar, dictType) { input_temp_loader.push(manchuPinyinChar); if (input_temp_loader.length > 4) { input_temp_loader = input_temp_loader.slice(1); } for (let i = 0; i < input_temp_loader.length; i++) { let char = getManchuChar(input_temp_loader.slice(i).join(""), dictType) if (i == input_temp_loader.length - 1 && char) { return [char, false] } if (char) return [char, true]; } return ["", false]; } /** * * @param {number} currentIndex * @param {Array} manchuSentence * @param {string} dictType * @returns {[string, number]} [manchuChar, nextIndex] */ function tryToGetManchuCharFromBack(currentIndex, manchuSentence, dictType) { for (let i = 4; i >= 0; i--) { var startIndex = currentIndex - i >= 0 ? currentIndex - i : 0; let char = getManchuChar(manchuSentence.slice(startIndex, currentIndex + 1).join(""), dictType) if (char) { return [char, startIndex - 1] } } return ["", currentIndex - 1] } /** * * @param {*} manchuPinyinSentence * @param {*} dictType * @returns {string} */ function parseSentenceFromBack(manchuPinyinSentence, dictType) { var resStr = ""; var manchuSentence = manchuPinyinSentence.toLowerCase().split(""); for (let i = manchuSentence.length - 1; i >= 0;) { // space if (manchuSentence[i] == " ") { i--; resStr = " " + resStr } else { const [char, nextIndex] = tryToGetManchuCharFromBack(i, manchuSentence, dictType) i = nextIndex; resStr = char + resStr; } } return resStr } /** * 有bug 对于taiqing的cy',由于c和y都有对应的转写,要删除2个manchu char。目前做不到。 * @param {string} manchuPinyinSentence * @param {string} dictType * @returns {string} */ function parseSentence(manchuPinyinSentence, dictType) { input_temp_loader = []; last_manchu_char = ""; var resStr = ""; manchuPinyinSentence.toLowerCase().split("").forEach(x => { if (x == " ") { resStr += " " manchuChar = ""; return; } const [manchuChar, ifDeleteFrontChar] = tryToGetManchuChar(x, dictType); if (ifDeleteFrontChar) { var lastIndex = resStr.lastIndexOf(last_manchu_char); resStr = resStr.substring(0, lastIndex); } if (manchuChar) last_manchu_char = manchuChar; resStr += manchuChar }) return resStr; }