From a51cc57018af5c445ce42303d77b1e1c9fb431f6 Mon Sep 17 00:00:00 2001 From: Krasimir Angelov Date: Tue, 13 Oct 2026 08:44:43 +0200 Subject: [PATCH] updates from Codex --- src/icelandic/CatIce.gf | 1 + src/icelandic/ConstructionIce.gf | 103 ++++++++++++++++++++++++++++++- src/icelandic/GrammarIce.gf | 3 +- src/icelandic/IdiomIce.gf | 15 ++--- src/icelandic/LangIce.gf | 2 +- src/icelandic/MorphoIce.gf | 17 ++++- src/icelandic/NounIce.gf | 21 +++++-- src/icelandic/NumeralIce.gf | 48 ++++++++++++++ src/icelandic/ParadigmsIce.gf | 89 +++++++++++++++++++++++--- src/icelandic/PhraseIce.gf | 3 +- src/icelandic/QuestionIce.gf | 2 +- src/icelandic/ResIce.gf | 30 ++++++--- src/icelandic/SentenceIce.gf | 2 + src/icelandic/StructuralIce.gf | 74 +++++++++++++++------- src/icelandic/VerbIce.gf | 16 ++--- 15 files changed, 355 insertions(+), 71 deletions(-) diff --git a/src/icelandic/CatIce.gf b/src/icelandic/CatIce.gf index 063d6b166..d4d22453a 100644 --- a/src/icelandic/CatIce.gf +++ b/src/icelandic/CatIce.gf @@ -3,6 +3,7 @@ concrete CatIce of Cat = CommonX ** open ResIce, Prelude in { flags optimize=all_subs ; lincat + GN, LN, SN = {s : Str} ; --2 Sentences and clauses diff --git a/src/icelandic/ConstructionIce.gf b/src/icelandic/ConstructionIce.gf index 0c2d6718c..42a7f2907 100644 --- a/src/icelandic/ConstructionIce.gf +++ b/src/icelandic/ConstructionIce.gf @@ -1,6 +1,105 @@ --# -path=.:../abstract -concrete ConstructionIce of Construction = CatIce ** - open SyntaxIce, SymbolicIce, ParadigmsIce, (L = LexiconIce), (E = ExtraIce), (G = GrammarIce), (R = ResIce), (S = StructuralIce), Prelude in { +concrete ConstructionIce of Construction = CatIce ** + open SyntaxIce, ParadigmsIce, (L = LexiconIce), (G = GrammarIce), (R = ResIce), (S = StructuralIce), Prelude in { + +lincat + Timeunit, Hour, Weekday, Month, Monthday, Year = {s : Str} ; + +lin + hungry_VP = G.UseComp (G.CompAP (G.PositA (mkA "svangur"))) ; + thirsty_VP = G.UseComp (G.CompAP (G.PositA (mkA "þyrstur"))) ; + tired_VP = G.UseComp (G.CompAP (G.PositA (mkA "þreyttur"))) ; + scared_VP = G.UseComp (G.CompAP (G.PositA (mkA "hræddur"))) ; + ill_VP = G.UseComp (G.CompAP (G.PositA (mkA "veikur"))) ; + ready_VP = G.UseComp (G.CompAP (G.PositA (mkA "tilbúinn"))) ; + + has_age_VP card = G.UseComp {s = \\a => + card.s ! R.Neutr ! R.Nom ++ "ára" ++ (mkA "gamall").s ! R.APosit R.Strong a.n a.g R.Nom + } ; + + n_units_AP card unit adj = {s = \\n,g,d,c => + card.s ! R.Neutr ! R.Nom ++ + unit.s ! R.Pl ! R.Free ! R.Strong ! R.Gen ++ + adj.s ! R.APosit d n g c + } ; + + n_units_of_NP card unit np = { + s = \\_ => card.s ! R.Neutr ! R.Nom ++ + unit.s ! R.Pl ! R.Free ! R.Strong ! R.Nom ++ "af" ++ np.s ! R.NCase R.Dat ; + a = np.a ; + isPron = False + } ; + + n_unit_CN card unit cn = { + s = \\n,sp,d,c => card.s ! R.Neutr ! c ++ + unit.s ! R.Sg ! R.Free ! R.Strong ! R.Gen ++ cn.s ! n ! sp ! d ! c ; + comp = cn.comp ; + g = cn.g + } ; + + bottle_of_CN np = containerCN (mkN "flaska") np ; + cup_of_CN np = containerCN (mkN "bolli") np ; + glass_of_CN np = containerCN (mkN "glas") np ; + + timeunitAdv card unit = {s = "í" ++ card.s ! R.Neutr ! R.Nom ++ unit.s} ; + timeunitRange c1 c2 unit = {s = "í" ++ c1.s ! R.Neutr ! R.Nom ++ "til" ++ c2.s ! R.Neutr ! R.Nom ++ unit.s} ; + + oneHour = ss "eitt" ; twoHour = ss "tvö" ; threeHour = ss "þrjú" ; + fourHour = ss "fjögur" ; fiveHour = ss "fimm" ; sixHour = ss "sex" ; + sevenHour = ss "sjö" ; eightHour = ss "átta" ; nineHour = ss "níu" ; + tenHour = ss "tíu" ; elevenHour = ss "ellefu" ; twelveHour = ss "tólf" ; + thirteenHour = ss "þrettán" ; fourteenHour = ss "fjórtán" ; fifteenHour = ss "fimmtán" ; + sixteenHour = ss "sextán" ; seventeenHour = ss "sautján" ; eighteenHour = ss "átján" ; + nineteenHour = ss "nítján" ; twentyHour = ss "tuttugu" ; + twentyOneHour = ss "tuttugu og eitt" ; twentyTwoHour = ss "tuttugu og tvö" ; + twentyThreeHour = ss "tuttugu og þrjú" ; twentyFourHour = ss "tuttugu og fjögur" ; + + timeHour h = {s = "klukkan" ++ h.s} ; + timeHourMinute h m = {s = "klukkan" ++ h.s ++ m.s ! R.Neutr ! R.Nom} ; + + weekdayPunctualAdv w = {s = "á" ++ w.s} ; + weekdayHabitualAdv w = {s = "á" ++ w.s ++ "dögum"} ; + weekdayLastAdv w = {s = "síðasta" ++ w.s} ; + weekdayNextAdv w = {s = "næsta" ++ w.s} ; + monthAdv m = {s = "í" ++ m.s} ; + yearAdv y = {s = "árið" ++ y.s} ; + dayMonthAdv d m = {s = d.s ++ m.s} ; + monthYearAdv m y = {s = m.s ++ y.s} ; + dayMonthYearAdv d m y = {s = d.s ++ m.s ++ y.s} ; + intYear i = {s = i.s} ; + intMonthday i = {s = i.s ++ BIND ++ "."} ; + + weekdayN w = nameN w.s R.Masc ; + monthN m = nameN m.s R.Masc ; + weekdayPN w = {s = \\_ => w.s ; g = R.Masc} ; + monthPN m = {s = \\_ => m.s ; g = R.Masc} ; + + second_Timeunit = ss "sekúndu" ; minute_Timeunit = ss "mínútur" ; + hour_Timeunit = ss "klukkustundir" ; day_Timeunit = ss "daga" ; + week_Timeunit = ss "vikur" ; month_Timeunit = ss "mánuði" ; year_Timeunit = ss "ár" ; + + monday_Weekday = ss "mánudag" ; tuesday_Weekday = ss "þriðjudag" ; + wednesday_Weekday = ss "miðvikudag" ; thursday_Weekday = ss "fimmtudag" ; + friday_Weekday = ss "föstudag" ; saturday_Weekday = ss "laugardag" ; + sunday_Weekday = ss "sunnudag" ; + + january_Month = ss "janúar" ; february_Month = ss "febrúar" ; + march_Month = ss "mars" ; april_Month = ss "apríl" ; may_Month = ss "maí" ; + june_Month = ss "júní" ; july_Month = ss "júlí" ; august_Month = ss "ágúst" ; + september_Month = ss "september" ; october_Month = ss "október" ; + november_Month = ss "nóvember" ; december_Month = ss "desember" ; + +oper + nameN : Str -> R.Gender -> N = \s,g -> lin N { + s = \\_,_,_ => s ; + g = g + } ; + + containerCN : N -> NP -> CN = \noun,np -> lin CN { + s = \\n,sp,d,c => noun.s ! n ! sp ! c ; + comp = \\_,_ => "af" ++ np.s ! R.NCase R.Dat ; + g = noun.g + } ; } diff --git a/src/icelandic/GrammarIce.gf b/src/icelandic/GrammarIce.gf index 9cf9cd242..d23319ef7 100644 --- a/src/icelandic/GrammarIce.gf +++ b/src/icelandic/GrammarIce.gf @@ -14,7 +14,8 @@ concrete GrammarIce of Grammar = TextX, StructuralIce, IdiomIce, - TenseX + TenseX, + NamesIce ** open ResIce, Prelude in { flags startcat = Phr ; unlexer = text ; lexer = text ; diff --git a/src/icelandic/IdiomIce.gf b/src/icelandic/IdiomIce.gf index 48992d98d..045a8f938 100644 --- a/src/icelandic/IdiomIce.gf +++ b/src/icelandic/IdiomIce.gf @@ -27,17 +27,14 @@ concrete IdiomIce of Idiom = CatIce ** open Prelude, ResIce in { cl = mkClause (ip.s ! Masc ! Nom) vp {g = Masc ; n = ip.n ; p = P3} in {s = \\ten,ant,pol,_ => cl.s ! ten ! ant ! pol ! ODir ++ adv.s} ; - ProgrVP vp = let vvp = predV verbBe in - vvp ** {dirObj = \\a => vp.p ! PPres ++ vp.dirObj ! a} ; + ProgrVP vp = let vvp = predV verbBe in vvp ** { + dirObj = \\a => "að" ++ infVPPlus vp VPInf Pos a + } ; - ImpPl1 vp = { s = let - agr = gennumperToAgr Masc Pl P1 ; - verb = vp.s ! VPMood Pres Simul ! Pos ! agr - in verb.fin ++ verb.inf ++ vp.dirObj ! agr } ; + ImpPl1 vp = {s = infVPPlus vp (VPMood Pres Simul) Pos (gennumperToAgr Masc Pl P1)} ; - ImpP3 np vp = {s = let - verb = vp.s ! VPMood Pres Simul ! Pos ! np.a - in verbLet.s ! VPres Active Indicative np.a.n np.a.p ++ np.s ! NCase Acc ++ verb.inf} ; + ImpP3 np vp = {s = verbLet.s ! VPres Active Indicative np.a.n np.a.p ++ + np.s ! NCase Acc ++ infVPPlus vp VPInf Pos np.a} ; SelfAdvVP vp = vp ** {dirObj = \\a => vp.dirObj ! a ++ reflPron a.p a.n a.g Nom} ; diff --git a/src/icelandic/LangIce.gf b/src/icelandic/LangIce.gf index fb9fbb0b5..dd05098fe 100644 --- a/src/icelandic/LangIce.gf +++ b/src/icelandic/LangIce.gf @@ -2,6 +2,6 @@ concrete LangIce of Lang = GrammarIce ,LexiconIce + ,ConstructionIce ,DocumentationIce --# notpresent - --,ConstructionIce ** {} ; diff --git a/src/icelandic/MorphoIce.gf b/src/icelandic/MorphoIce.gf index bf11c2630..93c453957 100644 --- a/src/icelandic/MorphoIce.gf +++ b/src/icelandic/MorphoIce.gf @@ -499,6 +499,14 @@ resource MorphoIce = ResIce ** open Prelude, (Predef=Predef), ResIce in { smá smá (smá + "um") (smá + "rra") ; in nForms2AForms mas fem neut ; + -- Indeclinable adjectives are frequent among loanwords, adverbial + -- modifiers used adjectivally, and the first parts of compounds. The + -- old smart paradigm sent these through dSmár/dI, which produced forms + -- such as "fyrirframr" and "a posteriorii". + dInvar : Str -> AForms = \s -> + let forms = nForms8 s s s s s s s s + in nForms2AForms forms forms forms ; + dFarinn : Str -> AForms = \farinn -> let farin = init farinn ; @@ -770,7 +778,7 @@ resource MorphoIce = ResIce ** open Prelude, (Predef=Predef), ResIce in { köll = a2ö kall ; kölluð = köll + "uð"; presInd = tForms6 kalla (kalla + "r") (kalla + "r") (köll + "um") (kall + "ið") kalla ; - pastInd = tForms6 kallaði (kallaði + "r") kallaði (kölluð + "um") (kölluð + "u") (kölluð + "u") ; + pastInd = tForms6 kallaði (kallaði + "r") kallaði (kölluð + "um") (kölluð + "uð") (kölluð + "u") ; presSub = tForms6 (kall + "i") (kall + "ir") (kall + "i") (köll + "um") (kall + "ið") (kall + "i") ; pastSub = tForms6 kallaði (kallaði + "r") kallaði (kölluð + "um") (kölluð + "uð") (kölluð + "u") in tForms2MForms presInd pastInd presSub pastSub ; @@ -932,6 +940,8 @@ resource MorphoIce = ResIce ** open Prelude, (Predef=Predef), ResIce in { PStrong Pl Neutr c => caseList (pastPartS ! Neutr ! 4) (pastPartS ! Neutr ! 5) (pastPartS ! Neutr ! 6) (pastPartS ! Neutr ! 7) ! c ; PPres => presPart } ; + refl = NonReflexive ; + part = [] ; } ; -- AR 2019-08-02: deponent verbs use the Middle voice everywhere, instead of Active @@ -1083,11 +1093,12 @@ resource MorphoIce = ResIce ** open Prelude, (Predef=Predef), ResIce in { ðiditi : Str -> Str = \stem -> case stem of { -- ði _ + #vowel => stem + "ði" ; - front + ("f" | "j") => front + "ði" ; + _ + "f" => stem + "ði" ; + front + "j" => front + "ði" ; _ + #vowel + ("r" | "rf" | "rg") => stem + "ði" ; _ + "rr" => stem + "ði" ; -- somethimes - otherwise + "ti", e.g., sperra-sperrti -- ti - front@(_ + #consonant) + "t" => front + "i" ; + _ + "t" => stem + "i" ; _ + ("p" | "t" | "k") => stem + "ti" ; front@(_ + "r") + "ð" => front + "ti" ; front@(_ + ("l" | "n")) + "d" => front + "ti" ; -- usually otherwise + "di", e.g., ýlda-ýldi, senda-sendi diff --git a/src/icelandic/NounIce.gf b/src/icelandic/NounIce.gf index a938c16c2..678b2ef55 100644 --- a/src/icelandic/NounIce.gf +++ b/src/icelandic/NounIce.gf @@ -219,11 +219,15 @@ concrete NounIce of Noun = CatIce ** open MorphoIce, ResIce, Prelude in { -- 2 Possessive and partitive constructs PossNP cn np = { - s = \\n,s,d,c => case np.isPron of { - True => cn.s ! n ! Suffix ! d ! Nom ++ np.s ! NPPoss n cn.g c ; - False => cn.s ! n ! Free ! d ! c ++ np.s ! NPPoss n cn.g Gen + -- Keep the possessor in the complement field. Besides preserving + -- the case of the head, this lets an outer determiner occur directly + -- after the head ("meðferð hans barnanna", not + -- "meðferð barnanna hans"). + s = \\n,s,d,c => cn.s ! n ! s ! d ! c ; + comp = \\n,c => cn.comp ! n ! c ++ case np.isPron of { + True => np.s ! NPPoss n cn.g Gen ; + False => np.s ! NCase Gen } ; - comp = cn.comp ; g = cn.g } ; @@ -250,4 +254,13 @@ concrete NounIce of Noun = CatIce ** open MorphoIce, ResIce, Prelude in { } ; DetDAP det = det ; + + QuantityNP dec mu = { + s = \\_ => case mu.isPre of { + True => mu.s ++ dec.s ! NCard Pl Neutr Nom ; + False => dec.s ! NCard Pl Neutr Nom ++ mu.s + } ; + a = gennumperToAgr Neutr Pl P3 ; + isPron = False + } ; } diff --git a/src/icelandic/NumeralIce.gf b/src/icelandic/NumeralIce.gf index 488136686..59738bfe0 100644 --- a/src/icelandic/NumeralIce.gf +++ b/src/icelandic/NumeralIce.gf @@ -101,6 +101,7 @@ concrete NumeralIce of Numeral = CatIce [Numeral,Digits,Decimal] ** open Prelude pot1 d = {s = d.s ! ten ; size = pl} ; pot1plus d e = { s = \\ngc => d.s ! ten ! ngc ++ "og" ++ e.s ! unit ! ngc ; size = pl} ; pot1as2 n = n ; + pot21 = {s = hundrað ; size = pl} ; pot2 d = { s = \\ngc => (omitsg (d.s ! unit ! NCard Sg Neutr Nom) d.size) ++ hundrað ! ngc ; size = pl} ; pot2plus d e = { s = table { @@ -110,6 +111,7 @@ concrete NumeralIce of Numeral = CatIce [Numeral,Digits,Decimal] ** open Prelude size = pl } ; pot2as3 n = n ; + pot31 = {s = þúsund ; size = pl} ; pot3 d = { s = \\ngc => (omitsg (d.s ! NCard Sg Neutr Nom) d.size) ++ þúsund ! ngc ; size = pl} ; pot3plus d e = { s = table { @@ -119,8 +121,39 @@ concrete NumeralIce of Numeral = CatIce [Numeral,Digits,Decimal] ** open Prelude size = pl } ; pot3as4 n = n ; + pot3decimal d = {s = \\_ => d.s ! NCard Pl Neutr Nom ++ "þúsund" ; size = pl} ; + + pot41 = {s = \\co => case co of { + NCard _ _ c => pot01.s ! unit ! NCard Sg Fem c ++ milljón ! Sg ! c ; + NOrd n g c => (mkRegOrd "milljónast" "milljónust") ! n ! g ! c + } ; size = pl} ; + pot4 d = {s = \\co => d.s ! NCard Pl Fem (cardOrdCase co) ++ case co of { + NCard _ _ c => milljón ! Pl ! c ; + NOrd n g c => (mkRegOrd "milljónast" "milljónust") ! n ! g ! c + } ; size = pl} ; + pot4plus d e = {s = \\co => d.s ! NCard Pl Fem (cardOrdCase co) ++ milljón ! Pl ! (cardOrdCase co) ++ + case co of { + NCard n g c => e.s ! NCard n g c ; + NOrd n g c => "og" ++ e.s ! NOrd n g c + } ; size = pl} ; pot4as5 n = n ; + pot4decimal d = {s = \\co => d.s ! NCard Pl Neutr Nom ++ milljón ! Pl ! (cardOrdCase co) ; size = pl} ; + + pot51 = {s = \\co => case co of { + NCard _ _ c => pot01.s ! unit ! NCard Sg Masc c ++ milljarður ! Sg ! c ; + NOrd n g c => (mkRegOrd "milljarðast" "milljörðust") ! n ! g ! c + } ; size = pl} ; + pot5 d = {s = \\co => d.s ! NCard Pl Masc (cardOrdCase co) ++ case co of { + NCard _ _ c => milljarður ! Pl ! c ; + NOrd n g c => (mkRegOrd "milljarðast" "milljörðust") ! n ! g ! c + } ; size = pl} ; + pot5plus d e = {s = \\co => d.s ! NCard Pl Masc (cardOrdCase co) ++ milljarður ! Pl ! (cardOrdCase co) ++ + case co of { + NCard n g c => e.s ! NCard n g c ; + NOrd n g c => "og" ++ e.s ! NOrd n g c + } ; size = pl} ; + pot5decimal d = {s = \\co => d.s ! NCard Pl Neutr Nom ++ milljarður ! Pl ! (cardOrdCase co) ; size = pl} ; oper @@ -168,6 +201,21 @@ concrete NumeralIce of Numeral = CatIce [Numeral,Digits,Decimal] ** open Prelude NCard _ _ _ => "þúsund" ; NOrd n g c => (mkRegOrd "þúsundast" "þúsundust") ! n ! g ! c } ; + + milljón : Number => Case => Str = table { + Sg => caseList "milljón" "milljón" "milljón" "milljónar" ; + Pl => caseList "milljónir" "milljónir" "milljónum" "milljóna" + } ; + + milljarður : Number => Case => Str = table { + Sg => caseList "milljarður" "milljarð" "milljarði" "milljarðs" ; + Pl => caseList "milljarðar" "milljarða" "milljörðum" "milljarða" + } ; + + cardOrdCase : CardOrd -> Case = \co -> case co of { + NCard _ _ c => c ; + NOrd _ _ c => c + } ; sizeToNumber : Size -> Number = \size -> case size of { sg => Sg ; diff --git a/src/icelandic/ParadigmsIce.gf b/src/icelandic/ParadigmsIce.gf index ad0711d71..0af78a40b 100644 --- a/src/icelandic/ParadigmsIce.gf +++ b/src/icelandic/ParadigmsIce.gf @@ -56,6 +56,56 @@ resource ParadigmsIce = open dative : Case ; genitive : Case ; + --2 Invariant closed categories + + mkPredet : Str -> Predet = \word -> lin Predet { + s = \\_,_,_ => word + } ; + + mkCard : Str -> Number -> Card = \word, number -> lin Card { + s = \\_,_ => word ; + n = number + } ; + + mkACard : Str -> ACard = \word -> lin ACard { + s = word + } ; + + mkIDet : Str -> Number -> IDet = \word, number -> lin IDet { + s = \\_,_ => word ; + n = number + } ; + + mkDet : Str -> Number -> Det = \word, number -> lin Det { + s = \\_,_ => word ; + pron = \\_,_ => [] ; + n = number ; + b = Free ; + d = Strong + } ; + + mkQuant : Str -> Quant = \word -> lin Quant { + s = \\_,_,_ => word ; + b = Free ; + d = Strong ; + isPron = False + } ; + + detFromA : A -> Number -> Det = \adj, number -> lin Det { + s = \\gender, c => adj.s ! APosit Strong number gender c ; + pron = \\_,_ => [] ; + n = number ; + b = Free ; + d = Strong + } ; + + quantFromA : A -> Quant = \adj -> lin Quant { + s = \\number, gender, c => adj.s ! APosit Strong number gender c ; + b = Free ; + d = Strong ; + isPron = False + } ; + --2 Nouns -- Nouns are constructed by the function $mkN$, which takes a varying @@ -293,8 +343,17 @@ resource ParadigmsIce = open mkA : (_,_,_ : Str) -> A = mk3A ; } ; - mk1A : Str -> A = \s -> lin A (aForms2Adjective - (weakPosit s s) (strongPosit1 s) (compar1 s) (weakSuperl s s) (strongSuperl1 s) (regAAdv1 s)) ; --- AR 2019-08-08: second arguments of weak declensions were [], producing only endings + mk1A : Str -> A = \s -> case s of { + -- These are not Icelandic masculine citation forms and must not be + -- supplied with Icelandic agreement suffixes. + _ + "ar" => invarA s ; + _ + "i" => invarA s ; + _ => lin A (aForms2Adjective + (weakPosit s s) (strongPosit1 s) (compar1 s) (weakSuperl s s) (strongSuperl1 s) (regAAdv1 s)) + } ; --- AR 2019-08-08: second arguments of weak declensions were [], producing only endings + + invarA : Str -> A = \s -> lin A (aForms2Adjective + (dInvar s) (dInvar s) (dInvar s) (dInvar s) (dInvar s) s) ; mk2A : (_,_ : Str) -> A = \mas,fem -> case mas of { _ + ("ll"|"nn") => mk1A mas ; ---- AR 2019-08-08 ; the case below does not work @@ -314,8 +373,8 @@ resource ParadigmsIce = open _ + "ill" => dLítill s ; #consonant* + #vowel + ("ll" | "nn") => dSeinn s ; stem + "ur" => dFalur s (a2ö stem) ; - _ + "i" => dI s ; ---- AR 2019-08-02 guess to prevent failure - _ => dSmár s ---- AR 2019-08-02 guess to prevent failure + _ + ("r" | "s" | (#consonant + "n")) => dDýr s ; + _ => dInvar s } ; strongPosit2 : (_,_ : Str) -> AForms = \mas,fem -> case of { @@ -459,9 +518,16 @@ resource ParadigmsIce = open plFemNom plFemAcc plFemDat plFemGen plNeutNom plNeutAcc plNeutDat plNeutGen weakSgMascNom weakSgMascAccDatGen weakSgFemNom weakSgFemAccDatGen weakSgNeut weakPl flogið) ; - mkV : V -> Str -> V = \v,part -> v ; + mkV : V -> Str -> V = \v,part -> v ** {part = v.part ++ part} ; }; + prefixV : Str -> V -> V = \prefix, v -> lin V { + s = \\form => prefix + v.s ! form ; + p = \\form => prefix + v.p ! form ; + refl = v.refl ; + part = v.part + } ; + depV : V -> V = \verb -> lin V (deponentVerb verb) ; mk1V : Str -> V = \inf -> @@ -488,7 +554,10 @@ resource ParadigmsIce = open oper mkV2S : V -> V2S = \v -> lin V2S (v ** {c2 = mkPrep "" accusative}) ; oper mkV2A : V -> V2A = \v -> lin V2A (v ** {c2 = mkPrep "" accusative}) ; - oper reflV : V -> V = \v -> v; + oper reflV = overload { + reflV : V -> V = \v -> lin V (v ** {refl = Reflexive Acc}) ; + reflV : V -> Case -> V = \v,c -> lin V (v ** {refl = Reflexive c}) + } ; indsub1 : Str -> MForms = \inf -> case inf of { @@ -497,7 +566,13 @@ resource ParadigmsIce = open stem@(front + "ý" + c) + "ja" => cTelja inf stem (ðiditi (front + "ú" + c)) ; stem@(front + "æ" + c) + "ja" => cTelja inf stem (ðiditi (front + "á" + c)) ; stem + "ja" => cTelja inf stem (ðiditi stem) ; - stem + "a" => cDæma inf (stem + "i") (ðiditi stem) + -- With only the infinitive available, the productive -aði class is + -- a substantially better default (borðaði, dansaði, kallaði) than + -- the old -di/-ti guess (borðdi, dansdi). Irregular and i-present + -- verbs can still use the multi-principal-part overloads. + stem@(_ + ("r" | "m" | "f" | "gn" | "nd" | "tt")) + "a" + => cDæma inf (stem + "i") (ðiditi stem) ; + _ + "a" => cKalla inf (ðiditi inf) } ; indsub2 : (_,_ : Str) -> MForms = \telja,tel -> case of { diff --git a/src/icelandic/PhraseIce.gf b/src/icelandic/PhraseIce.gf index 063cf5fc3..f46e68cbe 100644 --- a/src/icelandic/PhraseIce.gf +++ b/src/icelandic/PhraseIce.gf @@ -20,8 +20,7 @@ concrete PhraseIce of Phrase = CatIce ** open Prelude, ResIce in { UttAdv adv = adv ; - UttVP vp = let verb = vp.s ! VPInf ! Pos ! {g = Masc ; n = Sg ; p = P3} - in {s = verb.fin ++ verb.a1.p1 ++ verb.inf ++ verb.a1.p2} ; + UttVP vp = {s = infVP vp} ; UttCN cn = {s = cn.s ! Sg ! Free ! Strong ! Nom ++ cn.comp ! Sg ! Nom} ; diff --git a/src/icelandic/QuestionIce.gf b/src/icelandic/QuestionIce.gf index 310b8237e..8d13f5f85 100644 --- a/src/icelandic/QuestionIce.gf +++ b/src/icelandic/QuestionIce.gf @@ -15,7 +15,7 @@ concrete QuestionIce of Question = CatIce ** open ResIce, Prelude in { in {s = \\ten,ant,pol,_ => cl.s ! ten ! ant ! pol ! ODir} ; QuestSlash ip cls = { - s = \\ten,ant,pol,_ => ip.s ! Masc ! Nom ++ cls.s ! ten ! ant ! pol ! ODir ++ cls.c2.s + s = \\ten,ant,pol,_ => cls.c2.s ++ ip.s ! Masc ! cls.c2.c ++ cls.s ! ten ! ant ! pol ! OQuestion } ; QuestIComp icomp np = diff --git a/src/icelandic/ResIce.gf b/src/icelandic/ResIce.gf index 2eaed0b8b..319c0025d 100644 --- a/src/icelandic/ResIce.gf +++ b/src/icelandic/ResIce.gf @@ -37,6 +37,7 @@ resource ResIce = ParamX ** open Prelude in { Mood = Indicative | Subjunctive ; Voice = Active | Middle ; + Reflexivity = NonReflexive | Reflexive Case ; PForm = PWeak Number Gender Case | PStrong Number Gender Case | PPres ; @@ -130,6 +131,8 @@ param Verb : Type = { s : VForm => Str ; p : PForm => Str ; + part : Str ; + refl : Reflexivity ; } ; mkVoice : Voice -> Str -> Str = \v,s -> @@ -197,6 +200,8 @@ param PStrong Pl Neutr c => caseList plNeutNom plNeutAcc plNeutDat plNeutGen ! c ; PPres => fljúgandi } ; + refl = NonReflexive ; + part = [] ; } ; VP : Type = { @@ -228,21 +233,28 @@ param } ; predV : Verb -> VP = \v -> { - s = \\vpform,pol,agr => case vpform of { - VPInf => vf (v.s ! vInf) [] (negation pol) False ; - VPImp => vf (v.s ! VImp Active agr.n) [] (negation pol) False ; - VPMood ten ant => vff v ten ant pol agr + s = \\vpform,pol,agr => + let verb = case vpform of { + VPInf => vf (v.s ! vInf) [] (negation pol) False ; + VPImp => vf (v.s ! VImp Active agr.n) [] (negation pol) False ; + VPMood ten ant => vff v ten ant pol agr + } + in verb ** {a1 = } ; + p = \\pform => v.p ! pform ++ v.part ; + indObj = \\agr => case v.refl of { + NonReflexive => [] ; + Reflexive c => reflPron agr.p agr.n agr.g c } ; - p = \\pform => v.p ! pform ; - indObj = \\_ => [] ; dirObj = \\_ => [] ; a2 = [] ; - indShift = False ; + indShift = case v.refl of { + NonReflexive => False ; + Reflexive _ => True + } ; dirShift = False } ; - predVV : { s : VForm => Str ; p : PForm => Str ; sup : Voice => Str ; c2 : Preposition } -> VP = \vv -> - predV {s = vv.s ; p = vv.p} ; + predVV : Verb ** {c2 : Preposition} -> VP = \vv -> predV vv ; negation : Polarity -> Str = \pol -> case pol of { diff --git a/src/icelandic/SentenceIce.gf b/src/icelandic/SentenceIce.gf index 1b7cfb20a..0beb8dea7 100644 --- a/src/icelandic/SentenceIce.gf +++ b/src/icelandic/SentenceIce.gf @@ -46,6 +46,8 @@ concrete SentenceIce of Sentence = CatIce ** open Prelude, ResIce in { } ; } ; + AdvImp adv imp = {s = \\pol,num => adv.s ++ imp.s ! pol ! num} ; + --2 Embedded sentences EmbedS ss = {s = "að" ++ ss.s} ; diff --git a/src/icelandic/StructuralIce.gf b/src/icelandic/StructuralIce.gf index 05faee3b2..52057f6e6 100644 --- a/src/icelandic/StructuralIce.gf +++ b/src/icelandic/StructuralIce.gf @@ -141,6 +141,14 @@ concrete StructuralIce of Structural = CatIce ** but_PConj = ss "en" ; how_IAdv = ss "hvernig" ; how8much_IAdv = ss "hversu mikið" ; + how8many_IDet = { + s = table { + Masc => caseList "hversu margir" "hversu marga" "hversu mörgum" "hversu margra" ; + Fem => caseList "hversu margar" "hversu margar" "hversu mörgum" "hversu margra" ; + Neutr => caseList "hversu mörg" "hversu mörg" "hversu mörgum" "hversu margra" + } ; + n = Pl + } ; if_Subj = ss "ef" ; please_Voc = ss "vinsamlegast" ; when_Subj = ss "þegar" ; @@ -158,34 +166,34 @@ concrete StructuralIce of Structural = CatIce ** -- dont be afraid to be awkward :) he_Pron = mkPronPers "hann" "hann" "honum" "hans" - "sinn" "sinn" "sínum" "síns" - "sín" "sína" "sinni" "sinnar" - "sitt" "sitt" "sínu" "síns" - "sínir" "sína" "sínum" "sinna" - "sínar" "sínar" "sín" "sín" Masc Sg P3 ; + "sinn" "hans" "hans" "hans" + "sín" "hans" "hans" "hans" + "sitt" "hans" "hans" "hans" + "sínir" "hans" "hans" "hans" + "sínar" "hans" "hans" "hans" Masc Sg P3 ; - she_Pron = mkPronPers "hún" "hana" "henni" "hennar" - "sinn" "sinn" "sínum" "síns" - "sín" "sína" "sinni" "sinnar" - "sitt" "sitt" "sínu" "síns" - "sínir" "sína" "sínum" "sinna" - "sínar" "sínar" "sín" "sín" Fem Sg P3 ; + she_Pron = mkPronPers "hún" "hana" "henni" "hennar" + "sinn" "hennar" "hennar" "hennar" + "sín" "hennar" "hennar" "hennar" + "sitt" "hennar" "hennar" "hennar" + "sínir" "hennar" "hennar" "hennar" + "sínar" "hennar" "hennar" "hennar" Fem Sg P3 ; it_Pron = mkPronPers "það" "það" "því" "þess" - "sinn" "sinn" "sínum" "síns" - "sín" "sína" "sinni" "sinnar" - "sitt" "sitt" "sínu" "síns" - "sínir" "sína" "sínum" "sinna" - "sínar" "sínar" "sín" "sín" Neutr Sg P3 ; + "sinn" "þess" "þess" "þess" + "sín" "þess" "þess" "þess" + "sitt" "þess" "þess" "þess" + "sínir" "þess" "þess" "þess" + "sínar" "þess" "þess" "þess" Neutr Sg P3 ; -- "They" depends on gender,i.e. has 3x4 forms for personal pronouns -- the masculine is given here, neuter and feminine are given in Extra they_Pron = mkPronPers "þeir" "þá" "þeim" "þeirra" - "sinn" "sinn" "sínum" "síns" - "sín" "sína" "sinni" "sinnar" - "sitt" "sitt" "sínu" "síns" - "sínir" "sína" "sínum" "sinna" - "sínar" "sínar" "sín" "sín" Masc Pl P3 ; + "sinn" "þeirra" "þeirra" "þeirra" + "sín" "þeirra" "þeirra" "þeirra" + "sitt" "þeirra" "þeirra" "þeirra" + "sínir" "þeirra" "þeirra" "þeirra" + "sínar" "þeirra" "þeirra" "þeirra" Masc Pl P3 ; -- the possesive equivalent, vor, is mostly used in elevated style. we_Pron = mkPronPers "við" "okkur" "okkur" "okkar" @@ -212,14 +220,32 @@ concrete StructuralIce of Structural = CatIce ** -- only in the nominative), and hvert/hvað corresponds to what. whatSg_IP = { s = \\_ => caseList "hvað" "hvað" "hverju" "hvers" ; - n = Pl + n = Sg } ; whatPl_IP = { s = \\_ => caseList "hver" "hver" "hverjum" "hverra" ; - n = Sg + n = Pl } ; - + + no_Quant = { + s = table { + Sg => table { + Masc => caseList "enginn" "engan" "engum" "engins" ; + Fem => caseList "engin" "enga" "engri" "engrar" ; + Neutr => caseList "ekkert" "ekkert" "engu" "einskis" + } ; + Pl => table { + Masc => caseList "engir" "enga" "engum" "engra" ; + Fem => caseList "engar" "engar" "engum" "engra" ; + Neutr => caseList "engin" "engin" "engum" "engra" + } + } ; + b = Free ; + d = Strong ; + isPron = False + } ; + -- whoPl_IP = mkIP "who" "whom" "whose" plural ; whoPl_IP = { s = table { diff --git a/src/icelandic/VerbIce.gf b/src/icelandic/VerbIce.gf index 8cf632618..736ed2b20 100644 --- a/src/icelandic/VerbIce.gf +++ b/src/icelandic/VerbIce.gf @@ -5,7 +5,7 @@ concrete VerbIce of Verb = CatIce ** open ResIce, Prelude in { lin UseV v = predV v; - ComplVV vv vp = insertDir (predV vv) (\\_ => vv.c2.s ++ infVP vp) ; + ComplVV vv vp = insertDir (predV vv) (\\a => vv.c2.s ++ infVPPlus vp VPInf Pos a) ; ComplVS vs s = insertDir (predV vs) (\\_ => s.s) ; @@ -29,17 +29,17 @@ concrete VerbIce of Verb = CatIce ** open ResIce, Prelude in { ComplSlash vps np = insertDir vps (\\a => vps.c2.s ++ np.s ! NCase vps.c2.c ++ vps.dirObj ! np.a ); - SlashVV vv vps = (insertDir (predV vv) (\\_ => vv.c2.s ++ infVP vps)) ** {c2 = vps.c2} ; + SlashVV vv vps = (insertDir (predV vv) (\\a => vv.c2.s ++ infVPPlus vps VPInf Pos a)) ** {c2 = vps.c2} ; SlashV2VNP v2v np vps = (insertDir (predV v2v) - (\\_ => v2v.c2.s ++ np.s ! NCase v2v.c2.c ++ v2v.c3.s ++ infVP vps) + (\\_ => v2v.c2.s ++ np.s ! NCase v2v.c2.c ++ v2v.c3.s ++ infVPPlus vps VPInf Pos np.a) ) ** {c2 = vps.c2} ; - ReflVP vps = (insertInd - vps - (\\a => vps.indObj ! a ++ reflPron a.p a.n a.g vps.c2.c ++ vps.c2.s) - ) ** {indShift = True} ; + ReflVP vps = (insertDir + vps + (\\a => vps.c2.s ++ reflPron a.p a.n a.g vps.c2.c ++ vps.dirObj ! a) + ) ** {dirShift = True} ; UseComp comp = insertDir (predV verbBe) (\\a => comp.s ! a) ; @@ -88,7 +88,7 @@ concrete VerbIce of Verb = CatIce ** open ResIce, Prelude in { } ; insertInd : ResIce.VP -> (Agr => Str) -> ResIce.VP =\vp,obj -> vp ** { - indObj = obj + indObj = \\a => vp.indObj ! a ++ obj ! a } ; insertAdV : Str -> ResIce.VP -> ResIce.VP = \adv,vp -> vp ** {