summaryrefslogtreecommitdiff
path: root/old-lib/resource/arabic/SentenceAra.gf
diff options
context:
space:
mode:
Diffstat (limited to 'old-lib/resource/arabic/SentenceAra.gf')
-rw-r--r--old-lib/resource/arabic/SentenceAra.gf134
1 files changed, 134 insertions, 0 deletions
diff --git a/old-lib/resource/arabic/SentenceAra.gf b/old-lib/resource/arabic/SentenceAra.gf
new file mode 100644
index 000000000..33becd26b
--- /dev/null
+++ b/old-lib/resource/arabic/SentenceAra.gf
@@ -0,0 +1,134 @@
+--# -path=.:abstract:common:prelude
+
+concrete SentenceAra of Sentence = CatAra ** open
+ ResAra,
+ Prelude,
+ ResAra,
+ ParamX,
+ CommonX in {
+
+
+ flags optimize=all_subs ;
+
+ lin
+{-
+ PredVP np vp =
+ { s = \\t,p,o =>
+ case o of {
+ Verbal =>
+ case vp.comp.a.isPron of {
+ False => vp.s ! t ! p ! Verbal ! np.a ++ np.s ! Nom ++ vp.comp.s ! Acc ;
+ True => vp.s ! t ! p ! Verbal ! np.a ++ vp.comp.s ! Acc ++ np.s ! Nom
+ };
+ Nominal =>
+ np.s ! Nom ++ vp.s ! t ! p ! Nominal ! np.a ++ vp.comp.s ! Acc
+ }
+ };
+-}
+ PredVP np vp =
+ { s =\\t,p,o =>
+ let {
+ pgn =
+ case <o,np.a.isPron> of {
+ <Verbal, False> => verbalAgr np.a.pgn;
+ _ => np.a.pgn
+ };
+ gn = pgn2gn pgn;
+ kataba = vp.s ! pgn ! VPPerf ;
+ yaktubu = vp.s ! pgn ! VPImpf Ind ;
+ yaktuba = vp.s ! pgn ! VPImpf Cnj ;
+ yaktub = vp.s ! pgn ! VPImpf Jus ;
+ vStr : ResAra.Tense -> Polarity -> Str =
+ \tn,pl -> case<vp.isPred,tn,pl> of {
+ <False, ResAra.Pres, Pos> => yaktubu ;
+ <False, ResAra.Pres, Neg> => "لَا" ++ yaktubu ;
+ <True, ResAra.Pres, Pos> => "" ; --no verb "to be" in present
+ <True, ResAra.Pres, Neg> => "لَيسَ" ;--same here, just add negation particle
+ <_, ResAra.Past, Pos> => kataba ;
+ <_, ResAra.Past, Neg> => "لَمْ" ++ yaktub ;
+ <_, ResAra.Fut, Pos> => "سَ" ++ yaktubu ;
+ <_, ResAra.Fut, Neg> => "لَنْ" ++ yaktuba
+ };
+ pred : ResAra.Tense -> Polarity -> Str =
+ \tn,pl -> case <vp.isPred,tn,pl> of {
+ <True, ResAra.Pres, Pos> => vp.pred.s ! gn ! Nom; --xabar marfooc
+ _ => vp.pred.s ! gn ! Acc --xabar kaana wa laysa manSoob
+ };
+ } in
+ case o of {
+ Verbal =>
+ case <False, np.a.isPron> of {
+----AR case <vp.obj.a.isPron, np.a.isPron> of {
+ -- ya2kuluhu
+ <False,True> => (vStr t p) ++ vp.obj.s ++ vp.s2 ++ (pred t p);
+ -- ya2kuluhu al-waladu, yakuluhu al-2awlaadu
+ <False,False> => (vStr t p) ++ np.s ! Nom ++ vp.obj.s ++ vp.s2 ++ (pred t p);
+ <True,False> => (vStr t p) ++ vp.obj.s ++ np.s ! Nom ++ vp.s2 ++ (pred t p);
+ <True,True> => (vStr t p) ++ vp.obj.s ++ vp.s2 ++ (pred t p)
+ };
+ Nominal =>
+ np.s ! Nom ++ (vStr t p) ++ vp.obj.s ++ vp.s2 ++ (pred t p)
+ }
+ };
+ -- PredVP np vp = mkClause (np.s ! Nom) np.a vp ;
+
+-- PredSCVP sc vp = mkClause sc.s (agrP3 Sg) vp ;
+
+ ImpVP vp = {
+ s = \\p,g,n =>
+ case p of {
+ Pos => vp.s ! (Per2 g n) ! VPImp ++ vp.obj.s ++ vp.s2 ;
+ Neg => "لا" ++ vp.s ! (Per2 g n) ! (VPImpf Jus) ++ vp.obj.s ++ vp.s2
+ }
+ };
+
+--
+-- SlashV2 np v2 =
+-- mkClause (np.s ! Nom) np.a (predV v2) ** {c2 = v2.c2} ;
+--
+-- SlashVVV2 np vv v2 =
+-- mkClause (np.s ! Nom) np.a
+-- (insertObj (\\a => infVP vv.isAux (predV v2) a) (predVV vv)) **
+-- {c2 = v2.c2} ;
+--
+-- AdvSlash slash adv = {
+-- s = \\t,a,b,o => slash.s ! t ! a ! b ! o ++ adv.s ;
+-- c2 = slash.c2
+-- } ;
+--
+-- SlashPrep cl prep = cl ** {c2 = prep.s} ;
+--
+-- EmbedS s = {s = conjThat ++ s.s} ;
+-- EmbedQS qs = {s = qs.s ! QIndir} ;
+-- EmbedVP vp = {s = infVP False vp (agrP3 Sg)} ; --- agr
+--
+
+ --FIXME, all tenses
+ UseCl t a p cl =
+ {s = cl.s ! ResAra.Pres ! p.p ! Verbal
+{- case t of {
+ TPres => cl.s ! ResAra.Pres ! p.p ! Verbal ;
+ TCond => cl.s ! ResAra.Pres ! p.p ! Verbal ;
+ TPast => cl.s ! ResAra.Past ! p.p ! Verbal ;
+ TFut => cl.s ! ResAra.Fut ! p.p ! Verbal
+ }
+-} };
+
+ --FIXME, all tenses
+ UseQCl t a p qcl = --{s = cl.s ! t ! p ! Verbal } ;
+ {s =
+ table {
+ QDir => "هَل" ++ qcl.s ! ResAra.Pres ! p.p ! QDir;
+ QIndir => qcl.s ! ResAra.Pres ! p.p ! QIndir
+ }
+{- case t of {
+ TPres => "هَل" ++ qcl.s ! ResAra.Pres ! p.p ! q ;
+ TCond => "هَل" ++ qcl.s ! ResAra.Pres ! p.p ! q ;
+ TPast => "هَل" ++ qcl.s ! ResAra.Past ! p.p ! q ;
+ TFut => "هَل" ++ qcl.s ! ResAra.Fut ! p.p ! q
+ }
+-} };
+
+-- UseRCl t a p cl = {s = \\r => t.s ++ a.s ++ p.s ++ cl.s ! t.t ! a.a ! p.p ! r} ;
+
+}