UNPKG

taipa

Version:

Taiwanese morphological parsing library

139 lines (137 loc) 5.02 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.KanaSoundGenerator = void 0; const unit_1 = require("../unit"); const kanares_1 = require("./kanares"); function initialConsonant(sg) { const sics = kanares_1.initialConsonantsKana; if (sics.includes(sg.letters[sg.matchedSounds.length])) { const sounds = kanares_1.kanaPositionalSounds.get(sg.letters[sg.matchedSounds.length]); if (sounds) { const s = sounds(kanares_1.KanaSpellingTags.initialConsonant); if (s) sg.matchedSounds.push(s); } } else sg.matching = false; return sg; } function semivowel(sg) { const ssvs = kanares_1.semivowelsKana; if (ssvs.includes(sg.letters[sg.matchedSounds.length])) { const sounds = kanares_1.kanaPositionalSounds.get(sg.letters[sg.matchedSounds.length]); if (sounds) { const s = sounds(kanares_1.KanaSpellingTags.semivowel); if (s) sg.matchedSounds.push(s); } } return sg; } function vowel(sg) { const svs = kanares_1.vowelsKana; if (svs.includes(sg.letters[sg.matchedSounds.length])) { const sounds = kanares_1.kanaPositionalSounds.get(sg.letters[sg.matchedSounds.length]); if (sounds) { const s = sounds(kanares_1.KanaSpellingTags.vowel); if (s) sg.matchedSounds.push(s); } } return sg; } /* function hatsuon(sg: SoundGeneration) { const sfcs = hatsuonsKana; if (sfcs.includes(sg.sounds[sg.matchedSounds.length])) { const sounds = kanaPositionalSounds.get(sg.sounds[sg.matchedSounds.length]); if (sounds) { const s = sounds(KanaSpellingTags.finalConsonant); if (s) sg.matchedSounds.push(s); } } return sg; } */ function finalConsonant(sg) { const sfcs = kanares_1.finalConsonantsKana; if (sfcs.includes(sg.letters[sg.matchedSounds.length])) { const sounds = kanares_1.kanaPositionalSounds.get(sg.letters[sg.matchedSounds.length]); if (sounds) { const s = sounds(kanares_1.KanaSpellingTags.finalConsonant); if (s) sg.matchedSounds.push(s); } } return sg; } function geminatedConsonant(sg) { const sgcs = kanares_1.geminatedConsonantsKana; if (sgcs.includes(sg.letters[sg.matchedSounds.length])) { const sounds = kanares_1.kanaPositionalSounds.get(sg.letters[sg.matchedSounds.length]); if (sounds) { const s = sounds(kanares_1.KanaSpellingTags.geminatedConsonant); if (s) sg.matchedSounds.push(s); } } return sg; } const scV = (0, unit_1.sgPipe)(vowel); const scCV = (0, unit_1.sgPipe)(initialConsonant, vowel); const scVC = (0, unit_1.sgPipe)(vowel, finalConsonant); // includes hatsuon const scCVC = (0, unit_1.sgPipe)(initialConsonant, vowel, finalConsonant); // includes geminated consonants const scCSV = (0, unit_1.sgPipe)(initialConsonant, semivowel, vowel); const scCSVC = (0, unit_1.sgPipe)(initialConsonant, semivowel, vowel, finalConsonant); // includes geminated consonants const scCCV = (0, unit_1.sgPipe)(geminatedConsonant, initialConsonant, vowel); class KanaSoundGenerator { sylCompositions = [scV, scCV, scVC, scCVC, scCSV, scCSVC, scCCV]; genSokuonAndGeminated(letters, lookahead) { let strs = new Array(); strs.push(letters); // consonant gemination if (kanares_1.geminatedConsonantsKana.includes(letters[0]) == true) { let syl = new Array(); syl.push(letters[0].charAt(0)); for (let e of letters) { syl.push(e); } strs.push(syl); } // sokuon let fcs = kanares_1.finalConsonantsKana; for (let e of fcs.sounds) { let syl = new Array(); Object.assign(syl, letters); syl.push(e.toString()); if (e.toString() === lookahead) strs.push(syl); } return strs; } generate(letters, lookahead) { let strs = new Array(); let sequences = new Array(); // to be returned strs = this.genSokuonAndGeminated(letters, lookahead); // console.log(strs); for (let i in strs) { // generates all needed sounds to be processed for (let j = 0; j < this.sylCompositions.length; j++) { let sg = new unit_1.SoundGeneration(); sg.letters = strs[i]; //console.log(`j: ${j}`) sg = this.sylCompositions[j](sg); if (sg.letters.length == sg.matchedSounds.length && sg.matching == true) { sequences.push(sg.matchedSounds); break; } } } // console.log(sequences); return sequences; } } exports.KanaSoundGenerator = KanaSoundGenerator; //# sourceMappingURL=soundgen.js.map