1
0
forked from GitHub/gf-rgl

Merge remote-tracking branch 'origin/master' into basque

This commit is contained in:
Inari Listenmaa
2017-12-28 13:20:44 +02:00
35 changed files with 531 additions and 45 deletions

View File

@@ -109,6 +109,12 @@ abstract Extend = Cat ** {
ExistsNP : NP -> Cl ; -- there exists a number / there exist numbers
-- existentials with a/no variation
ExistCN : CN -> Cl ; -- there is a car / there is no car
ExistMassCN : CN -> Cl ; -- there is beer / there is no beer
ExistPluralCN : CN -> Cl ; -- there are trees / there are no trees
-- infinitive for purpose AR 21/8/2013
PurposeVP : VP -> Adv ; -- to become happy

View File

@@ -0,0 +1,24 @@
--# -path=.:alltenses
concrete LibraryBrowserIta of LibraryBrowser =
GrammarIta - [
UseCopula
],
LexiconIta
** open (S = SyntaxIta) in {
lin
i_NP = S.i_NP ;
you_NP = S.you_NP ;
he_NP = S.he_NP ;
she_NP = S.she_NP ;
we_NP = S.we_NP ;
youPl_NP = S.youPl_NP ;
youPol_NP = S.youPol_NP ;
they_NP = S.they_NP ;
a_Det = S.mkDet S.a_Quant ;
the_Det = S.mkDet S.the_Quant ;
aPl_Det = S.mkDet S.a_Quant S.plNum ;
thePl_Det = S.mkDet S.the_Quant S.plNum ;
}

View File

@@ -51,7 +51,10 @@ lin
PastPartAP = variants {} ; -- VPSlash -> AP ; -- lost (opportunity) ; (opportunity) lost in space
PastPartAgentAP = variants {} ; -- VPSlash -> NP -> AP ; -- (opportunity) lost by the company
NominalizeVPSlashNP = variants {} ; -- VPSlash -> NP -> NP ;
ExistsNP = variants {} ; -- NP -> Cl ; -- there exists a number / there exist numbers
ExistsNP = ExistNP ; -- NP -> Cl ; -- there exists a number / there exist numbers
ExistCN cn = ExistNP (DetCN (DetQuant IndefArt NumSg) cn) ;
ExistMassCN cn = ExistNP (MassNP cn) ;
ExistPluralCN cn = ExistNP (DetCN (DetQuant IndefArt NumPl) cn) ;
PurposeVP = variants {} ; -- VP -> Adv ; -- to become happy
ComplBareVS = ComplVS ; -- VS -> S -> VP ; -- say she runs ; DEFAULT say that she runs
SlashBareV2S = SlashV2S ; -- V2S -> S -> VPSlash ; -- answer (to him) it is good ; DEFAULT answer that it is good

View File

@@ -68,7 +68,7 @@ concrete StructuralDut of Structural = CatDut, Prelude **
so_AdA = ss "zo" ;
somebody_NP = mkNP "iemand" Utr Sg ;
somePl_Det = mkDet "sommige" "sommige" Pl ;
someSg_Det = mkDet "sommige" "sommige" Sg ;
someSg_Det = mkDet "enige" "enig" Sg ;
something_NP = mkNP "iets" Utr Sg ;
somewhere_Adv = ss "ergens" ;
that_Quant = mkQuant "die" "dat" ;

View File

@@ -14607,7 +14607,7 @@ lin deed_N = mkN "deed" "deeds";
lin deed_box_N = mkN "deed-box" "deed-boxes";
lin deedpoll_N = mkN "deedpoll" "deedpolls";
lin deem_V2 = mkV2 (mkV "deem" "deems" "deemed" "deemed" "deeming");
lin deem_V2A = mkV2V (mkV "deem") noPrep to_Prep;
lin deem_V2A = mkV2A (mkV "deem") noPrep ;
lin deem_V2V = mkV2V (mkV "deem") noPrep to_Prep;
lin deep_A = mkA "deep" "deeper";
lin deep_Adv = mkAdv "deep";

View File

@@ -11,7 +11,8 @@ concrete ExtendEng of Extend =
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,
ExistsNP, FocusAP, FocusAdV, FocusAdv, FocusObj, GenIP, GenModIP, GenModNP, GenNP, GenRP,
ExistsNP, ExistCN, ExistMassCN, ExistPluralCN,
FocusAP, FocusAdV, FocusAdv, FocusObj, GenIP, GenModIP, GenModNP, GenNP, GenRP,
GerundAdv, GerundCN, GerundNP, IAdvAdv, ICompAP, InOrderToVP, MkVPS, NominalizeVPSlashNP,
PassAgentVPSlash, PassVPSlash, PastPartAP, PastPartAgentAP, PositAdVAdj, PredVPS, PredVPSVV, PredetRNP, PrepCN,
PresPartAP, PurposeVP, ReflPoss, ReflPron, ReflRNP, SlashBareV2S, SlashV2V, StrandQuestSlash, StrandRelSlash,
@@ -220,6 +221,22 @@ concrete ExtendEng of Extend =
mkClause "there" (agrP3 (fromAgr np.a).n)
(insertObj (\\_ => np.s ! NPAcc) (predV (regV "exist"))) ;
ExistCN cn =
let
pos = ExistNP (DetCN (DetQuant IndefArt NumSg) cn) ;
neg = ExistNP (DetCN (DetQuant no_Quant NumSg) cn) ;
in posNegClause pos neg ;
ExistMassCN cn =
let
pos = ExistNP (MassNP cn) ;
neg = ExistNP (DetCN (DetQuant no_Quant NumSg) cn) ;
in posNegClause pos neg ;
ExistPluralCN cn =
let
pos = ExistNP (DetCN (DetQuant IndefArt NumPl) cn) ;
neg = ExistNP (DetCN (DetQuant no_Quant NumPl) cn) ;
in posNegClause pos neg ;
ComplBareVS v s = insertExtra s.s (predV v) ;
SlashBareV2S v s = insertExtrac s.s (predVc v) ;

View File

@@ -313,7 +313,11 @@ oper
mkVV : V -> VV ; -- e.g. want (to VP)
infVV : V -> VV ; -- e.g. want (to VP)
ingVV : V -> VV ; -- e.g. start (VPing)
mkV2V : V -> Prep -> Prep -> V2V ; -- e.g. want (noPrep NP) (to VP)
mkV2V : overload {
mkV2V : Str -> V2V ;
mkV2V : V -> V2V ;
mkV2V : V -> Prep -> Prep -> V2V ; -- e.g. want (noPrep NP) (to VP)
} ;
ingV2V : V -> Prep -> Prep -> V2V ; -- e.g. prevent (noPrep NP) (from VP-ing)
mkVA : V -> VA ; -- e.g. become (AP)
mkV2A : V -> Prep -> V2A ; -- e.g. paint (NP) (AP)
@@ -502,12 +506,14 @@ mkInterj : Str -> Interj
cries = (regN cry).s ! Pl ! Nom ; -- !
cried : Str = case cries of {
_ + "es" => init cries + "d" ;
_ + "ers" => init cries + "ed" ;
_ => duplFinal cry + "ed"
} ;
crying : Str = case cry of {
_ + "ee" => cry + "ing" ;
d + "ie" => d + "ying" ;
us + "e" => us + "ing" ;
ent + "er" => ent + "ered" ;
_ => duplFinal cry + "ing"
}
in mk5V cry cries cried cried crying ;
@@ -582,7 +588,12 @@ mkInterj : Str -> Interj
mkV0 v = v ;
mkV2S v p = lin V2S (prepV2 v p) ;
mkV2V v p t = lin V2V (prepV2 v p ** {c3 = t.s ; typ = VVAux}) ;
mkV2V = overload {
mkV2V : Str -> V2V = \s -> lin V2V (dirV2 (regV s) ** {c3 = [] ; typ = VVAux}) ;
mkV2V : V -> V2V = \v -> lin V2V (dirV2 v ** {c3 = [] ; typ = VVAux}) ;
mkV2V : V -> Prep -> Prep -> V2V = \v,p,t -> lin V2V (prepV2 v p ** {c3 = t.s ; typ = VVAux}) ;
} ;
ingV2V v p t = lin V2V (prepV2 v p ** {c3 = t.s ; typ = VVPresPart}) ;
mkVA v = lin VA v ;
mkV2A v p = lin V2A (prepV2 v p) ;

View File

@@ -556,6 +556,14 @@ param
}
} ;
-- for pos/neg variation other than negation word, e.g. "there is a car"/"there is no car"
posNegClause : Clause -> Clause -> Clause = \pos,neg -> {
s = \\t,a,b,o => case b of {
CPos => pos.s ! t ! a ! b ! o ;
_ => neg.s ! t ! a ! CPos ! o
}
} ;
-- For $Numeral$.

112
src/finnish/ExtendFin.gf Normal file
View File

@@ -0,0 +1,112 @@
--# -path=.:../common:../abstract
concrete ExtendFin of Extend =
CatFin ** ExtendFunctor - [
VPI2,VPS2,MkVPS2,ConjVPS2,ComplVPS2,MkVPI2,ConjVPI2,ComplVPI2,ComplVPIVV
,ExistCN, ExistMassCN
]
with
(Grammar = GrammarFin) **
open
GrammarFin,
ResFin,
(S=StemFin),
IdiomFin,
Coordination,
Prelude,
MorphoFin,
ParadigmsFin in {
lin
ExistCN cn =
let
pos = ExistNP (DetCN (DetQuant IndefArt NumSg) cn) ;
neg = ExistNP (partCN cn) ;
in posNegClause pos neg ;
ExistMassCN cn = ExistNP (partCN cn) ;
oper
partCN : CN -> GrammarFin.NP ;
partCN cn =
let
acn = DetCN (DetQuant IndefArt NumSg) cn
in acn ** {
s = table {
NPCase Nom | NPAcc => acn.s ! NPCase ResFin.Part ;
c => acn.s ! c
}
} ;
lincat
VPS = {s : Agr => Str } ;
[VPS] = {s1,s2 : Agr => Str } ;
VPI = {s : VVType => Agr => Str ; sc : SubjCase } ; -- Agr needed for possessive suffix:
[VPI] = {s1,s2 : VVType => Agr => Str ; sc : SubjCase } ; -- e.g. toivon nukkuva+ni
lin
BaseVPS = twoTable Agr ;
ConsVPS = consrTable Agr comma ;
BaseVPI = twoTable2 VVType Agr ;
ConsVPI = consrTable2 VVType Agr comma ;
MkVPS t p vp = mkVPS t p (lin VP vp) ;
ConjVPS c xs = conjunctDistrTable Agr c xs ;
PredVPS np vps = {s = np.s ! npNom ++ vps.s ! np.a} ;
MkVPI vp = mkVPI vp ;
ConjVPI c xs = conjunctDistrTable2 VVType Agr c xs ;
ComplVPIVV vv vpi =
S.insertObj (\\_,_,a => vpi.s ! vv.vi ! a)
(S.predV (vv ** {sc = case vpi.sc of {
SCNom => vv.sc ; -- minun täytyy pestä auto
c => c }}) -- minulla täytyy olla auto
) ;
-------- two-place verb conjunction
lincat
-- Polarity needed to pick the right object case
VPS2 = {s : Agr => Str ; c2 : Compl ; p : Polarity } ;
[VPS2] = {s1,s2 : Agr => Str ; c2 : Compl ; p : Polarity } ;
-- A version with
VPI2 = {s : VVType => Agr => Str ; c2 : Compl ; sc : SubjCase } ;
[VPI2] = {s1,s2 : VVType => Agr => Str ; c2 : Compl ; sc : SubjCase } ;
lin
-- : Temp -> Pol -> VPSlash -> VPS2 ; -- has loved
MkVPS2 t p vpsl = mkVPS t p (lin VP vpsl) ** {c2 = vpsl.c2 ; p = p.p } ;
-- : VPSlash -> VPI2 ; -- to love
MkVPI2 vpsl = mkVPI (lin VP vpsl) ** {c2 = vpsl.c2} ;
BaseVPS2 x y = twoTable Agr x y ** {c2 = y.c2 ; p = xs.p } ; ---- just remembering the compl. case of the latter verb
ConsVPS2 x xs = consrTable Agr comma x xs ** {c2 = xs.c2 ; p = xs.p } ;
BaseVPI2 x y = twoTable2 VVType Agr x y ** {c2 = y.c2} ; ---- just remembering the compl. case of the latter verb
ConsVPI2 x xs = consrTable2 VVType Agr comma x xs ** {c2 = xs.c2} ;
ConjVPS2 c xs = conjunctDistrTable Agr c xs ** {c2 = xs.c2 ; p = xs.p } ;
ConjVPI2 c xs = conjunctDistrTable2 VVType Agr c xs ** {c2 = xs.c2 ; p = xs.p ; sc = xs.sc } ;
-- appCompl : Bool -> Polarity -> Compl -> ResFin.NP -> Str
ComplVPS2 v np = { s = \\agr => v.s ! agr ++ appCompl True v.p v.c2 np } ;
-- TODO: Version with variable polarity?
ComplVPI2 v np = v ** { s = \\vt,a => v.s ! vt ! a ++ appCompl True Pos v.c2 np };
oper
mkVPS : Temp -> Pol -> VP -> VPS = \tem,pol,vp -> lin VPS {
s = \\agr => (UseCl tem pol (S.mkClause (\_ -> []) agr vp)).s } ;
mkVPI : VP -> VPI = \vp -> lin VPI {
s = \\vt,agr => S.infVP vp.s.sc Pos agr vp (vvtype2infform vt) ;
sc = vp.s.sc } ;
}

View File

@@ -305,7 +305,13 @@ oper
glueTok : Str -> Str = \s -> "&+" ++ s ;
-- for pos/neg variation other than just negation word, e.g. case in "on ongelma"/"ei ole ongelmaa"
posNegClause : Clause -> Clause -> Clause = \pos,neg -> {
s = \\t,a,b,o => case b of {
Pos => pos.s ! t ! a ! b ! o ;
_ => neg.s ! t ! a ! b ! o
}
} ;
-- This is used for subjects of passives: therefore isFin in False.
subjForm : NP -> SubjCase -> Polarity -> Str = \np,sc,b ->

View File

@@ -3,5 +3,5 @@
concrete AllFre of AllFreAbs =
LangFre,
IrregFre,
ExtraFre
ExtendFre ---- ExtraFre
** {} ;

43
src/french/ExtendFre.gf Normal file
View File

@@ -0,0 +1,43 @@
--# -path=alltenses:../common:../abstract
concrete ExtendFre of Extend =
CatFre ** ExtendFunctor -
[
---- iFem_Pron, youFem_Pron, weFem_Pron, youPlFem_Pron, theyFem_Pron, youPolFem_Pron, youPolPl_Pron, youPolPlFem_Pron,
ExistCN, ExistMassCN, ExistPluralCN
] -- put the names of your own definitions here
with
(Grammar = GrammarFre) **
open
GrammarFre,
ResFre,
MorphoFre,
PhonoFre,
Coordination,
Prelude,
ParadigmsFre in {
-- put your own definitions here
lin
ExistCN cn =
let
pos = ExistNP (DetCN (DetQuant IndefArt NumSg) cn) ;
neg = ExistNP (DetCN (DetQuant de_Quant NumSg) cn) ;
in posNegClause pos neg PNeg.p ;
ExistMassCN cn =
let
pos = ExistNP (MassNP cn) ;
neg = ExistNP (DetCN (DetQuant de_Quant NumSg) cn) ;
in posNegClause pos neg PNeg.p ;
ExistPluralCN cn =
let
pos = ExistNP (DetCN (DetQuant IndefArt NumPl) cn) ;
neg = ExistNP (DetCN (DetQuant de_Quant NumPl) cn) ;
in posNegClause pos neg PNeg.p ;
oper
de_Quant : Quant = IndefArt ** {s = \\_,_,_,_ => elisDe} ;
}

View File

@@ -99,9 +99,21 @@ concrete ExtraFre of ExtraFreAbs = ExtraRomanceFre **
let cls = cl.s ! DInv ! t ! a ! p
in table {
QDir => cls ! Indic ;
QIndir => subjIf ++ cls ! Indic
QIndir => subjIf ++ cl.s ! DDir ! t ! a ! p ! Indic
}
} ;
InvQuestIAdvCl iadv cl = {s = \\t,a,p => -- dort-il ?
let cls = cl.s ! DInv ! t ! a ! p
in table {
QDir => iadv.s ++ cls ! Indic ;
QIndir => iadv.s ++ cl.s ! DDir ! t ! a ! p ! Indic
}
} ;
quel_IComp = {
s = aagrForms "quel" "quelle" "quels" "quelles" ;
cop = <> ;
} ;
--- in ExtraRomance
-- PassAgentVPSlash vps np = passVPSlash

View File

@@ -56,6 +56,9 @@ abstract ExtraFreAbs = ExtraRomanceAbs - [ProDrop] ** {
EstcequeQuestCl : Cl -> QCl ; -- est-ce qu'il dort
InvQuestCl : Cl -> QCl ; -- dort-il
InvQuestIAdvCl : IAdv -> Cl -> QCl ; -- dort-il
quel_IComp : IComp ; -- quelle est votre nationalité
}

3
src/french/MarkupFre.gf Normal file
View File

@@ -0,0 +1,3 @@
--# -path=.:../abstract:../common:../romance
concrete MarkupFre of Markup = CatFre, MarkHTMLX ** MarkupRomance with (ResRomance = ResFre) ;

View File

@@ -20,6 +20,10 @@ concrete ConjunctionGer of Conjunction =
c = ss.c
} ;
ConjCN conj ss = conjunctDistrTable3 Adjf Number Case conj ss ** {
rc = \\_ => [] ; ext = [] ; adv = [] ; g = ss.g
} ;
-- These fun's are generated from the list cat's.
@@ -56,6 +60,17 @@ concrete ConjunctionGer of Conjunction =
ext = []} ;
BaseRS x y = twoTable RelGenNum x y ** {c = y.c} ;
ConsRS xs x = consrTable RelGenNum comma xs x ** {c = xs.c} ;
BaseCN x y = {
s1 = bigCN x ;
s2 = bigCN y ;
g = x.g ; --- gender of first CN, used e.g. in articles
} ;
ConsCN x xs = {
s1 = \\a,n,c => bigCN x ! a ! n ! c ++ comma ++ xs.s1 ! a ! n ! c ;
s2 = xs.s2 ;
g = x.g ; --- gender of first CN, used e.g. in articles
} ;
lincat
[S] = {s1,s2 : Order => Str} ;
@@ -63,8 +78,12 @@ concrete ConjunctionGer of Conjunction =
[NP] = {s1,s2 : PCase => Str ; a : Agr} ;
[AP] = {s1,s2 : AForm => Str ; isPre : Bool; c : Str * Str ; ext : Str} ;
[RS] = {s1,s2 : RelGenNum => Str ; c : Case} ;
[CN] = {s1,s2 : Adjf => Number => Case => Str ; g : Gender} ;
oper
bigAP : AP -> AForm => Str = \ap ->
\\a => ap.c.p1 ++ ap.s ! a ++ ap.c.p2 ++ ap.ext;
bigCN : CN -> Adjf => Number => Case => Str = \cn ->
\\a,n,c => cn.s ! a ! n ! c ++ cn.adv ++ cn.ext ++ cn.rc ! n ;
}

View File

@@ -35875,7 +35875,7 @@ lin
ss_mann_N = mkN "SS-Mann" "SS-Männer" masculine ;
ss_N = mkN "ẞ" "ẞ" neuter ;
st_vincent_undgrenadinen_N = mkN "St. Vincent undGrenadinen" "St. Vincent undGrenadinen" neuter ;
staat_N = mkN "Staat" "Staaten" masculine ;
staat_N = mkN "Staat" "Staat" "Staat" "Staats" "Staaten" "Staaten" masculine ;
staatlich_A = regA "staatlich" ;
staatsanleihe_N = mkN "Staatsanleihe" "Staatsanleihen" feminine ;
staatsanwaeltin_N = mkN "Staatsanwältin" "Staatsanwältinnen" feminine ;

16
src/german/MarkupGer.gf Normal file
View File

@@ -0,0 +1,16 @@
--# -path=.:../abstract:../common
concrete MarkupGer of Markup = CatGer, MarkHTMLX ** {
lin
MarkupCN m cn = cn ** {s = \\a,n,c => appMark m (cn.s ! a ! n ! c)} ; --- other fields e.g ext intact
MarkupNP m np = np ** {s = \\c => appMark m (np.s ! c)} ;
MarkupAP m ap = ap ** {s = \\a => appMark m (ap.s ! a)} ;
MarkupAdv m adv = {s = appMark m adv.s} ;
MarkupS m s = {s = \\o => appMark m (s.s ! o)} ;
MarkupUtt m utt = {s = appMark m utt.s} ;
MarkupPhr m phr = {s = appMark m phr.s} ;
MarkupText m txt = {s = appMark m txt.s} ;
}

View File

@@ -192,10 +192,11 @@ concrete NounGer of Noun = CatGer ** open ResGer, MorphoGer, Prelude in {
} ;
RelCN cn rs = cn ** {rc = \\n => embedInCommas (rs.s ! RGenNum (gennum cn.g n))} ;
RelCN cn rs = cn ** {rc = \\n => (cn.rc ! n ++ embedInCommas (rs.s ! RGenNum (gennum cn.g n)))} ;
---- another layer of embedInCommas needed if there is a non-empty rc
RelNP np rs = np ** {
rc = embedInCommas (rs.s ! RGenNum (gennum (genderAgr np.a) (numberAgr np.a))) ;
rc = (np.rc ++ embedInCommas (rs.s ! RGenNum (gennum (genderAgr np.a) (numberAgr np.a)))) ;
isPron = False } ;
SentCN cn s = cn ** {ext = embedInCommas s.s} ;

View File

@@ -755,14 +755,14 @@ resource ResGer = ParamX ** open Prelude in {
infVP : Bool -> VP -> ((Agr => Str) * Str * Str * Str) = \isAux, vp -> let vps = useVP vp in
<
\\agr => (vp.nn ! agr).p1 ++ (vp.nn ! agr).p2 ++ vp.a2,
vp.a1 ! Pos ++ (vps.s ! (notB isAux) ! agrP3 Sg ! VPInfinit Simul).inf,
vp.a1 ! Pos ++ vp.adj ++ (vps.s ! (notB isAux) ! agrP3 Sg ! VPInfinit Simul).inf,
vp.inf,
vp.ext
vp.infExt ++ vp.ext
> ;
useInfVP : Bool -> VP -> Str = \isAux,vp ->
let vpi = infVP isAux vp in
vpi.p1 ! agrP3 Sg ++ vpi.p3 ++ vpi.p2 ;
vpi.p1 ! agrP3 Sg ++ vpi.p3 ++ vpi.p2 ++ vpi.p4 ;
-- The nominative case is not used as reflexive, but defined here
-- so that we can reuse this in personal pronouns.

View File

@@ -2,12 +2,12 @@
resource MakeStructuralIta = open CatIta, ParadigmsIta, MorphoIta, Prelude in {
oper
mkConj : Str -> Str -> ParadigmsIta.Number -> Conj = \x,y,n ->
oper
mkConj : Str -> Str -> ParadigmsIta.Number -> Conj = \x,y,n ->
{s1 = x ; s2 = y ; n = n ; lock_Conj = <>} ;
mkSubj : Str -> Subj = \x ->
mkSubj : Str -> Subj = \x ->
{s = x ; m = Indic ; lock_Subj = <>} ;
mkSubjSubj : Str -> Subj = \x ->
mkSubjSubj : Str -> Subj = \x ->
{s = x ; m = Conjunct ; lock_Subj = <>} ;
mkIQuant : Str -> IQuant = \s ->
@@ -21,9 +21,62 @@ oper
} ;
mkPredet : Str -> Str -> Prep -> Bool -> Predet = \m,f,c,p -> lin Predet {
s = \\g,k => prepCase k ++ case g.g of {Masc => m ; Fem => f} ; ---- number?
c = c.c ;
c = c.c ;
a = if_then_else PAgr p (PAg Sg) PNoAg ---- e,g, "chacun de"; other possibilities?
} ;
} ;
mkQuant = overload {
-- Does not inflect for number or gender
mkQuant : Str -> Quant = \s ->
let
questo : Number => Gender => Case => Str = \\n,g,c => prepCase c ++ s ;
in lin Quant {
s = \\b => questo ;
sp = questo ;
s2 = [] ;
isNeg = False
} ;
-- Inflects for number and gender
mkQuant : Str -> Str -> Str -> Str -> Quant = \tutto,tutta,tutti,tutte ->
let
questo : Number => Gender => Case => Str = table {
Sg => table {
Masc => \\c => prepCase c ++ tutto ;
Fem => \\c => prepCase c ++ tutta
} ;
Pl => table {
Masc => \\c => prepCase c ++ tutti ;
Fem => \\c => prepCase c ++ tutte
}
}
in lin Quant {
s = \\b => questo ;
sp = questo ;
s2 = [] ;
isNeg = False
} ;
} ;
mkDet = overload {
-- Does not inflect for number
mkDet : Str -> Number -> Det = \piu,n -> lin Det {
s,sp = \\_,_ => piu ;
n = n ;
s2 = [] ;
isNeg = False
} ;
-- Inflects for number
mkDet : Str -> Str -> Number -> Det = \alcuni,alcune,n -> lin Det {
s,sp = table {
Masc => \\_ => alcuni ;
Fem => \\_ => alcune
} ;
n = n ;
s2 = [] ;
isNeg = False
} ;
} ;
}

3
src/italian/MarkupIta.gf Normal file
View File

@@ -0,0 +1,3 @@
--# -path=.:../abstract:../common:../romance
concrete MarkupIta of Markup = CatIta, MarkHTMLX ** MarkupRomance with (ResRomance = ResIta) ;

View File

@@ -8,7 +8,7 @@
-- syntax. To build a lexicon, it is better to use $ParadigmsIta$, which
-- gives a higher-level access to this module.
resource MorphoIta = CommonRomance, ResIta **
resource MorphoIta = CommonRomance, ResIta **
open PhonoIta, Prelude, Predef in {
flags optimize=all ;
@@ -23,7 +23,7 @@ resource MorphoIta = CommonRomance, ResIta **
oper
numForms : (_,_ : Str) -> Number => Str = \vino, vini ->
table {Sg => vino ; Pl => vini} ;
table {Sg => vino ; Pl => vini} ;
-- For example:
@@ -41,19 +41,23 @@ oper
-- Common nouns are inflected in number and have an inherent gender.
mkNoun : (Number => Str) -> Gender -> Noun = \mecmecs,gen ->
mkNoun : (Number => Str) -> Gender -> Noun = \mecmecs,gen ->
{s = mecmecs ; g = gen} ;
mkNounIrreg : Str -> Str -> Gender -> Noun = \mec,mecs ->
mkNounIrreg : Str -> Str -> Gender -> Noun = \mec,mecs ->
mkNoun (numForms mec mecs) ;
mkNomReg : Str -> Noun = \vino ->
mkNomReg : Str -> Noun = \vino ->
let
o = last vino ;
vin = init vino ;
n = last vin
in
case vino of {
_ + "ico" => {s = numForms vino (vin + "i") -- amico -> amici
; g = Masc} ;
_ + "ccia" => {s = numForms vino (init vin + "e") -- doccia -> docce
; g = Fem} ;
_ + "o" => {s = case n of {
"c" | "g" => numForms vino (vin + "hi") ;
"i" => numForms vino vin ;
@@ -90,22 +94,22 @@ oper
-- Then the regular and invariant patterns.
adjSolo : Str -> Adj = \solo ->
let
adjSolo : Str -> Adj = \solo ->
let
sol = Predef.tk 1 solo
in
mkAdj solo (sol + "a") (sol + "i") (sol + "e") (sol + "amente") ;
adjTale : Str -> Adj = \tale ->
let
adjTale : Str -> Adj = \tale ->
let
tal = Predef.tk 1 tale ;
tali = tal + "i" ;
tala = if_then_Str (pbool2bool (Predef.occur (Predef.dp 1 tal) "lr")) tal tale
in
mkAdj tale tale tali tali (tala + "mente") ;
adjBlu : Str -> Adj = \blu ->
mkAdj blu blu blu blu blu ; ---
adjBlu : Str -> Adj = \blu ->
mkAdj blu blu blu blu blu ; ---
mkAdjReg : Str -> Adj = \solo ->
@@ -117,7 +121,12 @@ oper
in
case o of {
"o" => case l of {
"c" | "g" => mkAdj solo (sol + "a") (sol + "hi") (sol + "he") solamente ;
-- "c" | "g" => mkAdj solo (sol + "a") (sol + "hi") (sol + "he") solamente ;
"c" => case last (init sol) of {
"i" => mkAdj solo (sol + "a") (sol + "i") (sol + "he") solamente ; -- pubblico -> pubblici
_ => mkAdj solo (sol + "a") (sol + "hi") (sol + "he") solamente -- ricco -> ricchi
} ;
"g" => mkAdj solo (sol + "a") (sol + "hi") (sol + "he") solamente ;
"i" => mkAdj solo (sol + "a") sol (sol + "e") solamente ;
_ => mkAdj solo (sol + "a") (sol + "i") (sol + "e") solamente
} ;
@@ -138,7 +147,7 @@ oper
-- given in $DiffIta.argPron$ and therefore wouldn't be needed in the
-- pronoun itself.)
mkPronoun : (_,_,_,_,_,_,_,_,_ : Str) ->
mkPronoun : (_,_,_,_,_,_,_,_,_ : Str) ->
Gender -> Number -> Person -> Pronoun =
\il,le,lui,glie,Lui,son,sa,ses,see,g,n,p ->
let
@@ -155,14 +164,14 @@ oper
<Sg,Masc> => son ;
<Sg,Fem> => sa ;
<Pl,Masc> => ses ;
<Pl,Fem> => see
<Pl,Fem> => see
} ;
a = Ag g n p ;
hasClit = True ; isPol = False
} ;
{- --e
mkPronoun : (_,_,_,_,_,_,_,_,_ : Str) ->
mkPronoun : (_,_,_,_,_,_,_,_,_ : Str) ->
Gender -> Number -> Person -> Pronoun =
\il,le,lui,glie,Lui,son,sa,ses,see,g,n,p ->
{s = table {

View File

@@ -7,8 +7,8 @@ concrete SymbolPes of Symbol = CatPes ** open Prelude, ResPes in {
lin
-- SymbPN i = {s = \\_ => i.s ; g = Masc} ;
SymbPN i = {s = i.s ; animacy = Inanimate} ; -- "از" is removed for Phrasebook
IntPN i = {s = i.s ++ "از" ; animacy = Inanimate} ;
FloatPN i = {s = i.s ++ "از" ; animacy = Inanimate} ;
IntPN i = {s = i.s ; animacy = Inanimate} ;
FloatPN i = {s = i.s ; animacy = Inanimate} ;
NumPN i = {s = i.s ; animacy = Inanimate} ;
CNIntNP cn i = {
s = \\ez => cn.s ! aEzafa ! Sg ++ i.s ;

View File

@@ -0,0 +1,21 @@
--# -path=.:../abstract:../common
incomplete concrete MarkupRomance of Markup = CatRomance, MarkHTMLX ** {
lin
MarkupCN m cn = cn ** {s = \\n => appMark m (cn.s ! n)} ;
MarkupNP m np = np ** {s = \\c => {
c1 = appMark m (np.s ! c).c1 ;
c2 = appMark m (np.s ! c).c2 ;
comp = appMark m (np.s ! c).comp ;
ton = appMark m (np.s ! c).ton
}
} ;
MarkupAP m ap = ap ** {s = \\a => appMark m (ap.s ! a)} ;
MarkupAdv m adv = {s = appMark m adv.s} ;
MarkupS m s = {s = \\md => appMark m (s.s ! md)} ;
MarkupUtt m utt = {s = appMark m utt.s} ;
MarkupPhr m phr = {s = appMark m phr.s} ;
MarkupText m txt = {s = appMark m txt.s} ;
}

View File

@@ -178,6 +178,16 @@ oper
mkVPSlash : Compl -> VP -> VP ** {c2 : Compl} = \c,vp -> vp ** {c2 = c} ;
Clause : Type = {s : Direct => RTense => Anteriority => RPolarity => Mood => Str} ;
-- for pos/neg variation other than negation word, e.g. "il y a du vin" / "il n'y a pas de vin"
posNegClause : Clause -> Clause -> RPolarity -> Clause = \pos,neg,pol -> {
s = \\d,t,a,b,m => case b of {
RPos => pos.s ! d ! t ! a ! b ! m ;
_ => neg.s ! d ! t ! a ! pol ! m
}
} ;
mkClause : Str -> Bool -> Bool -> Agr -> VP ->
{s : Direct => RTense => Anteriority => RPolarity => Mood => Str} =
mkClausePol False ;

View File

@@ -1,6 +1,6 @@
--# -path=.:../romance:../abstract:../common:prelude
instance DiffSpa of DiffRomance - [partAgr,vpAgrSubj,vpAgrClits] = open CommonRomance, PhonoSpa, BeschSpa, Prelude in {
instance DiffSpa of DiffRomance - [partAgr,vpAgrSubj,vpAgrClits,contractInf] = open CommonRomance, PhonoSpa, BeschSpa, Prelude in {
flags optimize=noexpand ;
coding=utf8 ;
@@ -10,7 +10,7 @@ instance DiffSpa of DiffRomance - [partAgr,vpAgrSubj,vpAgrClits] = open CommonRo
partAgr : VType -> Bool = \vtyp -> False ;
vpAgrSubj : Verb -> VPAgrType = \v -> <verbDefaultPart v, False> ;
vpAgrClits : Verb -> AAgr -> VPAgrType = \v,a -> <verbDefaultPart v, False> ;
contractInf : Bool -> Bool -> Bool = orB ; --- the effect of this is that the clitic is bound to the infinitive: matarte
--------------------------------
param

View File

@@ -80,4 +80,10 @@ concrete ExtraSpa of ExtraSpaAbs = ExtraRomanceSpa **
UseComp_estar comp = insertComplement comp.s (predV I.estar_V) ;
cual_IComp = {
s = aagrForms "cual" "cual" "cuáles" "cuáles" ;
cop = serCopula ;
} ;
}

View File

@@ -34,4 +34,6 @@ abstract ExtraSpaAbs = ExtraRomanceAbs ** {
UseComp_estar : Comp -> VP ; -- esta lleno, as opposed to es lleno
cual_IComp : IComp ; -- cual es ...
}

View File

@@ -20,4 +20,56 @@ oper
} ;
mkQuant = overload {
-- Does not inflect for number or gender
mkQuant : Str -> Quant = \s ->
let
questo : Number => Gender => Case => Str = \\n,g,c => prepCase c ++ s ;
in lin Quant {
s = \\b => questo ;
sp = questo ;
s2 = [] ;
isNeg = False
} ;
-- Inflects for number and gender
mkQuant : Str -> Str -> Str -> Str -> Quant = \tutto,tutta,tutti,tutte ->
let
questo : Number => Gender => Case => Str = table {
Sg => table {
Masc => \\c => prepCase c ++ tutto ;
Fem => \\c => prepCase c ++ tutta
} ;
Pl => table {
Masc => \\c => prepCase c ++ tutti ;
Fem => \\c => prepCase c ++ tutte
}
}
in lin Quant {
s = \\b => questo ;
sp = questo ;
s2 = [] ;
isNeg = False
} ;
} ;
mkDet = overload {
-- Does not inflect for number
mkDet : Str -> Number -> Det = \piu,n -> lin Det {
s,sp = \\_,_ => piu ;
n = n ;
s2 = [] ;
isNeg = False
} ;
-- Inflects for number
mkDet : Str -> Str -> Number -> Det = \alcuni,alcune,n -> lin Det {
s,sp = table {
Masc => \\_ => alcuni ;
Fem => \\_ => alcune
} ;
n = n ;
s2 = [] ;
isNeg = False
} ;
} ;
}

3
src/spanish/MarkupSpa.gf Normal file
View File

@@ -0,0 +1,3 @@
--# -path=.:../abstract:../common:../romance
concrete MarkupSpa of Markup = CatSpa, MarkHTMLX ** MarkupRomance with (ResRomance = ResSpa) ;

View File

@@ -139,8 +139,8 @@ lin
when_Subj = ss "cuando" ** {m = Indic} ;
where_IAdv = ss "dónde" ;
which_IQuant = {s = table {
Sg => \\g,c => prepCase c ++ "qué" ; --- cual
Pl => \\g,c => prepCase c ++ "qué"
Sg => \\g,c => prepCase c ++ "cual" ;
Pl => \\g,c => prepCase c ++ "cuales"
}
} ;
whoPl_IP = {s = \\c => prepCase c ++ "quién" ; a = aagr Masc Pl} ;

View File

@@ -15125,7 +15125,7 @@ lin deed_N = mkN "deed" "deeds";
lin deed_box_N = variants {mkN "deed-box" "deed-boxes"; mkN "deedbox" "deedboxes"};
lin deedpoll_N = mkN "deedpoll" "deedpolls";
lin deem_V2 = mkV2 (mkV "deem" "deems" "deemed" "deemed" "deeming");
lin deem_V2A = mkV2V (mkV "deem") noPrep to_Prep;
lin deem_V2A = mkV2A (mkV "deem") noPrep;
lin deem_V2V = mkV2V (mkV "deem") noPrep to_Prep;
lin deep_A = mkA "deep" "deeper";
lin deep_Adv = mkAdv "deep";

View File

@@ -347,6 +347,35 @@ concrete LexiconTur of Lexicon = CatTur **
watch_V2 = mkV2 (mkV "izlemek") ;
win_V2 = mkV2 (mkV "kazanmak") ;
wipe_V2 = mkV2 (mkV "silmek") ;
wonder_VQ = mkV "merak" et_Aux ;
write_V2 = mkV2 (mkV "yazmak") ;
wonder_VQ = mkV "merak" et_Aux ;
know_VQ = mkV "bilmek" SgSylConIrreg ;
alas_Interj = { s = "ne yazık ki" } ;
already_Adv = mkAdv "zaten" ;
far_Adv = mkAdv "uzak" ;
now_Adv = mkAdv "şimdi" ;
today_Adv = mkAdv "bugün" ;
-- TODO: should `linearize easy_A2V` be (A) "kolay" (Eng "easy") or (B)
-- ("için kolay") (Eng "easy for")? I got the latter from the English
-- linearization but the following seems to be the correct way using the
-- paradigms. I might need to do something so that the resulting
-- linearization is (B).
easy_A2V = mkA2 (mkA "kolay") icinP ;
-- TODO: It is not obvious to me why these are inflected so putting
-- this here as an implementation stub.
left_Ord = { s = \\_,_ => "sol" } ;
right_Ord = { s = \\_,_ => "sağ" } ;
probable_AS = mkAS (mkA "olası") ;
fun_AV = mkAV (mkA "neşe") ;
oper
icinP = mkPrep "için" Gen ;
}

View File

@@ -13,8 +13,9 @@ resource ParadigmsTur = open
coding=utf8 ; optimize=noexpand ;
oper
-- Paradigms for verb
AS, AV : Type = A ;
-- Paradigms for verb
mkV : overload {
-- make regular verbs, one form is enough
mkV : (esmek : Str) -> V ;
@@ -155,6 +156,9 @@ resource ParadigmsTur = open
mkA : Str -> Str -> HarVowP -> A ;
} ;
mkAS : A -> AS ;
mkAV : A -> AV ;
mkA2 : overload {
-- (biri) ile evli
mkA2 : A -> Prep -> A2 ;
@@ -184,6 +188,10 @@ resource ParadigmsTur = open
makeDigit : Str -> Str -> Number -> {s : CardOrd => Number => Case => Str ; n : Number} ;
-- Adverbs
mkAdv : Str -> Adv ;
--Implementation of verb paradigms
mkV = overload {
@@ -425,6 +433,9 @@ resource ParadigmsTur = open
mkN3 base = (mkN base) ** lin N3 {c1,c2 = lin Prep {s=[]; c=Gen}} ;
-- Implementation for adverb paradigms.
mkAdv s = lin Adv { s = s } ;
-- Implementation of adjactive paradigms
mkA = overload {
-- güzel
@@ -441,6 +452,9 @@ resource ParadigmsTur = open
mkA : (base, base1 : Str) -> (ih_har : HarVowP) -> A = \base,base1,ih_har -> (irregN_h base base ih_har) ** lin A {adv = addSuffix base (mkHar ih_har (getHarConP base)) adjAdvSuffix};
} ;
mkAS v = v ;
mkAV v = v ;
mkA2 =
overload {
mkA2 : A -> Prep -> A2 = \base,c -> base ** lin A2 {c = c} ;