diff --git a/src/hungarian/NounHun.gf b/src/hungarian/NounHun.gf
index 185b361b5..3698ef6ba 100644
--- a/src/hungarian/NounHun.gf
+++ b/src/hungarian/NounHun.gf
@@ -16,17 +16,18 @@ concrete NounHun of Noun = CatHun ** open
True => det.s ! c ;
False => det.s ! Nom
} ++ case
of {
-
+ <_, DetPoss _>
+ => possessed ;
+
=> standalone ;
- <_, DetPoss _>
- => possessed ;
-
+
=> let pron : Pronoun = pronTable ! ; -- Possessor's number
dnum : CatHun.Num = case det.n of { -- Possessed's number
Sg => NumSg ; Pl => NumPl } ;
in caseFromPossStem cn (DetQuant (PossPron pron) dnum) c
} ++ cn.compl ! det.n ! c ;
agr = ;
+ objdef = dt2objdef det.dt ;
} ;
-- : PN -> NP ;
@@ -96,8 +97,7 @@ concrete NounHun of Noun = CatHun ** open
=> [] ;
_ => quant.sp ! num.n ! c }
++ num.s ! Indep ;
- dt = case quant.qt of { QuantPoss stem => DetPoss stem ;
- _ => NoPoss } ;
+ dt = qt2dt quant.qt ;
} ;
-- : Quant -> Num -> Ord -> Det ; -- these five best
@@ -160,23 +160,20 @@ concrete NounHun of Noun = CatHun ** open
DefArt = mkQuant "a" "a" ** {
s,
sp = \\_,_ => pre {"a" ; "az" / v } ;
- qt = Article ;
- objdef = Def ;
+ qt = DefQuant ;
} ;
-- : Quant
IndefArt = mkQuant "egy" [] ** {
s = \\n,_ => case n of {Sg => "egy" ; Pl => []} ;
sp = \\n,_ => case n of {Sg => "egy" ; Pl => "sok"} ;
- qt = Article ;
- objdef = Indef ;
+ qt = IndefArticle ;
} ;
-- : Pron -> Quant
PossPron pron = pron ** {
s,sp = \\_ => pron.s ;
- qt = QuantPoss (agr2PossStem pron.agr) ;
- objdef = Def ;
+ qt = QuantPoss (agr2pstem pron.agr) ;
caseagr = False ;
} ;
diff --git a/src/hungarian/ParamHun.gf b/src/hungarian/ParamHun.gf
index 9969dbd80..dd396ddf3 100644
--- a/src/hungarian/ParamHun.gf
+++ b/src/hungarian/ParamHun.gf
@@ -18,13 +18,15 @@ oper
param
QuantType =
- Article -- Needed to prevent "a 2 cars"
- | Other -- Not poss, not article
+ IndefArticle -- Needed to prevent "a 2 cars"
+ | IndefQuant -- Not IndefArt, not poss, not def
+ | DefQuant
| QuantPoss PossStem -- Which possessive stem it takes
;
DetType =
- NoPoss -- distinction between Article and Other no longer needed
+ DefDet -- distinction between Article and Other no longer needed
+ | IndefDet -- still need def or indef
| DetPoss PossStem -- Sill need to know which stem it takes if Poss
;
@@ -33,13 +35,29 @@ param
oper
-- standard trick to prevent "a one car"
- isIndefArt : {qt : QuantType ; objdef : ObjDef} -> Bool = \quant ->
- case of {
- => True ;
- _ => False
+ isIndefArt : {qt : QuantType} -> Bool = \quant ->
+ case quant.qt of {
+ IndefArticle => True ;
+ _ => False
} ;
- agr2PossStem : Person*Number -> PossStem = \pn ->
+ dt2objdef : DetType -> ObjDef = \dt -> case dt of {
+ IndefDet => Indef ;
+ _ => Def
+ } ;
+
+ objdef2dt : ObjDef -> DetType = \od -> case od of {
+ Def => DefDet ;
+ Indef => IndefDet
+ } ;
+
+ qt2dt : QuantType -> DetType = \qt -> case qt of {
+ QuantPoss x => DetPoss x ;
+ DefQuant => DefDet ;
+ _ => IndefDet
+ } ;
+
+ agr2pstem : Person*Number -> PossStem = \pn ->
case of {
=> dSg_rPl1 ;
=> dSg_rP3 n ;
diff --git a/src/hungarian/ResHun.gf b/src/hungarian/ResHun.gf
index 16a69253e..0ff69be26 100644
--- a/src/hungarian/ResHun.gf
+++ b/src/hungarian/ResHun.gf
@@ -185,7 +185,6 @@ oper
BaseQuant : Type = {
poss : HarmForms ; -- Quants made by PossPron need this, empty for others
- objdef : ObjDef ; -- How V2 agrees if NP with this Det is an object
caseagr : Bool ; -- If it agrees in case: "azoknak a nőknek" vs. "sok nőknek"
} ;
@@ -200,8 +199,7 @@ oper
mkQuant : (s,sp : Str) -> Quant = \s,sp -> {
s = mkCaseNoun s ;
sp = mkCaseNoun sp ;
- qt = Other ;
- objdef = Def ;
+ qt = DefQuant ;
caseagr = True ;
poss = harm1 [] ;
} ;
@@ -212,7 +210,6 @@ oper
s,
sp : Case => Str ;
n : Number ;
--- numtype : NumType ; -- Whether its Num component is digit, numeral or Sg/Pl
dt : DetType ;
} ;
@@ -221,9 +218,8 @@ oper
sp = mkCaseNoun s ! n ;
n = n ;
numtype = NoNum ;
- objdef = d ;
caseagr = ca ;
- dt = NoPoss ;
+ dt = objdef2dt d ;
poss = harm1 [] ;
} ;