taipa
Version:
Taiwanese morphological parsing library
139 lines (137 loc) • 5.02 kB
JavaScript
;
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