UNPKG

hangulx

Version:

Providing various utilities for Hangul

217 lines (216 loc) 7.98 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Syllable = void 0; var Hangul_1 = require("./Hangul"); var _1_initial_consonants_1 = require("./constants/syllable/1.initial-consonants"); var _2_middle_vowels_1 = require("./constants/syllable/2.middle-vowels"); var _3_final_consonants_1 = require("./constants/syllable/3.final-consonants"); var COMPLETE_1 = require("./constants/COMPLETE"); var VOWEL_1 = require("./constants/VOWEL"); var Syllable = /** @class */ (function () { function Syllable() { } Syllable.isChoFromCharCode = function (charCode) { if (isNaN(charCode)) { return false; } return _1_initial_consonants_1.initialConsonantCharCodeSet.has(charCode); }; Syllable.isCho = function (char) { return _1_initial_consonants_1.initialConsonantSet.has(char); }; Syllable.isChoAll = function (str) { var length = str.length; if (length === 0) { return false; } for (var i = 0; i < length; ++i) { if (!this.isChoFromCharCode(str.charCodeAt(i))) { return false; } } return true; }; Syllable.hasCho = function (str) { var length = str.length; if (length === 0) { return false; } for (var i = 0; i < length; ++i) { if (this.isChoFromCharCode(str.charCodeAt(i))) { return true; } } return false; }; Syllable.isJungFromCharCode = function (charCode) { if (isNaN(charCode)) { return false; } return _2_middle_vowels_1.middleVowelCharCodeSet.has(charCode); }; Syllable.isJung = function (char) { return _2_middle_vowels_1.middleVowelSet.has(char); }; Syllable.isJungAll = function (str) { var length = str.length; if (length === 0) { return false; } for (var i = 0; i < length; ++i) { if (!this.isJungFromCharCode(str.charCodeAt(i))) { return false; } } return true; }; Syllable.hasJung = function (str) { var length = str.length; if (length === 0) { return false; } for (var i = 0; i < length; ++i) { if (this.isJungFromCharCode(str.charCodeAt(i))) { return true; } } return false; }; Syllable.isJongFromCharCode = function (charCode) { if (isNaN(charCode)) { return false; } return _3_final_consonants_1.finalConsonantCharCodeSet.has(charCode); }; Syllable.isJong = function (char) { return _3_final_consonants_1.finalConsonantSet.has(char); }; Syllable.isJongAll = function (str) { var length = str.length; if (length === 0) { return false; } for (var i = 0; i < length; ++i) { if (!this.isJongFromCharCode(str.charCodeAt(i))) { return false; } } return true; }; Syllable.hasJong = function (str) { var length = str.length; if (length === 0) { return false; } for (var i = 0; i < length; ++i) { if (this.isJongFromCharCode(str.charCodeAt(i))) { return true; } } return false; }; // Disassemble Syllable.disassembleFromCharCode = function (charCode) { if (charCode === null || charCode === undefined) { return null; } if (!Hangul_1.Hangul.isCompleteCharCode(charCode)) { return null; } var uniBase = charCode - COMPLETE_1.COMPLETE.START_CHAR_CODE; var choseongIndex = Math.floor(uniBase / 28 / 21); var jungseongIndex = Math.floor(uniBase / 28) % 21; var jongseongIndex = uniBase % 28 - 1; return { cho: _1_initial_consonants_1.initialConsonants[choseongIndex], jung: _2_middle_vowels_1.middleVowels[jungseongIndex], jong: (_3_final_consonants_1.finalConsonants === null || _3_final_consonants_1.finalConsonants === void 0 ? void 0 : _3_final_consonants_1.finalConsonants[jongseongIndex]) || undefined, }; }; /** * 단일 문자열(길이가 1인)을 음절(초성, 중성, 종성)으로 분리합니다. * * Similar to the `disassemble` function but specifically for disassembling a single character into its syllable components. * * @param char 음절로 분리할 단일 문자 (길이가 1인 문자열) * @param char A single character (string of length 1) to be disassembled into its syllable components * @param option 분리 옵션 (선택 사항) * @param option Optional disassembly options for specific customization * @returns 분리된 음절(ISyllable) 객체를 반환, 옵션에 따라 null을 반환할 수도 있음 * @returns An ISyllable object representing the disassembled components or null based on the provided options */ Syllable.disassembleFromChar = function (char) { if (char === null || char === undefined) { return null; } return this.disassembleFromCharCode(char.charCodeAt(0)); }; Syllable.disassemble = function (str) { var _this = this; if (Array.isArray(str)) { return str.map(function (e) { return _this.disassemble(e); }); } else { var syllables = []; var length_1 = str.length; for (var i = 0; i < length_1; ++i) { var syllable = this.disassembleFromCharCode(str.charCodeAt(i)); if (syllable) { syllables.push(syllable); } } return syllables; } }; Syllable._assemble = function (syllable) { var choIndex = _1_initial_consonants_1.initialConsonants.indexOf(syllable.cho); var jungIndex = _2_middle_vowels_1.middleVowels.indexOf(syllable.jung); var jongIndex = syllable.jong !== undefined ? _3_final_consonants_1.finalConsonants.indexOf(syllable.jong) : undefined; if (choIndex === -1) { throw new Error('invalid cho'); } if (jungIndex === -1) { throw new Error('invalid jung'); } if (jongIndex === -1) { throw new Error('invalid jong'); } var a = choIndex; var b = syllable.jung.charCodeAt(0) - VOWEL_1.VOWEL.START_CHAR_CODE; var c = 0; if (syllable.jong != undefined) { var temp = _3_final_consonants_1.finalConsonants.indexOf(syllable.jong); if (temp === -1) { throw new Error('invalid jong'); } c = temp + 1; } var completeCharCode = COMPLETE_1.COMPLETE.START_CHAR_CODE + a * 588 + b * 28 + c; if (completeCharCode < COMPLETE_1.COMPLETE.START_CHAR_CODE || completeCharCode > COMPLETE_1.COMPLETE.END_CHAR_CODE) { throw new Error('Invalid Hangul syllable character code'); } return String.fromCharCode(completeCharCode); }; Syllable.assemble = function (syllables) { var _this = this; if (Array.isArray(syllables)) { return syllables.map(function (syllable) { return _this._assemble(syllable); }).join(''); } else { return this._assemble(syllables); } }; return Syllable; }()); exports.Syllable = Syllable; (function (Syllable) { var Position; (function (Position) { Position[Position["INITIAL"] = 0] = "INITIAL"; Position[Position["MIDDLE"] = 1] = "MIDDLE"; Position[Position["FINAL"] = 2] = "FINAL"; })(Position = Syllable.Position || (Syllable.Position = {})); })(Syllable || (exports.Syllable = Syllable = {}));