diff --git a/src/lib/diacritics.test.ts b/src/lib/diacritics.test.ts index 7bab3db..d08c1cc 100644 --- a/src/lib/diacritics.test.ts +++ b/src/lib/diacritics.test.ts @@ -480,6 +480,25 @@ const diacriticsSections: { }, ], }, + { + describe: "alef with hamza above", + tests: [ + { + in: { + p: "جرأت", + f: "jUrát", + }, + out: "جُرأت", + }, + { + in: { + p: "جرأت", + f: "jUr'át", + }, + out: "جُرأت", + }, + ], + }, { describe: "ayn stuff", tests: [ @@ -567,8 +586,13 @@ const diacriticsSections: { }, out: "مَعَنا", }, - // طمع - tama // استعمال - istimaal - // TODO: Starting like عام اعتصاب etc. + { + in: { + p: "طمع استعمال", + f: "tama istimaal", + }, + out: "طَمَع اِسْتِعمال", + }, // { // in: { // p: "اعتصاب شکن", @@ -576,6 +600,13 @@ const diacriticsSections: { // }, // out: "اِعتِصاب شَکَن", // }, + // { + // in: { + // p: "عادل", + // f: "aadíl", + // }, + // out: "عادل", + // }, // // starting with ع // { // in: { @@ -599,21 +630,6 @@ const diacriticsSections: { // }, // out: "مَعَنا", // }, - // ending with ayn - // { - // in: { - // p: "طمع کېدل", - // f: "tama kedul", - // }, - // out: "طَمَع کېد" + zwarakey + "ل", - // }, - // { - // in: { - // p: "منبع", - // f: "manbí", - // }, - // out: "مَنْبِع", - // }, ], }, { diff --git a/src/lib/diacritics.ts b/src/lib/diacritics.ts index 98c68f1..8ac33f6 100644 --- a/src/lib/diacritics.ts +++ b/src/lib/diacritics.ts @@ -68,6 +68,8 @@ enum PhonemeStatus { AlefDaggarEnding, LongAinVowelMissingComma, ShortAinVowelMissingComma, + AlefWithHamza, + AlefWithHamzaWithGlottalStop, } function processPhoneme( @@ -94,12 +96,11 @@ function processPhoneme( phonemeInfo, diacritic, phs, - prevPLetter, } = stateInfo({ state, i, phoneme, phonemes }); // console.log("phoneme", phoneme); // console.log("state", state); - // console.log(phs); + // console.log(phs); return (phs === PhonemeStatus.LeadingLongVowel) ? pipe( @@ -180,6 +181,12 @@ function processPhoneme( addP(diacritic), advanceP, )(state) + : (phs === PhonemeStatus.AlefWithHamza) ? + pipe( + advanceP, + )(state) + : (phs === PhonemeStatus.AlefWithHamzaWithGlottalStop) ? + state : // phs === PhonemeState.ShortVowel pipe( @@ -244,7 +251,13 @@ function stateInfo({ state, i, phonemes, phoneme }: { } if (phoneme === "-i-" && isBeginningOfWord) { return PhonemeStatus.Izafe; - } + } + if (phoneme === "a" && currentPLetter === "أ") { + return PhonemeStatus.AlefWithHamza; + } + if (phoneme === "'" && nextPhoneme === "a" && currentPLetter === "أ") { + return PhonemeStatus.AlefWithHamzaWithGlottalStop; + } if (currentPLetter === "ع" && phoneme !== "'" && nextPhoneme !== "'" && phonemeInfo.diacritic && !phonemeInfo.longVowel) { return PhonemeStatus.ShortAinVowelMissingComma; } @@ -276,6 +289,6 @@ function stateInfo({ state, i, phonemes, phoneme }: { const phs = getPhonemeState(); return { - phs, phonemeInfo, diacritic, prevPLetter, + phs, phonemeInfo, diacritic, }; };