diff --git a/src/bulgarian/MorphoBul.gf b/src/bulgarian/MorphoBul.gf index 5d6b8f02c..c28ecdc8e 100644 --- a/src/bulgarian/MorphoBul.gf +++ b/src/bulgarian/MorphoBul.gf @@ -22,27 +22,72 @@ resource MorphoBul = ResBul ** open oper --2 Determiners - mkDeterminerSg : Str -> Str -> Str -> {s : Bool => AGender => Role => Str; nn : NNumber; spec : Species; p : Polarity} = \vseki,vsiaka,vsiako -> - {s = \\_,g,_ => table AGender [vseki;vseki;vsiaka;vsiako] ! g; nn = NNum Sg; spec = Indef; p = Pos} ; + mkDeterminerSg = overload { + mkDeterminerSg : Str -> Str -> Str -> {s : Bool => AGender => Role => Str; nn : NNumber; spec : Species; p : Polarity} = \vseki,vsiaka,vsiako -> + {s = \\_,g,_ => table AGender [vseki;vseki;vsiaka;vsiako] ! g; nn = NNum Sg; spec = Indef; p = Pos} ; + mkDeterminerSg : Str -> Str -> Str -> Str -> Str -> Str -> {s : Bool => AGender => Role => Str; nn : NNumber; spec : Species; p : Polarity} = \vseki,vsiaka,vsiako,vseki',vsiaka',vsiako' -> + {s = \\sp,g,_ => case sp of { + True => table AGender [vseki; vseki; vsiaka; vsiako ] ! g; + False => table AGender [vseki';vseki';vsiaka';vsiako'] ! g + }; + nn = NNum Sg; + spec = Indef; + p = Pos + } ; + } ; + mkDeterminerPl = overload { mkDeterminerPl : Str -> {s : Bool => AGender => Role => Str ; nn : NNumber ; spec : Species; p : Polarity} = \vsicki -> {s = \\_,_,_ => vsicki; nn = NNum Pl; spec = Indef; p = Pos} ; mkDeterminerPl : Str -> Str -> Str -> Str -> {s : Bool => AGender => Role => Str ; nn : NNumber ; spec : Species; p : Polarity} = \i_dvamata,i_dvata,i_dvete,i_dvete_neut -> {s = \\_,g,_ => table AGender [i_dvamata;i_dvata;i_dvete;i_dvete_neut] ! g; nn = NNum Pl; spec = Indef; p = Pos} ; + mkDeterminerPl : Str -> Str -> Str -> Str -> Str -> Str -> Str -> Str -> {s : Bool => AGender => Role => Str ; nn : NNumber ; spec : Species; p : Polarity} = \i_dvamata,i_dvata,i_dvete,i_dvete_neut,i_dvamata',i_dvata',i_dvete',i_dvete_neut' -> + {s = \\sp,g,_ => case sp of { + True => table AGender [i_dvamata; i_dvata; i_dvete; i_dvete_neut ] ! g; + False => table AGender [i_dvamata';i_dvata';i_dvete';i_dvete_neut'] ! g + }; + nn = NNum Pl; + spec = Indef; + p = Pos + } ; } ; - mkQuant : Str -> Str -> Str -> Str -> {s : Bool => AForm => Str; nonEmpty : Bool; spec : Species; p : Polarity} = \tozi,tazi,towa,tezi -> - { s = \\_ => table { - ASg Masc _ => tozi ; - ASgMascDefNom => tozi ; - ASg Fem _ => tazi ; - ASg Neut _ => towa ; - APl _ => tezi + mkQuant = overload { + mkQuant : Str -> Str -> Str -> Str -> {s : Bool => AForm => Str; nonEmpty : Bool; spec : Species; p : Polarity} = \tozi,tazi,towa,tezi -> + { s = \\_ => table { + ASg Masc _ => tozi ; + ASgMascDefNom => tozi ; + ASg Fem _ => tazi ; + ASg Neut _ => towa ; + APl _ => tezi } ; - nonEmpty = True ; - spec = Indef ; - p = Pos - } ; + nonEmpty = True ; + spec = Indef ; + p = Pos + } ; + + mkQuant : Str -> Str -> Str -> Str -> Str -> Str -> Str -> Str -> {s : Bool => AForm => Str; nonEmpty : Bool; spec : Species; p : Polarity} = \tozi,tazi,towa,tezi,tozi',tazi',towa',tezi' -> + { s = table { + True => table { + ASg Masc _ => tozi ; + ASgMascDefNom => tozi ; + ASg Fem _ => tazi ; + ASg Neut _ => towa ; + APl _ => tezi + } ; + False => table { + ASg Masc _ => tozi' ; + ASgMascDefNom => tozi' ; + ASg Fem _ => tazi' ; + ASg Neut _ => towa' ; + APl _ => tezi' + } + } ; + nonEmpty = True ; + spec = Indef ; + p = Pos + } ; + } ; --2 Verbs diff --git a/src/bulgarian/NounBul.gf b/src/bulgarian/NounBul.gf index 2141a375b..c73c1b516 100644 --- a/src/bulgarian/NounBul.gf +++ b/src/bulgarian/NounBul.gf @@ -236,9 +236,5 @@ concrete NounBul of Noun = CatBul ** open ResBul, Prelude in { spec = dap.spec; p = dap.p } ; - DetDAP det = {s = \\sp,g,role => det.s ! sp ! g ! role; - nn = det.nn; - spec = det.spec; - p = det.p - } ; + DetDAP det = det ; } diff --git a/src/english/CatEng.gf b/src/english/CatEng.gf index f38e97a6e..a92e41ac1 100644 --- a/src/english/CatEng.gf +++ b/src/english/CatEng.gf @@ -70,13 +70,12 @@ concrete CatEng of Cat = CommonX - [Pol,SC] ** open ResEng, Prelude in { -- sp Nom | Poss. pron. (subj.) | mine -- sp Gen | Poss. pron. (obj.) | mine's Pron = {s : NPCase => Str ; sp : Case => Str ; a : Agr} ; - Det = {s : Str ; sp : NPCase => Str ; n : Number ; hasNum : Bool} ; + DAP, Det = {s : Str ; sp : Gender => Bool => NPCase => Str ; n : Number ; hasNum : Bool} ; Predet = {s : Str} ; Ord = { s : Case => Str } ; Num = {s : Case => Str ; n : Number ; hasCard : Bool} ; Card = {s : Case => Str ; n : Number} ; - Quant = {s : Bool => Number => Str ; sp : Bool => Number => NPCase => Str} ; - DAP = {s : Str ; n : Number} ; + Quant = {s : Bool => Number => Str ; sp : Gender => Bool => Number => NPCase => Str} ; -- Numeral diff --git a/src/english/ConjunctionEng.gf b/src/english/ConjunctionEng.gf index 64aeed5f5..93284af60 100644 --- a/src/english/ConjunctionEng.gf +++ b/src/english/ConjunctionEng.gf @@ -26,7 +26,7 @@ concrete ConjunctionEng of Conjunction = ConjCN co ns = conjunctDistrTable2 Number Case co ns ** {g = Neutr} ; --- gender? - ConjDet c xs = let cxs = (conjunctDistrSS c xs).s in {s = cxs ; sp = \\_ => cxs ++ "one" ; hasNum = False ; n = xs.n} ; + ConjDet c xs = let cxs = (conjunctDistrSS c xs).s in {s = cxs ; sp = \\_,_,_ => cxs ++ "one" ; hasNum = False ; n = xs.n} ; -- These fun's are generated from the list cat's. diff --git a/src/english/DictEng.gf b/src/english/DictEng.gf index 16f27744b..dad451440 100644 --- a/src/english/DictEng.gf +++ b/src/english/DictEng.gf @@ -19159,7 +19159,7 @@ lin everlasting_N = mkN "everlasting" ; lin everlastingness_N = mkN "everlastingness" ; lin evermore_Adv = mkAdv "evermore"; lin eversion_N = mkN "eversion" ; -lin every_Det = mkDeterminerSpec singular "every" "everyone" False ; +lin every_Det = mkDeterminerSpec singular "every" "everyone" "everything" False ; lin everybody_NP = mkNP "everybody" "everybody" "everybody's" singular P3 human; lin everyday_A = compoundA (mkA "everyday"); lin everyman_N = mkN "everyman" ; diff --git a/src/english/ExtendEng.gf b/src/english/ExtendEng.gf index 76a1e940d..1b2faf331 100644 --- a/src/english/ExtendEng.gf +++ b/src/english/ExtendEng.gf @@ -10,7 +10,7 @@ concrete ExtendEng of Extend = MkVPS2, ConjVPS2, ComplVPS2, MkVPI2, ConjVPI2, ComplVPI2, Base_nr_RNP, Base_rn_RNP, Base_rr_RNP, ByVP, CompBareCN, CompIQuant, CompQS, CompS, CompVP, ComplBareVS, ComplGenVV, ComplSlashPartLast, ComplVPSVV, CompoundAP, - CompoundN, ConjRNP, ConjVPS, ConsVPS, Cons_nr_RNP, Cons_rr_RNP, DetNPFem, EmbedPresPart, EmptyRelSlash, + CompoundN, ConjRNP, ConjVPS, ConsVPS, Cons_nr_RNP, Cons_rr_RNP, DetNPMasc, DetNPFem, EmbedPresPart, EmptyRelSlash, ExistsNP, ExistCN, ExistMassCN, ExistPluralCN, FocusAP, FocusAdV, FocusAdv, FocusObj, GenIP, GenModIP, GenModNP, GenNP, GenRP, GerundAdv, GerundCN, GerundNP, IAdvAdv, ICompAP, InOrderToVP, MkVPS, NominalizeVPSlashNP, @@ -30,7 +30,7 @@ concrete ExtendEng of Extend = ParadigmsEng in { lin - GenNP np = {s = \\_,_ => np.s ! npGen ; sp = \\_,_,_ => np.s ! npGen} ; + GenNP np = {s = \\_,_ => np.s ! npGen ; sp = \\_,_,_,_ => np.s ! npGen} ; GenIP ip = {s = \\_ => ip.s ! NCase Gen} ; GenRP nu cn = { s = \\c => "whose" ++ nu.s ! Nom ++ @@ -59,12 +59,12 @@ concrete ExtendEng of Extend = } ; DetNPMasc det = { - s = det.sp ; + s = det.sp ! Masc ! False ; a = agrgP3 det.n Masc } ; DetNPFem det = { - s = det.sp ; + s = det.sp ! Fem ! False ; a = agrgP3 det.n Fem } ; diff --git a/src/english/ExtraEng.gf b/src/english/ExtraEng.gf index dfd00a0ef..114ca208c 100644 --- a/src/english/ExtraEng.gf +++ b/src/english/ExtraEng.gf @@ -2,7 +2,7 @@ concrete ExtraEng of ExtraEngAbs = CatEng ** open ResEng, Coordination, Prelude, MorphoEng, ParadigmsEng in { lin - GenNP np = {s = \\_,_ => np.s ! npGen ; sp = \\_,_,_ => np.s ! npGen} ; + GenNP np = {s = \\_,_ => np.s ! npGen ; sp = \\_,_,_,_ => np.s ! npGen} ; GenIP ip = {s = \\_ => ip.s ! NCase Gen} ; GenRP nu cn = { s = \\c => "whose" ++ nu.s ! Nom ++ diff --git a/src/english/MorphoEng.gf b/src/english/MorphoEng.gf index be3996e29..6a0d2fad3 100644 --- a/src/english/MorphoEng.gf +++ b/src/english/MorphoEng.gf @@ -17,12 +17,12 @@ resource MorphoEng = open Prelude, (Predef=Predef), ResEng in { oper mkDeterminer : Number -> Str -> - {s : Str ; sp : NPCase => Str; n : Number ; hasNum : Bool} = \n,s -> mkDeterminerSpec n s s False ; --- was True!? + {s : Str ; sp : Gender => Bool => NPCase => Str; n : Number ; hasNum : Bool} = \n,s -> mkDeterminerSpec n s s s False ; --- was True!? - mkDeterminerSpec : Number -> Str -> Str -> Bool -> - {s : Str ; sp : NPCase => Str; n : Number ; hasNum : Bool} = \n,s,sp,hasNum -> - {s = s; - sp = \\c => regGenitiveS sp ! npcase2case c ; + mkDeterminerSpec : Number -> Str -> Str -> Str -> Bool -> + {s : Str ; sp : Gender => Bool => NPCase => Str; n : Number ; hasNum : Bool} = \n,s,sp1,sp2,hasNum -> + {s = s; + sp = \\g,hasAdj,c => regGenitiveS (case g of {Masc=>sp1; Fem=>sp1; Neutr=>sp2}) ! npcase2case c ; n = n ; hasNum = hasNum ; --- doesn't matter when s = sp } ; diff --git a/src/english/NounEng.gf b/src/english/NounEng.gf index 71cb80be5..c4ec24f6a 100644 --- a/src/english/NounEng.gf +++ b/src/english/NounEng.gf @@ -38,35 +38,37 @@ concrete NounEng of Noun = CatEng ** open MorphoEng, ResEng, Prelude in { DetQuant quant num = { s = quant.s ! num.hasCard ! num.n ++ num.s ! Nom; - sp = \\c => case num.hasCard of { - False => quant.sp ! num.hasCard ! num.n ! c ++ num.s ! Nom ; - True => quant.s ! num.hasCard ! num.n ++ num.s ! npcase2case c - } ; + sp = \\g,hasAdj,c => case num.hasCard of { + False => quant.sp ! g ! (orB hasAdj num.hasCard) ! num.n ! c ++ num.s ! Nom ; + True => quant.s ! num.hasCard ! num.n ++ num.s ! npcase2case c + } ; n = num.n ; hasNum = num.hasCard } ; DetQuantOrd quant num ord = { - s = quant.s ! num.hasCard ! num.n ++ num.s ! Nom ++ ord.s ! Nom; - sp = \\c => quant.s ! num.hasCard ! num.n ++ num.s ! Nom ++ ord.s ! npcase2case c ; + s = quant.s ! num.hasCard ! num.n ++ num.s ! Nom ++ ord.s ! Nom; + sp = \\g,_,c => quant.s ! num.hasCard ! num.n ++ num.s ! Nom ++ ord.s ! npcase2case c ; n = num.n ; hasNum = True } ; DetNP det = { -- s = case det.hasNum of {True => \\_ => det.s ; _ => \\c => det.sp ! c} ; - s = det.sp ; + s = det.sp ! Neutr ! False ; a = agrP3 det.n } ; PossPron p = { s = \\_,_ => p.s ! NCase Gen ; - sp = \\_,_,c => p.sp ! npcase2case c + sp = \\_,hasAdj,_,c => case hasAdj of { + True => p.s ! NCase Gen ; + False => p.sp ! npcase2case c + } } ; NumSg = {s = \\c => []; n = Sg ; hasCard = False} ; NumPl = {s = \\c => []; n = Pl ; hasCard = False} ; ----b NoOrd = {s = []} ; NumCard n = n ** {hasCard = True} ; @@ -84,8 +86,8 @@ concrete NounEng of Noun = CatEng ** open MorphoEng, ResEng, Prelude in { DefArt = { s = \\hasCard,n => artDef ; - sp = \\hasCard,n => case of { - => table { NCase Gen => "its"; _ => "it" } ; + sp = \\g,hasCard,n => case of { + => table { NCase Gen => table Gender ["its"; "his"; "her"] ! g; _ => table Gender ["it"; "he"; "she"] ! g } ; => table { NCase Nom => "they"; NPAcc => "them"; _ => "theirs" } ; _ => \\c => artDef } @@ -96,7 +98,7 @@ concrete NounEng of Noun = CatEng ** open MorphoEng, ResEng, Prelude in { => artIndef ; _ => [] } ; - sp = \\hasCard,n => case of { + sp = \\g,hasCard,n => case of { => table {NCase Gen => "one's"; _ => "one" }; => table {NCase Gen => "ones'"; _ => "ones" } ; _ => \\c => [] @@ -150,15 +152,20 @@ concrete NounEng of Noun = CatEng ** open MorphoEng, ResEng, Prelude in { PartNP cn np = {s = \\n,c => cn.s ! n ! c ++ "of" ++ np.s ! NPAcc ; g = cn.g} ; CountNP det np = { - s = \\c => det.sp ! c ++ "of" ++ np.s ! NPAcc ; + s = \\c => det.sp ! Neutr ! False ! c ++ "of" ++ np.s ! NPAcc ; a = agrP3 det.n } ; - AdjDAP det ap = { - s = det.s ++ ap.s ! agrgP3 det.n Masc ; --- post-ap's ? "this larger than life (movie)" - n = det.n ; + AdjDAP dap ap = { + s = dap.s ++ ap.s ! agrgP3 dap.n Masc ; --- post-ap's ? "this larger than life (movie)" + sp = \\g,_,c => case c of { + NCase Gen => dap.sp ! g ! True ! NCase Nom ++ ap.s ! agrgP3 dap.n g ++ BIND ++ "'s" ; + c => dap.sp ! g ! True ! c ++ ap.s ! agrgP3 dap.n g + } ; + n = dap.n ; + hasNum = dap.hasNum } ; - DetDAP d = d ; -- forgetting sp and hasNumber + DetDAP d = d ; } diff --git a/src/english/ParadigmsEng.gf b/src/english/ParadigmsEng.gf index 496dba692..20439659b 100644 --- a/src/english/ParadigmsEng.gf +++ b/src/english/ParadigmsEng.gf @@ -434,15 +434,16 @@ mkInterj : Str -> Interj nounPN n = lin PN {s = n.s ! singular ; g = n.g} ; mkQuant = overload { - mkQuant : (this, these : Str) -> Quant = \sg,pl -> mkQuantifier sg pl sg pl; - mkQuant : (no_sg, no_pl, none_sg, non_pl : Str) -> Quant = mkQuantifier; + mkQuant : (this, these : Str) -> Quant = \sg,pl -> mkQuantifier sg pl sg pl sg pl; + mkQuant : (no_sg, no_pl, none_sg, non_pl : Str) -> Quant = \sg,pl,sg',pl' -> mkQuantifier sg pl sg' pl' sg' pl'; } ; - mkQuantifier : Str -> Str -> Str -> Str -> Quant = - \sg,pl,sg',pl' -> lin Quant { - s = \\_ => table { Sg => sg ; Pl => pl } ; - sp = \\_ => table { - Sg => \\c => regGenitiveS sg' ! npcase2case c ; Pl => \\c => regGenitiveS pl' ! npcase2case c} + mkQuantifier : Str -> Str -> Str -> Str -> Str -> Str -> Quant = + \sg,pl,sg1',pl1',sg2',pl2' -> lin Quant { + s = \\_ => table { Sg => sg ; Pl => pl } ; + sp = \\g,_ => table { + Sg => \\c => regGenitiveS (case g of {Masc=>sg1'; Fem=>sg1'; Neutr=>sg2'}) ! npcase2case c ; + Pl => \\c => regGenitiveS (case g of {Masc=>pl1'; Fem=>pl1'; Neutr=>pl2'}) ! npcase2case c} } ; mkOrd : Str -> Ord = \x -> lin Ord { s = regGenitiveS x}; diff --git a/src/english/StructuralEng.gf b/src/english/StructuralEng.gf index e05705548..b2be5692c 100644 --- a/src/english/StructuralEng.gf +++ b/src/english/StructuralEng.gf @@ -54,7 +54,7 @@ concrete StructuralEng of Structural = CatEng ** during_Prep = mkPrep "during" ; either7or_DConj = mkConj "either" "or" singular ; everybody_NP = regNP "everybody" singular ; - every_Det = mkDeterminerSpec singular "every" "everyone" False ; + every_Det = mkDeterminerSpec singular "every" "everyone" "everything" False ; everything_NP = regNP "everything" singular ; everywhere_Adv = mkAdv "everywhere" ; few_Det = mkDeterminer plural "few" ; diff --git a/src/scandinavian/CatScand.gf b/src/scandinavian/CatScand.gf index 589d370fa..0aabe12fd 100644 --- a/src/scandinavian/CatScand.gf +++ b/src/scandinavian/CatScand.gf @@ -75,13 +75,12 @@ incomplete concrete CatScand of Cat = CN = {s : Number => DetSpecies => Case => Str ; g : NGender ; isMod : Bool} ; NP = {s : NPForm => Str ; a : Agr ; isPron : Bool} ; Pron = {s : NPForm => Str ; a : Agr} ; - Det = {s,sp : Bool => NGender => Str ; n : Number ; det : DetSpecies} ; + Det,DAP = {s,sp : Bool => NGender => Str ; n : Number ; det : DetSpecies} ; Quant = {s,sp : Number => Bool => Bool => NGender => Str ; det : DetSpecies} ; Predet = {s : Gender => Number => Str ; p : Str ; a : PredetAgr} ; Num = {s : NGender => Str ; isDet : Bool ; n : Number} ; Card = {s : NGender => Str ; n : Number} ; Ord = {s : Str} ; - DAP = {s : Bool => NGender => Str ; n : Number ; det : DetSpecies} ; -- Numeral diff --git a/src/scandinavian/NounScand.gf b/src/scandinavian/NounScand.gf index f5efada50..a1df7488d 100644 --- a/src/scandinavian/NounScand.gf +++ b/src/scandinavian/NounScand.gf @@ -254,11 +254,11 @@ incomplete concrete NounScand of Noun = } ; AdjDAP det ap = { - s = \\b,g => det.s ! b ! g ++ ap.s ! agrAdj (gennum (ngen2gen g) det.n) det.det ; - n = det.n ; - det = det.det ; + s,sp = \\b,g => det.s ! b ! g ++ ap.s ! agrAdj (gennum (ngen2gen g) det.n) det.det ; + n = det.n ; + det= det.det ; } ; - DetDAP d = d ; -- forgetting sp + DetDAP d = d ; } diff --git a/src/swedish/MakeStructuralSwe.gf b/src/swedish/MakeStructuralSwe.gf index 469823565..33a8cbda3 100644 --- a/src/swedish/MakeStructuralSwe.gf +++ b/src/swedish/MakeStructuralSwe.gf @@ -29,6 +29,18 @@ oper det = DIndef } ; + mkQuantSpec : Str -> Str -> Str -> Str -> Str -> Str -> Quant = \naagon,naagot,naagra,naagon',naagot',naagra' -> + lin Quant {s = table { + Sg => \\_,_ => table {Utr => naagon ; Neutr => naagot} ; + Pl => \\_,_,_ => naagra + } ; + sp= table { + Sg => \\_,_ => table {Utr => naagon' ; Neutr => naagot'} ; + Pl => \\_,_,_ => naagra' + } ; + det = DIndef + } ; + mkDet = overload { mkDet : Str -> Det = \s -> lin Det {s,sp = \\_,_ => s ; n = P.singular ; det = DDef Indef} ;