diff --git a/src/macedonian/CatMkd.gf b/src/macedonian/CatMkd.gf index b79161ed..16b5077b 100644 --- a/src/macedonian/CatMkd.gf +++ b/src/macedonian/CatMkd.gf @@ -32,7 +32,7 @@ lincat AP = {s : Species => GenNum => Str; isPre : Bool} ; lincat NP = {s : Role => Str; vocative: Str; a : Agr} ; lincat Num = {s : Str; n : NNumber} ; lincat Quant = {s : GenNum => Str; sp : Species} ; -lincat Det = {s : Gender => Str; n : NNumber; sp : Species} ; +lincat Det, DAP = {s : Gender => Str; n : NNumber; sp : Species} ; lincat VP = Verb ** {compl : Agr => Str} ; lincat VPSlash = Verb ** {compl : Agr => Str; c2 : Compl} ; diff --git a/src/macedonian/NounMkd.gf b/src/macedonian/NounMkd.gf index 05e70b08..3b23fd20 100644 --- a/src/macedonian/NounMkd.gf +++ b/src/macedonian/NounMkd.gf @@ -22,7 +22,11 @@ concrete NounMkd of Noun = CatMkd ** open Prelude,ResMkd in { } ++ cn.vocative ! n; count_form = ap.s ! Indef ! GPl ++ cn.count_form; g = cn.g} ; - lin AdjDAP d ap = {s = d.s ++ ap.s ! Indef ! GSg Masc} ; + lin AdjDAP d ap = { + s = \\g => d.s ! g ++ ap.s ! Indef ! genNum g (nnum2num d.n) ; + n = d.n ; + sp = d.sp + } ; lin AdvCN cn adv = { s = \\s,n => cn.s ! s ! n ++ adv.s; count_form = cn.count_form ++ adv.s; @@ -30,22 +34,24 @@ concrete NounMkd of Noun = CatMkd ** open Prelude,ResMkd in { g = cn.g } ; lin AdvNP np a = {s = \\r => np.s ! r ++ a.s; - vocative = np.vocative ++ a.s; a = {g = np.a.g; p = np.a.p}} ; + vocative = np.vocative ++ a.s; a = np.a} ; lin ApposCN cn np = {s = \\s,n => cn.s ! s ! n ++ np.s ! RSubj; count_form = cn.count_form ++ np.s ! RSubj; vocative = \\n => cn.vocative ! n ++ np.vocative; g = cn.g} ; - lin ComplN2 n2 np = {s = \\s,n => n2.s ! s ! n ++ np.s ! RSubj; - count_form = n2.count_form ++ np.s ! RSubj; - vocative = \\n => n2.vocative ! n ++ np.vocative; g = n2.g} ; - lin ComplN3 n3 np = {s = \\s,n => n3.s ! s ! n ++ np.s ! RSubj; - count_form = n3.count_form ++ np.s ! RSubj; - vocative = \\n => n3.vocative ! n ++ np.vocative; - rel = \\s,g => n3.rel ! s ! g ++ np.s ! RSubj; - relType = n3.relType; g = n3.g; - c2 = {s = n3.c2.s ++ np.s ! RSubj; c = n3.c2.c}} ; + lin ComplN2 n2 np = {s = \\s,n => n2.s ! s ! n ++ n2.c2.s ++ np.s ! RObj n2.c2.c; + count_form = n2.count_form ++ n2.c2.s ++ np.s ! RObj n2.c2.c; + vocative = \\n => n2.vocative ! n ++ n2.c2.s ++ np.s ! RObj n2.c2.c; + g = n2.g} ; + lin ComplN3 n3 np = {s = \\s,n => n3.s ! s ! n ++ n3.c2.s ++ np.s ! RObj n3.c2.c; + count_form = n3.count_form ++ n3.c2.s ++ np.s ! RObj n3.c2.c; + vocative = \\n => n3.vocative ! n ++ n3.c2.s ++ np.s ! RObj n3.c2.c; + rel = \\s,g => n3.s ! s ! genNum2num g ++ n3.c2.s ++ np.s ! RObj n3.c2.c; + relType = AdvMod; + g = n3.g; + c2 = n3.c3} ; lin CountNP d np = {s = \\r => d.s ! Masc ++ np.s ! r; vocative = d.s ! Masc ++ np.vocative; - a = {g = np.a.g; p = np.a.p}} ; + a = np.a} ; lin DefArt = {s = \\_=>[]; sp = Def Unspecified} ; lin DetCN det cn = { s = \\r => case det.n of { @@ -56,7 +62,7 @@ concrete NounMkd of Noun = CatMkd ** open Prelude,ResMkd in { a = {g = genNum cn.g (nnum2num det.n) ; p = P3}; } ; - lin DetDAP d = {s = d.s ! Masc} ; + lin DetDAP d = d ; lin DetNP d = {s = \\r => d.s ! Masc; vocative = d.s ! Masc; a = {g = GSg Masc; p = P1}} ; lin DetQuant q num = {s = \\g => q.s ! genNum g (nnum2num num.n) ++ num.s; @@ -64,11 +70,15 @@ concrete NounMkd of Noun = CatMkd ** open Prelude,ResMkd in { sp = q.sp} ; lin DetQuantOrd q n o = {s = \\g => q.s ! GSg Masc ++ n.s ++ o.s; n = n.n; sp = q.sp} ; - lin ExtAdvNP np a = {s = \\r => np.s ! r ++ a.s; - vocative = np.vocative ++ a.s; a = {g = np.a.g; p = np.a.p}} ; + lin ExtAdvNP np a = { + s = \\r => np.s ! r ++ SOFT_BIND++"," ++ a.s; + vocative = np.vocative ++ SOFT_BIND++"," ++ a.s; + a = np.a + } ; lin IndefArt = {s = \\_=>[]; sp = Indef} ; lin MassNP cn = {s = \\r => cn.s ! Indef ! Sg; - vocative = cn.vocative ! Sg; a = {g = GSg Masc; p = P1}} ; + vocative = cn.vocative ! Sg; + a = {g = GSg cn.g; p = P3}} ; lin NumCard c = {s = c.s; n = NNum Sg} ; lin NumDecimal d = {s = d.s} ; lin NumDigits d = {s = d.s} ; @@ -97,11 +107,21 @@ concrete NounMkd of Noun = CatMkd ** open Prelude,ResMkd in { lin PossNP cn np = {s = \\s,n => cn.s ! s ! n ++ np.s ! RSubj; count_form = cn.count_form ++ np.s ! RSubj; vocative = \\n => cn.vocative ! n ++ np.vocative; g = cn.g} ; - lin PossPron p = {s = \\g => p.s ! RSubj; sp = Indef} ; - lin PredetNP p np = {s = \\r => p.s ++ np.s ! r; - vocative = p.s ++ np.vocative; a = {g = np.a.g; p = np.a.p}} ; - lin QuantityNP d mu = {s = \\r => d.s ++ mu.s; - vocative = d.s ++ mu.s; a = {g = GSg Masc; p = P1}} ; + lin PossPron p = {s = p.poss ! Def Unspecified; sp = Indef} ; + lin PredetNP p np = { + s = \\r => p.s ++ np.s ! r; + vocative = p.s ++ np.vocative; + a = np.a + } ; + lin QuantityNP d mu = + let s = case mu.isPre of { + True => mu.s ++ d.s ; + False => d.s ++ mu.s + } + in { s = \\r => s; + vocative = s; + a = {g = GSg Masc; p = P3} + } ; lin RelCN cn rs = { s = \\sp,n => cn.s ! sp ! n ++ rs.s ! genNum cn.g n ; count_form = cn.count_form ++ rs.s ! GPl ; @@ -119,9 +139,10 @@ concrete NounMkd of Noun = CatMkd ** open Prelude,ResMkd in { count_form = n3.count_form; vocative = \\n => n3.vocative ! n; rel = \\s,g => n3.rel ! s ! g; relType = n3.relType; g = n3.g; c2 = {s = n3.c2.s; c = n3.c2.c}} ; - lin UseN2 n2 = {s = \\s,n => n2.s ! s ! n; - count_form = n2.count_form; vocative = \\n => n2.vocative ! n; - g = n2.g} ; - lin UsePN pn = {s = \\r => pn.s; vocative = pn.s; - a = {g = GSg Masc; p = P1}} ; + lin UseN2 n2 = n2 ; + lin UsePN pn = { + s = \\r => pn.s; + vocative = pn.s; + a = {g = GSg Masc; p = P3} + } ; }