From ce2f785f9264570f10635cd170b3d27efc8f3280 Mon Sep 17 00:00:00 2001 From: Krasimir Angelov Date: Thu, 19 Mar 2026 15:25:04 +0100 Subject: [PATCH 01/20] autogenerate parts of the syntax --- src/macedonian/AdjectiveMkd.gf | 5 ++++ src/macedonian/CatMkd.gf | 23 +++++++++++++++++ src/macedonian/GrammarMkd.gf | 12 +++------ src/macedonian/NounMkd.gf | 46 ++++++++++++++++++++++++++++++++++ src/macedonian/SentenceMkd.gf | 12 +++++++++ src/macedonian/VerbMkd.gf | 12 +++++++++ 6 files changed, 102 insertions(+), 8 deletions(-) create mode 100644 src/macedonian/AdjectiveMkd.gf create mode 100644 src/macedonian/NounMkd.gf create mode 100644 src/macedonian/SentenceMkd.gf create mode 100644 src/macedonian/VerbMkd.gf diff --git a/src/macedonian/AdjectiveMkd.gf b/src/macedonian/AdjectiveMkd.gf new file mode 100644 index 00000000..c500d9ad --- /dev/null +++ b/src/macedonian/AdjectiveMkd.gf @@ -0,0 +1,5 @@ +concrete AdjectiveMkd of Adjective = CatMkd ** open Prelude,ResMkd in { + flags + coding = "UTF-8" ; + lin PositA a = a ** {isPre = True} ; +} \ No newline at end of file diff --git a/src/macedonian/CatMkd.gf b/src/macedonian/CatMkd.gf index 7c902195..90ef43bb 100644 --- a/src/macedonian/CatMkd.gf +++ b/src/macedonian/CatMkd.gf @@ -23,4 +23,27 @@ linref V, VA, VV, VS, VQ, V2, V2S, V2Q, V3, V2A, V2V = } ; linref A, A2 = \a -> a.s ! Indef ! GSg Masc ; +lincat AP = {s : Species => GenNum => Str; isPre : Bool} ; +lincat NP = {s : Str; vocative: Str; n : Number; p : Person; g : Gender} ; +lincat Num = {s : Str; n : Number} ; +lincat Quant = {s : Str; sp : Species} ; +lincat Det = {s : Str; n : Number; sp : Species} ; + +lincat VP = {present : Aspect => Number => Person => Str; + aorist : Number => Person => Str; + imperfect : Aspect => Number => Person => Str; + imperative : Aspect => Number => Str; + participle : {aorist : Aspect => GenNum => Str; perfect : Aspect => Str}} ; +lincat VPSlash = {present : Aspect => Number => Person => Str; + aorist : Number => Person => Str; + imperfect : Aspect => Number => Person => Str; + imperative : Aspect => Number => Str; + participle : {aorist : Aspect => GenNum => Str; + imperfect : GenNum => Str; perfect : Aspect => Str; + adjectival : Aspect => Str; adverbial : Str}; + noun_from_verb : Str; isRefl : Bool; c2 : Compl} ; +lincat Cl = {present : Aspect => Str; + aorist : Str; + participle : {aorist : Aspect => Str; perfect : Aspect => Str}} ; + } diff --git a/src/macedonian/GrammarMkd.gf b/src/macedonian/GrammarMkd.gf index d6fdcad6..24bb3ef6 100644 --- a/src/macedonian/GrammarMkd.gf +++ b/src/macedonian/GrammarMkd.gf @@ -1,8 +1,4 @@ -concrete GrammarMkd of Grammar = - NumeralMkd, - PhraseMkd, - TextX, - StructuralMkd, - TenseX ** { - -} ; +concrete GrammarMkd of Grammar = VerbMkd,SentenceMkd,NounMkd,AdjectiveMkd,NumeralMkd,PhraseMkd,TextX,StructuralMkd,TenseX ** { + flags + coding = "UTF-8" ; +} \ No newline at end of file diff --git a/src/macedonian/NounMkd.gf b/src/macedonian/NounMkd.gf new file mode 100644 index 00000000..af78a48b --- /dev/null +++ b/src/macedonian/NounMkd.gf @@ -0,0 +1,46 @@ +concrete NounMkd of Noun = CatMkd ** open Prelude,ResMkd in { + flags + coding = "UTF-8" ; + lin AdjCN ap cn = { + s = case ap.isPre of { + True => \\s,n => ap.s ! s + ! case n of { + Sg => GSg cn.g; + Pl => GPl + } ++ + cn.s ! Indef ! n; + False => \\s,n => cn.s ! s ! n ++ + ap.s ! Indef + ! case n of { + Sg => GSg cn.g; + Pl => GPl + } + }; + vocative = \\n => ap.s ! Indef + ! case n of { + Sg => GSg cn.g; + Pl => GPl + } ++ + cn.vocative ! n; + count_form = ap.s ! Indef ! GPl ++ cn.count_form; g = cn.g} ; + lin AdvCN cn adv = { + s = \\s,n => cn.s ! s ! n ++ adv.s; + count_form = cn.count_form ++ adv.s; + vocative = \\n => cn.vocative ! n ++ adv.s; + g = cn.g + } ; + lin DefArt = {s = []; sp = Def Unspecified} ; + lin DetCN det cn = { + s = det.s ++ cn.s ! det.sp ! det.n; + vocative = det.s ++ cn.vocative ! det.n; + n = det.n; + p = P3; + g = cn.g + } ; + lin DetQuant det num = {s = det.s ++ num.s; n = num.n; + sp = det.sp} ; + lin IndefArt = {s = []; sp = Indef} ; + lin NumPl = {s = []; n = Pl} ; + lin NumSg = {s = []; n = Sg} ; + lin UseN s = s ; +} diff --git a/src/macedonian/SentenceMkd.gf b/src/macedonian/SentenceMkd.gf new file mode 100644 index 00000000..ddd13e06 --- /dev/null +++ b/src/macedonian/SentenceMkd.gf @@ -0,0 +1,12 @@ +concrete SentenceMkd of Sentence = CatMkd ** open Prelude,ResMkd in { + flags + coding = "UTF-8" ; + lin PredVP np vp = {present = \\a => np.s ++ vp.present ! a ! np.n ! np.p ; + aorist = np.s ++ vp.aorist ! np.n ! np.p ; + participle = {aorist = \\a => np.s ++ vp.participle.aorist ! a ! + case np.n of { + Sg => GSg np.g; + Pl => GPl + }; + perfect = \\a => np.s ++ vp.participle.perfect ! a}} ; +} diff --git a/src/macedonian/VerbMkd.gf b/src/macedonian/VerbMkd.gf new file mode 100644 index 00000000..90a82b84 --- /dev/null +++ b/src/macedonian/VerbMkd.gf @@ -0,0 +1,12 @@ +concrete VerbMkd of Verb = CatMkd ** open Prelude,ResMkd in { + flags + coding = "UTF-8" ; + lin ComplSlash vps np = {present = \\a,n,p => vps.present ! a ! n + ! p + ++ np.s; + aorist = \\n,p => vps.aorist ! n ! p ++ np.s; + imperfect = \\a,n,p => vps.imperfect ! a ! n ! p ++ np.s; + imperative = \\a,n => vps.imperative ! a ! n ++ np.s; + participle = {aorist = \\a,gn => vps.participle.aorist ! a ! gn ++ np.s; + perfect = \\a => vps.participle.perfect ! a ++ np.s}} ; +} From 76cbf0b75b231df7ebca492a18cba1ea3f945b6d Mon Sep 17 00:00:00 2001 From: Krasimir Angelov Date: Thu, 19 Mar 2026 15:27:53 +0100 Subject: [PATCH 02/20] remove the utf-8 flags --- src/macedonian/AdjectiveMkd.gf | 5 ++--- src/macedonian/GrammarMkd.gf | 4 +--- src/macedonian/NounMkd.gf | 2 -- src/macedonian/SentenceMkd.gf | 3 +-- src/macedonian/VerbMkd.gf | 3 +-- 5 files changed, 5 insertions(+), 12 deletions(-) diff --git a/src/macedonian/AdjectiveMkd.gf b/src/macedonian/AdjectiveMkd.gf index c500d9ad..681d21b0 100644 --- a/src/macedonian/AdjectiveMkd.gf +++ b/src/macedonian/AdjectiveMkd.gf @@ -1,5 +1,4 @@ concrete AdjectiveMkd of Adjective = CatMkd ** open Prelude,ResMkd in { - flags - coding = "UTF-8" ; + lin PositA a = a ** {isPre = True} ; -} \ No newline at end of file +} diff --git a/src/macedonian/GrammarMkd.gf b/src/macedonian/GrammarMkd.gf index 24bb3ef6..799812e4 100644 --- a/src/macedonian/GrammarMkd.gf +++ b/src/macedonian/GrammarMkd.gf @@ -1,4 +1,2 @@ concrete GrammarMkd of Grammar = VerbMkd,SentenceMkd,NounMkd,AdjectiveMkd,NumeralMkd,PhraseMkd,TextX,StructuralMkd,TenseX ** { - flags - coding = "UTF-8" ; -} \ No newline at end of file +} diff --git a/src/macedonian/NounMkd.gf b/src/macedonian/NounMkd.gf index af78a48b..6031dfcb 100644 --- a/src/macedonian/NounMkd.gf +++ b/src/macedonian/NounMkd.gf @@ -1,6 +1,4 @@ concrete NounMkd of Noun = CatMkd ** open Prelude,ResMkd in { - flags - coding = "UTF-8" ; lin AdjCN ap cn = { s = case ap.isPre of { True => \\s,n => ap.s ! s diff --git a/src/macedonian/SentenceMkd.gf b/src/macedonian/SentenceMkd.gf index ddd13e06..ab5134f0 100644 --- a/src/macedonian/SentenceMkd.gf +++ b/src/macedonian/SentenceMkd.gf @@ -1,6 +1,5 @@ concrete SentenceMkd of Sentence = CatMkd ** open Prelude,ResMkd in { - flags - coding = "UTF-8" ; + lin PredVP np vp = {present = \\a => np.s ++ vp.present ! a ! np.n ! np.p ; aorist = np.s ++ vp.aorist ! np.n ! np.p ; participle = {aorist = \\a => np.s ++ vp.participle.aorist ! a ! diff --git a/src/macedonian/VerbMkd.gf b/src/macedonian/VerbMkd.gf index 90a82b84..e1d08c96 100644 --- a/src/macedonian/VerbMkd.gf +++ b/src/macedonian/VerbMkd.gf @@ -1,6 +1,5 @@ concrete VerbMkd of Verb = CatMkd ** open Prelude,ResMkd in { - flags - coding = "UTF-8" ; + lin ComplSlash vps np = {present = \\a,n,p => vps.present ! a ! n ! p ++ np.s; From cc1168634b7f25d5980ad1d1f6bd7831c6130bab Mon Sep 17 00:00:00 2001 From: Krasimir Angelov Date: Thu, 19 Mar 2026 15:34:57 +0100 Subject: [PATCH 03/20] added VocNP --- src/macedonian/PhraseMkd.gf | 1 + 1 file changed, 1 insertion(+) diff --git a/src/macedonian/PhraseMkd.gf b/src/macedonian/PhraseMkd.gf index f77c4b05..5a2fa023 100644 --- a/src/macedonian/PhraseMkd.gf +++ b/src/macedonian/PhraseMkd.gf @@ -9,5 +9,6 @@ concrete PhraseMkd of Phrase = CatMkd ** open Prelude, ResMkd in { NoPConj = {s = []} ; NoVoc = {s = []} ; + VocNP np = {s = SOFT_BIND++"," ++ np.vocative} ; } From e8005bf0711fab11a35c21f891d398f090fef003 Mon Sep 17 00:00:00 2001 From: Krasimir Angelov Date: Thu, 19 Mar 2026 17:20:10 +0100 Subject: [PATCH 04/20] added SlashV2a --- src/macedonian/VerbMkd.gf | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/macedonian/VerbMkd.gf b/src/macedonian/VerbMkd.gf index e1d08c96..de97758e 100644 --- a/src/macedonian/VerbMkd.gf +++ b/src/macedonian/VerbMkd.gf @@ -8,4 +8,6 @@ concrete VerbMkd of Verb = CatMkd ** open Prelude,ResMkd in { imperative = \\a,n => vps.imperative ! a ! n ++ np.s; participle = {aorist = \\a,gn => vps.participle.aorist ! a ! gn ++ np.s; perfect = \\a => vps.participle.perfect ! a ++ np.s}} ; + lin SlashV2a v = v ; + } From eeca67e787cba73c736fad1f82eee3317c161ed9 Mon Sep 17 00:00:00 2001 From: Krasimir Angelov Date: Thu, 19 Mar 2026 17:45:00 +0100 Subject: [PATCH 05/20] add AdverbMkd --- src/macedonian/GrammarMkd.gf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/macedonian/GrammarMkd.gf b/src/macedonian/GrammarMkd.gf index 799812e4..3975b064 100644 --- a/src/macedonian/GrammarMkd.gf +++ b/src/macedonian/GrammarMkd.gf @@ -1,2 +1,2 @@ -concrete GrammarMkd of Grammar = VerbMkd,SentenceMkd,NounMkd,AdjectiveMkd,NumeralMkd,PhraseMkd,TextX,StructuralMkd,TenseX ** { +concrete GrammarMkd of Grammar = VerbMkd,SentenceMkd,NounMkd,AdverbMkd,AdjectiveMkd,NumeralMkd,PhraseMkd,TextX,StructuralMkd,TenseX ** { } From c8a4c28a51abffdbc643eff12503e91880675c0e Mon Sep 17 00:00:00 2001 From: Krasimir Angelov Date: Thu, 19 Mar 2026 17:48:52 +0100 Subject: [PATCH 06/20] added AdverbMkd --- src/macedonian/AdverbMkd.gf | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 src/macedonian/AdverbMkd.gf diff --git a/src/macedonian/AdverbMkd.gf b/src/macedonian/AdverbMkd.gf new file mode 100644 index 00000000..d1afe24d --- /dev/null +++ b/src/macedonian/AdverbMkd.gf @@ -0,0 +1,5 @@ +concrete AdverbMkd of Adverb = CatMkd ** open Prelude,ResMkd in { + flags + coding = "UTF-8" ; + lin PrepNP p np = {s = p.s ++ np.s} ; +} \ No newline at end of file From 9d18d316c55431b462bf44b8d1dd60fd2e0c698b Mon Sep 17 00:00:00 2001 From: Krasimir Angelov Date: Thu, 19 Mar 2026 17:49:58 +0100 Subject: [PATCH 07/20] remove the flags --- src/macedonian/AdverbMkd.gf | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/macedonian/AdverbMkd.gf b/src/macedonian/AdverbMkd.gf index d1afe24d..6c7d5c67 100644 --- a/src/macedonian/AdverbMkd.gf +++ b/src/macedonian/AdverbMkd.gf @@ -1,5 +1,3 @@ concrete AdverbMkd of Adverb = CatMkd ** open Prelude,ResMkd in { - flags - coding = "UTF-8" ; lin PrepNP p np = {s = p.s ++ np.s} ; -} \ No newline at end of file +} From 1d7b717866157319a8ffd2d2579c9dccf576ef24 Mon Sep 17 00:00:00 2001 From: Krasimir Angelov Date: Fri, 20 Mar 2026 08:04:26 +0100 Subject: [PATCH 08/20] added inherent parameters for pronouns --- src/macedonian/MorphoMkd.gf | 8 +++++--- src/macedonian/ResMkd.gf | 2 +- src/macedonian/StructuralMkd.gf | 20 ++++++++++---------- 3 files changed, 16 insertions(+), 14 deletions(-) diff --git a/src/macedonian/MorphoMkd.gf b/src/macedonian/MorphoMkd.gf index 59fab7a0..c1bb9b81 100644 --- a/src/macedonian/MorphoMkd.gf +++ b/src/macedonian/MorphoMkd.gf @@ -15376,8 +15376,8 @@ mkAdv base_1 = { s = base_1 } ; -mkPron : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Pron = - \f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15 -> +mkPron : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> GenNum -> Person -> Pron = + \f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,g,p -> { s = table { RSubj => f1 ; RObj Acc => f2 ; @@ -15404,7 +15404,9 @@ mkPron : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Pron = GPl => f14 } } ; - poss_clitic = f15 + poss_clitic = f15 ; + g = g ; + p = p ; } ; } diff --git a/src/macedonian/ResMkd.gf b/src/macedonian/ResMkd.gf index cce2ad05..797e57ef 100644 --- a/src/macedonian/ResMkd.gf +++ b/src/macedonian/ResMkd.gf @@ -153,7 +153,7 @@ oper mkAdv : Str -> Adv = param Case = Acc | Dat ; param Role = RSubj | RObj Case | RPrep ; -oper Pron = {s : Role => Str; clitic : Case => Str} ; +oper Pron = {s : Role => Str; clitic : Case => Str; g : GenNum; p : Person} ; genNum : Gender -> Number -> GenNum = \g,n -> case n of { diff --git a/src/macedonian/StructuralMkd.gf b/src/macedonian/StructuralMkd.gf index a51c1498..0db5d8da 100644 --- a/src/macedonian/StructuralMkd.gf +++ b/src/macedonian/StructuralMkd.gf @@ -1,13 +1,13 @@ -concrete StructuralMkd of Structural = CatMkd ** open MorphoMkd in { +concrete StructuralMkd of Structural = CatMkd ** open ResMkd,MorphoMkd in { -lin i_Pron = mkPron "јас" "мене" "ме" "мене" "ми" "мене" "мој" "мојот" "моја" "мојата" "мое" "моето" "мои" "моите" "ми" ; -lin youSg_Pron = mkPron "ти" "тебе" "те" "тебе" "ти" "тебе" "твој" "твојот" "твоја" "твојата" "твое" "твоето" "твои" "твоите" "ти" ; -lin he_Pron = mkPron "тој" "него" "го" "нему" "му" "него" "негов" "неговиот" "негова" "неговата" "негово" "неговото" "негови" "неговите" "му" ; -lin she_Pron = mkPron "таа" "неа" "ја" "нејзе" "ѝ" "неа" "нејзин" "нејзиниот" "нејзина" "нејзината" "нејзино" "нејзиното" "нејзини" "нејзините" "ѝ" ; -lin it_Pron = mkPron "тоа" "него" "го" "нему" "му" "него" "негов" "неговиот" "негова" "неговата" "негово" "неговото" "негови" "неговите" "му" ; -lin we_Pron = mkPron "ние" "нас" "нѐ" "нам" "ни" "нас" "наш" "нашиот" "наша" "нашата" "наше" "нашето" "наши" "нашите" "ни" ; -lin youPl_Pron = mkPron "вие" "вас" "ве" "вам" "ви" "вас" "ваш" "вашиот" "ваша" "вашата" "ваше" "вашето" "ваши" "вашите" "ви" ; -lin youPol_Pron = mkPron "вие" "вас" "ве" "вам" "ви" "вас" "ваш" "вашиот" "ваша" "вашата" "ваше" "вашето" "ваши" "вашите" "ви" ; -lin they_Pron = mkPron "тие" "нив" "ги" "ним" "им" "нив" "нивен" "нивниот" "нивна" "нивната" "нивно" "нивното" "нивни" "нивните" "им" ; +lin i_Pron = mkPron "јас" "мене" "ме" "мене" "ми" "мене" "мој" "мојот" "моја" "мојата" "мое" "моето" "мои" "моите" "ми" (GSg Masc) P1 ; +lin youSg_Pron = mkPron "ти" "тебе" "те" "тебе" "ти" "тебе" "твој" "твојот" "твоја" "твојата" "твое" "твоето" "твои" "твоите" "ти" (GSg Masc) P2 ; +lin he_Pron = mkPron "тој" "него" "го" "нему" "му" "него" "негов" "неговиот" "негова" "неговата" "негово" "неговото" "негови" "неговите" "му" (GSg Masc) P3 ; +lin she_Pron = mkPron "таа" "неа" "ја" "нејзе" "ѝ" "неа" "нејзин" "нејзиниот" "нејзина" "нејзината" "нејзино" "нејзиното" "нејзини" "нејзините" "ѝ" (GSg Masc) P3 ; +lin it_Pron = mkPron "тоа" "него" "го" "нему" "му" "него" "негов" "неговиот" "негова" "неговата" "негово" "неговото" "негови" "неговите" "му" (GSg Masc) P3 ; +lin we_Pron = mkPron "ние" "нас" "нѐ" "нам" "ни" "нас" "наш" "нашиот" "наша" "нашата" "наше" "нашето" "наши" "нашите" "ни" GPl P1 ; +lin youPl_Pron = mkPron "вие" "вас" "ве" "вам" "ви" "вас" "ваш" "вашиот" "ваша" "вашата" "ваше" "вашето" "ваши" "вашите" "ви" GPl P2 ; +lin youPol_Pron = mkPron "вие" "вас" "ве" "вам" "ви" "вас" "ваш" "вашиот" "ваша" "вашата" "ваше" "вашето" "ваши" "вашите" "ви" (GSg Masc) P2 ; +lin they_Pron = mkPron "тие" "нив" "ги" "ним" "им" "нив" "нивен" "нивниот" "нивна" "нивната" "нивно" "нивното" "нивни" "нивните" "им" GPl P3 ; } From 928889b2aa45bd6e0d6de00a8e2cb803efda57d6 Mon Sep 17 00:00:00 2001 From: Krasimir Angelov Date: Fri, 20 Mar 2026 08:14:10 +0100 Subject: [PATCH 09/20] change NP to contain GenNum instead of Number and Gender --- src/macedonian/CatMkd.gf | 2 +- src/macedonian/NounMkd.gf | 6 ++++-- src/macedonian/SentenceMkd.gf | 18 ++++++++++-------- 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/src/macedonian/CatMkd.gf b/src/macedonian/CatMkd.gf index 90ef43bb..cc72201a 100644 --- a/src/macedonian/CatMkd.gf +++ b/src/macedonian/CatMkd.gf @@ -24,7 +24,7 @@ linref V, VA, VV, VS, VQ, V2, V2S, V2Q, V3, V2A, V2V = linref A, A2 = \a -> a.s ! Indef ! GSg Masc ; lincat AP = {s : Species => GenNum => Str; isPre : Bool} ; -lincat NP = {s : Str; vocative: Str; n : Number; p : Person; g : Gender} ; +lincat NP = {s : Str; vocative: Str; g : GenNum; p : Person} ; lincat Num = {s : Str; n : Number} ; lincat Quant = {s : Str; sp : Species} ; lincat Det = {s : Str; n : Number; sp : Species} ; diff --git a/src/macedonian/NounMkd.gf b/src/macedonian/NounMkd.gf index 6031dfcb..649f719c 100644 --- a/src/macedonian/NounMkd.gf +++ b/src/macedonian/NounMkd.gf @@ -31,9 +31,11 @@ concrete NounMkd of Noun = CatMkd ** open Prelude,ResMkd in { lin DetCN det cn = { s = det.s ++ cn.s ! det.sp ! det.n; vocative = det.s ++ cn.vocative ! det.n; - n = det.n; + g = case det.n of { + Sg => GSg cn.g; + Pl => GPl + } ; p = P3; - g = cn.g } ; lin DetQuant det num = {s = det.s ++ num.s; n = num.n; sp = det.sp} ; diff --git a/src/macedonian/SentenceMkd.gf b/src/macedonian/SentenceMkd.gf index ab5134f0..4a6abca4 100644 --- a/src/macedonian/SentenceMkd.gf +++ b/src/macedonian/SentenceMkd.gf @@ -1,11 +1,13 @@ concrete SentenceMkd of Sentence = CatMkd ** open Prelude,ResMkd in { - lin PredVP np vp = {present = \\a => np.s ++ vp.present ! a ! np.n ! np.p ; - aorist = np.s ++ vp.aorist ! np.n ! np.p ; - participle = {aorist = \\a => np.s ++ vp.participle.aorist ! a ! - case np.n of { - Sg => GSg np.g; - Pl => GPl - }; - perfect = \\a => np.s ++ vp.participle.perfect ! a}} ; + lin PredVP np vp = + let n = case np.g of { + GSg _ => Sg ; + GPl => Pl + } + in {present = \\a => np.s ++ vp.present ! a ! n ! np.p ; + aorist = np.s ++ vp.aorist ! n ! np.p ; + participle = {aorist = \\a => np.s ++ vp.participle.aorist ! a ! np.g; + perfect = \\a => np.s ++ vp.participle.perfect ! a}} ; + } From 74848d304ecda6ba07c345554bd08e4e00ee1fb1 Mon Sep 17 00:00:00 2001 From: Krasimir Angelov Date: Fri, 20 Mar 2026 08:27:46 +0100 Subject: [PATCH 10/20] implement UsePron --- src/macedonian/AdverbMkd.gf | 2 +- src/macedonian/CatMkd.gf | 2 +- src/macedonian/NounMkd.gf | 3 ++- src/macedonian/SentenceMkd.gf | 8 ++++---- src/macedonian/VerbMkd.gf | 12 ++++++------ 5 files changed, 14 insertions(+), 13 deletions(-) diff --git a/src/macedonian/AdverbMkd.gf b/src/macedonian/AdverbMkd.gf index 6c7d5c67..847c703a 100644 --- a/src/macedonian/AdverbMkd.gf +++ b/src/macedonian/AdverbMkd.gf @@ -1,3 +1,3 @@ concrete AdverbMkd of Adverb = CatMkd ** open Prelude,ResMkd in { - lin PrepNP p np = {s = p.s ++ np.s} ; + lin PrepNP p np = {s = p.s ++ np.s ! RPrep} ; } diff --git a/src/macedonian/CatMkd.gf b/src/macedonian/CatMkd.gf index cc72201a..2a88da8c 100644 --- a/src/macedonian/CatMkd.gf +++ b/src/macedonian/CatMkd.gf @@ -24,7 +24,7 @@ linref V, VA, VV, VS, VQ, V2, V2S, V2Q, V3, V2A, V2V = linref A, A2 = \a -> a.s ! Indef ! GSg Masc ; lincat AP = {s : Species => GenNum => Str; isPre : Bool} ; -lincat NP = {s : Str; vocative: Str; g : GenNum; p : Person} ; +lincat NP = {s : Role => Str; vocative: Str; g : GenNum; p : Person} ; lincat Num = {s : Str; n : Number} ; lincat Quant = {s : Str; sp : Species} ; lincat Det = {s : Str; n : Number; sp : Species} ; diff --git a/src/macedonian/NounMkd.gf b/src/macedonian/NounMkd.gf index 649f719c..f79cca6f 100644 --- a/src/macedonian/NounMkd.gf +++ b/src/macedonian/NounMkd.gf @@ -29,7 +29,7 @@ concrete NounMkd of Noun = CatMkd ** open Prelude,ResMkd in { } ; lin DefArt = {s = []; sp = Def Unspecified} ; lin DetCN det cn = { - s = det.s ++ cn.s ! det.sp ! det.n; + s = \\r => det.s ++ cn.s ! det.sp ! det.n; vocative = det.s ++ cn.vocative ! det.n; g = case det.n of { Sg => GSg cn.g; @@ -43,4 +43,5 @@ concrete NounMkd of Noun = CatMkd ** open Prelude,ResMkd in { lin NumPl = {s = []; n = Pl} ; lin NumSg = {s = []; n = Sg} ; lin UseN s = s ; + lin UsePron p = p ** {vocative=p.s ! RSubj} ; } diff --git a/src/macedonian/SentenceMkd.gf b/src/macedonian/SentenceMkd.gf index 4a6abca4..77129147 100644 --- a/src/macedonian/SentenceMkd.gf +++ b/src/macedonian/SentenceMkd.gf @@ -5,9 +5,9 @@ concrete SentenceMkd of Sentence = CatMkd ** open Prelude,ResMkd in { GSg _ => Sg ; GPl => Pl } - in {present = \\a => np.s ++ vp.present ! a ! n ! np.p ; - aorist = np.s ++ vp.aorist ! n ! np.p ; - participle = {aorist = \\a => np.s ++ vp.participle.aorist ! a ! np.g; - perfect = \\a => np.s ++ vp.participle.perfect ! a}} ; + in {present = \\a => np.s ! RSubj ++ vp.present ! a ! n ! np.p ; + aorist = np.s ! RSubj ++ vp.aorist ! n ! np.p ; + participle = {aorist = \\a => np.s ! RSubj ++ vp.participle.aorist ! a ! np.g; + perfect = \\a => np.s ! RSubj ++ vp.participle.perfect ! a}} ; } diff --git a/src/macedonian/VerbMkd.gf b/src/macedonian/VerbMkd.gf index de97758e..5352a466 100644 --- a/src/macedonian/VerbMkd.gf +++ b/src/macedonian/VerbMkd.gf @@ -2,12 +2,12 @@ concrete VerbMkd of Verb = CatMkd ** open Prelude,ResMkd in { lin ComplSlash vps np = {present = \\a,n,p => vps.present ! a ! n ! p - ++ np.s; - aorist = \\n,p => vps.aorist ! n ! p ++ np.s; - imperfect = \\a,n,p => vps.imperfect ! a ! n ! p ++ np.s; - imperative = \\a,n => vps.imperative ! a ! n ++ np.s; - participle = {aorist = \\a,gn => vps.participle.aorist ! a ! gn ++ np.s; - perfect = \\a => vps.participle.perfect ! a ++ np.s}} ; + ++ np.s ! RObj Acc ; + aorist = \\n,p => vps.aorist ! n ! p ++ np.s ! RObj Acc; + imperfect = \\a,n,p => vps.imperfect ! a ! n ! p ++ np.s ! RObj Acc; + imperative = \\a,n => vps.imperative ! a ! n ++ np.s ! RObj Acc; + participle = {aorist = \\a,gn => vps.participle.aorist ! a ! gn ++ np.s ! RObj Acc; + perfect = \\a => vps.participle.perfect ! a ++ np.s ! RObj Acc}} ; lin SlashV2a v = v ; } From 28be4fb450ce127d25698ba0422d97b1cd75634a Mon Sep 17 00:00:00 2001 From: Inari Listenmaa Date: Wed, 1 Apr 2026 15:28:28 +0200 Subject: [PATCH 11/20] add existing modules to GrammarHye --- src/armenian/GrammarHye.gf | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/armenian/GrammarHye.gf b/src/armenian/GrammarHye.gf index e3abafd4..7bfc4c54 100644 --- a/src/armenian/GrammarHye.gf +++ b/src/armenian/GrammarHye.gf @@ -1,2 +1,6 @@ -concrete GrammarHye of Grammar = TenseX ** { +concrete GrammarHye of Grammar = + TenseX, + PhraseHye, + NounHye, + AdjectiveHye ** { } \ No newline at end of file From 4c55592af40d0e475358be72022303dab0ee624d Mon Sep 17 00:00:00 2001 From: Inari Listenmaa Date: Wed, 1 Apr 2026 15:41:22 +0200 Subject: [PATCH 12/20] =?UTF-8?q?make=20it=20not=20crash=20on=20mkPN=20"J?= =?UTF-8?q?=C3=B3sef=C3=ADna"=20feminine?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/icelandic/ParadigmsIce.gf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/icelandic/ParadigmsIce.gf b/src/icelandic/ParadigmsIce.gf index d888506d..fd3cad68 100644 --- a/src/icelandic/ParadigmsIce.gf +++ b/src/icelandic/ParadigmsIce.gf @@ -810,7 +810,7 @@ resource ParadigmsIce = open regPN : Str -> Gender -> PN = \name,g -> case of { => lin PN {s = caseList name (base + "a") (base + "a") (base + "a") ; g = Masc} ; - => lin PN {s = caseList name (base + "u") (base + "u") (base + "u") ; g = Masc} ; + => lin PN {s = caseList name (base + "u") (base + "u") (base + "u") ; g = g} ; => lin PN {s = caseList name base (base + "i") (base + "s") ; g = Masc} ; => lin PN {s = caseList name name name (name + "s") ; g = Masc} ; => lin PN {s = caseList name name (name + "i") (name + "ar") ; g = Masc} ; From 84e0e2c08ffb1f775da53e4b1b14c4f1307b2657 Mon Sep 17 00:00:00 2001 From: Inari Listenmaa Date: Wed, 1 Apr 2026 16:21:58 +0200 Subject: [PATCH 13/20] (Jpn) add GN, LN, SN + constructors --- src/japanese/CatJpn.gf | 2 +- src/japanese/ParadigmsJpn.gf | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/japanese/CatJpn.gf b/src/japanese/CatJpn.gf index fa667d1f..5e28fa6e 100644 --- a/src/japanese/CatJpn.gf +++ b/src/japanese/CatJpn.gf @@ -83,6 +83,6 @@ flags coding = utf8 ; -- counter : Str ; counterReplace : Bool ; counterTsu : Bool} ; N2 = Noun ** {prep : Str; object : Style => Str} ; N3 = Noun ** {prep1 : Str; prep2 : Str} ; - PN = PropNoun ; -- {s : Style => Str ; anim : Animateness} ; + PN,LN,GN,SN = PropNoun ; -- {s : Style => Str ; anim : Animateness} ; } diff --git a/src/japanese/ParadigmsJpn.gf b/src/japanese/ParadigmsJpn.gf index 707d8aa0..cbae3384 100644 --- a/src/japanese/ParadigmsJpn.gf +++ b/src/japanese/ParadigmsJpn.gf @@ -50,6 +50,10 @@ oper = \jon,jonsan -> lin PN (personPN jon jonsan) } ; + mkGN : Str -> GN = \s -> lin GN (regPN s); + mkLN : Str -> LN = \s -> lin LN (regPN s); + mkSN : Str -> SN = \s -> lin SN (regPN s); + mkPron = overload { mkPron : (kare : Str) -> (Pron1Sg : Bool) -> (anim : Animacy) -> Pron = \kare,b,a -> lin Pron (regPron kare b a) ; From 1e436d84a1d5a458fb29a42106e4c2943e6c39d3 Mon Sep 17 00:00:00 2001 From: Inari Listenmaa Date: Wed, 1 Apr 2026 16:26:14 +0200 Subject: [PATCH 14/20] (Ice) handle PNs that consist of multiple words --- src/icelandic/ParadigmsIce.gf | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/icelandic/ParadigmsIce.gf b/src/icelandic/ParadigmsIce.gf index fd3cad68..ad0711d7 100644 --- a/src/icelandic/ParadigmsIce.gf +++ b/src/icelandic/ParadigmsIce.gf @@ -249,11 +249,23 @@ resource ParadigmsIce = open in lin N (nForms2Noun nfs (nForms2Suffix nfs gend) gend) ; mkPN = overload { - -- this should be merged or swithced with N -> Gender - mkPN : Str -> Gender -> PN = - \name,g -> regPN name g ; + mkPN : Str -> Gender -> PN + = \name,g -> case name of { + head + " " + suf => suffixPN (regPN head g) suf ; -- fallback: use explicit constructors for more precision + _ => regPN name g } ; + mkPN : PN -> Str -> PN -- mkPN (mkPN "Annar" ) "í jólum" + = suffixPN ; + mkPN : Str -> PN -> PN -- mkPN "Sameinuðu" (mkPN "þjóðirnar") + = prefixPN + } ; + foreignPN : Str -> PN = \name -> lin PN {s = \\_ => name ; g = Masc} ; + prefixPN : Str -> PN -> PN = \prefix,pn -> pn ** { + s = \\c => prefix ++ pn.s ! c + } ; + suffixPN : PN -> Str -> PN = \pn,suffix -> pn ** { + s = \\c => pn.s ! c ++ suffix } ; oper mkLN : Str -> LN = \s -> lin LN {s=s} ; From e825d9223305ad3066e1ac5b276bcdedd2fcd15a Mon Sep 17 00:00:00 2001 From: Inari Listenmaa Date: Wed, 1 Apr 2026 16:27:14 +0200 Subject: [PATCH 15/20] =?UTF-8?q?(Fao)=20add=20particle=20to=20verbs=20e.g?= =?UTF-8?q?.=20"fara=20=C3=BAt"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/faroese/CatFao.gf | 1 + src/faroese/MorphoFao.gf | 336 ++++++++++++++++++++++++------------ src/faroese/ParadigmsFao.gf | 4 +- src/faroese/ResFao.gf | 5 +- 4 files changed, 231 insertions(+), 115 deletions(-) diff --git a/src/faroese/CatFao.gf b/src/faroese/CatFao.gf index 13e0382d..42134aff 100644 --- a/src/faroese/CatFao.gf +++ b/src/faroese/CatFao.gf @@ -16,4 +16,5 @@ lincat S = {s : Str} ; lincat LN,SN,GN,PN = {s : Str} ; +linref V = \v -> v.Nonfinite ++ v.particle ; } diff --git a/src/faroese/MorphoFao.gf b/src/faroese/MorphoFao.gf index 43a24bcc..2b453a38 100644 --- a/src/faroese/MorphoFao.gf +++ b/src/faroese/MorphoFao.gf @@ -8621,7 +8621,8 @@ mkV001 base = Participle = table { Pres => base_1+"andi" ; Past => base_1+"aður" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV001" } ; @@ -8653,7 +8654,8 @@ mkV002 base = Participle = table { Pres => "ei"+base_1+"andi" ; Past => "hi"+base_1+"in" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV002" } ; @@ -8685,7 +8687,8 @@ mkV003 base = Participle = table { Pres => "a"+base_1+"andi" ; Past => "i"+base_1+"in" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV003" } ; @@ -8717,7 +8720,8 @@ mkV004 base = Participle = table { Pres => "a"+base_1+"andi" ; Past => "a"+base_1+"in" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV004" } ; @@ -8749,7 +8753,8 @@ mkV005 base = Participle = table { Pres => nonExist ; Past => nonExist - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV005" } ; @@ -8781,7 +8786,8 @@ mkV006 base = Participle = table { Pres => base_1+"ðandi" ; Past => base_1+"ddur" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV006" } ; @@ -8813,7 +8819,8 @@ mkV007 base = Participle = table { Pres => "eigandi" ; Past => nonExist - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV007" } ; @@ -8845,7 +8852,8 @@ mkV008 base = Participle = table { Pres => base_1+"e"+base_2+"andi" ; Past => base_1+"o"+base_2+"in" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV008" } ; @@ -8877,7 +8885,8 @@ mkV009 base = Participle = table { Pres => base_1+"andi" ; Past => base_1+"dur" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV009" } ; @@ -8909,7 +8918,8 @@ mkV010 base = Participle = table { Pres => base_1+"dandi" ; Past => base_1+"dur" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV010" } ; @@ -8941,7 +8951,8 @@ mkV011 base = Participle = table { Pres => base_1+"e"+base_2+"jandi" ; Past => base_1+"a"+base_2+"dur" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV011" } ; @@ -8973,7 +8984,8 @@ mkV012 base = Participle = table { Pres => base_1+"i"+base_2+"jandi" ; Past => base_1+"i"+base_2+"in" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV012" } ; @@ -9005,7 +9017,8 @@ mkV013 base = Participle = table { Pres => base_1+"i"+base_2+"dandi" ; Past => base_1+"u"+base_2+"din" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV013" } ; @@ -9037,7 +9050,8 @@ mkV014 base = Participle = table { Pres => base_1+"í"+base_2+"andi" ; Past => base_1+"i"+base_2+"in" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV014" } ; @@ -9069,7 +9083,8 @@ mkV015 base = Participle = table { Pres => base_1+"jó"+base_2+"andi" ; Past => base_1+"o"+base_2+"in" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV015" } ; @@ -9101,7 +9116,8 @@ mkV016 base = Participle = table { Pres => base_1+"gjandi" ; Past => base_1+"dur" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV016" } ; @@ -9133,7 +9149,8 @@ mkV017 base = Participle = table { Pres => base_1+"e"+base_2+"nandi" ; Past => base_1+"u"+base_2+"nin" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV017" } ; @@ -9165,7 +9182,8 @@ mkV018 base = Participle = table { Pres => base_1+"e"+base_2+"andi" ; Past => base_1+"o"+base_2+"in" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV018" } ; @@ -9197,7 +9215,8 @@ mkV019 base = Participle = table { Pres => base_1+"ó"+base_2+"andi" ; Past => base_1+"o"+base_2+"in" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV019" } ; @@ -9229,7 +9248,8 @@ mkV020 base = Participle = table { Pres => base_1+"andi" ; Past => base_1+"tur" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV020" } ; @@ -9261,7 +9281,8 @@ mkV021 base = Participle = table { Pres => base_1+"andi" ; Past => base_1+"tur" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV021" } ; @@ -9293,7 +9314,8 @@ mkV022 base = Participle = table { Pres => base_1+"úgvandi" ; Past => base_1+"úgvin" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV022" } ; @@ -9325,7 +9347,8 @@ mkV023 base = Participle = table { Pres => base_1+"andi" ; Past => base_1+"tur" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV023" } ; @@ -9357,7 +9380,8 @@ mkV024 base = Participle = table { Pres => base_1+"e"+base_2+base_3+"andi" ; Past => base_1+"o"+base_2+base_3+"in" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV024" } ; @@ -9389,7 +9413,8 @@ mkV025 base = Participle = table { Pres => base_1+"ggjandi" ; Past => nonExist - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV025" } ; @@ -9421,7 +9446,8 @@ mkV026 base = Participle = table { Pres => base_1+"agandi" ; Past => base_1+"igin" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV026" } ; @@ -9453,7 +9479,8 @@ mkV027 base = Participle = table { Pres => base_1+"e"+base_2+"kandi" ; Past => base_1+"u"+base_2+"kin" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV027" } ; @@ -9485,7 +9512,8 @@ mkV028 base = Participle = table { Pres => base_1+"e"+base_2+"andi" ; Past => base_1+"i"+base_2+"in" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV028" } ; @@ -9517,7 +9545,8 @@ mkV029 base = Participle = table { Pres => base_1+"andi" ; Past => base_1+"aður" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV029" } ; @@ -9549,7 +9578,8 @@ mkV030 base = Participle = table { Pres => "ve"+base_1+"andi" ; Past => nonExist - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV030" } ; @@ -9581,7 +9611,8 @@ mkV031 base = Participle = table { Pres => base_1+"nandi" ; Past => base_1+"dur" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV031" } ; @@ -9613,7 +9644,8 @@ mkV032 base = Participle = table { Pres => base_1+"a"+base_2+"andi" ; Past => base_1+"a"+base_2+"in" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV032" } ; @@ -9645,7 +9677,8 @@ mkV033 base = Participle = table { Pres => base_1+"a"+base_2+"andi" ; Past => base_1+"a"+base_2+"in" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV033" } ; @@ -9677,7 +9710,8 @@ mkV034 base = Participle = table { Pres => nonExist ; Past => base_1+"ingin" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV034" } ; @@ -9709,7 +9743,8 @@ mkV035 base = Participle = table { Pres => base_1+"landi" ; Past => base_1+"dur" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV035" } ; @@ -9741,7 +9776,8 @@ mkV036 base = Participle = table { Pres => nonExist ; Past => nonExist - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV036" } ; @@ -9773,7 +9809,8 @@ mkV037 base = Participle = table { Pres => base_1+"andi" ; Past => base_1+"ur" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV037" } ; @@ -9805,7 +9842,8 @@ mkV038 base = Participle = table { Pres => base_1+"e"+base_2+"jandi" ; Past => base_1+"a"+base_2+"tur" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV038" } ; @@ -9837,7 +9875,8 @@ mkV039 base = Participle = table { Pres => base_1+"nandi" ; Past => base_1+"tur" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV039" } ; @@ -9869,7 +9908,8 @@ mkV040 base = Participle = table { Pres => base_1+"ú"+base_2+"vandi" ; Past => base_1+"o"+base_2+"in" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV040" } ; @@ -9901,7 +9941,8 @@ mkV041 base = Participle = table { Pres => base_1+"y"+base_2+"andi" ; Past => base_1+"u"+base_2+"tur" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV041" } ; @@ -9933,7 +9974,8 @@ mkV042 base = Participle = table { Pres => base_1+"e"+base_2+"jandi" ; Past => base_1+"a"+base_2+"dur" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV042" } ; @@ -9965,7 +10007,8 @@ mkV043 base = Participle = table { Pres => base_1+"andi" ; Past => base_1+"ddur" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV043" } ; @@ -9997,7 +10040,8 @@ mkV044 base = Participle = table { Pres => base_1+"ú"+base_2+"andi" ; Past => base_1+"o"+base_2+"in" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV044" } ; @@ -10029,7 +10073,8 @@ mkV045 base = Participle = table { Pres => base_1+"landi" ; Past => base_1+"tur" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV045" } ; @@ -10061,7 +10106,8 @@ mkV046 base = Participle = table { Pres => base_1+"a"+base_2+"andi" ; Past => base_1+"a"+base_2+"in" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV046" } ; @@ -10093,7 +10139,8 @@ mkV047 base = Participle = table { Pres => base_1+"angandi" ; Past => base_1+"ingin" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV047" } ; @@ -10125,7 +10172,8 @@ mkV048 base = Participle = table { Pres => base_1+"ja"+base_2+"dandi" ; Past => base_1+"o"+base_2+"din" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV048" } ; @@ -10157,7 +10205,8 @@ mkV049 base = Participle = table { Pres => base_1+"e"+base_2+"andi" ; Past => base_1+"jø"+base_2+"dur" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV049" } ; @@ -10189,7 +10238,8 @@ mkV050 base = Participle = table { Pres => base_1+"jó"+base_2+"andi" ; Past => base_1+"o"+base_2+"in" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV050" } ; @@ -10221,7 +10271,8 @@ mkV051 base = Participle = table { Pres => base_1+"e"+base_2+"pandi" ; Past => base_1+"o"+base_2+"pin" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV051" } ; @@ -10253,7 +10304,8 @@ mkV052 base = Participle = table { Pres => base_1+"y"+base_2+"jandi" ; Past => base_1+"u"+base_2+"dur" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV052" } ; @@ -10285,7 +10337,8 @@ mkV053 base = Participle = table { Pres => base_1+"á"+base_2+"andi" ; Past => base_1+"á"+base_2+"in" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV053" } ; @@ -10317,7 +10370,8 @@ mkV054 base = Participle = table { Pres => base_1+"a"+base_2+"andi" ; Past => base_1+"i"+base_2+"in" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV054" } ; @@ -10349,7 +10403,8 @@ mkV055 base = Participle = table { Pres => base_1+"ógvandi" ; Past => base_1+"ógvin" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV055" } ; @@ -10381,7 +10436,8 @@ mkV056 base = Participle = table { Pres => base_1+"a"+base_2+"dandi" ; Past => base_1+"i"+base_2+"din" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV056" } ; @@ -10413,7 +10469,8 @@ mkV057 base = Participle = table { Pres => base_1+"angandi" ; Past => base_1+"ingin" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV057" } ; @@ -10445,7 +10502,8 @@ mkV058 base = Participle = table { Pres => base_1+"a"+base_2+"andi" ; Past => base_1+"a"+base_2+"dur" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV058" } ; @@ -10477,7 +10535,8 @@ mkV059 base = Participle = table { Pres => base_1+"ei"+base_2+"jandi" ; Past => base_1+"o"+base_2+"dur" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV059" } ; @@ -10509,7 +10568,8 @@ mkV060 base = Participle = table { Pres => base_1+"vø"+base_2+"andi" ; Past => base_1+"o"+base_2+"in" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV060" } ; @@ -10541,7 +10601,8 @@ mkV061 base = Participle = table { Pres => base_1+"y"+base_2+"gjandi" ; Past => base_1+"u"+base_2+"dur" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV061" } ; @@ -10573,7 +10634,8 @@ mkV062 base = Participle = table { Pres => base_1+"o"+base_2+"andi" ; Past => base_1+"o"+base_2+"in" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV062" } ; @@ -10605,7 +10667,8 @@ mkV063 base = Participle = table { Pres => base_1+"pandi" ; Past => base_1+"tur" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV063" } ; @@ -10637,7 +10700,8 @@ mkV064 base = Participle = table { Pres => base_1+"úgvandi" ; Past => base_1+"ovin" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV064" } ; @@ -10669,7 +10733,8 @@ mkV065 base = Participle = table { Pres => nonExist ; Past => nonExist - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV065" } ; @@ -10701,7 +10766,8 @@ mkV066 base = Participle = table { Pres => base_1+"ø"+base_2+"andi" ; Past => base_1+"ø"+base_2+"in" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV066" } ; @@ -10733,7 +10799,8 @@ mkV067 base = Participle = table { Pres => base_1+"sandi" ; Past => base_1+"tur" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV067" } ; @@ -10765,7 +10832,8 @@ mkV068 base = Participle = table { Pres => base_1+"andi" ; Past => base_1+"in" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV068" } ; @@ -10797,7 +10865,8 @@ mkV069 base = Participle = table { Pres => base_1+"e"+base_2+"gjandi" ; Past => base_1+"a"+base_2+"dur" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV069" } ; @@ -10829,7 +10898,8 @@ mkV070 base = Participle = table { Pres => base_1+"iggjandi" ; Past => base_1+"igin" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV070" } ; @@ -10861,7 +10931,8 @@ mkV071 base = Participle = table { Pres => base_1+"e"+base_2+"andi" ; Past => base_1+"i"+base_2+"in" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV071" } ; @@ -10893,7 +10964,8 @@ mkV072 base = Participle = table { Pres => base_1+"a"+base_2+"andi" ; Past => base_1+"a"+base_2+"in" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV072" } ; @@ -10925,7 +10997,8 @@ mkV073 base = Participle = table { Pres => base_1+"á"+base_2+"andi" ; Past => base_1+"á"+base_2+"in" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV073" } ; @@ -10957,7 +11030,8 @@ mkV074 base = Participle = table { Pres => base_1+"ey"+base_2+"andi" ; Past => base_1+"o"+base_2+"in" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV074" } ; @@ -10989,7 +11063,8 @@ mkV075 base = Participle = table { Pres => nonExist ; Past => nonExist - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV075" } ; @@ -11021,7 +11096,8 @@ mkV076 base = Participle = table { Pres => nonExist ; Past => nonExist - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV076" } ; @@ -11053,7 +11129,8 @@ mkV077 base = Participle = table { Pres => base_1+"jandi" ; Past => base_1+"tur" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV077" } ; @@ -11085,7 +11162,8 @@ mkV078 base = Participle = table { Pres => base_1+"jandi" ; Past => base_1+"dur" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV078" } ; @@ -11117,7 +11195,8 @@ mkV079 base = Participle = table { Pres => base_1+"ðandi" ; Past => base_1+"dur" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV079" } ; @@ -11149,7 +11228,8 @@ mkV080 base = Participle = table { Pres => base_1+"áandi" ; Past => base_1+"áddur" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV080" } ; @@ -11181,7 +11261,8 @@ mkV081 base = Participle = table { Pres => base_1+"áðandi" ; Past => base_1+"áðin" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV081" } ; @@ -11213,7 +11294,8 @@ mkV082 base = Participle = table { Pres => nonExist ; Past => nonExist - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV082" } ; @@ -11245,7 +11327,8 @@ mkV083 base = Participle = table { Pres => base_1+"ø"+base_2+"kandi" ; Past => base_1+"o"+base_2+"kin" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV083" } ; @@ -11277,7 +11360,8 @@ mkV084 base = Participle = table { Pres => base_1+"íggjandi" ; Past => base_1+"æddur" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV084" } ; @@ -11309,7 +11393,8 @@ mkV085 base = Participle = table { Pres => base_1+"kjandi" ; Past => base_1+"tur" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV085" } ; @@ -11341,7 +11426,8 @@ mkV086 base = Participle = table { Pres => base_1+"i"+base_2+"andi" ; Past => base_1+"a"+base_2+"dur" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV086" } ; @@ -11373,7 +11459,8 @@ mkV087 base = Participle = table { Pres => base_1+"i"+base_2+"andi" ; Past => base_1+"i"+base_2+"in" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV087" } ; @@ -11405,7 +11492,8 @@ mkV088 base = Participle = table { Pres => nonExist ; Past => nonExist - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV088" } ; @@ -11437,7 +11525,8 @@ mkV089 base = Participle = table { Pres => base_1+"ei"+base_2+"jandi" ; Past => base_1+"o"+base_2+"tur" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV089" } ; @@ -11469,7 +11558,8 @@ mkV090 base = Participle = table { Pres => base_1+"jandi" ; Past => base_1+"dur" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV090" } ; @@ -11501,7 +11591,8 @@ mkV091 base = Participle = table { Pres => base_1+"jó"+base_2+"andi" ; Past => base_1+"o"+base_2+"in" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV091" } ; @@ -11533,7 +11624,8 @@ mkV092 base = Participle = table { Pres => base_1+"áandi" ; Past => base_1+"igin" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV092" } ; @@ -11565,7 +11657,8 @@ mkV093 base = Participle = table { Pres => base_1+"y"+base_2+"jandi" ; Past => base_1+"u"+base_2+"dur" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV093" } ; @@ -11597,7 +11690,8 @@ mkV094 base = Participle = table { Pres => base_1+"i"+base_2+"nandi" ; Past => base_1+"u"+base_2+"nin" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV094" } ; @@ -11629,7 +11723,8 @@ mkV095 base = Participle = table { Pres => base_1+"andandi" ; Past => nonExist - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV095" } ; @@ -11661,7 +11756,8 @@ mkV096 base = Participle = table { Pres => base_1+"ei"+base_2+"jandi" ; Past => base_1+"o"+base_2+"tur" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV096" } ; @@ -11693,7 +11789,8 @@ mkV097 base = Participle = table { Pres => base_1+"ingandi" ; Past => base_1+"ungin" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV097" } ; @@ -11725,7 +11822,8 @@ mkV098 base = Participle = table { Pres => base_1+"ja"+base_2+"andi" ; Past => base_1+"o"+base_2+"in" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV098" } ; @@ -11757,7 +11855,8 @@ mkV099 base = Participle = table { Pres => base_1+"o"+base_2+"andi" ; Past => nonExist - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV099" } ; @@ -11789,7 +11888,8 @@ mkV100 base = Participle = table { Pres => base_1+"í"+base_2+"jandi" ; Past => base_1+"i"+base_2+"in" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV100" } ; @@ -11821,7 +11921,8 @@ mkV101 base = Participle = table { Pres => base_1+"i"+base_2+"jandi" ; Past => nonExist - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV101" } ; @@ -11853,7 +11954,8 @@ mkV102 base = Participle = table { Pres => base_1+"jandi" ; Past => base_1+"dur" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV102" } ; @@ -11885,7 +11987,8 @@ mkV103 base = Participle = table { Pres => base_1+"ø"+base_2+"jandi" ; Past => base_1+"o"+base_2+"in" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV103" } ; @@ -11917,7 +12020,8 @@ mkV104 base = Participle = table { Pres => base_1+"y"+base_2+"jandi" ; Past => base_1+"u"+base_2+"in" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV104" } ; @@ -11949,7 +12053,8 @@ mkV105 base = Participle = table { Pres => base_1+"i"+base_2+"andi" ; Past => base_1+"a"+base_2+"dur" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV105" } ; @@ -11981,7 +12086,8 @@ mkV106 base = Participle = table { Pres => base_1+"e"+base_2+"fandi" ; Past => base_1+"o"+base_2+"fin" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV106" } ; @@ -12013,7 +12119,8 @@ mkV107 base = Participle = table { Pres => base_1+"a"+base_2+"andi" ; Past => base_1+"a"+base_2+"in" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV107" } ; @@ -12045,7 +12152,8 @@ mkV108 base = Participle = table { Pres => base_1+"e"+base_2+"andi" ; Past => base_1+"o"+base_2+"in" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV108" } ; @@ -12077,7 +12185,8 @@ mkV109 base = Participle = table { Pres => nonExist ; Past => nonExist - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV109" } ; @@ -12109,7 +12218,8 @@ mkV110 base = Participle = table { Pres => "v"+base_1+"rð" ; Past => "v"+base_1+"rð" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV110" } ; @@ -12141,7 +12251,8 @@ mkV111 base = Participle = table { Pres => base_1+"e"+base_2+"andi" ; Past => base_1+"o"+base_2+"in" - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV111" } ; @@ -12173,7 +12284,8 @@ mkV112 base = Participle = table { Pres => nonExist ; Past => nonExist - } + } ; + particle = [] }; _ => error "Can't apply paradigm mkV112" } ; diff --git a/src/faroese/ParadigmsFao.gf b/src/faroese/ParadigmsFao.gf index 90cb2364..1bb0fb14 100644 --- a/src/faroese/ParadigmsFao.gf +++ b/src/faroese/ParadigmsFao.gf @@ -501,7 +501,9 @@ oper mkV = overload { mkV : Str -> V = regV; -- Nonfinite - mkV : Str -> Str -> V = reg2V -- Nonfinite Indicative;Pres;('PSg', P2) + mkV : Str -> Str -> V = reg2V ; -- Nonfinite Indicative;Pres;('PSg', P2) + mkV : V -> Str -> V -- particle verb + = \v,p -> v ** {particle = p} } ; mkVV : V -> VV = \v -> lin VV v ; diff --git a/src/faroese/ResFao.gf b/src/faroese/ResFao.gf index feb23444..aca5c9b2 100644 --- a/src/faroese/ResFao.gf +++ b/src/faroese/ResFao.gf @@ -92,7 +92,7 @@ oper mkAdj : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Adj = param Tense = Past | Pres ; param PersNum = PSg Person | PPl ; param Person = P1 | P3 | P2 ; -oper Verb = {Converb: Str; Imperative_Jussive: Number => Str; Indicative: Tense => PersNum => Str; Nonfinite: Str; Participle: Tense => Str} ; -- 596 +oper Verb = {Converb: Str; Imperative_Jussive: Number => Str; Indicative: Tense => PersNum => Str; Nonfinite: Str; Participle: Tense => Str ; particle : Str} ; -- 596 oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Verb = \f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14 -> { Converb = f1 ; @@ -118,7 +118,8 @@ oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Verb = Participle = table { Pres => f13 ; Past => f14 - } + } ; + particle = [] } ; From f0abf5deffc628515f696fc832d5a72e6bfdd709 Mon Sep 17 00:00:00 2001 From: Krasimir Angelov Date: Fri, 3 Apr 2026 16:55:51 +0200 Subject: [PATCH 16/20] added compoundV --- src/macedonian/ParadigmsMkd.gf | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/macedonian/ParadigmsMkd.gf b/src/macedonian/ParadigmsMkd.gf index dd54e077..4d41f865 100644 --- a/src/macedonian/ParadigmsMkd.gf +++ b/src/macedonian/ParadigmsMkd.gf @@ -1086,6 +1086,23 @@ dualV : V -> V -> V = \impf,perf -> lin V isRefl = impf.isRefl } ; +compoundV = overload { + compoundV : V -> Str -> V = \v,s -> lin V { + present = \\a,n,p => v.present ! a ! n ! p ++ s ; + aorist = \\n,p => v.aorist ! n ! p ++ s ; + imperfect = \\a,n,p => v.imperfect ! a ! n ! p ++ s ; + imperative = \\a,n => v.imperative ! a ! n ++ s ; + participle = { aorist = \\a,gn => v.participle.aorist ! a ! gn ++ s ; + imperfect = \\gn => v.participle.imperfect ! gn ++ s ; + perfect = \\a => v.participle.perfect ! a ++ s ; + adjectival = \\a => v.participle.adjectival ! a ++ s ; + adverbial = v.participle.adverbial + } ; + noun_from_verb = v.noun_from_verb ++ s ; + isRefl = v.isRefl + } +} ; + mkV2 = overload { mkV2 : V -> V2 = \v -> lin V2 v ** {c2=noPrep} ; mkV2 : V -> Prep -> V2 = \v,p -> lin V2 v ** {c2=p} ; From deb9d40b7efa93777c5083cec0443269eee25a1d Mon Sep 17 00:00:00 2001 From: Krasimir Angelov Date: Sat, 4 Apr 2026 11:18:04 +0200 Subject: [PATCH 17/20] placeholders for morphological functions --- src/macedonian/CatMkd.gf | 2 ++ src/macedonian/ParadigmsMkd.gf | 15 +++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/src/macedonian/CatMkd.gf b/src/macedonian/CatMkd.gf index 2a88da8c..5622dd28 100644 --- a/src/macedonian/CatMkd.gf +++ b/src/macedonian/CatMkd.gf @@ -45,5 +45,7 @@ lincat VPSlash = {present : Aspect => Number => Person => Str; lincat Cl = {present : Aspect => Str; aorist : Str; participle : {aorist : Aspect => Str; perfect : Aspect => Str}} ; +lincat IP = {s : Str} ; +lincat Subj = {s : Str} ; } diff --git a/src/macedonian/ParadigmsMkd.gf b/src/macedonian/ParadigmsMkd.gf index 4d41f865..57edae21 100644 --- a/src/macedonian/ParadigmsMkd.gf +++ b/src/macedonian/ParadigmsMkd.gf @@ -1159,4 +1159,19 @@ mkVoc : Str -> Voc = \s -> lin Voc {s=s} ; mkPrep : Str -> Prep = \s -> lin Prep {s=s} ; noPrep : Prep = lin Prep {s=""} ; +mkIP : Str -> IP = \s -> lin IP {s=s} ; +mkIAdv : Str -> IAdv = \s -> lin IAdv {s=s} ; +mkIQuant : Str -> IQuant = \s -> lin IQuant {s=s} ; +mkIDet : Str -> IDet = \s -> lin IDet {s=s} ; +mkMU : Str -> MU = \s -> lin MU {s=s; isPre = False} ; +mkSubj : Str -> Subj = \s -> lin Subj {s=s} ; +mkQuant : Str -> Quant = \s -> lin Quant {s=s; sp=Indef} ; +mkDet : Str -> Det = \s -> lin Det {s=s; n=Sg; sp=Indef} ; +mkConj : Str -> Conj = \s -> lin Conj {s=s} ; +mkPConj : Str -> PConj = \s -> lin PConj {s=s} ; +mkPredet : Str -> Predet = \s -> lin Predet {s=s} ; +mkCAdv : Str -> CAdv = \s -> lin CAdv {s=s; p=""} ; +mkCard : Str -> Card = \s -> lin Card {s=s} ; +mkACard : Str -> ACard = \s -> lin ACard {s=s} ; + } From 621cfd8b43520010fd1a5750ec158d1352803daa Mon Sep 17 00:00:00 2001 From: Krasimir Angelov Date: Sun, 5 Apr 2026 11:39:43 +0200 Subject: [PATCH 18/20] support for medial verbs --- src/macedonian/CatMkd.gf | 9 +- src/macedonian/MorphoMkd.gf | 196 ++++++++++++++++----------------- src/macedonian/ParadigmsMkd.gf | 8 +- src/macedonian/ResMkd.gf | 5 +- 4 files changed, 111 insertions(+), 107 deletions(-) diff --git a/src/macedonian/CatMkd.gf b/src/macedonian/CatMkd.gf index 5622dd28..84393c77 100644 --- a/src/macedonian/CatMkd.gf +++ b/src/macedonian/CatMkd.gf @@ -17,9 +17,10 @@ lincat Digits = {s : Str; n : Number; tail : DTail} ; linref N,N2,N3 = \n -> n.s ! Indef ! Sg ; linref V, VA, VV, VS, VQ, V2, V2S, V2Q, V3, V2A, V2V = \v -> v.present ! Imperfective ! Sg ! P3 ++ - case v.isRefl of { - True => "се" ; - False => [] + case v.vtype of { + VNormal => [] ; + VMedial Acc => "се" ; + VMedial Dat => "си" } ; linref A, A2 = \a -> a.s ! Indef ! GSg Masc ; @@ -41,7 +42,7 @@ lincat VPSlash = {present : Aspect => Number => Person => Str; participle : {aorist : Aspect => GenNum => Str; imperfect : GenNum => Str; perfect : Aspect => Str; adjectival : Aspect => Str; adverbial : Str}; - noun_from_verb : Str; isRefl : Bool; c2 : Compl} ; + noun_from_verb : Str; vtype : VType; c2 : Compl} ; lincat Cl = {present : Aspect => Str; aorist : Str; participle : {aorist : Aspect => Str; perfect : Aspect => Str}} ; diff --git a/src/macedonian/MorphoMkd.gf b/src/macedonian/MorphoMkd.gf index c1bb9b81..7b4db928 100644 --- a/src/macedonian/MorphoMkd.gf +++ b/src/macedonian/MorphoMkd.gf @@ -6875,7 +6875,7 @@ mkV001 base_1 = adverbial = base_1+"јќи" } ; noun_from_verb = base_1+"ње" ; - isRefl = False + vtype = VNormal } ; mkV002 : Str -> V ; @@ -6942,7 +6942,7 @@ mkV002 base_1 = adverbial = base_1+"јќи" } ; noun_from_verb = base_1+"ње" ; - isRefl = False + vtype = VNormal } ; mkV003 : Str -> V ; @@ -7010,7 +7010,7 @@ mkV003 base = adverbial = base_1+"ејќи" } ; noun_from_verb = base_1+"ење" ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV003" } ; @@ -7080,7 +7080,7 @@ mkV004 base = adverbial = base_1+"ејќи" } ; noun_from_verb = base_1+"ење" ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV004" } ; @@ -7150,7 +7150,7 @@ mkV005 base = adverbial = base_1+"ејќи" --guessed } ; noun_from_verb = base_1+"ење" ; --guessed - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV005" } ; @@ -7220,7 +7220,7 @@ mkV006 base = adverbial = base_1+"ејќи" } ; noun_from_verb = base_1+"ење" ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV006" } ; @@ -7290,7 +7290,7 @@ mkV007 base = adverbial = base_1+"ејќи" --guessed } ; noun_from_verb = base_1+"ење" ; --guessed - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV007" } ; @@ -7360,7 +7360,7 @@ mkV008 base = adverbial = base_1+"ејќи" --guessed } ; noun_from_verb = base_1+"ење" ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV008" } ; @@ -7429,7 +7429,7 @@ mkV009 base_1 = adverbial = base_1+"јќи" --guessed } ; noun_from_verb = base_1+"ње" ; --guessed - isRefl = False + vtype = VNormal } ; mkV010 : Str -> V ; @@ -7497,7 +7497,7 @@ mkV010 base = adverbial = base_1+"ејќи" } ; noun_from_verb = base_1+"ење" ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV010" } ; @@ -7567,7 +7567,7 @@ mkV011 base = adverbial = base_1+"ејќи" } ; noun_from_verb = base_1+"ење" ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV011" } ; @@ -7637,7 +7637,7 @@ mkV012 base = adverbial = base_1+"ејќи" } ; noun_from_verb = base_1+"ење" ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV012" } ; @@ -7706,7 +7706,7 @@ mkV013 base_1 = adverbial = base_1+"јќи" } ; noun_from_verb = base_1+"ње" ; - isRefl = False + vtype = VNormal } ; mkV014 : Str -> V ; @@ -7774,7 +7774,7 @@ mkV014 base = adverbial = nonExist } ; noun_from_verb = base_1+"ење" ; --guessed - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV014" } ; @@ -7844,7 +7844,7 @@ mkV015 base = adverbial = base_1+"ејќи" --guessed } ; noun_from_verb = base_1+"ење" ; --guessed - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV015" } ; @@ -7914,7 +7914,7 @@ mkV016 base = adverbial = base_1+"ејќи" --guessed } ; noun_from_verb = base_1+"ење" ; --guessed - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV016" } ; @@ -7983,7 +7983,7 @@ mkV017 base_1 = adverbial = base_1+"јќи" --guessed } ; noun_from_verb = base_1+"ње" ; --guessed - isRefl = False + vtype = VNormal } ; mkV018 : Str -> V ; @@ -8051,7 +8051,7 @@ mkV018 base = adverbial = nonExist } ; noun_from_verb = nonExist ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV018" } ; @@ -8121,7 +8121,7 @@ mkV019 base = adverbial = nonExist } ; noun_from_verb = nonExist ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV019" } ; @@ -8191,7 +8191,7 @@ mkV020 base = adverbial = base_1+"ејќи" } ; noun_from_verb = base_1+"ење" ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV020" } ; @@ -8261,7 +8261,7 @@ mkV021 base = adverbial = base_1+"ејќи" --guessed } ; noun_from_verb = base_1+"ење" ; --guessed - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV021" } ; @@ -8331,7 +8331,7 @@ mkV022 base = adverbial = base_1+"ејќи" } ; noun_from_verb = base_1+"ење" ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV022" } ; @@ -8401,7 +8401,7 @@ mkV023 base = adverbial = base_1+"ејќи" } ; noun_from_verb = base_1+"ење" ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV023" } ; @@ -8471,7 +8471,7 @@ mkV024 base = adverbial = nonExist } ; noun_from_verb = base_1+"ење" ; --guessed - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV024" } ; @@ -8541,7 +8541,7 @@ mkV025 base = adverbial = nonExist } ; noun_from_verb = nonExist ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV025" } ; @@ -8611,7 +8611,7 @@ mkV026 base = adverbial = nonExist } ; noun_from_verb = nonExist ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV026" } ; @@ -8681,7 +8681,7 @@ mkV027 base = adverbial = nonExist } ; noun_from_verb = nonExist ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV027" } ; @@ -8751,7 +8751,7 @@ mkV028 base = adverbial = nonExist } ; noun_from_verb = base_1+"ење" ; --guessed - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV028" } ; @@ -8821,7 +8821,7 @@ mkV029 base = adverbial = nonExist } ; noun_from_verb = nonExist ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV029" } ; @@ -8891,7 +8891,7 @@ mkV030 base = adverbial = nonExist } ; noun_from_verb = nonExist ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV030" } ; @@ -8961,7 +8961,7 @@ mkV031 base = adverbial = nonExist } ; noun_from_verb = base_1+"ење" ; --guessed - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV031" } ; @@ -9031,7 +9031,7 @@ mkV032 base = adverbial = base_1+"ејќи" } ; noun_from_verb = base_1+"ење" ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV032" } ; @@ -9101,7 +9101,7 @@ mkV033 base = adverbial = base_1+"ејќи" --guessed } ; noun_from_verb = base_1+"ење" ; --guessed - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV033" } ; @@ -9171,7 +9171,7 @@ mkV034 base = adverbial = nonExist } ; noun_from_verb = base_1+"ење" ; --guessed - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV034" } ; @@ -9241,7 +9241,7 @@ mkV035 base = adverbial = base_1+"ејќи" } ; noun_from_verb = base_1+"ење" ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV035" } ; @@ -9311,7 +9311,7 @@ mkV036 base = adverbial = base_1+"ејќи" --guessed } ; noun_from_verb = base_1+"ење" ; --guessed - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV036" } ; @@ -9381,7 +9381,7 @@ mkV037 base = adverbial = nonExist } ; noun_from_verb = nonExist ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV037" } ; @@ -9451,7 +9451,7 @@ mkV038 base = adverbial = nonExist } ; noun_from_verb = nonExist ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV038" } ; @@ -9521,7 +9521,7 @@ mkV039 base = adverbial = nonExist } ; noun_from_verb = nonExist ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV039" } ; @@ -9591,7 +9591,7 @@ mkV040 base = adverbial = base_1+"ејќи" } ; noun_from_verb = base_1+"ење" ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV040" } ; @@ -9661,7 +9661,7 @@ mkV041 base = adverbial = nonExist } ; noun_from_verb = nonExist ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV041" } ; @@ -9731,7 +9731,7 @@ mkV042 base = adverbial = nonExist } ; noun_from_verb = nonExist ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV042" } ; @@ -9801,7 +9801,7 @@ mkV043 base = adverbial = base_1+"ејќи" --guessed } ; noun_from_verb = base_1+"ење" ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV043" } ; @@ -9870,7 +9870,7 @@ mkV044 base_1 = adverbial = base_1+"јќи" } ; noun_from_verb = base_1+"ње" ; - isRefl = False + vtype = VNormal } ; mkV045 : Str -> V ; @@ -9938,7 +9938,7 @@ mkV045 base = adverbial = nonExist } ; noun_from_verb = nonExist ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV045" } ; @@ -10008,7 +10008,7 @@ mkV046 base = adverbial = base_1+"ејќи" } ; noun_from_verb = base_1+"ење" ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV046" } ; @@ -10078,7 +10078,7 @@ mkV047 base = adverbial = base_1+"ејќи" --guessed } ; noun_from_verb = base_1+"ење" ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV047" } ; @@ -10148,7 +10148,7 @@ mkV048 base = adverbial = base_1+"ејќи" } ; noun_from_verb = base_1+"ење" ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV048" } ; @@ -10218,7 +10218,7 @@ mkV049 base = adverbial = base_1+"ејќи" } ; noun_from_verb = base_1+"ење" ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV049" } ; @@ -10288,7 +10288,7 @@ mkV050 base = adverbial = base_1+"и"+base_2+"јќи" } ; noun_from_verb = base_1+"и"+base_2+"ње" ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV050" } ; @@ -10357,7 +10357,7 @@ mkV051 base_1 = adverbial = base_1+"јќи" } ; noun_from_verb = base_1+"ње" ; - isRefl = False + vtype = VNormal } ; mkV052 : Str -> V ; @@ -10425,7 +10425,7 @@ mkV052 base = adverbial = nonExist } ; noun_from_verb = nonExist ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV052" } ; @@ -10495,7 +10495,7 @@ mkV053 base = adverbial = base_1+"ејќи" --guessed } ; noun_from_verb = base_1+"ење" ; --guessed - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV053" } ; @@ -10565,7 +10565,7 @@ mkV054 base = adverbial = nonExist } ; noun_from_verb = nonExist ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV054" } ; @@ -10634,7 +10634,7 @@ mkV055 base_1 = adverbial = nonExist } ; noun_from_verb = base_1+"ње" ; --guessed - isRefl = False + vtype = VNormal } ; mkV056 : Str -> V ; @@ -10702,7 +10702,7 @@ mkV056 base = adverbial = nonExist } ; noun_from_verb = nonExist ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV056" } ; @@ -10772,7 +10772,7 @@ mkV057 base = adverbial = base_1+"ејќи" } ; noun_from_verb = base_1+"ење" ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV057" } ; @@ -10842,7 +10842,7 @@ mkV058 base = adverbial = nonExist } ; noun_from_verb = nonExist ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV058" } ; @@ -10912,7 +10912,7 @@ mkV059 base = adverbial = nonExist } ; noun_from_verb = nonExist ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV059" } ; @@ -10982,7 +10982,7 @@ mkV060 base = adverbial = nonExist } ; noun_from_verb = nonExist ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV060" } ; @@ -11052,7 +11052,7 @@ mkV061 base = adverbial = nonExist } ; noun_from_verb = nonExist ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV061" } ; @@ -11122,7 +11122,7 @@ mkV062 base = adverbial = nonExist } ; noun_from_verb = nonExist ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV062" } ; @@ -11192,7 +11192,7 @@ mkV063 base = adverbial = nonExist } ; noun_from_verb = nonExist ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV063" } ; @@ -11262,7 +11262,7 @@ mkV064 base = adverbial = nonExist } ; noun_from_verb = nonExist ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV064" } ; @@ -11332,7 +11332,7 @@ mkV065 base = adverbial = nonExist } ; noun_from_verb = nonExist ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV065" } ; @@ -11402,7 +11402,7 @@ mkV066 base = adverbial = base_1+"ејќи" } ; noun_from_verb = base_1+"ење" ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV066" } ; @@ -11472,7 +11472,7 @@ mkV067 base = adverbial = nonExist } ; noun_from_verb = nonExist ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV067" } ; @@ -11542,7 +11542,7 @@ mkV068 base = adverbial = nonExist } ; noun_from_verb = nonExist ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV068" } ; @@ -11612,7 +11612,7 @@ mkV069 base = adverbial = nonExist } ; noun_from_verb = nonExist ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV069" } ; @@ -11682,7 +11682,7 @@ mkV070 base = adverbial = nonExist } ; noun_from_verb = nonExist ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV070" } ; @@ -11752,7 +11752,7 @@ mkV071 base = adverbial = nonExist } ; noun_from_verb = nonExist ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV071" } ; @@ -11822,7 +11822,7 @@ mkV072 base = adverbial = nonExist } ; noun_from_verb = nonExist ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV072" } ; @@ -11892,7 +11892,7 @@ mkV073 base = adverbial = nonExist } ; noun_from_verb = nonExist ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV073" } ; @@ -11962,7 +11962,7 @@ mkV074 base = adverbial = nonExist } ; noun_from_verb = nonExist ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV074" } ; @@ -12032,7 +12032,7 @@ mkV075 base = adverbial = nonExist } ; noun_from_verb = nonExist ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV075" } ; @@ -12102,7 +12102,7 @@ mkV076 base = adverbial = nonExist } ; noun_from_verb = nonExist ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV076" } ; @@ -12172,7 +12172,7 @@ mkV077 base = adverbial = nonExist } ; noun_from_verb = nonExist ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV077" } ; @@ -12242,7 +12242,7 @@ mkV078 base = adverbial = nonExist } ; noun_from_verb = nonExist ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV078" } ; @@ -12312,7 +12312,7 @@ mkV079 base = adverbial = nonExist } ; noun_from_verb = nonExist ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV079" } ; @@ -12382,7 +12382,7 @@ mkV080 base = adverbial = nonExist } ; noun_from_verb = nonExist ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV080" } ; @@ -12452,7 +12452,7 @@ mkV081 base = adverbial = nonExist } ; noun_from_verb = nonExist ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV081" } ; @@ -12522,7 +12522,7 @@ mkV082 base = adverbial = nonExist } ; noun_from_verb = nonExist ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV082" } ; @@ -12592,7 +12592,7 @@ mkV083 base = adverbial = nonExist } ; noun_from_verb = nonExist ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV083" } ; @@ -12662,7 +12662,7 @@ mkV084 base = adverbial = nonExist } ; noun_from_verb = nonExist ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV084" } ; @@ -12732,7 +12732,7 @@ mkV085 base = adverbial = nonExist } ; noun_from_verb = nonExist ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV085" } ; @@ -12802,7 +12802,7 @@ mkV086 base = adverbial = nonExist } ; noun_from_verb = nonExist ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV086" } ; @@ -12872,7 +12872,7 @@ mkV087 base = adverbial = nonExist } ; noun_from_verb = nonExist ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV087" } ; @@ -12942,7 +12942,7 @@ mkV088 base = adverbial = nonExist } ; noun_from_verb = nonExist ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV088" } ; @@ -13012,7 +13012,7 @@ mkV089 base = adverbial = base_1+"фи"+base_2+base_3+"јќи" } ; noun_from_verb = base_1+"фи"+base_2+base_3+"ње" ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV089" } ; @@ -13081,7 +13081,7 @@ mkV090 base_1 = adverbial = nonExist } ; noun_from_verb = base_1+"ње" ; - isRefl = False + vtype = VNormal } ; mkV091 : Str -> V ; @@ -13148,7 +13148,7 @@ mkV091 base_1 = adverbial = nonExist } ; noun_from_verb = base_1+"ње" ; - isRefl = False + vtype = VNormal } ; mkV092 : Str -> V ; @@ -13216,7 +13216,7 @@ mkV092 base = adverbial = nonExist } ; noun_from_verb = nonExist ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV092" } ; @@ -13286,7 +13286,7 @@ mkV093 base = adverbial = nonExist } ; noun_from_verb = nonExist ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV093" } ; @@ -13356,7 +13356,7 @@ mkV094 base = adverbial = nonExist } ; noun_from_verb = nonExist ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV094" } ; @@ -13426,7 +13426,7 @@ mkV097 base = adverbial = nonExist } ; noun_from_verb = nonExist ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV097" } ; @@ -13496,7 +13496,7 @@ mkV098 base = adverbial = base_1+base_2+"јќи" } ; noun_from_verb = base_1+base_2+"ње" ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV098" } ; @@ -13566,7 +13566,7 @@ mkV099 base = adverbial = nonExist } ; noun_from_verb = nonExist ; - isRefl = False + vtype = VNormal }; _ => error "Can't apply paradigm mkV099" } ; @@ -13635,7 +13635,7 @@ mkV101 base_1 = adverbial = nonExist } ; noun_from_verb = nonExist ; - isRefl = False + vtype = VNormal } ; mkA001 : Str -> A ; diff --git a/src/macedonian/ParadigmsMkd.gf b/src/macedonian/ParadigmsMkd.gf index 57edae21..224bf14c 100644 --- a/src/macedonian/ParadigmsMkd.gf +++ b/src/macedonian/ParadigmsMkd.gf @@ -1051,7 +1051,9 @@ mkV = overload { mkV : Str -> Str -> Str -> V = reg3V -- present;Sg;P3 participle;adverbial participle;adjectival } ; -reflV : V -> V = \v -> v ** {isRefl=True} ; +accusative : Case = Acc ; +dative : Case = Dat ; +medialV : V -> Case -> V = \v,c -> v ** {vtype=VMedial c} ; dualV : V -> V -> V = \impf,perf -> lin V { present = table { @@ -1083,7 +1085,7 @@ dualV : V -> V -> V = \impf,perf -> lin V adverbial = impf.participle.adverbial } ; noun_from_verb = impf.noun_from_verb ; - isRefl = impf.isRefl + vtype = impf.vtype } ; compoundV = overload { @@ -1099,7 +1101,7 @@ compoundV = overload { adverbial = v.participle.adverbial } ; noun_from_verb = v.noun_from_verb ++ s ; - isRefl = v.isRefl + vtype = v.vtype } } ; diff --git a/src/macedonian/ResMkd.gf b/src/macedonian/ResMkd.gf index 797e57ef..27f41990 100644 --- a/src/macedonian/ResMkd.gf +++ b/src/macedonian/ResMkd.gf @@ -42,7 +42,8 @@ oper mkNoun : (_,_,_,_,_,_,_,_,_,_,_ : Str) -> Gender -> Noun = param Aspect = Imperfective | Perfective ; param Person = P1 | P3 | P2 ; param GenNum = GSg Gender | GPl ; -oper Verb = {present: Aspect => Number => Person => Str; aorist: Number => Person => Str; imperfect: Aspect => Number => Person => Str; imperative: Aspect => Number => Str; participle: {aorist: Aspect => GenNum => Str; imperfect: GenNum => Str; perfect: Aspect => Str; adjectival: Aspect => Str; adverbial: Str}; noun_from_verb: Str; isRefl: Bool} ; -- 8174 +param VType = VNormal | VMedial Case ; +oper Verb = {present: Aspect => Number => Person => Str; aorist: Number => Person => Str; imperfect: Aspect => Number => Person => Str; imperative: Aspect => Number => Str; participle: {aorist: Aspect => GenNum => Str; imperfect: GenNum => Str; perfect: Aspect => Str; adjectival: Aspect => Str; adverbial: Str}; noun_from_verb: Str; vtype: VType} ; -- 8174 oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Verb = \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,f29,f30,f31,f32 -> { present = \\_ => @@ -106,7 +107,7 @@ oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : adverbial = f31 } ; noun_from_verb = f32 ; - isRefl = False + vtype = VNormal } ; From 5cc990d259e11220c12d0bafcd1a5a7b63cd131e Mon Sep 17 00:00:00 2001 From: Krasimir Angelov Date: Thu, 9 Apr 2026 14:03:06 +0200 Subject: [PATCH 19/20] added CompoundN --- src/macedonian/AllMkd.gf | 3 ++- src/macedonian/ExtendMkd.gf | 27 +++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 src/macedonian/ExtendMkd.gf diff --git a/src/macedonian/AllMkd.gf b/src/macedonian/AllMkd.gf index 30bb6409..c4c091c1 100644 --- a/src/macedonian/AllMkd.gf +++ b/src/macedonian/AllMkd.gf @@ -1,7 +1,8 @@ --# -path=.:../abstract:../common:../prelude:../api concrete AllMkd of AllMkdAbs = - LangMkd + LangMkd, + ExtendMkd ** { } ; diff --git a/src/macedonian/ExtendMkd.gf b/src/macedonian/ExtendMkd.gf new file mode 100644 index 00000000..c7bb2b62 --- /dev/null +++ b/src/macedonian/ExtendMkd.gf @@ -0,0 +1,27 @@ +--# -path=.:../abstract:../common:prelude +concrete ExtendMkd of Extend = CatMkd ** open ResMkd in { + +lin + CompoundN n1 n2 = + let comp : Species => Number => Str + = \\sp,n => case n1.relType of { + Pref => n1.rel ! sp ! genNum n2.g n ++ n2.s ! sp ! n ; + AdjMod => n1.rel ! sp ! genNum n2.g n ++ n2.s ! Indef ! n ; + AdvMod => n2.s ! sp ! n ++ n1.rel ! sp ! genNum n2.g n + } ; + voc : Number => Str + = \\n => ""{-case n1.relType of { + Pref => n1.rel ! Indef ! genNum n2.g n ++ n2.vocative ! n ; + AdjMod => n1.rel ! Indef ! genNum n2.g n ++ n2.vocative ! n ; + AdvMod => n2.vocative ! n ++ n1.rel ! Indef ! genNum n2.g n + }-} + in { + s = comp ; + count_form = comp ! Indef ! Pl ; + vocative = voc ; + rel = \\sp,n => "на" ++ comp ! sp ! Sg ; relType = AdvMod ; + g = n2.g + } ; + +} + From 1c3bb0f6ebd724bfa9de2d715295852e14e36e6d Mon Sep 17 00:00:00 2001 From: Krasimir Angelov Date: Thu, 9 Apr 2026 14:25:26 +0200 Subject: [PATCH 20/20] added relative pronoun --- src/macedonian/CatMkd.gf | 1 + src/macedonian/GrammarMkd.gf | 2 +- src/macedonian/RelativeMkd.gf | 9 +++++++++ 3 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 src/macedonian/RelativeMkd.gf diff --git a/src/macedonian/CatMkd.gf b/src/macedonian/CatMkd.gf index 84393c77..be434f61 100644 --- a/src/macedonian/CatMkd.gf +++ b/src/macedonian/CatMkd.gf @@ -46,6 +46,7 @@ lincat VPSlash = {present : Aspect => Number => Person => Str; lincat Cl = {present : Aspect => Str; aorist : Str; participle : {aorist : Aspect => Str; perfect : Aspect => Str}} ; +lincat RP = {s : GenNum => Str} ; lincat IP = {s : Str} ; lincat Subj = {s : Str} ; diff --git a/src/macedonian/GrammarMkd.gf b/src/macedonian/GrammarMkd.gf index 3975b064..1d39e8df 100644 --- a/src/macedonian/GrammarMkd.gf +++ b/src/macedonian/GrammarMkd.gf @@ -1,2 +1,2 @@ -concrete GrammarMkd of Grammar = VerbMkd,SentenceMkd,NounMkd,AdverbMkd,AdjectiveMkd,NumeralMkd,PhraseMkd,TextX,StructuralMkd,TenseX ** { +concrete GrammarMkd of Grammar = VerbMkd,SentenceMkd,NounMkd,AdverbMkd,AdjectiveMkd,NumeralMkd,PhraseMkd,RelativeMkd,TextX,StructuralMkd,TenseX ** { } diff --git a/src/macedonian/RelativeMkd.gf b/src/macedonian/RelativeMkd.gf new file mode 100644 index 00000000..0482ea35 --- /dev/null +++ b/src/macedonian/RelativeMkd.gf @@ -0,0 +1,9 @@ +concrete RelativeMkd of Relative = CatMkd ** open Prelude,ResMkd in { + lin IdRP = {s = table { + GSg Masc => "кој" ; + GSg Fem => "која" ; + GSg Neuter => "кое" ; + GPl => "кои" + } + } ; +}