hangulx
Version:
Providing various utilities for Hangul
217 lines (216 loc) • 7.98 kB
JavaScript
;
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 = {}));