diff --git a/src/arabic/OrthoAra.gf b/src/arabic/OrthoAra.gf index 89cf4513..5c5602d9 100644 --- a/src/arabic/OrthoAra.gf +++ b/src/arabic/OrthoAra.gf @@ -4,12 +4,22 @@ flags coding=utf8 ; oper + -- Definite article assimilation + vow : pattern Str = #("َ" | "ِ" | "ُ") ; + + + -- "Sun letters": assimilate with def. article + sun : pattern Str = #("ت"|"ث"|"د"|"ذ"|"ر"|"ز"|"س"|"ش"|"ص"|"ض"|"ط"|"ظ"|"ل"|"ن") ; + + -- Hamza + hamza : pattern Str = #("ء‎"|"؟") ; + rectifyHmz: Str -> Str = \word -> case word of { - l@(""|"ال") + "؟" + v@("َ"|"ُ") + tail => l + "أ" + v + tail; - l@(""|"ال") + "؟" + v@("ِ") + tail => l + "إ" + v + tail; - head + v1@("ِ"|"ُ"|"َ"|"ْ"|"ا"|"ي"|"و") + "؟" + v2@(""|"ُ"|"َ"|"ْ"|"ِ") => head + v1 + (tHmz v1) + v2; - head + "؟" + tail => head + (bHmz (dp 2 head) (take 2 tail)) + tail; --last head , take 1 tail + l@(""|"ال") + #hamza + v@("َ"|"ُ") + tail => l + "أ" + v + tail; + l@(""|"ال") + #hamza + v@("ِ") + tail => l + "إ" + v + tail; + head + v1@("ِ"|"ُ"|"َ"|"ْ"|"ا"|"ي"|"و") + #hamza + v2@(""|"ُ"|"َ"|"ْ"|"ِ") => head + v1 + (tHmz v1) + v2; + head + #hamza + tail => head + (bHmz (dp 2 head) (take 2 tail)) + tail; --last head , take 1 tail _ => word }; diff --git a/src/arabic/ParadigmsAra.gf b/src/arabic/ParadigmsAra.gf index ba6473fd..3aaa804f 100644 --- a/src/arabic/ParadigmsAra.gf +++ b/src/arabic/ParadigmsAra.gf @@ -274,7 +274,7 @@ resource ParadigmsAra = open let { raw = v1' rootStr vPerf vImpf } in { s = \\vf => case rootStr of { - _ + "؟" + _ => rectifyHmz(raw.s ! vf); + _ + #hamza + _ => rectifyHmz(raw.s ! vf); _ => raw.s ! vf }; lock_V = <> @@ -336,7 +336,7 @@ resource ParadigmsAra = open let { raw = v5' rootStr } in { s = \\vf => case rootStr of { - _ + "؟" + _ => rectifyHmz(raw.s ! vf); + _ + #hamza + _ => rectifyHmz(raw.s ! vf); _ => raw.s ! vf }; lock_V = <> @@ -396,7 +396,7 @@ resource ParadigmsAra = open let { raw = brkN' root sg pl gen spec} in { s = \\n,d,c => case root of { - _ + "؟" + _ => rectifyHmz(raw.s ! n ! d ! c); + _ + #hamza + _ => rectifyHmz(raw.s ! n ! d ! c); _ => raw.s ! n ! d ! c }; g = gen; @@ -491,7 +491,7 @@ resource ParadigmsAra = open let raw = sndA' root pat in { s = \\af => case root of { - _ + "؟" + _ => rectifyHmz(raw.s ! af); + _ + #hamza + _ => rectifyHmz(raw.s ! af); _ => raw.s ! af }; lock_A = <> diff --git a/src/arabic/ResAra.gf b/src/arabic/ResAra.gf index 0a977cf6..15e4d666 100644 --- a/src/arabic/ResAra.gf +++ b/src/arabic/ResAra.gf @@ -7,7 +7,7 @@ ---- implement $Test$, it moreover contains regular lexical ---- patterns needed for $Lex$. -- -resource ResAra = PatternsAra ** open Prelude, Predef, ParamX in { +resource ResAra = PatternsAra ** open Prelude, Predef, OrthoAra, ParamX in { flags optimize=noexpand ; coding=utf8 ; @@ -94,7 +94,8 @@ resource ResAra = PatternsAra ** open Prelude, Predef, ParamX in { w@_ + "ف" + x@_ + "ع" + y@_ => let pat = { h = w ; m1 = x; m2 = ""; t = y} in case of { - 6 | 5 => mkWeak pat (mkRoot3 rS) ; --3=> +-- 6 | 5 => mkWeak pat (mkRoot3 rS) ; --3=> + 6 | 5 => mkHollow pat (mkRoot3 rS) ; --3=> 4 | 3 => mkBilit pat (mkRoot2 rS) ; --2=> _ => rS ---- AR error "expected 3--6" } @@ -880,10 +881,6 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf -> _ => "" }; - -- "Sun letters": assimilate with def. article - sun : pattern Str = #("ت"|"ث"|"د"|"ذ"|"ر"|"ز"|"س"|"ش"|"ص"|"ض"|"ط"|"ظ"|"ل"|"ن") ; - - vow : pattern Str = #("َ" | "ِ" | "ُ") ; defArt : State -> Str -> Str = \st,stem -> -- IL -- to be checked let al = "ال" in case st of {