diff --git a/lib/resource/bulgarian/CatBul.gf b/lib/resource/bulgarian/CatBul.gf index 2e52a1c71..03643f3a8 100644 --- a/lib/resource/bulgarian/CatBul.gf +++ b/lib/resource/bulgarian/CatBul.gf @@ -73,7 +73,7 @@ concrete CatBul of Cat = open ResBul, Prelude, (R = ParamX) in { Predet = {s : GenNum => Str} ; Ord = {s : AForm => Str; nonEmpty : Bool} ; Num = {s : DGenderSpecies => Str; n : Number; nonEmpty : Bool} ; - Quant = {s : GenNum => Str; spec : Species} ; + Quant = {s : AForm => Str; spec : Species} ; -- Numeral diff --git a/lib/resource/bulgarian/ExtraBul.gf b/lib/resource/bulgarian/ExtraBul.gf index 833caeb94..ebf4b9601 100644 --- a/lib/resource/bulgarian/ExtraBul.gf +++ b/lib/resource/bulgarian/ExtraBul.gf @@ -2,10 +2,21 @@ concrete ExtraBul of ExtraBulAbs = CatBul ** open ResBul, Coordination, Prelude in { lin - GenNP np = {s = \\gn => np.s ! Gen (aform gn Def Nom); spec=Indef} ; - - GenNPIndef np = {s = \\gn => np.s ! Gen (aform gn Indef Nom); spec=Indef} ; - + PossIndefPron p = { + s = \\aform => p.gen ! (indefAForm ! aform) ; + spec = Indef + } ; + + ReflQuant = { + s = \\aform => reflPron ! aform ; + spec = Indef + } ; + + ReflIndefQuant = { + s = \\aform => reflPron ! (indefAForm ! aform) ; + spec = Indef + } ; + i8fem_Pron = mkPron "аз" "мен" "ми" "мой" "моя" "моят" "моя" "моята" "мое" "моето" "мои" "моите" (GSg Fem) P1 ; i8neut_Pron = mkPron "аз" "мен" "ми" "мой" "моя" "моят" "моя" "моята" "мое" "моето" "мои" "моите" (GSg Neut) P1 ; @@ -26,9 +37,30 @@ concrete ExtraBul of ExtraBulAbs = CatBul ** DMascDef | DMascDefNom | DMascPersonalDef | DMascPersonalDefNom | DFemDef | DNeutDef => "едните" } ; n = Pl; - empty = False + nonEmpty = True } ; UttImpSg8fem pol imp = {s = pol.s ++ imp.s ! pol.p ! GSg Fem} ; UttImpSg8neut pol imp = {s = pol.s ++ imp.s ! pol.p ! GSg Fem} ; + + oper + reflPron : AForm => Str = + table { + ASg Masc Indef => "свой" ; + ASg Masc Def => "своя" ; + ASgMascDefNom => "своят" ; + ASg Fem Indef => "своя" ; + ASg Fem Def => "своята" ; + ASg Neut Indef => "свое" ; + ASg Neut Def => "своето" ; + APl Indef => "свои" ; + APl Def => "своите" + } ; + + indefAForm : AForm => AForm = + table { + ASg g _ => ASg g Indef ; + ASgMascDefNom => ASg Masc Indef ; + APl _ => APl Indef + } ; } diff --git a/lib/resource/bulgarian/ExtraBulAbs.gf b/lib/resource/bulgarian/ExtraBulAbs.gf index 0ad91f75c..8e6fdeec4 100644 --- a/lib/resource/bulgarian/ExtraBulAbs.gf +++ b/lib/resource/bulgarian/ExtraBulAbs.gf @@ -1,11 +1,14 @@ abstract ExtraBulAbs = Extra ** { fun - GenNPIndef : NP -> Quant ; - -- Feminine variants of pronouns (those in $Structural$ are -- masculine, which is the default when gender is unknown). + PossIndefPron : Pron -> Quant ; + + ReflQuant : Quant ; + ReflIndefQuant : Quant ; + i8fem_Pron : Pron ; i8neut_Pron : Pron ; diff --git a/lib/resource/bulgarian/MorphoBul.gf b/lib/resource/bulgarian/MorphoBul.gf index 4bba5d47f..10fa8a8bb 100644 --- a/lib/resource/bulgarian/MorphoBul.gf +++ b/lib/resource/bulgarian/MorphoBul.gf @@ -20,13 +20,14 @@ oper mkDeterminerPl : Str -> {s : DGender => Role => Str ; n : Number; countable : Bool ; spec : Species} = \vsicki -> {s = \\_,_ => vsicki; n = Pl; countable = False; spec = Indef} ; - mkQuant : Str -> Str -> Str -> Str -> {s : GenNum => Str; spec : Species} = \tozi,tazi,towa,tezi -> { - s = \\gn => case gn of { - GSg Masc => tozi ; - GSg Fem => tazi ; - GSg Neut => towa ; - GPl => tezi - }; + mkQuant : Str -> Str -> Str -> Str -> {s : AForm => Str; spec : Species} = \tozi,tazi,towa,tezi -> { + s = \\aform => case aform of { + ASg Masc _ => tozi ; + ASgMascDefNom => tozi ; + ASg Fem _ => tazi ; + ASg Neut _ => towa ; + APl _ => tezi + }; spec = Indef } ; diff --git a/lib/resource/bulgarian/NounBul.gf b/lib/resource/bulgarian/NounBul.gf index fbf25ad63..173d9772e 100644 --- a/lib/resource/bulgarian/NounBul.gf +++ b/lib/resource/bulgarian/NounBul.gf @@ -41,7 +41,7 @@ concrete NounBul of Noun = CatBul ** open ResBul, Prelude in { } ; DetSg quant ord = { - s = \\g,c => quant.s ! gennum g Sg ++ + s = \\g,c => quant.s ! aform (gennum g Sg) Def c ++ ord.s ! aform (gennum g Sg) quant.spec c ; n = Sg ; countable = False ; @@ -50,7 +50,7 @@ concrete NounBul of Noun = CatBul ** open ResBul, Prelude in { DetPl quant num ord = { s = \\g,c => num.s ! dgenderSpecies g quant.spec c ++ - quant.s ! gennum g num.n ++ + quant.s ! aform (gennum g num.n) Def c ++ ord.s ! aform (gennum g num.n) (case num.nonEmpty of {False => quant.spec; _ => Indef}) c ; n = num.n ; countable = num.nonEmpty ; @@ -58,7 +58,7 @@ concrete NounBul of Noun = CatBul ** open ResBul, Prelude in { } ; PossPron p = { - s = \\gn => p.gen ! aform gn Indef RSubj ; + s = p.gen ; spec = Indef } ; diff --git a/lib/resource/bulgarian/StructuralBul.gf b/lib/resource/bulgarian/StructuralBul.gf index b1483c238..3b67f30e1 100644 --- a/lib/resource/bulgarian/StructuralBul.gf +++ b/lib/resource/bulgarian/StructuralBul.gf @@ -50,7 +50,7 @@ concrete StructuralBul of Structural = CatBul ** --- first_Ord = ss "first" ; DEPRECATED for_Prep = mkPrep "за" Acc ; from_Prep = mkPrep "от" Acc ; - he_Pron = mkPron "той" "него" "му" "свой" "своя" "своят" "своя" "своята" "свое" "своето" "свои" "своите" (GSg Masc) P3 ; + he_Pron = mkPron "той" "него" "му" "негов" "неговия" "неговият" "негова" "неговата" "негово" "неговото" "негови" "неговите" (GSg Masc) P3 ; here_Adv = ss "тук" ; here7to_Adv = ss ["до тук"] ; here7from_Adv = ss ["от тук"] ;