From cf8fdd7cec3fd59ad8c3b3f67eebadb8797a00bb Mon Sep 17 00:00:00 2001 From: Krasimir Angelov Date: Sat, 10 Oct 2026 17:59:54 +0200 Subject: [PATCH] more refactoring --- src/telugu/DocumentationTel.gf | 12 ++--- src/telugu/LexiconTel.gf | 6 +-- src/telugu/ResTel.gf | 82 +++++++++++----------------------- 3 files changed, 35 insertions(+), 65 deletions(-) diff --git a/src/telugu/DocumentationTel.gf b/src/telugu/DocumentationTel.gf index 079ad4e52..627c6e5ac 100644 --- a/src/telugu/DocumentationTel.gf +++ b/src/telugu/DocumentationTel.gf @@ -107,15 +107,15 @@ concrete DocumentationTel of Documentation = CatTel ** open tr (th "Request" ++ td (verb.s ! VImp Pl Pos)) ) ++ heading2 "Past" ++ - heading3 "Masculine" ++ personTable verb (VPast Masc) ++ - heading3 "Feminine" ++ personTable verb (VPast Fem) ++ - heading3 "Neuter" ++ personTable verb (VPast Neutr) ++ + heading3 "Masculine" ++ personTable verb (\n,p -> VPast (Ag Masc n p)) ++ + heading3 "Feminine" ++ personTable verb (\n,p -> VPast (Ag Fem n p)) ++ + heading3 "Neuter" ++ personTable verb (\n,p -> VPast (Ag Neutr n p)) ++ heading2 "Subjunctive" ++ personTable verb VSubj ++ heading2 "Future" ++ - heading3 "Masculine" ++ personTable verb (VFuture Pos Masc) ++ - heading3 "Feminine" ++ personTable verb (VFuture Pos Fem) ++ - heading3 "Neuter" ++ personTable verb (VFuture Pos Neutr) ; + heading3 "Masculine" ++ personTable verb (\n,p -> VFuture Pos (Ag Masc n p)) ++ + heading3 "Feminine" ++ personTable verb (\n,p -> VFuture Pos (Ag Fem n p)) ++ + heading3 "Neuter" ++ personTable verb (\n,p -> VFuture Pos (Ag Neutr n p)) ; genderNumberTable : Verb -> (Gender -> Number -> VForm) -> Str = \verb,form -> frameTable ( diff --git a/src/telugu/LexiconTel.gf b/src/telugu/LexiconTel.gf index d292b9016..4209bf19e 100644 --- a/src/telugu/LexiconTel.gf +++ b/src/telugu/LexiconTel.gf @@ -16,7 +16,7 @@ lin beautiful_A = mkA "అందమైన"; become_VA = mkVA (mkV "అవు") ; beer_N = mkN "బీరు" ; - beg_V2V = mkV2V (mkV "వేడుకో") noPrep toP ; + beg_V2V = mkV2V (mkV "వేడుకొను") noPrep toP ; big_A = mkA "పెద్ద" ; bike_N = mkN "సైకిల్" ; bird_N = mkN "పక్షి" ; @@ -100,7 +100,7 @@ lin know_V2 = dirV2 (mkV "తెలుసు") ; lake_N = mkN "సరస్సు" ; lamp_N = mkN "దీపం" ; - learn_V2 = dirV2 (mkV "నేర్చుకో") ; + learn_V2 = dirV2 (mkV "నేర్చుకొను") ; leather_N = mkN "తోలు" ; leave_V2 = dirV2 (mkV "విడిచిపెట్టు") ; like_V2 = dirV2 (mkV "ఇష్టపడు") ; @@ -189,7 +189,7 @@ lin tree_N = mkN "చెట్టు" ; -- trousers_N = mkN "trousers" ; ugly_A = mkA "వికారమైన" ; - understand_V2 = dirV2 (mkV "అర్థంచేసుకో") ; + understand_V2 = dirV2 (mkV "అర్థం చేసుకొను") ; university_N = mkN "విశ్వవిద్యాలయం" ; village_N = mkN "గ్రామం" ; wait_V2 = prepV2 (mkV "వేచిఉండు") forP ; diff --git a/src/telugu/ResTel.gf b/src/telugu/ResTel.gf index a03f1224d..31f2444b6 100644 --- a/src/telugu/ResTel.gf +++ b/src/telugu/ResTel.gf @@ -5,7 +5,7 @@ -- This module contains operations that are needed to make the -- resource syntax work. -resource ResTel = ParamX ** open Prelude in { +resource ResTel = ParamX ** open Prelude, Predef in { flags optimize=all ; @@ -74,9 +74,9 @@ resource ResTel = ParamX ** open Prelude in { VForm = VInf | VStem - | VPresent Gender Number Person - | VPast Gender Number Person - | VFuture Polarity Gender Number Person + | VPresent Agr + | VPast Agr + | VFuture Polarity Agr | VNegFinite | VPresentPart | VRelativePresent @@ -99,16 +99,16 @@ resource ResTel = ParamX ** open Prelude in { conjugation : Str -> VForm => Str = \verb -> let root = verbRoot verb in table { VInf => root + "డం" ; - VStem => verb ; - VPresent g n p => presentFinite verb (Ag g n p) ; - VPast g n p => pastFinite verb (Ag g n p) ; - VFuture pol g n p => futureFinite verb pol (Ag g n p) ; + VStem => root ; + VPresent agr => presentFinite verb agr ; + VPast agr => pastFinite verb agr ; + VFuture pol agr => futureFinite verb pol agr ; VNegFinite => root + "లేదు" ; VPresentPart => nonPastStem verb + "ున్న" ; VRelativePresent => relativePresent verb ; VPastPart => pastStem verb + "ిన" ; VHortative => root + "దాం" ; - VNoun n c => (wallNoun (verbalNoun verb)).s ! n ! c ; + VNoun n c => (wallNoun (verbRoot verb + "డం")).s ! n ! c ; VSubj n p => nonPastStem verb + finiteEnding (Ag Masc n p) ; VAbs => pastStem verb + "ి" ; VImp Sg Pos => verb ; @@ -117,21 +117,13 @@ resource ResTel = ParamX ** open Prelude in { VImp Pl Neg => root + "కండి" } ; - -- The dictionary for is the imperative form. + -- The dictionary form is the imperative form. -- This operation provides the productive spoken-Telugu stems. -- Irregular high-frequency verbs are listed before the regular suffix -- rules; compound verbs are handled because matching is suffix based. verbRoot : Str -> Str = \verb -> case verb of { - stem + "ండి" => stem ; stem + "ు" => stem ; - _ => verb - } ; - - verbalNoun : Str -> Str = \verb -> case verb of { - stem + "పోవు" => stem + "పోవడం" ; - stem + "చేయు" => stem + "చేయడం" ; - stem + "వు" => stem + "వడం" ; - _ => verbRoot verb + "డం" + _ => error (verb ++ "is not a valid verb") } ; pastStem : Str -> Str = \verb -> case verb of { @@ -181,28 +173,17 @@ resource ResTel = ParamX ** open Prelude in { } ; presentFinite : Str -> Agr -> Str = \verb,agr -> - nonPastStem verb + "ున్న" + case agr of { - Ag _ Sg P1 => "ాను" ; - Ag _ Sg P2 => "ావు" ; - Ag Masc Sg P3 => "ాడు" ; - Ag _ Sg P3 => "ది" ; - Ag _ Pl P1 => "ాము" ; - Ag Neutr Pl P3 => "ాయి" ; - Ag _ Pl _ => "ారు" - } ; + nonPastStem verb + "ున్న" + finiteEnding agr ; pastFinite : Str -> Agr -> Str = \verb,agr -> case agr of { - Ag Masc Sg P3 => pastStem verb + "ాడు" ; + Ag Masc Sg P3 => pastStem verb + finiteEnding agr ; Ag _ Sg P3 => case verb of { stem + "చేయు" => stem + "చేసింది" ; stem + "తిను" => stem + "తిన్నది" ; stem + "విను" => stem + "విన్నది" ; stem + "కొను" => stem + "కొన్నది" ; stem + "కను" => stem + "కన్నది" ; - _ => pastStem verb + case agr of { - Ag Masc Sg P3 => "ాడు" ; - _ => "ింది" - } + _ => pastStem verb + finiteEnding agr } ; _ => pastStem verb + finiteEnding agr } ; @@ -232,15 +213,6 @@ resource ResTel = ParamX ** open Prelude in { Ag _ Pl _ => "రు" } ; - finitePast : Verb -> Agr -> Str = \verb,agr -> - case agr of {Ag g n p => verb.s ! VPast g n p} ; - - finitePresent : Verb -> Agr -> Str = \verb,agr -> - case agr of {Ag g n p => verb.s ! VPresent g n p} ; - - finiteFuture : Polarity -> Verb -> Agr -> Str = \pol,verb,agr -> - case agr of {Ag g n p => verb.s ! VFuture pol g n p} ; - passiveV : Verb -> Verb = \verb -> { s = verb.passive ; passive = verb.passive @@ -272,8 +244,7 @@ resource ResTel = ParamX ** open Prelude in { VPPastPart => {fin = "అయిన" ; neg = []} ; VPHort => {fin = "అవుదాం" ; neg = []} ; VPImp Sg => {fin = "అవు" ; neg = []} ; - VPImp Pl => {fin = "అవండి" ; neg = []} ; - VPReqFut => {fin = "అవండి" ; neg = []} + VPImp Pl => {fin = "అవండి" ; neg = []} } ; passive = verbForms (regVerb "అవు") ; obj = {s = [] ; a = defaultAgr} ; @@ -336,7 +307,6 @@ resource ResTel = ParamX ** open Prelude in { VPInf | VPTense VPHTense Agr -- 9 * 12 | VPImp Number - | VPReqFut | VPPresPart | VPRelPresent | VPPastPart @@ -368,19 +338,19 @@ resource ResTel = ParamX ** open Prelude in { case vh of { VPTense tense agr => case b of { Neg => case tense of { - VPFut => {fin = finiteFuture Neg verb agr ; neg = []} ; - _ => {fin = verb.s ! VNegFinite ; neg = []} + VPFut => {fin = verb.s ! VFuture Neg agr ; neg = []} ; + _ => {fin = verb.s ! VNegFinite ; neg = []} } ; Pos => case tense of { - VPGenPres => {fin = finiteFuture Pos verb agr ; neg = []} ; - VPImpPast => {fin = finitePast verb agr ; neg = []} ; - VPContPres => {fin = finitePresent verb agr ; neg = []} ; - VPContPast => {fin = finitePast verb agr ; neg = []} ; - VPPerf => {fin = finitePast verb agr ; neg = []} ; - VPPerfPres => {fin = finitePast verb agr ; neg = []} ; - VPPerfPast => {fin = finitePast verb agr ; neg = []} ; - VPSubj => {fin = finiteFuture Pos verb agr ; neg = []} ; - VPFut => {fin = finiteFuture Pos verb agr ; neg = []} + VPGenPres => {fin = verb.s ! VFuture Pos agr ; neg = []} ; + VPImpPast => {fin = verb.s ! VPast agr ; neg = []} ; + VPContPres => {fin = verb.s ! VPresent agr ; neg = []} ; + VPContPast => {fin = verb.s ! VPast agr ; neg = []} ; + VPPerf => {fin = verb.s ! VPast agr ; neg = []} ; + VPPerfPres => {fin = verb.s ! VPast agr ; neg = []} ; + VPPerfPast => {fin = verb.s ! VPast agr ; neg = []} ; + VPSubj => {fin = verb.s ! VFuture Pos agr ; neg = []} ; + VPFut => {fin = verb.s ! VFuture Pos agr ; neg = []} } } ; {- The finite cases above deliberately precede the legacy form