From 89dc2a13f06be9bd56446854c27b0da35d27c3b9 Mon Sep 17 00:00:00 2001 From: Krasimir Angelov Date: Tue, 22 Oct 2024 20:26:18 +0200 Subject: [PATCH] added NamesIna --- src/interlingua/CatIna.gf | 3 +- src/interlingua/GrammarIna.gf | 3 +- src/interlingua/NamesIna.gf | 60 +++++++++++++++++++++++++++++++++ src/interlingua/ParadigmsIna.gf | 8 +++-- 4 files changed, 70 insertions(+), 4 deletions(-) create mode 100644 src/interlingua/NamesIna.gf diff --git a/src/interlingua/CatIna.gf b/src/interlingua/CatIna.gf index 2c0033b2..4a83071b 100644 --- a/src/interlingua/CatIna.gf +++ b/src/interlingua/CatIna.gf @@ -78,7 +78,8 @@ concrete CatIna of Cat = CommonX ** open ResIna, Prelude in { N2 = {s : Number => Str} ** {p2 : Str; c2 : Case} ; N3 = {s : Number => Str} ** {p2,p3 : Str; c2,c3 : Case} ; - PN,LN = {s : Str} ; + PN = {s : Str} ; + LN = {s : Str ; n : Number ; art : Bool} ; GN = {s : Str ; g : Sex} ; SN = {s : Sex => Str ; pl : Str} ; diff --git a/src/interlingua/GrammarIna.gf b/src/interlingua/GrammarIna.gf index 6e5e06f4..b6e9daef 100644 --- a/src/interlingua/GrammarIna.gf +++ b/src/interlingua/GrammarIna.gf @@ -14,7 +14,8 @@ concrete GrammarIna of Grammar = TextX, StructuralIna, IdiomIna, - TenseX + TenseX, + NamesIna ** { flags startcat = Phr ; unlexer = text ; lexer = text ; diff --git a/src/interlingua/NamesIna.gf b/src/interlingua/NamesIna.gf new file mode 100644 index 00000000..268df970 --- /dev/null +++ b/src/interlingua/NamesIna.gf @@ -0,0 +1,60 @@ +concrete NamesIna of Names = CatIna ** open Prelude, ResIna in { + +lin GivenName gn = { + s = \\_ => gn.s; + a = agrP3 Sg; + isPronoun = False + } ; +lin MaleSurname = \sn -> { + s = \\_ => sn.s ! Male; + a = agrP3 Sg; + isPronoun = False + } ; +lin FemaleSurname = \sn -> { + s = \\_ => sn.s ! Female; + a = agrP3 Sg; + isPronoun = False + } ; +lin PlSurname = \sn -> { + s = \\_ => sn.pl; + a = agrP3 Pl; + isPronoun = False + } ; +lin FullName gn sn = { + s = \\_ => gn.s ++ sn.s ! gn.g ; + a = agrP3 Pl; + isPronoun = False + } ; + +lin UseLN ln = { + s = \\c => artLN ln c ; + a = agrP3 ln.n; + isPronoun = False + } ; +lin PlainLN ln = { + s = \\_ => ln.s; + a = agrP3 ln.n; + isPronoun = False + } ; + +lin InLN ln = { + s = "in" ++ artLN ln Acc ; + } ; + +lin AdjLN ap ln = ln ** { + s = preOrPost ap.isPre (ap.s ! agrP3 ln.n) ln.s ; + } ; + +oper + artLN : LN -> Case -> Str = \ln,c -> + case ln.art of { + True => case c of { + Dat => "al"; + Gen | Abl => "del"; + _ => "le" + } ++ + ln.s ; + False => ln.s + } ; + +} diff --git a/src/interlingua/ParadigmsIna.gf b/src/interlingua/ParadigmsIna.gf index 1bb11739..153b3c0c 100644 --- a/src/interlingua/ParadigmsIna.gf +++ b/src/interlingua/ParadigmsIna.gf @@ -185,8 +185,12 @@ oper -- cnN3 = \n,p,q -> n ** {lock_N3 = <> ; c2 = p.s ; c3 = q.s} ; -- mkPN : Str -> PN = regGenPN; - - mkLN : Str -> LN = \s -> lin LN {s=s}; + + mkLN = overload { + mkLN : Str -> LN = \s -> lin LN {s=s; n=Sg; art=False}; + mkLN : Str -> Number -> LN = \s,n -> lin LN {s=s; n=n; art=False}; + } ; + mkGN : Str -> Sex -> GN = \s,g -> lin GN {s=s; g=g}; mkSN = overload { mkSN : Str -> SN = \s -> lin SN {s=\\_ => s; pl=s};