1
0
forked from GitHub/gf-rgl

added Ukrainian

This commit is contained in:
Krasimir Angelov
2025-09-25 13:02:21 +02:00
parent 153ad8b41a
commit 7d4e40bac1
14 changed files with 35112 additions and 0 deletions

View File

@@ -55,6 +55,7 @@ Tam,Tamil,tamil,n,n,n,n,n,n,n,n,n
Tel,Telugu,telugu,,,y,n,n,n,,n,n
Tha,Thai,thai,,to_thai,,,,,,y,n
Tur,Turkish,turkish,,,y,,,n,,n,n
Ukr,Ukrainian,ukrainian,,,,y,n,n,n,y,n
Urd,Urdu,urdu,Hindustani,,,,,,,y,n
Som,Somali,somali,,,,,n,n,,n,n
Zul,Zulu,zulu,,,,,n,n,,n,n
1 Code Name Directory Functor Unlexer Present All Try Symbolic Compatibility Synopsis MorphoDict
55 Tel Telugu telugu y n n n n n
56 Tha Thai thai to_thai y n
57 Tur Turkish turkish y n n n
58 Ukr Ukrainian ukrainian y n n n y n
59 Urd Urdu urdu Hindustani y n
60 Som Somali somali n n n n
61 Zul Zulu zulu n n n n

View File

@@ -0,0 +1,4 @@
concrete AdjectiveUkr of Adjective = CatUkr ** {
--lin
-- PositA a = a ;
}

4
src/ukrainian/AllUkr.gf Normal file
View File

@@ -0,0 +1,4 @@
concrete AllUkr of AllUkrAbs =
LangUkr
**
{} ;

View File

@@ -0,0 +1,3 @@
abstract AllUkrAbs =
Lang
** {}

21
src/ukrainian/CatUkr.gf Normal file
View File

@@ -0,0 +1,21 @@
concrete CatUkr of Cat = CommonX ** open ResUkr in {
lincat N = N ;
lincat N2 = N ** {c2 : Compl} ;
lincat N3 = N ** {c2,c3 : Compl} ;
lincat V = V ;
lincat VV,VS,VQ,VA = V ;
lincat V2 = V ** {c2 : Compl} ;
lincat V3,V2A,V2S,V2Q,V2V = V ** {c2,c3 : Compl} ;
lincat A = A ;
lincat A2 = A ** {c2 : Compl} ;
lincat Prep = Compl ;
lincat CN = CommonNoun ;
lincat AP = AdjPhrase ;
lincat S = {s : Str} ;
lincat LN,SN,GN,PN = {s : Str} ;
linref V,VV,V2,V3,V2A,V2S,V2Q,V2V = \v -> v.infinitive ;
}

View File

@@ -0,0 +1,85 @@
concrete DocumentationUkr of Documentation = CatUkr ** open
ResUkr, Prelude, HTML in {
lincat
Inflection = {t : Str; s1,s2,s3 : Str} ;
Definition = {s : Str} ;
Document = {s : Str} ;
Tag = {s : Str} ;
lin
InflectionN,InflectionN2,InflectionN3 = \x -> {
t="n" ;
s1="" ;
s2=frameTable (
tr (intagAttr "th" "rowspan=\"2\"" "Nom" ++ th "Sg" ++ td (x.s ! Nom ! Sg)) ++
tr (th "Pl" ++ td (x.s ! Nom ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "Acc" ++ th "Sg" ++ td (x.s ! Acc ! Sg)) ++
tr (th "Pl" ++ td (x.s ! Acc ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "Dat" ++ th "Sg" ++ td (x.s ! Dat ! Sg)) ++
tr (th "Pl" ++ td (x.s ! Dat ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "Gen" ++ th "Sg" ++ td (x.s ! Gen ! Sg)) ++
tr (th "Pl" ++ td (x.s ! Gen ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "Loc" ++ th "Sg" ++ td (x.s ! Loc ! Sg)) ++
tr (th "Pl" ++ td (x.s ! Loc ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "Instr" ++ th "Sg" ++ td (x.s ! Instr ! Sg)) ++
tr (th "Pl" ++ td (x.s ! Instr ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "Voc" ++ th "Sg" ++ td (x.Voc ! Sg)) ++
tr (th "Pl" ++ td (x.Voc ! Pl))) ;
s3=[]
} ;
lin
InflectionV,InflectionV2,InflectionV2A,InflectionV2Q,InflectionV2S,InflectionV2V,InflectionV3,InflectionVA,InflectionVQ,InflectionVS,InflectionVV = \x -> {
t="v" ;
s1="" ;
s2=heading1 "Infinitive" ++
paragraph (x.infinitive) ++
heading1 "Present" ++
frameTable (
tr (intagAttr "th" "rowspan=\"6\"" "Pres" ++ intagAttr "th" "rowspan=\"2\"" "P1" ++ th "Sg" ++ td ((x.active ! Imperf).Pres ! P1 ! Sg)) ++
tr (th "Pl" ++ td ((x.active ! Imperf).Pres ! P1 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2" ++ th "Sg" ++ td ((x.active ! Imperf).Pres ! P2 ! Sg)) ++
tr (th "Pl" ++ td ((x.active ! Imperf).Pres ! P2 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P3" ++ th "Sg" ++ td ((x.active ! Imperf).Pres ! P3 ! Sg)) ++
tr (th "Pl" ++ td ((x.active ! Imperf).Pres ! P3 ! Pl))) ++
heading1 "Imperative" ++
paragraph (x.imperative1) ++
frameTable (
tr (th "Sg" ++ td (x.imperative2 ! Sg)) ++
tr (th "Pl" ++ td (x.imperative2 ! Pl))) ++
heading1 "participle" ++
frameTable (
tr (th "" ++ th "Sg" ++ th "Pl") ++
tr (th "Masc" ++ td (x.participle ! Masc ! Sg) ++ td (x.participle ! Masc ! Pl)) ++
tr (th "Fem" ++ td (x.participle ! Fem ! Sg) ++ td (x.participle ! Fem ! Pl)) ++
tr (th "Neuter" ++ td (x.participle ! Neuter ! Sg) ++ td (x.participle ! Neuter ! Pl))) ;
s3=[]
} ;
lin
InflectionA,InflectionA2 = \x -> {
t="a" ;
s1="" ;
s2=frameTable (
tr (th "" ++ th "Masc" ++ th "Fem" ++ th "Neuter" ++ th "Pl") ++
tr (th "Nom" ++ td (x.s ! Nom ! GSg Masc) ++ td (x.s ! Nom ! GSg Fem) ++ td (x.s ! Nom ! GSg Neuter) ++ td (x.s ! Nom ! GPl)) ++
tr (th "Acc" ++ td (x.s ! Acc ! GSg Masc) ++ td (x.s ! Acc ! GSg Fem) ++ td (x.s ! Acc ! GSg Neuter) ++ td (x.s ! Acc ! GPl)) ++
tr (th "Dat" ++ td (x.s ! Dat ! GSg Masc) ++ td (x.s ! Dat ! GSg Fem) ++ td (x.s ! Dat ! GSg Neuter) ++ td (x.s ! Dat ! GPl)) ++
tr (th "Gen" ++ td (x.s ! Gen ! GSg Masc) ++ td (x.s ! Gen ! GSg Fem) ++ td (x.s ! Gen ! GSg Neuter) ++ td (x.s ! Gen ! GPl)) ++
tr (th "Loc" ++ td (x.s ! Loc ! GSg Masc) ++ td (x.s ! Loc ! GSg Fem) ++ td (x.s ! Loc ! GSg Neuter) ++ td (x.s ! Loc ! GPl)) ++
tr (th "Instr"++td (x.s ! Instr ! GSg Masc)++td (x.s ! Instr ! GSg Fem)++td (x.s ! Instr ! GSg Neuter)++td (x.s ! Instr ! GPl))) ;
s3=[]
} ;
lin
InflectionAdA,InflectionAdN,InflectionAdV,InflectionAdv = \x -> {t="adv"; s1=""; s2=x.s; s3=""} ;
InflectionPrep = \x -> {t="prep"; s1=""; s2=x.s; s3=""} ;
lin
NoDefinition t = {s=t.s};
MkDefinition t d = {s="<p><b>Definition:</b>"++t.s++d.s++"</p>"};
MkDefinitionEx t d e = {s="<p><b>Definition:</b>"++t.s++d.s++"</p><p><b>Example:</b>"++e.s++"</p>"};
lin
MkDocument d i e = {s = i.s1 ++ d.s ++ i.s2 ++ i.s3 ++ e.s} ;
MkTag i = {s = i.t} ;
}

View File

@@ -0,0 +1,6 @@
concrete GrammarUkr of Grammar =
TenseX,
PhraseUkr,
NounUkr,
AdjectiveUkr ** {
}

10
src/ukrainian/LangUkr.gf Normal file
View File

@@ -0,0 +1,10 @@
--# -path=.:../abstract
concrete LangUkr of Lang =
GrammarUkr,
LexiconUkr
,DocumentationUkr --# notpresent
** {
flags startcat = Phr ;
}

View File

@@ -0,0 +1,2 @@
concrete LexiconUkr of Lexicon = CatUkr ** open ParadigmsUkr in {
}

33464
src/ukrainian/MorphoUkr.gf Normal file

File diff suppressed because it is too large Load Diff

4
src/ukrainian/NounUkr.gf Normal file
View File

@@ -0,0 +1,4 @@
concrete NounUkr of Noun = CatUkr ** {
--lin
-- UseN n = n ;
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,11 @@
concrete PhraseUkr of Phrase = CatUkr ** {
lin
PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ;
UttS s = s ;
UttInterj i = i ;
NoPConj = {s = []} ;
NoVoc = {s = []} ;
}

166
src/ukrainian/ResUkr.gf Normal file
View File

@@ -0,0 +1,166 @@
resource ResUkr = {
param Case = Nom | Acc | Dat | Gen | Loc | Instr ;
param Number = Sg | Pl ;
param Gender = Masc | Neuter | Fem ;
oper N = {s: Case => Number => Str; Voc: Number => Str; g: Gender} ; -- 11407
oper mkN : (_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Gender -> N =
\f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,g ->
{ s = table {
Nom => table {
Sg => f1 ;
Pl => f2
} ;
Acc => table {
Sg => f3 ;
Pl => f4
} ;
Dat => table {
Sg => f5 ;
Pl => f6
} ;
Gen => table {
Sg => f7 ;
Pl => f8
} ;
Loc => table {
Sg => f9 ;
Pl => f10
} ;
Instr => table {
Sg => f11 ;
Pl => f12
}
} ;
Voc = table {
Sg => f13 ;
Pl => f14
} ;
g = g
} ;
param Aspect = Perf | Imperf ;
param Person = P1 | P2 | P3 ;
param Tense = Past | Pres ;
oper V = {active: Aspect => {Past: Str; Pres: Person => Number => Str}; imperative1: Str; imperative2: Number => Str; infinitive: Str; participle: Gender => Number => Str; passive: Aspect => Tense => Str} ; -- 4822
oper mkV : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> V =
\f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16,f17,f18,f19,f20,f21,f22,f23,f24,f25,f26,f27,f28 ->
{ active = table {
Imperf => { Past = f1 ;
Pres = table {
P1 => table {
Sg => f2 ;
Pl => f3
} ;
P2 => table {
Sg => f4 ;
Pl => f5
} ;
P3 => table {
Sg => f6 ;
Pl => f7
}
}
} ;
Perf => { Past = f8 ;
Pres = table {
P1 => table {
Sg => f9 ;
Pl => f10
} ;
P2 => table {
Sg => f11 ;
Pl => f12
} ;
P3 => table {
Sg => f13 ;
Pl => f14
}
}
}
} ;
imperative1 = f15 ;
imperative2 = table {
Sg => f16 ;
Pl => f17
} ;
infinitive = f18 ;
participle = table {
Masc => table {
Sg => f19 ;
Pl => f20
} ;
Fem => table {
Sg => f21 ;
Pl => f22
} ;
Neuter => table {
Sg => f23 ;
Pl => f24
}
} ;
passive = table {
Imperf => table {
Pres => f25 ;
Past => f26
} ;
Perf => table {
Pres => f27 ;
Past => f28
}
}
} ;
param GenNum = GSg Gender | GPl ;
oper A = {s: Case => GenNum => Str} ; -- 4394
oper mkA : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> A =
\f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16,f17,f18,f19,f20,f21,f22,f23,f24 ->
{ s = table {
Nom => table {
GSg Masc => f1 ;
GSg Fem => f2 ;
GSg Neuter => f3 ;
GPl => f4
} ;
Acc => table {
GSg Masc => f5 ;
GSg Fem => f6 ;
GSg Neuter => f7 ;
GPl => f8
} ;
Dat => table {
GSg Masc => f9 ;
GSg Fem => f10 ;
GSg Neuter => f11 ;
GPl => f12
} ;
Gen => table {
GSg Masc => f13 ;
GSg Fem => f14 ;
GSg Neuter => f15 ;
GPl => f16
} ;
Loc => table {
GSg Masc => f17 ;
GSg Fem => f18 ;
GSg Neuter => f19 ;
GPl => f20
} ;
Instr => table {
GSg Masc => f21 ;
GSg Fem => f22 ;
GSg Neuter => f23 ;
GPl => f24
}
}
} ;
oper Compl = {s : Str; c : Case} ;
oper noPrep : Compl = {s=""; c=Acc} ;
oper CommonNoun = {s : Str} ;
oper AdjPhrase = {s : Str} ;
}