From 8fc2460af6ad2ce39764ee701ca493813976930a Mon Sep 17 00:00:00 2001 From: Aarne Ranta Date: Fri, 30 Sep 2022 18:12:48 +0200 Subject: [PATCH] Hrv comparison forms --- src/croatian/AdjectiveHrv.gf | 12 ++- src/croatian/CatHrv.gf | 5 +- src/croatian/IdiomHrv.gf | 2 +- src/croatian/MissingHrv.gf | 1 - src/croatian/NounHrv.gf | 2 +- src/croatian/ParadigmsHrv.gf | 26 ++++- src/croatian/RelativeHrv.gf | 2 +- src/croatian/ResHrv.gf | 190 ++++------------------------------- src/croatian/VerbHrv.gf | 2 +- 9 files changed, 61 insertions(+), 181 deletions(-) diff --git a/src/croatian/AdjectiveHrv.gf b/src/croatian/AdjectiveHrv.gf index 98f71a676..6e17cd4f1 100644 --- a/src/croatian/AdjectiveHrv.gf +++ b/src/croatian/AdjectiveHrv.gf @@ -2,12 +2,20 @@ concrete AdjectiveHrv of Adjective = CatHrv ** open ResHrv, Prelude in { lin - PositA a = adjFormsAdjective a ** {isPost = False} ; + PositA a = adjFormsAdjective a.posit ** {isPost = False} ; AdAP ada ap = ap ** {s = \\g,n,c => ada.s ++ ap.s ! g ! n ! c} ; AdjOrd a = adjFormsAdjective a ** {isPost = False} ; + ComparA a np = + let ap = adjFormsAdjective a.compar + in + ap ** { + s = \\g,n,c => ap.s ! g ! n ! c ++ od_Str ++ np.s ! Gen ; + isPost = True ; + } ; + ComplA2 a np = let ap = adjFormsAdjective a in @@ -18,7 +26,7 @@ concrete AdjectiveHrv of Adjective = CatHrv ** open ResHrv, Prelude in { UseA2 a = adjFormsAdjective a ** {isPost = False} ; - UseComparA a = adjFormsAdjective a ** {isPost = False} ; ---- TODO: this gives positive forms + UseComparA a = adjFormsAdjective a.compar ** {isPost = False} ; AdvAP ap adv = ap ** {s = \\g,n,c => ap.s ! g ! n ! c ++ adv.s ; isPost = True} ; diff --git a/src/croatian/CatHrv.gf b/src/croatian/CatHrv.gf index 293879a3e..065e479ba 100644 --- a/src/croatian/CatHrv.gf +++ b/src/croatian/CatHrv.gf @@ -26,7 +26,7 @@ concrete CatHrv of Cat = V2 = {s : VerbForms ; c : ComplementCase} ; VS,VQ = {s : VerbForms} ; - A = ResHrv.AdjForms ; + A = {posit, compar, superl : AdjForms} ; AP = ResHrv.Adjective ** {isPost : Bool} ; -- {s : Gender => Number => Case => Str} A2 = ResHrv.AdjForms ** {c : ComplementCase} ; @@ -62,7 +62,8 @@ concrete CatHrv of Cat = linref N = \s -> s.snom ; - A = \s -> s.msnom ; + A = \s -> s.posit.msnom ; + V = \v -> v.s ! VInf ; lincat Numeral = {s : AdjForms ; size : NumSize} ; diff --git a/src/croatian/IdiomHrv.gf b/src/croatian/IdiomHrv.gf index f6fee652a..7c4e4baad 100644 --- a/src/croatian/IdiomHrv.gf +++ b/src/croatian/IdiomHrv.gf @@ -3,7 +3,7 @@ concrete IdiomHrv of Idiom = CatHrv ** open Prelude, ResHrv in { lin ExistNP np = { ---- TODO verify this subj = np.s ! Nom ; - verb = biti_VerbForms ; ---- TODO: jesam + verb = copula_VerbForms ; clit, compl = [] ; a = np.a } ; diff --git a/src/croatian/MissingHrv.gf b/src/croatian/MissingHrv.gf index c88a55e0c..ab1a214ab 100644 --- a/src/croatian/MissingHrv.gf +++ b/src/croatian/MissingHrv.gf @@ -14,7 +14,6 @@ oper CleftNP : NP -> RS -> Cl = notYet "CleftNP" ; oper CompCN : CN -> Comp = notYet "CompCN" ; oper CompIAdv : IAdv -> IComp = notYet "CompIAdv" ; oper CompIP : IP -> IComp = notYet "CompIP" ; -oper ComparA : A -> NP -> AP = notYet "ComparA" ; oper ComparAdvAdj : CAdv -> A -> NP -> Adv = notYet "ComparAdvAdj" ; oper ComparAdvAdjS : CAdv -> A -> S -> Adv = notYet "ComparAdvAdjS" ; oper ComplN2 : N2 -> NP -> CN = notYet "ComplN2" ; diff --git a/src/croatian/NounHrv.gf b/src/croatian/NounHrv.gf index 5757cc2e1..9ebea0264 100644 --- a/src/croatian/NounHrv.gf +++ b/src/croatian/NounHrv.gf @@ -95,7 +95,7 @@ lin } ; AdNum adn card = card ** {s = \\g,c => adn.s ++ card.s ! g ! c} ; - OrdSuperl a = a ; ---- TODO superl + OrdSuperl a = a.superl ; } diff --git a/src/croatian/ParadigmsHrv.gf b/src/croatian/ParadigmsHrv.gf index 2324e957b..5d60877a2 100644 --- a/src/croatian/ParadigmsHrv.gf +++ b/src/croatian/ParadigmsHrv.gf @@ -117,13 +117,31 @@ oper mkA = overload { mkA : Str -> A - = \s -> lin A (velikA s) ; - mkA : AForms -> A - = \s -> lin A s ; + = \s -> + let + velik = velikA s ; + velikiji = regComparAForms velik ; + in lin A { + posit = velik ; + compar = velikiji ; + superl = superlAForms velikiji + } ; + mkA : (pos, comp : Str) -> A + = \pos, comp -> lin A { + posit = velikA pos ; + compar = velikA comp ; + superl = superlAForms (velikA comp) + } ; + mkA : (posit, compar : AForms) -> A + = \posit,compar -> lin A { + posit = posit ; + compar = compar ; + superl = superlAForms compar + } ; } ; invarA : Str -> A - = \s -> lin A (invarAForms s) ; + = \s -> lin A {posit,compar,superl = invarAForms s} ; ---- TODO compar, superl? AForms : Type = R.AdjForms ; diff --git a/src/croatian/RelativeHrv.gf b/src/croatian/RelativeHrv.gf index 71942197b..88abb14d5 100644 --- a/src/croatian/RelativeHrv.gf +++ b/src/croatian/RelativeHrv.gf @@ -12,7 +12,7 @@ lin } } ; - IdRP = mkA "koji" ; + IdRP = (mkA "koji").posit ; } diff --git a/src/croatian/ResHrv.gf b/src/croatian/ResHrv.gf index de749092c..94724bb42 100644 --- a/src/croatian/ResHrv.gf +++ b/src/croatian/ResHrv.gf @@ -400,6 +400,17 @@ adjFormsAdjective : AdjForms -> Adjective = \afs -> { pgen = velk + "ih" ; } ; + regComparAForms : AdjForms -> AdjForms + = \aposit -> case init aposit.fsnom of { + grub@(_ + "b"|"p"|"v"|"h") => velikA (grub + "lji") ; + star => velikA (star + "iji") + } ; + + superlAForms : AdjForms -> AdjForms + = \acompar -> velikA ("naj" + acompar.msnom) ; + + od_Str = "od" ; + --------------------- -- Verbs -- Wiki @@ -474,6 +485,15 @@ adjFormsAdjective : AdjForms -> Adjective = \afs -> { } ; negative = \\n,p => "ni" + sam ! n ! p } ; + +-- Wiki: some grammars (chiefly Serbian ones) treat jesam as a defective verb +-- having only present tense. Others treat these forms as two realizations +-- of the same irregular verb biti, jesam being imperfective and budem perfective. + + copula_VerbForms : VerbForms = table { + VPres n p => jesam_Copula.short ! n ! p ; + v => biti_VerbForms ! v + } ; biti_VerbForms : VerbForms = aeiVerbForms "biti" "budem" "bio" ; @@ -580,52 +600,6 @@ adjFormsAdjective : AdjForms -> Adjective = \afs -> { mkPron : Agr -> PronForms ** {poss : AdjForms} = \a -> personalPron a ** {poss = possessivePron a} ; -{- --------------------------------- --- demonstrative pronouns, used for Quant and Det - -oper - DemPronForms : Type = { - msnom, fsnom, nsnom, - msgen, fsgen, pgen, - msdat, -- fsdat = fsgen unlike AdjForms - fsacc, - msloc, - msins, fsins, - ampnom, fpnom, -- mpacc = fpacc = fpnom - pgen, - pdat, -- NOT msins like AdjForms - pins : Str - } ; - - demPronFormsAdjective : DemPronForms -> Str -> Adjective = - \dem,s -> - let - demAdj = dem ** {fsdat = dem.fsgen} ; - adjAdj = adjFormsAdjective demAdj - in { - s = \\g,n,c => case of { - <_,Pl,Dat> => dem.pdat ; - => dem.pgen ; - => dem.fpnom ; - _ => adjAdj.s ! g ! n ! c - } + s - } ; - - justDemPronFormsAdjective : DemPronForms -> Adjective = - \dem -> - let - demAdj = dem ** {fsdat = dem.fsgen} ; - adjAdj = adjFormsAdjective demAdj - in { - s = \\g,n,c => case of { - <_,Pl,Dat> => dem.pdat ; - => dem.pgen ; - => dem.fpnom ; - _ => adjAdj.s ! g ! n ! c - } - } ; --} param NumSize = NS_1 | NS_2_4 | NS_5_20 | NS_20_ ; @@ -636,49 +610,7 @@ oper } ; {- - mkDemPronForms : Str -> DemPronForms = \jedn -> { - msnom = jedn + "y" ; -- should be "jeden" - fsnom = jedn + "a" ; - nsnom = jedn + "o" ; - msgen = jedn + "ého" ; - fsgen = jedn + "ej" ; - msdat = jedn + "ému" ; - fsacc = jedn + "u" ; - msloc = jedn + "om" ; - msins = jedn + "ým" ; - fsins = jedn + "ou" ; - ampnom = jedn + "i" ; - fpnom = jedn + "y" ; - pgen = jedn + "ých" ; - pdat = jedn + "ým" ; - pins = jedn + "ými" ; - } ; - - tenDemPronForms : Str -> DemPronForms = \tam -> { - msnom = tam + "ten" ; - fsnom = tam + "tá" ; - nsnom = tam + "to" ; - msgen = tam + "toho" ; - fsgen = tam + "tej" ; - msdat = tam + "tomu" ; - fsacc = tam + "tú" ; - msloc = tam + "tom" ; - msins = tam + "tým" ; - fsins = tam + "tou" ; - ampnom = tam + "tí" ; - fpnom = tam + "tie" ; - pgen = tam + "tých" ; - pdat = tam + "tým" ; - pins = tam + "tými" ; - } ; - - invarDemPronForms : Str -> DemPronForms = \s -> { - msnom, fsnom, nsnom, msgen, fsgen, - msdat, fsacc, msloc, msins, fsins, - ampnom, fpnom, pgen, pdat, pins = s ; - } ; - --- interrogatives +-- interrogatives TODO ktoForms : Case => Str = table { Nom => "kto" ; @@ -695,87 +627,9 @@ oper Loc => "čom" ; Ins => "čím" } ; - --- Numerals - - -- singular forms of demonstratives - NumeralForms : Type = { - ---- amsnom, - msnom, fsnom, nsnom, - msgen, fsgen, - msdat, - fsacc, - msloc, - msins, fsins : Str - } ; - - numeralFormsDeterminer : NumeralForms -> NumSize -> Determiner = - \nume,size -> - let - dem = nume ** - {ampnom, fpnom, pgen, pdat, pins = nume.msnom} ; --- plural forms not used - demAdj = dem ** {fsdat = dem.fsgen} ; - adjAdj = adjFormsAdjective demAdj - in { - s = \\g,c => case of { ----- => nume.amsnom ; - _ => adjAdj.s ! g ! Sg ! c - } ; - size = size - } ; - - -- example: number 1 - oneNumeral : Determiner = numeralFormsDeterminer ((mkDemPronForms "jedn") ** {msnom = "jeden"}) Num1 ; - - -- numbers 2,3,4 ---- to check if everything comes out right with the determiner type - twoNumeral : Determiner = - let forms = { ----- amsnom = "dvaja" ; - msnom = "dva" ; fsnom, nsnom, fsacc = "dve" ; - msgen, fsgen, msloc = "dvoch" ; - msdat = "dvom" ; - msins, fsins = "dvoma" - } - in numeralFormsDeterminer forms Num2_4 ; - - threeNumeral : Determiner = - let forms = { - ---- amsnom = "traja" ; - msnom, fsnom, nsnom, fsacc = "tri" ; ---- amsacc = "troch" - msgen, fsgen = "troch" ; - msdat = "trom" ; - msloc = "troch" ; - msins,fsins = "tromi" ; - } - in numeralFormsDeterminer forms Num2_4 ; - - fourNumeral : Determiner = - let forms = { - ---- amsnom = "štyria" ; - msnom, fsnom, nsnom, fsacc = "štyri" ; ---- amsacc = "štyroch" - msgen, fsgen = "štyroch" ; - msdat = "štyrom" ; - msloc = "štyroch" ; - msins,fsins = "štyrmi" ; - } - in numeralFormsDeterminer forms Num2_4 ; - - -- for the numbers 5 upwards - regNumeral : Str -> Str -> Str -> Str -> Determiner = \pät,piatich,piatim,piatimi -> - let forms = { - msnom,fsnom,nsnom, fsacc = pät ; - msgen, fsgen, msloc = piatich ; - msdat = piatim ; - msins, fsins = piatimi ; - } - in numeralFormsDeterminer forms Num5 ; - - invarDeterminer : Str -> NumSize -> Determiner = \sto,size -> - regNumeral sto sto sto sto ; - - invarNumeral : Str -> Determiner = \s -> invarDeterminer s Num5 ; -} + -------------------------------- -- combining nouns with numerals diff --git a/src/croatian/VerbHrv.gf b/src/croatian/VerbHrv.gf index 472346c3e..06bb2872a 100644 --- a/src/croatian/VerbHrv.gf +++ b/src/croatian/VerbHrv.gf @@ -22,7 +22,7 @@ lin } ; UseComp comp = { - verb = biti_VerbForms ; ---- TODO: jesam + verb = copula_VerbForms ; clit = \\_ => [] ; compl = comp.s } ;