diff --git a/lib/src/urdu/AdjectiveUrd.gf b/lib/src/urdu/AdjectiveUrd.gf index dab9c807a..66d1a70fa 100644 --- a/lib/src/urdu/AdjectiveUrd.gf +++ b/lib/src/urdu/AdjectiveUrd.gf @@ -6,7 +6,7 @@ concrete AdjectiveUrd of Adjective = CatUrd ** open ResUrd, Prelude in { UseComparA a = a; ComparA a np = { - s = \\n,g,c,d => np.s ! NPC Obl ++ "sE" ++ a.s ! n ! g ! c ! d ; + s = \\n,g,c,d => np.s ! NPC Obl ++ sE_Str ++ a.s ! n ! g ! c ! d ; } ; ---- $SuperlA$ belongs to determiner syntax in $Noun$. @@ -16,7 +16,7 @@ concrete AdjectiveUrd of Adjective = CatUrd ** open ResUrd, Prelude in { } ; ReflA2 a = { - s = \\n,g,c,d => a.s ! n ! g ! c ! d ++ RefPron ++ "sE" ; + s = \\n,g,c,d => a.s ! n ! g ! c ! d ++ RefPron ++ sE_Str ; } ; SentAP ap sc = { diff --git a/lib/src/urdu/AdverbUrd.gf b/lib/src/urdu/AdverbUrd.gf index 589d264e6..ba891a6c8 100644 --- a/lib/src/urdu/AdverbUrd.gf +++ b/lib/src/urdu/AdverbUrd.gf @@ -15,6 +15,6 @@ concrete AdverbUrd of Adverb = CatUrd ** open ResUrd, Prelude in { SubjS = cc2 ; - AdnCAdv cadv = {s = "sE" ++ cadv.s} ; + AdnCAdv cadv = {s = sE_Str ++ cadv.s} ; } diff --git a/lib/src/urdu/CatUrd.gf b/lib/src/urdu/CatUrd.gf index 3a03d5696..e4ba734e2 100644 --- a/lib/src/urdu/CatUrd.gf +++ b/lib/src/urdu/CatUrd.gf @@ -24,6 +24,7 @@ concrete CatUrd of Cat = CommonX ** open ResUrd, Prelude in { IP = {s: Case => Str ; g : Gender ; n : Number}; IDet = {s :Gender => Str ; n : Number} ; IQuant = {s : Number => Str} ; + IComp = {s : Str} ; ---- Relative @@ -54,7 +55,6 @@ concrete CatUrd of Cat = CommonX ** open ResUrd, Prelude in { Card = {s : Str; n : Number} ; Ord = {s : Str; n : Number} ; Quant = {s:Number => Gender => Case => Str ; a:Agr}; - Art = {s : Str} ; ---- Numeral diff --git a/lib/src/urdu/Coordination.gf b/lib/src/urdu/Coordination.gf deleted file mode 100644 index b9fc7a25e..000000000 --- a/lib/src/urdu/Coordination.gf +++ /dev/null @@ -1,164 +0,0 @@ -resource Coordination = open Prelude in { - -param - ListSize = TwoElem | ManyElem ; - -oper - ListX = {s1,s2 : Str} ; - - twoStr : (x,y : Str) -> ListX = \x,y -> - {s1 = x ; s2 = y} ; - consStr : Str -> ListX -> Str -> ListX = \comma,xs,x -> - {s1 = xs.s1 ++ comma ++ xs.s2 ; s2 = x } ; - - twoSS : (_,_ : SS) -> ListX = \x,y -> - twoStr x.s y.s ; - consSS : Str -> ListX -> SS -> ListX = \comma,xs,x -> - consStr comma xs x.s ; - - Conjunction : Type = SS ; - ConjunctionDistr : Type = {s1 : Str ; s2 : Str} ; - - conjunctX : Conjunction -> ListX -> Str = \or,xs -> - xs.s1 ++ or.s ++ xs.s2 ; - - conjunctDistrX : ConjunctionDistr -> ListX -> Str = \or,xs -> - or.s1 ++ xs.s1 ++ or.s2 ++ xs.s2 ; - - conjunctSS : Conjunction -> ListX -> SS = \or,xs -> - ss (xs.s1 ++ or.s ++ xs.s2) ; - - conjunctDistrSS : ConjunctionDistr -> ListX -> SS = \or,xs -> - ss (or.s1 ++ xs.s1 ++ or.s2 ++ xs.s2) ; - - -- all this lifted to tables - - ListTable : Type -> Type = \P -> {s1,s2 : P => Str} ; - - twoTable : (P : Type) -> (_,_ : {s : P => Str}) -> ListTable P = \_,x,y -> - {s1 = x.s ; s2 = y.s} ; - - consTable : (P : Type) -> Str -> ListTable P -> {s : P => Str} -> ListTable P = - \P,c,xs,x -> - {s1 = table P {o => xs.s1 ! o ++ c ++ xs.s2 ! o} ; s2 = x.s} ; - - conjunctTable : (P : Type) -> Conjunction -> ListTable P -> {s : P => Str} = - \P,or,xs -> - {s = table P {p => xs.s1 ! p ++ or.s ++ xs.s2 ! p}} ; - - conjunctDistrTable : - (P : Type) -> ConjunctionDistr -> ListTable P -> {s : P => Str} = \P,or,xs -> - {s = table P {p => or.s1++ xs.s1 ! p ++ or.s2 ++ xs.s2 ! p}} ; - - -- ... and to two- and three-argument tables: how clumsy! --- - - ListTable2 : Type -> Type -> Type = \P,Q -> - {s1,s2 : P => Q => Str} ; - - twoTable2 : (P,Q : Type) -> (_,_ : {s : P => Q => Str}) -> ListTable2 P Q = - \_,_,x,y -> - {s1 = x.s ; s2 = y.s} ; - - consTable2 : - (P,Q : Type) -> Str -> ListTable2 P Q -> {s : P => Q => Str} -> ListTable2 P Q = - \P,Q,c,xs,x -> - {s1 = table P {p => table Q {q => xs.s1 ! p ! q ++ c ++ xs.s2 ! p! q}} ; - s2 = x.s - } ; - - conjunctTable2 : - (P,Q : Type) -> Conjunction -> ListTable2 P Q -> {s : P => Q => Str} = - \P,Q,or,xs -> - {s = table P {p => table Q {q => xs.s1 ! p ! q ++ or.s ++ xs.s2 ! p ! q}}} ; - - conjunctDistrTable2 : - (P,Q : Type) -> ConjunctionDistr -> ListTable2 P Q -> {s : P => Q => Str} = - \P,Q,or,xs -> - {s = - table P {p => table Q {q => or.s1++ xs.s1 ! p ! q ++ or.s2 ++ xs.s2 ! p ! q}}} ; - - ListTable3 : Type -> Type -> Type -> Type = \P,Q,R -> - {s1,s2 : P => Q => R => Str} ; - - twoTable3 : (P,Q,R : Type) -> (_,_ : {s : P => Q => R => Str}) -> - ListTable3 P Q R = - \_,_,_,x,y -> - {s1 = x.s ; s2 = y.s} ; - - consTable3 : - (P,Q,R : Type) -> Str -> ListTable3 P Q R -> {s : P => Q => R => Str} -> - ListTable3 P Q R = - \P,Q,R,c,xs,x -> - {s1 = \\p,q,r => xs.s1 ! p ! q ! r ++ c ++ xs.s2 ! p ! q ! r ; - s2 = x.s - } ; - - conjunctTable3 : - (P,Q,R : Type) -> Conjunction -> ListTable3 P Q R -> {s : P => Q => R => Str} = - \P,Q,R,or,xs -> - {s = \\p,q,r => xs.s1 ! p ! q ! r ++ or.s ++ xs.s2 ! p ! q ! r} ; - - conjunctDistrTable3 : - (P,Q,R : Type) -> ConjunctionDistr -> ListTable3 P Q R -> - {s : P => Q => R => Str} = - \P,Q,R,or,xs -> - {s = \\p,q,r => or.s1++ xs.s1 ! p ! q ! r ++ or.s2 ++ xs.s2 ! p ! q ! r} ; - - --------- - ListTable4 : Type -> Type -> Type -> Type -> Type = \P,Q,R,T -> - {s1,s2 : P => Q => R => T => Str} ; - - twoTable4 : (P,Q,R,T : Type) -> (_,_ : {s : P => Q => R => T => Str}) -> - ListTable4 P Q R T = - \_,_,_,_,x,y -> - {s1 = x.s ; s2 = y.s} ; - - consTable4 : - (P,Q,R,T : Type) -> Str -> ListTable4 P Q R T -> {s : P => Q => R => T => Str} -> - ListTable4 P Q R T = - \P,Q,R,T,c,xs,x -> - {s1 = \\p,q,r,t => xs.s1 ! p ! q ! r ! t ++ c ++ xs.s2 ! p ! q ! r ! t ; - s2 = x.s - } ; - - conjunctTable4 : - (P,Q,R,T : Type) -> Conjunction -> ListTable4 P Q R T -> {s : P => Q => R => T => Str} = - \P,Q,R,T,or,xs -> - {s = \\p,q,r,t => xs.s1 ! p ! q ! r ! t ++ or.s ++ xs.s2 ! p ! q ! r ! t} ; - - conjunctDistrTable4 : - (P,Q,R,T : Type) -> ConjunctionDistr -> ListTable4 P Q R T -> - {s : P => Q => R => T => Str} = - \P,Q,R,T,or,xs -> - {s = \\p,q,r,t => or.s1++ xs.s1 ! p ! q ! r ! t ++ or.s2 ++ xs.s2 ! p ! q ! r ! t} ; - -------------- - - comma = "," ; - --- you can also do this to right-associative lists: - - consrStr : Str -> Str -> ListX -> ListX = \comma,x,xs -> - {s1 = x ++ comma ++ xs.s1 ; s2 = xs.s2 } ; - - consrSS : Str -> SS -> ListX -> ListX = \comma,x,xs -> - consrStr comma x.s xs ; - - consrTable : (P : Type) -> Str -> {s : P => Str} -> ListTable P -> ListTable P = - \P,c,x,xs -> - {s1 = table P {o => x.s ! o ++ c ++ xs.s1 ! o} ; s2 = xs.s2} ; - - consrTable2 : (P,Q : Type) -> Str -> {s : P => Q => Str} -> - ListTable2 P Q -> ListTable2 P Q = - \P,Q,c,x,xs -> - {s1 = table P {p => table Q {q => x.s ! p ! q ++ c ++ xs.s1 ! p ! q}} ; - s2 = xs.s2 - } ; - consrTable4 : (P,Q,R,T : Type) -> Str -> {s : P => Q => R => T => Str} -> - ListTable4 P Q R T -> ListTable4 P Q R T = - \P,Q,R,T,c,x,xs -> - {s1 = table P {p => table Q {q => table R { r => table T {t => x.s ! p ! q ! r ! t ++ c ++ xs.s1 ! p ! q ! r ! t}}}} ; - s2 = xs.s2 - } ; - - -} ; diff --git a/lib/src/urdu/ExtraUrd.gf b/lib/src/urdu/ExtraUrd.gf index 0b4f946c2..d7c7a8d89 100644 --- a/lib/src/urdu/ExtraUrd.gf +++ b/lib/src/urdu/ExtraUrd.gf @@ -2,10 +2,10 @@ concrete ExtraUrd of ExtraUrdAbs = CatUrd ** open ResUrd, Coordination, Prelude, MorphoUrd, ParadigmsUrd in { lin - GenNP np = {s = \\_,_,_ => np.s ! NPC Obl ++ "ka" ; a = np.a} ; + GenNP np = {s = \\_,_,_ => np.s ! NPC Obl ++ ka_Str ; a = np.a} ; - each_Det = mkDet "hr kwy" "hr kwy" "hr kwy" "hr kwy" Sg ; - have_V = mkV "rakh-na"; + each_Det = mkDet hr_kwy_Str hr_kwy_Str hr_kwy_Str hr_kwy_Str Sg ; + have_V = mkV rakh6na_Str ; -- for VP conjunction } diff --git a/lib/src/urdu/IdiomUrd.gf b/lib/src/urdu/IdiomUrd.gf index b8436b2e5..1edb02256 100644 --- a/lib/src/urdu/IdiomUrd.gf +++ b/lib/src/urdu/IdiomUrd.gf @@ -4,8 +4,8 @@ concrete IdiomUrd of Idiom = CatUrd ** open Prelude,Predef, ResUrd in { flags coding = utf8; lin - ImpersCl vp = mkSClause " " (agrP3 Masc Sg) vp ; - GenericCl vp = mkSClause "kwy" (agrP3 Masc Sg) vp ; + ImpersCl vp = mkSClause [] (agrP3 Masc Sg) vp ; + GenericCl vp = mkSClause "كوی" (agrP3 Masc Sg) vp ; CleftNP np rs = let cl = mkSClause (np.s ! NPC rs.c) (np.a) (predAux auxBe); @@ -15,11 +15,11 @@ concrete IdiomUrd of Idiom = CatUrd ** open Prelude,Predef, ResUrd in { CleftAdv ad ss = { s = \\t,b,o => ad.s ++ ss.s}; ExistNP np = - mkSClause "whaN" (agrP3 (fromAgr np.a).g (fromAgr np.a).n) + mkSClause "وہاں" (agrP3 (fromAgr np.a).g (fromAgr np.a).n) (insertObj (\\_ => np.s ! NPC Obl) (predAux auxBe)) ; ExistIP ip = - let cl = mkSClause ("whaN" ++ ip.s ! Dir) (agrP3 ip.g ip.n) (predAux auxBe); + let cl = mkSClause ("وہاں" ++ ip.s ! Dir) (agrP3 ip.g ip.n) (predAux auxBe); in { s = \\t,p,qf => case qf of { QDir => cl.s ! t ! p ! ODir; @@ -30,8 +30,8 @@ concrete IdiomUrd of Idiom = CatUrd ** open Prelude,Predef, ResUrd in { ProgrVP vp = insertObj (\\a => vp.obj.s ++ vp.ad ++ vp.comp ! a ++ (vp.s ! VPStem).inf ++ raha (fromAgr a).g (fromAgr a).n ) (predAux auxBe) ; - ImpPl1 vp = {s = "Aw" ++ infVP True vp (agrP1 Masc Pl)} ; - ImpP3 np vp = {s = np.s!NPC Dir ++ "kw" ++ (vp.s ! VPImp ).inf ++ "dw"}; + ImpPl1 vp = {s = "آو" ++ infVP True vp (agrP1 Masc Pl)} ; + ImpP3 np vp = {s = np.s!NPC Dir ++ "كو" ++ (vp.s ! VPImp ).inf ++ "دو"}; } diff --git a/lib/src/urdu/LexiconUrd.gf b/lib/src/urdu/LexiconUrd.gf index 935ce4745..19e1b751e 100644 --- a/lib/src/urdu/LexiconUrd.gf +++ b/lib/src/urdu/LexiconUrd.gf @@ -9,361 +9,361 @@ concrete LexiconUrd of Lexicon = CatUrd ** coding = utf8; lin - airplane_N = mkN "jhaz" ; - answer_V2S = mkV2 (compoundV "jwab" (mkV "dyna")) ; - apartment_N = mkN "kmrh" ; - apple_N = mkN "syb" ; - art_N = mkN "fn" ; - ask_V2Q = mkV2 (mkV "pwch-na") ; - baby_N = mkN "bch" ; - bad_A = mkA "bra" ; - bank_N = mkN "bank" ; - beautiful_A = mkA "KwbSwrt" ; - become_VA = mkV "bnna"; - beer_N = mkN "beer" ; - beg_V2V = mkV2V (compoundV "altja" (mkV "krna")) "sE" "kh" False; - big_A = mkA "bRa" ; - bike_N = mkN "saycl" feminine ; - bird_N = mkN "prndh" ; - black_A = mkA "kala" ; - blue_A = mkA "nyla" ; - boat_N = mkN "kXty" ; - book_N = mkN "ktab" feminine ; - boot_N = mkN "jwta" ; - boss_N = mkN "Sahb" ; - boy_N = mkN "lRka" ; - bread_N = mkN "rwty" ; - break_V2 = mkV2 (mkV "twRna") ; - broad_A = mkA "kh-la" ; - brother_N2 = mkN2 (mkN "bh-ay") (mkPrep "ka") "kE" ; --not correct - brown_A = mkA "nswary" ; - butter_N = mkN "mkh-n" ; - buy_V2 = mkV2 (mkV "Krydna"); - camera_N = mkN "kymrh" ; - cap_N = mkN "twpy" ; - car_N = mkN "gaRy" ; - carpet_N = mkN "tpay^y" ; - cat_N = mkN "bly" ; - ceiling_N = mkN "ch-t" feminine ; - chair_N = mkN "krsy" ; - cheese_N = mkN "pnyr" feminine ; - child_N = mkN "bch" ; - church_N = mkCmpdNoun "grja" (mkN "gh-r") ; - city_N = mkN "Xhr" ; - clean_A = mkA "Saf" ; - clever_A = mkA "hwXyar" ; - close_V2 = mkV2 (compoundV "bnd" do_V2); - coat_N = mkN "kwT" ; - cold_A = mkA "Th-nDa" ; - come_V = mkV "Ana" ; - computer_N = mkN "kmpywTr" ; - country_N = mkN "mlk" ; - cousin_N = mkCmpdNoun "cca" (mkN "zad") ; -- a compund noun made of two nouns - cow_N = mkN "gaE" feminine ; - die_V = mkV "mrna" ; - dirty_A = mkA "gnda" ; - distance_N3 = mkN3 (mkN "faSlh") (mkPrep "ka") "kE" "sE" ; - doctor_N = mkN "mealj" ; - dog_N = mkN "kta" ; - door_N = mkN "drwzh" ; - drink_V2 = mkV2 (mkV "pyna"); - easy_A2V = mkA "Asan" "" ; - eat_V2 = mkV2 (mkV "kh-ana") "" ; - empty_A = mkA "Kaly" ; - enemy_N = mkN "dXmn" ; - factory_N = mkN "karKanh" ; - father_N2 = mkN2 (mkN "aba") (mkPrep "ka") "kE" ; - fear_VS = mkV "drna"; - find_V2 = mkV2 (mkV "pana") ; - fish_N = mkN "mch-ly" ; - floor_N = mkN "frX" ; - forget_V2 = mkV2 (mkV "bh-wlna") ; - fridge_N = mkN "fryg" ; - friend_N = mkN "dwst" masculine ; - fruit_N = mkN "ph-l" ; --- fun_AV = mkAV (regA "fun") ; - garden_N = mkN "baG" ; - girl_N = mkN "lRky" ; - glove_N = mkN "dstanh" ; - gold_N = mkN "swna" ; - good_A = mkA "ach-a" ; - go_V = mkV "jana" ; - green_A = mkA "sbz" ; - harbour_N = mkCmpdNoun "bndr" (mkN "gah") ; - hate_V2 = mkV2 (compoundV "nfrt" do_V2) ; - hat_N = mkN "twpy" ; --- have_V2 = dirV2 (mk5V "have" "has" "had" "had" "having") ; - hear_V2 = mkV2 (mkV "snna") ; - hill_N = mkN "phaRy" ; - hope_VS = (compoundV "amyd" do_V2); - horse_N = mkN "gh-wRa" ; - hot_A = mkA "grm" ; - house_N = mkN "gh-r" ; - important_A = mkA "ahm" ; - industry_N = mkN "Snet" feminine ; - iron_N = mkN "lwha" ; - king_N = mkN "badXah" ; - know_V2 = mkV2 (mkV "janna") ; - know_VS = mkV "janna"; - lake_N = mkN "jh-yl" feminine ; - lamp_N = mkN "lymp" ; - learn_V2 = mkV2 (mkV "sykh-na") ; - leather_N = mkN "cmRa" ; - leave_V2 = mkV2 (mkV "jana") ; - like_V2 = mkV2 (compoundV "psnd" do_V2); - listen_V2 = mkV2 (mkV "snna") ; - live_V = mkV "rhna" ; ---- touch - long_A = mkA "lmba" ; - lose_V2 = mkV2 (compoundV "kh-w" do_V2) ; - love_N = mkN "mHbt" ; - love_V2 = mkV2 (compoundV "pyar" do_V2) "kw"; - man_N = mkN "Admy" ; -- not correct according to rules should be discussed - married_A2 = mkA "Xady krna" "sE" ; - meat_N = mkN "gwXt" ; - milk_N = mkN "dwdh-" ; - moon_N = mkN "cand" ; - mother_N2 = mkN2 (mkN "maN") (mkPrep "ky") "kE"; -- not covered need to be discussed - mountain_N = mkN "phaRy" ; - music_N = mkN "mwsyqy" ; - narrow_A = mkA "baryk" ; - new_A = mkA "nya" ; - newspaper_N = mkN "aKbar" ; - oil_N = mkN "tyl" ; - old_A = mkA "bwRh-a" ; - open_V2 = mkV2 (mkV "kh-wlna") ; - paint_V2A = mkV2 (compoundV "rng" do_V2) ; - paper_N = mkN "kaGz" ; - paris_PN = mkPN "Pyrs" ; - peace_N = mkN "amn" ; - pen_N = mkN "pnsl" ; - planet_N = mkN "syarh" ; - plastic_N = mkN "plasTk" ; - play_V2 = mkV2 (mkV "kh-ylna") ; - policeman_N = mkCmpdNoun "pwlys" (mkN "wala") ; - priest_N = (mkN "pyGmbr") ; --- probable_AS = mkAS (regA "probable") ; - queen_N = mkN "Xhzady" ; - radio_N = mkN "ryDyw" ; - rain_V0 = compoundV "barX" (mkV "hwna" ) ; - read_V2 = mkV2 (mkV "pRh-na"); - red_A = mkA "lal" ; - religion_N = mkN "mzhb" ; - restaurant_N = mkN "hwTl" ; - river_N = mkN "drya" masculine ; - rock_N = mkN "cTan" ; - roof_N = mkN "ch-t" masculine ; - rubber_N = mkN "rbR" ; - run_V = mkV "dwRna" ; - say_VS = mkV "khna" ; - school_N = mkN "skwl" ; - science_N = mkN "sans" ; - sea_N = mkN "smndr" ; - seek_V2 = mkV2 (compoundV "tlaX" do_V2) ; - see_V2 = mkV2 (mkV "dykh-na") ; - sell_V3 = mkV3 (mkV "bycna") "kw" ""; - send_V3 = mkV3 (mkV "bh-yjna") "kw" ""; - sheep_N = mkN "bh-yR" feminine ; - ship_N = mkN "jhaz" ; - shirt_N = mkN "qmyZ-" feminine; - shoe_N = mkN "jwta" ; - shop_N = mkN "dwkan" feminine ; - short_A = mkA "ch-wTa" ; - silver_N = mkN "candy" ; - sister_N = mkN "bhn" feminine ; - sleep_V = mkV "swna" ; - small_A = mkA "ch-wTa" ; - snake_N = mkN "sanp" ; - sock_N = mkN "jrab" feminine ; - speak_V2 = mkV2 (mkV "bwlna") ; - star_N = mkN "stara" ; - steel_N = mkN "styl" ; - stone_N = mkN "pth-r" ; - stove_N = mkN "cwlha" ; - student_N = mkCmpdNoun "t-alb" (mkN "elm") ; - stupid_A = mkA "aHmq" ; - sun_N = mkN "swrj" ; - switch8off_V2 = mkV2 (mkV "clana") ; - switch8on_V2 = mkV2 (compoundV "bnd" do_V2) ; - table_N = mkN "myz" feminine ; - talk_V3 = mkV3 (mkV "bwlna") "sE" "kE barE meN"; - teacher_N = mkN "istad" ; - teach_V2 = mkV2 (mkV "pRh-na") ; - television_N = mkN "telywyzn" ; - thick_A = mkA "mwTa" ; - thin_A = mkA "ptla" ; - train_N = mkN "gaRy" ; - travel_V = (compoundV "sfr" do_V2) ; - tree_N = mkN "drKt" masculine ; --- ---- trousers_N = mkN "trousers" ; - ugly_A = mkA "bdSwrt" ; - understand_V2 = mkV2 (mkV "smjh-na") ; - university_N = mkN "ywnywrsTy" ; - village_N = mkN "gawN" ; - wait_V2 = mkV2 (compoundV "antz-ar" do_V2) ; - walk_V = mkV "clna" ; - warm_A = mkA "grm" ; - war_N = mkN "jng" ; - watch_V2 = mkV2 (mkV "dykh-na") ; - water_N = mkN "pany" ; -- not covered masculine ending with y - white_A = mkA "sfyd" ; - window_N = mkN "kh-Rky" ; - wine_N = mkN "Xrab" feminine ; - win_V2 = mkV2 (mkV "jytna") ; - woman_N = mkN "ewrt" feminine ; - wonder_VQ = compoundV "Heran" (mkV "hwna") ; - wood_N = mkN "lkRy" ; - write_V2 = mkV2 (mkV "lkh-na") ; - yellow_A = mkA "pyla" ; - young_A = mkA "jwan" ; - do_V2 = mkV2 (mkV "krna") ; - now_Adv = mkAdv "ab" ; - already_Adv = mkAdv "phlE hy" ; - song_N = mkN "gana" ; - add_V3 = mkV3 (compoundV "aZ-afh" do_V2) "" "" ; - number_N = mkN "hndsh" ; - put_V2 = mkV2 (mkV "Dalna") ; - stop_V = mkV "rkna" ; - jump_V = mkV "ch-langna" ; + airplane_N = mkN "جہاز" ; + answer_V2S = mkV2 (compoundV "جواب" (mkV "دینا")) ; + apartment_N = mkN "كمرہ" ; + apple_N = mkN "سیب" ; + art_N = mkN "فن" ; + ask_V2Q = mkV2 (mkV "پوچھنا") ; + baby_N = mkN "بچہ" ; + bad_A = mkA "برا" ; + bank_N = mkN "بانك" ; + beautiful_A = mkA "خوبصورت" ; + become_VA = mkV "بننا"; + beer_N = mkN "بععر" ; + beg_V2V = mkV2V (compoundV "التجا" (mkV "كرنا")) "سے" "كہ" False; + big_A = mkA "بڑا" ; + bike_N = mkN "سایچل" feminine ; + bird_N = mkN "پرندہ" ; + black_A = mkA "كالا" ; + blue_A = mkA "نیلا" ; + boat_N = mkN "كشتی" ; + book_N = mkN "كتاب" feminine ; + boot_N = mkN "جوتا" ; + boss_N = mkN "صاہب" ; + boy_N = mkN "لڑكا" ; + bread_N = mkN "روتی" ; + break_V2 = mkV2 (mkV "توڑنا") ; + broad_A = mkA "كھلا" ; + brother_N2 = mkN2 (mkN "بھای") (mkPrep "كا") "كے" ; --not correct + brown_A = mkA "نسواری" ; + butter_N = mkN "مكھن" ; + buy_V2 = mkV2 (mkV "خریدنا"); + camera_N = mkN "كیمرہ" ; + cap_N = mkN "توپی" ; + car_N = mkN "گاڑی" ; + carpet_N = mkN "تپائی" ; + cat_N = mkN "بلی" ; + ceiling_N = mkN "چھت" feminine ; + chair_N = mkN "كرسی" ; + cheese_N = mkN "پنیر" feminine ; + child_N = mkN "بچہ" ; + church_N = mkCmpdNoun "گرجا" (mkN "گھر") ; + city_N = mkN "شہر" ; + clean_A = mkA "صاف" ; + clever_A = mkA "ہوشیار" ; + close_V2 = mkV2 (compoundV "بند" do_V2); + coat_N = mkN "كوٹ" ; + cold_A = mkA "ٹھنڈا" ; + come_V = mkV "آنا" ; + computer_N = mkN "كمپیوٹر" ; + country_N = mkN "ملك" ; + cousin_N = mkCmpdNoun "چچا" (mkN "زاد") ; -- a compund noun made of two nouns + cow_N = mkN "گاے" feminine ; + die_V = mkV "مرنا" ; + dirty_A = mkA "گندا" ; + distance_N3 = mkN3 (mkN "فاصلہ") (mkPrep "كا") "كے" "سے" ; + doctor_N = mkN "معالج" ; + dog_N = mkN "كتا" ; + door_N = mkN "دروزہ" ; + drink_V2 = mkV2 (mkV "پینا"); + easy_A2V = mkA "آسان" "" ; + eat_V2 = mkV2 (mkV "كھانا") "" ; + empty_A = mkA "خالی" ; + enemy_N = mkN "دشمن" ; + factory_N = mkN "كارخانہ" ; + father_N2 = mkN2 (mkN "ابا") (mkPrep "كا") "كے" ; + fear_VS = mkV "درنا"; + find_V2 = mkV2 (mkV "پانا") ; + fish_N = mkN "مچھلی" ; + floor_N = mkN "فرش" ; + forget_V2 = mkV2 (mkV "بھولنا") ; + fridge_N = mkN "فریگ" ; + friend_N = mkN "دوست" masculine ; + fruit_N = mkN "پھل" ; +-- fun_AV = mkAV (regA "فuن") ; + garden_N = mkN "باغ" ; + girl_N = mkN "لڑكی" ; + glove_N = mkN "دستانہ" ; + gold_N = mkN "سونا" ; + good_A = mkA "اچھا" ; + go_V = mkV "جانا" ; + green_A = mkA "سبز" ; + harbour_N = mkCmpdNoun "بندر" (mkN "گاہ") ; + hate_V2 = mkV2 (compoundV "نفرت" do_V2) ; + hat_N = mkN "توپی" ; +-- have_V2 = dirV2 (mk5V "ہاvع" "ہاس" "ہاد" "ہاد" "ہاviنگ") ; + hear_V2 = mkV2 (mkV "سننا") ; + hill_N = mkN "پہاڑی" ; + hope_VS = (compoundV "امید" do_V2); + horse_N = mkN "گھوڑا" ; + hot_A = mkA "گرم" ; + house_N = mkN "گھر" ; + important_A = mkA "اہم" ; + industry_N = mkN "صنعت" feminine ; + iron_N = mkN "لوہا" ; + king_N = mkN "بادشاہ" ; + know_V2 = mkV2 (mkV "جاننا") ; + know_VS = mkV "جاننا"; + lake_N = mkN "جھیل" feminine ; + lamp_N = mkN "لیمپ" ; + learn_V2 = mkV2 (mkV "سیكھنا") ; + leather_N = mkN "چمڑا" ; + leave_V2 = mkV2 (mkV "جانا") ; + like_V2 = mkV2 (compoundV "پسند" do_V2); + listen_V2 = mkV2 (mkV "سننا") ; + live_V = mkV "رہنا" ; ---- touch + long_A = mkA "لمبا" ; + lose_V2 = mkV2 (compoundV "كھو" do_V2) ; + love_N = mkN "محبت" ; + love_V2 = mkV2 (compoundV "پیار" do_V2) "كو"; + man_N = mkN "آدمی" ; -- not correct according to rules should be discussed + married_A2 = mkA "شادی كرنا" "سے" ; + meat_N = mkN "گوشت" ; + milk_N = mkN "دودھ" ; + moon_N = mkN "چاند" ; + mother_N2 = mkN2 (mkN "ماں") (mkPrep "كی") "كے"; -- not covered need to be discussed + mountain_N = mkN "پہاڑی" ; + music_N = mkN "موسیقی" ; + narrow_A = mkA "باریك" ; + new_A = mkA "نیا" ; + newspaper_N = mkN "اخبار" ; + oil_N = mkN "تیل" ; + old_A = mkA "بوڑھا" ; + open_V2 = mkV2 (mkV "كھولنا") ; + paint_V2A = mkV2 (compoundV "رنگ" do_V2) ; + paper_N = mkN "كاغز" ; + paris_PN = mkPN "پیرس" ; + peace_N = mkN "امن" ; + pen_N = mkN "پنسل" ; + planet_N = mkN "سیارہ" ; + plastic_N = mkN "پلاسٹك" ; + play_V2 = mkV2 (mkV "كھیلنا") ; + policeman_N = mkCmpdNoun "پولیس" (mkN "والا") ; + priest_N = (mkN "پیغمبر") ; +-- probable_AS = mkAS (regA "پرoبابلع") ; + queen_N = mkN "شہزادی" ; + radio_N = mkN "ریڈیو" ; + rain_V0 = compoundV "بارش" (mkV "ہونا" ) ; + read_V2 = mkV2 (mkV "پڑھنا"); + red_A = mkA "لال" ; + religion_N = mkN "مزہب" ; + restaurant_N = mkN "ہوٹل" ; + river_N = mkN "دریا" masculine ; + rock_N = mkN "چٹان" ; + roof_N = mkN "چھت" masculine ; + rubber_N = mkN "ربڑ" ; + run_V = mkV "دوڑنا" ; + say_VS = mkV "كہنا" ; + school_N = mkN "سكول" ; + science_N = mkN "سانس" ; + sea_N = mkN "سمندر" ; + seek_V2 = mkV2 (compoundV "تلاش" do_V2) ; + see_V2 = mkV2 (mkV "دیكھنا") ; + sell_V3 = mkV3 (mkV "بیچنا") "كو" ""; + send_V3 = mkV3 (mkV "بھیجنا") "كو" ""; + sheep_N = mkN "بھیڑ" feminine ; + ship_N = mkN "جہاز" ; + shirt_N = mkN "قمیض" feminine; + shoe_N = mkN "جوتا" ; + shop_N = mkN "دوكان" feminine ; + short_A = mkA "چھوٹا" ; + silver_N = mkN "چاندی" ; + sister_N = mkN "بہن" feminine ; + sleep_V = mkV "سونا" ; + small_A = mkA "چھوٹا" ; + snake_N = mkN "سانپ" ; + sock_N = mkN "جراب" feminine ; + speak_V2 = mkV2 (mkV "بولنا") ; + star_N = mkN "ستارا" ; + steel_N = mkN "ستیل" ; + stone_N = mkN "پتھر" ; + stove_N = mkN "چولہا" ; + student_N = mkCmpdNoun "طالب" (mkN "علم") ; + stupid_A = mkA "احمق" ; + sun_N = mkN "سورج" ; + switch8off_V2 = mkV2 (mkV "چلانا") ; + switch8on_V2 = mkV2 (compoundV "بند" do_V2) ; + table_N = mkN "میز" feminine ; + talk_V3 = mkV3 (mkV "بولنا") "سے" "كے بارے معں"; + teacher_N = mkN "iستاد" ; + teach_V2 = mkV2 (mkV "پڑھنا") ; + television_N = mkN "تعلیویزن" ; + thick_A = mkA "موٹا" ; + thin_A = mkA "پتلا" ; + train_N = mkN "گاڑی" ; + travel_V = (compoundV "سفر" do_V2) ; + tree_N = mkN "درخت" masculine ; +-- ---- trousers_N = mkN "ترouسعرس" ; + ugly_A = mkA "بدصورت" ; + understand_V2 = mkV2 (mkV "سمجھنا") ; + university_N = mkN "یونیورسٹی" ; + village_N = mkN "گاوں" ; + wait_V2 = mkV2 (compoundV "انتظار" do_V2) ; + walk_V = mkV "چلنا" ; + warm_A = mkA "گرم" ; + war_N = mkN "جنگ" ; + watch_V2 = mkV2 (mkV "دیكھنا") ; + water_N = mkN "پانی" ; -- not covered masculine ending with y + white_A = mkA "سفید" ; + window_N = mkN "كھڑكی" ; + wine_N = mkN "شراب" feminine ; + win_V2 = mkV2 (mkV "جیتنا") ; + woman_N = mkN "عورت" feminine ; + wonder_VQ = compoundV "حعران" (mkV "ہونا") ; + wood_N = mkN "لكڑی" ; + write_V2 = mkV2 (mkV "لكھنا") ; + yellow_A = mkA "پیلا" ; + young_A = mkA "جوان" ; + do_V2 = mkV2 (mkV "كرنا") ; + now_Adv = mkAdv "اب" ; + already_Adv = mkAdv "پہلے ہی" ; + song_N = mkN "گانا" ; + add_V3 = mkV3 (compoundV "اضافہ" do_V2) "" "" ; + number_N = mkN "ہندسہ" ; + put_V2 = mkV2 (mkV "ڈالنا") ; + stop_V = mkV "ركنا" ; + jump_V = mkV "چھلانگنا" ; - left_Ord = {s = "bayaN" ; n = singular}; - right_Ord = {s= "dayaN" ; n = singular}; - far_Adv = mkAdv "dwr" ; - correct_A = mkA "Syh" ; - dry_A = mkA "KXk" ; - dull_A = mkA "nalik" ; - full_A = mkA "mkml" ; - heavy_A = mkA "bh-ary" ; - near_A = mkA "qryb" ; - rotten_A = mkA "Krab" ; - round_A = mkA "gwl" ; - sharp_A = mkA "tyz" ; - smooth_A = mkA "hmwar" ; - straight_A = mkA "sydh-a" ; - wet_A = mkA "gyla" ; ---- - wide_A = mkA "kh-la" ; - animal_N = mkN "janwr" ; - ashes_N = mkN "rakh-" feminine; -- FIXME: plural only? - back_N = mkN "qmr" feminine ; - bark_N = mkN "bark" ; - belly_N = mkN "dh-ny" ; - blood_N = mkN "Kwn" ; - bone_N = mkN "hDy" ; - breast_N = mkN "ch-aty" ; - cloud_N = mkN "badl" ; - day_N = mkN "dn" ; - dust_N = mkN "dh-wl" ; - ear_N = mkN "kan" ; - earth_N = mkN "zmyn" feminine ; - egg_N = mkN "anDh" ; - eye_N = mkN "Ankh-" feminine ; - fat_N = mkN "mwta" ; - feather_N = mkN "pr" ; - fingernail_N = mkN "naKn" ; - fire_N = mkN "Ag" feminine ; - flower_N = mkN "ph-wl" ; - fog_N = mkN "dh-nd" feminine ; - foot_N = mkN "pawN" ; -- not properly covered need to be discussed - forest_N = mkN "njgl" ; - grass_N = mkN "gh-s" feminine ; - guts_N = mkN "gut" ; -- FIXME: no singular - hair_N = mkN "bal" ; - hand_N = mkN "hath-" ; - head_N = mkN "sr" ; - heart_N = mkN "dl" ; - horn_N = mkN "gh-nty" ; - husband_N = mkN "Xwhr" ; - ice_N = mkN "brf" feminine ; - knee_N = mkN "khny" ; - leaf_N = mkN "pth" ; - leg_N = mkN "tang" feminine ; - liver_N = mkN "jgr" ; - louse_N = mkN "gh-r" ; - mouth_N = mkN "mnh" ; - name_N = mkN "nam" ; - neck_N = mkN "grdn" feminine ; - night_N = mkN "rat" feminine ; - nose_N = mkN "nak" ; - person_N = mkN "XKS" ; - rain_N = mkN "barX" feminine ; - road_N = mkN "sRk" ; - root_N = mkN "gR" feminine ; - rope_N = mkN "rsy" ; - salt_N = mkN "nmk" feminine ; - sand_N = mkN "ryt" feminine ; - seed_N = mkN "byj" ; - skin_N = mkN "jld" feminine ; - sky_N = mkN "Asman" ; - smoke_N = mkN "dh-waN"; -- singular masc nouns ending with aN,wN yet to be implemented - snow_N = mkN "brf" feminine ; - stick_N = mkN "ch-Ry" ; - tail_N = mkN "dm" ; - tongue_N = mkN "zban" feminine ; - tooth_N = mkN "dant" masculine; - wife_N = mkN "bywy" ; - wind_N = mkN "Andh-y" ; - wing_N = mkN "pr" ; - worm_N = mkN "grm" ; - year_N = mkN "sal" ; - blow_V = mkV "clna" ; - breathe_V = compoundV "sans" (mkV "lyna" ) ; - burn_V = mkV "jlna" ; - dig_V = mkV "kh-wdna" ; - fall_V = mkV "grna" ; - float_V = mkV "tyrna" ; - flow_V = mkV "bhna" ; - fly_V = mkV "aRna" ; - freeze_V = mkV "jmna"; - give_V3 = mkV3 (mkV "dyna") "kw" ""; - laugh_V = mkV "hnsna" ; --- lie_N = mkN "jh-wt" masculine ; - lie_V = compoundV "jh-wt" (mkV "bwlna" ); - play_V = mkV "kh-ylna" ; - sew_V = mkV "syna" ; - sing_V = mkV "gana" ; - sit_V = mkV "byTh-na" ; - smell_V = mkV "swngna" ; - spit_V = mkV "th-wkna" ; - stand_V = compoundV "kh-RE" (mkV "hwna" ); - swell_V = mkV "swjh-na" ; - swim_V = mkV "tyrna" ; - think_V = mkV "swcna" ; - turn_V = mkV "mRna"; - vomit_V = compoundV "alty" (mkV "krna") ; - bite_V2 = mkV2 (mkV "katna") ; - count_V2 = mkV2 (mkV "gnna") ; - cut_V2 = mkV2 (mkV "katna") ; - fear_V2 = mkV2 (mkV "Drna") ; - fight_V2 = mkV2 (mkV "lRna") ; - hit_V2 = mkV2 (compoundV "th-wkr" (mkV "marna" )); - hold_V2 = mkV2 (mkV "pkRna") ; - hunt_V2 = mkV2 (compoundV "Xkar" do_V2); - kill_V2 = mkV2 (compoundV "mar" (mkV "Dalna" )) ; - pull_V2 = mkV2 (mkV "kh-ncna"); - push_V2 = mkV2 (mkV "dh-kylna") "kw" ; - rub_V2 = mkV2 (mkV "rgRna") ; - scratch_V2 = mkV2 (mkV "kh-rcna") "kw" ; - split_V2 = mkV2 (mkV "banta") "kw" ; --- squeeze_V2 = dirV2 (regV "squeeze") ; --- stab_V2 = dirV2 (regDuplV "stab") ; - suck_V2 = mkV2 (mkV "cwsna") ; - throw_V2 = mkV2 (mkV "ph-ynkna") ; - tie_V2 = mkV2 (mkV "bandh-na") ; - wash_V2 = mkV2 (mkV "dh-wna") ; - wipe_V2 = mkV2 (compoundV "Saf" (mkV "krna" )); + left_Ord = {s = "بایاں" ; n = singular}; + right_Ord = {s= "دایاں" ; n = singular}; + far_Adv = mkAdv "دور" ; + correct_A = mkA "صیہ" ; + dry_A = mkA "خشك" ; + dull_A = mkA "نالiك" ; + full_A = mkA "مكمل" ; + heavy_A = mkA "بھاری" ; + near_A = mkA "قریب" ; + rotten_A = mkA "خراب" ; + round_A = mkA "گول" ; + sharp_A = mkA "تیز" ; + smooth_A = mkA "ہموار" ; + straight_A = mkA "سیدھا" ; + wet_A = mkA "گیلا" ; ---- + wide_A = mkA "كھلا" ; + animal_N = mkN "جانور" ; + ashes_N = mkN "راكھ" feminine; -- FIXME: plural only? + back_N = mkN "قمر" feminine ; + bark_N = mkN "بارك" ; + belly_N = mkN "دھنی" ; + blood_N = mkN "خون" ; + bone_N = mkN "ہڈی" ; + breast_N = mkN "چھاتی" ; + cloud_N = mkN "بادل" ; + day_N = mkN "دن" ; + dust_N = mkN "دھول" ; + ear_N = mkN "كان" ; + earth_N = mkN "زمین" feminine ; + egg_N = mkN "انڈہ" ; + eye_N = mkN "آنكھ" feminine ; + fat_N = mkN "موتا" ; + feather_N = mkN "پر" ; + fingernail_N = mkN "ناخن" ; + fire_N = mkN "آگ" feminine ; + flower_N = mkN "پھول" ; + fog_N = mkN "دھند" feminine ; + foot_N = mkN "پاوں" ; -- not properly covered need to be discussed + forest_N = mkN "نجگل" ; + grass_N = mkN "گھس" feminine ; + guts_N = mkN "گuت" ; -- FIXME: no singular + hair_N = mkN "بال" ; + hand_N = mkN "ہاتھ" ; + head_N = mkN "سر" ; + heart_N = mkN "دل" ; + horn_N = mkN "گھنتی" ; + husband_N = mkN "شوہر" ; + ice_N = mkN "برف" feminine ; + knee_N = mkN "كہنی" ; + leaf_N = mkN "پتہ" ; + leg_N = mkN "تانگ" feminine ; + liver_N = mkN "جگر" ; + louse_N = mkN "گھر" ; + mouth_N = mkN "منہ" ; + name_N = mkN "نام" ; + neck_N = mkN "گردن" feminine ; + night_N = mkN "رات" feminine ; + nose_N = mkN "ناك" ; + person_N = mkN "شخص" ; + rain_N = mkN "بارش" feminine ; + road_N = mkN "سڑك" ; + root_N = mkN "گڑ" feminine ; + rope_N = mkN "رسی" ; + salt_N = mkN "نمك" feminine ; + sand_N = mkN "ریت" feminine ; + seed_N = mkN "بیج" ; + skin_N = mkN "جلد" feminine ; + sky_N = mkN "آسمان" ; + smoke_N = mkN "دھواں"; -- singular masc nouns ending with aN,wN yet to be implemented + snow_N = mkN "برف" feminine ; + stick_N = mkN "چھڑی" ; + tail_N = mkN "دم" ; + tongue_N = mkN "زبان" feminine ; + tooth_N = mkN "دانت" masculine; + wife_N = mkN "بیوی" ; + wind_N = mkN "آندھی" ; + wing_N = mkN "پر" ; + worm_N = mkN "گرم" ; + year_N = mkN "سال" ; + blow_V = mkV "چلنا" ; + breathe_V = compoundV "سانس" (mkV "لینا" ) ; + burn_V = mkV "جلنا" ; + dig_V = mkV "كھودنا" ; + fall_V = mkV "گرنا" ; + float_V = mkV "تیرنا" ; + flow_V = mkV "بہنا" ; + fly_V = mkV "اڑنا" ; + freeze_V = mkV "جمنا"; + give_V3 = mkV3 (mkV "دینا") "كو" ""; + laugh_V = mkV "ہنسنا" ; +-- lie_N = mkN "جھوت" masculine ; + lie_V = compoundV "جھوت" (mkV "بولنا" ); + play_V = mkV "كھیلنا" ; + sew_V = mkV "سینا" ; + sing_V = mkV "گانا" ; + sit_V = mkV "بیٹھنا" ; + smell_V = mkV "سونگنا" ; + spit_V = mkV "تھوكنا" ; + stand_V = compoundV "كھڑے" (mkV "ہونا" ); + swell_V = mkV "سوجھنا" ; + swim_V = mkV "تیرنا" ; + think_V = mkV "سوچنا" ; + turn_V = mkV "مڑنا"; + vomit_V = compoundV "التی" (mkV "كرنا") ; + bite_V2 = mkV2 (mkV "كاتنا") ; + count_V2 = mkV2 (mkV "گننا") ; + cut_V2 = mkV2 (mkV "كاتنا") ; + fear_V2 = mkV2 (mkV "ڈرنا") ; + fight_V2 = mkV2 (mkV "لڑنا") ; + hit_V2 = mkV2 (compoundV "تھوكر" (mkV "مارنا" )); + hold_V2 = mkV2 (mkV "پكڑنا") ; + hunt_V2 = mkV2 (compoundV "شكار" do_V2); + kill_V2 = mkV2 (compoundV "مار" (mkV "ڈالنا" )) ; + pull_V2 = mkV2 (mkV "كھنچنا"); + push_V2 = mkV2 (mkV "دھكیلنا") "كو" ; + rub_V2 = mkV2 (mkV "رگڑنا") ; + scratch_V2 = mkV2 (mkV "كھرچنا") "كو" ; + split_V2 = mkV2 (mkV "بانتا") "كو" ; +-- squeeze_V2 = dirV2 (regV "سقuععزع") ; +-- stab_V2 = dirV2 (regDuplV "ستاب") ; + suck_V2 = mkV2 (mkV "چوسنا") ; + throw_V2 = mkV2 (mkV "پھینكنا") ; + tie_V2 = mkV2 (mkV "باندھنا") ; + wash_V2 = mkV2 (mkV "دھونا") ; + wipe_V2 = mkV2 (compoundV "صاف" (mkV "كرنا" )); ----- other_A = regA "other" ; +---- other_A = regA "oتہعر" ; - grammar_N = mkN "grdan" ; - language_N = mkN "zban" feminine ; - rule_N = mkN "aSwl" ; + grammar_N = mkN "گردان" ; + language_N = mkN "زبان" feminine ; + rule_N = mkN "اصول" ; ---- added 4/6/2007 - john_PN = mkPN "jon" ; - question_N = mkN "swal" ; --- ready_A = regA "ready" ; - reason_N = mkN "wjh" feminine ; - today_Adv = mkAdv "Aj" ; - uncertain_A = mkA ["Gyr yqyny"] ; + john_PN = mkPN "جoن" ; + question_N = mkN "سوال" ; +-- ready_A = regA "رعادی" ; + reason_N = mkN "وجہ" feminine ; + today_Adv = mkAdv "آج" ; + uncertain_A = mkA ["غیر یقینی"] ; } diff --git a/lib/src/urdu/Makefile b/lib/src/urdu/Makefile new file mode 100644 index 000000000..b567981ee --- /dev/null +++ b/lib/src/urdu/Makefile @@ -0,0 +1,5 @@ +all: transliterate + +transliterate: + gf Noun ; regNoun s = case s of { - _ + "ya" => mkN05 (s); - _ + ("a"|"e"|"h") => mkN01 (s); - _ + "y" => mkN03 (s); - _ + ("aN"|"wN") => mkN04 (s); - _ + "w^" => mkN12 (s); + _ + "یا" => mkN05 (s); + _ + ("ا"|"ع"|"ہ") => mkN01 (s); + _ + "ی" => mkN03 (s); + _ + ("اں"|"وں") => mkN04 (s); + _ + "ؤ" => mkN12 (s); _ => regNoun2 (s) }; regNoun2 : Str -> Noun; - regNoun2 s = let c = if_then_else Bool (eq (last s) "a" ) True (if_then_else Bool (eq (last s) "h") True (if_then_else Bool (eq (last s) "e") True False)) + regNoun2 s = let c = if_then_else Bool (eq (last s) "ا" ) True (if_then_else Bool (eq (last s) "ہ") True (if_then_else Bool (eq (last s) "ع") True False)) in case c of { False => mkN02 (s); True => mkN01 (s) }; reggNoun : Str -> Gender -> Noun ; - reggNoun s g = let c = if_then_else Bool (eq (last s) "a" ) True (if_then_else Bool (eq (dp 2 s) "aN") True (if_then_else Bool (eq (dp 2 s) "wN") True False)) + reggNoun s g = let c = if_then_else Bool (eq (last s) "ا" ) True (if_then_else Bool (eq (dp 2 s) "اں") True (if_then_else Bool (eq (dp 2 s) "وں") True False)) in case of { - <_ + "t",Fem,_> => mkN10 (s); - <_ + "t",Masc,_> => mkN02 (s); - <_ + "w",Masc,_> => mkN11 (s); - <_ + "w",Fem,_> => mkN07 (s); - <_ + "ya",Fem,_> => mkN05 (s); - <_ + "ya",Masc,_> => mkN02 (s); + <_ + "ت",Fem,_> => mkN10 (s); + <_ + "ت",Masc,_> => mkN02 (s); + <_ + "و",Masc,_> => mkN11 (s); + <_ + "و",Fem,_> => mkN07 (s); + <_ + "یا",Fem,_> => mkN05 (s); + <_ + "یا",Masc,_> => mkN02 (s); <_,Fem,False> => mkN08 (s); <_,Fem,_> => mkN09 (s) @@ -70,15 +70,15 @@ oper mkN01 : Str -> Noun ; mkN01 lRka = let end = last (lRka) ; - lRk = if_then_else Str (eq end "e") lRka (tk 1 lRka) - in mkNoun (lRka) (lRk+"E") (lRk+"E") - (lRk+"E") (lRk+"wN") (lRk+"w") + lRk = if_then_else Str (eq end "ع") lRka (tk 1 lRka) + in mkNoun (lRka) (lRk+"ے") (lRk+"ے") + (lRk+"ے") (lRk+"وں") (lRk+"و") Masc ; -- masculine nouns does not end with a, h, e, an mkN02 : Str -> Noun ; - mkN02 mrd = let mrdwN = mrd+"wN" ; + mkN02 mrd = let mrdwN = mrd+"وں" ; mrdw = tk 1 mrdwN in mkNoun mrd mrd mrd mrd mrdwN mrdw @@ -87,8 +87,8 @@ oper -- feminine Nouns end with y mkN03 : Str -> Noun ; - mkN03 krsy = let krsyaN = krsy+"aN" ; - krsywN = krsy+"wN" ; + mkN03 krsy = let krsyaN = krsy+"اں" ; + krsywN = krsy+"وں" ; krsyw = tk 1 krsywN in mkNoun krsy krsy krsy krsyaN krsywN krsyw @@ -97,14 +97,14 @@ oper -- feminine nouns end with a, aN, wN mkN04 : Str -> Noun ; mkN04 n = case last n of { - "a" => let bla = n + "ا" => let bla = n in mkNoun bla bla bla - (bla+"y^yN") (bla+"w^N") (bla+"w^") + (bla+"ئیں") (bla+"ؤں") (bla+"ؤ") Fem ; _ => let maN = n ; -- ends with aN and wN ma = tk 1 maN in mkNoun maN maN maN - (ma+"y^yN") (ma+"w^N") (ma+"w^N") + (ma+"ئیں") (ma+"ؤں") (ma+"ؤں") Fem }; @@ -113,14 +113,14 @@ oper mkN05 : Str -> Noun ; mkN05 gRya = let gRy = (tk 1 gRya) in mkNoun gRya gRya gRya - (gRya+"N") (gRy+"wN") (gRy+"w") + (gRya+"ں") (gRy+"وں") (gRy+"و") Fem ; -- feminine nouns end with w mkN07 : Str -> Noun ; mkN07 khshbw = mkNoun khshbw khshbw khshbw - (khshbw + "y^yN") (khshbw + "w^N") (khshbw + "w^") + (khshbw + "ئیں") (khshbw + "ؤں") (khshbw + "ؤ") Fem ; -- Loan arabic feminine nouns end with t @@ -128,7 +128,7 @@ oper mkN10 : Str -> Noun ; mkN10 ndamt = mkNoun ndamt ndamt ndamt - (ndamt+"yN") (ndamt+"wN") (ndamt+"w") + (ndamt+"یں") (ndamt+"وں") (ndamt+"و") Fem ; -- Worst case function mkN : (_,_,_,_,_,_ : Str) -> Gender -> Noun ; @@ -137,28 +137,28 @@ oper mkN06 : Str -> Noun ; mkN06 rya = mkNoun rya rya rya - (rya+"y^yN") (rya+"w^N") rya + (rya+"ئیں") (rya+"ؤں") rya Fem ; -- feminine nouns that do not end with a, N, w, wN mkN08 : Str -> Noun ; mkN08 ktab = mkNoun ktab ktab ktab - (ktab+"yN") (ktab+"wN") (ktab+"w") + (ktab+"یں") (ktab+"وں") (ktab+"و") Fem ; -- Loan arabic feminine nouns mkN09 : Str -> Noun ; mkN09 ahsan = mkNoun ahsan ahsan ahsan - (ahsan+"at") (ahsan+"at") (ahsan+"w") + (ahsan+"ات") (ahsan+"ات") (ahsan+"و") Fem ; --- (variants{ahsan+"at";ahsan+"wN"}) +-- (variants{ahsan+"ات";ahsan+"وں"}) -- Loan persian maculine nouns end with w mkN11 : Str -> Noun ; mkN11 alw = mkNoun alw alw alw - alw (alw+"w^N") (alw+"w^") + alw (alw+"ؤں") (alw+"ؤ") Masc ; @@ -291,8 +291,8 @@ oper }; makePersPron : PersPron; - makePersPron = mkPersPron "m(a)yN" "m(o)j'|h" "" "t(o)w " "t(o)j|h" "t(o)w " "t(o)m" "t(o)m" "t(o)m" "Ap" "Ap" "Ap" "y(i)h" "a(i)s" "" "w(o)h" "a(o)s" "" - "h(a)m" "h(a)m" "" "t(o)m" "t(o)m" "t(o)m" "t(o)m" "t(o)m" "t(o)m" "Ap" "Ap" "Ap" "y(i)h" "a(i)n" "" "w(o)h" "a(o)n" "" ; + makePersPron = mkPersPron "m(a)یں" "m(o)j'|ہ" "" "t(o)و " "t(o)j|ہ" "t(o)و " "t(o)م" "t(o)م" "t(o)م" "آپ" "آپ" "آپ" "y(i)ہ" "a(i)س" "" "w(o)ہ" "a(o)س" "" + "h(a)م" "h(a)م" "" "t(o)م" "t(o)م" "t(o)م" "t(o)م" "t(o)م" "t(o)م" "آپ" "آپ" "آپ" "y(i)ہ" "a(i)ن" "" "w(o)ہ" "a(o)ن" "" ; mkPron : (x1,x2,x3:Str) -> {s:Case => Str} = \y1,y2,y3 -> { s = @@ -324,7 +324,7 @@ oper CommonVF = {s : VTense => UPerson => Number => Gender => Str} ; mkVerb : (x1: Str) -> Verb = \inf -> - let root = (tk 2 inf); inf_obl = ((tk 1 inf) + "E"); inf_fem = ((tk 1 inf) + "y") + let root = (tk 2 inf); inf_obl = ((tk 1 inf) + "ے"); inf_fem = ((tk 1 inf) + "ی") in { s = table { VF tense person number gender => (mkCmnVF root tense person number gender).s ; @@ -337,7 +337,7 @@ oper } } ; rem_y : Str -> Str; - rem_y str = let b = take 1 str; yth = drop 1 str; a1 = take 4 yth; a2 = take 1 yth; th= if_then_else Str (eq a1 "(a)y") (drop 5 str) (drop 2 str); st = if_then_else Str (eq a1 "(a)y") (b ++ "(i)"++th) (if_then_else Str (eq a2 "y") (b ++ th) str) + rem_y str = let b = take 1 str; yth = drop 1 str; a1 = take 4 yth; a2 = take 1 yth; th= if_then_else Str (eq a1 "(a)ی") (drop 5 str) (drop 2 str); st = if_then_else Str (eq a1 "(a)ی") (b ++ "(i)"++th) (if_then_else Str (eq a2 "ی") (b ++ th) str) in rt st; rt: Str -> Str; rt r = r; @@ -345,12 +345,12 @@ oper \root,t,p,n,g -> {s = let form1 = case (last root) of { - "a"|"A"|"w" => root + "w^N" ; - _ => root + "wN" + "ا"|"آ"|"و" => root + "ؤں" ; + _ => root + "وں" }; form2 = case (last root) of { - "a"|"A"|"w" => root + "y^N" ; - _ => root + "yN" + "ا"|"آ"|"و" => root + "ئں" ; + _ => root + "یں" }; in case of { @@ -358,24 +358,24 @@ oper => form2 ; => (mkImpert root p n g).s ; => case root of { - "hw" => (mkPastInd root p n g).s ; - "ja" => (mkPastInd "gy" p n g).s ; - "kr" => (mkPastInd "k" p n g).s ; - "dE" => (mkPastInd "d" p n g).s ; - "lE" => (mkPastInd "l" p n g).s ; + "ہو" => (mkPastInd root p n g).s ; + "جا" => (mkPastInd "گی" p n g).s ; + "كر" => (mkPastInd "ك" p n g).s ; + "دے" => (mkPastInd "د" p n g).s ; + "لے" => (mkPastInd "ل" p n g).s ; _ => (mkPastInd root p n g).s }; - => root + "tE"; - => root + "ty"; --variants{root+"ty" ; root+"tyN"}; - => root + "tE"; - => root+"tyN"; - => root + "tE"; - => root + "ty"; --variants{root+"ty" ; root+"tyN"}; - => root + "tE"; - => root+"tyN"; - => root+"ta"; - => root+"ty"; - => root+"te"; - => root+"tyN" + => root + "تے"; + => root + "تی"; --variants{root+"تی" ; root+"تیں"}; + => root + "تے"; + => root+"تیں"; + => root + "تے"; + => root + "تی"; --variants{root+"تی" ; root+"تیں"}; + => root + "تے"; + => root+"تیں"; + => root+"تا"; + => root+"تی"; + => root+"تع"; + => root+"تیں" } } ; @@ -383,20 +383,20 @@ oper mkPastInd : Str -> UPerson -> Number -> Gender -> {s:Str} = \root,p,n,g -> {s = let roo = root ; a = case (last root) of { - "a"|"A"|"w"|"k" => "ya" ; - _ => "a" + "ا"|"آ"|"و"|"ك" => "یا" ; + _ => "ا" } ; y = case (last root) of { - "a"|"A"|"w" => "y^y" ; - _ => "y" + "ا"|"آ"|"و" => "ئی" ; + _ => "ی" } ; e = case (last root) of { - "a"|"A"|"w"|"k" => "y^E" ; - _ => "E" + "ا"|"آ"|"و"|"ك" => "ئے" ; + _ => "ے" } ; yN = case (last root) of { - "a"|"A"|"w" => "y^yN" ; - _ => "yN" + "ا"|"آ"|"و" => "ئیں" ; + _ => "یں" } ; in @@ -431,20 +431,20 @@ oper mkImpert : Str -> UPerson -> Number -> Gender -> {s:Str} = \root,p,n,g -> {s = let roo = root ; w = case (last root) of { - "a"|"A"|"w" => "w^" ; - _ => "w" + "ا"|"آ"|"و" => "ؤ" ; + _ => "و" } ; yN = case (last root) of { - "a"|"A"|"w" => "y^yN" ; - _ => "yN" + "ا"|"آ"|"و" => "ئیں" ; + _ => "یں" } ; yE = case (last root) of { - "a"|"A"|"w" => "y^yE" ; - _ => "yE" + "ا"|"آ"|"و" => "ئیے" ; + _ => "یے" } ; e = case (last root) of { - "a"|"A"|"w" => "y^E" ; - _ => "E" + "ا"|"آ"|"و" => "ئے" ; + _ => "ے" } in case of { => ""; --nonExist ; diff --git a/lib/src/urdu/NounUrd.gf b/lib/src/urdu/NounUrd.gf index b9c84b93a..c9fe05acc 100644 --- a/lib/src/urdu/NounUrd.gf +++ b/lib/src/urdu/NounUrd.gf @@ -22,7 +22,7 @@ concrete NounUrd of Noun = CatUrd ** open ResUrd, Prelude in { } ; RelNP np rs = { - s = \\c => np.s ! c ++ "," ++ rs.s ! np.a ; + s = \\c => np.s ! c ++ comma_Str ++ rs.s ! np.a ; a = np.a } ; @@ -65,18 +65,6 @@ concrete NounUrd of Noun = CatUrd ** open ResUrd, Prelude in { OrdSuperl a = {s = a.s ! Sg ! Masc ! Dir ! Superl ; n = Sg} ; - - - DetArtSg art cn = { - s = \\c => art.s ++ toNP (cn.s ! Sg) c ; - a = agrP3 cn.g Sg - } ; - - DetArtPl art cn = { - s = \\c => art.s ++ toNP (cn.s ! Pl) c ; - a = agrP3 cn.g Pl - } ; - DefArt = {s = \\_,_,_ => [] ; a = defaultAgr} ; IndefArt = {s = \\_,_,_ => [] ; a =defaultAgr } ; diff --git a/lib/src/urdu/NumeralUrd.gf b/lib/src/urdu/NumeralUrd.gf index 70059c3e9..207ce90f5 100644 --- a/lib/src/urdu/NumeralUrd.gf +++ b/lib/src/urdu/NumeralUrd.gf @@ -1,5 +1,5 @@ concrete NumeralUrd of Numeral = CatUrd ** open ResUrd in { --- By Harald Hammarstrm +-- By Harald Hammarström -- Modification for Urdu Shafqat Virk flags coding=utf8 ; --- still old Devanagari coding @@ -22,18 +22,18 @@ lincat Sub1000000 = { s : Str ; n : Number } ; lin num x0 = {s = table { NCard => x0.s ; - NOrd => x0.s ++ "waN" -- need to use mkOrd which will make irregular ordinals but it gives path error + NOrd => x0.s ++ "واں" -- need to use mkOrd which will make irregular ordinals but it gives path error }; n = x0.n } ; oper mkOrd : Str -> Str = \s -> case s of { - "ek" => "phla"; - "do" => "dwsra"; - "ti:n" => "tesra"; - "ca:r" => "cwth-a"; - ("cHah"|"cHa"|"cHai") => "ch-Ta"; - _ => s ++ "waN" + "عك" => "پہلا"; + "دo" => "دوسرا"; + "تi:ن" => "تعسرا"; + "چa:ر" => "چوتھا"; + ("چحاہ"|"چحا"|"چحاi") => "چھٹا"; + _ => s ++ "واں" }; -- {s = \\_ => x0.s ; n = x0.n} ; @@ -43,47 +43,47 @@ oper mkNum : Str -> Str -> DSize -> LinDigit = {s = table {unit => do ; ten => bis } ; size = sz ; n = Pl} ; -lin n2 = mkNum "dw" "bys" r2 ; -lin n3 = mkNum "tyn" "tys" r3 ; -lin n4 = mkNum "car" "calys" r4 ; -lin n5 = mkNum "panc" "pcas" r5 ; -lin n6 = mkNum "ch-" "sath-" r6 ; -lin n7 = mkNum "sat" "str" r7; -lin n8 = mkNum "Ath-" "asy" r8; -lin n9 = mkNum "nw" "nwE" r9 ; +lin n2 = mkNum "دو" "بیس" r2 ; +lin n3 = mkNum "تین" "تیس" r3 ; +lin n4 = mkNum "چار" "چالیس" r4 ; +lin n5 = mkNum "پانچ" "پچاس" r5 ; +lin n6 = mkNum "چھ" "ساتھ" r6 ; +lin n7 = mkNum "سات" "ستر" r7; +lin n8 = mkNum "آتھ" "اسی" r8; +lin n9 = mkNum "نو" "نوے" r9 ; oper mkR : Str -> Str -> Str -> Str -> Str -> Str -> Str -> Str -> Str -> DSize => Str = \a1 -> \a2 -> \a3 -> \a4 -> \a5 -> \a6 -> \a7 -> \a8 -> \a9 -> table { - sg => a1 + "ah" ; - r2 => a2 + "i:s" ; - r3 => a3 + "ti:s" ; - r4 => a4 + "a:li:s" ; - r5 => a5 + "an" ; - r6 => a6 + "saTH" ; - r7 => a7 + "hattar" ; - r8 => a8 + "a:si:" ; - r9 => a9 + "a:nave" + sg => a1 + "اہ" ; + r2 => a2 + "i:س" ; + r3 => a3 + "تi:س" ; + r4 => a4 + "a:لi:س" ; + r5 => a5 + "ان" ; + r6 => a6 + "ساٹح" ; + r7 => a7 + "ہاتتار" ; + r8 => a8 + "a:سi:" ; + r9 => a9 + "a:ناvع" } ; oper rows : DSize => DSize => Str = table { - sg => mkR "gyarh" "ikk" "ikat" "ekt" "ikyaw" "ik" "ik" "iky" "iky" ; - r2 => mkR "barh" "bay" "bat" "bay" "baw" "ba" "ba" "bay" "b" ; - r3 => mkR "tyr" "ty" "tyn" "tnt" "trp" "try" "t" "tr" "tr" ; - r4 => mkR "cwd" "cwb" "cwn" "cwa" "cww" "cwn" "cwh" "cwr" "cwr" ; - r5 => mkR "pnd" "pcy" "pyn" "pnta" "pcp" "pyn" "ph" "pc" "pc" ; - r6 => mkR "swl" "ch-b" "ch-t" "ch-y" "ch-p" "ch-ya" "ch-" "ch-y" "ch-y" ; - r7 => mkR "str" "sta" "syn" "snt" "staw" "sta" "sr" "st" "sta" ; - r8 => mkR "ath-ar" "ath-ay" "aR" "aRt" "ath-aw" "aR" "ath-" "ath-" "ath-" ; - r9 => table {sg => "anys" ; r2 => "antys" ; r3 => "antalys" ; - r4 => "ancas" ; r5 => "ansth-" ; r6 => "anhtr" ; - r7 => "anasy" ; - r8 => "ananwE" ; r9 => "nnanwE" } + sg => mkR "گیارہ" "iكك" "iكات" "عكت" "iكیاو" "iك" "iك" "iكی" "iكی" ; + r2 => mkR "بارہ" "بای" "بات" "بای" "باو" "با" "با" "بای" "ب" ; + r3 => mkR "تیر" "تی" "تین" "تنت" "ترپ" "تری" "ت" "تر" "تر" ; + r4 => mkR "چود" "چوب" "چون" "چوا" "چوو" "چون" "چوہ" "چور" "چور" ; + r5 => mkR "پند" "پچی" "پین" "پنتا" "پچپ" "پین" "پہ" "پچ" "پچ" ; + r6 => mkR "سول" "چھب" "چھت" "چھی" "چھپ" "چھیا" "چھ" "چھی" "چھی" ; + r7 => mkR "ستر" "ستا" "سین" "سنت" "ستاو" "ستا" "سر" "ست" "ستا" ; + r8 => mkR "اتھار" "اتھای" "اڑ" "اڑت" "اتھاو" "اڑ" "اتھ" "اتھ" "اتھ" ; + r9 => table {sg => "انیس" ; r2 => "انتیس" ; r3 => "انتالیس" ; + r4 => "انچاس" ; r5 => "انستھ" ; r6 => "انہتر" ; + r7 => "اناسی" ; + r8 => "انانوے" ; r9 => "ننانوے" } } ; oper ss : Str -> {s : Str} = \s -> {s = s} ; -lin pot01 = {s = table {unit => "ayk" ; _ => "dummy" } ; size = sg ; n = Sg} ; +lin pot01 = {s = table {unit => "ایك" ; _ => "دuممی" } ; size = sg ; n = Sg} ; lin pot0 d = d ; -lin pot110 = {s = "das" ; size = less100 ; n = Pl} ; +lin pot110 = {s = "داس" ; size = less100 ; n = Pl} ; lin pot111 = {s = rows ! sg ! sg ; size = less100 ; n = Pl} ; lin pot1to19 d = {s = rows ! d.size ! sg ; size = less100 ; n = d.n} ; lin pot0as1 n = {s = n.s ! unit ; size = table {sg => sing ; _ => less100} ! n.size ; n = n.n } ; @@ -91,21 +91,21 @@ lin pot0as1 n = {s = n.s ! unit ; size = table {sg => sing ; _ => less100} ! n.s lin pot1 d = {s = d.s ! ten ; size = less100 ; n = d.n} ; lin pot1plus d e = {s = rows ! e.size ! d.size ; size = less100 ; n = d.n} ; -lin pot1as2 n = {s = n.s ; s2 = "dummy" ; size = n.size ; n = n.n} ; +lin pot1as2 n = {s = n.s ; s2 = "دuممی" ; size = n.size ; n = n.n} ; lin pot2 d = {s = (mksau (d.s ! unit) d.size) ; - s2 = d.s ! unit ++ "lakh-" ; size = more100 ; n = d.n} ; + s2 = d.s ! unit ++ "لاكھ" ; size = more100 ; n = d.n} ; lin pot2plus d e = {s = (mksau (d.s ! unit) d.size) ++ e.s ; - s2 = (d.s ! unit) ++ "lakh-" ++ (mkhazar e.s e.size) ; + s2 = (d.s ! unit) ++ "لاكھ" ++ (mkhazar e.s e.size) ; size = more100 ; n = d.n} ; lin pot2as3 n = {s = n.s ; n = n.n} ; lin pot3 n = {s = table { sing => ekhazar ; - less100 => n.s ++ "hzar" ; + less100 => n.s ++ "ہزار" ; more100 => n.s2 } ! n.size ; n = n.n} ; lin pot3plus n m = {s = table {sing => ekhazar ; - less100 => n.s ++ "hzar" ; + less100 => n.s ++ "ہزار" ; more100 => n.s2 } ! n.size ++ m.s ; n = n.n} ; lin D_0 = { s = "0" ; n = Sg}; @@ -121,7 +121,7 @@ lin D_9 = { s = "9" ; n = Pl}; lin IDig d = { s = \\_ => d.s ; n = d.n} ; lin IIDig d dg = { s = \\df => dg.s ! df ++ d.s ; n = Pl }; -- need to use + rather than ++, but gives error need to discuss -oper ekhazar : Str = variants {"hzar" ; "ayk" ++ "hzar"} ; -oper mkhazar : Str -> Size -> Str = \s -> \sz -> table {sing => ekhazar ; _ => s ++ "hzar"} ! sz ; -oper mksau : Str -> DSize -> Str = \s -> \sz -> table {sg => "sw" ; _ => s ++ "sw"} ! sz ; +oper ekhazar : Str = variants {"ہزار" ; "ایك" ++ "ہزار"} ; +oper mkhazar : Str -> Size -> Str = \s -> \sz -> table {sing => ekhazar ; _ => s ++ "ہزار"} ! sz ; +oper mksau : Str -> DSize -> Str = \s -> \sz -> table {sg => "سو" ; _ => s ++ "سو"} ! sz ; } diff --git a/lib/src/urdu/ParadigmsUrd.gf b/lib/src/urdu/ParadigmsUrd.gf index 8b0c4e3dd..8c08682cc 100644 --- a/lib/src/urdu/ParadigmsUrd.gf +++ b/lib/src/urdu/ParadigmsUrd.gf @@ -92,7 +92,7 @@ oper ----2 Prepositions mkPrep : Str -> Prep ; - mkPrep str = makePrep str ; + mkPrep str = lin Prep (makePrep str) ; --2 Conjunctions mkConj : overload { diff --git a/lib/src/urdu/QuestionUrd.gf b/lib/src/urdu/QuestionUrd.gf index 82979df5a..6450895dc 100644 --- a/lib/src/urdu/QuestionUrd.gf +++ b/lib/src/urdu/QuestionUrd.gf @@ -1,20 +1,19 @@ concrete QuestionUrd of Question = CatUrd ** open ResUrd, Prelude in { flags optimize=all_subs ; - coding = utf8; lin QuestCl cl = { s = \\t,p,qf => case qf of { QDir => cl.s ! t ! p ! OQuest; - QIndir => "agr" ++ cl.s ! t! p ! ODir + QIndir => agr_Str ++ cl.s ! t! p ! ODir } }; QuestVP qp vp = - let cl = mkSClause ("") (Ag qp.g qp.n Pers3_Near) vp; + let cl = mkSClause [] (Ag qp.g qp.n Pers3_Near) vp; qp1 = qp.s ! Dir; - qp2 = qp.s ! Obl ++ "nE" + qp2 = qp.s ! Obl ++ nE_Str in { s = \\t,p,o => case t of { VPImpPast => qp2 ++ cl.s ! t ! p ! ODir; _ => qp1 ++ cl.s ! t ! p ! ODir @@ -22,7 +21,7 @@ concrete QuestionUrd of Question = CatUrd ** open ResUrd, Prelude in { }; QuestSlash ip slash = let ip1 = ip.s ! Dir; - ip2 = ip.s ! Obl ++ "nE" + ip2 = ip.s ! Obl ++ nE_Str in { s = \\t,p,o => case t of { VPImpPast => ip2 ++ slash.s ! t ! p ! ODir; diff --git a/lib/src/urdu/RelativeUrd.gf b/lib/src/urdu/RelativeUrd.gf index b2286c5ff..82ab0f1e9 100644 --- a/lib/src/urdu/RelativeUrd.gf +++ b/lib/src/urdu/RelativeUrd.gf @@ -1,15 +1,14 @@ concrete RelativeUrd of Relative = CatUrd ** open ResUrd in { flags optimize=all_subs ; - coding = utf8; lin RelCl cl = { s = \\t,p,o,agr => case of { - => "js" ++ cl.s ! t ! p ! o ; - => "jn" ++ cl.s ! t ! p ! o ; - <_,_> => "jw" ++ cl.s ! t ! p ! o + => js_Str ++ cl.s ! t ! p ! o ; + => jn_Str ++ cl.s ! t ! p ! o ; + <_,_> => jw_Str ++ cl.s ! t ! p ! o }; c = Dir } ; @@ -33,9 +32,6 @@ concrete RelativeUrd of Relative = CatUrd ** open ResUrd in { c = Dir } ; -- ----- Pied piping: "at which we are looking". Stranding and empty ----- relative are defined in $ExtraHin.gf$ ("that we are looking at", ----- "we are looking at"). -- RelSlash rp slash = { s = \\t,p,o,agr => rp.s ! (giveNumber agr) ! Dir ++ slash.c2.s ++ slash.s ! t ! p ! o ;--case t of { @@ -54,14 +50,14 @@ concrete RelativeUrd of Relative = CatUrd ** open ResUrd in { s = table { Sg => table { - ResUrd.Dir => "jw" ; - ResUrd.Obl => "js" ; - ResUrd.Voc => "js" + ResUrd.Dir => jw_Str ; + ResUrd.Obl => js_Str ; + ResUrd.Voc => js_Str }; Pl => table { - ResUrd.Dir => "jw" ; - ResUrd.Obl => "jn" ; - ResUrd.Voc => "jn" + ResUrd.Dir => jw_Str ; + ResUrd.Obl => jn_Str ; + ResUrd.Voc => jn_Str } }; a = RNoAg diff --git a/lib/src/urdu/ResUrd.gf b/lib/src/urdu/ResUrd.gf index 416ca5387..6612f764b 100644 --- a/lib/src/urdu/ResUrd.gf +++ b/lib/src/urdu/ResUrd.gf @@ -147,10 +147,10 @@ resource ResUrd = ParamX ** open Prelude,Predef in { regAdjective : Str -> Adjective; regAdjective x = case x of { - acch + ("a"|"aN") => mkAdjective x ("bht" ++ x) ("sab sE" ++ x) (acch + "E") ("bht" ++ acch + "E") ("sab sE" ++ acch + "E") (acch + "E") ("bht" ++ acch + "E") ("sab sE" ++ acch + "E") - (acch + "y") ("bht" ++ acch + "y") ("sab sE" ++ acch + "y") (acch + "y") ("bht" ++ acch + "y") ("sab sE" ++ acch + "y") (acch + "y") ("bht" ++ acch + "y") ("sab sE" ++ acch + "y") - (acch +"E") ("bht" ++ acch + "E") ("sab sE" ++ acch + "E") (acch + "E") ("bht" ++ acch + "E") ("sab sE" ++ acch + "E") (acch + "E") ("bht" ++ acch + "E") ("sab sE" ++ acch + "E") - (acch + "y") ("bht" ++ acch + "y") ("sab sE" ++ acch + "y") (acch + "y") ("bht" ++ acch + "y") ("sab sE" ++ acch + "y") (acch + "y") ("bht" ++ acch + "y") ("sab sE" ++ acch + "y"); + acch + ("ا"|"اں") => mkAdjective x ("بہت" ++ x) ("ساب سے" ++ x) (acch + "ے") ("بہت" ++ acch + "ے") ("ساب سے" ++ acch + "ے") (acch + "ے") ("بہت" ++ acch + "ے") ("ساب سے" ++ acch + "ے") + (acch + "ی") ("بہت" ++ acch + "ی") ("ساب سے" ++ acch + "ی") (acch + "ی") ("بہت" ++ acch + "ی") ("ساب سے" ++ acch + "ی") (acch + "ی") ("بہت" ++ acch + "ی") ("ساب سے" ++ acch + "ی") + (acch +"ے") ("بہت" ++ acch + "ے") ("ساب سے" ++ acch + "ے") (acch + "ے") ("بہت" ++ acch + "ے") ("ساب سے" ++ acch + "ے") (acch + "ے") ("بہت" ++ acch + "ے") ("ساب سے" ++ acch + "ے") + (acch + "ی") ("بہت" ++ acch + "ی") ("ساب سے" ++ acch + "ی") (acch + "ی") ("بہت" ++ acch + "ی") ("ساب سے" ++ acch + "ی") (acch + "ی") ("بہت" ++ acch + "ی") ("ساب سے" ++ acch + "ی"); _ => mkAdjective x x x x x x x x x x x x x x x x x x @@ -161,7 +161,7 @@ resource ResUrd = ParamX ** open Prelude,Predef in { RefPron : Str; - RefPron = "Kwd"; + RefPron = "خود"; ---------------------------------------------------------- -- Grammar part @@ -175,23 +175,23 @@ resource ResUrd = ParamX ** open Prelude,Predef in { np2pronCase : (Case => Str) -> NPCase -> Str = \ppf,npc -> case npc of { NPC c => ppf ! c; NPObj => ppf ! Dir ; - NPErg => ppf ! Obl ++ "ne" + NPErg => ppf ! Obl ++ "نع" } ; toNP : ( Case => Str) -> NPCase -> Str = \pn, npc -> case npc of { NPC c => pn ! c ; NPObj => pn ! Dir ; - NPErg => pn ! Obl ++ "ne" + NPErg => pn ! Obl ++ "نع" } ; detcn2NP : (Determiner) -> Noun -> NPCase -> Number -> Str = \dt,cn,npc,nn -> case npc of { NPC c => dt.s ! Sg ! Masc ++ cn.s ! nn ! Dir ; NPObj => dt.s ! Sg ! Masc ++ cn.s ! nn ! Dir ; - NPErg => dt.s ! Sg ! Masc ++ cn.s ! nn ! Obl ++ "ne" + NPErg => dt.s ! Sg ! Masc ++ cn.s ! nn ! Obl ++ "نع" } ; det2NP : (Determiner) -> NPCase -> Str = \dt,npc -> case npc of { NPC c => dt.s ! Sg ! Masc ; NPObj => dt.s ! Sg ! Masc ; - NPErg => dt.s ! Sg ! Masc ++ "ne" + NPErg => dt.s ! Sg ! Masc ++ "نع" } ; ------------------------------------------ @@ -243,66 +243,66 @@ resource ResUrd = ParamX ** open Prelude,Predef in { oper copula : CTense -> Number -> UPerson -> Gender -> Str = \t,n,p,g -> case of { - => "hwN" ; - => "hE" ; - => "hw" ; - => "hyN" ; - => "hE" ; - => "hE" ; - => "hyN" ; - => "hw" ; - => "hw" ; - => "hyN" ; - => "hyN" ; - => "hyN" ; - => "th-a" ; - => "th-y" ; - => "th-a" ; - => "th-y" ; - => "th-a" ; - => "th-y" ; - => "th-E" ; - => "th-yN" ; - => "th-a" ; - => "th-y" ; - => "th-a" ; - => "th-y" ; - => "th-E" ; - => "th-yN" ; - => "th-E" ; - => "th-yN" ; - => "th-E" ; - => "th-yN" ; - => "th-E" ; - => "th-yN" ; - => "th-E" ; - => "th-yN" ; - => "th-E" ; - => "th-yN" ; - => "ga" ; - => "gy" ; - => "ga" ; - => "gi" ; - => "gE" ; - => "gy" ; - => "gE" ; - => "gy" ; - => "ga" ; - => "gy" ; - => "ga" ; - => "gy" ; - => "gE" ; - => "gy" ; - => "gE" ; - => "gy" ; - => "gE" ; - => "gy" ; - => "gE" ; - => "gy" ; - => "gE" ; - => "gE" ; - => "gE" ; - => "gy" + => "ہوں" ; + => "ہے" ; + => "ہو" ; + => "ہیں" ; + => "ہے" ; + => "ہے" ; + => "ہیں" ; + => "ہو" ; + => "ہو" ; + => "ہیں" ; + => "ہیں" ; + => "ہیں" ; + => "تھا" ; + => "تھی" ; + => "تھا" ; + => "تھی" ; + => "تھا" ; + => "تھی" ; + => "تھے" ; + => "تھیں" ; + => "تھا" ; + => "تھی" ; + => "تھا" ; + => "تھی" ; + => "تھے" ; + => "تھیں" ; + => "تھے" ; + => "تھیں" ; + => "تھے" ; + => "تھیں" ; + => "تھے" ; + => "تھیں" ; + => "تھے" ; + => "تھیں" ; + => "تھے" ; + => "تھیں" ; + => "گا" ; + => "گی" ; + => "گا" ; + => "گi" ; + => "گے" ; + => "گی" ; + => "گے" ; + => "گی" ; + => "گا" ; + => "گی" ; + => "گا" ; + => "گی" ; + => "گے" ; + => "گی" ; + => "گے" ; + => "گی" ; + => "گے" ; + => "گی" ; + => "گے" ; + => "گی" ; + => "گے" ; + => "گے" ; + => "گے" ; + => "گی" } ; @@ -314,19 +314,19 @@ resource ResUrd = ParamX ** open Prelude,Predef in { |VPFutr; VPHTense = - VPGenPres -- impf hum nahim "I go" - | VPImpPast -- impf Ta nahim "I went" - | VPFut -- fut na/nahim "I shall go" - | VPContPres -- stem raha hum nahim "I am going" - | VPContPast -- stem raha Ta nahim "I was going" + VPGenPres -- impf hum nahim "I گo" + | VPImpPast -- impf Ta nahim "I وعنت" + | VPFut -- fut na/nahim "I سہالل گo" + | VPContPres -- stem raha hum nahim "I ام گoiنگ" + | VPContPast -- stem raha Ta nahim "I واس گoiنگ" | VPContFut - | VPPerfPres -- perf hum na/nahim "I have gone" - | VPPerfPast -- perf Ta na/nahim "I had gone" + | VPPerfPres -- perf hum na/nahim "I ہاvع گoنع" + | VPPerfPast -- perf Ta na/nahim "I ہاد گoنع" | VPPerfFut | VPPerfPresCont | VPPerfPastCont | VPPerfFutCont - | VPSubj -- subj na "I may go" + | VPSubj -- subj na "I مای گo" ; VPHForm = @@ -383,16 +383,16 @@ resource ResUrd = ParamX ** open Prelude,Predef in { raha : Gender -> Number -> Str = \g,n -> - (regAdjective "rha").s ! n ! g ! Dir ! Posit ; + (regAdjective "رہا").s ! n ! g ! Dir ! Posit ; cka : Gender -> Number -> Str = \g,n -> - (regAdjective "cka").s ! n ! g ! Dir ! Posit ; + (regAdjective "چكا").s ! n ! g ! Dir ! Posit ; hw : UPerson -> Number -> Str = \pp,n -> case of { - => "hwN"; - <_,Pl> => "hwN"; - <_,_> => "hw" + => "ہوں"; + <_,Pl> => "ہوں"; + <_,_> => "ہو" }; predAux : Aux -> VPH = \verb -> { @@ -407,7 +407,7 @@ resource ResUrd = ParamX ** open Prelude,Predef in { VPTense VPPres (Ag g n p) => {fin = copula CPresent n p g ; inf = part } ; VPTense VPPast (Ag g n p) => {fin = copula CPast n p g ; inf = part } ; VPTense VPFutr (Ag g n p) => {fin = copula CFuture n p g ; inf = part ++ hw p n } ; - VPStem => {fin = [] ; inf = "rh" }; + VPStem => {fin = [] ; inf = "رہ" }; _ => {fin = part ; inf = [] } }; obj = {s = [] ; a = defaultAgr} ; @@ -468,7 +468,7 @@ resource ResUrd = ParamX ** open Prelude,Predef in { {fin = copula CPast n p g ; inf = (vp.s ! VPTense VPPres agr).inf ++ raha g n } ; VPPerfFutCont => {fin = copula CFuture n p g ; inf = (vp.s ! VPTense VPPres agr).inf ++ raha g n ++ hw p n } ; - VPSubj => {fin = insertSubj p (vp.s ! VPStem).inf ; inf = "xayd" } + VPSubj => {fin = insertSubj p (vp.s ! VPStem).inf ; inf = "ژاید" } }; @@ -476,15 +476,15 @@ resource ResUrd = ParamX ** open Prelude,Predef in { quest = case ord of { ODir => []; - OQuest => "kya" }; + OQuest => "كیا" }; na = case b of { Pos => []; - Neg => "na" }; + Neg => "نا" }; nahim = case b of { Pos => []; - Neg => "nhyN" }; + Neg => "نہیں" }; in case vt of { VPSubj => quest ++ np.s ! subj ++ vp.obj.s ++ vp.ad ++ vp.comp ! np.a ++ na ++ vps.inf ++ vps.fin ++ vp.embComp ; @@ -521,22 +521,22 @@ resource ResUrd = ParamX ** open Prelude,Predef in { {fin = copula CPast n p g ; inf = (vp.s ! VPStem).inf ++ raha g n } ; VPPerfFutCont => {fin = copula CFuture n p g ; inf = (vp.s ! VPStem).inf ++ raha g n ++ hw p n } ; - VPSubj => {fin = insertSubj p (vp.s ! VPStem).inf ; inf = "xayd" } + VPSubj => {fin = insertSubj p (vp.s ! VPStem).inf ; inf = "ژاید" } }; quest = case ord of { ODir => []; - OQuest => "kya" }; + OQuest => "كیا" }; na = case b of { Pos => []; - Neg => "na" }; + Neg => "نا" }; nahim = case b of { Pos => []; - Neg => "nhyN" }; + Neg => "نہیں" }; in case t of { VPSubj => quest ++ subj ++ vp.obj.s ++ vp.ad ++ vp.comp ! agr ++ na ++ vps.inf ++ vps.fin ++ vp.embComp; @@ -544,7 +544,7 @@ resource ResUrd = ParamX ** open Prelude,Predef in { } ; insertSubj : UPerson -> Str -> Str = \p,s -> - case p of { Pers1 => s ++ "wN" ; _ => s ++ "E"}; + case p of { Pers1 => s ++ "وں" ; _ => s ++ "ے"}; insertObj : (Agr => Str) -> VPH -> VPH = \obj1,vp -> { s = vp.s ; @@ -615,7 +615,27 @@ resource ResUrd = ParamX ** open Prelude,Predef in { embComp = vp.embComp; comp = vp.comp } ; - conjThat : Str = "kh" ; + conjThat : Str = "كہ" ; +-- strings collected from syntax files, AR + +oper + sE_Str = "سے" ; + ka_Str = "كا" ; + hr_kwy_Str = "ہر كوی" ; + rakh6na_Str = "راكھنا" ; + comma_Str = "," ; + agr_Str = "اگر" ; + nE_Str = "نے" ; + jw_Str = "جو" ; + js_Str = "جس" ; + jn_Str = "جن" ; + mt_Str = "مت" ; + nh_Str = "نہ" ; + waN_Str = "واں" ; + awr_Str = "اور" ; + ky_Str = "كی" ; + kw_Str = "كو" ; + } diff --git a/lib/src/urdu/SentenceUrd.gf b/lib/src/urdu/SentenceUrd.gf index 33c0445ff..e1f0ba5a2 100644 --- a/lib/src/urdu/SentenceUrd.gf +++ b/lib/src/urdu/SentenceUrd.gf @@ -1,7 +1,6 @@ concrete SentenceUrd of Sentence = CatUrd ** open Prelude, ResUrd in { flags optimize=all_subs ; - coding = utf8; lin @@ -15,8 +14,8 @@ concrete SentenceUrd of Sentence = CatUrd ** open Prelude, ResUrd in { agr = Ag Masc (numImp n) Pers2_Casual ; verb = infVP True vp agr ; dont = case pol of { - CNeg True => "mt" ; - CNeg False => "nh" ; + CNeg True => mt_Str ; + CNeg False => nh_Str ; _ => [] } in diff --git a/lib/src/urdu/StructuralUrd.gf b/lib/src/urdu/StructuralUrd.gf index 16771612f..9ef15c3b9 100644 --- a/lib/src/urdu/StructuralUrd.gf +++ b/lib/src/urdu/StructuralUrd.gf @@ -5,125 +5,124 @@ concrete StructuralUrd of Structural = CatUrd ** coding = utf8; lin - above_Prep = ss "awpr" ; - after_Prep = ss "kE bed" ; - all_Predet = ss "tmam" ; - almost_AdA, almost_AdN = ss "tqryba" ; - although_Subj = ss "agrch-" ; - always_AdV = ss "hmyXh" ; - and_Conj = sd2 [] "awr" ** {n = Pl} ; - because_Subj = ss "kywnkh-" ; - before_Prep = ss "phlE" ; - behind_Prep = ss "pych-E" ; - between_Prep = ss "drmyaN" ; - both7and_DConj = sd2 "dwnwN" "awr" ** {n = Pl} ; - but_PConj = ss "lykn" ; + above_Prep = ss "اوپر" ; + after_Prep = ss "كے بعد" ; + all_Predet = ss "تمام" ; + almost_AdA, almost_AdN = ss "تقریبا" ; + although_Subj = ss "اگرچھ" ; + always_AdV = ss "ہمیشہ" ; + and_Conj = sd2 [] "اور" ** {n = Pl} ; + because_Subj = ss "كیونكھ" ; + before_Prep = ss "پہلے" ; + behind_Prep = ss "پیچھے" ; + between_Prep = ss "درمیاں" ; + both7and_DConj = sd2 "دونوں" "اور" ** {n = Pl} ; + but_PConj = ss "لیكن" ; by8agent_Prep = ss "" ; by8means_Prep = ss "" ; - can8know_VV,can_VV = mkV "skna" ** { isAux = True} ; - during_Prep = ss ["kE drmyaN"] ; - either7or_DConj = sd2 "kwy ayk" "or" ** {n = Sg} ; - everybody_NP = MassNP (UseN (ParadigmsUrd.mkN "hr kwy" "hr kwy" "hr kwy" "hr kwy" "hr kwy" "hr kwy" Masc )); -- not a good way coz need to include NounUrd - every_Det = mkDet "hr" "hr" "hr" "hr" Sg; - everything_NP = MassNP (UseN (ParadigmsUrd.mkN "hr cyz" "hr cyz" "hr cyzw" "sb cyzyN" "sb cyzwN" "sb cyzw" Masc )); - everywhere_Adv = ss "hr jgh" ; - few_Det = mkDet "cnd" "cnd" "cnd" "cnd" Pl ; - first_Ord = {s = "pehla" ; n = Sg} ; --DEPRECATED - for_Prep = ss "kylyE" ; - from_Prep = ss "sE" ; - he_Pron = personalPN "wh" "as" "" "as ka" Sg Masc Pers3_Distant ; - here_Adv = ss "yhaN" ; - here7to_Adv = ss ["yhaN pr"] ; - here7from_Adv = ss ["yhaN sE"] ; - how_IAdv = ss "how" ; - how8many_IDet = makeIDet "ktnE" "ktny" Pl ; - if_Subj = ss "agr" ; - in8front_Prep = ss ["kE samnE"] ; - i_Pron = personalPN "myN" "mjh-" "" "myra" Sg Masc Pers1; - in_Prep = ss "meN" ; - it_Pron = personalPN "yh" "yh" "yh" "as ka" Sg Masc Pers3_Near; - less_CAdv = {s = "km" ; p = ""} ; - many_Det = mkDet "bht zyadh" "bht zyadh" "bht zyadh" "bht zyadh" Pl ; - more_CAdv = {s = "zyadh-" ; p = "" } ; - most_Predet = ss "zyadh tr" ; - much_Det = mkDet "bht" "bht" "bht" "bht" Sg ; + can8know_VV,can_VV = mkV "سكنا" ** { isAux = True} ; + during_Prep = ss ["كے درمیاں"] ; + either7or_DConj = sd2 "كوی ایك" "یا" ** {n = Sg} ; + everybody_NP = MassNP (UseN (ParadigmsUrd.mkN "ہر كوی" "ہر كوی" "ہر كوی" "ہر كوی" "ہر كوی" "ہر كوی" Masc )); -- not a good way coz need to include NounUrd + every_Det = mkDet "ہر" "ہر" "ہر" "ہر" Sg; + everything_NP = MassNP (UseN (ParadigmsUrd.mkN "ہر چیز" "ہر چیز" "ہر چیزو" "سب چیزیں" "سب چیزوں" "سب چیزو" Masc )); + everywhere_Adv = ss "ہر جگہ" ; + few_Det = mkDet "چند" "چند" "چند" "چند" Pl ; + for_Prep = ss "كیلیے" ; + from_Prep = ss "سے" ; + he_Pron = personalPN "وہ" "اس" "" "اس كا" Sg Masc Pers3_Distant ; + here_Adv = ss "یہاں" ; + here7to_Adv = ss ["یہاں پر"] ; + here7from_Adv = ss ["یہاں سے"] ; + how_IAdv = ss "ہoو" ; + how8many_IDet = makeIDet "كتنے" "كتنی" Pl ; + if_Subj = ss "اگر" ; + in8front_Prep = ss ["كے سامنے"] ; + i_Pron = personalPN "میں" "مجھ" "" "میرا" Sg Masc Pers1; + in_Prep = ss "معں" ; + it_Pron = personalPN "یہ" "یہ" "یہ" "اس كا" Sg Masc Pers3_Near; + less_CAdv = {s = "كم" ; p = ""} ; + many_Det = mkDet "بہت زیادہ" "بہت زیادہ" "بہت زیادہ" "بہت زیادہ" Pl ; + more_CAdv = {s = "زیادھ" ; p = "" } ; + most_Predet = ss "زیادہ تر" ; + much_Det = mkDet "بہت" "بہت" "بہت" "بہت" Sg ; -- must_VV = { -- s = table { --- VVF VInf => ["have to"] ; --- VVF VPres => "must" ; --- VVF VPPart => ["had to"] ; --- VVF VPresPart => ["having to"] ; --- VVF VPast => ["had to"] ; --# notpresent --- VVPastNeg => ["hadn't to"] ; --# notpresent --- VVPresNeg => "mustn't" +-- VVF VInf => ["ہاvع تo"] ; +-- VVF VPres => "مuست" ; +-- VVF VPPart => ["ہاد تo"] ; +-- VVF VPresPart => ["ہاviنگ تo"] ; +-- VVF VPast => ["ہاد تo"] ; --# notpresent +-- VVPastNeg => ["ہادn'ت تo"] ; --# notpresent +-- VVPresNeg => "مuستn'ت" -- } ; -- isAux = True -- } ; ------b no_Phr = ss "no" ; - no_Utt = ss "nhyN" ; - on_Prep = ss "pr" ; --- one_Quant = demoPN "ayk" "ayk" "ayk" ; -- DEPRECATED - only_Predet = ss "srf" ; - or_Conj = sd2 [] "ya" ** {n = Sg} ; - otherwise_PConj = ss "ya ph-r" ; +-----b no_Phr = ss "نo" ; + no_Utt = ss "نہیں" ; + on_Prep = ss "پر" ; +-- one_Quant = demoPN "ایك" "ایك" "ایك" ; -- DEPRECATED + only_Predet = ss "سرف" ; + or_Conj = sd2 [] "یا" ** {n = Sg} ; + otherwise_PConj = ss "یا پھر" ; part_Prep = ss "" ; - please_Voc = ss "mhrbani" ; - possess_Prep = ss "ka" ; - quite_Adv = ss "khamosh" ; - she_Pron = personalPN "wh" "as" "wh" "as ky" Sg Fem Pers3_Distant ; - so_AdA = ss "so" ; - somebody_NP = MassNP (UseN (ParadigmsUrd.mkN "kwy" "kwy" "kwy" "kwy" "kwy" "kwy" Masc )); - someSg_Det = mkDet "kch-" "kch-" "kch-" "kch-" Sg ; - somePl_Det = mkDet "kch-" "kch-" "kch-" "kch-" Pl ; - something_NP = MassNP (UseN (ParadigmsUrd.mkN "kwy cyz" "kwy cyz" "kwy cyz" "kh- cyzyN" "kh- cyzwN" "kh- cyzw" Masc )); - somewhere_Adv = ss "khin pr" ; - that_Quant = demoPN "wh" "as" "an" ; - that_Subj = ss "kh"; - there_Adv = ss "whaN" ; - there7to_Adv = ss "whaN pr" ; - there7from_Adv = ss ["whaN sE"] ; - therefore_PConj = ss "as lyE" ; - they_Pron = personalPN "wh" "wh" "wh" "an ka" Pl Masc Pers3_Distant ; ---- - this_Quant = demoPN "yh" "as" "an"; - through_Prep = ss ["myN sE"] ; - too_AdA = ss "bht" ; - to_Prep = ss "kw" ; - under_Prep = ss "nycE" ; - very_AdA = ss "bht" ; - want_VV = mkV "cahna" ** { isAux = False} ; - we_Pron = personalPN "hm" "hm" "hm" "hmara" Pl Masc Pers1 ; - whatSg_IP = mkIP "kya" "kis" "kis" Sg Masc ; - whatPl_IP = mkIP "kya" "kin" "kin" Pl Masc ; - when_IAdv = ss "kb" ; - when_Subj = ss "kb" ; - where_IAdv = ss "khaN" ; - which_IQuant = {s = \\_ => "kwn sy"} ; --- whichPl_IDet = makeDet "kwn sa" "kwn sy" "kwn sE" "kwn sy" ; --- whichSg_IDet = makeDet "kwn sa" "kwn sy" "kwn sE" "kwn sy" ; - whoSg_IP = mkIP "kwn" "kis" "kis" Sg Masc ; - whoPl_IP = mkIP "kwn" "kn" "knhwN" Pl Masc ; - why_IAdv = ss "kywN" ; - without_Prep = ss ["kE bGyr"] ; - with_Prep = ss ["kE sath-"] ; --- yes_Phr = ss "haN" ; - yes_Utt = ss "haN" ; - youSg_Pron = personalPN "tm" "tm" "tm" "tmh-ara" Sg Masc Pers2_Casual ; - youPl_Pron = personalPN "tm" "tm" "tm" "tmh-ara" Pl Masc Pers2_Casual ; - youPol_Pron = personalPN "Ap" "AP" "AP" "Ap ka" Sg Masc Pers2_Respect ; - no_Quant = demoPN " kwy nhyN" "kwy nhyN" "kwy nhyN" ; - not_Predet = {s="nhyN"} ; - if_then_Conj = sd2 "agr" "tw" ** {n = Sg} ; - at_least_AdN = ss ["km az km"] ; - at_most_AdN = ss ["zyadh sE zyadh"]; - nothing_NP = MassNP (UseN (ParadigmsUrd.mkN "kwy cyz nhyN" "kwy cyz nhyN" "kwy cyz nhyN" "kwy cyz nhyN" "kwy cyz nhyN" "kwy cyz nhyN" Masc )); - except_Prep = ss "swaE" ; - nobody_NP = MassNP (UseN (ParadigmsUrd.mkN "kwy nhyN" "kwy nhyN" "kwy nhyN" "kwy nhyN" "kwy nhyN" "kwy nhyN" Masc )); + please_Voc = ss "مہربانi" ; + possess_Prep = ss "كا" ; + quite_Adv = ss "كہامoسہ" ; + she_Pron = personalPN "وہ" "اس" "وہ" "اس كی" Sg Fem Pers3_Distant ; + so_AdA = ss "سo" ; + somebody_NP = MassNP (UseN (ParadigmsUrd.mkN "كوی" "كوی" "كوی" "كوی" "كوی" "كوی" Masc )); + someSg_Det = mkDet "كچھ" "كچھ" "كچھ" "كچھ" Sg ; + somePl_Det = mkDet "كچھ" "كچھ" "كچھ" "كچھ" Pl ; + something_NP = MassNP (UseN (ParadigmsUrd.mkN "كوی چیز" "كوی چیز" "كوی چیز" "كھ چیزیں" "كھ چیزوں" "كھ چیزو" Masc )); + somewhere_Adv = ss "كہiن پر" ; + that_Quant = demoPN "وہ" "اس" "ان" ; + that_Subj = ss "كہ"; + there_Adv = ss "وہاں" ; + there7to_Adv = ss "وہاں پر" ; + there7from_Adv = ss ["وہاں سے"] ; + therefore_PConj = ss "اس لیے" ; + they_Pron = personalPN "وہ" "وہ" "وہ" "ان كا" Pl Masc Pers3_Distant ; ---- + this_Quant = demoPN "یہ" "اس" "ان"; + through_Prep = ss ["میں سے"] ; + too_AdA = ss "بہت" ; + to_Prep = ss "كو" ; + under_Prep = ss "نیچے" ; + very_AdA = ss "بہت" ; + want_VV = mkV "چاہنا" ** { isAux = False} ; + we_Pron = personalPN "ہم" "ہم" "ہم" "ہمارا" Pl Masc Pers1 ; + whatSg_IP = mkIP "كیا" "كiس" "كiس" Sg Masc ; + whatPl_IP = mkIP "كیا" "كiن" "كiن" Pl Masc ; + when_IAdv = ss "كب" ; + when_Subj = ss "كب" ; + where_IAdv = ss "كہاں" ; + which_IQuant = {s = \\_ => "كون سی"} ; +-- whichPl_IDet = makeDet "كون سا" "كون سی" "كون سے" "كون سی" ; +-- whichSg_IDet = makeDet "كون سا" "كون سی" "كون سے" "كون سی" ; + whoSg_IP = mkIP "كون" "كiس" "كiس" Sg Masc ; + whoPl_IP = mkIP "كون" "كن" "كنہوں" Pl Masc ; + why_IAdv = ss "كیوں" ; + without_Prep = ss ["كے بغیر"] ; + with_Prep = ss ["كے ساتھ"] ; +-- yes_Phr = ss "ہاں" ; + yes_Utt = ss "ہاں" ; + youSg_Pron = personalPN "تم" "تم" "تم" "تمھارا" Sg Masc Pers2_Casual ; + youPl_Pron = personalPN "تم" "تم" "تم" "تمھارا" Pl Masc Pers2_Casual ; + youPol_Pron = personalPN "آپ" "آP" "آP" "آپ كا" Sg Masc Pers2_Respect ; + no_Quant = demoPN " كوی نہیں" "كوی نہیں" "كوی نہیں" ; + not_Predet = {s="نہیں"} ; + if_then_Conj = sd2 "اگر" "تو" ** {n = Sg} ; + at_least_AdN = ss ["كم از كم"] ; + at_most_AdN = ss ["زیادہ سے زیادہ"]; + nothing_NP = MassNP (UseN (ParadigmsUrd.mkN "كوی چیز نہیں" "كوی چیز نہیں" "كوی چیز نہیں" "كوی چیز نہیں" "كوی چیز نہیں" "كوی چیز نہیں" Masc )); + except_Prep = ss "سواے" ; + nobody_NP = MassNP (UseN (ParadigmsUrd.mkN "كوی نہیں" "كوی نہیں" "كوی نہیں" "كوی نہیں" "كوی نہیں" "كوی نہیں" Masc )); - as_CAdv = {s = "etna" ; p = "jtna"} ; + as_CAdv = {s = "عتنا" ; p = "جتنا"} ; - have_V2 = mkV2 (mkV "rakh-na") "" ; + have_V2 = mkV2 (mkV "راكھنا") "" ; - language_title_Utt = ss "ardw" ; + language_title_Utt = ss "اردو" ; } diff --git a/lib/src/urdu/SymbolUrd.gf b/lib/src/urdu/SymbolUrd.gf index 15b7d9b25..2cfd7679e 100644 --- a/lib/src/urdu/SymbolUrd.gf +++ b/lib/src/urdu/SymbolUrd.gf @@ -23,7 +23,7 @@ concrete SymbolUrd of Symbol = CatUrd ** open Prelude, ResUrd in { SymbS sy = sy ; SymbNum sy = { s = sy.s ; n = Pl } ; - SymbOrd sy = { s = sy.s ++ "waN" ; n = Pl} ; + SymbOrd sy = { s = sy.s ++ waN_Str ; n = Pl} ; lincat @@ -32,14 +32,15 @@ lincat lin MkSymb s = s ; - BaseSymb = infixSS "awr" ; - ConsSymb = infixSS "" ; + BaseSymb = infixSS awr_Str + ; + ConsSymb = infixSS [] ; oper -- Note: this results in a space before 's, but there's -- not mauch we can do about that. addGenitiveS : Str -> Case => Str = \s -> - table {_ => s ++ "ka" } ; + table {_ => s ++ ka_Str} ; } diff --git a/lib/src/urdu/VerbUrd.gf b/lib/src/urdu/VerbUrd.gf index b052c6f42..885fe81b2 100644 --- a/lib/src/urdu/VerbUrd.gf +++ b/lib/src/urdu/VerbUrd.gf @@ -13,10 +13,10 @@ concrete VerbUrd of Verb = CatUrd ** open ResUrd in { ComplVS v s = insertObj2 (conjThat ++ s.s) (predV v) ; ComplVQ v q = insertObj2 (conjThat ++ q.s ! QIndir) (predV v) ; ComplVA v ap = insertObj (\\a => ap.s ! giveNumber a ! giveGender a ! Dir ! Posit) (predV v) ; - SlashV2V v vp = insertVV ((vp.s!VPImp).inf++"ky") (predV v) **{c2 = {s = "sE" ; c = VIntrans}} ; - SlashV2S v s = insertObjc2 (conjThat ++ s.s) (predV v ** {c2 = {s = "kw" ; c = VIntrans}}) ; - SlashV2Q v q = insertObjc2 (conjThat ++ q.s ! QIndir) (predV v ** {c2 = {s = "sE" ; c = VIntrans}}) ; - SlashV2A v ap = insertObjc (\\a => ap.s ! giveNumber a ! giveGender a ! Dir ! Posit) (predV v ** {c2 = {s = "kw" ; c = VIntrans}}) ; ---- + SlashV2V v vp = insertVV ((vp.s!VPImp).inf++ky_Str) (predV v) **{c2 = {s = sE_Str ; c = VIntrans}} ; + SlashV2S v s = insertObjc2 (conjThat ++ s.s) (predV v ** {c2 = {s = kw_Str ; c = VIntrans}}) ; + SlashV2Q v q = insertObjc2 (conjThat ++ q.s ! QIndir) (predV v ** {c2 = {s = sE_Str ; c = VIntrans}}) ; + SlashV2A v ap = insertObjc (\\a => ap.s ! giveNumber a ! giveGender a ! Dir ! Posit) (predV v ** {c2 = {s = kw_Str ; c = VIntrans}}) ; ---- ComplSlash vp np = insertObject np vp ; SlashVV vv vp = insertObj (\\a => infVP vv.isAux vp a) (predV vv) ** diff --git a/lib/src/urdu/transliterateUrdu.gfs b/lib/src/urdu/transliterateUrdu.gfs new file mode 100644 index 000000000..9d6f1ed65 --- /dev/null +++ b/lib/src/urdu/transliterateUrdu.gfs @@ -0,0 +1,6 @@ +rf -file=transliterated/IdiomUrd.gf | ps -env=quotes -to_urdu | wf -file=IdiomUrd.gf +rf -file=transliterated/LexiconUrd.gf | ps -env=quotes -to_urdu | wf -file=LexiconUrd.gf +rf -file=transliterated/MorphoUrd.gf | ps -env=quotes -to_urdu | wf -file=MorphoUrd.gf +rf -file=transliterated/NumeralUrd.gf | ps -env=quotes -to_urdu | wf -file=NumeralUrd.gf +rf -file=transliterated/ResUrd.gf | ps -env=quotes -to_urdu | wf -file=ResUrd.gf +rf -file=transliterated/StructuralUrd.gf | ps -env=quotes -to_urdu | wf -file=StructuralUrd.gf diff --git a/lib/src/urdu/transliterated/IdiomUrd.gf b/lib/src/urdu/transliterated/IdiomUrd.gf new file mode 100644 index 000000000..c50fb81df --- /dev/null +++ b/lib/src/urdu/transliterated/IdiomUrd.gf @@ -0,0 +1,38 @@ +concrete IdiomUrd of Idiom = CatUrd ** open Prelude,Predef, ResUrd in { + + flags optimize=all_subs ; + flags coding = utf8; + + lin + ImpersCl vp = mkSClause [] (agrP3 Masc Sg) vp ; + GenericCl vp = mkSClause "kwy" (agrP3 Masc Sg) vp ; + + CleftNP np rs = + let cl = mkSClause (np.s ! NPC rs.c) (np.a) (predAux auxBe); + in + {s = \\t,p,o => cl.s ! t ! p ! o ++ rs.s ! np.a }; + + CleftAdv ad ss = { s = \\t,b,o => ad.s ++ ss.s}; + + ExistNP np = + mkSClause "whaN" (agrP3 (fromAgr np.a).g (fromAgr np.a).n) + (insertObj (\\_ => np.s ! NPC Obl) (predAux auxBe)) ; + + ExistIP ip = + let cl = mkSClause ("whaN" ++ ip.s ! Dir) (agrP3 ip.g ip.n) (predAux auxBe); + in { + s = \\t,p,qf => case qf of { + QDir => cl.s ! t ! p ! ODir; + QIndir => cl.s ! t! p ! ODir + } + }; + + ProgrVP vp = insertObj (\\a => vp.obj.s ++ vp.ad ++ vp.comp ! a ++ (vp.s ! VPStem).inf ++ raha (fromAgr a).g (fromAgr a).n ) (predAux auxBe) ; + + + ImpPl1 vp = {s = "Aw" ++ infVP True vp (agrP1 Masc Pl)} ; + ImpP3 np vp = {s = np.s!NPC Dir ++ "kw" ++ (vp.s ! VPImp ).inf ++ "dw"}; + + +} + diff --git a/lib/src/urdu/transliterated/LexiconUrd.gf b/lib/src/urdu/transliterated/LexiconUrd.gf new file mode 100644 index 000000000..ea7847751 --- /dev/null +++ b/lib/src/urdu/transliterated/LexiconUrd.gf @@ -0,0 +1,369 @@ +--# -path=.:prelude + +concrete LexiconUrd of Lexicon = CatUrd ** +--open ResUrd, Prelude in { + open ParadigmsUrd, Prelude in { + + flags + optimize=values ; + coding = utf8; + + lin + airplane_N = mkN "jhaz" ; + answer_V2S = mkV2 (compoundV "jwab" (mkV "dyna")) ; + apartment_N = mkN "kmrh" ; + apple_N = mkN "syb" ; + art_N = mkN "fn" ; + ask_V2Q = mkV2 (mkV "pwch-na") ; + baby_N = mkN "bch" ; + bad_A = mkA "bra" ; + bank_N = mkN "bank" ; + beautiful_A = mkA "KwbSwrt" ; + become_VA = mkV "bnna"; + beer_N = mkN "beer" ; + beg_V2V = mkV2V (compoundV "altja" (mkV "krna")) "sE" "kh" False; + big_A = mkA "bRa" ; + bike_N = mkN "saycl" feminine ; + bird_N = mkN "prndh" ; + black_A = mkA "kala" ; + blue_A = mkA "nyla" ; + boat_N = mkN "kXty" ; + book_N = mkN "ktab" feminine ; + boot_N = mkN "jwta" ; + boss_N = mkN "Sahb" ; + boy_N = mkN "lRka" ; + bread_N = mkN "rwty" ; + break_V2 = mkV2 (mkV "twRna") ; + broad_A = mkA "kh-la" ; + brother_N2 = mkN2 (mkN "bh-ay") (mkPrep "ka") "kE" ; --not correct + brown_A = mkA "nswary" ; + butter_N = mkN "mkh-n" ; + buy_V2 = mkV2 (mkV "Krydna"); + camera_N = mkN "kymrh" ; + cap_N = mkN "twpy" ; + car_N = mkN "gaRy" ; + carpet_N = mkN "tpay^y" ; + cat_N = mkN "bly" ; + ceiling_N = mkN "ch-t" feminine ; + chair_N = mkN "krsy" ; + cheese_N = mkN "pnyr" feminine ; + child_N = mkN "bch" ; + church_N = mkCmpdNoun "grja" (mkN "gh-r") ; + city_N = mkN "Xhr" ; + clean_A = mkA "Saf" ; + clever_A = mkA "hwXyar" ; + close_V2 = mkV2 (compoundV "bnd" do_V2); + coat_N = mkN "kwT" ; + cold_A = mkA "Th-nDa" ; + come_V = mkV "Ana" ; + computer_N = mkN "kmpywTr" ; + country_N = mkN "mlk" ; + cousin_N = mkCmpdNoun "cca" (mkN "zad") ; -- a compund noun made of two nouns + cow_N = mkN "gaE" feminine ; + die_V = mkV "mrna" ; + dirty_A = mkA "gnda" ; + distance_N3 = mkN3 (mkN "faSlh") (mkPrep "ka") "kE" "sE" ; + doctor_N = mkN "mealj" ; + dog_N = mkN "kta" ; + door_N = mkN "drwzh" ; + drink_V2 = mkV2 (mkV "pyna"); + easy_A2V = mkA "Asan" "" ; + eat_V2 = mkV2 (mkV "kh-ana") "" ; + empty_A = mkA "Kaly" ; + enemy_N = mkN "dXmn" ; + factory_N = mkN "karKanh" ; + father_N2 = mkN2 (mkN "aba") (mkPrep "ka") "kE" ; + fear_VS = mkV "drna"; + find_V2 = mkV2 (mkV "pana") ; + fish_N = mkN "mch-ly" ; + floor_N = mkN "frX" ; + forget_V2 = mkV2 (mkV "bh-wlna") ; + fridge_N = mkN "fryg" ; + friend_N = mkN "dwst" masculine ; + fruit_N = mkN "ph-l" ; +-- fun_AV = mkAV (regA "fun") ; + garden_N = mkN "baG" ; + girl_N = mkN "lRky" ; + glove_N = mkN "dstanh" ; + gold_N = mkN "swna" ; + good_A = mkA "ach-a" ; + go_V = mkV "jana" ; + green_A = mkA "sbz" ; + harbour_N = mkCmpdNoun "bndr" (mkN "gah") ; + hate_V2 = mkV2 (compoundV "nfrt" do_V2) ; + hat_N = mkN "twpy" ; +-- have_V2 = dirV2 (mk5V "have" "has" "had" "had" "having") ; + hear_V2 = mkV2 (mkV "snna") ; + hill_N = mkN "phaRy" ; + hope_VS = (compoundV "amyd" do_V2); + horse_N = mkN "gh-wRa" ; + hot_A = mkA "grm" ; + house_N = mkN "gh-r" ; + important_A = mkA "ahm" ; + industry_N = mkN "Snet" feminine ; + iron_N = mkN "lwha" ; + king_N = mkN "badXah" ; + know_V2 = mkV2 (mkV "janna") ; + know_VS = mkV "janna"; + lake_N = mkN "jh-yl" feminine ; + lamp_N = mkN "lymp" ; + learn_V2 = mkV2 (mkV "sykh-na") ; + leather_N = mkN "cmRa" ; + leave_V2 = mkV2 (mkV "jana") ; + like_V2 = mkV2 (compoundV "psnd" do_V2); + listen_V2 = mkV2 (mkV "snna") ; + live_V = mkV "rhna" ; ---- touch + long_A = mkA "lmba" ; + lose_V2 = mkV2 (compoundV "kh-w" do_V2) ; + love_N = mkN "mHbt" ; + love_V2 = mkV2 (compoundV "pyar" do_V2) "kw"; + man_N = mkN "Admy" ; -- not correct according to rules should be discussed + married_A2 = mkA "Xady krna" "sE" ; + meat_N = mkN "gwXt" ; + milk_N = mkN "dwdh-" ; + moon_N = mkN "cand" ; + mother_N2 = mkN2 (mkN "maN") (mkPrep "ky") "kE"; -- not covered need to be discussed + mountain_N = mkN "phaRy" ; + music_N = mkN "mwsyqy" ; + narrow_A = mkA "baryk" ; + new_A = mkA "nya" ; + newspaper_N = mkN "aKbar" ; + oil_N = mkN "tyl" ; + old_A = mkA "bwRh-a" ; + open_V2 = mkV2 (mkV "kh-wlna") ; + paint_V2A = mkV2 (compoundV "rng" do_V2) ; + paper_N = mkN "kaGz" ; + paris_PN = mkPN "pyrs" ; + peace_N = mkN "amn" ; + pen_N = mkN "pnsl" ; + planet_N = mkN "syarh" ; + plastic_N = mkN "plasTk" ; + play_V2 = mkV2 (mkV "kh-ylna") ; + policeman_N = mkCmpdNoun "pwlys" (mkN "wala") ; + priest_N = (mkN "pyGmbr") ; +-- probable_AS = mkAS (regA "probable") ; + queen_N = mkN "Xhzady" ; + radio_N = mkN "ryDyw" ; + rain_V0 = compoundV "barX" (mkV "hwna" ) ; + read_V2 = mkV2 (mkV "pRh-na"); + red_A = mkA "lal" ; + religion_N = mkN "mzhb" ; + restaurant_N = mkN "hwTl" ; + river_N = mkN "drya" masculine ; + rock_N = mkN "cTan" ; + roof_N = mkN "ch-t" masculine ; + rubber_N = mkN "rbR" ; + run_V = mkV "dwRna" ; + say_VS = mkV "khna" ; + school_N = mkN "skwl" ; + science_N = mkN "sans" ; + sea_N = mkN "smndr" ; + seek_V2 = mkV2 (compoundV "tlaX" do_V2) ; + see_V2 = mkV2 (mkV "dykh-na") ; + sell_V3 = mkV3 (mkV "bycna") "kw" ""; + send_V3 = mkV3 (mkV "bh-yjna") "kw" ""; + sheep_N = mkN "bh-yR" feminine ; + ship_N = mkN "jhaz" ; + shirt_N = mkN "qmyZ-" feminine; + shoe_N = mkN "jwta" ; + shop_N = mkN "dwkan" feminine ; + short_A = mkA "ch-wTa" ; + silver_N = mkN "candy" ; + sister_N = mkN "bhn" feminine ; + sleep_V = mkV "swna" ; + small_A = mkA "ch-wTa" ; + snake_N = mkN "sanp" ; + sock_N = mkN "jrab" feminine ; + speak_V2 = mkV2 (mkV "bwlna") ; + star_N = mkN "stara" ; + steel_N = mkN "styl" ; + stone_N = mkN "pth-r" ; + stove_N = mkN "cwlha" ; + student_N = mkCmpdNoun "t-alb" (mkN "elm") ; + stupid_A = mkA "aHmq" ; + sun_N = mkN "swrj" ; + switch8off_V2 = mkV2 (mkV "clana") ; + switch8on_V2 = mkV2 (compoundV "bnd" do_V2) ; + table_N = mkN "myz" feminine ; + talk_V3 = mkV3 (mkV "bwlna") "sE" "kE barE meN"; + teacher_N = mkN "istad" ; + teach_V2 = mkV2 (mkV "pRh-na") ; + television_N = mkN "telywyzn" ; + thick_A = mkA "mwTa" ; + thin_A = mkA "ptla" ; + train_N = mkN "gaRy" ; + travel_V = (compoundV "sfr" do_V2) ; + tree_N = mkN "drKt" masculine ; +-- ---- trousers_N = mkN "trousers" ; + ugly_A = mkA "bdSwrt" ; + understand_V2 = mkV2 (mkV "smjh-na") ; + university_N = mkN "ywnywrsTy" ; + village_N = mkN "gawN" ; + wait_V2 = mkV2 (compoundV "antz-ar" do_V2) ; + walk_V = mkV "clna" ; + warm_A = mkA "grm" ; + war_N = mkN "jng" ; + watch_V2 = mkV2 (mkV "dykh-na") ; + water_N = mkN "pany" ; -- not covered masculine ending with y + white_A = mkA "sfyd" ; + window_N = mkN "kh-Rky" ; + wine_N = mkN "Xrab" feminine ; + win_V2 = mkV2 (mkV "jytna") ; + woman_N = mkN "ewrt" feminine ; + wonder_VQ = compoundV "Heran" (mkV "hwna") ; + wood_N = mkN "lkRy" ; + write_V2 = mkV2 (mkV "lkh-na") ; + yellow_A = mkA "pyla" ; + young_A = mkA "jwan" ; + do_V2 = mkV2 (mkV "krna") ; + now_Adv = mkAdv "ab" ; + already_Adv = mkAdv "phlE hy" ; + song_N = mkN "gana" ; + add_V3 = mkV3 (compoundV "aZ-afh" do_V2) "" "" ; + number_N = mkN "hndsh" ; + put_V2 = mkV2 (mkV "Dalna") ; + stop_V = mkV "rkna" ; + jump_V = mkV "ch-langna" ; + + left_Ord = {s = "bayaN" ; n = singular}; + right_Ord = {s= "dayaN" ; n = singular}; + far_Adv = mkAdv "dwr" ; + correct_A = mkA "Syh" ; + dry_A = mkA "KXk" ; + dull_A = mkA "nalik" ; + full_A = mkA "mkml" ; + heavy_A = mkA "bh-ary" ; + near_A = mkA "qryb" ; + rotten_A = mkA "Krab" ; + round_A = mkA "gwl" ; + sharp_A = mkA "tyz" ; + smooth_A = mkA "hmwar" ; + straight_A = mkA "sydh-a" ; + wet_A = mkA "gyla" ; ---- + wide_A = mkA "kh-la" ; + animal_N = mkN "janwr" ; + ashes_N = mkN "rakh-" feminine; -- FIXME: plural only? + back_N = mkN "qmr" feminine ; + bark_N = mkN "bark" ; + belly_N = mkN "dh-ny" ; + blood_N = mkN "Kwn" ; + bone_N = mkN "hDy" ; + breast_N = mkN "ch-aty" ; + cloud_N = mkN "badl" ; + day_N = mkN "dn" ; + dust_N = mkN "dh-wl" ; + ear_N = mkN "kan" ; + earth_N = mkN "zmyn" feminine ; + egg_N = mkN "anDh" ; + eye_N = mkN "Ankh-" feminine ; + fat_N = mkN "mwta" ; + feather_N = mkN "pr" ; + fingernail_N = mkN "naKn" ; + fire_N = mkN "Ag" feminine ; + flower_N = mkN "ph-wl" ; + fog_N = mkN "dh-nd" feminine ; + foot_N = mkN "pawN" ; -- not properly covered need to be discussed + forest_N = mkN "njgl" ; + grass_N = mkN "gh-s" feminine ; + guts_N = mkN "gut" ; -- FIXME: no singular + hair_N = mkN "bal" ; + hand_N = mkN "hath-" ; + head_N = mkN "sr" ; + heart_N = mkN "dl" ; + horn_N = mkN "gh-nty" ; + husband_N = mkN "Xwhr" ; + ice_N = mkN "brf" feminine ; + knee_N = mkN "khny" ; + leaf_N = mkN "pth" ; + leg_N = mkN "tang" feminine ; + liver_N = mkN "jgr" ; + louse_N = mkN "gh-r" ; + mouth_N = mkN "mnh" ; + name_N = mkN "nam" ; + neck_N = mkN "grdn" feminine ; + night_N = mkN "rat" feminine ; + nose_N = mkN "nak" ; + person_N = mkN "XKS" ; + rain_N = mkN "barX" feminine ; + road_N = mkN "sRk" ; + root_N = mkN "gR" feminine ; + rope_N = mkN "rsy" ; + salt_N = mkN "nmk" feminine ; + sand_N = mkN "ryt" feminine ; + seed_N = mkN "byj" ; + skin_N = mkN "jld" feminine ; + sky_N = mkN "Asman" ; + smoke_N = mkN "dh-waN"; -- singular masc nouns ending with aN,wN yet to be implemented + snow_N = mkN "brf" feminine ; + stick_N = mkN "ch-Ry" ; + tail_N = mkN "dm" ; + tongue_N = mkN "zban" feminine ; + tooth_N = mkN "dant" masculine; + wife_N = mkN "bywy" ; + wind_N = mkN "Andh-y" ; + wing_N = mkN "pr" ; + worm_N = mkN "grm" ; + year_N = mkN "sal" ; + blow_V = mkV "clna" ; + breathe_V = compoundV "sans" (mkV "lyna" ) ; + burn_V = mkV "jlna" ; + dig_V = mkV "kh-wdna" ; + fall_V = mkV "grna" ; + float_V = mkV "tyrna" ; + flow_V = mkV "bhna" ; + fly_V = mkV "aRna" ; + freeze_V = mkV "jmna"; + give_V3 = mkV3 (mkV "dyna") "kw" ""; + laugh_V = mkV "hnsna" ; +-- lie_N = mkN "jh-wt" masculine ; + lie_V = compoundV "jh-wt" (mkV "bwlna" ); + play_V = mkV "kh-ylna" ; + sew_V = mkV "syna" ; + sing_V = mkV "gana" ; + sit_V = mkV "byTh-na" ; + smell_V = mkV "swngna" ; + spit_V = mkV "th-wkna" ; + stand_V = compoundV "kh-RE" (mkV "hwna" ); + swell_V = mkV "swjh-na" ; + swim_V = mkV "tyrna" ; + think_V = mkV "swcna" ; + turn_V = mkV "mRna"; + vomit_V = compoundV "alty" (mkV "krna") ; + bite_V2 = mkV2 (mkV "katna") ; + count_V2 = mkV2 (mkV "gnna") ; + cut_V2 = mkV2 (mkV "katna") ; + fear_V2 = mkV2 (mkV "Drna") ; + fight_V2 = mkV2 (mkV "lRna") ; + hit_V2 = mkV2 (compoundV "th-wkr" (mkV "marna" )); + hold_V2 = mkV2 (mkV "pkRna") ; + hunt_V2 = mkV2 (compoundV "Xkar" do_V2); + kill_V2 = mkV2 (compoundV "mar" (mkV "Dalna" )) ; + pull_V2 = mkV2 (mkV "kh-ncna"); + push_V2 = mkV2 (mkV "dh-kylna") "kw" ; + rub_V2 = mkV2 (mkV "rgRna") ; + scratch_V2 = mkV2 (mkV "kh-rcna") "kw" ; + split_V2 = mkV2 (mkV "banta") "kw" ; +-- squeeze_V2 = dirV2 (regV "squeeze") ; +-- stab_V2 = dirV2 (regDuplV "stab") ; + suck_V2 = mkV2 (mkV "cwsna") ; + throw_V2 = mkV2 (mkV "ph-ynkna") ; + tie_V2 = mkV2 (mkV "bandh-na") ; + wash_V2 = mkV2 (mkV "dh-wna") ; + wipe_V2 = mkV2 (compoundV "Saf" (mkV "krna" )); + +---- other_A = regA "other" ; + + grammar_N = mkN "grdan" ; + language_N = mkN "zban" feminine ; + rule_N = mkN "aSwl" ; + +---- added 4/6/2007 + john_PN = mkPN "jon" ; + question_N = mkN "swal" ; +-- ready_A = regA "ready" ; + reason_N = mkN "wjh" feminine ; + today_Adv = mkAdv "Aj" ; + uncertain_A = mkA ["Gyr yqyny"] ; + + +} diff --git a/lib/src/urdu/transliterated/MorphoUrd.gf b/lib/src/urdu/transliterated/MorphoUrd.gf new file mode 100644 index 000000000..b1e75ad39 --- /dev/null +++ b/lib/src/urdu/transliterated/MorphoUrd.gf @@ -0,0 +1,461 @@ +--# -path=.:../../prelude +-- +----1 A Simple Urdu Resource Morphology +---- +---- Shafqat Virk, Aarne Ranta,2009 +---- +---- This resource morphology contains definitions needed in the resource +---- syntax. To build a lexicon, it is better to use $ParadigmsUrd$, which +---- gives a higher-level access to this module. +-- +resource MorphoUrd = ResUrd ** open Prelude,Predef in { + + flags optimize=all ; + coding = utf8; + +----2 Nouns +oper + mkNoun : (x1,_,_,_,_,x6 : Str) -> Gender -> Noun = + \sd,so,sv,pd,po,pv,g -> { + s = table { + Sg => table { + Dir => sd ; + Obl => so ; + Voc => sv + } ; + Pl => table { + Dir => pd ; + Obl => po ; + Voc => pv + } + } ; + + g = g + } ; + + + + regNoun : Str -> Noun ; + regNoun s = case s of { + _ + "ya" => mkN05 (s); + _ + ("a"|"e"|"h") => mkN01 (s); + _ + "y" => mkN03 (s); + _ + ("aN"|"wN") => mkN04 (s); + _ + "w^" => mkN12 (s); + _ => regNoun2 (s) + }; + regNoun2 : Str -> Noun; + regNoun2 s = let c = if_then_else Bool (eq (last s) "a" ) True (if_then_else Bool (eq (last s) "h") True (if_then_else Bool (eq (last s) "e") True False)) + in case c of { + False => mkN02 (s); + True => mkN01 (s) + }; + + reggNoun : Str -> Gender -> Noun ; + reggNoun s g = let c = if_then_else Bool (eq (last s) "a" ) True (if_then_else Bool (eq (dp 2 s) "aN") True (if_then_else Bool (eq (dp 2 s) "wN") True False)) + in case of { + <_ + "t",Fem,_> => mkN10 (s); + <_ + "t",Masc,_> => mkN02 (s); + <_ + "w",Masc,_> => mkN11 (s); + <_ + "w",Fem,_> => mkN07 (s); + <_ + "ya",Fem,_> => mkN05 (s); + <_ + "ya",Masc,_> => mkN02 (s); + <_,Fem,False> => mkN08 (s); + <_,Fem,_> => mkN09 (s) + + }; + +-- masculine nouns end with alif, choTi_hay, ain Translitration: (a, h, e) +-- Arabic nouns ends with h. also taken as Masc + + mkN01 : Str -> Noun ; + mkN01 lRka = let end = last (lRka) ; + lRk = if_then_else Str (eq end "e") lRka (tk 1 lRka) + in mkNoun (lRka) (lRk+"E") (lRk+"E") + (lRk+"E") (lRk+"wN") (lRk+"w") + Masc ; + +-- masculine nouns does not end with a, h, e, an + + mkN02 : Str -> Noun ; + mkN02 mrd = let mrdwN = mrd+"wN" ; + mrdw = tk 1 mrdwN + in mkNoun mrd mrd mrd + mrd mrdwN mrdw + Masc ; + +-- feminine Nouns end with y + + mkN03 : Str -> Noun ; + mkN03 krsy = let krsyaN = krsy+"aN" ; + krsywN = krsy+"wN" ; + krsyw = tk 1 krsywN + in mkNoun krsy krsy krsy + krsyaN krsywN krsyw + Fem ; + +-- feminine nouns end with a, aN, wN + mkN04 : Str -> Noun ; + mkN04 n = case last n of { + "a" => let bla = n + in mkNoun bla bla bla + (bla+"y^yN") (bla+"w^N") (bla+"w^") + Fem ; + _ => let maN = n ; -- ends with aN and wN + ma = tk 1 maN + in mkNoun maN maN maN + (ma+"y^yN") (ma+"w^N") (ma+"w^N") + Fem + + }; + --feminine nouns end with ya + + mkN05 : Str -> Noun ; + mkN05 gRya = let gRy = (tk 1 gRya) + in mkNoun gRya gRya gRya + (gRya+"N") (gRy+"wN") (gRy+"w") + Fem ; + +-- feminine nouns end with w + + mkN07 : Str -> Noun ; + mkN07 khshbw = mkNoun khshbw khshbw khshbw + (khshbw + "y^yN") (khshbw + "w^N") (khshbw + "w^") + Fem ; + +-- Loan arabic feminine nouns end with t +-- this is a noun that shows state, condition + + mkN10 : Str -> Noun ; + mkN10 ndamt = mkNoun ndamt ndamt ndamt + (ndamt+"yN") (ndamt+"wN") (ndamt+"w") + Fem ; +-- Worst case function + mkN : (_,_,_,_,_,_ : Str) -> Gender -> Noun ; + mkN sgNom sgObl sgVoc plNom plObl plVoc g = + mkNoun sgNom sgObl sgVoc plNom plObl plVoc g ; + + mkN06 : Str -> Noun ; + mkN06 rya = mkNoun rya rya rya + (rya+"y^yN") (rya+"w^N") rya + Fem ; + +-- feminine nouns that do not end with a, N, w, wN + + mkN08 : Str -> Noun ; + mkN08 ktab = mkNoun ktab ktab ktab + (ktab+"yN") (ktab+"wN") (ktab+"w") + Fem ; + +-- Loan arabic feminine nouns + + mkN09 : Str -> Noun ; + mkN09 ahsan = mkNoun ahsan ahsan ahsan + (ahsan+"at") (ahsan+"at") (ahsan+"w") + Fem ; +-- (variants{ahsan+"at";ahsan+"wN"}) +-- Loan persian maculine nouns end with w + + mkN11 : Str -> Noun ; + mkN11 alw = mkNoun alw alw alw + alw (alw+"w^N") (alw+"w^") + Masc ; + + +-- Loan persian maculine nouns end with w^ + + mkN12 : Str -> Noun ; + mkN12 bhao = mkNoun (bhao) (bhao) (bhao) + (bhao) (bhao) (bhao) + Masc ; +----2 Determiners + IDeterminer = {s:Gender => Str ; n : Number}; + makeDet : Str -> Str -> Str -> Str -> Number -> Determiner = \s1,s2,s3,s4,n -> { + s = table { + Sg => table { + Masc => s1 ; + Fem => s2 + } ; + Pl => table { + Masc => s3 ; + Fem => s4 + } + } ; + + n = n + }; + + makeIDet : Str -> Str -> Number -> IDeterminer = \s1,s2,n -> { + s = table { + Masc => s1; + Fem => s2 + }; + n = n + }; + +-- Proposition + + makePrep : Str -> Preposition = \str -> {s = str}; + +----2 Pronouns + PronForm = {s:Pronoun => Str}; + makeDemPron : (x1,x2,x3,x4,x5,x6:Str) -> PronForm = + \y1,y2,y3,y4,y5,y6 -> { + s = table { + P Sg _ Dir _ => y1; + P Sg _ Obl _ => y2; + P Sg _ Voc _ => y3; + P Pl _ Dir _ => y4; + P Pl _ Obl _ => y5; + P Pl _ Voc _ => y6 + }; + }; + +-- DemonPronForm = {s:DemPronForm => Str}; + mkDemonPronForm : (x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12:Str) -> DemPronForm = + \y1,y2,y3,y4,y5,y6,y7,y8,y9,y10,y11,y12 -> { + s = table { + Sg => table { + Masc => table { + Dir => y1 ; + Obl => y2 ; + Voc => y3 + }; + Fem => table { + Dir => y4 ; + Obl => y5 ; + Voc => y6 + } + }; + Pl => table { + Masc => table { + Dir => y7 ; + Obl => y8 ; + Voc => y9 + }; + Fem => table { + Dir => y10 ; + Obl => y11 ; + Voc => y12 + } + } + } + }; + makeDemonPronForm : Str -> Str -> Str -> DemPronForm ; + makeDemonPronForm yeh is inn = mkDemonPronForm yeh is "" yeh is "" yeh inn "" yeh inn ""; +-- makePossPronForm myra myry hmara hmary = mkDemonPronForm myra myra myra myry myry myry hmara hmara hmara hmary hmary hmary; + + PersPron = {s: PersPronForm => Str}; + + mkPersPron:(x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36:Str) -> PersPron = + \y1,y2,y3,y4,y5,y6,y7,y8,y9,y10,y11,y12,y13,y14,y15,y16,y17,y18,y19,y20,y21,y22,y23,y24,y25,y26,y27,y28,y29,y30,y31,y32,y33,y34,y35,y36 -> { + s = + table { + PPF Sg Pers1 Dir => y1; + PPF Sg Pers1 Obl => y2; + PPF Sg Pers1 Voc => y3; + PPF Sg Pers2_Casual Dir => y4; + PPF Sg Pers2_Casual Obl => y5; + PPF Sg Pers2_Casual Voc => y6; + PPF Sg Pers2_Familiar Dir => y7; + PPF Sg Pers2_Familiar Obl => y8; + PPF Sg Pers2_Familiar Voc => y9; + PPF Sg Pers2_Respect Dir => y10; + PPF Sg Pers2_Respect Obl => y11; + PPF Sg Pers2_Respect Voc => y12; + PPF Sg Pers3_Near Dir => y13; + PPF Sg Pers3_Near Obl => y14; + PPF Sg Pers3_Near Voc => y15; + PPF Sg Pers3_Distant Dir => y16; + PPF Sg Pers3_Distant Obl => y17; + PPF Sg Pers3_Distant Voc => y18; + PPF Pl Pers1 Dir => y19; + PPF Pl Pers1 Obl => y20; + PPF Pl Pers1 Voc => y21; + PPF Pl Pers2_Casual Dir => y22; + PPF Pl Pers2_Casual Obl => y23; + PPF Pl Pers2_Casual Voc => y24; + PPF Pl Pers2_Familiar Dir => y25; + PPF Pl Pers2_Familiar Obl => y26; + PPF Pl Pers2_Familiar Voc => y27; + PPF Pl Pers2_Respect Dir => y28; + PPF Pl Pers2_Respect Obl => y29; + PPF Pl Pers2_Respect Voc => y30; + PPF Pl Pers3_Near Dir => y31; + PPF Pl Pers3_Near Obl => y32; + PPF Pl Pers3_Near Voc => y33; + PPF Pl Pers3_Distant Dir => y34; + PPF Pl Pers3_Distant Obl => y35; + PPF Pl Pers3_Distant Voc => y36 + }; + }; + + makePersPron : PersPron; + makePersPron = mkPersPron "m(a)yN" "m(o)j'|h" "" "t(o)w " "t(o)j|h" "t(o)w " "t(o)m" "t(o)m" "t(o)m" "Ap" "Ap" "Ap" "y(i)h" "a(i)s" "" "w(o)h" "a(o)s" "" + "h(a)m" "h(a)m" "" "t(o)m" "t(o)m" "t(o)m" "t(o)m" "t(o)m" "t(o)m" "Ap" "Ap" "Ap" "y(i)h" "a(i)n" "" "w(o)h" "a(o)n" "" ; + + mkPron : (x1,x2,x3:Str) -> {s:Case => Str} = + \y1,y2,y3 -> { s = + table { + Dir => y1; + Obl => y2; + Voc => y3 + } + }; + + ------- PossPronForm yet to be implemented + +-- IntPronForm = {s:InterrPronForm => Str}; + IntPronForm = {s: Case => Str}; + mkIntPronForm : (x1,x2,x3:Str) -> IntPronForm = + \y1,y2,y3 -> { + s = + table { + Dir => y1; + Obl => y2; + Voc => y3 + } + }; + +----2 Adjectives +-- defined in ResUrd + +----3 Verbs + CommonVF = {s : VTense => UPerson => Number => Gender => Str} ; + + mkVerb : (x1: Str) -> Verb = \inf -> + let root = (tk 2 inf); inf_obl = ((tk 1 inf) + "E"); inf_fem = ((tk 1 inf) + "y") + in { s = table { + + VF tense person number gender => (mkCmnVF root tense person number gender).s ; + Inf => inf ; + Root => root ; + Inf_Obl => inf_obl ; + Inf_Fem => inf_fem + + + } + } ; + rem_y : Str -> Str; + rem_y str = let b = take 1 str; yth = drop 1 str; a1 = take 4 yth; a2 = take 1 yth; th= if_then_else Str (eq a1 "(a)y") (drop 5 str) (drop 2 str); st = if_then_else Str (eq a1 "(a)y") (b ++ "(i)"++th) (if_then_else Str (eq a2 "y") (b ++ th) str) + in rt st; + rt: Str -> Str; + rt r = r; + mkCmnVF : Str -> VTense -> UPerson -> Number -> Gender -> {s:Str} = + \root,t,p,n,g -> + {s = + let form1 = case (last root) of { + "a"|"A"|"w" => root + "w^N" ; + _ => root + "wN" + }; + form2 = case (last root) of { + "a"|"A"|"w" => root + "y^N" ; + _ => root + "yN" + }; + in + case of { + => form1 ; + => form2 ; + => (mkImpert root p n g).s ; + => case root of { + "hw" => (mkPastInd root p n g).s ; + "ja" => (mkPastInd "gy" p n g).s ; + "kr" => (mkPastInd "k" p n g).s ; + "dE" => (mkPastInd "d" p n g).s ; + "lE" => (mkPastInd "l" p n g).s ; + _ => (mkPastInd root p n g).s }; + => root + "tE"; + => root + "ty"; --variants{root+"ty" ; root+"tyN"}; + => root + "tE"; + => root+"tyN"; + => root + "tE"; + => root + "ty"; --variants{root+"ty" ; root+"tyN"}; + => root + "tE"; + => root+"tyN"; + => root+"ta"; + => root+"ty"; + => root+"te"; + => root+"tyN" + } + + } ; + + mkPastInd : Str -> UPerson -> Number -> Gender -> {s:Str} = \root,p,n,g -> + {s = let roo = root ; + a = case (last root) of { + "a"|"A"|"w"|"k" => "ya" ; + _ => "a" + } ; + y = case (last root) of { + "a"|"A"|"w" => "y^y" ; + _ => "y" + } ; + e = case (last root) of { + "a"|"A"|"w"|"k" => "y^E" ; + _ => "E" + } ; + yN = case (last root) of { + "a"|"A"|"w" => "y^yN" ; + _ => "yN" + } ; + + in + case of { + => roo+a ; + => roo+y ; + => roo+e ; + => roo+yN ; + + => roo+a ; + => roo+y ; + => roo+e ; + => roo+yN ; + + => roo+e ; + => roo+y; --variants{roo+y ; roo+yN} ; + => roo+e ; + => roo+yN ; + + => roo+e ; + => roo+yN; --variants{roo+yN ; roo+y} ; + => roo+e ; + => roo+yN ; + <_,Sg,Masc> => roo + a; + <_,Sg,Fem> => roo+y ; + <_,Pl,Masc> => roo + e; + <_,Pl,Fem> => roo+yN + + } ; + } ; + + mkImpert : Str -> UPerson -> Number -> Gender -> {s:Str} = \root,p,n,g -> + {s = let roo = root ; + w = case (last root) of { + "a"|"A"|"w" => "w^" ; + _ => "w" + } ; + yN = case (last root) of { + "a"|"A"|"w" => "y^yN" ; + _ => "yN" + } ; + yE = case (last root) of { + "a"|"A"|"w" => "y^yE" ; + _ => "yE" + } ; + e = case (last root) of { + "a"|"A"|"w" => "y^E" ; + _ => "E" + } in + case of { + => ""; --nonExist ; + => root ; + => roo+w ; + => roo+w ; + => roo+w; --variants{roo+w; roo+yN; roo+yE} ; + => roo+yN; --variants{roo+yN; roo+yE} ; + <_,Sg,_> => roo+e ; + <_,Pl,_> => roo+yN + }; + }; + +} diff --git a/lib/src/urdu/transliterated/NumeralUrd.gf b/lib/src/urdu/transliterated/NumeralUrd.gf new file mode 100644 index 000000000..70059c3e9 --- /dev/null +++ b/lib/src/urdu/transliterated/NumeralUrd.gf @@ -0,0 +1,127 @@ +concrete NumeralUrd of Numeral = CatUrd ** open ResUrd in { +-- By Harald Hammarstrm +-- Modification for Urdu Shafqat Virk + flags coding=utf8 ; +--- still old Devanagari coding + + +param DForm = unit | ten ; +param DSize = sg | r2 | r3 | r4 | r5 | r6 | r7 | r8 | r9 ; +param Size = sing | less100 | more100 ; + +oper LinDigit = {s : DForm => Str ; size : DSize ; n : Number} ; + + +lincat Dig = { s:Str ; n : Number}; +lincat Digit = LinDigit ; +lincat Sub10 = {s : DForm => Str ; size : DSize ; n : Number} ; +lincat Sub100 = {s : Str ; size : Size ; n : Number} ; +lincat Sub1000 = {s : Str ; s2 : Str ; size : Size ; n : Number } ; +lincat Sub1000000 = { s : Str ; n : Number } ; + +lin num x0 = + {s = table { + NCard => x0.s ; + NOrd => x0.s ++ "waN" -- need to use mkOrd which will make irregular ordinals but it gives path error + }; + n = x0.n + } ; +oper mkOrd : Str -> Str = + \s -> case s of { + "ek" => "phla"; + "do" => "dwsra"; + "ti:n" => "tesra"; + "ca:r" => "cwth-a"; + ("cHah"|"cHa"|"cHai") => "ch-Ta"; + _ => s ++ "waN" + }; +-- {s = \\_ => x0.s ; n = x0.n} ; + + +oper mkNum : Str -> Str -> DSize -> LinDigit = + \do -> \bis -> \sz -> + {s = table {unit => do ; ten => bis } ; + size = sz ; n = Pl} ; + +lin n2 = mkNum "dw" "bys" r2 ; +lin n3 = mkNum "tyn" "tys" r3 ; +lin n4 = mkNum "car" "calys" r4 ; +lin n5 = mkNum "panc" "pcas" r5 ; +lin n6 = mkNum "ch-" "sath-" r6 ; +lin n7 = mkNum "sat" "str" r7; +lin n8 = mkNum "Ath-" "asy" r8; +lin n9 = mkNum "nw" "nwE" r9 ; + +oper mkR : Str -> Str -> Str -> Str -> Str -> Str -> Str -> Str -> Str -> DSize => Str = \a1 -> \a2 -> \a3 -> \a4 -> \a5 -> \a6 -> \a7 -> \a8 -> \a9 -> table { + sg => a1 + "ah" ; + r2 => a2 + "i:s" ; + r3 => a3 + "ti:s" ; + r4 => a4 + "a:li:s" ; + r5 => a5 + "an" ; + r6 => a6 + "saTH" ; + r7 => a7 + "hattar" ; + r8 => a8 + "a:si:" ; + r9 => a9 + "a:nave" +} ; + +oper rows : DSize => DSize => Str = table { + sg => mkR "gyarh" "ikk" "ikat" "ekt" "ikyaw" "ik" "ik" "iky" "iky" ; + r2 => mkR "barh" "bay" "bat" "bay" "baw" "ba" "ba" "bay" "b" ; + r3 => mkR "tyr" "ty" "tyn" "tnt" "trp" "try" "t" "tr" "tr" ; + r4 => mkR "cwd" "cwb" "cwn" "cwa" "cww" "cwn" "cwh" "cwr" "cwr" ; + r5 => mkR "pnd" "pcy" "pyn" "pnta" "pcp" "pyn" "ph" "pc" "pc" ; + r6 => mkR "swl" "ch-b" "ch-t" "ch-y" "ch-p" "ch-ya" "ch-" "ch-y" "ch-y" ; + r7 => mkR "str" "sta" "syn" "snt" "staw" "sta" "sr" "st" "sta" ; + r8 => mkR "ath-ar" "ath-ay" "aR" "aRt" "ath-aw" "aR" "ath-" "ath-" "ath-" ; + r9 => table {sg => "anys" ; r2 => "antys" ; r3 => "antalys" ; + r4 => "ancas" ; r5 => "ansth-" ; r6 => "anhtr" ; + r7 => "anasy" ; + r8 => "ananwE" ; r9 => "nnanwE" } +} ; + +oper ss : Str -> {s : Str} = \s -> {s = s} ; + +lin pot01 = {s = table {unit => "ayk" ; _ => "dummy" } ; size = sg ; n = Sg} ; +lin pot0 d = d ; +lin pot110 = {s = "das" ; size = less100 ; n = Pl} ; +lin pot111 = {s = rows ! sg ! sg ; size = less100 ; n = Pl} ; +lin pot1to19 d = {s = rows ! d.size ! sg ; size = less100 ; n = d.n} ; +lin pot0as1 n = {s = n.s ! unit ; size = table {sg => sing ; _ => less100} ! n.size ; n = n.n } ; + +lin pot1 d = {s = d.s ! ten ; size = less100 ; n = d.n} ; +lin pot1plus d e = {s = rows ! e.size ! d.size ; size = less100 ; n = d.n} ; + +lin pot1as2 n = {s = n.s ; s2 = "dummy" ; size = n.size ; n = n.n} ; +lin pot2 d = {s = (mksau (d.s ! unit) d.size) ; + s2 = d.s ! unit ++ "lakh-" ; size = more100 ; n = d.n} ; +lin pot2plus d e = + {s = (mksau (d.s ! unit) d.size) ++ e.s ; + s2 = (d.s ! unit) ++ "lakh-" ++ (mkhazar e.s e.size) ; + size = more100 ; n = d.n} ; + +lin pot2as3 n = {s = n.s ; n = n.n} ; +lin pot3 n = {s = table { sing => ekhazar ; + less100 => n.s ++ "hzar" ; + more100 => n.s2 } ! n.size ; n = n.n} ; +lin pot3plus n m = + {s = table {sing => ekhazar ; + less100 => n.s ++ "hzar" ; + more100 => n.s2 } ! n.size ++ m.s ; n = n.n} ; + +lin D_0 = { s = "0" ; n = Sg}; +lin D_1 = { s = "1" ; n = Sg}; +lin D_2 = { s = "2" ; n = Pl}; +lin D_3 = { s = "3" ; n = Pl}; +lin D_4 = { s = "4" ; n = Pl}; +lin D_5 = { s = "5" ; n = Pl}; +lin D_6 = { s = "6" ; n = Pl}; +lin D_7 = { s = "7" ; n = Pl}; +lin D_8 = { s = "8" ; n = Pl}; +lin D_9 = { s = "9" ; n = Pl}; +lin IDig d = { s = \\_ => d.s ; n = d.n} ; +lin IIDig d dg = { s = \\df => dg.s ! df ++ d.s ; n = Pl }; -- need to use + rather than ++, but gives error need to discuss + +oper ekhazar : Str = variants {"hzar" ; "ayk" ++ "hzar"} ; +oper mkhazar : Str -> Size -> Str = \s -> \sz -> table {sing => ekhazar ; _ => s ++ "hzar"} ! sz ; +oper mksau : Str -> DSize -> Str = \s -> \sz -> table {sg => "sw" ; _ => s ++ "sw"} ! sz ; +} diff --git a/lib/src/urdu/transliterated/ResUrd.gf b/lib/src/urdu/transliterated/ResUrd.gf new file mode 100644 index 000000000..330cfc5d6 --- /dev/null +++ b/lib/src/urdu/transliterated/ResUrd.gf @@ -0,0 +1,641 @@ +--# -path=.:../abstract:../common:../../prelude +-- +--1 Urdu auxiliary operations. +-- +-- This module contains operations that are needed to make the +-- resource syntax work. + +resource ResUrd = ParamX ** open Prelude,Predef in { + + flags optimize=all ; + coding = utf8; + + param + Case = Dir | Obl | Voc ; + Gender = Masc | Fem ; + VTense = Subj | Perf | Imperf; + UPerson = Pers1 + | Pers2_Casual + | Pers2_Familiar + | Pers2_Respect + | Pers3_Near + | Pers3_Distant; + + Order = ODir | OQuest ; + +--2 For $Relative$ + + RAgr = RNoAg | RAg Agr ; + RCase = RC Number Case ; + +-- for Numerial + + CardOrd = NCard | NOrd ; + + ----------------------------------------- + -- Urd Pronouns + ----------------------------------------- + + Pronoun = P Number Gender Case UPerson; + PersPronForm = PPF Number UPerson Case; + +------------------------------------------- +--Verbs +------------------------------------------- + + VerbForm = VF VTense UPerson Number Gender + | Inf + | Root + | Inf_Obl + | Inf_Fem; + oper + Noun = {s : Number => Case => Str ; g : Gender} ; + Verb = {s : VerbForm => Str} ; + Preposition = {s : Str}; + DemPronForm = {s : Number => Gender => Case => Str}; + PossPronForm = {s : Number => Gender => Case => Str}; + Determiner = {s : Number => Gender => Str ; n : Number}; + +-- a useful oper + eq : Str -> Str -> Bool = \s1,s2-> (pbool2bool (eqStr s1 s2)) ; + + ----------------------------------------------- + -- Urd Adjectives + ----------------------------------------------- + + Adjective = { s: Number => Gender => Case => Degree => Str }; + + + mkAdjective : (x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36:Str) -> Adjective = + \y1,y2,y3,y4,y5,y6,y7,y8,y9,y10,y11,y12,y13,y14,y15,y16,y17,y18,y19,y20,y21,y22,y23,y24,y25,y26,y27,y28,y29,y30,y31,y32,y33,y34,y35,y36 -> { + s = table { + Sg => table { + Masc => table { + Dir => table { + Posit => y1 ; + Compar => y2 ; + Superl => y3 + }; + Obl => table { + Posit => y4 ; + Compar => y5 ; + Superl => y6 + }; + Voc => table { + Posit => y7 ; + Compar => y8 ; + Superl => y9 + } + }; + Fem => table { + Dir => table { + Posit => y10 ; + Compar => y11 ; + Superl => y12 + }; + Obl => table { + Posit => y13 ; + Compar => y14 ; + Superl => y15 + }; + Voc => table { + Posit => y16 ; + Compar => y17 ; + Superl => y18 + } + } + }; + Pl => table { + Masc => table { + Dir => table { + Posit => y19 ; + Compar => y20 ; + Superl => y21 + }; + Obl => table { + Posit => y22 ; + Compar => y23 ; + Superl => y24 + }; + Voc => table { + Posit => y25 ; + Compar => y26 ; + Superl => y27 + } + }; + Fem => table { + Dir => table { + Posit => y28 ; + Compar => y29 ; + Superl => y30 + }; + Obl => table { + Posit => y31 ; + Compar => y32 ; + Superl => y33 + }; + Voc => table { + Posit => y34 ; + Compar => y35 ; + Superl => y36 + } + } + } + } + }; + + + regAdjective : Str -> Adjective; + regAdjective x = case x of { + acch + ("a"|"aN") => mkAdjective x ("bht" ++ x) ("sab sE" ++ x) (acch + "E") ("bht" ++ acch + "E") ("sab sE" ++ acch + "E") (acch + "E") ("bht" ++ acch + "E") ("sab sE" ++ acch + "E") + (acch + "y") ("bht" ++ acch + "y") ("sab sE" ++ acch + "y") (acch + "y") ("bht" ++ acch + "y") ("sab sE" ++ acch + "y") (acch + "y") ("bht" ++ acch + "y") ("sab sE" ++ acch + "y") + (acch +"E") ("bht" ++ acch + "E") ("sab sE" ++ acch + "E") (acch + "E") ("bht" ++ acch + "E") ("sab sE" ++ acch + "E") (acch + "E") ("bht" ++ acch + "E") ("sab sE" ++ acch + "E") + (acch + "y") ("bht" ++ acch + "y") ("sab sE" ++ acch + "y") (acch + "y") ("bht" ++ acch + "y") ("sab sE" ++ acch + "y") (acch + "y") ("bht" ++ acch + "y") ("sab sE" ++ acch + "y"); + + _ => mkAdjective x x x x x x x x x + x x x x x x x x x + x x x x x x x x x + x x x x x x x x x + }; + + + + RefPron : Str; + RefPron = "Kwd"; + + ---------------------------------------------------------- + -- Grammar part + ---------------------------------------------------------- + + param + Agr = Ag Gender Number UPerson ; + NPCase = NPC Case | NPObj | NPErg ; + + oper + np2pronCase : (Case => Str) -> NPCase -> Str = \ppf,npc -> case npc of { + NPC c => ppf ! c; + NPObj => ppf ! Dir ; + NPErg => ppf ! Obl ++ "ne" + } ; + + toNP : ( Case => Str) -> NPCase -> Str = \pn, npc -> case npc of { + NPC c => pn ! c ; + NPObj => pn ! Dir ; + NPErg => pn ! Obl ++ "ne" + } ; + detcn2NP : (Determiner) -> Noun -> NPCase -> Number -> Str = \dt,cn,npc,nn -> case npc of { + NPC c => dt.s ! Sg ! Masc ++ cn.s ! nn ! Dir ; + NPObj => dt.s ! Sg ! Masc ++ cn.s ! nn ! Dir ; + NPErg => dt.s ! Sg ! Masc ++ cn.s ! nn ! Obl ++ "ne" + } ; + det2NP : (Determiner) -> NPCase -> Str = \dt,npc -> case npc of { + NPC c => dt.s ! Sg ! Masc ; + NPObj => dt.s ! Sg ! Masc ; + NPErg => dt.s ! Sg ! Masc ++ "ne" + } ; + +------------------------------------------ +-- Agreement transformations +----------------------------------------- + toAgr : Number -> UPerson -> Gender -> Agr = \n,p,g -> + Ag g n p; + + + fromAgr : Agr -> {n : Number ; p : UPerson ; g : Gender} = \a -> case a of { + Ag g n p => {n = n ; p = p ; g = g} + } ; + + conjAgr : Agr -> Agr -> Agr = \a0,b0 -> + let a = fromAgr a0 ; b = fromAgr b0 + in + toAgr + (conjNumber a.n b.n) + b.p a.g; + + giveNumber : Agr -> Number =\a -> case a of { + Ag _ n _ => n + }; + giveGender : Agr -> Gender =\a -> case a of { + Ag g _ _ => g + }; + + defaultAgr : Agr = agrP3 Masc Sg ; + agrP3 : Gender -> Number -> Agr = \g,n -> Ag g n Pers3_Distant ; + personalAgr : Agr = agrP1 Masc Sg ; + agrP1 : Gender -> Number -> Agr = \g,n -> Ag g n Pers1 ; + + param + CPolarity = + CPos + | CNeg Bool ; -- contracted or not + + oper + contrNeg : Bool -> Polarity -> CPolarity = \b,p -> case p of { + Pos => CPos ; + Neg => CNeg b + } ; + + NP : Type = {s : NPCase => Str ; a : Agr} ; + + param + CTense = CPresent | CPast | CFuture ; + + oper + copula : CTense -> Number -> UPerson -> Gender -> Str = \t,n,p,g -> + case of { + => "hwN" ; + => "hE" ; + => "hw" ; + => "hyN" ; + => "hE" ; + => "hE" ; + => "hyN" ; + => "hw" ; + => "hw" ; + => "hyN" ; + => "hyN" ; + => "hyN" ; + => "th-a" ; + => "th-y" ; + => "th-a" ; + => "th-y" ; + => "th-a" ; + => "th-y" ; + => "th-E" ; + => "th-yN" ; + => "th-a" ; + => "th-y" ; + => "th-a" ; + => "th-y" ; + => "th-E" ; + => "th-yN" ; + => "th-E" ; + => "th-yN" ; + => "th-E" ; + => "th-yN" ; + => "th-E" ; + => "th-yN" ; + => "th-E" ; + => "th-yN" ; + => "th-E" ; + => "th-yN" ; + => "ga" ; + => "gy" ; + => "ga" ; + => "gi" ; + => "gE" ; + => "gy" ; + => "gE" ; + => "gy" ; + => "ga" ; + => "gy" ; + => "ga" ; + => "gy" ; + => "gE" ; + => "gy" ; + => "gE" ; + => "gy" ; + => "gE" ; + => "gy" ; + => "gE" ; + => "gy" ; + => "gE" ; + => "gE" ; + => "gE" ; + => "gy" + + + } ; + + param + VPPTense = + VPPres + |VPPast + |VPFutr; + + VPHTense = + VPGenPres -- impf hum nahim "I go" + | VPImpPast -- impf Ta nahim "I went" + | VPFut -- fut na/nahim "I shall go" + | VPContPres -- stem raha hum nahim "I am going" + | VPContPast -- stem raha Ta nahim "I was going" + | VPContFut + | VPPerfPres -- perf hum na/nahim "I have gone" + | VPPerfPast -- perf Ta na/nahim "I had gone" + | VPPerfFut + | VPPerfPresCont + | VPPerfPastCont + | VPPerfFutCont + | VPSubj -- subj na "I may go" + ; + + VPHForm = + VPTense VPPTense Agr -- 9 * 12 + | VPReq + | VPImp + | VPReqFut + | VPInf + | VPStem + ; + + VType = VIntrans | VTrans | VTransPost ; + + oper + + objVType : VType -> NPCase = \vt -> case vt of { + VTrans => NPObj ; + _ => NPC Obl + } ; + + VPH : Type = { + s : VPHForm => {fin, inf : Str} ; + obj : {s : Str ; a : Agr} ; + subj : VType ; + comp : Agr => Str; + inf : Str; + ad : Str; + embComp : Str ; + } ; + + VPHSlash = VPH ** {c2 : Compl} ; + + Compl : Type = {s : Str ; c : VType} ; + + predV : Verb -> VPH = \verb -> { + s = \\vh => + case vh of { + VPTense VPPres (Ag g n p) => {fin = copula CPresent n p g ; inf = verb.s ! VF Imperf p n g } ; + VPTense VPPast (Ag g n p) => {fin = [] ; inf =verb.s ! VF Perf p n g} ; + VPTense VPFutr (Ag g n p) => {fin = copula CFuture n p g ; inf = verb.s ! VF Subj p n g } ; + VPStem => {fin = [] ; inf = verb.s ! Root}; + _ => {fin = [] ; inf = verb.s ! Root} + }; + obj = {s = [] ; a = defaultAgr} ; + subj = VTrans ; + inf = verb.s ! Inf; + ad = []; + embComp = []; + comp = \\_ => [] + } ; + + predVc : (Verb ** {c2,c1 : Str}) -> VPHSlash = \verb -> + predV verb ** {c2 = {s = verb.c1 ; c = VTrans} } ; + + + raha : Gender -> Number -> Str = \g,n -> + (regAdjective "rha").s ! n ! g ! Dir ! Posit ; + + cka : Gender -> Number -> Str = \g,n -> + (regAdjective "cka").s ! n ! g ! Dir ! Posit ; + + hw : UPerson -> Number -> Str = \pp,n -> + case of { + => "hwN"; + <_,Pl> => "hwN"; + <_,_> => "hw" + }; + + predAux : Aux -> VPH = \verb -> { + s = \\vh => + let + + inf = verb.inf ; + part = verb.ppart ; + + in + case vh of { + VPTense VPPres (Ag g n p) => {fin = copula CPresent n p g ; inf = part } ; + VPTense VPPast (Ag g n p) => {fin = copula CPast n p g ; inf = part } ; + VPTense VPFutr (Ag g n p) => {fin = copula CFuture n p g ; inf = part ++ hw p n } ; + VPStem => {fin = [] ; inf = "rh" }; + _ => {fin = part ; inf = [] } + }; + obj = {s = [] ; a = defaultAgr} ; + subj = VIntrans ; + inf = verb.inf; + ad = []; + embComp = []; + comp = \\_ => [] + } ; + + Aux = { + inf,ppart,prpart : Str + } ; + + auxBe : Aux = { + inf = "" ; + ppart = "" ; + prpart = "" + } ; + + Clause : Type = {s : VPHTense => Polarity => Order => Str} ; + mkClause : NP -> VPH -> Clause = \np,vp -> { + s = \\vt,b,ord => + let + subjagr : NPCase * Agr = case vt of { + VPImpPast => case vp.subj of { + VTrans => ; + VTransPost => ; + _ => + } ; + _ => + } ; + subj = subjagr.p1 ; + agr = subjagr.p2 ; + n = (fromAgr agr).n; + p = (fromAgr agr).p; + g = (fromAgr agr).g; + vps = case vt of { + + VPGenPres => vp.s ! VPTense VPPres agr ; + VPImpPast => vp.s ! VPTense VPPast agr ; + VPFut => vp.s ! VPTense VPFutr agr ; + VPContPres => + {fin = copula CPresent n p g ; inf = (vp.s ! VPStem).inf ++ raha g n } ; + VPContPast => + {fin = copula CPast n p g ; inf = (vp.s ! VPStem).inf ++ raha g n } ; + VPContFut => + {fin = copula CFuture n p g ; inf = (vp.s ! VPStem).inf ++ raha g n ++ hw p n} ; + VPPerfPres => + {fin = copula CPresent n p g ; inf = (vp.s ! VPStem).inf ++ cka g n } ; + VPPerfPast => + {fin = copula CPast n p g ; inf = (vp.s ! VPStem).inf ++ cka g n } ; + VPPerfFut => + {fin = copula CFuture n p g ; inf = (vp.s ! VPStem).inf ++ cka g n ++ hw p n } ; + VPPerfPresCont => + {fin = copula CPresent n p g ; inf = (vp.s ! VPTense VPPres agr).inf ++ raha g n } ; + VPPerfPastCont => + {fin = copula CPast n p g ; inf = (vp.s ! VPTense VPPres agr).inf ++ raha g n } ; + VPPerfFutCont => + {fin = copula CFuture n p g ; inf = (vp.s ! VPTense VPPres agr).inf ++ raha g n ++ hw p n } ; + VPSubj => {fin = insertSubj p (vp.s ! VPStem).inf ; inf = "xayd" } + + }; + + + quest = + case ord of + { ODir => []; + OQuest => "kya" }; + na = + case b of + { Pos => []; + Neg => "na" }; + nahim = + case b of + { Pos => []; + Neg => "nhyN" }; + in + case vt of { + VPSubj => quest ++ np.s ! subj ++ vp.obj.s ++ vp.ad ++ vp.comp ! np.a ++ na ++ vps.inf ++ vps.fin ++ vp.embComp ; + _ => quest ++ np.s ! subj ++ vp.obj.s ++ vp.ad ++ vp.comp ! np.a ++ nahim ++ vps.inf ++ vps.fin ++ vp.embComp}; + + } ; + + mkSClause : Str -> Agr -> VPH -> Clause = + \subj,agr,vp -> { + s = \\t,b,ord => + let + n = (fromAgr agr).n; + p = (fromAgr agr).p; + g = (fromAgr agr).g; + vps = case t of { + VPGenPres => vp.s ! VPTense VPPres agr ; + VPImpPast => vp.s ! VPTense VPPast agr ; + VPFut => vp.s ! VPTense VPFutr agr ; + VPContPres => + {fin = copula CPresent n p g ; inf = (vp.s ! VPStem).inf ++ raha g n } ; + VPContPast => + {fin = copula CPast n p g ; inf = (vp.s ! VPStem).inf ++ raha g n } ; + VPContFut => + {fin = copula CFuture n p g ; inf = (vp.s ! VPStem).inf ++ raha g n ++ hw p n } ; + VPPerfPres => + {fin = copula CPresent n p g ; inf = (vp.s ! VPStem).inf ++ cka g n } ; + VPPerfPast => + {fin = copula CPast n p g ; inf = (vp.s ! VPStem).inf ++ cka g n } ; + VPPerfFut => + {fin = copula CFuture n p g ; inf = (vp.s ! VPStem).inf ++ cka g n ++ hw p n } ; + VPPerfPresCont => + {fin = copula CPresent n p g ; inf = (vp.s ! VPStem).inf ++ raha g n } ; + VPPerfPastCont => + {fin = copula CPast n p g ; inf = (vp.s ! VPStem).inf ++ raha g n } ; + VPPerfFutCont => + {fin = copula CFuture n p g ; inf = (vp.s ! VPStem).inf ++ raha g n ++ hw p n } ; + VPSubj => {fin = insertSubj p (vp.s ! VPStem).inf ; inf = "xayd" } + + }; + + quest = + case ord of + { ODir => []; + OQuest => "kya" }; + na = + case b of + { Pos => []; + Neg => "na" }; + nahim = + case b of + { Pos => []; + Neg => "nhyN" }; + in + case t of { + VPSubj => quest ++ subj ++ vp.obj.s ++ vp.ad ++ vp.comp ! agr ++ na ++ vps.inf ++ vps.fin ++ vp.embComp; + _ => quest ++ subj ++ vp.obj.s ++ vp.ad ++ vp.comp ! agr ++ nahim ++ vps.inf ++ vps.fin ++ vp.embComp}; + } ; + + insertSubj : UPerson -> Str -> Str = \p,s -> + case p of { Pers1 => s ++ "wN" ; _ => s ++ "E"}; + + insertObj : (Agr => Str) -> VPH -> VPH = \obj1,vp -> { + s = vp.s ; + obj = vp.obj ; + subj = vp.subj ; + inf = vp.inf; + ad = vp.ad; + embComp = vp.embComp; + comp = \\a => vp.comp ! a ++ obj1 ! a + } ; + insertVV : Str -> VPH -> VPH = \obj1,vp -> { + s = vp.s ; + obj = vp.obj ; + subj = vp.subj ; + inf = vp.inf; + ad = vp.ad; + embComp = vp.embComp; + comp = \\a => vp.comp ! a ++ obj1 + } ; + + insertObj2 : (Str) -> VPH -> VPH = \obj1,vp -> { + s = vp.s; + obj = vp.obj ; + subj = vp.subj ; + inf = vp.inf; + ad = vp.ad; + embComp = vp.embComp ++ obj1; + comp = vp.comp + + } ; + + insertObjc : (Agr => Str) -> VPHSlash -> VPHSlash = \obj,vp -> + insertObj obj vp ** {c2 = vp.c2} ; + insertObjc2 : Str -> VPHSlash -> VPHSlash = \obj,vp -> + insertObj2 obj vp ** {c2 = vp.c2} ; + + infVP : Bool -> VPH -> Agr -> Str = \isAux,vp,a -> + vp.obj.s ++ vp.inf ++ vp.comp ! a ; + infVV : Bool -> VPH -> Str = \isAux,vp -> + case isAux of {False => vp.inf ; True => (vp.s ! VPImp).fin }; + + insertObject : NP -> VPHSlash -> VPH = \np,vps -> { + s = vps.s ; + obj = {s = vps.obj.s ++ np.s ! objVType vps.c2.c ++ vps.c2.s ; a = np.a} ; + subj = vps.c2.c ; + inf = vps.inf; + ad = vps.ad; + embComp = vps.embComp; + comp = vps.comp + } ; + + insertObjPre : (Agr => Str) -> VPHSlash -> VPH = \obj,vp -> { + s = vp.s ; + obj = vp.obj ; + inf = vp.inf ; + subj = vp.subj ; + ad = vp.ad ; + embComp = vp.embComp; + comp = \\a => obj ! a ++ vp.c2.s ++ vp.comp ! a + } ; + + insertAdV : Str -> VPH -> VPH = \ad,vp -> { + s = vp.s ; + obj = vp.obj ; + inf = vp.inf ; + subj = vp.subj; + ad = vp.ad ++ ad ; + embComp = vp.embComp; + comp = vp.comp + } ; + conjThat : Str = "kh" ; + +-- strings collected from syntax files, AR + +oper + sE_Str = "sE" ; + ka_Str = "ka" ; + hr_kwy_Str = "hr kwy" ; + rakh6na_Str = "rakh-na" ; + comma_Str = "," ; + agr_Str = "agr" ; + nE_Str = "nE" ; + jw_Str = "jw" ; + js_Str = "js" ; + jn_Str = "jn" ; + mt_Str = "mt" ; + nh_Str = "nh" ; + waN_Str = "waN" ; + awr_Str = "awr" ; + ky_Str = "ky" ; + kw_Str = "kw" ; + +} + diff --git a/lib/src/urdu/transliterated/StructuralUrd.gf b/lib/src/urdu/transliterated/StructuralUrd.gf new file mode 100644 index 000000000..367ac420a --- /dev/null +++ b/lib/src/urdu/transliterated/StructuralUrd.gf @@ -0,0 +1,128 @@ +concrete StructuralUrd of Structural = CatUrd ** + open MorphoUrd, ParadigmsUrd, Prelude, NounUrd in { + + flags optimize=all ; + coding = utf8; + + lin + above_Prep = ss "awpr" ; + after_Prep = ss "kE bed" ; + all_Predet = ss "tmam" ; + almost_AdA, almost_AdN = ss "tqryba" ; + although_Subj = ss "agrch-" ; + always_AdV = ss "hmyXh" ; + and_Conj = sd2 [] "awr" ** {n = Pl} ; + because_Subj = ss "kywnkh-" ; + before_Prep = ss "phlE" ; + behind_Prep = ss "pych-E" ; + between_Prep = ss "drmyaN" ; + both7and_DConj = sd2 "dwnwN" "awr" ** {n = Pl} ; + but_PConj = ss "lykn" ; + by8agent_Prep = ss "" ; + by8means_Prep = ss "" ; + can8know_VV,can_VV = mkV "skna" ** { isAux = True} ; + during_Prep = ss ["kE drmyaN"] ; + either7or_DConj = sd2 "kwy ayk" "ya" ** {n = Sg} ; + everybody_NP = MassNP (UseN (ParadigmsUrd.mkN "hr kwy" "hr kwy" "hr kwy" "hr kwy" "hr kwy" "hr kwy" Masc )); -- not a good way coz need to include NounUrd + every_Det = mkDet "hr" "hr" "hr" "hr" Sg; + everything_NP = MassNP (UseN (ParadigmsUrd.mkN "hr cyz" "hr cyz" "hr cyzw" "sb cyzyN" "sb cyzwN" "sb cyzw" Masc )); + everywhere_Adv = ss "hr jgh" ; + few_Det = mkDet "cnd" "cnd" "cnd" "cnd" Pl ; + for_Prep = ss "kylyE" ; + from_Prep = ss "sE" ; + he_Pron = personalPN "wh" "as" "" "as ka" Sg Masc Pers3_Distant ; + here_Adv = ss "yhaN" ; + here7to_Adv = ss ["yhaN pr"] ; + here7from_Adv = ss ["yhaN sE"] ; + how_IAdv = ss "how" ; + how8many_IDet = makeIDet "ktnE" "ktny" Pl ; + if_Subj = ss "agr" ; + in8front_Prep = ss ["kE samnE"] ; + i_Pron = personalPN "myN" "mjh-" "" "myra" Sg Masc Pers1; + in_Prep = ss "meN" ; + it_Pron = personalPN "yh" "yh" "yh" "as ka" Sg Masc Pers3_Near; + less_CAdv = {s = "km" ; p = ""} ; + many_Det = mkDet "bht zyadh" "bht zyadh" "bht zyadh" "bht zyadh" Pl ; + more_CAdv = {s = "zyadh-" ; p = "" } ; + most_Predet = ss "zyadh tr" ; + much_Det = mkDet "bht" "bht" "bht" "bht" Sg ; +-- must_VV = { +-- s = table { +-- VVF VInf => ["have to"] ; +-- VVF VPres => "must" ; +-- VVF VPPart => ["had to"] ; +-- VVF VPresPart => ["having to"] ; +-- VVF VPast => ["had to"] ; --# notpresent +-- VVPastNeg => ["hadn't to"] ; --# notpresent +-- VVPresNeg => "mustn't" +-- } ; +-- isAux = True +-- } ; +-----b no_Phr = ss "no" ; + no_Utt = ss "nhyN" ; + on_Prep = ss "pr" ; +-- one_Quant = demoPN "ayk" "ayk" "ayk" ; -- DEPRECATED + only_Predet = ss "srf" ; + or_Conj = sd2 [] "ya" ** {n = Sg} ; + otherwise_PConj = ss "ya ph-r" ; + part_Prep = ss "" ; + please_Voc = ss "mhrbani" ; + possess_Prep = ss "ka" ; + quite_Adv = ss "khamosh" ; + she_Pron = personalPN "wh" "as" "wh" "as ky" Sg Fem Pers3_Distant ; + so_AdA = ss "so" ; + somebody_NP = MassNP (UseN (ParadigmsUrd.mkN "kwy" "kwy" "kwy" "kwy" "kwy" "kwy" Masc )); + someSg_Det = mkDet "kch-" "kch-" "kch-" "kch-" Sg ; + somePl_Det = mkDet "kch-" "kch-" "kch-" "kch-" Pl ; + something_NP = MassNP (UseN (ParadigmsUrd.mkN "kwy cyz" "kwy cyz" "kwy cyz" "kh- cyzyN" "kh- cyzwN" "kh- cyzw" Masc )); + somewhere_Adv = ss "khin pr" ; + that_Quant = demoPN "wh" "as" "an" ; + that_Subj = ss "kh"; + there_Adv = ss "whaN" ; + there7to_Adv = ss "whaN pr" ; + there7from_Adv = ss ["whaN sE"] ; + therefore_PConj = ss "as lyE" ; + they_Pron = personalPN "wh" "wh" "wh" "an ka" Pl Masc Pers3_Distant ; ---- + this_Quant = demoPN "yh" "as" "an"; + through_Prep = ss ["myN sE"] ; + too_AdA = ss "bht" ; + to_Prep = ss "kw" ; + under_Prep = ss "nycE" ; + very_AdA = ss "bht" ; + want_VV = mkV "cahna" ** { isAux = False} ; + we_Pron = personalPN "hm" "hm" "hm" "hmara" Pl Masc Pers1 ; + whatSg_IP = mkIP "kya" "kis" "kis" Sg Masc ; + whatPl_IP = mkIP "kya" "kin" "kin" Pl Masc ; + when_IAdv = ss "kb" ; + when_Subj = ss "kb" ; + where_IAdv = ss "khaN" ; + which_IQuant = {s = \\_ => "kwn sy"} ; +-- whichPl_IDet = makeDet "kwn sa" "kwn sy" "kwn sE" "kwn sy" ; +-- whichSg_IDet = makeDet "kwn sa" "kwn sy" "kwn sE" "kwn sy" ; + whoSg_IP = mkIP "kwn" "kis" "kis" Sg Masc ; + whoPl_IP = mkIP "kwn" "kn" "knhwN" Pl Masc ; + why_IAdv = ss "kywN" ; + without_Prep = ss ["kE bGyr"] ; + with_Prep = ss ["kE sath-"] ; +-- yes_Phr = ss "haN" ; + yes_Utt = ss "haN" ; + youSg_Pron = personalPN "tm" "tm" "tm" "tmh-ara" Sg Masc Pers2_Casual ; + youPl_Pron = personalPN "tm" "tm" "tm" "tmh-ara" Pl Masc Pers2_Casual ; + youPol_Pron = personalPN "Ap" "AP" "AP" "Ap ka" Sg Masc Pers2_Respect ; + no_Quant = demoPN " kwy nhyN" "kwy nhyN" "kwy nhyN" ; + not_Predet = {s="nhyN"} ; + if_then_Conj = sd2 "agr" "tw" ** {n = Sg} ; + at_least_AdN = ss ["km az km"] ; + at_most_AdN = ss ["zyadh sE zyadh"]; + nothing_NP = MassNP (UseN (ParadigmsUrd.mkN "kwy cyz nhyN" "kwy cyz nhyN" "kwy cyz nhyN" "kwy cyz nhyN" "kwy cyz nhyN" "kwy cyz nhyN" Masc )); + except_Prep = ss "swaE" ; + nobody_NP = MassNP (UseN (ParadigmsUrd.mkN "kwy nhyN" "kwy nhyN" "kwy nhyN" "kwy nhyN" "kwy nhyN" "kwy nhyN" Masc )); + + as_CAdv = {s = "etna" ; p = "jtna"} ; + + have_V2 = mkV2 (mkV "rakh-na") "" ; + + language_title_Utt = ss "ardw" ; + +} +