Wîkîferheng kuwiktionary https://ku.wiktionary.org/wiki/Destp%C3%AAk MediaWiki 1.47.0-wmf.5 case-sensitive Medya Taybet Gotûbêj Bikarhêner Gotûbêja bikarhêner Wîkîferheng Gotûbêja Wîkîferhengê Wêne Gotûbêja wêneyî MediaWiki Gotûbêja MediaWiki Şablon Gotûbêja şablonê Alîkarî Gotûbêja alîkariyê Kategorî Gotûbêja kategoriyê Pêvek Gotûbêja pêvekê Nimînok Gotûbêja nimînokê Portal Gotûbêja portalê Tewandin Gotûbêja tewandinê Jinûvesazî Gotûbêja jinûvesaziyê TimedText TimedText talk Modul Gotûbêja modulê Event Event talk fer 0 9102 6237255 6096630 2026-06-07T14:29:55Z Bibliophile 1215 /* Navdêr */ 6237255 wikitext text/x-wiki == {{ziman|ku}} == === Bilêvkirin === * {{ku-kîte}} === Navdêr === {{navdêr|ku|z=m}} # [[kit]], [[lib]], <br>[[yek]] ji [[du]] tiştên [[bi hev re]], yek ji [[cot]]ekê, ne [[zo]] #: {{nim|ku|'''Ferek''' pêlava min ne diyar e.}} #* {{jêder-malper|ku|jêgirtin=Dibêjin gava bedewa Hollandayê Nezrî xanimê laşê yekî serbaz firkandiye, bêhemdî wê destê wê şemitîye nav doxîna ê serbaz û qêrînî bi wî ketiye. Tu nabê '''ferek''' gunê wî di nav destê Nezlî xanimê de perçiqîye, ê serbaz li kerê siwar kirine û berê wî dane nexweşxanê.|nivîskar=Şaron Kardo-|sernav=Lawo wijdan nemaye haa!|url=http://lotikxane.com/arsiv/arsiv%2039.htm|malper=lotikxane.com|dîrok=21.11.06}} # [[ferd]], [[kes]], [[şexs]] #* {{bêmînak|ku}} ==== Jê ==== {{kol3|ku|cure=Jê |fer bûn<pos:lêker> |fer kirin<pos:lêker> |ferbûn<pos:navdêr> |ferkirin<pos:navdêr> |ferbûyî<pos:rengdêr> |ferkirî<pos:rengdêr> |ferî }} ==== Etîmolojî ==== Ji {{ji|ar|ku|فرد}}. D ji peyvê ketiye wek kirdin (Sorani) û kirin (Kurmanci). ==== Werger ==== {{werger-ser}} * {{Z|ar}}: {{W|ar|فريد|guman=erê}}, {{W|ar|ماسة|guman=erê}}, {{W|ar|متحتم|guman=erê}} * {{Z|en}}: {{W|en|priority|guman=erê}} * {{Z|tr}}:{{W|tr|fer|guman=erê}}, {{W|tr|harlaklık|guman=erê}} {{werger-bin}} === Rengdêr === {{rengdêr|ku}} # [[ferz]], [[muhim]], [[giring]], pêdviye, [[lazim]] #: {{nim|ku|Ya '''fer''' e es evru biçim sîkê.}} #: {{nim|ku|Ya '''fer''' e ez îro biçim sûkê.}} ==== Werger ==== {{werger-ser}} * {{Z|ar}}: {{W|ar|أساسي}}, {{W|ar|مهم}}, {{W|ar|ضروري}} * {{Z|fa}}: {{W|fa|فرد}}, {{W|fa|فرید}}, {{W|fa|لنگه}}, {{W|fa|تخته سنگی}}, {{W|fa|عددفرد}} * {{Z|en}}: {{W|en|azygous}}, {{W|en|essential}}, {{W|en|must}}, {{W|en|important}} * {{Z|tr}}: {{W|tr|tek}}, {{W|tr|ünik}}, {{W|tr|yumurtalık}}, {{W|tr|biricik}} {{werger-bin}} == {{ziman|an}} == === Lêker === {{lêker|an}} # [[kirin#ku|kirin]] #* {{bêmînak|an}} == {{ziman|fr}} == === Bilêvkirin === * {{IPA|fr|/fɛʁ/}} * {{deng|fr|Fr-fer.ogg|Deng (Parîs)}} "du fer" * {{deng|fr|LL-Q150 (fra)-GrandCelinien-fer.wav|Deng|dever=Parîs, Fransa}} * {{deng|fr|LL-Q150 (fra)-Lyokoï-fer.wav|Deng|dever=Lyon, Fransa}} * {{deng|fr|LL-Q150 (fra)-Poslovitch-fer.wav|Deng|dever=Cornimont, Fransa}} * {{deng|fr|LL-Q150 (fra)-WikiLucas00-fer.wav|Deng|dever=Lyon, Fransa}} * {{deng|fr|LL-Q150 (fra)-LoquaxFR-fer.wav|Deng|dever=Vosges, Fransa}} * {{deng|fr|LL-Q150 (fra)-Lepticed7-fer.wav|Deng|dever=Aude, Fransa}} === Navdêr === {{navdêr|fr|z=n|p=fers}} # {{f|fr|kîmya}} [[asin]], [[hesin]] #* {{bêmînak|fr}} # [[nal]] #: {{mk|fr|'''fer''' à cheval|nala hespê|rêz=1}} # [[ûtî]] #: {{mk|fr|'''fer''' à repasser|utî|rêz=1}} #: {{mk|fr|Aujourd′hui je n′ai pas pu repasser parce que mon '''fer''' ne fonctionne plus.|Îro min nekarî ûtî bikim lewra ûtîya min hêdihew kar nake.}} == {{ziman|enm}} == === Navdêr === {{navdêr|enm}} # {{g|ku|tirs}} #* {{bêmînak|enm}} === Çavkanî === {{rûpela wergerê|enm|tirs}} == {{ziman|en}} == === Bilêvkirin === * {{deng|en|LL-Q1860 (eng)-Wodencafe-fer.wav|Deng|dever=Teksas, DYA}} === Daçek === {{daçek|en}} # {{bnr|for}} #* {{bêmînak|en}} == {{ziman|sga}} == === Navdêr === {{navdêr|sga|z=n}} # {{f|sga|mirov}} {{g|ku|mêr}}, {{g|ku|zilam}}, {{g|ku|zelam}} (mirovê nêr yê mezinbûyî) #* {{bêmînak|sga}} == {{ziman|ca}} == === Bilêvkirin === * {{deng|ca|LL-Q7026 (cat)-Unjoanqualsevol-fer.wav|Deng|dever=El Prat de Llobregat, Spanya}} === Lêker === {{lêker|ca}} # [[kirin]] #* {{bêmînak|ca}} == {{ziman|mfe}} == === Lêker === {{lêker|mfe}} # [[kirin#ku|kirin]] #* {{bêmînak|mfe}} == {{ziman|lld}} == === Navdêr === {{navdêr|lld}} # {{f|lld|element}} {{g|ku|hesin}} #* {{bêmînak|lld}} === Çavkanî === {{rûpela wergerê|lld|hesin}} == {{ziman|gv}} == === Navdêr === {{navdêr|gv|z=n}} # {{f|gv|mirov}} {{g|ku|mêr}}, {{g|ku|zilam}}, {{g|ku|zelam}} (mirovê nêr yê mezinbûyî) #* {{bêmînak|gv}} == {{ziman|nrf}} == === Navdêr === {{navdêr|nrf|z=n}} # {{f|nrf|element}} {{g|ku|hesin}} #* {{bêmînak|nrf}} === Çavkanî === {{rûpela wergerê|nrf|hesin}} == {{ziman|pms}} == === Navdêr === {{navdêr|pms}} # {{f|pms|element}} {{g|ku|hesin}} #* {{bêmînak|pms}} === Çavkanî === {{rûpela wergerê|pms|hesin}} == {{ziman|tr}} == === Navdêr === {{navdêr|tr}} # [[çirûsî]], [[ronayî]] #* {{bêmînak|tr}} # [[bînayî]], [[beysûs]], [[bêsûs]], [[ronî]], fer: #: {{mk|fr|Gözümde '''fer''', ağzımda diş kalmamış.|Di çavê min de bînayî, di devê min de didan nemane.|rêz=1}} #: {{mk|fr|Gözlerimin '''fer'''i azalmış.|Bînayên çavê min kêm bûne.|rêz=1}} 5urttj782yg5itv3tbn6y1slimjcf7a tûk 0 43116 6237296 6135015 2026-06-08T09:33:50Z CommonsDelinker 61 Replacing Climing_anchor.JPG with [[File:Climbing_anchor.jpg]] (by [[:c:User:CommonsDelinker|CommonsDelinker]] because: [[:c:COM:FR|File renamed]]: [[:c:COM:FR#FR3|Criterion 3]] (obvious error)). 6237296 wikitext text/x-wiki == {{ziman|ku}} == === Bilêvkirin === * {{ku-kîte}} === Navdêr 1 === {{navdêr|ku|z=m}}, {{t-ya req}}, {{k-ya nerm}} # [[tif]], [[av]]a [[dev]]î #* {{bêmînak|ku}} ==== Bide ber ==== * [[tak]] * [[tok]] * [[tek]] * [[tik]] * [[tîk]] ==== Binêre herwiha ==== * [[bûk]] * [[çûk]] * [[sûk]] ==== Jê ==== * [[tûkandin]] * [[tûkkirin]] ==== Etîmolojî ==== {{bêetîmolojî}} ==== Werger ==== {{werger-ser}} * {{Z|de}}: {{W+|de|Feder|f}}, {{W+|de|Speichel|m}}, {{W+|de|Spucke|f}} * {{Z|fa}}: {{W+|fa|آب دهان}}, {{W+|fa|تف|guman=erê}}, {{W+|fa|خدو|guman=erê}}, {{W-|fa|نوعی پرنده|guman=erê}} * {{Z|en}}: {{W+|en|saliva}}, {{W+|en|film|guman=erê}}, {{W+|en|fluff|guman=erê}}, {{W+|en|skim|guman=erê}}, {{W+|en|spittle|guman=erê}} * {{Z|tr}}: {{W+|tr|tükürük}}, {{W+|tr|budak|guman=erê}}, {{W+|tr|tüy|guman=erê}}, {{W+|tr|zübde|guman=erê}} {{werger-bin}} === Navdêr 2 === {{navdêr|ku|z=?}} # (perdeya mastî) ''Binere'' '''[[sertûk]]''' === Navdêr 3 === [[Wêne:Climbing anchor.jpg|thumb|150px|Xeleka ku werîsê biserketinê digire.]] {{navdêr|ku|z=m}} # [[xelek]], [[heleq]], [[gogir]], [[çember]] #* {{bêmînak|ku}} ==== Bi alfabeyên din ==== * {{ku-ar|تووک}} ==== Etîmolojî ==== {{bêetîmolojî}} ==== Werger ==== {{werger-ser}} * {{Z|en}}: {{W+|en|setting}}, {{W+|en|anchor}} {{werger-bin}} 1qso6kuk9fzlkvqzo8eg2v8z4taoned zo 0 53849 6237290 6137671 2026-06-08T07:25:09Z Bibliophile 1215 6237290 wikitext text/x-wiki == {{ziman|ku}} == === Bilêvkirin === * {{ku-kîte}} === Rengdêr === {{rengdêr|ku}} # [[du|Du]] tişt yan kes [[bi hev re]], [[çift]] #: ''Kevirên di destê min yê çepê de veşartî bêje: fer yan '''zo'''?'' #: {{hevmaneyên peyvê|ku|cot}} # [[cêwî]], [[cêmik]], [[hevalcêmk]] #* {{jêder|ku|jêgirtin=Em ji piştî şeş an deh rojên meha Remezanê re şeşek an dehek dibêjin. Bi wateya cêwî em "'''zo'''" bi kar tînin.|Abdurrahman Önen di koma "Zimanê Kurdî" ya [[Rûname]]yê de, 12/2011}} ==== Dijmane ==== * {{g|ku|fer}} * {{g|ku|kit}} ==== Bide ber ==== * {{g|ku|zû}} * {{g|ku|za}} ==== Jê ==== {{kol3|ku|cure=Jê |zo bûn<pos:lêker> |zo kirin<pos:lêker> |zobûn<pos:navdêr> |zokirin<pos:navdêr> |zobûyî<pos:rengdêr> |zokirî<pos:rengdêr> }} ==== Etîmolojî ==== Ji {{deyn|ar|ku|زوج}} (zewc: [[cot]]; [[mêr]], [[hevser]]), têkilî [[zewac]], [[zewc]], [[zewce]], [[izdiwac]], ji {{ji|arc|ku|זוגא}} (zewga: [[cot]]; [[hevser]], [[jin]] yan [[mêr]]) ji {{ji|el|ku|ζυγός}} (zugos: [[cot]], du tiştên li gel hev) ji {{ji|ine-pro|ku|-}} [[yeug-]] (bi hev ve [[girê]] dan) ku herwiha serekaniya [[cot]] ya kurdî ye jî. Bo guherîna "-ew-" bi "-o-" bide ber "[[xox]]" ji erebî "xewx". Bo ketina "c" ji dawiya peyvê bide ber "[[gazin]]" ji "gazinc / gazind". ==== Werger ==== {{werger-ser}} * {{Z|de}}: {{W+|de|doppelt}}, {{W+|de|Pärchen}} {{nt}} * {{Z|fa}}: {{W-|fa|یک جفت}} * {{Z|en}}: {{W+|en|pair}}, {{W+|en|double}}, {{W+|en|dyad}}, {{W+|en|twosome}} * {{Z|tr}}: {{W+|tr|çift}}, {{W+|tr|çifte}} {{werger-bin}} == {{ziman|lou}} == === Cînav === {{cînav|lou}} # {{g|ku|we}} ([[hûn]]) #* {{bêmînak|lou}} == {{ziman|nl}} == === Hoker === {{hoker|nl}} # {{g|ku|zû}}, {{g|ku|bi lez}} #* {{bêmînak|nl}} === Çavkanî === {{rûpela wergerê|nl|zû}} kncuoroklbyxuusoqmidfimfwqr30xa diltêrbûn 0 263185 6237295 6211109 2026-06-08T08:50:37Z IbrahimKocher Duhok 4280 Werger: +îngilîzî : [[satisfaction]] (bi alîkarî) 6237295 wikitext text/x-wiki == {{ziman|ku}} == === Bilêvkirin === * {{ku-IPA}} * {{ku-kîte}} === Navdêr === {{ku-tewîn-nav|diltêrbûn|mê}} {{navdêr|ku|z=m}} # dil ji kare mirovek yan xwarinekê têr bibit ango êdî wî naxwazit êdî nevêt bi bînit, dil jê re bûn, #: ''Dilê min ji dinyayê '''têr bûye''''' #:: ''ji her tiştî ez bêzar bûme''<ref>{{Ferhenga Kamêran}}</ref> ==== Etîmolojî ==== Ji ''[[dil]] + [[têr]] + [[bûn]]'' ==== Werger ==== {{werger-ser}} * {{Z|en}}: {{W+|en|satisfaction}} * {{Z|tr}}: {{W|tr|tatmin}} {{werger-bin}} === Çavkanî === {{çavkanî}} === Çavkanî === {{çavkanî}} hp8n3yyhmzw4avw01jtwt2lv184ljhb هموطن 0 370908 6237288 5878284 2026-06-08T06:01:43Z Atitarev 702 Atitarevî/ê navê [[هم وطن]] weke [[هموطن]] guhart 5878284 wikitext text/x-wiki == {{ziman|fa}} == === Mane === {{bêcure|fa}} # [[hemwelat]], [[hemwelatî]], [[hevwelatî]], [[welatî]], [[welatî]] pd2xfar6pykaae80n1ge5n0r0wegkf2 têrbûnî 0 380455 6237294 5887700 2026-06-08T08:49:33Z IbrahimKocher Duhok 4280 /* Werger */ 6237294 wikitext text/x-wiki == {{ziman|ku}} == === Bilêvkirin === * {{ku-IPA}} * {{ku-kîte}} === Navdêr === {{navdêr|ku|z=m}} # [[diltêrbûn]], [[tetmîn]] ==== Etîmolojî ==== Ji {{qertaf|ku|têr|-bûnî}}. ==== Werger ==== {{werger-ser}} * {{Z|en}}: {{W+|en|satisfaction}} * {{Z|tr}}: {{W+|tr|tatmin}} {{werger-bin}} tu6dbcw5yoyhjejjlkkbvdejwnu2w06 peristyar 0 440012 6237292 6177304 2026-06-08T08:46:57Z IbrahimKocher Duhok 4280 /* Werger */ 6237292 wikitext text/x-wiki == {{ziman|ku}} == === Bilêvkirin === * {{ku-kîte}} === Navdêr === {{navdêr|ku|z=m}} # [[perest]], [[peristvan]], yê/a ku peristinê dike li [[der]]ek pîroz mîna [[mizgeft]] û [[kenîse|kenîs]]a #: {{mk|ku|Gelek corên '''peristyar'''an hene.}} ==== Etîmolojî ==== * [[perist]] +[[-yar]] ==== Werger ==== {{werger-ser}} * {{Z|en}}: {{W+|en|worshipper}} {{werger-bin}} 92ijwm0ro16gml8e94vl8q6b4patoeq tetmîn 0 450415 6237293 5787879 2026-06-08T08:49:14Z IbrahimKocher Duhok 4280 Werger: +îngilîzî : [[satisfaction]] (bi alîkarî) 6237293 wikitext text/x-wiki == {{ziman|ku}} == === Mane === {{cure?|ku}} # [[warestetî]], [[têrxwarî]], [[têrxwarîtî]], [[têrî]], [[têrbûnî]], [[diltêrbûn]] ==== Etîmolojî ==== {{bêetîmolojî}} ==== Werger ==== {{werger-ser}} * {{Z|en}}: {{W+|en|satisfaction}} * {{Z|tr}}: {{W+|tr|doygunluk}}, {{W+|tr|doyum}}, {{W+|tr|tatmin}}, {{W+|tr|tatmin}} {{werger-bin}} {{kontrol}} nxkpxnqub0y2iayzyjshks04ft2w6bi zûzûka 0 450519 6237291 6180422 2026-06-08T08:29:35Z Bibliophile 1215 6237291 wikitext text/x-wiki == {{ziman|ku}} == === Bilêvkirin === * {{ku-kîte}} === Hoker === {{hoker|ku}} # [[bi ecele|Bi ecele]], [[bi lezûbez]], [[bi lezgînî]], [[bi lez]], [[heman]], [[derhal]], [[hanhanka]], [[lezelez]], leza beza, [[lezlezî]], zû zû, [[zûka]], [[çipçip]], [[çarçapik]], [[bi lezayî]], [[tavil]]. ==== Etîmolojî ==== {{bêetîmolojî}} ==== Werger ==== {{werger-ser}} * {{Z|de}}: {{W+|de|hastig}}, {{W-|de|sehr schnell}} * {{Z|fa}}: {{W-|fa|بی‌خبر}} * {{Z|en}}: {{W+|en|abrupt}}, {{W+|en|just yet}}, {{W+|en|on the nail}} * {{Z|tr}}: {{W+|tr|acilen}}, {{W+|tr|alâminüt}}, {{W+|tr|alelacele}}, {{W+|tr|apar topar}}, {{W+|tr|atıştırmak}}, {{W+|tr|bir hamlede}}, {{W+|tr|bir koşu}}, {{W+|tr|çabucacık}}, {{W+|tr|çabucak}}, {{W+|tr|çabuk çabuk}}, {{W+|tr|çabukça}}, {{W+|tr|çarçabuk}}, {{W+|tr|hemencecik}}, {{W+|tr|hızla}}, {{W+|tr|hızlı hızlı}}, {{W+|tr|lahzada}}, {{W+|tr|serian}}, {{W+|tr|tez beri}}, {{W-|tr|tez tez}} {{werger-bin}} sa1j20v8ys1slzkedqieoqoiz45zooj Modul:ku-tewandin 828 628614 6237257 6237223 2026-06-07T14:37:08Z Ghybu 1393 + devoka rojhilatî ji bo rehê dema niha 6237257 Scribunto text/plain -- Modula tewandina lêkerên kurmancî local export = {} -- Load irregular forms table -- local irreg = require('Module:ku-tewandin/dijrêzik') local langKu = require("Modul:languages").getByCode("ku") local link = require('Module:links').language_link local shallowCopy = require("Module:table/shallowCopy") local deepCopy = require("Module:table/deepCopy") -- ============================================================================= -- Pronouns in Kurmanji -- ============================================================================= export.order = {"s1", "s2", "s3", "p1", "p2", "p3"} export.pronouns = { s1 = "ez", p1 = "em", s2 = "tu", p2 = "hûn", s3 = "ew", p3 = "ew" } export.obliquePronouns = { s1 = "min", p1 = "me", s2 = "te", p2 = "we", s3 = "wê/wî", p3 = "wan" } export.agents = { s1 = "te, wî, wê, we, wan", p1 = "te, wî, wê, we, wan", s2 = "min, wî, wê, me, wan", p2 = "min, wî, wê, me, wan", s3 = "min, te, wî, wê, me, we, wan", p3 = "min, te, wî, wê, me, we, wan" } -- Oblique pronoun (green) export.obliquePronounsGreen = { s1 = '<span style="color:green">min</span>', s2 = '<span style="color:green">te</span>', s3 = '<span style="color:green">wê/wî</span>', p1 = '<span style="color:green">me</span>', p2 = '<span style="color:green">we</span>', p3 = '<span style="color:green">wan</span>' } -- ───────────────────────────────────────────────────────────────────────────── -- 1) This function returns correct subject/agent pronoun, ergativity rule: -- - Transitive verbs in past tenses → oblique pronoun (green) = agent -- - All other cases → direct pronoun (no color) = subject -- 2) Also add the subjunctive prefix "(bila)" -- ───────────────────────────────────────────────────────────────────────────── function export.conjPronouns(stemType, mode, isTransitive) local pronouns = shallowCopy(export.pronouns) -- Ergativity in kurdish: transitive verbs that are conjugated with the past tense stem are -- conjugated according to the object, not the subject. -- Therefore, to have an ergative construction, -- the verb must be transitive and its stem must be the stem of the past tense. local isErgative = isTransitive and (stemType == 'past') -- If it's ergative, we use oblique pronouns: "min", "te", ... -- If it's not ergative, we use normal pronouns: "ez", "tu", ... if isErgative then pronouns = shallowCopy(export.obliquePronounsGreen) end -- For the subjunctive mood, we add "(bila)" at the beginning. if mode == 'subjunctive' then local subjPrefix = '<span style="color:gray">(bila)</span>' for _, pers in ipairs(export.order) do pronouns[pers] = subjPrefix .. ' ' .. pronouns[pers] end end return pronouns end -- ============================================================================= -- VERBAL STRUCTURE IN THE INFINITIVE: -- Verbs in the infinitive appear in three main forms: -- 1) Simple verb (indivisible light verb): -- - ex.: "kirin", "çûn", "xwarin", ... -- 2) Verbs with preverbs (preverb + simple verb): -- - ex.: "rakirin" (ra- + kirin), "çêkirin" (çê- + kirin), "vexwarin" (ve- + xwarin), ... -- - Preverb verbs don't use the prefix "bi-" (ez ê rakim , ew ê rake , ...) -- 3) Compound verbs, construction with non-verbal element (the noun is not attached to the verb): -- - Left of the simple verb: "hez kirin" ("hez" + "kirin"), "li dar xistin" ("li dar" + "xistin"), ... -- - Right of the simple verb: "kirin der" ("kirin" + "der"), "girtin ser xwe" ("girtin" + "ser xwe"), ... -- - Compound verbs use the prefix "bi-" (ez ê hez bi-kim , ew ê hez bi-ke ) -- STRUCTURE: preSimpleVerb + spacing + simpleVerb + postSimpleVerb -- EX. kirin: preSimpleVerb=''; spacing=false; simpleVerb='kirin'; postSimpleVerb='' -- rakirin: preSimpleVerb='ra'; spacing=false; simpleVerb='kirin'; postSimpleVerb='' -- hez kirin: preSimpleVerb='hez'; spacing=true; simpleVerb='kirin'; postSimpleVerb='' -- pev çûn: preSimpleVerb='pev'; spacing=true; simpleVerb='çûn'; postSimpleVerb='' -- kirin der: preSimpleVerb=''; spacing=false; simpleVerb='kirin'; postSimpleVerb='der' -- WARNING: Conjugation can vary depending on the type of verb. -- For example, in the future tense,the prefix "bi" is used for compound verbs, -- but not for preverbal verbs, see the function that manages it "tenseRules" table. -- This table does not yet support the mixed case: a verb composed of a noun and a preverb verb. -- ============================================================================= function export.verbStruct(isCompoundVerb, preSimpleVerb) local struct if (preSimpleVerb and preSimpleVerb ~= '' and not isCompoundVerb) then struct = 'preverbVerb' elseif isCompoundVerb then struct = 'compoundVerb' else struct = 'simpleVerb' end return struct end -- ================================================================ -- INFLECTIONAL ENDINGS -- Assigns verb inflectional endings (suffixes) to all tenses -- ================================================================ local getEndings = {} do -- ─────────────────────────────────────────────────────────────── -- Ending using present stem -- ─────────────────────────────────────────────────────────────── getEndings['present'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local ends = {} if mw.ustring.match(stem, '[aeêiîouû]$') then ends['std'] = {s1='m', s2='yî', s3='', p1='n', p2='n', p3='n'} ends['rojhilatî'] = {s1='m', s2='(y)', s3='t', p1='yn', p2='n', p3='n'} else ends['std'] = {s1='im', s2='î', s3='e', p1='in', p2='in', p3='in'} ends['rojhilatî'] = {s1='im', s2='î', s3='<u>it</u>/ît', p1='în', p2='in', p3='in'} end return ends end -- ─────────────────────────────────────────────────────────────── -- Ind. preterite + ind. imperfect ending -- ─────────────────────────────────────────────────────────────── getEndings['past'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local ends if mw.ustring.match(stem, '[aeêiouû]$') then ends = {s1='m', s2='yî', s3='', p1='n', p2='n', p3='n'} elseif mw.ustring.match(stem, 'î$') then -- if self.name == 'indImperfect' then -- -- special indicative ind. imperfect rule -- ends = {s1='yam', s2='yayî', s3='ya', p1='yan', p2='yan', p3='yan'} -- end ends = {s1='m', s2='', s3='', p1='n', p2='n', p3='n'} else ends = {s1='im', s2='î', s3='', p1='in', p2='in', p3='in'} end return ends end -- ─────────────────────────────────────────────────────────────── -- Compound endings with auxiliary "bûn" -- Inflectional endings are created by taking the different forms of the -- verb "bûn" (with present stem "-b-" and past stem "-bû-") and -- adding an "i-" prefix before them: "i-b-im", "i-bû-m", "i-bû-me", "i-bû-ma". -- This "i-" varies according to the final letter of the verb stem. -- ─────────────────────────────────────────────────────────────── local function normalize_i(stem) local prfx_i = "i" if mw.ustring.match(stem, "ya$") or mw.ustring.match(stem, "[îû]$") then -- cf. karîn (-karî-) prfx_i = "" elseif mw.ustring.match(stem, '[aeêiou]$') then prfx_i = "yi" end return prfx_i end getEndings['ibim'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local prfx_i = normalize_i(stem) return { s1 = prfx_i .. "bim", p1 = prfx_i .. "bin", s2 = prfx_i .. "bî", p2 = prfx_i .. "bin", s3 = prfx_i .. "be", p3 = prfx_i .. "bin" } end getEndings['ibûm'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local prfx_i = normalize_i(stem) return { s1 = prfx_i .. "bûm", p1 = prfx_i .. "bûn", s2 = prfx_i .. "bûyî", p2 = prfx_i .. "bûn", s3 = prfx_i .. "bû", p3 = prfx_i .. "bûn" } end getEndings['ibûme'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local prfx_i = normalize_i(stem) return { s1 = prfx_i .. "bûme", p1 = prfx_i .. "bûne", s2 = prfx_i .. "bûyiye", p2 = prfx_i .. "bûne", s3 = prfx_i .. "bûye", p3 = prfx_i .. "bûne" } end getEndings['ibûma'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local prfx_i = normalize_i(stem) return { s1 = prfx_i .. "bûma", p1 = prfx_i .. "bûna", s2 = prfx_i .. "bûyayî", p2 = prfx_i .. "bûna", s3 = prfx_i .. "bûya", p3 = prfx_i .. "bûna" } end -- ─────────────────────────────────────────────────────────────── -- Ind. perfect ending. -- ─────────────────────────────────────────────────────────────── getEndings['ime'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local ends if mw.ustring.match(stem, '[aeêiîouû]$') then ends = {s1="me", s2="yî", s3="ye", p1="ne", p2="ne", p3="ne"} else ends = {s1="ime", s2="iyî", s3="iye", p1="ine", p2="ine", p3="ine"} end return ends end -- ─────────────────────────────────────────────────────────────── -- Subj. Imperfect ending. -- ─────────────────────────────────────────────────────────────── getEndings['ama'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local ends -- The doublet in "-iyan" of verbs in -"în" (gerîn/-geriya-, kenîn/-keniya-, ...), -- in the conditional and subjunctive moods, a doublet "yaya" appears; it's removed. -- -yayayî → -yayî; -yaya → -ya if mw.ustring.match(stem, '(ya)$') then ends = {s1="ma", s2="yî", s3="", p1="na", p2="na", p3="na"} elseif mw.ustring.match(stem, '[aeêiîouû]$') then ends = {s1="ma", s2="yayî", s3="ya", p1="na", p2="na", p3="na"} else ends = {s1="ama", s2="ayî", s3="a", p1="ana", p2="ana", p3="ana"} end return ends end end -- ============================================================================= -- RULES FOR PREVERBS: "bi-" and "di-" -- There are two preverbs: "bi-" and "di-". These preverbs can change form -- depending on the first letters of the verb’s present stem or past stem. -- ============================================================================= local getPreverb = {} do getPreverb['bi'] = function (opts) opts = opts or {} local stem = opts.stem local verbStruct = opts.verbStruct local overrideBi = opts.overrideBi -- Preverb verbs don't use the preverb "bi-": ra-kirin (ez ê rakim), ve-xwarin (ez ê vexwim) , ... -- But compound verb and simple verbs use it: hez kirin (ez ê hez bi-kim), lê bigirin (ez ê lê bi-girim), ... if (verbStruct == 'preverbVerb') then return '' end if overrideBi then return overrideBi end -- if irreg.dijrezikBi[stem] then return irreg.dijrezikBi[stem] end -- Modification of the preverbe "bi-" according to the last letter of the stem. if mw.ustring.match(stem, '^[aeêiîouû]') then return 'b' end return 'bi' end getPreverb['di'] = function (opts) opts = opts or {} local stem = opts.stem local overrideDi = opts.overrideDi if overrideDi then return overrideDi end -- if irreg.dijrezikDi[stem] then return irreg.dijrezikDi[stem] end -- Modification of the preverbe "di-" according to the last letter of the stem. if mw.ustring.match(stem, '^[ai]') then return 'd' end -- Ex. hatin : stem = -ê- // ez têm if mw.ustring.match(stem, '^[êî]') then return 't' end return 'di' end end -- ============================================================================= -- RULES FOR NEGATION PREFIXES: "na-" and "ne-" -- There are two negation prefixes: "na-" and "ne-". These preverbs can change -- form depending on the first letters of the verb’s present stem or past stem. -- ============================================================================= local getNegPrefix = {} do getNegPrefix['na'] = function (opts) opts = opts or {} local stem = opts.stem local overrideNa = opts.overrideNa if overrideNa then return '<b>' .. overrideNa .. '</b>' end -- if irreg.dijrezikNa[stem] then return irreg.dijrezikNa[stem] end -- Add sufix "-y" before certain vowels. if mw.ustring.match(stem, '^[eêiîouû]') then return '<b>nay</b>' end -- Elision before stems beginning with "a-" (removal of the final "-e"). if mw.ustring.match(stem, '^a') then return '<b>n</b>' end -- Tîpa duyem "-a-" ye (k-a-rîn, z-a-nîn, ...) if mw.ustring.match(stem, '^%wa') then return '<b>ni</b>' end return '<b>na</b>' end getNegPrefix['ne'] = function (opts) opts = opts or {} local stem = opts.stem local tenseName = opts.tenseName local impNegForm = opts.impNegForm local overrideNe = opts.overrideNe if overrideNe then return '<b>' .. overrideNe .. '</b>' end -- if irreg.dijrezikNe[stem] then return irreg.dijrezikNe[stem] end local negPrefix = 'ne' -- There are two forms of construction of the imperative, -- one with the prefix "me-" and the other with the prefix "ne-". if (tenseName == 'impPresent') then negPrefix = (impNegForm == 2) and 'ne' or 'me' end -- Add sufix "-y" before certain vowels. if mw.ustring.match(stem, '^[eêiîouû]') then return '<b>' .. negPrefix .. 'y</b>' end -- Elision before stems beginning with "a-" (removal of the final "-e"). if mw.ustring.match(stem, '^a') then negPrefix = mw.ustring.sub(negPrefix, 1, -2) return '<b>' .. negPrefix .. '</b>' end return '<b>' .. negPrefix .. '</b>' end end -- ============================================================================= -- Standardization of the PREVERBAL PARTICLE -- The proverbial particle "ê" is placed after the personal pronoun. -- ============================================================================= -- If there are no verbal preparticles, return empty table. function export.getPreverbParticules(preverbParticle, typeStem, isTransitive) if not preverbParticle then return {s1='', s2='', s3='', p1='', p2='', p3=''} end if preverbParticle == 'ê' then local isErgative = isTransitive and (typeStem == 'past') -- When the personal pronoun ends in a vowel, a "y-" is added before "ê". -- If it's ergative, we use oblique pronouns: "min", "te", ... if isErgative then return {s1='ê/dê', s2='yê/dê', s3='yê/dê', p1='yê/dê', p2='yê/dê', p3='ê/dê'} else return {s1='ê/dê', s2='yê/dê', s3='ê/dê', p1='ê/dê', p2='ê/dê', p3='ê/dê'} end end -- If the verbal preparticle is identical for all pronouns, -- we create a table with the same value. local preverbParticles = {} for _, pers in ipairs(export.order) do preverbParticles[pers] = preverbParticle end return preverbParticles end -- ============================================================================= -- RULES FOR CONSTRUCTING EACH VERB TENSE -- This table lists, for each verb tense, what elements are required to form it: -- - Verb conjugation is built by placing either the preverb "bi-" or "di-" before -- the verb stem (past or present), followed by a personal ending. -- - For the negative form, one of the prefixes "na-" or "ne-" is added as well. -- - In some cases, a preverbal particle such as /ê/ or /dê/ is added before -- the conjugated verb as well. -- Not: - The "negPreverb" (preverb (bi-/di-) for negative tenses) parameter has a -- value different from "nil" only for the Imperfect tense ("negPreverb=di"). -- - The parameter "negPrefix=na" is used only for the present indicative. -- -- Preverb "di", used in: "indPresent"(present stem), "indImperfect"(past stem) -- - Bo neyînî: pêşgira "di-" tenê di nav dema "IndImperfect" de tê bikaranîn. -- Preverb "bi", used in: "indFuture"(present stem), "subPresent"(present stem), -- "subImperfect"(past stem) = "condPresent"(past stem) -- - The prefix "bi-" isn't used in negative forms. -- -- Present stem, used in: "indPresent"(di)(na), -- "indFuture"(bi)(ne) = "subPresent"(bi)(ne) -- -- Past stem, used in: "indPreterite"(-)(ne), "indImperfect"(di)(ne), "indPluperfect"(-)(ne), -- "indPerfect"(-)(ne), "indNwPluperfect"(-)(ne), "indFuturePerfect"(-)(ne), -- "subPreterite"(-)(ne), -- "subImperfect"(bi)(ne) = "condPresent"(bi)(ne), -- "subPluperfect"(-)(ne) = "condPreterite"(-)(ne) -- ============================================================================= -- Some conjugations are identical except that they differ only in the preverbal particle (/ê/, /dê/). -- So, to avoid repeating the same information (and thus risking errors), -- we establish the common part shared between these verbs. local sharedTenseRules = { indFuture = { stem = "present", preverb = getPreverb['bi'], negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['present'] }, indFuturePerfect = { stem = "past", preverb = nil, negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['ibim'] }, subImperfect = { stem = "past", preverb = getPreverb['bi'], negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['ama'] }, subPluperfect = { stem = "past", preverb = nil, negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['ibûma'] } } local mt = { __index = function(t, k) local commonRules = t._commonRules if commonRules then return commonRules[k] end end } -- TENSES CONJUGATION RULES export.tenseRules = { -- IMPERATIVE MOOD impPresent = setmetatable({ name = "impPresent", nameKu = "raweya fermanî", nameEn = "present imperative", mode = "imperative", _commonRules = sharedTenseRules.indFuture, preverbParticle = nil }, mt), -- INDICATIVE MOOD indPresent = { name = "indPresent", nameKu = "dema niha", nameEn = "present", mode = "indicative", stem = "present", preverb = getPreverb['di'], negPreverb = nil, negPrefix = getNegPrefix['na'], endings = getEndings['present'], preverbParticle = nil }, indPreterite = { name = "indPreterite", nameKu = "raboriya sade", nameEn = "simple past", mode = "indicative", stem = "past", preverb = nil, negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['past'], preverbParticle = nil }, indImperfect = { name = "indImperfect", nameKu = "raboriya berdest", nameEn = "Imperfect", mode = "indicative", stem = "past", preverb = getPreverb['di'], negPreverb = getPreverb['di'], negPrefix = getNegPrefix['ne'], endings = getEndings['past'], preverbParticle = nil }, indPluperfect = { name = "indPluperfect", nameKu = "raboriya dûr", nameEn = "pluperfect", mode = "indicative", stem = "past", preverb = nil, negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['ibûm'], preverbParticle = nil }, indFuture = setmetatable({ name = "indFuture", nameKu = "dema bê", nameEn = "future", mode = "indicative", _commonRules = sharedTenseRules.indFuture, preverbParticle = 'ê' }, mt), indFuturePerfect = setmetatable({ name = "indFuturePerfect", nameKu = "dahatiya pêş", nameEn = "future perfect", mode = "indicative", _commonRules = sharedTenseRules.indFuturePerfect, preverbParticle = 'ê' }, mt), -- In some books, the "perfect" and "nonconfirmative pluperfect" tenses -- are classified in the "inferential mood" ("moda neşahidî"). -- Currently we classify them using the indicative mood (at the end). indPerfect = { name = "indPerfect", nameKu = "raboriya dûdar", nameEn = "perfect", mode = "indicative", stem = "past", preverb = nil, negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['ime'], preverbParticle = nil }, indNwPluperfect = { name = "indNwPluperfect", nameKu = "çîrokiya boriya dûdar", nameEn = "non-witnessed pluperfect", mode = "indicative", stem = "past", preverb = nil, negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['ibûme'], preverbParticle = nil }, -- SUBJUNCTIVE MOOD subjPresent = setmetatable({ name = "subjPresent", nameKu = "dema nihaya xwestekî", nameEn = "present subjunctive", mode = "subjunctive", _commonRules = sharedTenseRules.indFuture, preverbParticle = nil }, mt), subjPreterite = setmetatable({ name = "subjPreterite", nameKu = "dema boriya xwestekî", nameEn = "preterite subjunctive", mode = "subjunctive", _commonRules = sharedTenseRules.indFuturePerfect, preverbParticle = nil, }, mt), subjImperfect = setmetatable({ name = "subjImperfect", nameKu = "raboriya bilaniyê", nameEn = "imperfect subjunctive", mode = "subjunctive", _commonRules = sharedTenseRules.subImperfect, preverbParticle = nil, }, mt), subjPluperfect = setmetatable({ name = "subjPluperfect", nameKu = "raboriya dûr a bilaniyê", nameEn = "pluperfect subjunctive", mode = "subjunctive", _commonRules = sharedTenseRules.subPluperfect, preverbParticle = nil }, mt), -- CONDITIONAL MOOD condPresent = setmetatable({ name = "condPresent", nameKu = "çîrokiya dema nihaya mercî", nameEn = "present conditional", mode = "conditional", _commonRules = sharedTenseRules.subImperfect, preverbParticle = 'ê' }, mt), condPreterite = setmetatable({ name = "condPreterite", nameKu = "dema boriya mercî", nameEn = "preterite conditional", mode = "conditional", _commonRules = sharedTenseRules.subPluperfect, preverbParticle = 'ê' }, mt), } -- ============================================================================= -- MAIN CONJUGATION FUNCTOIN -- This function returns an array containing the conjugation table for a given -- tense as well as other information about the conjugated verb. -- ============================================================================= function export.conjugate(opts) opts = opts or {} -- Required parameters local tense = opts.tense or error("'tense' required", 2) --One of the two parameters is required: -- - If the tense uses the present stem, indicate "presentStem". -- - If it uses the past stem, indicate "pastStem". local presentStem = opts.presentStem local pastStem = opts.pastStem -- Optional parameters local isTransitive = opts.isTransitive or false -- Indicate if the verb is transitive (true/false) local isNegative = opts.isNegative or false -- Indicate if it's the negative form (true/false) local isCompoundVerb = opts.isCompoundVerb or false -- Indicate if it's a compound verb (true/false) local preSimpleVerb = opts.preSimpleVerb or '' -- The part before the simple verb local postSimpleVerb = opts.postSimpleVerb or '' -- The part after the simple verb -- These parameters are provided when the verb is irregular. -- Allows you to manually modify preverbs ("bi-"" or "di-") -- and negation prefixes ("na-" or "ne-") local overrideBi = opts.overrideBi or nil local overrideDi = opts.overrideDi or nil local overrideNa = opts.overrideNa or nil local overrideNe = opts.overrideNe or nil -- By default, the negation of the imperative is constructed from the prefix "me-"". -- To obtain the second variant, the prefix with "ne-", you must specify "impNegForm=2". local impNegForm = opts.impNegForm or nil -- Accent/ Devok local accent = opts.accent -- If "tags='na'", remove links/tags local tags = opts.tags or 'erê' -- If addPreverbParticles='na', remove preverb particles (ê/dê) before -- the conjugated verbs. local addPreverbParticles = opts.addPreverbParticles or 'erê' -- We add a space to the left of the "postSimpleVerb" because it shouldn't be attached -- to the simple verb. if (postSimpleVerb ~= '' and postSimpleVerb ~=nil) then postSimpleVerb = ' ' .. postSimpleVerb end -- Access to the classification table and retrieval of verb tense parameters local infoTense = deepCopy(export.tenseRules[tense], 'copy') or false -- We check that this tense is indeed in table "tenseRules". if (not infoTense) then return '<span style="color:red">Unknown tense: ' .. tense ..'</span>' end -- We check that one of the two parameters of the stem is given if (infoTense.stem == 'present' and not presentStem) then return '<span style="color:red">presentStem parameter required</span>' elseif (infoTense.stem == 'past' and not pastStem) then return '<span style="color:red">pasttStem parameter required</span>' end -- Choice between the present stem or past stem local stem = (infoTense.stem == 'present') and presentStem or pastStem --──────────────────────────── -- Conjugation construction -- -- ─────────────────────────── local preverb = '' local negPrefix = '' -- Ruturns the verb type: "simpleVerb" or "preverbVerb" or "compoundVerb" local verbStruct = export.verbStruct(isCompoundVerb, preSimpleVerb) if isNegative then negPrefix = infoTense.negPrefix{stem=stem, tenseName=tense, impNegForm=impNegForm, overrideNa=overrideNa, overrideNe=overrideNe} if infoTense.negPreverb then preverb = infoTense.negPreverb{stem=stem, verbStruct=verbStruct, overrideBi=overrideBi, overrideDi=overrideDi} end else if infoTense.preverb then preverb = infoTense.preverb{stem=stem, verbStruct=verbStruct, overrideBi=overrideBi, overrideDi=overrideDi} end end infoTense.conj = {} local spacing = isCompoundVerb and ' ' or '' local endings = infoTense:endings(stem) -- 'rojhilatî' accent for present stem / devok if (infoTense.stem == 'present') then endings = endings['std'] if (accent == 'rojhilatî') then endings = endings['rojhilatî'] end end local preverbParticles = export.getPreverbParticules(infoTense.preverbParticle, infoTense.stem, isTransitive) local isErgative = isTransitive and (infoTense.stem == 'past') -- Creating the conjugation table for a given tense for _, pers in ipairs(export.order) do local ending local conjSimbleVerb local conjVerb if isErgative then ending = endings.s3 else ending = endings[pers] end -- Adding space after the preverbal particle, and -- if "addPreverbParticles='na'": remove preverb particles (ê/dê). local preverbParticle = '' if infoTense.preverbParticle and addPreverbParticles ~= 'na' then preverbParticle = preverbParticles[pers] .. ' ' end conjSimbleVerb = negPrefix .. preverb .. stem .. ending -- Adding prefixe and suffixe conjVerb = preSimpleVerb .. spacing .. conjSimbleVerb .. postSimpleVerb -- Spelling correction(îy -> iy) conjVerb = mw.ustring.gsub(conjVerb, 'îy', 'iy') -- Add a link / if tags='na' no links if tags ~= 'na' then conjVerb = link{term=conjVerb, lang=langKu} end -- Addition of the preverbal particle infoTense.conj[pers] = preverbParticle .. conjVerb end -- Imperative if (infoTense.name == 'impPresent') then infoTense.conj.s1 = nil infoTense.conj.s2 = infoTense.conj.s3 infoTense.conj.s3 = nil infoTense.conj.p1 = nil -- infoTense.conj.p2 = infoTense.conj.p2 infoTense.conj.p3 = nil end return infoTense end -- ============================================================================= -- END -- ============================================================================= -- Some useful tools -- ============================================================================= -- Returns the list of verb tenses export.tensesList = function() local list = {} for _, tense in pairs(export.tenseRules) do table.insert(list, tense.name) end return list end -- Concatenation of pronouns and conjugated verbs -- (for a given conjugate tense in all persons of that tense) function export.concatPronomsVerbs(pronoms, conjVerbs) local concatTab = {} for _, pers in ipairs(export.order) do concatTab[pers] = pronoms[pers] .. ' ' .. conjVerbs[pers] end return concatTab end -- ============================================================================= -- ADDITIONAL STEM OF THE PAST AND PRESENT (pastStem2, ... and presentStem2, ...) -- This function does nothing more than add additional parameters for verb stems -- in the past and present tenses. -- Conjugations for the different stems will be separated by "/" -- ============================================================================= function export.conjugateLong(baseOpts, tense, presentStems, pastStems) local opts = baseOpts or {} opts.tense = tense or nil presentStems = presentStems or {} pastStems = pastStems or {} local infoTense = deepCopy(export.tenseRules[tense], 'copy') or false -- We check that this tense is indeed in table "tenseRules". if not infoTense then return '<span style="color:red">Unknown tense: ' .. tense ..'</span>' end local stems = (infoTense.stem == 'present') and presentStems or pastStems -- For each verb stem, its conjugation table is calculated and stored in conjTabs. local conjTabs = {} for i = 1, #stems do if stems[i] then if (infoTense.stem == 'past') then opts.pastStem = stems[i] end if (infoTense.stem == 'present') then opts.presentStem = stems[i] end local conj = export.conjugate(opts).conj table.insert(conjTabs, conj) end end -- We concatenate each row of the conjugation tables. local concatConjTabs = {} for _, pers in ipairs(export.order) do local frag = {} for i = 1, #conjTabs do local val = conjTabs[i][pers] if val then table.insert(frag, tostring(val)) end end concatConjTabs[pers] = table.concat(frag, " / ") end infoTense.conj = concatConjTabs return infoTense end -- ==================================================================================== -- VERB CONUGATION IN ALL TENSES WITH OR WITHOUT PRONOUMS -- ==================================================================================== function export.conjugateAllTenses(baseOpts, presentStems, pastStems, negation, concatPrs) -- "concatPrs=false" table without pronouns local opts = baseOpts or {} if negation == 'negative' then opts.isNegative = true end -- Concatenation of pronouns and conjugated verbs local concatPronomsVerbs = export.concatPronomsVerbs -- Tenses list local tensesList = export.tensesList() -- Conjugation in all tenses local conjTab = {} for _, tense in ipairs(tensesList) do local infoTense = deepCopy(export.tenseRules[tense], 'copy') -- We create the conjugation table without the pronouns. conjTab[tense] = deepCopy(export.conjugateLong(opts, tense, presentStems, pastStems), 'copy') -- We concatenate the pronouns and the verbs if "concatPrs" is different of "false" -- No pronouns for the imperative mood if (tense ~= 'impPresent' and concatPrs ~= false) then local pronoms = deepCopy(export.conjPronouns(infoTense.stem, infoTense.mode, opts.isTransitive)) conjTab[tense].conj = concatPronomsVerbs(pronoms, conjTab[tense].conj) end end return conjTab end -- ==================================================================================== -- Allows you to obtain a given conjugation from a model. -- Ex. {{#invoke:ku-tewandin|tew|dem=indPresent|kes=s1}} -- See {{ku-tewîn-lk-niha}} -- ==================================================================================== function export.tew(frame) local args = frame:getParent().args local baseOpts = { isNegative = frame.args['neyînî'] or false, isTransitive = args['form'], isCompoundVerb = args['valahî'] or false, preSimpleVerb = args['pêşgir'] or nil, postSimpleVerb = args['paşgir'] or nil, accent = args['devok'] or 'std', tags = args['lînk'] or 'erê', overrideBi = args['bi'] or nil, overrideDi = args['di'] or nil, overrideNa = args['na'] or nil, overrideNe = args['ne'] or nil, impNegForm = nil } local tense = frame.args['dem'] or nil local pers = frame.args['kes'] or nil local presentStems = {args['niha'], args['niha2'], args['niha3']} local pastStems = {args['borî'], args['borî2'], args['borî3']} -- A few checks if (baseOpts.isTransitive == 'gerguhêz') then baseOpts.isTransitive = true elseif (baseOpts.isTransitive == 'negerguhêz') then baseOpts.isTransitive = false else return '<span style="color:red">form = gerguhêz / negerguhêz</span>' end if (baseOpts.isCompoundVerb == 'erê') then baseOpts.isCompoundVerb = true else baseOpts.isCompoundVerb = false end if (baseOpts.isNegative == 'erê') then baseOpts.isNegative = true end local tabConj = export.conjugateLong(baseOpts, tense, presentStems, pastStems).conj return tabConj[pers] end -- ==================================================================================== -- GET COMMMA SEPARED FORMS -- Bnr. [[MediaWiki:Gadget-QQ.js]] -- Ex. {{#invoke:ku-tewandin|get_comma_separated_forms|niha=kev|borî=ket}} -- ==================================================================================== function export.get_comma_separated_forms(frame) local opts = { presentStem = frame.args['niha'], pastStem = frame.args['borî'], isTransitive = false, isNegative = false, isCompoundVerb = frame['valahî'] or false, preSimpleVerb = frame['pêşgir'] or '', postSimpleVerb = frame['paşgir'] or '', overrideBi = frame['bi'] or nil, overrideDi = frame['di'] or nil, overrideNa = frame['na'] or nil, overrideNe = frame['ne'] or nil, impNegForm = nil, tags = 'na', -- Remove links/tags addPreverbParticles = 'na' -- Remove preverb particles (ê/dê) } local function concateList(tenseList) local concatList = {} for _, pers in ipairs({"s1", "s2", "s3", "p1"}) do local tense = tenseList[pers] table.insert(concatList, tense) end return table.concat(concatList, ",") end local tenseList = {'indPresent','indPreterite','indImperfect', 'indPluperfect','indPerfect','indNwPluperfect', 'indFuture','indFuturePerfect', 'subjImperfect','subjPluperfect' } local concatAllTense = {} for i = 1, #tenseList do local tense = tenseList[i] if export.tenseRules[tense] then opts.tense = tense local conj = shallowCopy(export.conjugate(opts).conj) local concatTense = concateList(conj) table.insert(concatAllTense, concatTense) end end return table.concat(concatAllTense, ",") end return export 02ivauwbzp7m2hqdv9ejh7qisa77cmz 6237258 6237257 2026-06-07T15:18:40Z Ghybu 1393 6237258 Scribunto text/plain -- Modula tewandina lêkerên kurmancî local export = {} -- Load irregular forms table -- local irreg = require('Module:ku-tewandin/dijrêzik') local langKu = require("Modul:languages").getByCode("ku") local link = require('Module:links').language_link local shallowCopy = require("Module:table/shallowCopy") local deepCopy = require("Module:table/deepCopy") -- ============================================================================= -- Pronouns in Kurmanji -- ============================================================================= export.order = {"s1", "s2", "s3", "p1", "p2", "p3"} export.pronouns = { s1 = "ez", p1 = "em", s2 = "tu", p2 = "hûn", s3 = "ew", p3 = "ew" } export.obliquePronouns = { s1 = "min", p1 = "me", s2 = "te", p2 = "we", s3 = "wê/wî", p3 = "wan" } export.agents = { s1 = "te, wî, wê, we, wan", p1 = "te, wî, wê, we, wan", s2 = "min, wî, wê, me, wan", p2 = "min, wî, wê, me, wan", s3 = "min, te, wî, wê, me, we, wan", p3 = "min, te, wî, wê, me, we, wan" } -- Oblique pronoun (green) export.obliquePronounsGreen = { s1 = '<span style="color:green">min</span>', s2 = '<span style="color:green">te</span>', s3 = '<span style="color:green">wê/wî</span>', p1 = '<span style="color:green">me</span>', p2 = '<span style="color:green">we</span>', p3 = '<span style="color:green">wan</span>' } -- ───────────────────────────────────────────────────────────────────────────── -- 1) This function returns correct subject/agent pronoun, ergativity rule: -- - Transitive verbs in past tenses → oblique pronoun (green) = agent -- - All other cases → direct pronoun (no color) = subject -- 2) Also add the subjunctive prefix "(bila)" -- ───────────────────────────────────────────────────────────────────────────── function export.conjPronouns(stemType, mode, isTransitive) local pronouns = shallowCopy(export.pronouns) -- Ergativity in kurdish: transitive verbs that are conjugated with the past tense stem are -- conjugated according to the object, not the subject. -- Therefore, to have an ergative construction, -- the verb must be transitive and its stem must be the stem of the past tense. local isErgative = isTransitive and (stemType == 'past') -- If it's ergative, we use oblique pronouns: "min", "te", ... -- If it's not ergative, we use normal pronouns: "ez", "tu", ... if isErgative then pronouns = shallowCopy(export.obliquePronounsGreen) end -- For the subjunctive mood, we add "(bila)" at the beginning. if mode == 'subjunctive' then local subjPrefix = '<span style="color:gray">(bila)</span>' for _, pers in ipairs(export.order) do pronouns[pers] = subjPrefix .. ' ' .. pronouns[pers] end end return pronouns end -- ============================================================================= -- VERBAL STRUCTURE IN THE INFINITIVE: -- Verbs in the infinitive appear in three main forms: -- 1) Simple verb (indivisible light verb): -- - ex.: "kirin", "çûn", "xwarin", ... -- 2) Verbs with preverbs (preverb + simple verb): -- - ex.: "rakirin" (ra- + kirin), "çêkirin" (çê- + kirin), "vexwarin" (ve- + xwarin), ... -- - Preverb verbs don't use the prefix "bi-" (ez ê rakim , ew ê rake , ...) -- 3) Compound verbs, construction with non-verbal element (the noun is not attached to the verb): -- - Left of the simple verb: "hez kirin" ("hez" + "kirin"), "li dar xistin" ("li dar" + "xistin"), ... -- - Right of the simple verb: "kirin der" ("kirin" + "der"), "girtin ser xwe" ("girtin" + "ser xwe"), ... -- - Compound verbs use the prefix "bi-" (ez ê hez bi-kim , ew ê hez bi-ke ) -- STRUCTURE: preSimpleVerb + spacing + simpleVerb + postSimpleVerb -- EX. kirin: preSimpleVerb=''; spacing=false; simpleVerb='kirin'; postSimpleVerb='' -- rakirin: preSimpleVerb='ra'; spacing=false; simpleVerb='kirin'; postSimpleVerb='' -- hez kirin: preSimpleVerb='hez'; spacing=true; simpleVerb='kirin'; postSimpleVerb='' -- pev çûn: preSimpleVerb='pev'; spacing=true; simpleVerb='çûn'; postSimpleVerb='' -- kirin der: preSimpleVerb=''; spacing=false; simpleVerb='kirin'; postSimpleVerb='der' -- WARNING: Conjugation can vary depending on the type of verb. -- For example, in the future tense,the prefix "bi" is used for compound verbs, -- but not for preverbal verbs, see the function that manages it "tenseRules" table. -- This table does not yet support the mixed case: a verb composed of a noun and a preverb verb. -- ============================================================================= function export.verbStruct(isCompoundVerb, preSimpleVerb) local struct if (preSimpleVerb and preSimpleVerb ~= '' and not isCompoundVerb) then struct = 'preverbVerb' elseif isCompoundVerb then struct = 'compoundVerb' else struct = 'simpleVerb' end return struct end -- ================================================================ -- INFLECTIONAL ENDINGS -- Assigns verb inflectional endings (suffixes) to all tenses -- ================================================================ local getEndings = {} do -- ─────────────────────────────────────────────────────────────── -- Ending using present stem -- ─────────────────────────────────────────────────────────────── getEndings['present'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local ends = {} if mw.ustring.match(stem, '[aeêiîouû]$') then ends['std'] = {s1='m', s2='yî', s3='', p1='n', p2='n', p3='n'} ends['rojhilatî'] = {s1='m', s2='(y)', s3='t', p1='yn', p2='n', p3='n'} else ends['std'] = {s1='im', s2='î', s3='e', p1='in', p2='in', p3='in'} ends['rojhilatî'] = {s1='im', s2='î', s3='<u>it</u>/ît', p1='în', p2='in', p3='in'} end return ends end -- ─────────────────────────────────────────────────────────────── -- Ind. preterite + ind. imperfect ending -- ─────────────────────────────────────────────────────────────── getEndings['past'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local ends if mw.ustring.match(stem, '[aeêiouû]$') then ends = {s1='m', s2='yî', s3='', p1='n', p2='n', p3='n'} elseif mw.ustring.match(stem, 'î$') then -- if self.name == 'indImperfect' then -- -- special indicative ind. imperfect rule -- ends = {s1='yam', s2='yayî', s3='ya', p1='yan', p2='yan', p3='yan'} -- end ends = {s1='m', s2='', s3='', p1='n', p2='n', p3='n'} else ends = {s1='im', s2='î', s3='', p1='in', p2='in', p3='in'} end return ends end -- ─────────────────────────────────────────────────────────────── -- Compound endings with auxiliary "bûn" -- Inflectional endings are created by taking the different forms of the -- verb "bûn" (with present stem "-b-" and past stem "-bû-") and -- adding an "i-" prefix before them: "i-b-im", "i-bû-m", "i-bû-me", "i-bû-ma". -- This "i-" varies according to the final letter of the verb stem. -- ─────────────────────────────────────────────────────────────── local function normalize_i(stem) local prfx_i = "i" if mw.ustring.match(stem, "ya$") or mw.ustring.match(stem, "[îû]$") then -- cf. karîn (-karî-) prfx_i = "" elseif mw.ustring.match(stem, '[aeêiou]$') then prfx_i = "yi" end return prfx_i end getEndings['ibim'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local prfx_i = normalize_i(stem) return { s1 = prfx_i .. "bim", p1 = prfx_i .. "bin", s2 = prfx_i .. "bî", p2 = prfx_i .. "bin", s3 = prfx_i .. "be", p3 = prfx_i .. "bin" } end getEndings['ibûm'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local prfx_i = normalize_i(stem) return { s1 = prfx_i .. "bûm", p1 = prfx_i .. "bûn", s2 = prfx_i .. "bûyî", p2 = prfx_i .. "bûn", s3 = prfx_i .. "bû", p3 = prfx_i .. "bûn" } end getEndings['ibûme'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local prfx_i = normalize_i(stem) return { s1 = prfx_i .. "bûme", p1 = prfx_i .. "bûne", s2 = prfx_i .. "bûyiye", p2 = prfx_i .. "bûne", s3 = prfx_i .. "bûye", p3 = prfx_i .. "bûne" } end getEndings['ibûma'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local prfx_i = normalize_i(stem) return { s1 = prfx_i .. "bûma", p1 = prfx_i .. "bûna", s2 = prfx_i .. "bûyayî", p2 = prfx_i .. "bûna", s3 = prfx_i .. "bûya", p3 = prfx_i .. "bûna" } end -- ─────────────────────────────────────────────────────────────── -- Ind. perfect ending. -- ─────────────────────────────────────────────────────────────── getEndings['ime'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local ends if mw.ustring.match(stem, '[aeêiîouû]$') then ends = {s1="me", s2="yî", s3="ye", p1="ne", p2="ne", p3="ne"} else ends = {s1="ime", s2="iyî", s3="iye", p1="ine", p2="ine", p3="ine"} end return ends end -- ─────────────────────────────────────────────────────────────── -- Subj. Imperfect ending. -- ─────────────────────────────────────────────────────────────── getEndings['ama'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local ends -- The doublet in "-iyan" of verbs in -"în" (gerîn/-geriya-, kenîn/-keniya-, ...), -- in the conditional and subjunctive moods, a doublet "yaya" appears; it's removed. -- -yayayî → -yayî; -yaya → -ya if mw.ustring.match(stem, '(ya)$') then ends = {s1="ma", s2="yî", s3="", p1="na", p2="na", p3="na"} elseif mw.ustring.match(stem, '[aeêiîouû]$') then ends = {s1="ma", s2="yayî", s3="ya", p1="na", p2="na", p3="na"} else ends = {s1="ama", s2="ayî", s3="a", p1="ana", p2="ana", p3="ana"} end return ends end end -- ============================================================================= -- RULES FOR PREVERBS: "bi-" and "di-" -- There are two preverbs: "bi-" and "di-". These preverbs can change form -- depending on the first letters of the verb’s present stem or past stem. -- ============================================================================= local getPreverb = {} do getPreverb['bi'] = function (opts) opts = opts or {} local stem = opts.stem local verbStruct = opts.verbStruct local overrideBi = opts.overrideBi -- Preverb verbs don't use the preverb "bi-": ra-kirin (ez ê rakim), ve-xwarin (ez ê vexwim) , ... -- But compound verb and simple verbs use it: hez kirin (ez ê hez bi-kim), lê bigirin (ez ê lê bi-girim), ... if (verbStruct == 'preverbVerb') then return '' end if overrideBi then return overrideBi end -- if irreg.dijrezikBi[stem] then return irreg.dijrezikBi[stem] end -- Modification of the preverbe "bi-" according to the last letter of the stem. if mw.ustring.match(stem, '^[aeêiîouû]') then return 'b' end return 'bi' end getPreverb['di'] = function (opts) opts = opts or {} local stem = opts.stem local overrideDi = opts.overrideDi if overrideDi then return overrideDi end -- if irreg.dijrezikDi[stem] then return irreg.dijrezikDi[stem] end -- Modification of the preverbe "di-" according to the last letter of the stem. if mw.ustring.match(stem, '^[ai]') then return 'd' end -- Ex. hatin : stem = -ê- // ez têm if mw.ustring.match(stem, '^[êî]') then return 't' end return 'di' end end -- ============================================================================= -- RULES FOR NEGATION PREFIXES: "na-" and "ne-" -- There are two negation prefixes: "na-" and "ne-". These preverbs can change -- form depending on the first letters of the verb’s present stem or past stem. -- ============================================================================= local getNegPrefix = {} do getNegPrefix['na'] = function (opts) opts = opts or {} local stem = opts.stem local overrideNa = opts.overrideNa if overrideNa then return '<b>' .. overrideNa .. '</b>' end -- if irreg.dijrezikNa[stem] then return irreg.dijrezikNa[stem] end -- Add sufix "-y" before certain vowels. if mw.ustring.match(stem, '^[eêiîouû]') then return '<b>nay</b>' end -- Elision before stems beginning with "a-" (removal of the final "-e"). if mw.ustring.match(stem, '^a') then return '<b>n</b>' end -- Tîpa duyem "-a-" ye (k-a-rîn, z-a-nîn, ...) if mw.ustring.match(stem, '^%wa') then return '<b>ni</b>' end return '<b>na</b>' end getNegPrefix['ne'] = function (opts) opts = opts or {} local stem = opts.stem local tenseName = opts.tenseName local impNegForm = opts.impNegForm local overrideNe = opts.overrideNe if overrideNe then return '<b>' .. overrideNe .. '</b>' end -- if irreg.dijrezikNe[stem] then return irreg.dijrezikNe[stem] end local negPrefix = 'ne' -- There are two forms of construction of the imperative, -- one with the prefix "me-" and the other with the prefix "ne-". if (tenseName == 'impPresent') then negPrefix = (impNegForm == 2) and 'ne' or 'me' end -- Add sufix "-y" before certain vowels. if mw.ustring.match(stem, '^[eêiîouû]') then return '<b>' .. negPrefix .. 'y</b>' end -- Elision before stems beginning with "a-" (removal of the final "-e"). if mw.ustring.match(stem, '^a') then negPrefix = mw.ustring.sub(negPrefix, 1, -2) return '<b>' .. negPrefix .. '</b>' end return '<b>' .. negPrefix .. '</b>' end end -- ============================================================================= -- Standardization of the PREVERBAL PARTICLE -- The proverbial particle "ê" is placed after the personal pronoun. -- ============================================================================= -- If there are no verbal preparticles, return empty table. function export.getPreverbParticules(preverbParticle, typeStem, isTransitive) if not preverbParticle then return {s1='', s2='', s3='', p1='', p2='', p3=''} end if preverbParticle == 'ê' then local isErgative = isTransitive and (typeStem == 'past') -- When the personal pronoun ends in a vowel, a "y-" is added before "ê". -- If it's ergative, we use oblique pronouns: "min", "te", ... if isErgative then return {s1='ê/dê', s2='yê/dê', s3='yê/dê', p1='yê/dê', p2='yê/dê', p3='ê/dê'} else return {s1='ê/dê', s2='yê/dê', s3='ê/dê', p1='ê/dê', p2='ê/dê', p3='ê/dê'} end end -- If the verbal preparticle is identical for all pronouns, -- we create a table with the same value. local preverbParticles = {} for _, pers in ipairs(export.order) do preverbParticles[pers] = preverbParticle end return preverbParticles end -- ============================================================================= -- RULES FOR CONSTRUCTING EACH VERB TENSE -- This table lists, for each verb tense, what elements are required to form it: -- - Verb conjugation is built by placing either the preverb "bi-" or "di-" before -- the verb stem (past or present), followed by a personal ending. -- - For the negative form, one of the prefixes "na-" or "ne-" is added as well. -- - In some cases, a preverbal particle such as /ê/ or /dê/ is added before -- the conjugated verb as well. -- Not: - The "negPreverb" (preverb (bi-/di-) for negative tenses) parameter has a -- value different from "nil" only for the Imperfect tense ("negPreverb=di"). -- - The parameter "negPrefix=na" is used only for the present indicative. -- -- Preverb "di", used in: "indPresent"(present stem), "indImperfect"(past stem) -- - Bo neyînî: pêşgira "di-" tenê di nav dema "IndImperfect" de tê bikaranîn. -- Preverb "bi", used in: "indFuture"(present stem), "subPresent"(present stem), -- "subImperfect"(past stem) = "condPresent"(past stem) -- - The prefix "bi-" isn't used in negative forms. -- -- Present stem, used in: "indPresent"(di)(na), -- "indFuture"(bi)(ne) = "subPresent"(bi)(ne) -- -- Past stem, used in: "indPreterite"(-)(ne), "indImperfect"(di)(ne), "indPluperfect"(-)(ne), -- "indPerfect"(-)(ne), "indNwPluperfect"(-)(ne), "indFuturePerfect"(-)(ne), -- "subPreterite"(-)(ne), -- "subImperfect"(bi)(ne) = "condPresent"(bi)(ne), -- "subPluperfect"(-)(ne) = "condPreterite"(-)(ne) -- ============================================================================= -- Some conjugations are identical except that they differ only in the preverbal particle (/ê/, /dê/). -- So, to avoid repeating the same information (and thus risking errors), -- we establish the common part shared between these verbs. local sharedTenseRules = { indFuture = { stem = "present", preverb = getPreverb['bi'], negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['present'] }, indFuturePerfect = { stem = "past", preverb = nil, negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['ibim'] }, subImperfect = { stem = "past", preverb = getPreverb['bi'], negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['ama'] }, subPluperfect = { stem = "past", preverb = nil, negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['ibûma'] } } local mt = { __index = function(t, k) local commonRules = t._commonRules if commonRules then return commonRules[k] end end } -- TENSES CONJUGATION RULES export.tenseRules = { -- IMPERATIVE MOOD impPresent = setmetatable({ name = "impPresent", nameKu = "raweya fermanî", nameEn = "present imperative", mode = "imperative", _commonRules = sharedTenseRules.indFuture, preverbParticle = nil }, mt), -- INDICATIVE MOOD indPresent = { name = "indPresent", nameKu = "dema niha", nameEn = "present", mode = "indicative", stem = "present", preverb = getPreverb['di'], negPreverb = nil, negPrefix = getNegPrefix['na'], endings = getEndings['present'], preverbParticle = nil }, indPreterite = { name = "indPreterite", nameKu = "raboriya sade", nameEn = "simple past", mode = "indicative", stem = "past", preverb = nil, negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['past'], preverbParticle = nil }, indImperfect = { name = "indImperfect", nameKu = "raboriya berdest", nameEn = "Imperfect", mode = "indicative", stem = "past", preverb = getPreverb['di'], negPreverb = getPreverb['di'], negPrefix = getNegPrefix['ne'], endings = getEndings['past'], preverbParticle = nil }, indPluperfect = { name = "indPluperfect", nameKu = "raboriya dûr", nameEn = "pluperfect", mode = "indicative", stem = "past", preverb = nil, negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['ibûm'], preverbParticle = nil }, indFuture = setmetatable({ name = "indFuture", nameKu = "dema bê", nameEn = "future", mode = "indicative", _commonRules = sharedTenseRules.indFuture, preverbParticle = 'ê' }, mt), indFuturePerfect = setmetatable({ name = "indFuturePerfect", nameKu = "dahatiya pêş", nameEn = "future perfect", mode = "indicative", _commonRules = sharedTenseRules.indFuturePerfect, preverbParticle = 'ê' }, mt), -- In some books, the "perfect" and "nonconfirmative pluperfect" tenses -- are classified in the "inferential mood" ("moda neşahidî"). -- Currently we classify them using the indicative mood (at the end). indPerfect = { name = "indPerfect", nameKu = "raboriya dûdar", nameEn = "perfect", mode = "indicative", stem = "past", preverb = nil, negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['ime'], preverbParticle = nil }, indNwPluperfect = { name = "indNwPluperfect", nameKu = "çîrokiya boriya dûdar", nameEn = "non-witnessed pluperfect", mode = "indicative", stem = "past", preverb = nil, negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['ibûme'], preverbParticle = nil }, -- SUBJUNCTIVE MOOD subjPresent = setmetatable({ name = "subjPresent", nameKu = "dema nihaya xwestekî", nameEn = "present subjunctive", mode = "subjunctive", _commonRules = sharedTenseRules.indFuture, preverbParticle = nil }, mt), subjPreterite = setmetatable({ name = "subjPreterite", nameKu = "dema boriya xwestekî", nameEn = "preterite subjunctive", mode = "subjunctive", _commonRules = sharedTenseRules.indFuturePerfect, preverbParticle = nil, }, mt), subjImperfect = setmetatable({ name = "subjImperfect", nameKu = "raboriya bilaniyê", nameEn = "imperfect subjunctive", mode = "subjunctive", _commonRules = sharedTenseRules.subImperfect, preverbParticle = nil, }, mt), subjPluperfect = setmetatable({ name = "subjPluperfect", nameKu = "raboriya dûr a bilaniyê", nameEn = "pluperfect subjunctive", mode = "subjunctive", _commonRules = sharedTenseRules.subPluperfect, preverbParticle = nil }, mt), -- CONDITIONAL MOOD condPresent = setmetatable({ name = "condPresent", nameKu = "çîrokiya dema nihaya mercî", nameEn = "present conditional", mode = "conditional", _commonRules = sharedTenseRules.subImperfect, preverbParticle = 'ê' }, mt), condPreterite = setmetatable({ name = "condPreterite", nameKu = "dema boriya mercî", nameEn = "preterite conditional", mode = "conditional", _commonRules = sharedTenseRules.subPluperfect, preverbParticle = 'ê' }, mt), } -- ============================================================================= -- MAIN CONJUGATION FUNCTOIN -- This function returns an array containing the conjugation table for a given -- tense as well as other information about the conjugated verb. -- ============================================================================= function export.conjugate(opts) opts = opts or {} -- Required parameters local tense = opts.tense or error("'tense' required", 2) --One of the two parameters is required: -- - If the tense uses the present stem, indicate "presentStem". -- - If it uses the past stem, indicate "pastStem". local presentStem = opts.presentStem local pastStem = opts.pastStem -- Optional parameters local isTransitive = opts.isTransitive or false -- Indicate if the verb is transitive (true/false) local isNegative = opts.isNegative or false -- Indicate if it's the negative form (true/false) local isCompoundVerb = opts.isCompoundVerb or false -- Indicate if it's a compound verb (true/false) local preSimpleVerb = opts.preSimpleVerb or '' -- The part before the simple verb local postSimpleVerb = opts.postSimpleVerb or '' -- The part after the simple verb -- These parameters are provided when the verb is irregular. -- Allows you to manually modify preverbs ("bi-"" or "di-") -- and negation prefixes ("na-" or "ne-") local overrideBi = opts.overrideBi or nil local overrideDi = opts.overrideDi or nil local overrideNa = opts.overrideNa or nil local overrideNe = opts.overrideNe or nil -- By default, the negation of the imperative is constructed from the prefix "me-"". -- To obtain the second variant, the prefix with "ne-", you must specify "impNegForm=2". local impNegForm = opts.impNegForm or nil -- Accent/ Devok local accent = opts.accent or 'std' -- If "tags='na'", remove links/tags local tags = opts.tags or 'erê' -- If addPreverbParticles='na', remove preverb particles (ê/dê) before -- the conjugated verbs. local addPreverbParticles = opts.addPreverbParticles or 'erê' -- We add a space to the left of the "postSimpleVerb" because it shouldn't be attached -- to the simple verb. if (postSimpleVerb ~= '' and postSimpleVerb ~=nil) then postSimpleVerb = ' ' .. postSimpleVerb end -- Access to the classification table and retrieval of verb tense parameters local infoTense = deepCopy(export.tenseRules[tense], 'copy') or false -- We check that this tense is indeed in table "tenseRules". if (not infoTense) then return '<span style="color:red">Unknown tense: ' .. tense ..'</span>' end -- We check that one of the two parameters of the stem is given if (infoTense.stem == 'present' and not presentStem) then return '<span style="color:red">presentStem parameter required</span>' elseif (infoTense.stem == 'past' and not pastStem) then return '<span style="color:red">pasttStem parameter required</span>' end -- Choice between the present stem or past stem local stem = (infoTense.stem == 'present') and presentStem or pastStem --──────────────────────────── -- Conjugation construction -- -- ─────────────────────────── local preverb = '' local negPrefix = '' -- Ruturns the verb type: "simpleVerb" or "preverbVerb" or "compoundVerb" local verbStruct = export.verbStruct(isCompoundVerb, preSimpleVerb) if isNegative then negPrefix = infoTense.negPrefix{stem=stem, tenseName=tense, impNegForm=impNegForm, overrideNa=overrideNa, overrideNe=overrideNe} if infoTense.negPreverb then preverb = infoTense.negPreverb{stem=stem, verbStruct=verbStruct, overrideBi=overrideBi, overrideDi=overrideDi} end else if infoTense.preverb then preverb = infoTense.preverb{stem=stem, verbStruct=verbStruct, overrideBi=overrideBi, overrideDi=overrideDi} end end infoTense.conj = {} local spacing = isCompoundVerb and ' ' or '' local endings = infoTense:endings(stem) -- 'rojhilatî' accent (devok) for present stem if (infoTense.stem == 'present') then if (accent == 'rojhilatî') then endings = endings['rojhilatî'] else endings = endings['std'] end end local preverbParticles = export.getPreverbParticules(infoTense.preverbParticle, infoTense.stem, isTransitive) local isErgative = isTransitive and (infoTense.stem == 'past') -- Creating the conjugation table for a given tense for _, pers in ipairs(export.order) do local ending local conjSimbleVerb local conjVerb if isErgative then ending = endings.s3 else ending = endings[pers] end -- Adding space after the preverbal particle, and -- if "addPreverbParticles='na'": remove preverb particles (ê/dê). local preverbParticle = '' if infoTense.preverbParticle and addPreverbParticles ~= 'na' then preverbParticle = preverbParticles[pers] .. ' ' end conjSimbleVerb = negPrefix .. preverb .. stem .. ending -- Adding prefixe and suffixe conjVerb = preSimpleVerb .. spacing .. conjSimbleVerb .. postSimpleVerb -- Spelling correction(îy -> iy) conjVerb = mw.ustring.gsub(conjVerb, 'îy', 'iy') -- Add a link / if tags='na' no links if tags ~= 'na' then conjVerb = link{term=conjVerb, lang=langKu} end -- Addition of the preverbal particle infoTense.conj[pers] = preverbParticle .. conjVerb end -- Imperative if (infoTense.name == 'impPresent') then infoTense.conj.s1 = nil infoTense.conj.s2 = infoTense.conj.s3 infoTense.conj.s3 = nil infoTense.conj.p1 = nil -- infoTense.conj.p2 = infoTense.conj.p2 infoTense.conj.p3 = nil end return infoTense end -- ============================================================================= -- END -- ============================================================================= -- Some useful tools -- ============================================================================= -- Returns the list of verb tenses export.tensesList = function() local list = {} for _, tense in pairs(export.tenseRules) do table.insert(list, tense.name) end return list end -- Concatenation of pronouns and conjugated verbs -- (for a given conjugate tense in all persons of that tense) function export.concatPronomsVerbs(pronoms, conjVerbs) local concatTab = {} for _, pers in ipairs(export.order) do concatTab[pers] = pronoms[pers] .. ' ' .. conjVerbs[pers] end return concatTab end -- ============================================================================= -- ADDITIONAL STEM OF THE PAST AND PRESENT (pastStem2, ... and presentStem2, ...) -- This function does nothing more than add additional parameters for verb stems -- in the past and present tenses. -- Conjugations for the different stems will be separated by "/" -- ============================================================================= function export.conjugateLong(baseOpts, tense, presentStems, pastStems) local opts = baseOpts or {} opts.tense = tense or nil presentStems = presentStems or {} pastStems = pastStems or {} local infoTense = deepCopy(export.tenseRules[tense], 'copy') or false -- We check that this tense is indeed in table "tenseRules". if not infoTense then return '<span style="color:red">Unknown tense: ' .. tense ..'</span>' end local stems = (infoTense.stem == 'present') and presentStems or pastStems -- For each verb stem, its conjugation table is calculated and stored in conjTabs. local conjTabs = {} for i = 1, #stems do if stems[i] then if (infoTense.stem == 'past') then opts.pastStem = stems[i] end if (infoTense.stem == 'present') then opts.presentStem = stems[i] end local conj = export.conjugate(opts).conj table.insert(conjTabs, conj) end end -- We concatenate each row of the conjugation tables. local concatConjTabs = {} for _, pers in ipairs(export.order) do local frag = {} for i = 1, #conjTabs do local val = conjTabs[i][pers] if val then table.insert(frag, tostring(val)) end end concatConjTabs[pers] = table.concat(frag, " / ") end infoTense.conj = concatConjTabs return infoTense end -- ==================================================================================== -- VERB CONUGATION IN ALL TENSES WITH OR WITHOUT PRONOUMS -- ==================================================================================== function export.conjugateAllTenses(baseOpts, presentStems, pastStems, negation, concatPrs) -- "concatPrs=false" table without pronouns local opts = baseOpts or {} if negation == 'negative' then opts.isNegative = true end -- Concatenation of pronouns and conjugated verbs local concatPronomsVerbs = export.concatPronomsVerbs -- Tenses list local tensesList = export.tensesList() -- Conjugation in all tenses local conjTab = {} for _, tense in ipairs(tensesList) do local infoTense = deepCopy(export.tenseRules[tense], 'copy') -- We create the conjugation table without the pronouns. conjTab[tense] = deepCopy(export.conjugateLong(opts, tense, presentStems, pastStems), 'copy') -- We concatenate the pronouns and the verbs if "concatPrs" is different of "false" -- No pronouns for the imperative mood if (tense ~= 'impPresent' and concatPrs ~= false) then local pronoms = deepCopy(export.conjPronouns(infoTense.stem, infoTense.mode, opts.isTransitive)) conjTab[tense].conj = concatPronomsVerbs(pronoms, conjTab[tense].conj) end end return conjTab end -- ==================================================================================== -- Allows you to obtain a given conjugation from a model. -- Ex. {{#invoke:ku-tewandin|tew|dem=indPresent|kes=s1}} -- See {{ku-tewîn-lk-niha}} -- ==================================================================================== function export.tew(frame) local args = frame:getParent().args local baseOpts = { isNegative = frame.args['neyînî'] or false, isTransitive = args['form'], isCompoundVerb = args['valahî'] or false, preSimpleVerb = args['pêşgir'] or nil, postSimpleVerb = args['paşgir'] or nil, accent = args['devok'] or 'std', tags = args['lînk'] or 'erê', overrideBi = args['bi'] or nil, overrideDi = args['di'] or nil, overrideNa = args['na'] or nil, overrideNe = args['ne'] or nil, impNegForm = nil } local tense = frame.args['dem'] or nil local pers = frame.args['kes'] or nil local presentStems = {args['niha'], args['niha2'], args['niha3']} local pastStems = {args['borî'], args['borî2'], args['borî3']} -- A few checks if (baseOpts.isTransitive == 'gerguhêz') then baseOpts.isTransitive = true elseif (baseOpts.isTransitive == 'negerguhêz') then baseOpts.isTransitive = false else return '<span style="color:red">form = gerguhêz / negerguhêz</span>' end if (baseOpts.isCompoundVerb == 'erê') then baseOpts.isCompoundVerb = true else baseOpts.isCompoundVerb = false end if (baseOpts.isNegative == 'erê') then baseOpts.isNegative = true end local tabConj = export.conjugateLong(baseOpts, tense, presentStems, pastStems).conj return tabConj[pers] end -- ==================================================================================== -- GET COMMMA SEPARED FORMS -- Bnr. [[MediaWiki:Gadget-QQ.js]] -- Ex. {{#invoke:ku-tewandin|get_comma_separated_forms|niha=kev|borî=ket}} -- ==================================================================================== function export.get_comma_separated_forms(frame) local opts = { presentStem = frame.args['niha'], pastStem = frame.args['borî'], isTransitive = false, isNegative = false, isCompoundVerb = frame['valahî'] or false, preSimpleVerb = frame['pêşgir'] or '', postSimpleVerb = frame['paşgir'] or '', overrideBi = frame['bi'] or nil, overrideDi = frame['di'] or nil, overrideNa = frame['na'] or nil, overrideNe = frame['ne'] or nil, impNegForm = nil, tags = 'na', -- Remove links/tags addPreverbParticles = 'na' -- Remove preverb particles (ê/dê) } local function concateList(tenseList) local concatList = {} for _, pers in ipairs({"s1", "s2", "s3", "p1"}) do local tense = tenseList[pers] table.insert(concatList, tense) end return table.concat(concatList, ",") end local tenseList = {'indPresent','indPreterite','indImperfect', 'indPluperfect','indPerfect','indNwPluperfect', 'indFuture','indFuturePerfect', 'subjImperfect','subjPluperfect' } local concatAllTense = {} for i = 1, #tenseList do local tense = tenseList[i] if export.tenseRules[tense] then opts.tense = tense local conj = shallowCopy(export.conjugate(opts).conj) local concatTense = concateList(conj) table.insert(concatAllTense, concatTense) end end return table.concat(concatAllTense, ",") end return export r3v2cwpf4rpsb113yor9js3vnbk69rb 6237270 6237258 2026-06-08T01:21:56Z Ghybu 1393 6237270 Scribunto text/plain -- Modula tewandina lêkerên kurmancî local export = {} -- Load irregular forms table -- local irreg = require('Module:ku-tewandin/dijrêzik') local langKu = require("Modul:languages").getByCode("ku") local link = require('Module:links').language_link local shallowCopy = require("Module:table/shallowCopy") local deepCopy = require("Module:table/deepCopy") -- ============================================================================= -- Pronouns in Kurmanji -- ============================================================================= export.order = {"s1", "s2", "s3", "p1", "p2", "p3"} export.pronouns = { s1 = "ez", p1 = "em", s2 = "tu", p2 = "hûn", s3 = "ew", p3 = "ew" } export.obliquePronouns = { s1 = "min", p1 = "me", s2 = "te", p2 = "we", s3 = "wê/wî", p3 = "wan" } export.agents = { s1 = "te, wî, wê, we, wan", p1 = "te, wî, wê, we, wan", s2 = "min, wî, wê, me, wan", p2 = "min, wî, wê, me, wan", s3 = "min, te, wî, wê, me, we, wan", p3 = "min, te, wî, wê, me, we, wan" } -- Oblique pronoun (green) export.obliquePronounsGreen = { s1 = '<span style="color:green">min</span>', s2 = '<span style="color:green">te</span>', s3 = '<span style="color:green">wê/wî</span>', p1 = '<span style="color:green">me</span>', p2 = '<span style="color:green">we</span>', p3 = '<span style="color:green">wan</span>' } -- ───────────────────────────────────────────────────────────────────────────── -- 1) This function returns correct subject/agent pronoun, ergativity rule: -- - Transitive verbs in past tenses → oblique pronoun (green) = agent -- - All other cases → direct pronoun (no color) = subject -- 2) Also add the subjunctive prefix "(bila)" -- ───────────────────────────────────────────────────────────────────────────── function export.conjPronouns(stemType, mode, isTransitive) local pronouns = shallowCopy(export.pronouns) -- Ergativity in kurdish: transitive verbs that are conjugated with the past tense stem are -- conjugated according to the object, not the subject. -- Therefore, to have an ergative construction, -- the verb must be transitive and its stem must be the stem of the past tense. local isErgative = isTransitive and (stemType == 'past') -- If it's ergative, we use oblique pronouns: "min", "te", ... -- If it's not ergative, we use normal pronouns: "ez", "tu", ... if isErgative then pronouns = shallowCopy(export.obliquePronounsGreen) end -- For the subjunctive mood, we add "(bila)" at the beginning. if mode == 'subjunctive' then local subjPrefix = '<span style="color:gray">(bila)</span>' for _, pers in ipairs(export.order) do pronouns[pers] = subjPrefix .. ' ' .. pronouns[pers] end end return pronouns end -- ============================================================================= -- VERBAL STRUCTURE IN THE INFINITIVE: -- Verbs in the infinitive appear in three main forms: -- 1) Simple verb (indivisible light verb): -- - ex.: "kirin", "çûn", "xwarin", ... -- 2) Verbs with preverbs (preverb + simple verb): -- - ex.: "rakirin" (ra- + kirin), "çêkirin" (çê- + kirin), "vexwarin" (ve- + xwarin), ... -- - Preverb verbs don't use the prefix "bi-" (ez ê rakim , ew ê rake , ...) -- 3) Compound verbs, construction with non-verbal element (the noun is not attached to the verb): -- - Left of the simple verb: "hez kirin" ("hez" + "kirin"), "li dar xistin" ("li dar" + "xistin"), ... -- - Right of the simple verb: "kirin der" ("kirin" + "der"), "girtin ser xwe" ("girtin" + "ser xwe"), ... -- - Compound verbs use the prefix "bi-" (ez ê hez bi-kim , ew ê hez bi-ke ) -- STRUCTURE: preSimpleVerb + spacing + simpleVerb + postSimpleVerb -- EX. kirin: preSimpleVerb=''; spacing=false; simpleVerb='kirin'; postSimpleVerb='' -- rakirin: preSimpleVerb='ra'; spacing=false; simpleVerb='kirin'; postSimpleVerb='' -- hez kirin: preSimpleVerb='hez'; spacing=true; simpleVerb='kirin'; postSimpleVerb='' -- pev çûn: preSimpleVerb='pev'; spacing=true; simpleVerb='çûn'; postSimpleVerb='' -- kirin der: preSimpleVerb=''; spacing=false; simpleVerb='kirin'; postSimpleVerb='der' -- WARNING: Conjugation can vary depending on the type of verb. -- For example, in the future tense,the prefix "bi" is used for compound verbs, -- but not for preverbal verbs, see the function that manages it "tenseRules" table. -- This table does not yet support the mixed case: a verb composed of a noun and a preverb verb. -- ============================================================================= function export.verbStruct(isCompoundVerb, preSimpleVerb) local struct if (preSimpleVerb and preSimpleVerb ~= '' and not isCompoundVerb) then struct = 'preverbVerb' elseif isCompoundVerb then struct = 'compoundVerb' else struct = 'simpleVerb' end return struct end -- ================================================================ -- INFLECTIONAL ENDINGS -- Assigns verb inflectional endings (suffixes) to all tenses -- ================================================================ local getEndings = {} do -- ─────────────────────────────────────────────────────────────── -- Ending using present stem -- ─────────────────────────────────────────────────────────────── getEndings['present'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local ends = {} if mw.ustring.match(stem, '[aeêiîouû]$') then ends['std'] = {s1='m', s2='yî', s3='', p1='n', p2='n', p3='n'} ends['rojhilatî'] = {s1='m', s2='(y)', s3='t', p1='yn', p2='n', p3='n'} else ends['std'] = {s1='im', s2='î', s3='e', p1='in', p2='in', p3='in'} ends['rojhilatî'] = {s1='im', s2='î', s3='<u>it</u>/ît', p1='în', p2='in', p3='in'} end return ends end -- ─────────────────────────────────────────────────────────────── -- Ind. preterite + ind. imperfect ending -- ─────────────────────────────────────────────────────────────── getEndings['past'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local ends if mw.ustring.match(stem, '[aeêiouû]$') then ends = {s1='m', s2='yî', s3='', p1='n', p2='n', p3='n'} elseif mw.ustring.match(stem, 'î$') then -- if self.name == 'indImperfect' then -- -- special indicative ind. imperfect rule -- ends = {s1='yam', s2='yayî', s3='ya', p1='yan', p2='yan', p3='yan'} -- end ends = {s1='m', s2='', s3='', p1='n', p2='n', p3='n'} else ends = {s1='im', s2='î', s3='', p1='in', p2='in', p3='in'} end return ends end -- ─────────────────────────────────────────────────────────────── -- Compound endings with auxiliary "bûn" -- Inflectional endings are created by taking the different forms of the -- verb "bûn" (with present stem "-b-" and past stem "-bû-") and -- adding an "i-" prefix before them: "i-b-im", "i-bû-m", "i-bû-me", "i-bû-ma". -- This "i-" varies according to the final letter of the verb stem. -- ─────────────────────────────────────────────────────────────── local function normalize_i(stem) local prfx_i = "i" if mw.ustring.match(stem, "ya$") or mw.ustring.match(stem, "[îû]$") then -- cf. karîn (-karî-) prfx_i = "" elseif mw.ustring.match(stem, '[aeêiou]$') then prfx_i = "yi" end return prfx_i end getEndings['ibim'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local prfx_i = normalize_i(stem) return { s1 = prfx_i .. "bim", p1 = prfx_i .. "bin", s2 = prfx_i .. "bî", p2 = prfx_i .. "bin", s3 = prfx_i .. "be", p3 = prfx_i .. "bin" } end getEndings['ibûm'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local prfx_i = normalize_i(stem) return { s1 = prfx_i .. "bûm", p1 = prfx_i .. "bûn", s2 = prfx_i .. "bûyî", p2 = prfx_i .. "bûn", s3 = prfx_i .. "bû", p3 = prfx_i .. "bûn" } end getEndings['ibûme'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local prfx_i = normalize_i(stem) return { s1 = prfx_i .. "bûme", p1 = prfx_i .. "bûne", s2 = prfx_i .. "bûyiye", p2 = prfx_i .. "bûne", s3 = prfx_i .. "bûye", p3 = prfx_i .. "bûne" } end getEndings['ibûma'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local prfx_i = normalize_i(stem) return { s1 = prfx_i .. "bûma", p1 = prfx_i .. "bûna", s2 = prfx_i .. "bûyayî", p2 = prfx_i .. "bûna", s3 = prfx_i .. "bûya", p3 = prfx_i .. "bûna" } end -- ─────────────────────────────────────────────────────────────── -- Ind. perfect ending. -- ─────────────────────────────────────────────────────────────── getEndings['ime'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local ends if mw.ustring.match(stem, '[aeêiîouû]$') then ends = {s1="me", s2="yî", s3="ye", p1="ne", p2="ne", p3="ne"} else ends = {s1="ime", s2="iyî", s3="iye", p1="ine", p2="ine", p3="ine"} end return ends end -- ─────────────────────────────────────────────────────────────── -- Subj. Imperfect ending. -- ─────────────────────────────────────────────────────────────── getEndings['ama'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local ends -- The doublet in "-iyan" of verbs in -"în" (gerîn/-geriya-, kenîn/-keniya-, ...), -- in the conditional and subjunctive moods, a doublet "yaya" appears; it's removed. -- -yayayî → -yayî; -yaya → -ya if mw.ustring.match(stem, '(ya)$') then ends = {s1="ma", s2="yî", s3="", p1="na", p2="na", p3="na"} elseif mw.ustring.match(stem, '[aeêiîouû]$') then ends = {s1="ma", s2="yayî", s3="ya", p1="na", p2="na", p3="na"} else ends = {s1="ama", s2="ayî", s3="a", p1="ana", p2="ana", p3="ana"} end return ends end end -- ============================================================================= -- RULES FOR PREVERBS: "bi-" and "di-" -- There are two preverbs: "bi-" and "di-". These preverbs can change form -- depending on the first letters of the verb’s present stem or past stem. -- ============================================================================= local getPreverb = {} do getPreverb['bi'] = function (self, opts) opts = opts or {} local stem = opts.stem local verbStruct = opts.verbStruct local overrideBi = opts.overrideBi -- @Ferhengvan: Dema bêt bi lêkera alîkar "ê / dê" û bi rehê lêkerê yê -- dema niha û pêşgirên kesî tê çêkirin. Pêşgira "bi-" li destpêka lêkera -- serekî nîne: - ez ê / dê xw-im (standard: ez ê/dê bi-xw-im). if (self.name == 'indFuture') then return '' end -- Preverb verbs don't use the preverb "bi-": ra-kirin (ez ê rakim), ve-xwarin (ez ê vexwim) , ... -- But compound verb and simple verbs use it: hez kirin (ez ê hez bi-kim), lê bigirin (ez ê lê bi-girim), ... if (verbStruct == 'preverbVerb') then return '' end if overrideBi then return overrideBi end -- if irreg.dijrezikBi[stem] then return irreg.dijrezikBi[stem] end -- Modification of the preverbe "bi-" according to the last letter of the stem. if mw.ustring.match(stem, '^[aeêiîouû]') then return 'b' end return 'bi' end getPreverb['di'] = function (opts) opts = opts or {} local stem = opts.stem local overrideDi = opts.overrideDi if overrideDi then return overrideDi end -- if irreg.dijrezikDi[stem] then return irreg.dijrezikDi[stem] end -- Modification of the preverbe "di-" according to the last letter of the stem. if mw.ustring.match(stem, '^[ai]') then return 'd' end -- Ex. hatin : stem = -ê- // ez têm if mw.ustring.match(stem, '^[êî]') then return 't' end return 'di' end end -- ============================================================================= -- RULES FOR NEGATION PREFIXES: "na-" and "ne-" -- There are two negation prefixes: "na-" and "ne-". These preverbs can change -- form depending on the first letters of the verb’s present stem or past stem. -- ============================================================================= local getNegPrefix = {} do getNegPrefix['na'] = function (opts) opts = opts or {} local stem = opts.stem local overrideNa = opts.overrideNa if overrideNa then return '<b>' .. overrideNa .. '</b>' end -- if irreg.dijrezikNa[stem] then return irreg.dijrezikNa[stem] end -- Add sufix "-y" before certain vowels. if mw.ustring.match(stem, '^[eêiîouû]') then return '<b>nay</b>' end -- Elision before stems beginning with "a-" (removal of the final "-e"). if mw.ustring.match(stem, '^a') then return '<b>n</b>' end -- Tîpa duyem "-a-" ye (k-a-rîn, z-a-nîn, ...) if mw.ustring.match(stem, '^%wa') then return '<b>ni</b>' end return '<b>na</b>' end getNegPrefix['ne'] = function (opts) opts = opts or {} local stem = opts.stem local tenseName = opts.tenseName local impNegForm = opts.impNegForm local overrideNe = opts.overrideNe if overrideNe then return '<b>' .. overrideNe .. '</b>' end -- if irreg.dijrezikNe[stem] then return irreg.dijrezikNe[stem] end local negPrefix = 'ne' -- There are two forms of construction of the imperative, -- one with the prefix "me-" and the other with the prefix "ne-". if (tenseName == 'impPresent') then negPrefix = (impNegForm == 2) and 'ne' or 'me' end -- Add sufix "-y" before certain vowels. if mw.ustring.match(stem, '^[eêiîouû]') then return '<b>' .. negPrefix .. 'y</b>' end -- Elision before stems beginning with "a-" (removal of the final "-e"). if mw.ustring.match(stem, '^a') then negPrefix = mw.ustring.sub(negPrefix, 1, -2) return '<b>' .. negPrefix .. '</b>' end return '<b>' .. negPrefix .. '</b>' end end -- ============================================================================= -- Standardization of the PREVERBAL PARTICLE -- The proverbial particle "ê" is placed after the personal pronoun. -- ============================================================================= -- If there are no verbal preparticles, return empty table. function export.getPreverbParticules(preverbParticle, typeStem, isTransitive) if not preverbParticle then return {s1='', s2='', s3='', p1='', p2='', p3=''} end if preverbParticle == 'ê' then local isErgative = isTransitive and (typeStem == 'past') -- When the personal pronoun ends in a vowel, a "y-" is added before "ê". -- If it's ergative, we use oblique pronouns: "min", "te", ... if isErgative then return {s1='ê/dê', s2='yê/dê', s3='yê/dê', p1='yê/dê', p2='yê/dê', p3='ê/dê'} else return {s1='ê/dê', s2='yê/dê', s3='ê/dê', p1='ê/dê', p2='ê/dê', p3='ê/dê'} end end -- If the verbal preparticle is identical for all pronouns, -- we create a table with the same value. local preverbParticles = {} for _, pers in ipairs(export.order) do preverbParticles[pers] = preverbParticle end return preverbParticles end -- ============================================================================= -- RULES FOR CONSTRUCTING EACH VERB TENSE -- This table lists, for each verb tense, what elements are required to form it: -- - Verb conjugation is built by placing either the preverb "bi-" or "di-" before -- the verb stem (past or present), followed by a personal ending. -- - For the negative form, one of the prefixes "na-" or "ne-" is added as well. -- - In some cases, a preverbal particle such as /ê/ or /dê/ is added before -- the conjugated verb as well. -- Not: - The "negPreverb" (preverb (bi-/di-) for negative tenses) parameter has a -- value different from "nil" only for the Imperfect tense ("negPreverb=di"). -- - The parameter "negPrefix=na" is used only for the present indicative. -- -- Preverb "di", used in: "indPresent"(present stem), "indImperfect"(past stem) -- - Bo neyînî: pêşgira "di-" tenê di nav dema "IndImperfect" de tê bikaranîn. -- Preverb "bi", used in: "indFuture"(present stem), "subPresent"(present stem), -- "subImperfect"(past stem) = "condPresent"(past stem) -- - The prefix "bi-" isn't used in negative forms. -- -- Present stem, used in: "indPresent"(di)(na), -- "indFuture"(bi)(ne) = "subPresent"(bi)(ne) -- -- Past stem, used in: "indPreterite"(-)(ne), "indImperfect"(di)(ne), "indPluperfect"(-)(ne), -- "indPerfect"(-)(ne), "indNwPluperfect"(-)(ne), "indFuturePerfect"(-)(ne), -- "subPreterite"(-)(ne), -- "subImperfect"(bi)(ne) = "condPresent"(bi)(ne), -- "subPluperfect"(-)(ne) = "condPreterite"(-)(ne) -- ============================================================================= -- Some conjugations are identical except that they differ only in the preverbal particle (/ê/, /dê/). -- So, to avoid repeating the same information (and thus risking errors), -- we establish the common part shared between these verbs. local sharedTenseRules = { indFuture = { stem = "present", preverb = getPreverb['bi'], negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['present'] }, indFuturePerfect = { stem = "past", preverb = nil, negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['ibim'] }, subImperfect = { stem = "past", preverb = getPreverb['bi'], negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['ama'] }, subPluperfect = { stem = "past", preverb = nil, negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['ibûma'] } } local mt = { __index = function(t, k) local commonRules = t._commonRules if commonRules then return commonRules[k] end end } -- TENSES CONJUGATION RULES export.tenseRules = { -- IMPERATIVE MOOD impPresent = setmetatable({ name = "impPresent", nameKu = "raweya fermanî", nameEn = "present imperative", mode = "imperative", _commonRules = sharedTenseRules.indFuture, preverbParticle = nil }, mt), -- INDICATIVE MOOD indPresent = { name = "indPresent", nameKu = "dema niha", nameEn = "present", mode = "indicative", stem = "present", preverb = getPreverb['di'], negPreverb = nil, negPrefix = getNegPrefix['na'], endings = getEndings['present'], preverbParticle = nil }, indPreterite = { name = "indPreterite", nameKu = "raboriya sade", nameEn = "simple past", mode = "indicative", stem = "past", preverb = nil, negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['past'], preverbParticle = nil }, indImperfect = { name = "indImperfect", nameKu = "raboriya berdest", nameEn = "Imperfect", mode = "indicative", stem = "past", preverb = getPreverb['di'], negPreverb = getPreverb['di'], negPrefix = getNegPrefix['ne'], endings = getEndings['past'], preverbParticle = nil }, indPluperfect = { name = "indPluperfect", nameKu = "raboriya dûr", nameEn = "pluperfect", mode = "indicative", stem = "past", preverb = nil, negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['ibûm'], preverbParticle = nil }, indFuture = setmetatable({ name = "indFuture", nameKu = "dema bê", nameEn = "future", mode = "indicative", _commonRules = sharedTenseRules.indFuture, preverbParticle = 'ê' }, mt), indFuturePerfect = setmetatable({ name = "indFuturePerfect", nameKu = "dahatiya pêş", nameEn = "future perfect", mode = "indicative", _commonRules = sharedTenseRules.indFuturePerfect, preverbParticle = 'ê' }, mt), -- In some books, the "perfect" and "nonconfirmative pluperfect" tenses -- are classified in the "inferential mood" ("moda neşahidî"). -- Currently we classify them using the indicative mood (at the end). indPerfect = { name = "indPerfect", nameKu = "raboriya dûdar", nameEn = "perfect", mode = "indicative", stem = "past", preverb = nil, negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['ime'], preverbParticle = nil }, indNwPluperfect = { name = "indNwPluperfect", nameKu = "çîrokiya boriya dûdar", nameEn = "non-witnessed pluperfect", mode = "indicative", stem = "past", preverb = nil, negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['ibûme'], preverbParticle = nil }, -- SUBJUNCTIVE MOOD subjPresent = setmetatable({ name = "subjPresent", nameKu = "dema nihaya xwestekî", nameEn = "present subjunctive", mode = "subjunctive", _commonRules = sharedTenseRules.indFuture, preverbParticle = nil }, mt), subjPreterite = setmetatable({ name = "subjPreterite", nameKu = "dema boriya xwestekî", nameEn = "preterite subjunctive", mode = "subjunctive", _commonRules = sharedTenseRules.indFuturePerfect, preverbParticle = nil, }, mt), subjImperfect = setmetatable({ name = "subjImperfect", nameKu = "raboriya bilaniyê", nameEn = "imperfect subjunctive", mode = "subjunctive", _commonRules = sharedTenseRules.subImperfect, preverbParticle = nil, }, mt), subjPluperfect = setmetatable({ name = "subjPluperfect", nameKu = "raboriya dûr a bilaniyê", nameEn = "pluperfect subjunctive", mode = "subjunctive", _commonRules = sharedTenseRules.subPluperfect, preverbParticle = nil }, mt), -- CONDITIONAL MOOD condPresent = setmetatable({ name = "condPresent", nameKu = "çîrokiya dema nihaya mercî", nameEn = "present conditional", mode = "conditional", _commonRules = sharedTenseRules.subImperfect, preverbParticle = 'ê' }, mt), condPreterite = setmetatable({ name = "condPreterite", nameKu = "dema boriya mercî", nameEn = "preterite conditional", mode = "conditional", _commonRules = sharedTenseRules.subPluperfect, preverbParticle = 'ê' }, mt), } -- ============================================================================= -- MAIN CONJUGATION FUNCTOIN -- This function returns an array containing the conjugation table for a given -- tense as well as other information about the conjugated verb. -- ============================================================================= function export.conjugate(opts) opts = opts or {} -- Required parameters local tense = opts.tense or error("'tense' required", 2) --One of the two parameters is required: -- - If the tense uses the present stem, indicate "presentStem". -- - If it uses the past stem, indicate "pastStem". local presentStem = opts.presentStem local pastStem = opts.pastStem -- Optional parameters local isTransitive = opts.isTransitive or false -- Indicate if the verb is transitive (true/false) local isNegative = opts.isNegative or false -- Indicate if it's the negative form (true/false) local isCompoundVerb = opts.isCompoundVerb or false -- Indicate if it's a compound verb (true/false) local preSimpleVerb = opts.preSimpleVerb or '' -- The part before the simple verb local postSimpleVerb = opts.postSimpleVerb or '' -- The part after the simple verb -- These parameters are provided when the verb is irregular. -- Allows you to manually modify preverbs ("bi-"" or "di-") -- and negation prefixes ("na-" or "ne-") local overrideBi = opts.overrideBi or nil local overrideDi = opts.overrideDi or nil local overrideNa = opts.overrideNa or nil local overrideNe = opts.overrideNe or nil -- By default, the negation of the imperative is constructed from the prefix "me-"". -- To obtain the second variant, the prefix with "ne-", you must specify "impNegForm=2". local impNegForm = opts.impNegForm or nil -- Accent/ Devok local accent = opts.accent or 'std' -- If "tags='na'", remove links/tags local tags = opts.tags or 'erê' -- If addPreverbParticles='na', remove preverb particles (ê/dê) before -- the conjugated verbs. local addPreverbParticles = opts.addPreverbParticles or 'erê' -- We add a space to the left of the "postSimpleVerb" because it shouldn't be attached -- to the simple verb. if (postSimpleVerb ~= '' and postSimpleVerb ~=nil) then postSimpleVerb = ' ' .. postSimpleVerb end -- Access to the classification table and retrieval of verb tense parameters local infoTense = deepCopy(export.tenseRules[tense], 'copy') or false -- We check that this tense is indeed in table "tenseRules". if (not infoTense) then return '<span style="color:red">Unknown tense: ' .. tense ..'</span>' end -- We check that one of the two parameters of the stem is given if (infoTense.stem == 'present' and not presentStem) then return '<span style="color:red">presentStem parameter required</span>' elseif (infoTense.stem == 'past' and not pastStem) then return '<span style="color:red">pasttStem parameter required</span>' end -- Choice between the present stem or past stem local stem = (infoTense.stem == 'present') and presentStem or pastStem --──────────────────────────── -- Conjugation construction -- -- ─────────────────────────── local preverb = '' local negPrefix = '' -- Ruturns the verb type: "simpleVerb" or "preverbVerb" or "compoundVerb" local verbStruct = export.verbStruct(isCompoundVerb, preSimpleVerb) if isNegative then negPrefix = infoTense.negPrefix{stem=stem, tenseName=tense, impNegForm=impNegForm, overrideNa=overrideNa, overrideNe=overrideNe} if infoTense.negPreverb then preverb = infoTense.negPreverb{stem=stem, verbStruct=verbStruct, overrideBi=overrideBi, overrideDi=overrideDi} end else if infoTense.preverb then preverb = infoTense:preverb{stem=stem, verbStruct=verbStruct, overrideBi=overrideBi, overrideDi=overrideDi} end end infoTense.conj = {} local spacing = isCompoundVerb and ' ' or '' local endings = infoTense:endings(stem) -- 'rojhilatî' accent (devok) for present stem if (infoTense.stem == 'present') then if (accent == 'rojhilatî') then endings = endings['rojhilatî'] else endings = endings['std'] end end local preverbParticles = export.getPreverbParticules(infoTense.preverbParticle, infoTense.stem, isTransitive) local isErgative = isTransitive and (infoTense.stem == 'past') -- Creating the conjugation table for a given tense for _, pers in ipairs(export.order) do local ending local conjSimbleVerb local conjVerb if isErgative then ending = endings.s3 else ending = endings[pers] end -- Adding space after the preverbal particle, and -- if "addPreverbParticles='na'": remove preverb particles (ê/dê). local preverbParticle = '' if infoTense.preverbParticle and addPreverbParticles ~= 'na' then preverbParticle = preverbParticles[pers] .. ' ' end conjSimbleVerb = negPrefix .. preverb .. stem .. ending -- Adding prefixe and suffixe conjVerb = preSimpleVerb .. spacing .. conjSimbleVerb .. postSimpleVerb -- Spelling correction(îy -> iy) conjVerb = mw.ustring.gsub(conjVerb, 'îy', 'iy') -- Add a link / if tags='na' no links if tags ~= 'na' then conjVerb = link{term=conjVerb, lang=langKu} end -- Addition of the preverbal particle infoTense.conj[pers] = preverbParticle .. conjVerb end -- Imperative if (infoTense.name == 'impPresent') then infoTense.conj.s1 = nil infoTense.conj.s2 = infoTense.conj.s3 infoTense.conj.s3 = nil infoTense.conj.p1 = nil -- infoTense.conj.p2 = infoTense.conj.p2 infoTense.conj.p3 = nil end return infoTense end -- ============================================================================= -- END -- ============================================================================= -- Some useful tools -- ============================================================================= -- Returns the list of verb tenses export.tensesList = function() local list = {} for _, tense in pairs(export.tenseRules) do table.insert(list, tense.name) end return list end -- Concatenation of pronouns and conjugated verbs -- (for a given conjugate tense in all persons of that tense) function export.concatPronomsVerbs(pronoms, conjVerbs) local concatTab = {} for _, pers in ipairs(export.order) do concatTab[pers] = pronoms[pers] .. ' ' .. conjVerbs[pers] end return concatTab end -- ============================================================================= -- ADDITIONAL STEM OF THE PAST AND PRESENT (pastStem2, ... and presentStem2, ...) -- This function does nothing more than add additional parameters for verb stems -- in the past and present tenses. -- Conjugations for the different stems will be separated by "/" -- ============================================================================= function export.conjugateLong(baseOpts, tense, presentStems, pastStems) local opts = baseOpts or {} opts.tense = tense or nil presentStems = presentStems or {} pastStems = pastStems or {} local infoTense = deepCopy(export.tenseRules[tense], 'copy') or false -- We check that this tense is indeed in table "tenseRules". if not infoTense then return '<span style="color:red">Unknown tense: ' .. tense ..'</span>' end local stems = (infoTense.stem == 'present') and presentStems or pastStems -- For each verb stem, its conjugation table is calculated and stored in conjTabs. local conjTabs = {} for i = 1, #stems do if stems[i] then if (infoTense.stem == 'past') then opts.pastStem = stems[i] end if (infoTense.stem == 'present') then opts.presentStem = stems[i] end local conj = export.conjugate(opts).conj table.insert(conjTabs, conj) end end -- We concatenate each row of the conjugation tables. local concatConjTabs = {} for _, pers in ipairs(export.order) do local frag = {} for i = 1, #conjTabs do local val = conjTabs[i][pers] if val then table.insert(frag, tostring(val)) end end concatConjTabs[pers] = table.concat(frag, " / ") end infoTense.conj = concatConjTabs return infoTense end -- ==================================================================================== -- VERB CONUGATION IN ALL TENSES WITH OR WITHOUT PRONOUMS -- ==================================================================================== function export.conjugateAllTenses(baseOpts, presentStems, pastStems, negation, concatPrs) -- "concatPrs=false" table without pronouns local opts = baseOpts or {} if negation == 'negative' then opts.isNegative = true end -- Concatenation of pronouns and conjugated verbs local concatPronomsVerbs = export.concatPronomsVerbs -- Tenses list local tensesList = export.tensesList() -- Conjugation in all tenses local conjTab = {} for _, tense in ipairs(tensesList) do local infoTense = deepCopy(export.tenseRules[tense], 'copy') -- We create the conjugation table without the pronouns. conjTab[tense] = deepCopy(export.conjugateLong(opts, tense, presentStems, pastStems), 'copy') -- We concatenate the pronouns and the verbs if "concatPrs" is different of "false" -- No pronouns for the imperative mood if (tense ~= 'impPresent' and concatPrs ~= false) then local pronoms = deepCopy(export.conjPronouns(infoTense.stem, infoTense.mode, opts.isTransitive)) conjTab[tense].conj = concatPronomsVerbs(pronoms, conjTab[tense].conj) end end return conjTab end -- ==================================================================================== -- Allows you to obtain a given conjugation from a model. -- Ex. {{#invoke:ku-tewandin|tew|dem=indPresent|kes=s1}} -- See {{ku-tewîn-lk-niha}} -- ==================================================================================== function export.tew(frame) local args = frame:getParent().args local baseOpts = { isNegative = frame.args['neyînî'] or false, isTransitive = args['form'], isCompoundVerb = args['valahî'] or false, preSimpleVerb = args['pêşgir'] or nil, postSimpleVerb = args['paşgir'] or nil, accent = args['devok'] or 'std', tags = args['lînk'] or 'erê', overrideBi = args['bi'] or nil, overrideDi = args['di'] or nil, overrideNa = args['na'] or nil, overrideNe = args['ne'] or nil, impNegForm = nil } local tense = frame.args['dem'] or nil local pers = frame.args['kes'] or nil local presentStems = {args['niha'], args['niha2'], args['niha3']} local pastStems = {args['borî'], args['borî2'], args['borî3']} -- A few checks if (baseOpts.isTransitive == 'gerguhêz') then baseOpts.isTransitive = true elseif (baseOpts.isTransitive == 'negerguhêz') then baseOpts.isTransitive = false else return '<span style="color:red">form = gerguhêz / negerguhêz</span>' end if (baseOpts.isCompoundVerb == 'erê') then baseOpts.isCompoundVerb = true else baseOpts.isCompoundVerb = false end if (baseOpts.isNegative == 'erê') then baseOpts.isNegative = true end local tabConj = export.conjugateLong(baseOpts, tense, presentStems, pastStems).conj return tabConj[pers] end -- ==================================================================================== -- GET COMMMA SEPARED FORMS -- Bnr. [[MediaWiki:Gadget-QQ.js]] -- Ex. {{#invoke:ku-tewandin|get_comma_separated_forms|niha=kev|borî=ket}} -- ==================================================================================== function export.get_comma_separated_forms(frame) local opts = { presentStem = frame.args['niha'], pastStem = frame.args['borî'], isTransitive = false, isNegative = false, isCompoundVerb = frame['valahî'] or false, preSimpleVerb = frame['pêşgir'] or '', postSimpleVerb = frame['paşgir'] or '', overrideBi = frame['bi'] or nil, overrideDi = frame['di'] or nil, overrideNa = frame['na'] or nil, overrideNe = frame['ne'] or nil, impNegForm = nil, tags = 'na', -- Remove links/tags addPreverbParticles = 'na' -- Remove preverb particles (ê/dê) } local function concateList(tenseList) local concatList = {} for _, pers in ipairs({"s1", "s2", "s3", "p1"}) do local tense = tenseList[pers] table.insert(concatList, tense) end return table.concat(concatList, ",") end local tenseList = {'indPresent','indPreterite','indImperfect', 'indPluperfect','indPerfect','indNwPluperfect', 'indFuture','indFuturePerfect', 'subjImperfect','subjPluperfect' } local concatAllTense = {} for i = 1, #tenseList do local tense = tenseList[i] if export.tenseRules[tense] then opts.tense = tense local conj = shallowCopy(export.conjugate(opts).conj) local concatTense = concateList(conj) table.insert(concatAllTense, concatTense) end end return table.concat(concatAllTense, ",") end return export 87ta9dekahp0lk2z6vrk01vg6e2wicm 6237276 6237270 2026-06-08T02:06:30Z Ghybu 1393 6237276 Scribunto text/plain -- Modula tewandina lêkerên kurmancî local export = {} -- Load irregular forms table -- local irreg = require('Module:ku-tewandin/dijrêzik') local langKu = require("Modul:languages").getByCode("ku") local link = require('Module:links').language_link local shallowCopy = require("Module:table/shallowCopy") local deepCopy = require("Module:table/deepCopy") -- ============================================================================= -- Pronouns in Kurmanji -- ============================================================================= export.order = {"s1", "s2", "s3", "p1", "p2", "p3"} export.pronouns = { s1 = "ez", p1 = "em", s2 = "tu", p2 = "hûn", s3 = "ew", p3 = "ew" } export.obliquePronouns = { s1 = "min", p1 = "me", s2 = "te", p2 = "we", s3 = "wê/wî", p3 = "wan" } export.agents = { s1 = "te, wî, wê, we, wan", p1 = "te, wî, wê, we, wan", s2 = "min, wî, wê, me, wan", p2 = "min, wî, wê, me, wan", s3 = "min, te, wî, wê, me, we, wan", p3 = "min, te, wî, wê, me, we, wan" } -- Oblique pronoun (green) export.obliquePronounsGreen = { s1 = '<span style="color:green">min</span>', s2 = '<span style="color:green">te</span>', s3 = '<span style="color:green">wê/wî</span>', p1 = '<span style="color:green">me</span>', p2 = '<span style="color:green">we</span>', p3 = '<span style="color:green">wan</span>' } -- ───────────────────────────────────────────────────────────────────────────── -- 1) This function returns correct subject/agent pronoun, ergativity rule: -- - Transitive verbs in past tenses → oblique pronoun (green) = agent -- - All other cases → direct pronoun (no color) = subject -- 2) Also add the subjunctive prefix "(bila)" -- ───────────────────────────────────────────────────────────────────────────── function export.conjPronouns(stemType, mode, isTransitive) local pronouns = shallowCopy(export.pronouns) -- Ergativity in kurdish: transitive verbs that are conjugated with the past tense stem are -- conjugated according to the object, not the subject. -- Therefore, to have an ergative construction, -- the verb must be transitive and its stem must be the stem of the past tense. local isErgative = isTransitive and (stemType == 'past') -- If it's ergative, we use oblique pronouns: "min", "te", ... -- If it's not ergative, we use normal pronouns: "ez", "tu", ... if isErgative then pronouns = shallowCopy(export.obliquePronounsGreen) end -- For the subjunctive mood, we add "(bila)" at the beginning. if mode == 'subjunctive' then local subjPrefix = '<span style="color:gray">(bila)</span>' for _, pers in ipairs(export.order) do pronouns[pers] = subjPrefix .. ' ' .. pronouns[pers] end end return pronouns end -- ============================================================================= -- VERBAL STRUCTURE IN THE INFINITIVE: -- Verbs in the infinitive appear in three main forms: -- 1) Simple verb (indivisible light verb): -- - ex.: "kirin", "çûn", "xwarin", ... -- 2) Verbs with preverbs (preverb + simple verb): -- - ex.: "rakirin" (ra- + kirin), "çêkirin" (çê- + kirin), "vexwarin" (ve- + xwarin), ... -- - Preverb verbs don't use the prefix "bi-" (ez ê rakim , ew ê rake , ...) -- 3) Compound verbs, construction with non-verbal element (the noun is not attached to the verb): -- - Left of the simple verb: "hez kirin" ("hez" + "kirin"), "li dar xistin" ("li dar" + "xistin"), ... -- - Right of the simple verb: "kirin der" ("kirin" + "der"), "girtin ser xwe" ("girtin" + "ser xwe"), ... -- - Compound verbs use the prefix "bi-" (ez ê hez bi-kim , ew ê hez bi-ke ) -- STRUCTURE: preSimpleVerb + spacing + simpleVerb + postSimpleVerb -- EX. kirin: preSimpleVerb=''; spacing=false; simpleVerb='kirin'; postSimpleVerb='' -- rakirin: preSimpleVerb='ra'; spacing=false; simpleVerb='kirin'; postSimpleVerb='' -- hez kirin: preSimpleVerb='hez'; spacing=true; simpleVerb='kirin'; postSimpleVerb='' -- pev çûn: preSimpleVerb='pev'; spacing=true; simpleVerb='çûn'; postSimpleVerb='' -- kirin der: preSimpleVerb=''; spacing=false; simpleVerb='kirin'; postSimpleVerb='der' -- WARNING: Conjugation can vary depending on the type of verb. -- For example, in the future tense,the prefix "bi" is used for compound verbs, -- but not for preverbal verbs, see the function that manages it "tenseRules" table. -- This table does not yet support the mixed case: a verb composed of a noun and a preverb verb. -- ============================================================================= function export.verbStruct(isCompoundVerb, preSimpleVerb) local struct if (preSimpleVerb and preSimpleVerb ~= '' and not isCompoundVerb) then struct = 'preverbVerb' elseif isCompoundVerb then struct = 'compoundVerb' else struct = 'simpleVerb' end return struct end -- ================================================================ -- INFLECTIONAL ENDINGS -- Assigns verb inflectional endings (suffixes) to all tenses -- ================================================================ local getEndings = {} do -- ─────────────────────────────────────────────────────────────── -- Ending using present stem -- ─────────────────────────────────────────────────────────────── getEndings['present'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local ends = {} if mw.ustring.match(stem, '[aeêiîouû]$') then ends['std'] = {s1='m', s2='yî', s3='', p1='n', p2='n', p3='n'} ends['rojhilatî'] = {s1='m', s2='(y)', s3='t', p1='yn', p2='n', p3='n'} else ends['std'] = {s1='im', s2='î', s3='e', p1='in', p2='in', p3='in'} ends['rojhilatî'] = {s1='im', s2='î', s3='<u>it</u>/ît', p1='în', p2='in', p3='in'} end return ends end -- ─────────────────────────────────────────────────────────────── -- Ind. preterite + ind. imperfect ending -- ─────────────────────────────────────────────────────────────── getEndings['past'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local ends if mw.ustring.match(stem, '[aeêiouû]$') then ends = {s1='m', s2='yî', s3='', p1='n', p2='n', p3='n'} elseif mw.ustring.match(stem, 'î$') then -- if self.name == 'indImperfect' then -- -- special indicative ind. imperfect rule -- ends = {s1='yam', s2='yayî', s3='ya', p1='yan', p2='yan', p3='yan'} -- end ends = {s1='m', s2='', s3='', p1='n', p2='n', p3='n'} else ends = {s1='im', s2='î', s3='', p1='in', p2='in', p3='in'} end return ends end -- ─────────────────────────────────────────────────────────────── -- Compound endings with auxiliary "bûn" -- Inflectional endings are created by taking the different forms of the -- verb "bûn" (with present stem "-b-" and past stem "-bû-") and -- adding an "i-" prefix before them: "i-b-im", "i-bû-m", "i-bû-me", "i-bû-ma". -- This "i-" varies according to the final letter of the verb stem. -- ─────────────────────────────────────────────────────────────── local function normalize_i(stem) local prfx_i = "i" if mw.ustring.match(stem, "ya$") or mw.ustring.match(stem, "[îû]$") then -- cf. karîn (-karî-) prfx_i = "" elseif mw.ustring.match(stem, '[aeêiou]$') then prfx_i = "yi" end return prfx_i end getEndings['ibim'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local prfx_i = normalize_i(stem) return { s1 = prfx_i .. "bim", p1 = prfx_i .. "bin", s2 = prfx_i .. "bî", p2 = prfx_i .. "bin", s3 = prfx_i .. "be", p3 = prfx_i .. "bin" } end getEndings['ibûm'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local prfx_i = normalize_i(stem) return { s1 = prfx_i .. "bûm", p1 = prfx_i .. "bûn", s2 = prfx_i .. "bûyî", p2 = prfx_i .. "bûn", s3 = prfx_i .. "bû", p3 = prfx_i .. "bûn" } end getEndings['ibûme'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local prfx_i = normalize_i(stem) return { s1 = prfx_i .. "bûme", p1 = prfx_i .. "bûne", s2 = prfx_i .. "bûyiye", p2 = prfx_i .. "bûne", s3 = prfx_i .. "bûye", p3 = prfx_i .. "bûne" } end getEndings['ibûma'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local prfx_i = normalize_i(stem) return { s1 = prfx_i .. "bûma", p1 = prfx_i .. "bûna", s2 = prfx_i .. "bûyayî", p2 = prfx_i .. "bûna", s3 = prfx_i .. "bûya", p3 = prfx_i .. "bûna" } end -- ─────────────────────────────────────────────────────────────── -- Ind. perfect ending. -- ─────────────────────────────────────────────────────────────── getEndings['ime'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local ends if mw.ustring.match(stem, '[aeêiîouû]$') then ends = {s1="me", s2="yî", s3="ye", p1="ne", p2="ne", p3="ne"} else ends = {s1="ime", s2="iyî", s3="iye", p1="ine", p2="ine", p3="ine"} end return ends end -- ─────────────────────────────────────────────────────────────── -- Subj. Imperfect ending. -- ─────────────────────────────────────────────────────────────── getEndings['ama'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local ends -- The doublet in "-iyan" of verbs in -"în" (gerîn/-geriya-, kenîn/-keniya-, ...), -- in the conditional and subjunctive moods, a doublet "yaya" appears; it's removed. -- -yayayî → -yayî; -yaya → -ya if mw.ustring.match(stem, '(ya)$') then ends = {s1="ma", s2="yî", s3="", p1="na", p2="na", p3="na"} elseif mw.ustring.match(stem, '[aeêiîouû]$') then ends = {s1="ma", s2="yayî", s3="ya", p1="na", p2="na", p3="na"} else ends = {s1="ama", s2="ayî", s3="a", p1="ana", p2="ana", p3="ana"} end return ends end end -- ============================================================================= -- RULES FOR PREVERBS: "bi-" and "di-" -- There are two preverbs: "bi-" and "di-". These preverbs can change form -- depending on the first letters of the verb’s present stem or past stem. -- ============================================================================= local getPreverb = {} do getPreverb['bi'] = function (self, opts) opts = opts or {} local stem = opts.stem local verbStruct = opts.verbStruct local overrideBi = opts.overrideBi local accent = opts.accent -- @Ferhengvan: Dema bêt bi lêkera alîkar "ê / dê" û bi rehê lêkerê yê -- dema niha û pêşgirên kesî tê çêkirin. Pêşgira "bi-" li destpêka lêkera -- serekî nîne: - ez ê / dê xw-im (standard: ez ê/dê bi-xw-im). if (self.name == 'indFuture' and accent == 'rojhilatî') then return '' end -- Preverb verbs don't use the preverb "bi-": ra-kirin (ez ê rakim), ve-xwarin (ez ê vexwim) , ... -- But compound verb and simple verbs use it: hez kirin (ez ê hez bi-kim), lê bigirin (ez ê lê bi-girim), ... if (verbStruct == 'preverbVerb') then return '' end if overrideBi then return overrideBi end -- if irreg.dijrezikBi[stem] then return irreg.dijrezikBi[stem] end -- Modification of the preverbe "bi-" according to the last letter of the stem. if mw.ustring.match(stem, '^[aeêiîouû]') then return 'b' end return 'bi' end getPreverb['di'] = function (opts) opts = opts or {} local stem = opts.stem local overrideDi = opts.overrideDi if overrideDi then return overrideDi end -- if irreg.dijrezikDi[stem] then return irreg.dijrezikDi[stem] end -- Modification of the preverbe "di-" according to the last letter of the stem. if mw.ustring.match(stem, '^[ai]') then return 'd' end -- Ex. hatin : stem = -ê- // ez têm if mw.ustring.match(stem, '^[êî]') then return 't' end return 'di' end end -- ============================================================================= -- RULES FOR NEGATION PREFIXES: "na-" and "ne-" -- There are two negation prefixes: "na-" and "ne-". These preverbs can change -- form depending on the first letters of the verb’s present stem or past stem. -- ============================================================================= local getNegPrefix = {} do getNegPrefix['na'] = function (opts) opts = opts or {} local stem = opts.stem local overrideNa = opts.overrideNa if overrideNa then return '<b>' .. overrideNa .. '</b>' end -- if irreg.dijrezikNa[stem] then return irreg.dijrezikNa[stem] end -- Add sufix "-y" before certain vowels. if mw.ustring.match(stem, '^[eêiîouû]') then return '<b>nay</b>' end -- Elision before stems beginning with "a-" (removal of the final "-e"). if mw.ustring.match(stem, '^a') then return '<b>n</b>' end -- Tîpa duyem "-a-" ye (k-a-rîn, z-a-nîn, ...) if mw.ustring.match(stem, '^%wa') then return '<b>ni</b>' end return '<b>na</b>' end getNegPrefix['ne'] = function (opts) opts = opts or {} local stem = opts.stem local tenseName = opts.tenseName local impNegForm = opts.impNegForm local overrideNe = opts.overrideNe if overrideNe then return '<b>' .. overrideNe .. '</b>' end -- if irreg.dijrezikNe[stem] then return irreg.dijrezikNe[stem] end local negPrefix = 'ne' -- There are two forms of construction of the imperative, -- one with the prefix "me-" and the other with the prefix "ne-". if (tenseName == 'impPresent') then negPrefix = (impNegForm == 2) and 'ne' or 'me' end -- Add sufix "-y" before certain vowels. if mw.ustring.match(stem, '^[eêiîouû]') then return '<b>' .. negPrefix .. 'y</b>' end -- Elision before stems beginning with "a-" (removal of the final "-e"). if mw.ustring.match(stem, '^a') then negPrefix = mw.ustring.sub(negPrefix, 1, -2) return '<b>' .. negPrefix .. '</b>' end return '<b>' .. negPrefix .. '</b>' end end -- ============================================================================= -- Standardization of the PREVERBAL PARTICLE -- The proverbial particle "ê" is placed after the personal pronoun. -- ============================================================================= -- If there are no verbal preparticles, return empty table. function export.getPreverbParticules(preverbParticle, typeStem, isTransitive) if not preverbParticle then return {s1='', s2='', s3='', p1='', p2='', p3=''} end if preverbParticle == 'ê' then local isErgative = isTransitive and (typeStem == 'past') -- When the personal pronoun ends in a vowel, a "y-" is added before "ê". -- If it's ergative, we use oblique pronouns: "min", "te", ... if isErgative then return {s1='ê/dê', s2='yê/dê', s3='yê/dê', p1='yê/dê', p2='yê/dê', p3='ê/dê'} else return {s1='ê/dê', s2='yê/dê', s3='ê/dê', p1='ê/dê', p2='ê/dê', p3='ê/dê'} end end -- If the verbal preparticle is identical for all pronouns, -- we create a table with the same value. local preverbParticles = {} for _, pers in ipairs(export.order) do preverbParticles[pers] = preverbParticle end return preverbParticles end -- ============================================================================= -- RULES FOR CONSTRUCTING EACH VERB TENSE -- This table lists, for each verb tense, what elements are required to form it: -- - Verb conjugation is built by placing either the preverb "bi-" or "di-" before -- the verb stem (past or present), followed by a personal ending. -- - For the negative form, one of the prefixes "na-" or "ne-" is added as well. -- - In some cases, a preverbal particle such as /ê/ or /dê/ is added before -- the conjugated verb as well. -- Not: - The "negPreverb" (preverb (bi-/di-) for negative tenses) parameter has a -- value different from "nil" only for the Imperfect tense ("negPreverb=di"). -- - The parameter "negPrefix=na" is used only for the present indicative. -- -- Preverb "di", used in: "indPresent"(present stem), "indImperfect"(past stem) -- - Bo neyînî: pêşgira "di-" tenê di nav dema "IndImperfect" de tê bikaranîn. -- Preverb "bi", used in: "indFuture"(present stem), "subPresent"(present stem), -- "subImperfect"(past stem) = "condPresent"(past stem) -- - The prefix "bi-" isn't used in negative forms. -- -- Present stem, used in: "indPresent"(di)(na), -- "indFuture"(bi)(ne) = "subPresent"(bi)(ne) -- -- Past stem, used in: "indPreterite"(-)(ne), "indImperfect"(di)(ne), "indPluperfect"(-)(ne), -- "indPerfect"(-)(ne), "indNwPluperfect"(-)(ne), "indFuturePerfect"(-)(ne), -- "subPreterite"(-)(ne), -- "subImperfect"(bi)(ne) = "condPresent"(bi)(ne), -- "subPluperfect"(-)(ne) = "condPreterite"(-)(ne) -- ============================================================================= -- Some conjugations are identical except that they differ only in the preverbal particle (/ê/, /dê/). -- So, to avoid repeating the same information (and thus risking errors), -- we establish the common part shared between these verbs. local sharedTenseRules = { indFuture = { stem = "present", preverb = getPreverb['bi'], negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['present'] }, indFuturePerfect = { stem = "past", preverb = nil, negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['ibim'] }, subImperfect = { stem = "past", preverb = getPreverb['bi'], negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['ama'] }, subPluperfect = { stem = "past", preverb = nil, negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['ibûma'] } } local mt = { __index = function(t, k) local commonRules = t._commonRules if commonRules then return commonRules[k] end end } -- TENSES CONJUGATION RULES export.tenseRules = { -- IMPERATIVE MOOD impPresent = setmetatable({ name = "impPresent", nameKu = "raweya fermanî", nameEn = "present imperative", mode = "imperative", _commonRules = sharedTenseRules.indFuture, preverbParticle = nil }, mt), -- INDICATIVE MOOD indPresent = { name = "indPresent", nameKu = "dema niha", nameEn = "present", mode = "indicative", stem = "present", preverb = getPreverb['di'], negPreverb = nil, negPrefix = getNegPrefix['na'], endings = getEndings['present'], preverbParticle = nil }, indPreterite = { name = "indPreterite", nameKu = "raboriya sade", nameEn = "simple past", mode = "indicative", stem = "past", preverb = nil, negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['past'], preverbParticle = nil }, indImperfect = { name = "indImperfect", nameKu = "raboriya berdest", nameEn = "Imperfect", mode = "indicative", stem = "past", preverb = getPreverb['di'], negPreverb = getPreverb['di'], negPrefix = getNegPrefix['ne'], endings = getEndings['past'], preverbParticle = nil }, indPluperfect = { name = "indPluperfect", nameKu = "raboriya dûr", nameEn = "pluperfect", mode = "indicative", stem = "past", preverb = nil, negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['ibûm'], preverbParticle = nil }, indFuture = setmetatable({ name = "indFuture", nameKu = "dema bê", nameEn = "future", mode = "indicative", _commonRules = sharedTenseRules.indFuture, preverbParticle = 'ê' }, mt), indFuturePerfect = setmetatable({ name = "indFuturePerfect", nameKu = "dahatiya pêş", nameEn = "future perfect", mode = "indicative", _commonRules = sharedTenseRules.indFuturePerfect, preverbParticle = 'ê' }, mt), -- In some books, the "perfect" and "nonconfirmative pluperfect" tenses -- are classified in the "inferential mood" ("moda neşahidî"). -- Currently we classify them using the indicative mood (at the end). indPerfect = { name = "indPerfect", nameKu = "raboriya dûdar", nameEn = "perfect", mode = "indicative", stem = "past", preverb = nil, negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['ime'], preverbParticle = nil }, indNwPluperfect = { name = "indNwPluperfect", nameKu = "çîrokiya boriya dûdar", nameEn = "non-witnessed pluperfect", mode = "indicative", stem = "past", preverb = nil, negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['ibûme'], preverbParticle = nil }, -- SUBJUNCTIVE MOOD subjPresent = setmetatable({ name = "subjPresent", nameKu = "dema nihaya xwestekî", nameEn = "present subjunctive", mode = "subjunctive", _commonRules = sharedTenseRules.indFuture, preverbParticle = nil }, mt), subjPreterite = setmetatable({ name = "subjPreterite", nameKu = "dema boriya xwestekî", nameEn = "preterite subjunctive", mode = "subjunctive", _commonRules = sharedTenseRules.indFuturePerfect, preverbParticle = nil, }, mt), subjImperfect = setmetatable({ name = "subjImperfect", nameKu = "raboriya bilaniyê", nameEn = "imperfect subjunctive", mode = "subjunctive", _commonRules = sharedTenseRules.subImperfect, preverbParticle = nil, }, mt), subjPluperfect = setmetatable({ name = "subjPluperfect", nameKu = "raboriya dûr a bilaniyê", nameEn = "pluperfect subjunctive", mode = "subjunctive", _commonRules = sharedTenseRules.subPluperfect, preverbParticle = nil }, mt), -- CONDITIONAL MOOD condPresent = setmetatable({ name = "condPresent", nameKu = "çîrokiya dema nihaya mercî", nameEn = "present conditional", mode = "conditional", _commonRules = sharedTenseRules.subImperfect, preverbParticle = 'ê' }, mt), condPreterite = setmetatable({ name = "condPreterite", nameKu = "dema boriya mercî", nameEn = "preterite conditional", mode = "conditional", _commonRules = sharedTenseRules.subPluperfect, preverbParticle = 'ê' }, mt), } -- ============================================================================= -- MAIN CONJUGATION FUNCTOIN -- This function returns an array containing the conjugation table for a given -- tense as well as other information about the conjugated verb. -- ============================================================================= function export.conjugate(opts) opts = opts or {} -- Required parameters local tense = opts.tense or error("'tense' required", 2) --One of the two parameters is required: -- - If the tense uses the present stem, indicate "presentStem". -- - If it uses the past stem, indicate "pastStem". local presentStem = opts.presentStem local pastStem = opts.pastStem -- Optional parameters local isTransitive = opts.isTransitive or false -- Indicate if the verb is transitive (true/false) local isNegative = opts.isNegative or false -- Indicate if it's the negative form (true/false) local isCompoundVerb = opts.isCompoundVerb or false -- Indicate if it's a compound verb (true/false) local preSimpleVerb = opts.preSimpleVerb or '' -- The part before the simple verb local postSimpleVerb = opts.postSimpleVerb or '' -- The part after the simple verb -- These parameters are provided when the verb is irregular. -- Allows you to manually modify preverbs ("bi-"" or "di-") -- and negation prefixes ("na-" or "ne-") local overrideBi = opts.overrideBi or nil local overrideDi = opts.overrideDi or nil local overrideNa = opts.overrideNa or nil local overrideNe = opts.overrideNe or nil -- By default, the negation of the imperative is constructed from the prefix "me-"". -- To obtain the second variant, the prefix with "ne-", you must specify "impNegForm=2". local impNegForm = opts.impNegForm or nil -- Accent/ Devok local accent = opts.accent or 'std' -- If "tags='na'", remove links/tags local tags = opts.tags or 'erê' -- If addPreverbParticles='na', remove preverb particles (ê/dê) before -- the conjugated verbs. local addPreverbParticles = opts.addPreverbParticles or 'erê' -- We add a space to the left of the "postSimpleVerb" because it shouldn't be attached -- to the simple verb. if (postSimpleVerb ~= '' and postSimpleVerb ~=nil) then postSimpleVerb = ' ' .. postSimpleVerb end -- Access to the classification table and retrieval of verb tense parameters local infoTense = deepCopy(export.tenseRules[tense], 'copy') or false -- We check that this tense is indeed in table "tenseRules". if (not infoTense) then return '<span style="color:red">Unknown tense: ' .. tense ..'</span>' end -- We check that one of the two parameters of the stem is given if (infoTense.stem == 'present' and not presentStem) then return '<span style="color:red">presentStem parameter required</span>' elseif (infoTense.stem == 'past' and not pastStem) then return '<span style="color:red">pasttStem parameter required</span>' end -- Choice between the present stem or past stem local stem = (infoTense.stem == 'present') and presentStem or pastStem --──────────────────────────── -- Conjugation construction -- -- ─────────────────────────── local preverb = '' local negPrefix = '' -- Ruturns the verb type: "simpleVerb" or "preverbVerb" or "compoundVerb" local verbStruct = export.verbStruct(isCompoundVerb, preSimpleVerb) if isNegative then negPrefix = infoTense.negPrefix{stem=stem, tenseName=tense, impNegForm=impNegForm, overrideNa=overrideNa, overrideNe=overrideNe} if infoTense.negPreverb then preverb = infoTense.negPreverb{stem=stem, verbStruct=verbStruct, overrideBi=overrideBi, overrideDi=overrideDi} end else if infoTense.preverb then preverb = infoTense:preverb{stem=stem, verbStruct=verbStruct, overrideBi=overrideBi, overrideDi=overrideDi, accent=accent} end end infoTense.conj = {} local spacing = isCompoundVerb and ' ' or '' local endings = infoTense:endings(stem) -- 'rojhilatî' accent (devok) for present stem if (infoTense.stem == 'present') then if (accent == 'rojhilatî') then endings = endings['rojhilatî'] else endings = endings['std'] end end local preverbParticles = export.getPreverbParticules(infoTense.preverbParticle, infoTense.stem, isTransitive) local isErgative = isTransitive and (infoTense.stem == 'past') -- Creating the conjugation table for a given tense for _, pers in ipairs(export.order) do local ending local conjSimbleVerb local conjVerb if isErgative then ending = endings.s3 else ending = endings[pers] end -- Adding space after the preverbal particle, and -- if "addPreverbParticles='na'": remove preverb particles (ê/dê). local preverbParticle = '' if infoTense.preverbParticle and addPreverbParticles ~= 'na' then preverbParticle = preverbParticles[pers] .. ' ' end conjSimbleVerb = negPrefix .. preverb .. stem .. ending -- Adding prefixe and suffixe conjVerb = preSimpleVerb .. spacing .. conjSimbleVerb .. postSimpleVerb -- Spelling correction(îy -> iy) conjVerb = mw.ustring.gsub(conjVerb, 'îy', 'iy') -- Add a link / if tags='na' no links if tags ~= 'na' then conjVerb = link{term=conjVerb, lang=langKu} end -- Addition of the preverbal particle infoTense.conj[pers] = preverbParticle .. conjVerb end -- Imperative if (infoTense.name == 'impPresent') then infoTense.conj.s1 = nil infoTense.conj.s2 = infoTense.conj.s3 infoTense.conj.s3 = nil infoTense.conj.p1 = nil -- infoTense.conj.p2 = infoTense.conj.p2 infoTense.conj.p3 = nil end return infoTense end -- ============================================================================= -- END -- ============================================================================= -- Some useful tools -- ============================================================================= -- Returns the list of verb tenses export.tensesList = function() local list = {} for _, tense in pairs(export.tenseRules) do table.insert(list, tense.name) end return list end -- Concatenation of pronouns and conjugated verbs -- (for a given conjugate tense in all persons of that tense) function export.concatPronomsVerbs(pronoms, conjVerbs) local concatTab = {} for _, pers in ipairs(export.order) do concatTab[pers] = pronoms[pers] .. ' ' .. conjVerbs[pers] end return concatTab end -- ============================================================================= -- ADDITIONAL STEM OF THE PAST AND PRESENT (pastStem2, ... and presentStem2, ...) -- This function does nothing more than add additional parameters for verb stems -- in the past and present tenses. -- Conjugations for the different stems will be separated by "/" -- ============================================================================= function export.conjugateLong(baseOpts, tense, presentStems, pastStems) local opts = baseOpts or {} opts.tense = tense or nil presentStems = presentStems or {} pastStems = pastStems or {} local infoTense = deepCopy(export.tenseRules[tense], 'copy') or false -- We check that this tense is indeed in table "tenseRules". if not infoTense then return '<span style="color:red">Unknown tense: ' .. tense ..'</span>' end local stems = (infoTense.stem == 'present') and presentStems or pastStems -- For each verb stem, its conjugation table is calculated and stored in conjTabs. local conjTabs = {} for i = 1, #stems do if stems[i] then if (infoTense.stem == 'past') then opts.pastStem = stems[i] end if (infoTense.stem == 'present') then opts.presentStem = stems[i] end local conj = export.conjugate(opts).conj table.insert(conjTabs, conj) end end -- We concatenate each row of the conjugation tables. local concatConjTabs = {} for _, pers in ipairs(export.order) do local frag = {} for i = 1, #conjTabs do local val = conjTabs[i][pers] if val then table.insert(frag, tostring(val)) end end concatConjTabs[pers] = table.concat(frag, " / ") end infoTense.conj = concatConjTabs return infoTense end -- ==================================================================================== -- VERB CONUGATION IN ALL TENSES WITH OR WITHOUT PRONOUMS -- ==================================================================================== function export.conjugateAllTenses(baseOpts, presentStems, pastStems, negation, concatPrs) -- "concatPrs=false" table without pronouns local opts = baseOpts or {} if negation == 'negative' then opts.isNegative = true end -- Concatenation of pronouns and conjugated verbs local concatPronomsVerbs = export.concatPronomsVerbs -- Tenses list local tensesList = export.tensesList() -- Conjugation in all tenses local conjTab = {} for _, tense in ipairs(tensesList) do local infoTense = deepCopy(export.tenseRules[tense], 'copy') -- We create the conjugation table without the pronouns. conjTab[tense] = deepCopy(export.conjugateLong(opts, tense, presentStems, pastStems), 'copy') -- We concatenate the pronouns and the verbs if "concatPrs" is different of "false" -- No pronouns for the imperative mood if (tense ~= 'impPresent' and concatPrs ~= false) then local pronoms = deepCopy(export.conjPronouns(infoTense.stem, infoTense.mode, opts.isTransitive)) conjTab[tense].conj = concatPronomsVerbs(pronoms, conjTab[tense].conj) end end return conjTab end -- ==================================================================================== -- Allows you to obtain a given conjugation from a model. -- Ex. {{#invoke:ku-tewandin|tew|dem=indPresent|kes=s1}} -- See {{ku-tewîn-lk-niha}} -- ==================================================================================== function export.tew(frame) local args = frame:getParent().args local baseOpts = { isNegative = frame.args['neyînî'] or false, isTransitive = args['form'], isCompoundVerb = args['valahî'] or false, preSimpleVerb = args['pêşgir'] or nil, postSimpleVerb = args['paşgir'] or nil, accent = args['devok'] or 'std', tags = args['lînk'] or 'erê', overrideBi = args['bi'] or nil, overrideDi = args['di'] or nil, overrideNa = args['na'] or nil, overrideNe = args['ne'] or nil, impNegForm = nil } local tense = frame.args['dem'] or nil local pers = frame.args['kes'] or nil local presentStems = {args['niha'], args['niha2'], args['niha3']} local pastStems = {args['borî'], args['borî2'], args['borî3']} -- A few checks if (baseOpts.isTransitive == 'gerguhêz') then baseOpts.isTransitive = true elseif (baseOpts.isTransitive == 'negerguhêz') then baseOpts.isTransitive = false else return '<span style="color:red">form = gerguhêz / negerguhêz</span>' end if (baseOpts.isCompoundVerb == 'erê') then baseOpts.isCompoundVerb = true else baseOpts.isCompoundVerb = false end if (baseOpts.isNegative == 'erê') then baseOpts.isNegative = true end local tabConj = export.conjugateLong(baseOpts, tense, presentStems, pastStems).conj return tabConj[pers] end -- ==================================================================================== -- GET COMMMA SEPARED FORMS -- Bnr. [[MediaWiki:Gadget-QQ.js]] -- Ex. {{#invoke:ku-tewandin|get_comma_separated_forms|niha=kev|borî=ket}} -- ==================================================================================== function export.get_comma_separated_forms(frame) local opts = { presentStem = frame.args['niha'], pastStem = frame.args['borî'], isTransitive = false, isNegative = false, isCompoundVerb = frame['valahî'] or false, preSimpleVerb = frame['pêşgir'] or '', postSimpleVerb = frame['paşgir'] or '', overrideBi = frame['bi'] or nil, overrideDi = frame['di'] or nil, overrideNa = frame['na'] or nil, overrideNe = frame['ne'] or nil, impNegForm = nil, tags = 'na', -- Remove links/tags addPreverbParticles = 'na' -- Remove preverb particles (ê/dê) } local function concateList(tenseList) local concatList = {} for _, pers in ipairs({"s1", "s2", "s3", "p1"}) do local tense = tenseList[pers] table.insert(concatList, tense) end return table.concat(concatList, ",") end local tenseList = {'indPresent','indPreterite','indImperfect', 'indPluperfect','indPerfect','indNwPluperfect', 'indFuture','indFuturePerfect', 'subjImperfect','subjPluperfect' } local concatAllTense = {} for i = 1, #tenseList do local tense = tenseList[i] if export.tenseRules[tense] then opts.tense = tense local conj = shallowCopy(export.conjugate(opts).conj) local concatTense = concateList(conj) table.insert(concatAllTense, concatTense) end end return table.concat(concatAllTense, ",") end return export 2xn4uky6v8z7z4nb3ujdpy7kykp4uws 6237277 6237276 2026-06-08T02:12:46Z Ghybu 1393 6237277 Scribunto text/plain -- Modula tewandina lêkerên kurmancî local export = {} -- Load irregular forms table -- local irreg = require('Module:ku-tewandin/dijrêzik') local langKu = require("Modul:languages").getByCode("ku") local link = require('Module:links').language_link local shallowCopy = require("Module:table/shallowCopy") local deepCopy = require("Module:table/deepCopy") -- ============================================================================= -- Pronouns in Kurmanji -- ============================================================================= export.order = {"s1", "s2", "s3", "p1", "p2", "p3"} export.pronouns = { s1 = "ez", p1 = "em", s2 = "tu", p2 = "hûn", s3 = "ew", p3 = "ew" } export.obliquePronouns = { s1 = "min", p1 = "me", s2 = "te", p2 = "we", s3 = "wê/wî", p3 = "wan" } export.agents = { s1 = "te, wî, wê, we, wan", p1 = "te, wî, wê, we, wan", s2 = "min, wî, wê, me, wan", p2 = "min, wî, wê, me, wan", s3 = "min, te, wî, wê, me, we, wan", p3 = "min, te, wî, wê, me, we, wan" } -- Oblique pronoun (green) export.obliquePronounsGreen = { s1 = '<span style="color:green">min</span>', s2 = '<span style="color:green">te</span>', s3 = '<span style="color:green">wê/wî</span>', p1 = '<span style="color:green">me</span>', p2 = '<span style="color:green">we</span>', p3 = '<span style="color:green">wan</span>' } -- ───────────────────────────────────────────────────────────────────────────── -- 1) This function returns correct subject/agent pronoun, ergativity rule: -- - Transitive verbs in past tenses → oblique pronoun (green) = agent -- - All other cases → direct pronoun (no color) = subject -- 2) Also add the subjunctive prefix "(bila)" -- ───────────────────────────────────────────────────────────────────────────── function export.conjPronouns(stemType, mode, isTransitive) local pronouns = shallowCopy(export.pronouns) -- Ergativity in kurdish: transitive verbs that are conjugated with the past tense stem are -- conjugated according to the object, not the subject. -- Therefore, to have an ergative construction, -- the verb must be transitive and its stem must be the stem of the past tense. local isErgative = isTransitive and (stemType == 'past') -- If it's ergative, we use oblique pronouns: "min", "te", ... -- If it's not ergative, we use normal pronouns: "ez", "tu", ... if isErgative then pronouns = shallowCopy(export.obliquePronounsGreen) end -- For the subjunctive mood, we add "(bila)" at the beginning. if mode == 'subjunctive' then local subjPrefix = '<span style="color:gray">(bila)</span>' for _, pers in ipairs(export.order) do pronouns[pers] = subjPrefix .. ' ' .. pronouns[pers] end end return pronouns end -- ============================================================================= -- VERBAL STRUCTURE IN THE INFINITIVE: -- Verbs in the infinitive appear in three main forms: -- 1) Simple verb (indivisible light verb): -- - ex.: "kirin", "çûn", "xwarin", ... -- 2) Verbs with preverbs (preverb + simple verb): -- - ex.: "rakirin" (ra- + kirin), "çêkirin" (çê- + kirin), "vexwarin" (ve- + xwarin), ... -- - Preverb verbs don't use the prefix "bi-" (ez ê rakim , ew ê rake , ...) -- 3) Compound verbs, construction with non-verbal element (the noun is not attached to the verb): -- - Left of the simple verb: "hez kirin" ("hez" + "kirin"), "li dar xistin" ("li dar" + "xistin"), ... -- - Right of the simple verb: "kirin der" ("kirin" + "der"), "girtin ser xwe" ("girtin" + "ser xwe"), ... -- - Compound verbs use the prefix "bi-" (ez ê hez bi-kim , ew ê hez bi-ke ) -- STRUCTURE: preSimpleVerb + spacing + simpleVerb + postSimpleVerb -- EX. kirin: preSimpleVerb=''; spacing=false; simpleVerb='kirin'; postSimpleVerb='' -- rakirin: preSimpleVerb='ra'; spacing=false; simpleVerb='kirin'; postSimpleVerb='' -- hez kirin: preSimpleVerb='hez'; spacing=true; simpleVerb='kirin'; postSimpleVerb='' -- pev çûn: preSimpleVerb='pev'; spacing=true; simpleVerb='çûn'; postSimpleVerb='' -- kirin der: preSimpleVerb=''; spacing=false; simpleVerb='kirin'; postSimpleVerb='der' -- WARNING: Conjugation can vary depending on the type of verb. -- For example, in the future tense,the prefix "bi" is used for compound verbs, -- but not for preverbal verbs, see the function that manages it "tenseRules" table. -- This table does not yet support the mixed case: a verb composed of a noun and a preverb verb. -- ============================================================================= function export.verbStruct(isCompoundVerb, preSimpleVerb) local struct if (preSimpleVerb and preSimpleVerb ~= '' and not isCompoundVerb) then struct = 'preverbVerb' elseif isCompoundVerb then struct = 'compoundVerb' else struct = 'simpleVerb' end return struct end -- ================================================================ -- INFLECTIONAL ENDINGS -- Assigns verb inflectional endings (suffixes) to all tenses -- ================================================================ local getEndings = {} do -- ─────────────────────────────────────────────────────────────── -- Ending using present stem -- ─────────────────────────────────────────────────────────────── getEndings['present'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local ends = {} if mw.ustring.match(stem, '[aeêiîouû]$') then ends['std'] = {s1='m', s2='yî', s3='', p1='n', p2='n', p3='n'} ends['rojhilatî'] = {s1='m', s2='(y)', s3='t', p1='yn', p2='n', p3='n'} else ends['std'] = {s1='im', s2='î', s3='e', p1='in', p2='in', p3='in'} ends['rojhilatî'] = {s1='im', s2='î', s3='<u>it</u>/ît', p1='în', p2='in', p3='in'} end return ends end -- ─────────────────────────────────────────────────────────────── -- Ind. preterite + ind. imperfect ending -- ─────────────────────────────────────────────────────────────── getEndings['past'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local ends if mw.ustring.match(stem, '[aeêiouû]$') then ends = {s1='m', s2='yî', s3='', p1='n', p2='n', p3='n'} elseif mw.ustring.match(stem, 'î$') then -- if self.name == 'indImperfect' then -- -- special indicative ind. imperfect rule -- ends = {s1='yam', s2='yayî', s3='ya', p1='yan', p2='yan', p3='yan'} -- end ends = {s1='m', s2='', s3='', p1='n', p2='n', p3='n'} else ends = {s1='im', s2='î', s3='', p1='in', p2='in', p3='in'} end return ends end -- ─────────────────────────────────────────────────────────────── -- Compound endings with auxiliary "bûn" -- Inflectional endings are created by taking the different forms of the -- verb "bûn" (with present stem "-b-" and past stem "-bû-") and -- adding an "i-" prefix before them: "i-b-im", "i-bû-m", "i-bû-me", "i-bû-ma". -- This "i-" varies according to the final letter of the verb stem. -- ─────────────────────────────────────────────────────────────── local function normalize_i(stem) local prfx_i = "i" if mw.ustring.match(stem, "ya$") or mw.ustring.match(stem, "[îû]$") then -- cf. karîn (-karî-) prfx_i = "" elseif mw.ustring.match(stem, '[aeêiou]$') then prfx_i = "yi" end return prfx_i end getEndings['ibim'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local prfx_i = normalize_i(stem) return { s1 = prfx_i .. "bim", p1 = prfx_i .. "bin", s2 = prfx_i .. "bî", p2 = prfx_i .. "bin", s3 = prfx_i .. "be", p3 = prfx_i .. "bin" } end getEndings['ibûm'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local prfx_i = normalize_i(stem) return { s1 = prfx_i .. "bûm", p1 = prfx_i .. "bûn", s2 = prfx_i .. "bûyî", p2 = prfx_i .. "bûn", s3 = prfx_i .. "bû", p3 = prfx_i .. "bûn" } end getEndings['ibûme'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local prfx_i = normalize_i(stem) return { s1 = prfx_i .. "bûme", p1 = prfx_i .. "bûne", s2 = prfx_i .. "bûyiye", p2 = prfx_i .. "bûne", s3 = prfx_i .. "bûye", p3 = prfx_i .. "bûne" } end getEndings['ibûma'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local prfx_i = normalize_i(stem) return { s1 = prfx_i .. "bûma", p1 = prfx_i .. "bûna", s2 = prfx_i .. "bûyayî", p2 = prfx_i .. "bûna", s3 = prfx_i .. "bûya", p3 = prfx_i .. "bûna" } end -- ─────────────────────────────────────────────────────────────── -- Ind. perfect ending. -- ─────────────────────────────────────────────────────────────── getEndings['ime'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local ends if mw.ustring.match(stem, '[aeêiîouû]$') then ends = {s1="me", s2="yî", s3="ye", p1="ne", p2="ne", p3="ne"} else ends = {s1="ime", s2="iyî", s3="iye", p1="ine", p2="ine", p3="ine"} end return ends end -- ─────────────────────────────────────────────────────────────── -- Subj. Imperfect ending. -- ─────────────────────────────────────────────────────────────── getEndings['ama'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local ends -- The doublet in "-iyan" of verbs in -"în" (gerîn/-geriya-, kenîn/-keniya-, ...), -- in the conditional and subjunctive moods, a doublet "yaya" appears; it's removed. -- -yayayî → -yayî; -yaya → -ya if mw.ustring.match(stem, '(ya)$') then ends = {s1="ma", s2="yî", s3="", p1="na", p2="na", p3="na"} elseif mw.ustring.match(stem, '[aeêiîouû]$') then ends = {s1="ma", s2="yayî", s3="ya", p1="na", p2="na", p3="na"} else ends = {s1="ama", s2="ayî", s3="a", p1="ana", p2="ana", p3="ana"} end return ends end end -- ============================================================================= -- RULES FOR PREVERBS: "bi-" and "di-" -- There are two preverbs: "bi-" and "di-". These preverbs can change form -- depending on the first letters of the verb’s present stem or past stem. -- ============================================================================= local getPreverb = {} do getPreverb['bi'] = function (self, opts) opts = opts or {} local stem = opts.stem local verbStruct = opts.verbStruct local overrideBi = opts.overrideBi local accent = opts.accent -- Devoka rojhilatî: -- @Ferhengvan: Dema bêt bi lêkera alîkar "ê / dê" û bi rehê lêkerê yê -- dema niha û pêşgirên kesî tê çêkirin. Pêşgira "bi-" li destpêka lêkera -- serekî nîne: - ez ê / dê xw-im (standard: ez ê/dê bi-xw-im). if (self.name == 'indFuture' and accent == 'rojhilatî') then return '' end -- Preverb verbs don't use the preverb "bi-": ra-kirin (ez ê rakim), ve-xwarin (ez ê vexwim) , ... -- But compound verb and simple verbs use it: hez kirin (ez ê hez bi-kim), lê bigirin (ez ê lê bi-girim), ... if (verbStruct == 'preverbVerb') then return '' end if overrideBi then return overrideBi end -- if irreg.dijrezikBi[stem] then return irreg.dijrezikBi[stem] end -- Modification of the preverbe "bi-" according to the last letter of the stem. if mw.ustring.match(stem, '^[aeêiîouû]') then return 'b' end return 'bi' end getPreverb['di'] = function (opts) opts = opts or {} local stem = opts.stem local overrideDi = opts.overrideDi if overrideDi then return overrideDi end -- if irreg.dijrezikDi[stem] then return irreg.dijrezikDi[stem] end -- Modification of the preverbe "di-" according to the last letter of the stem. if mw.ustring.match(stem, '^[ai]') then return 'd' end -- Ex. hatin : stem = -ê- // ez têm if mw.ustring.match(stem, '^[êî]') then return 't' end return 'di' end end -- ============================================================================= -- RULES FOR NEGATION PREFIXES: "na-" and "ne-" -- There are two negation prefixes: "na-" and "ne-". These preverbs can change -- form depending on the first letters of the verb’s present stem or past stem. -- ============================================================================= local getNegPrefix = {} do getNegPrefix['na'] = function (opts) opts = opts or {} local stem = opts.stem local overrideNa = opts.overrideNa if overrideNa then return '<b>' .. overrideNa .. '</b>' end -- if irreg.dijrezikNa[stem] then return irreg.dijrezikNa[stem] end -- Add sufix "-y" before certain vowels. if mw.ustring.match(stem, '^[eêiîouû]') then return '<b>nay</b>' end -- Elision before stems beginning with "a-" (removal of the final "-e"). if mw.ustring.match(stem, '^a') then return '<b>n</b>' end -- Tîpa duyem "-a-" ye (k-a-rîn, z-a-nîn, ...) if mw.ustring.match(stem, '^%wa') then return '<b>ni</b>' end return '<b>na</b>' end getNegPrefix['ne'] = function (opts) opts = opts or {} local stem = opts.stem local tenseName = opts.tenseName local impNegForm = opts.impNegForm local overrideNe = opts.overrideNe if overrideNe then return '<b>' .. overrideNe .. '</b>' end -- if irreg.dijrezikNe[stem] then return irreg.dijrezikNe[stem] end local negPrefix = 'ne' -- There are two forms of construction of the imperative, -- one with the prefix "me-" and the other with the prefix "ne-". if (tenseName == 'impPresent') then negPrefix = (impNegForm == 2) and 'ne' or 'me' end -- Add sufix "-y" before certain vowels. if mw.ustring.match(stem, '^[eêiîouû]') then return '<b>' .. negPrefix .. 'y</b>' end -- Elision before stems beginning with "a-" (removal of the final "-e"). if mw.ustring.match(stem, '^a') then negPrefix = mw.ustring.sub(negPrefix, 1, -2) return '<b>' .. negPrefix .. '</b>' end return '<b>' .. negPrefix .. '</b>' end end -- ============================================================================= -- Standardization of the PREVERBAL PARTICLE -- The proverbial particle "ê" is placed after the personal pronoun. -- ============================================================================= -- If there are no verbal preparticles, return empty table. function export.getPreverbParticules(preverbParticle, typeStem, isTransitive) if not preverbParticle then return {s1='', s2='', s3='', p1='', p2='', p3=''} end if preverbParticle == 'ê' then local isErgative = isTransitive and (typeStem == 'past') -- When the personal pronoun ends in a vowel, a "y-" is added before "ê". -- If it's ergative, we use oblique pronouns: "min", "te", ... if isErgative then return {s1='ê/dê', s2='yê/dê', s3='yê/dê', p1='yê/dê', p2='yê/dê', p3='ê/dê'} else return {s1='ê/dê', s2='yê/dê', s3='ê/dê', p1='ê/dê', p2='ê/dê', p3='ê/dê'} end end -- If the verbal preparticle is identical for all pronouns, -- we create a table with the same value. local preverbParticles = {} for _, pers in ipairs(export.order) do preverbParticles[pers] = preverbParticle end return preverbParticles end -- ============================================================================= -- RULES FOR CONSTRUCTING EACH VERB TENSE -- This table lists, for each verb tense, what elements are required to form it: -- - Verb conjugation is built by placing either the preverb "bi-" or "di-" before -- the verb stem (past or present), followed by a personal ending. -- - For the negative form, one of the prefixes "na-" or "ne-" is added as well. -- - In some cases, a preverbal particle such as /ê/ or /dê/ is added before -- the conjugated verb as well. -- Not: - The "negPreverb" (preverb (bi-/di-) for negative tenses) parameter has a -- value different from "nil" only for the Imperfect tense ("negPreverb=di"). -- - The parameter "negPrefix=na" is used only for the present indicative. -- -- Preverb "di", used in: "indPresent"(present stem), "indImperfect"(past stem) -- - Bo neyînî: pêşgira "di-" tenê di nav dema "IndImperfect" de tê bikaranîn. -- Preverb "bi", used in: "indFuture"(present stem), "subPresent"(present stem), -- "subImperfect"(past stem) = "condPresent"(past stem) -- - The prefix "bi-" isn't used in negative forms. -- -- Present stem, used in: "indPresent"(di)(na), -- "indFuture"(bi)(ne) = "subPresent"(bi)(ne) -- -- Past stem, used in: "indPreterite"(-)(ne), "indImperfect"(di)(ne), "indPluperfect"(-)(ne), -- "indPerfect"(-)(ne), "indNwPluperfect"(-)(ne), "indFuturePerfect"(-)(ne), -- "subPreterite"(-)(ne), -- "subImperfect"(bi)(ne) = "condPresent"(bi)(ne), -- "subPluperfect"(-)(ne) = "condPreterite"(-)(ne) -- ============================================================================= -- Some conjugations are identical except that they differ only in the preverbal particle (/ê/, /dê/). -- So, to avoid repeating the same information (and thus risking errors), -- we establish the common part shared between these verbs. local sharedTenseRules = { indFuture = { stem = "present", preverb = getPreverb['bi'], negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['present'] }, indFuturePerfect = { stem = "past", preverb = nil, negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['ibim'] }, subImperfect = { stem = "past", preverb = getPreverb['bi'], negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['ama'] }, subPluperfect = { stem = "past", preverb = nil, negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['ibûma'] } } local mt = { __index = function(t, k) local commonRules = t._commonRules if commonRules then return commonRules[k] end end } -- TENSES CONJUGATION RULES export.tenseRules = { -- IMPERATIVE MOOD impPresent = setmetatable({ name = "impPresent", nameKu = "raweya fermanî", nameEn = "present imperative", mode = "imperative", _commonRules = sharedTenseRules.indFuture, preverbParticle = nil }, mt), -- INDICATIVE MOOD indPresent = { name = "indPresent", nameKu = "dema niha", nameEn = "present", mode = "indicative", stem = "present", preverb = getPreverb['di'], negPreverb = nil, negPrefix = getNegPrefix['na'], endings = getEndings['present'], preverbParticle = nil }, indPreterite = { name = "indPreterite", nameKu = "raboriya sade", nameEn = "simple past", mode = "indicative", stem = "past", preverb = nil, negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['past'], preverbParticle = nil }, indImperfect = { name = "indImperfect", nameKu = "raboriya berdest", nameEn = "Imperfect", mode = "indicative", stem = "past", preverb = getPreverb['di'], negPreverb = getPreverb['di'], negPrefix = getNegPrefix['ne'], endings = getEndings['past'], preverbParticle = nil }, indPluperfect = { name = "indPluperfect", nameKu = "raboriya dûr", nameEn = "pluperfect", mode = "indicative", stem = "past", preverb = nil, negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['ibûm'], preverbParticle = nil }, indFuture = setmetatable({ name = "indFuture", nameKu = "dema bê", nameEn = "future", mode = "indicative", _commonRules = sharedTenseRules.indFuture, preverbParticle = 'ê' }, mt), indFuturePerfect = setmetatable({ name = "indFuturePerfect", nameKu = "dahatiya pêş", nameEn = "future perfect", mode = "indicative", _commonRules = sharedTenseRules.indFuturePerfect, preverbParticle = 'ê' }, mt), -- In some books, the "perfect" and "nonconfirmative pluperfect" tenses -- are classified in the "inferential mood" ("moda neşahidî"). -- Currently we classify them using the indicative mood (at the end). indPerfect = { name = "indPerfect", nameKu = "raboriya dûdar", nameEn = "perfect", mode = "indicative", stem = "past", preverb = nil, negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['ime'], preverbParticle = nil }, indNwPluperfect = { name = "indNwPluperfect", nameKu = "çîrokiya boriya dûdar", nameEn = "non-witnessed pluperfect", mode = "indicative", stem = "past", preverb = nil, negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['ibûme'], preverbParticle = nil }, -- SUBJUNCTIVE MOOD subjPresent = setmetatable({ name = "subjPresent", nameKu = "dema nihaya xwestekî", nameEn = "present subjunctive", mode = "subjunctive", _commonRules = sharedTenseRules.indFuture, preverbParticle = nil }, mt), subjPreterite = setmetatable({ name = "subjPreterite", nameKu = "dema boriya xwestekî", nameEn = "preterite subjunctive", mode = "subjunctive", _commonRules = sharedTenseRules.indFuturePerfect, preverbParticle = nil, }, mt), subjImperfect = setmetatable({ name = "subjImperfect", nameKu = "raboriya bilaniyê", nameEn = "imperfect subjunctive", mode = "subjunctive", _commonRules = sharedTenseRules.subImperfect, preverbParticle = nil, }, mt), subjPluperfect = setmetatable({ name = "subjPluperfect", nameKu = "raboriya dûr a bilaniyê", nameEn = "pluperfect subjunctive", mode = "subjunctive", _commonRules = sharedTenseRules.subPluperfect, preverbParticle = nil }, mt), -- CONDITIONAL MOOD condPresent = setmetatable({ name = "condPresent", nameKu = "çîrokiya dema nihaya mercî", nameEn = "present conditional", mode = "conditional", _commonRules = sharedTenseRules.subImperfect, preverbParticle = 'ê' }, mt), condPreterite = setmetatable({ name = "condPreterite", nameKu = "dema boriya mercî", nameEn = "preterite conditional", mode = "conditional", _commonRules = sharedTenseRules.subPluperfect, preverbParticle = 'ê' }, mt), } -- ============================================================================= -- MAIN CONJUGATION FUNCTOIN -- This function returns an array containing the conjugation table for a given -- tense as well as other information about the conjugated verb. -- ============================================================================= function export.conjugate(opts) opts = opts or {} -- Required parameters local tense = opts.tense or error("'tense' required", 2) --One of the two parameters is required: -- - If the tense uses the present stem, indicate "presentStem". -- - If it uses the past stem, indicate "pastStem". local presentStem = opts.presentStem local pastStem = opts.pastStem -- Optional parameters local isTransitive = opts.isTransitive or false -- Indicate if the verb is transitive (true/false) local isNegative = opts.isNegative or false -- Indicate if it's the negative form (true/false) local isCompoundVerb = opts.isCompoundVerb or false -- Indicate if it's a compound verb (true/false) local preSimpleVerb = opts.preSimpleVerb or '' -- The part before the simple verb local postSimpleVerb = opts.postSimpleVerb or '' -- The part after the simple verb -- These parameters are provided when the verb is irregular. -- Allows you to manually modify preverbs ("bi-"" or "di-") -- and negation prefixes ("na-" or "ne-") local overrideBi = opts.overrideBi or nil local overrideDi = opts.overrideDi or nil local overrideNa = opts.overrideNa or nil local overrideNe = opts.overrideNe or nil -- By default, the negation of the imperative is constructed from the prefix "me-"". -- To obtain the second variant, the prefix with "ne-", you must specify "impNegForm=2". local impNegForm = opts.impNegForm or nil -- Accent/ Devok local accent = opts.accent or 'std' -- If "tags='na'", remove links/tags local tags = opts.tags or 'erê' -- If addPreverbParticles='na', remove preverb particles (ê/dê) before -- the conjugated verbs. local addPreverbParticles = opts.addPreverbParticles or 'erê' -- We add a space to the left of the "postSimpleVerb" because it shouldn't be attached -- to the simple verb. if (postSimpleVerb ~= '' and postSimpleVerb ~=nil) then postSimpleVerb = ' ' .. postSimpleVerb end -- Access to the classification table and retrieval of verb tense parameters local infoTense = deepCopy(export.tenseRules[tense], 'copy') or false -- We check that this tense is indeed in table "tenseRules". if (not infoTense) then return '<span style="color:red">Unknown tense: ' .. tense ..'</span>' end -- We check that one of the two parameters of the stem is given if (infoTense.stem == 'present' and not presentStem) then return '<span style="color:red">presentStem parameter required</span>' elseif (infoTense.stem == 'past' and not pastStem) then return '<span style="color:red">pasttStem parameter required</span>' end -- Choice between the present stem or past stem local stem = (infoTense.stem == 'present') and presentStem or pastStem --──────────────────────────── -- Conjugation construction -- -- ─────────────────────────── local preverb = '' local negPrefix = '' -- Ruturns the verb type: "simpleVerb" or "preverbVerb" or "compoundVerb" local verbStruct = export.verbStruct(isCompoundVerb, preSimpleVerb) if isNegative then negPrefix = infoTense.negPrefix{stem=stem, tenseName=tense, impNegForm=impNegForm, overrideNa=overrideNa, overrideNe=overrideNe} if infoTense.negPreverb then preverb = infoTense.negPreverb{stem=stem, verbStruct=verbStruct, overrideBi=overrideBi, overrideDi=overrideDi} end else if infoTense.preverb then preverb = infoTense:preverb{stem=stem, verbStruct=verbStruct, overrideBi=overrideBi, overrideDi=overrideDi, accent=accent} end end infoTense.conj = {} local spacing = isCompoundVerb and ' ' or '' local endings = infoTense:endings(stem) -- 'rojhilatî' accent (devok) for present stem if (infoTense.stem == 'present') then if (accent == 'rojhilatî') then endings = endings['rojhilatî'] else endings = endings['std'] end end local preverbParticles = export.getPreverbParticules(infoTense.preverbParticle, infoTense.stem, isTransitive) local isErgative = isTransitive and (infoTense.stem == 'past') -- Creating the conjugation table for a given tense for _, pers in ipairs(export.order) do local ending local conjSimbleVerb local conjVerb if isErgative then ending = endings.s3 else ending = endings[pers] end -- Adding space after the preverbal particle, and -- if "addPreverbParticles='na'": remove preverb particles (ê/dê). local preverbParticle = '' if infoTense.preverbParticle and addPreverbParticles ~= 'na' then preverbParticle = preverbParticles[pers] .. ' ' end conjSimbleVerb = negPrefix .. preverb .. stem .. ending -- Adding prefixe and suffixe conjVerb = preSimpleVerb .. spacing .. conjSimbleVerb .. postSimpleVerb -- Spelling correction(îy -> iy) conjVerb = mw.ustring.gsub(conjVerb, 'îy', 'iy') -- Add a link / if tags='na' no links if tags ~= 'na' then conjVerb = link{term=conjVerb, lang=langKu} end -- Addition of the preverbal particle infoTense.conj[pers] = preverbParticle .. conjVerb end -- Imperative if (infoTense.name == 'impPresent') then infoTense.conj.s1 = nil infoTense.conj.s2 = infoTense.conj.s3 infoTense.conj.s3 = nil infoTense.conj.p1 = nil -- infoTense.conj.p2 = infoTense.conj.p2 infoTense.conj.p3 = nil end return infoTense end -- ============================================================================= -- END -- ============================================================================= -- Some useful tools -- ============================================================================= -- Returns the list of verb tenses export.tensesList = function() local list = {} for _, tense in pairs(export.tenseRules) do table.insert(list, tense.name) end return list end -- Concatenation of pronouns and conjugated verbs -- (for a given conjugate tense in all persons of that tense) function export.concatPronomsVerbs(pronoms, conjVerbs) local concatTab = {} for _, pers in ipairs(export.order) do concatTab[pers] = pronoms[pers] .. ' ' .. conjVerbs[pers] end return concatTab end -- ============================================================================= -- ADDITIONAL STEM OF THE PAST AND PRESENT (pastStem2, ... and presentStem2, ...) -- This function does nothing more than add additional parameters for verb stems -- in the past and present tenses. -- Conjugations for the different stems will be separated by "/" -- ============================================================================= function export.conjugateLong(baseOpts, tense, presentStems, pastStems) local opts = baseOpts or {} opts.tense = tense or nil presentStems = presentStems or {} pastStems = pastStems or {} local infoTense = deepCopy(export.tenseRules[tense], 'copy') or false -- We check that this tense is indeed in table "tenseRules". if not infoTense then return '<span style="color:red">Unknown tense: ' .. tense ..'</span>' end local stems = (infoTense.stem == 'present') and presentStems or pastStems -- For each verb stem, its conjugation table is calculated and stored in conjTabs. local conjTabs = {} for i = 1, #stems do if stems[i] then if (infoTense.stem == 'past') then opts.pastStem = stems[i] end if (infoTense.stem == 'present') then opts.presentStem = stems[i] end local conj = export.conjugate(opts).conj table.insert(conjTabs, conj) end end -- We concatenate each row of the conjugation tables. local concatConjTabs = {} for _, pers in ipairs(export.order) do local frag = {} for i = 1, #conjTabs do local val = conjTabs[i][pers] if val then table.insert(frag, tostring(val)) end end concatConjTabs[pers] = table.concat(frag, " / ") end infoTense.conj = concatConjTabs return infoTense end -- ==================================================================================== -- VERB CONUGATION IN ALL TENSES WITH OR WITHOUT PRONOUMS -- ==================================================================================== function export.conjugateAllTenses(baseOpts, presentStems, pastStems, negation, concatPrs) -- "concatPrs=false" table without pronouns local opts = baseOpts or {} if negation == 'negative' then opts.isNegative = true end -- Concatenation of pronouns and conjugated verbs local concatPronomsVerbs = export.concatPronomsVerbs -- Tenses list local tensesList = export.tensesList() -- Conjugation in all tenses local conjTab = {} for _, tense in ipairs(tensesList) do local infoTense = deepCopy(export.tenseRules[tense], 'copy') -- We create the conjugation table without the pronouns. conjTab[tense] = deepCopy(export.conjugateLong(opts, tense, presentStems, pastStems), 'copy') -- We concatenate the pronouns and the verbs if "concatPrs" is different of "false" -- No pronouns for the imperative mood if (tense ~= 'impPresent' and concatPrs ~= false) then local pronoms = deepCopy(export.conjPronouns(infoTense.stem, infoTense.mode, opts.isTransitive)) conjTab[tense].conj = concatPronomsVerbs(pronoms, conjTab[tense].conj) end end return conjTab end -- ==================================================================================== -- Allows you to obtain a given conjugation from a model. -- Ex. {{#invoke:ku-tewandin|tew|dem=indPresent|kes=s1}} -- See {{ku-tewîn-lk-niha}} -- ==================================================================================== function export.tew(frame) local args = frame:getParent().args local baseOpts = { isNegative = frame.args['neyînî'] or false, isTransitive = args['form'], isCompoundVerb = args['valahî'] or false, preSimpleVerb = args['pêşgir'] or nil, postSimpleVerb = args['paşgir'] or nil, accent = args['devok'] or 'std', tags = args['lînk'] or 'erê', overrideBi = args['bi'] or nil, overrideDi = args['di'] or nil, overrideNa = args['na'] or nil, overrideNe = args['ne'] or nil, impNegForm = nil } local tense = frame.args['dem'] or nil local pers = frame.args['kes'] or nil local presentStems = {args['niha'], args['niha2'], args['niha3']} local pastStems = {args['borî'], args['borî2'], args['borî3']} -- A few checks if (baseOpts.isTransitive == 'gerguhêz') then baseOpts.isTransitive = true elseif (baseOpts.isTransitive == 'negerguhêz') then baseOpts.isTransitive = false else return '<span style="color:red">form = gerguhêz / negerguhêz</span>' end if (baseOpts.isCompoundVerb == 'erê') then baseOpts.isCompoundVerb = true else baseOpts.isCompoundVerb = false end if (baseOpts.isNegative == 'erê') then baseOpts.isNegative = true end local tabConj = export.conjugateLong(baseOpts, tense, presentStems, pastStems).conj return tabConj[pers] end -- ==================================================================================== -- GET COMMMA SEPARED FORMS -- Bnr. [[MediaWiki:Gadget-QQ.js]] -- Ex. {{#invoke:ku-tewandin|get_comma_separated_forms|niha=kev|borî=ket}} -- ==================================================================================== function export.get_comma_separated_forms(frame) local opts = { presentStem = frame.args['niha'], pastStem = frame.args['borî'], isTransitive = false, isNegative = false, isCompoundVerb = frame['valahî'] or false, preSimpleVerb = frame['pêşgir'] or '', postSimpleVerb = frame['paşgir'] or '', overrideBi = frame['bi'] or nil, overrideDi = frame['di'] or nil, overrideNa = frame['na'] or nil, overrideNe = frame['ne'] or nil, impNegForm = nil, tags = 'na', -- Remove links/tags addPreverbParticles = 'na' -- Remove preverb particles (ê/dê) } local function concateList(tenseList) local concatList = {} for _, pers in ipairs({"s1", "s2", "s3", "p1"}) do local tense = tenseList[pers] table.insert(concatList, tense) end return table.concat(concatList, ",") end local tenseList = {'indPresent','indPreterite','indImperfect', 'indPluperfect','indPerfect','indNwPluperfect', 'indFuture','indFuturePerfect', 'subjImperfect','subjPluperfect' } local concatAllTense = {} for i = 1, #tenseList do local tense = tenseList[i] if export.tenseRules[tense] then opts.tense = tense local conj = shallowCopy(export.conjugate(opts).conj) local concatTense = concateList(conj) table.insert(concatAllTense, concatTense) end end return table.concat(concatAllTense, ",") end return export t7ghcj2t86c2ggnxh34rgyrx5mmtgrd 6237283 6237277 2026-06-08T03:21:56Z Ghybu 1393 6237283 Scribunto text/plain -- Modula tewandina lêkerên kurmancî local export = {} -- Load irregular forms table -- local irreg = require('Module:ku-tewandin/nestandard') local langKu = require("Modul:languages").getByCode("ku") local link = require('Module:links').language_link local shallowCopy = require("Module:table/shallowCopy") local deepCopy = require("Module:table/deepCopy") -- ============================================================================= -- Pronouns in Kurmanji -- ============================================================================= export.order = {"s1", "s2", "s3", "p1", "p2", "p3"} export.pronouns = { s1 = "ez", p1 = "em", s2 = "tu", p2 = "hûn", s3 = "ew", p3 = "ew" } export.obliquePronouns = { s1 = "min", p1 = "me", s2 = "te", p2 = "we", s3 = "wê/wî", p3 = "wan" } export.agents = { s1 = "te, wî, wê, we, wan", p1 = "te, wî, wê, we, wan", s2 = "min, wî, wê, me, wan", p2 = "min, wî, wê, me, wan", s3 = "min, te, wî, wê, me, we, wan", p3 = "min, te, wî, wê, me, we, wan" } -- Oblique pronoun (green) export.obliquePronounsGreen = { s1 = '<span style="color:green">min</span>', s2 = '<span style="color:green">te</span>', s3 = '<span style="color:green">wê/wî</span>', p1 = '<span style="color:green">me</span>', p2 = '<span style="color:green">we</span>', p3 = '<span style="color:green">wan</span>' } -- ───────────────────────────────────────────────────────────────────────────── -- 1) This function returns correct subject/agent pronoun, ergativity rule: -- - Transitive verbs in past tenses → oblique pronoun (green) = agent -- - All other cases → direct pronoun (no color) = subject -- 2) Also add the subjunctive prefix "(bila)" -- ───────────────────────────────────────────────────────────────────────────── function export.conjPronouns(stemType, mode, isTransitive) local pronouns = shallowCopy(export.pronouns) -- Ergativity in kurdish: transitive verbs that are conjugated with the past tense stem are -- conjugated according to the object, not the subject. -- Therefore, to have an ergative construction, -- the verb must be transitive and its stem must be the stem of the past tense. local isErgative = isTransitive and (stemType == 'past') -- If it's ergative, we use oblique pronouns: "min", "te", ... -- If it's not ergative, we use normal pronouns: "ez", "tu", ... if isErgative then pronouns = shallowCopy(export.obliquePronounsGreen) end -- For the subjunctive mood, we add "(bila)" at the beginning. if mode == 'subjunctive' then local subjPrefix = '<span style="color:gray">(bila)</span>' for _, pers in ipairs(export.order) do pronouns[pers] = subjPrefix .. ' ' .. pronouns[pers] end end return pronouns end -- ============================================================================= -- VERBAL STRUCTURE IN THE INFINITIVE: -- Verbs in the infinitive appear in three main forms: -- 1) Simple verb (indivisible light verb): -- - ex.: "kirin", "çûn", "xwarin", ... -- 2) Verbs with preverbs (preverb + simple verb): -- - ex.: "rakirin" (ra- + kirin), "çêkirin" (çê- + kirin), "vexwarin" (ve- + xwarin), ... -- - Preverb verbs don't use the prefix "bi-" (ez ê rakim , ew ê rake , ...) -- 3) Compound verbs, construction with non-verbal element (the noun is not attached to the verb): -- - Left of the simple verb: "hez kirin" ("hez" + "kirin"), "li dar xistin" ("li dar" + "xistin"), ... -- - Right of the simple verb: "kirin der" ("kirin" + "der"), "girtin ser xwe" ("girtin" + "ser xwe"), ... -- - Compound verbs use the prefix "bi-" (ez ê hez bi-kim , ew ê hez bi-ke ) -- STRUCTURE: preSimpleVerb + spacing + simpleVerb + postSimpleVerb -- EX. kirin: preSimpleVerb=''; spacing=false; simpleVerb='kirin'; postSimpleVerb='' -- rakirin: preSimpleVerb='ra'; spacing=false; simpleVerb='kirin'; postSimpleVerb='' -- hez kirin: preSimpleVerb='hez'; spacing=true; simpleVerb='kirin'; postSimpleVerb='' -- pev çûn: preSimpleVerb='pev'; spacing=true; simpleVerb='çûn'; postSimpleVerb='' -- kirin der: preSimpleVerb=''; spacing=false; simpleVerb='kirin'; postSimpleVerb='der' -- WARNING: Conjugation can vary depending on the type of verb. -- For example, in the future tense,the prefix "bi" is used for compound verbs, -- but not for preverbal verbs, see the function that manages it "tenseRules" table. -- This table does not yet support the mixed case: a verb composed of a noun and a preverb verb. -- ============================================================================= function export.verbStruct(isCompoundVerb, preSimpleVerb) local struct if (preSimpleVerb and preSimpleVerb ~= '' and not isCompoundVerb) then struct = 'preverbVerb' elseif isCompoundVerb then struct = 'compoundVerb' else struct = 'simpleVerb' end return struct end -- ================================================================ -- INFLECTIONAL ENDINGS -- Assigns verb inflectional endings (suffixes) to all tenses -- ================================================================ local getEndings = {} do -- ─────────────────────────────────────────────────────────────── -- Ending using present stem -- ─────────────────────────────────────────────────────────────── getEndings['present'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local ends = {} if mw.ustring.match(stem, '[aeêiîouû]$') then ends['std'] = {s1='m', s2='yî', s3='', p1='n', p2='n', p3='n'} ends['rojhilatî'] = {s1='m', s2='(y)', s3='t', p1='yn', p2='n', p3='n'} else ends['std'] = {s1='im', s2='î', s3='e', p1='in', p2='in', p3='in'} ends['rojhilatî'] = {s1='im', s2='î', s3='<u>it</u>/ît', p1='în', p2='in', p3='in'} end return ends end -- ─────────────────────────────────────────────────────────────── -- Ind. preterite + ind. imperfect ending -- ─────────────────────────────────────────────────────────────── getEndings['past'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local ends if mw.ustring.match(stem, '[aeêiouû]$') then ends = {s1='m', s2='yî', s3='', p1='n', p2='n', p3='n'} elseif mw.ustring.match(stem, 'î$') then -- if self.name == 'indImperfect' then -- -- special indicative ind. imperfect rule -- ends = {s1='yam', s2='yayî', s3='ya', p1='yan', p2='yan', p3='yan'} -- end ends = {s1='m', s2='', s3='', p1='n', p2='n', p3='n'} else ends = {s1='im', s2='î', s3='', p1='in', p2='in', p3='in'} end return ends end -- ─────────────────────────────────────────────────────────────── -- Compound endings with auxiliary "bûn" -- Inflectional endings are created by taking the different forms of the -- verb "bûn" (with present stem "-b-" and past stem "-bû-") and -- adding an "i-" prefix before them: "i-b-im", "i-bû-m", "i-bû-me", "i-bû-ma". -- This "i-" varies according to the final letter of the verb stem. -- ─────────────────────────────────────────────────────────────── local function normalize_i(stem) local prfx_i = "i" if mw.ustring.match(stem, "ya$") or mw.ustring.match(stem, "[îû]$") then -- cf. karîn (-karî-) prfx_i = "" elseif mw.ustring.match(stem, '[aeêiou]$') then prfx_i = "yi" end return prfx_i end getEndings['ibim'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local prfx_i = normalize_i(stem) return { s1 = prfx_i .. "bim", p1 = prfx_i .. "bin", s2 = prfx_i .. "bî", p2 = prfx_i .. "bin", s3 = prfx_i .. "be", p3 = prfx_i .. "bin" } end getEndings['ibûm'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local prfx_i = normalize_i(stem) return { s1 = prfx_i .. "bûm", p1 = prfx_i .. "bûn", s2 = prfx_i .. "bûyî", p2 = prfx_i .. "bûn", s3 = prfx_i .. "bû", p3 = prfx_i .. "bûn" } end getEndings['ibûme'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local prfx_i = normalize_i(stem) return { s1 = prfx_i .. "bûme", p1 = prfx_i .. "bûne", s2 = prfx_i .. "bûyiye", p2 = prfx_i .. "bûne", s3 = prfx_i .. "bûye", p3 = prfx_i .. "bûne" } end getEndings['ibûma'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local prfx_i = normalize_i(stem) return { s1 = prfx_i .. "bûma", p1 = prfx_i .. "bûna", s2 = prfx_i .. "bûyayî", p2 = prfx_i .. "bûna", s3 = prfx_i .. "bûya", p3 = prfx_i .. "bûna" } end -- ─────────────────────────────────────────────────────────────── -- Ind. perfect ending. -- ─────────────────────────────────────────────────────────────── getEndings['ime'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local ends if mw.ustring.match(stem, '[aeêiîouû]$') then ends = {s1="me", s2="yî", s3="ye", p1="ne", p2="ne", p3="ne"} else ends = {s1="ime", s2="iyî", s3="iye", p1="ine", p2="ine", p3="ine"} end return ends end -- ─────────────────────────────────────────────────────────────── -- Subj. Imperfect ending. -- ─────────────────────────────────────────────────────────────── getEndings['ama'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local ends -- The doublet in "-iyan" of verbs in -"în" (gerîn/-geriya-, kenîn/-keniya-, ...), -- in the conditional and subjunctive moods, a doublet "yaya" appears; it's removed. -- -yayayî → -yayî; -yaya → -ya if mw.ustring.match(stem, '(ya)$') then ends = {s1="ma", s2="yî", s3="", p1="na", p2="na", p3="na"} elseif mw.ustring.match(stem, '[aeêiîouû]$') then ends = {s1="ma", s2="yayî", s3="ya", p1="na", p2="na", p3="na"} else ends = {s1="ama", s2="ayî", s3="a", p1="ana", p2="ana", p3="ana"} end return ends end end -- ============================================================================= -- RULES FOR PREVERBS: "bi-" and "di-" -- There are two preverbs: "bi-" and "di-". These preverbs can change form -- depending on the first letters of the verb’s present stem or past stem. -- ============================================================================= local getPreverb = {} do getPreverb['bi'] = function (self, opts) opts = opts or {} local stem = opts.stem local verbStruct = opts.verbStruct local overrideBi = opts.overrideBi local accent = opts.accent -- Devoka rojhilatî: -- @Ferhengvan: Dema bêt bi lêkera alîkar "ê / dê" û bi rehê lêkerê yê -- dema niha û pêşgirên kesî tê çêkirin. Pêşgira "bi-" li destpêka lêkera -- serekî nîne: - ez ê / dê xw-im (standard: ez ê/dê bi-xw-im). if (self.name == 'indFuture' and accent == 'rojhilatî') then return '' end -- Preverb verbs don't use the preverb "bi-": ra-kirin (ez ê rakim), ve-xwarin (ez ê vexwim) , ... -- But compound verb and simple verbs use it: hez kirin (ez ê hez bi-kim), lê bigirin (ez ê lê bi-girim), ... if (verbStruct == 'preverbVerb') then return '' end if overrideBi then return overrideBi end -- if irreg.dijrezikBi[stem] then return irreg.dijrezikBi[stem] end -- Modification of the preverbe "bi-" according to the last letter of the stem. if mw.ustring.match(stem, '^[aeêiîouû]') then return 'b' end return 'bi' end getPreverb['di'] = function (opts) opts = opts or {} local stem = opts.stem local overrideDi = opts.overrideDi if overrideDi then return overrideDi end -- if irreg.dijrezikDi[stem] then return irreg.dijrezikDi[stem] end -- Modification of the preverbe "di-" according to the last letter of the stem. if mw.ustring.match(stem, '^[ai]') then return 'd' end -- Ex. hatin : stem = -ê- // ez têm if mw.ustring.match(stem, '^[êî]') then return 't' end return 'di' end end -- ============================================================================= -- RULES FOR NEGATION PREFIXES: "na-" and "ne-" -- There are two negation prefixes: "na-" and "ne-". These preverbs can change -- form depending on the first letters of the verb’s present stem or past stem. -- ============================================================================= local getNegPrefix = {} do getNegPrefix['na'] = function (opts) opts = opts or {} local stem = opts.stem local overrideNa = opts.overrideNa if overrideNa then return '<b>' .. overrideNa .. '</b>' end -- if irreg.dijrezikNa[stem] then return irreg.dijrezikNa[stem] end -- Add sufix "-y" before certain vowels. if mw.ustring.match(stem, '^[eêiîouû]') then return '<b>nay</b>' end -- Elision before stems beginning with "a-" (removal of the final "-e"). if mw.ustring.match(stem, '^a') then return '<b>n</b>' end -- Tîpa duyem "-a-" ye (k-a-rîn, z-a-nîn, ...) if mw.ustring.match(stem, '^%wa') then return '<b>ni</b>' end return '<b>na</b>' end getNegPrefix['ne'] = function (opts) opts = opts or {} local stem = opts.stem local tenseName = opts.tenseName local impNegForm = opts.impNegForm local overrideNe = opts.overrideNe if overrideNe then return '<b>' .. overrideNe .. '</b>' end -- if irreg.dijrezikNe[stem] then return irreg.dijrezikNe[stem] end local negPrefix = 'ne' -- There are two forms of construction of the imperative, -- one with the prefix "me-" and the other with the prefix "ne-". if (tenseName == 'impPresent') then negPrefix = (impNegForm == 2) and 'ne' or 'me' end -- Add sufix "-y" before certain vowels. if mw.ustring.match(stem, '^[eêiîouû]') then return '<b>' .. negPrefix .. 'y</b>' end -- Elision before stems beginning with "a-" (removal of the final "-e"). if mw.ustring.match(stem, '^a') then negPrefix = mw.ustring.sub(negPrefix, 1, -2) return '<b>' .. negPrefix .. '</b>' end return '<b>' .. negPrefix .. '</b>' end end -- ============================================================================= -- Standardization of the PREVERBAL PARTICLE -- The proverbial particle "ê" is placed after the personal pronoun. -- ============================================================================= -- If there are no verbal preparticles, return empty table. function export.getPreverbParticules(preverbParticle, typeStem, isTransitive) if not preverbParticle then return {s1='', s2='', s3='', p1='', p2='', p3=''} end if preverbParticle == 'ê' then local isErgative = isTransitive and (typeStem == 'past') -- When the personal pronoun ends in a vowel, a "y-" is added before "ê". -- If it's ergative, we use oblique pronouns: "min", "te", ... if isErgative then return {s1='ê/dê', s2='yê/dê', s3='yê/dê', p1='yê/dê', p2='yê/dê', p3='ê/dê'} else return {s1='ê/dê', s2='yê/dê', s3='ê/dê', p1='ê/dê', p2='ê/dê', p3='ê/dê'} end end -- If the verbal preparticle is identical for all pronouns, -- we create a table with the same value. local preverbParticles = {} for _, pers in ipairs(export.order) do preverbParticles[pers] = preverbParticle end return preverbParticles end -- ============================================================================= -- RULES FOR CONSTRUCTING EACH VERB TENSE -- This table lists, for each verb tense, what elements are required to form it: -- - Verb conjugation is built by placing either the preverb "bi-" or "di-" before -- the verb stem (past or present), followed by a personal ending. -- - For the negative form, one of the prefixes "na-" or "ne-" is added as well. -- - In some cases, a preverbal particle such as /ê/ or /dê/ is added before -- the conjugated verb as well. -- Not: - The "negPreverb" (preverb (bi-/di-) for negative tenses) parameter has a -- value different from "nil" only for the Imperfect tense ("negPreverb=di"). -- - The parameter "negPrefix=na" is used only for the present indicative. -- -- Preverb "di", used in: "indPresent"(present stem), "indImperfect"(past stem) -- - Bo neyînî: pêşgira "di-" tenê di nav dema "IndImperfect" de tê bikaranîn. -- Preverb "bi", used in: "indFuture"(present stem), "subPresent"(present stem), -- "subImperfect"(past stem) = "condPresent"(past stem) -- - The prefix "bi-" isn't used in negative forms. -- -- Present stem, used in: "indPresent"(di)(na), -- "indFuture"(bi)(ne) = "subPresent"(bi)(ne) -- -- Past stem, used in: "indPreterite"(-)(ne), "indImperfect"(di)(ne), "indPluperfect"(-)(ne), -- "indPerfect"(-)(ne), "indNwPluperfect"(-)(ne), "indFuturePerfect"(-)(ne), -- "subPreterite"(-)(ne), -- "subImperfect"(bi)(ne) = "condPresent"(bi)(ne), -- "subPluperfect"(-)(ne) = "condPreterite"(-)(ne) -- ============================================================================= -- Some conjugations are identical except that they differ only in the preverbal particle (/ê/, /dê/). -- So, to avoid repeating the same information (and thus risking errors), -- we establish the common part shared between these verbs. local sharedTenseRules = { indFuture = { stem = "present", preverb = getPreverb['bi'], negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['present'] }, indFuturePerfect = { stem = "past", preverb = nil, negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['ibim'] }, subImperfect = { stem = "past", preverb = getPreverb['bi'], negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['ama'] }, subPluperfect = { stem = "past", preverb = nil, negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['ibûma'] } } local mt = { __index = function(t, k) local commonRules = t._commonRules if commonRules then return commonRules[k] end end } -- TENSES CONJUGATION RULES export.tenseRules = { -- IMPERATIVE MOOD impPresent = setmetatable({ name = "impPresent", nameKu = "raweya fermanî", nameEn = "present imperative", mode = "imperative", _commonRules = sharedTenseRules.indFuture, preverbParticle = nil }, mt), -- INDICATIVE MOOD indPresent = { name = "indPresent", nameKu = "dema niha", nameEn = "present", mode = "indicative", stem = "present", preverb = getPreverb['di'], negPreverb = nil, negPrefix = getNegPrefix['na'], endings = getEndings['present'], preverbParticle = nil }, indPreterite = { name = "indPreterite", nameKu = "raboriya sade", nameEn = "simple past", mode = "indicative", stem = "past", preverb = nil, negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['past'], preverbParticle = nil }, indImperfect = { name = "indImperfect", nameKu = "raboriya berdest", nameEn = "Imperfect", mode = "indicative", stem = "past", preverb = getPreverb['di'], negPreverb = getPreverb['di'], negPrefix = getNegPrefix['ne'], endings = getEndings['past'], preverbParticle = nil }, indPluperfect = { name = "indPluperfect", nameKu = "raboriya dûr", nameEn = "pluperfect", mode = "indicative", stem = "past", preverb = nil, negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['ibûm'], preverbParticle = nil }, indFuture = setmetatable({ name = "indFuture", nameKu = "dema bê", nameEn = "future", mode = "indicative", _commonRules = sharedTenseRules.indFuture, preverbParticle = 'ê' }, mt), indFuturePerfect = setmetatable({ name = "indFuturePerfect", nameKu = "dahatiya pêş", nameEn = "future perfect", mode = "indicative", _commonRules = sharedTenseRules.indFuturePerfect, preverbParticle = 'ê' }, mt), -- In some books, the "perfect" and "nonconfirmative pluperfect" tenses -- are classified in the "inferential mood" ("moda neşahidî"). -- Currently we classify them using the indicative mood (at the end). indPerfect = { name = "indPerfect", nameKu = "raboriya dûdar", nameEn = "perfect", mode = "indicative", stem = "past", preverb = nil, negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['ime'], preverbParticle = nil }, indNwPluperfect = { name = "indNwPluperfect", nameKu = "çîrokiya boriya dûdar", nameEn = "non-witnessed pluperfect", mode = "indicative", stem = "past", preverb = nil, negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['ibûme'], preverbParticle = nil }, -- SUBJUNCTIVE MOOD subjPresent = setmetatable({ name = "subjPresent", nameKu = "dema nihaya xwestekî", nameEn = "present subjunctive", mode = "subjunctive", _commonRules = sharedTenseRules.indFuture, preverbParticle = nil }, mt), subjPreterite = setmetatable({ name = "subjPreterite", nameKu = "dema boriya xwestekî", nameEn = "preterite subjunctive", mode = "subjunctive", _commonRules = sharedTenseRules.indFuturePerfect, preverbParticle = nil, }, mt), subjImperfect = setmetatable({ name = "subjImperfect", nameKu = "raboriya bilaniyê", nameEn = "imperfect subjunctive", mode = "subjunctive", _commonRules = sharedTenseRules.subImperfect, preverbParticle = nil, }, mt), subjPluperfect = setmetatable({ name = "subjPluperfect", nameKu = "raboriya dûr a bilaniyê", nameEn = "pluperfect subjunctive", mode = "subjunctive", _commonRules = sharedTenseRules.subPluperfect, preverbParticle = nil }, mt), -- CONDITIONAL MOOD condPresent = setmetatable({ name = "condPresent", nameKu = "çîrokiya dema nihaya mercî", nameEn = "present conditional", mode = "conditional", _commonRules = sharedTenseRules.subImperfect, preverbParticle = 'ê' }, mt), condPreterite = setmetatable({ name = "condPreterite", nameKu = "dema boriya mercî", nameEn = "preterite conditional", mode = "conditional", _commonRules = sharedTenseRules.subPluperfect, preverbParticle = 'ê' }, mt), } -- ============================================================================= -- MAIN CONJUGATION FUNCTOIN -- This function returns an array containing the conjugation table for a given -- tense as well as other information about the conjugated verb. -- ============================================================================= function export.conjugate(opts) opts = opts or {} -- Required parameters local tense = opts.tense or error("'tense' required", 2) --One of the two parameters is required: -- - If the tense uses the present stem, indicate "presentStem". -- - If it uses the past stem, indicate "pastStem". local presentStem = opts.presentStem local pastStem = opts.pastStem -- Optional parameters local isTransitive = opts.isTransitive or false -- Indicate if the verb is transitive (true/false) local isNegative = opts.isNegative or false -- Indicate if it's the negative form (true/false) local isCompoundVerb = opts.isCompoundVerb or false -- Indicate if it's a compound verb (true/false) local preSimpleVerb = opts.preSimpleVerb or '' -- The part before the simple verb local postSimpleVerb = opts.postSimpleVerb or '' -- The part after the simple verb -- These parameters are provided when the verb is irregular. -- Allows you to manually modify preverbs ("bi-"" or "di-") -- and negation prefixes ("na-" or "ne-") local overrideBi = opts.overrideBi or nil local overrideDi = opts.overrideDi or nil local overrideNa = opts.overrideNa or nil local overrideNe = opts.overrideNe or nil -- By default, the negation of the imperative is constructed from the prefix "me-"". -- To obtain the second variant, the prefix with "ne-", you must specify "impNegForm=2". local impNegForm = opts.impNegForm or nil -- Accent/ Devok local accent = opts.accent or 'std' -- If "tags='na'", remove links/tags local tags = opts.tags or 'erê' -- If addPreverbParticles='na', remove preverb particles (ê/dê) before -- the conjugated verbs. local addPreverbParticles = opts.addPreverbParticles or 'erê' -- We add a space to the left of the "postSimpleVerb" because it shouldn't be attached -- to the simple verb. if (postSimpleVerb ~= '' and postSimpleVerb ~=nil) then postSimpleVerb = ' ' .. postSimpleVerb end -- Access to the classification table and retrieval of verb tense parameters local infoTense = deepCopy(export.tenseRules[tense], 'copy') or false -- We check that this tense is indeed in table "tenseRules". if (not infoTense) then return '<span style="color:red">Unknown tense: ' .. tense ..'</span>' end -- We check that one of the two parameters of the stem is given if (infoTense.stem == 'present' and not presentStem) then return '<span style="color:red">presentStem parameter required</span>' elseif (infoTense.stem == 'past' and not pastStem) then return '<span style="color:red">pasttStem parameter required</span>' end -- Choice between the present stem or past stem local stem = (infoTense.stem == 'present') and presentStem or pastStem --──────────────────────────── -- Conjugation construction -- -- ─────────────────────────── local preverb = '' local negPrefix = '' -- Ruturns the verb type: "simpleVerb" or "preverbVerb" or "compoundVerb" local verbStruct = export.verbStruct(isCompoundVerb, preSimpleVerb) if isNegative then negPrefix = infoTense.negPrefix{stem=stem, tenseName=tense, impNegForm=impNegForm, overrideNa=overrideNa, overrideNe=overrideNe} if infoTense.negPreverb then preverb = infoTense.negPreverb{stem=stem, verbStruct=verbStruct, overrideBi=overrideBi, overrideDi=overrideDi} end else if infoTense.preverb then preverb = infoTense:preverb{stem=stem, verbStruct=verbStruct, overrideBi=overrideBi, overrideDi=overrideDi, accent=accent} end end infoTense.conj = {} local spacing = isCompoundVerb and ' ' or '' local endings = infoTense:endings(stem) -- 'rojhilatî' accent (devok) for present stem if (infoTense.stem == 'present') then if (accent == 'rojhilatî') then endings = endings['rojhilatî'] else endings = endings['std'] end end local preverbParticles = export.getPreverbParticules(infoTense.preverbParticle, infoTense.stem, isTransitive) local isErgative = isTransitive and (infoTense.stem == 'past') -- Creating the conjugation table for a given tense for _, pers in ipairs(export.order) do local ending local conjSimbleVerb local conjVerb if isErgative then ending = endings.s3 else ending = endings[pers] end -- Adding space after the preverbal particle, and -- if "addPreverbParticles='na'": remove preverb particles (ê/dê). local preverbParticle = '' if infoTense.preverbParticle and addPreverbParticles ~= 'na' then preverbParticle = preverbParticles[pers] .. ' ' end conjSimbleVerb = negPrefix .. preverb .. stem .. ending -- Adding prefixe and suffixe conjVerb = preSimpleVerb .. spacing .. conjSimbleVerb .. postSimpleVerb -- Spelling correction(îy -> iy) conjVerb = mw.ustring.gsub(conjVerb, 'îy', 'iy') -- Add a link / if tags='na' no links if tags ~= 'na' then conjVerb = link{term=conjVerb, lang=langKu} end -- Addition of the preverbal particle infoTense.conj[pers] = preverbParticle .. conjVerb end -- Imperative if (infoTense.name == 'impPresent') then infoTense.conj.s1 = nil infoTense.conj.s2 = infoTense.conj.s3 infoTense.conj.s3 = nil infoTense.conj.p1 = nil -- infoTense.conj.p2 = infoTense.conj.p2 infoTense.conj.p3 = nil end return infoTense end -- ============================================================================= -- END -- ============================================================================= -- Some useful tools -- ============================================================================= -- Returns the list of verb tenses export.tensesList = function() local list = {} for _, tense in pairs(export.tenseRules) do table.insert(list, tense.name) end return list end -- Concatenation of pronouns and conjugated verbs -- (for a given conjugate tense in all persons of that tense) function export.concatPronomsVerbs(pronoms, conjVerbs) local concatTab = {} for _, pers in ipairs(export.order) do concatTab[pers] = pronoms[pers] .. ' ' .. conjVerbs[pers] end return concatTab end -- ============================================================================= -- ADDITIONAL STEM OF THE PAST AND PRESENT (pastStem2, ... and presentStem2, ...) -- This function does nothing more than add additional parameters for verb stems -- in the past and present tenses. -- Conjugations for the different stems will be separated by "/" -- ============================================================================= function export.conjugateLong(baseOpts, tense, presentStems, pastStems) local opts = baseOpts or {} opts.tense = tense or nil presentStems = presentStems or {} pastStems = pastStems or {} local infoTense = deepCopy(export.tenseRules[tense], 'copy') or false -- We check that this tense is indeed in table "tenseRules". if not infoTense then return '<span style="color:red">Unknown tense: ' .. tense ..'</span>' end local stems = (infoTense.stem == 'present') and presentStems or pastStems -- For each verb stem, its conjugation table is calculated and stored in conjTabs. local conjTabs = {} for i = 1, #stems do if stems[i] then if (infoTense.stem == 'past') then opts.pastStem = stems[i] end if (infoTense.stem == 'present') then opts.presentStem = stems[i] end local conj = export.conjugate(opts).conj table.insert(conjTabs, conj) end end -- We concatenate each row of the conjugation tables. local concatConjTabs = {} for _, pers in ipairs(export.order) do local frag = {} for i = 1, #conjTabs do local val = conjTabs[i][pers] if val then table.insert(frag, tostring(val)) end end concatConjTabs[pers] = table.concat(frag, " / ") end infoTense.conj = concatConjTabs return infoTense end -- ==================================================================================== -- VERB CONUGATION IN ALL TENSES WITH OR WITHOUT PRONOUMS -- ==================================================================================== function export.conjugateAllTenses(baseOpts, presentStems, pastStems, negation, concatPrs) -- "concatPrs=false" table without pronouns local opts = baseOpts or {} if negation == 'negative' then opts.isNegative = true end -- Concatenation of pronouns and conjugated verbs local concatPronomsVerbs = export.concatPronomsVerbs -- Tenses list local tensesList = export.tensesList() -- Conjugation in all tenses local conjTab = {} for _, tense in ipairs(tensesList) do local infoTense = deepCopy(export.tenseRules[tense], 'copy') -- We create the conjugation table without the pronouns. conjTab[tense] = deepCopy(export.conjugateLong(opts, tense, presentStems, pastStems), 'copy') -- We concatenate the pronouns and the verbs if "concatPrs" is different of "false" -- No pronouns for the imperative mood if (tense ~= 'impPresent' and concatPrs ~= false) then local pronoms = deepCopy(export.conjPronouns(infoTense.stem, infoTense.mode, opts.isTransitive)) conjTab[tense].conj = concatPronomsVerbs(pronoms, conjTab[tense].conj) end end return conjTab end -- ==================================================================================== -- Allows you to obtain a given conjugation from a model. -- Ex. {{#invoke:ku-tewandin|tew|dem=indPresent|kes=s1}} -- See {{ku-tewîn-lk-niha}} -- ==================================================================================== function export.tew(frame) local args = frame:getParent().args local baseOpts = { isNegative = frame.args['neyînî'] or false, isTransitive = args['form'], isCompoundVerb = args['valahî'] or false, preSimpleVerb = args['pêşgir'] or nil, postSimpleVerb = args['paşgir'] or nil, accent = args['devok'] or 'std', tags = args['lînk'] or 'erê', overrideBi = args['bi'] or nil, overrideDi = args['di'] or nil, overrideNa = args['na'] or nil, overrideNe = args['ne'] or nil, impNegForm = nil } local tense = frame.args['dem'] or nil local pers = frame.args['kes'] or nil local presentStems = {args['niha'], args['niha2'], args['niha3']} local pastStems = {args['borî'], args['borî2'], args['borî3']} -- A few checks if (baseOpts.isTransitive == 'gerguhêz') then baseOpts.isTransitive = true elseif (baseOpts.isTransitive == 'negerguhêz') then baseOpts.isTransitive = false else return '<span style="color:red">form = gerguhêz / negerguhêz</span>' end if (baseOpts.isCompoundVerb == 'erê') then baseOpts.isCompoundVerb = true else baseOpts.isCompoundVerb = false end if (baseOpts.isNegative == 'erê') then baseOpts.isNegative = true end local tabConj = export.conjugateLong(baseOpts, tense, presentStems, pastStems).conj return tabConj[pers] end -- ==================================================================================== -- GET COMMMA SEPARED FORMS -- Bnr. [[MediaWiki:Gadget-QQ.js]] -- Ex. {{#invoke:ku-tewandin|get_comma_separated_forms|niha=kev|borî=ket}} -- ==================================================================================== function export.get_comma_separated_forms(frame) local opts = { presentStem = frame.args['niha'], pastStem = frame.args['borî'], isTransitive = false, isNegative = false, isCompoundVerb = frame['valahî'] or false, preSimpleVerb = frame['pêşgir'] or '', postSimpleVerb = frame['paşgir'] or '', overrideBi = frame['bi'] or nil, overrideDi = frame['di'] or nil, overrideNa = frame['na'] or nil, overrideNe = frame['ne'] or nil, impNegForm = nil, tags = 'na', -- Remove links/tags addPreverbParticles = 'na' -- Remove preverb particles (ê/dê) } local function concateList(tenseList) local concatList = {} for _, pers in ipairs({"s1", "s2", "s3", "p1"}) do local tense = tenseList[pers] table.insert(concatList, tense) end return table.concat(concatList, ",") end local tenseList = {'indPresent','indPreterite','indImperfect', 'indPluperfect','indPerfect','indNwPluperfect', 'indFuture','indFuturePerfect', 'subjImperfect','subjPluperfect' } local concatAllTense = {} for i = 1, #tenseList do local tense = tenseList[i] if export.tenseRules[tense] then opts.tense = tense local conj = shallowCopy(export.conjugate(opts).conj) local concatTense = concateList(conj) table.insert(concatAllTense, concatTense) end end return table.concat(concatAllTense, ",") end return export 97yzfd94xkc575fnt6vz5oty9kv2oj7 6237284 6237283 2026-06-08T03:43:58Z Ghybu 1393 6237284 Scribunto text/plain -- Modula tewandina lêkerên kurmancî local export = {} -- Load irregular forms table -- local irreg = require('Module:ku-tewandin/nestandard') local langKu = require("Modul:languages").getByCode("ku") local link = require('Module:links').language_link local shallowCopy = require("Module:table/shallowCopy") local deepCopy = require("Module:table/deepCopy") -- ============================================================================= -- Pronouns in Kurmanji -- ============================================================================= export.order = {"s1", "s2", "s3", "p1", "p2", "p3"} export.pronouns = { s1 = "ez", p1 = "em", s2 = "tu", p2 = "hûn", s3 = "ew", p3 = "ew" } export.obliquePronouns = { s1 = "min", p1 = "me", s2 = "te", p2 = "we", s3 = "wê/wî", p3 = "wan" } export.agents = { s1 = "te, wî, wê, we, wan", p1 = "te, wî, wê, we, wan", s2 = "min, wî, wê, me, wan", p2 = "min, wî, wê, me, wan", s3 = "min, te, wî, wê, me, we, wan", p3 = "min, te, wî, wê, me, we, wan" } -- Oblique pronoun (green) export.obliquePronounsGreen = { s1 = '<span style="color:green">min</span>', s2 = '<span style="color:green">te</span>', s3 = '<span style="color:green">wê/wî</span>', p1 = '<span style="color:green">me</span>', p2 = '<span style="color:green">we</span>', p3 = '<span style="color:green">wan</span>' } -- ───────────────────────────────────────────────────────────────────────────── -- 1) This function returns correct subject/agent pronoun, ergativity rule: -- - Transitive verbs in past tenses → oblique pronoun (green) = agent -- - All other cases → direct pronoun (no color) = subject -- 2) Also add the subjunctive prefix "(bila)" -- ───────────────────────────────────────────────────────────────────────────── function export.conjPronouns(stemType, mode, isTransitive) local pronouns = shallowCopy(export.pronouns) -- Ergativity in kurdish: transitive verbs that are conjugated with the past tense stem are -- conjugated according to the object, not the subject. -- Therefore, to have an ergative construction, -- the verb must be transitive and its stem must be the stem of the past tense. local isErgative = isTransitive and (stemType == 'past') -- If it's ergative, we use oblique pronouns: "min", "te", ... -- If it's not ergative, we use normal pronouns: "ez", "tu", ... if isErgative then pronouns = shallowCopy(export.obliquePronounsGreen) end -- For the subjunctive mood, we add "(bila)" at the beginning. if mode == 'subjunctive' then local subjPrefix = '<span style="color:gray">(bila)</span>' for _, pers in ipairs(export.order) do pronouns[pers] = subjPrefix .. ' ' .. pronouns[pers] end end return pronouns end -- ============================================================================= -- VERBAL STRUCTURE IN THE INFINITIVE: -- Verbs in the infinitive appear in three main forms: -- 1) Simple verb (indivisible light verb): -- - ex.: "kirin", "çûn", "xwarin", ... -- 2) Verbs with preverbs (preverb + simple verb): -- - ex.: "rakirin" (ra- + kirin), "çêkirin" (çê- + kirin), "vexwarin" (ve- + xwarin), ... -- - Preverb verbs don't use the prefix "bi-" (ez ê rakim , ew ê rake , ...) -- 3) Compound verbs, construction with non-verbal element (the noun is not attached to the verb): -- - Left of the simple verb: "hez kirin" ("hez" + "kirin"), "li dar xistin" ("li dar" + "xistin"), ... -- - Right of the simple verb: "kirin der" ("kirin" + "der"), "girtin ser xwe" ("girtin" + "ser xwe"), ... -- - Compound verbs use the prefix "bi-" (ez ê hez bi-kim , ew ê hez bi-ke ) -- STRUCTURE: preSimpleVerb + spacing + simpleVerb + postSimpleVerb -- EX. kirin: preSimpleVerb=''; spacing=false; simpleVerb='kirin'; postSimpleVerb='' -- rakirin: preSimpleVerb='ra'; spacing=false; simpleVerb='kirin'; postSimpleVerb='' -- hez kirin: preSimpleVerb='hez'; spacing=true; simpleVerb='kirin'; postSimpleVerb='' -- pev çûn: preSimpleVerb='pev'; spacing=true; simpleVerb='çûn'; postSimpleVerb='' -- kirin der: preSimpleVerb=''; spacing=false; simpleVerb='kirin'; postSimpleVerb='der' -- WARNING: Conjugation can vary depending on the type of verb. -- For example, in the future tense,the prefix "bi" is used for compound verbs, -- but not for preverbal verbs, see the function that manages it "tenseRules" table. -- This table does not yet support the mixed case: a verb composed of a noun and a preverb verb. -- ============================================================================= function export.verbStruct(isCompoundVerb, preSimpleVerb) local struct if (preSimpleVerb and preSimpleVerb ~= '' and not isCompoundVerb) then struct = 'preverbVerb' elseif isCompoundVerb then struct = 'compoundVerb' else struct = 'simpleVerb' end return struct end -- ================================================================ -- INFLECTIONAL ENDINGS -- Assigns verb inflectional endings (suffixes) to all tenses -- ================================================================ local getEndings = {} do -- ─────────────────────────────────────────────────────────────── -- Ending using present stem -- ─────────────────────────────────────────────────────────────── getEndings['present'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local ends = {} if mw.ustring.match(stem, '[aeêiîouû]$') then ends['std'] = {s1='m', s2='yî', s3='', p1='n', p2='n', p3='n'} ends['rojhilatî'] = {s1='m', s2='(y)', s3='t', p1='yn', p2='n', p3='n'} else ends['std'] = {s1='im', s2='î', s3='e', p1='in', p2='in', p3='in'} ends['rojhilatî'] = {s1='im', s2='î', s3='<u>it</u>/ît', p1='în', p2='in', p3='in'} end return ends end -- ─────────────────────────────────────────────────────────────── -- Ind. preterite + ind. imperfect ending -- ─────────────────────────────────────────────────────────────── getEndings['past'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local ends if mw.ustring.match(stem, '[aeêiouû]$') then ends = {s1='m', s2='yî', s3='', p1='n', p2='n', p3='n'} elseif mw.ustring.match(stem, 'î$') then -- if self.name == 'indImperfect' then -- -- special indicative ind. imperfect rule -- ends = {s1='yam', s2='yayî', s3='ya', p1='yan', p2='yan', p3='yan'} -- end ends = {s1='m', s2='', s3='', p1='n', p2='n', p3='n'} else ends = {s1='im', s2='î', s3='', p1='in', p2='in', p3='in'} end return ends end -- ─────────────────────────────────────────────────────────────── -- Compound endings with auxiliary "bûn" -- Inflectional endings are created by taking the different forms of the -- verb "bûn" (with present stem "-b-" and past stem "-bû-") and -- adding an "i-" prefix before them: "i-b-im", "i-bû-m", "i-bû-me", "i-bû-ma". -- This "i-" varies according to the final letter of the verb stem. -- ─────────────────────────────────────────────────────────────── local function normalize_i(stem) local prfx_i = "i" if mw.ustring.match(stem, "ya$") or mw.ustring.match(stem, "[îû]$") then -- cf. karîn (-karî-) prfx_i = "" elseif mw.ustring.match(stem, '[aeêiou]$') then prfx_i = "yi" end return prfx_i end getEndings['ibim'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local prfx_i = normalize_i(stem) return { s1 = prfx_i .. "bim", p1 = prfx_i .. "bin", s2 = prfx_i .. "bî", p2 = prfx_i .. "bin", s3 = prfx_i .. "be", p3 = prfx_i .. "bin" } end getEndings['ibûm'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local prfx_i = normalize_i(stem) return { s1 = prfx_i .. "bûm", p1 = prfx_i .. "bûn", s2 = prfx_i .. "bûyî", p2 = prfx_i .. "bûn", s3 = prfx_i .. "bû", p3 = prfx_i .. "bûn" } end getEndings['ibûme'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local prfx_i = normalize_i(stem) return { s1 = prfx_i .. "bûme", p1 = prfx_i .. "bûne", s2 = prfx_i .. "bûyiye", p2 = prfx_i .. "bûne", s3 = prfx_i .. "bûye", p3 = prfx_i .. "bûne" } end getEndings['ibûma'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local prfx_i = normalize_i(stem) return { s1 = prfx_i .. "bûma", p1 = prfx_i .. "bûna", s2 = prfx_i .. "bûyayî", p2 = prfx_i .. "bûna", s3 = prfx_i .. "bûya", p3 = prfx_i .. "bûna" } end -- ─────────────────────────────────────────────────────────────── -- Ind. perfect ending. -- ─────────────────────────────────────────────────────────────── getEndings['ime'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local ends if mw.ustring.match(stem, '[aeêiîouû]$') then ends = {s1="me", s2="yî", s3="ye", p1="ne", p2="ne", p3="ne"} else ends = {s1="ime", s2="iyî", s3="iye", p1="ine", p2="ine", p3="ine"} end return ends end -- ─────────────────────────────────────────────────────────────── -- Subj. Imperfect ending. -- ─────────────────────────────────────────────────────────────── getEndings['ama'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local ends -- The doublet in "-iyan" of verbs in -"în" (gerîn/-geriya-, kenîn/-keniya-, ...), -- in the conditional and subjunctive moods, a doublet "yaya" appears; it's removed. -- -yayayî → -yayî; -yaya → -ya if mw.ustring.match(stem, '(ya)$') then ends = {s1="ma", s2="yî", s3="", p1="na", p2="na", p3="na"} elseif mw.ustring.match(stem, '[aeêiîouû]$') then ends = {s1="ma", s2="yayî", s3="ya", p1="na", p2="na", p3="na"} else ends = {s1="ama", s2="ayî", s3="a", p1="ana", p2="ana", p3="ana"} end return ends end end -- ============================================================================= -- RULES FOR PREVERBS: "bi-" and "di-" -- There are two preverbs: "bi-" and "di-". These preverbs can change form -- depending on the first letters of the verb’s present stem or past stem. -- ============================================================================= local getPreverb = {} do getPreverb['bi'] = function (self, opts) opts = opts or {} local stem = opts.stem local verbStruct = opts.verbStruct local overrideBi = opts.overrideBi local accent = opts.accent -- Devoka rojhilatî: -- @Ferhengvan: Dema bêt bi lêkera alîkar "ê / dê" û bi rehê lêkerê yê -- dema niha û pêşgirên kesî tê çêkirin. Pêşgira "bi-" li destpêka lêkera -- serekî nîne: - ez ê / dê xw-im (standard: ez ê/dê bi-xw-im). if (self.name == 'indFuture' and accent == 'rojhilatî') then return '' end -- Preverb verbs don't use the preverb "bi-": ra-kirin (ez ê rakim), ve-xwarin (ez ê vexwim) , ... -- But compound verb and simple verbs use it: hez kirin (ez ê hez bi-kim), lê bigirin (ez ê lê bi-girim), ... if (verbStruct == 'preverbVerb') then return '' end if overrideBi then return overrideBi end -- if irreg.dijrezikBi[stem] then return irreg.dijrezikBi[stem] end -- Modification of the preverbe "bi-" according to the last letter of the stem. if mw.ustring.match(stem, '^[aeêiîouû]') then return 'b' end return 'bi' end getPreverb['di'] = function (self, opts) -- self: reserved for future use local _ = self -- delete the warning (unused argument) opts = opts or {} local stem = opts.stem local overrideDi = opts.overrideDi if overrideDi then return overrideDi end -- if irreg.dijrezikDi[stem] then return irreg.dijrezikDi[stem] end -- Modification of the preverbe "di-" according to the last letter of the stem. if mw.ustring.match(stem, '^[ai]') then return 'd' end -- Ex. hatin : stem = -ê- // ez têm if mw.ustring.match(stem, '^[êî]') then return 't' end return 'di' end end -- ============================================================================= -- RULES FOR NEGATION PREFIXES: "na-" and "ne-" -- There are two negation prefixes: "na-" and "ne-". These preverbs can change -- form depending on the first letters of the verb’s present stem or past stem. -- ============================================================================= local getNegPrefix = {} do getNegPrefix['na'] = function (opts) opts = opts or {} local stem = opts.stem local overrideNa = opts.overrideNa if overrideNa then return '<b>' .. overrideNa .. '</b>' end -- if irreg.dijrezikNa[stem] then return irreg.dijrezikNa[stem] end -- Add sufix "-y" before certain vowels. if mw.ustring.match(stem, '^[eêiîouû]') then return '<b>nay</b>' end -- Elision before stems beginning with "a-" (removal of the final "-e"). if mw.ustring.match(stem, '^a') then return '<b>n</b>' end -- Tîpa duyem "-a-" ye (k-a-rîn, z-a-nîn, ...) if mw.ustring.match(stem, '^%wa') then return '<b>ni</b>' end return '<b>na</b>' end getNegPrefix['ne'] = function (opts) opts = opts or {} local stem = opts.stem local tenseName = opts.tenseName local impNegForm = opts.impNegForm local overrideNe = opts.overrideNe if overrideNe then return '<b>' .. overrideNe .. '</b>' end -- if irreg.dijrezikNe[stem] then return irreg.dijrezikNe[stem] end local negPrefix = 'ne' -- There are two forms of construction of the imperative, -- one with the prefix "me-" and the other with the prefix "ne-". if (tenseName == 'impPresent') then negPrefix = (impNegForm == 2) and 'ne' or 'me' end -- Add sufix "-y" before certain vowels. if mw.ustring.match(stem, '^[eêiîouû]') then return '<b>' .. negPrefix .. 'y</b>' end -- Elision before stems beginning with "a-" (removal of the final "-e"). if mw.ustring.match(stem, '^a') then negPrefix = mw.ustring.sub(negPrefix, 1, -2) return '<b>' .. negPrefix .. '</b>' end return '<b>' .. negPrefix .. '</b>' end end -- ============================================================================= -- Standardization of the PREVERBAL PARTICLE -- The proverbial particle "ê" is placed after the personal pronoun. -- ============================================================================= -- If there are no verbal preparticles, return empty table. function export.getPreverbParticules(preverbParticle, typeStem, isTransitive) if not preverbParticle then return {s1='', s2='', s3='', p1='', p2='', p3=''} end if preverbParticle == 'ê' then local isErgative = isTransitive and (typeStem == 'past') -- When the personal pronoun ends in a vowel, a "y-" is added before "ê". -- If it's ergative, we use oblique pronouns: "min", "te", ... if isErgative then return {s1='ê/dê', s2='yê/dê', s3='yê/dê', p1='yê/dê', p2='yê/dê', p3='ê/dê'} else return {s1='ê/dê', s2='yê/dê', s3='ê/dê', p1='ê/dê', p2='ê/dê', p3='ê/dê'} end end -- If the verbal preparticle is identical for all pronouns, -- we create a table with the same value. local preverbParticles = {} for _, pers in ipairs(export.order) do preverbParticles[pers] = preverbParticle end return preverbParticles end -- ============================================================================= -- RULES FOR CONSTRUCTING EACH VERB TENSE -- This table lists, for each verb tense, what elements are required to form it: -- - Verb conjugation is built by placing either the preverb "bi-" or "di-" before -- the verb stem (past or present), followed by a personal ending. -- - For the negative form, one of the prefixes "na-" or "ne-" is added as well. -- - In some cases, a preverbal particle such as /ê/ or /dê/ is added before -- the conjugated verb as well. -- Not: - The "negPreverb" (preverb (bi-/di-) for negative tenses) parameter has a -- value different from "nil" only for the Imperfect tense ("negPreverb=di"). -- - The parameter "negPrefix=na" is used only for the present indicative. -- -- Preverb "di", used in: "indPresent"(present stem), "indImperfect"(past stem) -- - Bo neyînî: pêşgira "di-" tenê di nav dema "IndImperfect" de tê bikaranîn. -- Preverb "bi", used in: "indFuture"(present stem), "subPresent"(present stem), -- "subImperfect"(past stem) = "condPresent"(past stem) -- - The prefix "bi-" isn't used in negative forms. -- -- Present stem, used in: "indPresent"(di)(na), -- "indFuture"(bi)(ne) = "subPresent"(bi)(ne) -- -- Past stem, used in: "indPreterite"(-)(ne), "indImperfect"(di)(ne), "indPluperfect"(-)(ne), -- "indPerfect"(-)(ne), "indNwPluperfect"(-)(ne), "indFuturePerfect"(-)(ne), -- "subPreterite"(-)(ne), -- "subImperfect"(bi)(ne) = "condPresent"(bi)(ne), -- "subPluperfect"(-)(ne) = "condPreterite"(-)(ne) -- ============================================================================= -- Some conjugations are identical except that they differ only in the preverbal particle (/ê/, /dê/). -- So, to avoid repeating the same information (and thus risking errors), -- we establish the common part shared between these verbs. local sharedTenseRules = { indFuture = { stem = "present", preverb = getPreverb['bi'], negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['present'] }, indFuturePerfect = { stem = "past", preverb = nil, negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['ibim'] }, subImperfect = { stem = "past", preverb = getPreverb['bi'], negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['ama'] }, subPluperfect = { stem = "past", preverb = nil, negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['ibûma'] } } local mt = { __index = function(t, k) local commonRules = t._commonRules if commonRules then return commonRules[k] end end } -- TENSES CONJUGATION RULES export.tenseRules = { -- IMPERATIVE MOOD impPresent = setmetatable({ name = "impPresent", nameKu = "raweya fermanî", nameEn = "present imperative", mode = "imperative", _commonRules = sharedTenseRules.indFuture, preverbParticle = nil }, mt), -- INDICATIVE MOOD indPresent = { name = "indPresent", nameKu = "dema niha", nameEn = "present", mode = "indicative", stem = "present", preverb = getPreverb['di'], negPreverb = nil, negPrefix = getNegPrefix['na'], endings = getEndings['present'], preverbParticle = nil }, indPreterite = { name = "indPreterite", nameKu = "raboriya sade", nameEn = "simple past", mode = "indicative", stem = "past", preverb = nil, negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['past'], preverbParticle = nil }, indImperfect = { name = "indImperfect", nameKu = "raboriya berdest", nameEn = "Imperfect", mode = "indicative", stem = "past", preverb = getPreverb['di'], negPreverb = getPreverb['di'], negPrefix = getNegPrefix['ne'], endings = getEndings['past'], preverbParticle = nil }, indPluperfect = { name = "indPluperfect", nameKu = "raboriya dûr", nameEn = "pluperfect", mode = "indicative", stem = "past", preverb = nil, negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['ibûm'], preverbParticle = nil }, indFuture = setmetatable({ name = "indFuture", nameKu = "dema bê", nameEn = "future", mode = "indicative", _commonRules = sharedTenseRules.indFuture, preverbParticle = 'ê' }, mt), indFuturePerfect = setmetatable({ name = "indFuturePerfect", nameKu = "dahatiya pêş", nameEn = "future perfect", mode = "indicative", _commonRules = sharedTenseRules.indFuturePerfect, preverbParticle = 'ê' }, mt), -- In some books, the "perfect" and "nonconfirmative pluperfect" tenses -- are classified in the "inferential mood" ("moda neşahidî"). -- Currently we classify them using the indicative mood (at the end). indPerfect = { name = "indPerfect", nameKu = "raboriya dûdar", nameEn = "perfect", mode = "indicative", stem = "past", preverb = nil, negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['ime'], preverbParticle = nil }, indNwPluperfect = { name = "indNwPluperfect", nameKu = "çîrokiya boriya dûdar", nameEn = "non-witnessed pluperfect", mode = "indicative", stem = "past", preverb = nil, negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['ibûme'], preverbParticle = nil }, -- SUBJUNCTIVE MOOD subjPresent = setmetatable({ name = "subjPresent", nameKu = "dema nihaya xwestekî", nameEn = "present subjunctive", mode = "subjunctive", _commonRules = sharedTenseRules.indFuture, preverbParticle = nil }, mt), subjPreterite = setmetatable({ name = "subjPreterite", nameKu = "dema boriya xwestekî", nameEn = "preterite subjunctive", mode = "subjunctive", _commonRules = sharedTenseRules.indFuturePerfect, preverbParticle = nil, }, mt), subjImperfect = setmetatable({ name = "subjImperfect", nameKu = "raboriya bilaniyê", nameEn = "imperfect subjunctive", mode = "subjunctive", _commonRules = sharedTenseRules.subImperfect, preverbParticle = nil, }, mt), subjPluperfect = setmetatable({ name = "subjPluperfect", nameKu = "raboriya dûr a bilaniyê", nameEn = "pluperfect subjunctive", mode = "subjunctive", _commonRules = sharedTenseRules.subPluperfect, preverbParticle = nil }, mt), -- CONDITIONAL MOOD condPresent = setmetatable({ name = "condPresent", nameKu = "çîrokiya dema nihaya mercî", nameEn = "present conditional", mode = "conditional", _commonRules = sharedTenseRules.subImperfect, preverbParticle = 'ê' }, mt), condPreterite = setmetatable({ name = "condPreterite", nameKu = "dema boriya mercî", nameEn = "preterite conditional", mode = "conditional", _commonRules = sharedTenseRules.subPluperfect, preverbParticle = 'ê' }, mt), } -- ============================================================================= -- MAIN CONJUGATION FUNCTOIN -- This function returns an array containing the conjugation table for a given -- tense as well as other information about the conjugated verb. -- ============================================================================= function export.conjugate(opts) opts = opts or {} -- Required parameters local tense = opts.tense or error("'tense' required", 2) --One of the two parameters is required: -- - If the tense uses the present stem, indicate "presentStem". -- - If it uses the past stem, indicate "pastStem". local presentStem = opts.presentStem local pastStem = opts.pastStem -- Optional parameters local isTransitive = opts.isTransitive or false -- Indicate if the verb is transitive (true/false) local isNegative = opts.isNegative or false -- Indicate if it's the negative form (true/false) local isCompoundVerb = opts.isCompoundVerb or false -- Indicate if it's a compound verb (true/false) local preSimpleVerb = opts.preSimpleVerb or '' -- The part before the simple verb local postSimpleVerb = opts.postSimpleVerb or '' -- The part after the simple verb -- These parameters are provided when the verb is irregular. -- Allows you to manually modify preverbs ("bi-"" or "di-") -- and negation prefixes ("na-" or "ne-") local overrideBi = opts.overrideBi or nil local overrideDi = opts.overrideDi or nil local overrideNa = opts.overrideNa or nil local overrideNe = opts.overrideNe or nil -- By default, the negation of the imperative is constructed from the prefix "me-"". -- To obtain the second variant, the prefix with "ne-", you must specify "impNegForm=2". local impNegForm = opts.impNegForm or nil -- Accent/ Devok local accent = opts.accent or 'std' -- If "tags='na'", remove links/tags local tags = opts.tags or 'erê' -- If addPreverbParticles='na', remove preverb particles (ê/dê) before -- the conjugated verbs. local addPreverbParticles = opts.addPreverbParticles or 'erê' -- We add a space to the left of the "postSimpleVerb" because it shouldn't be attached -- to the simple verb. if (postSimpleVerb ~= '' and postSimpleVerb ~=nil) then postSimpleVerb = ' ' .. postSimpleVerb end -- Access to the classification table and retrieval of verb tense parameters local infoTense = deepCopy(export.tenseRules[tense], 'copy') or false -- We check that this tense is indeed in table "tenseRules". if (not infoTense) then return '<span style="color:red">Unknown tense: ' .. tense ..'</span>' end -- We check that one of the two parameters of the stem is given if (infoTense.stem == 'present' and not presentStem) then return '<span style="color:red">presentStem parameter required</span>' elseif (infoTense.stem == 'past' and not pastStem) then return '<span style="color:red">pasttStem parameter required</span>' end -- Choice between the present stem or past stem local stem = (infoTense.stem == 'present') and presentStem or pastStem --──────────────────────────── -- Conjugation construction -- -- ─────────────────────────── local preverb = '' local negPrefix = '' -- Ruturns the verb type: "simpleVerb" or "preverbVerb" or "compoundVerb" local verbStruct = export.verbStruct(isCompoundVerb, preSimpleVerb) if isNegative then negPrefix = infoTense.negPrefix{stem=stem, tenseName=tense, impNegForm=impNegForm, overrideNa=overrideNa, overrideNe=overrideNe} if infoTense.negPreverb then preverb = infoTense.negPreverb{stem=stem, verbStruct=verbStruct, overrideBi=overrideBi, overrideDi=overrideDi} end else if infoTense.preverb then preverb = infoTense:preverb{stem=stem, verbStruct=verbStruct, overrideBi=overrideBi, overrideDi=overrideDi, accent=accent} end end infoTense.conj = {} local spacing = isCompoundVerb and ' ' or '' local endings = infoTense:endings(stem) -- 'rojhilatî' accent (devok) for present stem if (infoTense.stem == 'present') then if (accent == 'rojhilatî') then endings = endings['rojhilatî'] else endings = endings['std'] end end local preverbParticles = export.getPreverbParticules(infoTense.preverbParticle, infoTense.stem, isTransitive) local isErgative = isTransitive and (infoTense.stem == 'past') -- Creating the conjugation table for a given tense for _, pers in ipairs(export.order) do local ending local conjSimbleVerb local conjVerb if isErgative then ending = endings.s3 else ending = endings[pers] end -- Adding space after the preverbal particle, and -- if "addPreverbParticles='na'": remove preverb particles (ê/dê). local preverbParticle = '' if infoTense.preverbParticle and addPreverbParticles ~= 'na' then preverbParticle = preverbParticles[pers] .. ' ' end conjSimbleVerb = negPrefix .. preverb .. stem .. ending -- Adding prefixe and suffixe conjVerb = preSimpleVerb .. spacing .. conjSimbleVerb .. postSimpleVerb -- Spelling correction(îy -> iy) conjVerb = mw.ustring.gsub(conjVerb, 'îy', 'iy') -- Add a link / if tags='na' no links if tags ~= 'na' then conjVerb = link{term=conjVerb, lang=langKu} end -- Addition of the preverbal particle infoTense.conj[pers] = preverbParticle .. conjVerb end -- Imperative if (infoTense.name == 'impPresent') then infoTense.conj.s1 = nil infoTense.conj.s2 = infoTense.conj.s3 infoTense.conj.s3 = nil infoTense.conj.p1 = nil -- infoTense.conj.p2 = infoTense.conj.p2 infoTense.conj.p3 = nil end return infoTense end -- ============================================================================= -- END -- ============================================================================= -- Some useful tools -- ============================================================================= -- Returns the list of verb tenses export.tensesList = function() local list = {} for _, tense in pairs(export.tenseRules) do table.insert(list, tense.name) end return list end -- Concatenation of pronouns and conjugated verbs -- (for a given conjugate tense in all persons of that tense) function export.concatPronomsVerbs(pronoms, conjVerbs) local concatTab = {} for _, pers in ipairs(export.order) do concatTab[pers] = pronoms[pers] .. ' ' .. conjVerbs[pers] end return concatTab end -- ============================================================================= -- ADDITIONAL STEM OF THE PAST AND PRESENT (pastStem2, ... and presentStem2, ...) -- This function does nothing more than add additional parameters for verb stems -- in the past and present tenses. -- Conjugations for the different stems will be separated by "/" -- ============================================================================= function export.conjugateLong(baseOpts, tense, presentStems, pastStems) local opts = baseOpts or {} opts.tense = tense or nil presentStems = presentStems or {} pastStems = pastStems or {} local infoTense = deepCopy(export.tenseRules[tense], 'copy') or false -- We check that this tense is indeed in table "tenseRules". if not infoTense then return '<span style="color:red">Unknown tense: ' .. tense ..'</span>' end local stems = (infoTense.stem == 'present') and presentStems or pastStems -- For each verb stem, its conjugation table is calculated and stored in conjTabs. local conjTabs = {} for i = 1, #stems do if stems[i] then if (infoTense.stem == 'past') then opts.pastStem = stems[i] end if (infoTense.stem == 'present') then opts.presentStem = stems[i] end local conj = export.conjugate(opts).conj table.insert(conjTabs, conj) end end -- We concatenate each row of the conjugation tables. local concatConjTabs = {} for _, pers in ipairs(export.order) do local frag = {} for i = 1, #conjTabs do local val = conjTabs[i][pers] if val then table.insert(frag, tostring(val)) end end concatConjTabs[pers] = table.concat(frag, " / ") end infoTense.conj = concatConjTabs return infoTense end -- ==================================================================================== -- VERB CONUGATION IN ALL TENSES WITH OR WITHOUT PRONOUMS -- ==================================================================================== function export.conjugateAllTenses(baseOpts, presentStems, pastStems, negation, concatPrs) -- "concatPrs=false" table without pronouns local opts = baseOpts or {} if negation == 'negative' then opts.isNegative = true end -- Concatenation of pronouns and conjugated verbs local concatPronomsVerbs = export.concatPronomsVerbs -- Tenses list local tensesList = export.tensesList() -- Conjugation in all tenses local conjTab = {} for _, tense in ipairs(tensesList) do local infoTense = deepCopy(export.tenseRules[tense], 'copy') -- We create the conjugation table without the pronouns. conjTab[tense] = deepCopy(export.conjugateLong(opts, tense, presentStems, pastStems), 'copy') -- We concatenate the pronouns and the verbs if "concatPrs" is different of "false" -- No pronouns for the imperative mood if (tense ~= 'impPresent' and concatPrs ~= false) then local pronoms = deepCopy(export.conjPronouns(infoTense.stem, infoTense.mode, opts.isTransitive)) conjTab[tense].conj = concatPronomsVerbs(pronoms, conjTab[tense].conj) end end return conjTab end -- ==================================================================================== -- Allows you to obtain a given conjugation from a model. -- Ex. {{#invoke:ku-tewandin|tew|dem=indPresent|kes=s1}} -- See {{ku-tewîn-lk-niha}} -- ==================================================================================== function export.tew(frame) local args = frame:getParent().args local baseOpts = { isNegative = frame.args['neyînî'] or false, isTransitive = args['form'], isCompoundVerb = args['valahî'] or false, preSimpleVerb = args['pêşgir'] or nil, postSimpleVerb = args['paşgir'] or nil, accent = args['devok'] or 'std', tags = args['lînk'] or 'erê', overrideBi = args['bi'] or nil, overrideDi = args['di'] or nil, overrideNa = args['na'] or nil, overrideNe = args['ne'] or nil, impNegForm = nil } local tense = frame.args['dem'] or nil local pers = frame.args['kes'] or nil local presentStems = {args['niha'], args['niha2'], args['niha3']} local pastStems = {args['borî'], args['borî2'], args['borî3']} -- A few checks if (baseOpts.isTransitive == 'gerguhêz') then baseOpts.isTransitive = true elseif (baseOpts.isTransitive == 'negerguhêz') then baseOpts.isTransitive = false else return '<span style="color:red">form = gerguhêz / negerguhêz</span>' end if (baseOpts.isCompoundVerb == 'erê') then baseOpts.isCompoundVerb = true else baseOpts.isCompoundVerb = false end if (baseOpts.isNegative == 'erê') then baseOpts.isNegative = true end local tabConj = export.conjugateLong(baseOpts, tense, presentStems, pastStems).conj return tabConj[pers] end -- ==================================================================================== -- GET COMMMA SEPARED FORMS -- Bnr. [[MediaWiki:Gadget-QQ.js]] -- Ex. {{#invoke:ku-tewandin|get_comma_separated_forms|niha=kev|borî=ket}} -- ==================================================================================== function export.get_comma_separated_forms(frame) local opts = { presentStem = frame.args['niha'], pastStem = frame.args['borî'], isTransitive = false, isNegative = false, isCompoundVerb = frame['valahî'] or false, preSimpleVerb = frame['pêşgir'] or '', postSimpleVerb = frame['paşgir'] or '', overrideBi = frame['bi'] or nil, overrideDi = frame['di'] or nil, overrideNa = frame['na'] or nil, overrideNe = frame['ne'] or nil, impNegForm = nil, tags = 'na', -- Remove links/tags addPreverbParticles = 'na' -- Remove preverb particles (ê/dê) } local function concateList(tenseList) local concatList = {} for _, pers in ipairs({"s1", "s2", "s3", "p1"}) do local tense = tenseList[pers] table.insert(concatList, tense) end return table.concat(concatList, ",") end local tenseList = {'indPresent','indPreterite','indImperfect', 'indPluperfect','indPerfect','indNwPluperfect', 'indFuture','indFuturePerfect', 'subjImperfect','subjPluperfect' } local concatAllTense = {} for i = 1, #tenseList do local tense = tenseList[i] if export.tenseRules[tense] then opts.tense = tense local conj = shallowCopy(export.conjugate(opts).conj) local concatTense = concateList(conj) table.insert(concatAllTense, concatTense) end end return table.concat(concatAllTense, ",") end return export trs1pn9705709s1lzoifj8x4oy6vuvh 6237285 6237284 2026-06-08T04:23:39Z Ghybu 1393 6237285 Scribunto text/plain -- Modula tewandina lêkerên kurmancî local export = {} -- Load irregular forms table -- local irreg = require('Module:ku-tewandin/nestandard') local langKu = require("Modul:languages").getByCode("ku") local link = require('Module:links').language_link local shallowCopy = require("Module:table/shallowCopy") local deepCopy = require("Module:table/deepCopy") -- ============================================================================= -- Pronouns in Kurmanji -- ============================================================================= export.order = {"s1", "s2", "s3", "p1", "p2", "p3"} export.pronouns = { s1 = "ez", p1 = "em", s2 = "tu", p2 = "hûn", s3 = "ew", p3 = "ew" } export.obliquePronouns = { s1 = "min", p1 = "me", s2 = "te", p2 = "we", s3 = "wê/wî", p3 = "wan" } export.agents = { s1 = "te, wî, wê, we, wan", p1 = "te, wî, wê, we, wan", s2 = "min, wî, wê, me, wan", p2 = "min, wî, wê, me, wan", s3 = "min, te, wî, wê, me, we, wan", p3 = "min, te, wî, wê, me, we, wan" } -- Oblique pronoun (green) export.obliquePronounsGreen = { s1 = '<span style="color:green">min</span>', s2 = '<span style="color:green">te</span>', s3 = '<span style="color:green">wê/wî</span>', p1 = '<span style="color:green">me</span>', p2 = '<span style="color:green">we</span>', p3 = '<span style="color:green">wan</span>' } -- ───────────────────────────────────────────────────────────────────────────── -- 1) This function returns correct subject/agent pronoun, ergativity rule: -- - Transitive verbs in past tenses → oblique pronoun (green) = agent -- - All other cases → direct pronoun (no color) = subject -- 2) Also add the subjunctive prefix "(bila)" -- ───────────────────────────────────────────────────────────────────────────── function export.conjPronouns(stemType, mode, isTransitive) local pronouns = shallowCopy(export.pronouns) -- Ergativity in kurdish: transitive verbs that are conjugated with the past tense stem are -- conjugated according to the object, not the subject. -- Therefore, to have an ergative construction, -- the verb must be transitive and its stem must be the stem of the past tense. local isErgative = isTransitive and (stemType == 'past') -- If it's ergative, we use oblique pronouns: "min", "te", ... -- If it's not ergative, we use normal pronouns: "ez", "tu", ... if isErgative then pronouns = shallowCopy(export.obliquePronounsGreen) end -- For the subjunctive mood, we add "(bila)" at the beginning. if mode == 'subjunctive' then local subjPrefix = '<span style="color:gray">(bila)</span>' for _, pers in ipairs(export.order) do pronouns[pers] = subjPrefix .. ' ' .. pronouns[pers] end end return pronouns end -- ============================================================================= -- VERBAL STRUCTURE IN THE INFINITIVE: -- Verbs in the infinitive appear in three main forms: -- 1) Simple verb (indivisible light verb): -- - ex.: "kirin", "çûn", "xwarin", ... -- 2) Verbs with preverbs (preverb + simple verb): -- - ex.: "rakirin" (ra- + kirin), "çêkirin" (çê- + kirin), "vexwarin" (ve- + xwarin), ... -- - Preverb verbs don't use the prefix "bi-" (ez ê rakim , ew ê rake , ...) -- 3) Compound verbs, construction with non-verbal element (the noun is not attached to the verb): -- - Left of the simple verb: "hez kirin" ("hez" + "kirin"), "li dar xistin" ("li dar" + "xistin"), ... -- - Right of the simple verb: "kirin der" ("kirin" + "der"), "girtin ser xwe" ("girtin" + "ser xwe"), ... -- - Compound verbs use the prefix "bi-" (ez ê hez bi-kim , ew ê hez bi-ke ) -- STRUCTURE: preSimpleVerb + spacing + simpleVerb + postSimpleVerb -- EX. kirin: preSimpleVerb=''; spacing=false; simpleVerb='kirin'; postSimpleVerb='' -- rakirin: preSimpleVerb='ra'; spacing=false; simpleVerb='kirin'; postSimpleVerb='' -- hez kirin: preSimpleVerb='hez'; spacing=true; simpleVerb='kirin'; postSimpleVerb='' -- pev çûn: preSimpleVerb='pev'; spacing=true; simpleVerb='çûn'; postSimpleVerb='' -- kirin der: preSimpleVerb=''; spacing=false; simpleVerb='kirin'; postSimpleVerb='der' -- WARNING: Conjugation can vary depending on the type of verb. -- For example, in the future tense,the prefix "bi" is used for compound verbs, -- but not for preverbal verbs, see the function that manages it "tenseRules" table. -- This table does not yet support the mixed case: a verb composed of a noun and a preverb verb. -- ============================================================================= function export.verbStruct(isCompoundVerb, preSimpleVerb) local struct if (preSimpleVerb and preSimpleVerb ~= '' and not isCompoundVerb) then struct = 'preverbVerb' elseif isCompoundVerb then struct = 'compoundVerb' else struct = 'simpleVerb' end return struct end -- ================================================================ -- INFLECTIONAL ENDINGS -- Assigns verb inflectional endings (suffixes) to all tenses -- ================================================================ local getEndings = {} do -- ─────────────────────────────────────────────────────────────── -- Ending using present stem -- ─────────────────────────────────────────────────────────────── getEndings['present'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local ends = {} if mw.ustring.match(stem, '[aeêiîouû]$') then ends['std'] = {s1='m', s2='yî', s3='', p1='n', p2='n', p3='n'} ends['rojhilatî'] = {s1='m', s2='(y)', s3='t', p1='yn', p2='n', p3='n'} else ends['std'] = {s1='im', s2='î', s3='e', p1='in', p2='in', p3='in'} ends['rojhilatî'] = {s1='im', s2='î', s3='<u>it</u>/ît', p1='în', p2='in', p3='in'} end return ends end -- ─────────────────────────────────────────────────────────────── -- Ind. preterite + ind. imperfect ending -- ─────────────────────────────────────────────────────────────── getEndings['past'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local ends if mw.ustring.match(stem, '[aeêiouû]$') then ends = {s1='m', s2='yî', s3='', p1='n', p2='n', p3='n'} elseif mw.ustring.match(stem, 'î$') then -- if self.name == 'indImperfect' then -- -- special indicative ind. imperfect rule -- ends = {s1='yam', s2='yayî', s3='ya', p1='yan', p2='yan', p3='yan'} -- end ends = {s1='m', s2='', s3='', p1='n', p2='n', p3='n'} else ends = {s1='im', s2='î', s3='', p1='in', p2='in', p3='in'} end return ends end -- ─────────────────────────────────────────────────────────────── -- Compound endings with auxiliary "bûn" -- Inflectional endings are created by taking the different forms of the -- verb "bûn" (with present stem "-b-" and past stem "-bû-") and -- adding an "i-" prefix before them: "i-b-im", "i-bû-m", "i-bû-me", "i-bû-ma". -- This "i-" varies according to the final letter of the verb stem. -- ─────────────────────────────────────────────────────────────── local function normalize_i(stem) local prfx_i = "i" if mw.ustring.match(stem, "ya$") or mw.ustring.match(stem, "[îû]$") then -- cf. karîn (-karî-) prfx_i = "" elseif mw.ustring.match(stem, '[aeêiou]$') then prfx_i = "yi" end return prfx_i end getEndings['ibim'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local prfx_i = normalize_i(stem) return { s1 = prfx_i .. "bim", p1 = prfx_i .. "bin", s2 = prfx_i .. "bî", p2 = prfx_i .. "bin", s3 = prfx_i .. "be", p3 = prfx_i .. "bin" } end getEndings['ibûm'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local prfx_i = normalize_i(stem) return { s1 = prfx_i .. "bûm", p1 = prfx_i .. "bûn", s2 = prfx_i .. "bûyî", p2 = prfx_i .. "bûn", s3 = prfx_i .. "bû", p3 = prfx_i .. "bûn" } end getEndings['ibûme'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local prfx_i = normalize_i(stem) return { s1 = prfx_i .. "bûme", p1 = prfx_i .. "bûne", s2 = prfx_i .. "bûyiye", p2 = prfx_i .. "bûne", s3 = prfx_i .. "bûye", p3 = prfx_i .. "bûne" } end getEndings['ibûma'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local prfx_i = normalize_i(stem) return { s1 = prfx_i .. "bûma", p1 = prfx_i .. "bûna", s2 = prfx_i .. "bûyayî", p2 = prfx_i .. "bûna", s3 = prfx_i .. "bûya", p3 = prfx_i .. "bûna" } end -- ─────────────────────────────────────────────────────────────── -- Ind. perfect ending. -- ─────────────────────────────────────────────────────────────── getEndings['ime'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local ends if mw.ustring.match(stem, '[aeêiîouû]$') then ends = {s1="me", s2="yî", s3="ye", p1="ne", p2="ne", p3="ne"} else ends = {s1="ime", s2="iyî", s3="iye", p1="ine", p2="ine", p3="ine"} end return ends end -- ─────────────────────────────────────────────────────────────── -- Subj. Imperfect ending. -- ─────────────────────────────────────────────────────────────── getEndings['ama'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local ends -- The doublet in "-iyan" of verbs in -"în" (gerîn/-geriya-, kenîn/-keniya-, ...), -- in the conditional and subjunctive moods, a doublet "yaya" appears; it's removed. -- -yayayî → -yayî; -yaya → -ya if mw.ustring.match(stem, '(ya)$') then ends = {s1="ma", s2="yî", s3="", p1="na", p2="na", p3="na"} elseif mw.ustring.match(stem, '[aeêiîouû]$') then ends = {s1="ma", s2="yayî", s3="ya", p1="na", p2="na", p3="na"} else ends = {s1="ama", s2="ayî", s3="a", p1="ana", p2="ana", p3="ana"} end return ends end end -- ============================================================================= -- RULES FOR PREVERBS: "bi-" and "di-" -- There are two preverbs: "bi-" and "di-". These preverbs can change form -- depending on the first letters of the verb’s present stem or past stem. -- ============================================================================= local getPreverb = {} do getPreverb['bi'] = function (self, opts) opts = opts or {} local stem = opts.stem local verbStruct = opts.verbStruct local overrideBi = opts.overrideBi local accent = opts.accent -- Devoka rojhilatî: -- @Ferhengvan: Dema bêt bi lêkera alîkar "ê / dê" û bi rehê lêkerê yê -- dema niha û pêşgirên kesî tê çêkirin. Pêşgira "bi-" li destpêka lêkera -- serekî nîne: - ez ê / dê xw-im (standard: ez ê/dê bi-xw-im). if (self.name == 'indFuture' and accent == 'rojhilatî') then return '' end -- Preverb verbs don't use the preverb "bi-": ra-kirin (ez ê rakim), ve-xwarin (ez ê vexwim) , ... -- But compound verb and simple verbs use it: hez kirin (ez ê hez bi-kim), lê bigirin (ez ê lê bi-girim), ... if (verbStruct == 'preverbVerb') then return '' end if overrideBi then return overrideBi end -- if irreg.dijrezikBi[stem] then return irreg.dijrezikBi[stem] end -- Modification of the preverbe "bi-" according to the last letter of the stem. if mw.ustring.match(stem, '^[aeêiîouû]') then return 'b' end return 'bi' end getPreverb['di'] = function (self, opts) -- self: reserved for future use local _ = self -- delete the warning (unused argument) opts = opts or {} local stem = opts.stem local overrideDi = opts.overrideDi if overrideDi then return overrideDi end -- if irreg.dijrezikDi[stem] then return irreg.dijrezikDi[stem] end -- Modification of the preverbe "di-" according to the last letter of the stem. if mw.ustring.match(stem, '^[ai]') then return 'd' end -- Ex. hatin : stem = -ê- // ez têm if mw.ustring.match(stem, '^[êî]') then return 't' end return 'di' end end -- ============================================================================= -- RULES FOR NEGATION PREFIXES: "na-" and "ne-" -- There are two negation prefixes: "na-" and "ne-". These preverbs can change -- form depending on the first letters of the verb’s present stem or past stem. -- ============================================================================= local getNegPrefix = {} do getNegPrefix['na'] = function (opts) opts = opts or {} local stem = opts.stem local overrideNa = opts.overrideNa if overrideNa then return '<b>' .. overrideNa .. '</b>' end -- if irreg.dijrezikNa[stem] then return irreg.dijrezikNa[stem] end -- Add sufix "-y" before certain vowels. if mw.ustring.match(stem, '^[eêiîouû]') then return '<b>nay</b>' end -- Elision before stems beginning with "a-" (removal of the final "-e"). if mw.ustring.match(stem, '^a') then return '<b>n</b>' end -- Tîpa duyem "-a-" ye (k-a-rîn, z-a-nîn, ...) if mw.ustring.match(stem, '^%wa') then return '<b>ni</b>' end return '<b>na</b>' end getNegPrefix['ne'] = function (opts) opts = opts or {} local stem = opts.stem local tenseName = opts.tenseName local impNegForm = opts.impNegForm local overrideNe = opts.overrideNe if overrideNe then return '<b>' .. overrideNe .. '</b>' end -- if irreg.dijrezikNe[stem] then return irreg.dijrezikNe[stem] end local negPrefix = 'ne' -- There are two forms of construction of the imperative, -- one with the prefix "me-" and the other with the prefix "ne-". if (tenseName == 'impPresent') then negPrefix = (impNegForm == 2) and 'ne' or 'me' end -- Add sufix "-y" before certain vowels. if mw.ustring.match(stem, '^[eêiîouû]') then return '<b>' .. negPrefix .. 'y</b>' end -- Elision before stems beginning with "a-" (removal of the final "-e"). if mw.ustring.match(stem, '^a') then negPrefix = mw.ustring.sub(negPrefix, 1, -2) return '<b>' .. negPrefix .. '</b>' end return '<b>' .. negPrefix .. '</b>' end end -- ============================================================================= -- Standardization of the PREVERBAL PARTICLE -- The proverbial particle "ê" is placed after the personal pronoun. -- ============================================================================= -- If there are no verbal preparticles, return empty table. function export.getPreverbParticules(preverbParticle, typeStem, isTransitive) if not preverbParticle then return {s1='', s2='', s3='', p1='', p2='', p3=''} end if preverbParticle == 'ê' then local isErgative = isTransitive and (typeStem == 'past') -- When the personal pronoun ends in a vowel, a "y-" is added before "ê". -- If it's ergative, we use oblique pronouns: "min", "te", ... if isErgative then return {s1='ê/dê', s2='yê/dê', s3='yê/dê', p1='yê/dê', p2='yê/dê', p3='ê/dê'} else return {s1='ê/dê', s2='yê/dê', s3='ê/dê', p1='ê/dê', p2='ê/dê', p3='ê/dê'} end end -- If the verbal preparticle is identical for all pronouns, -- we create a table with the same value. local preverbParticles = {} for _, pers in ipairs(export.order) do preverbParticles[pers] = preverbParticle end return preverbParticles end -- ============================================================================= -- RULES FOR CONSTRUCTING EACH VERB TENSE -- This table lists, for each verb tense, what elements are required to form it: -- - Verb conjugation is built by placing either the preverb "bi-" or "di-" before -- the verb stem (past or present), followed by a personal ending. -- - For the negative form, one of the prefixes "na-" or "ne-" is added as well. -- - In some cases, a preverbal particle such as /ê/ or /dê/ is added before -- the conjugated verb as well. -- Not: - The "negPreverb" (preverb (bi-/di-) for negative tenses) parameter has a -- value different from "nil" only for the Imperfect tense ("negPreverb=di"). -- - The parameter "negPrefix=na" is used only for the present indicative. -- -- Preverb "di", used in: "indPresent"(present stem), "indImperfect"(past stem) -- - Bo neyînî: pêşgira "di-" tenê di nav dema "IndImperfect" de tê bikaranîn. -- Preverb "bi", used in: "indFuture"(present stem), "subPresent"(present stem), -- "subImperfect"(past stem) = "condPresent"(past stem) -- - The prefix "bi-" isn't used in negative forms. -- -- Present stem, used in: "indPresent"(di)(na), -- "indFuture"(bi)(ne) = "subPresent"(bi)(ne) -- -- Past stem, used in: "indPreterite"(-)(ne), "indImperfect"(di)(ne), "indPluperfect"(-)(ne), -- "indPerfect"(-)(ne), "indNwPluperfect"(-)(ne), "indFuturePerfect"(-)(ne), -- "subPreterite"(-)(ne), -- "subImperfect"(bi)(ne) = "condPresent"(bi)(ne), -- "subPluperfect"(-)(ne) = "condPreterite"(-)(ne) -- ============================================================================= -- Some conjugations are identical except that they differ only in the preverbal particle (/ê/, /dê/). -- So, to avoid repeating the same information (and thus risking errors), -- we establish the common part shared between these verbs. local sharedTenseRules = { indFuture = { stem = "present", preverb = getPreverb['bi'], negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['present'] }, indFuturePerfect = { stem = "past", preverb = nil, negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['ibim'] }, subImperfect = { stem = "past", preverb = getPreverb['bi'], negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['ama'] }, subPluperfect = { stem = "past", preverb = nil, negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['ibûma'] } } local mt = { __index = function(t, k) local commonRules = t._commonRules if commonRules then return commonRules[k] end end } -- TENSES CONJUGATION RULES export.tenseRules = { -- IMPERATIVE MOOD impPresent = setmetatable({ name = "impPresent", nameKu = "raweya fermanî", nameEn = "present imperative", mode = "imperative", _commonRules = sharedTenseRules.indFuture, preverbParticle = nil }, mt), -- INDICATIVE MOOD indPresent = { name = "indPresent", nameKu = "dema niha", nameEn = "present", mode = "indicative", stem = "present", preverb = getPreverb['di'], negPreverb = nil, negPrefix = getNegPrefix['na'], endings = getEndings['present'], preverbParticle = nil }, indPreterite = { name = "indPreterite", nameKu = "raboriya sade", nameEn = "simple past", mode = "indicative", stem = "past", preverb = nil, negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['past'], preverbParticle = nil }, indImperfect = { name = "indImperfect", nameKu = "raboriya berdest", nameEn = "Imperfect", mode = "indicative", stem = "past", preverb = getPreverb['di'], negPreverb = getPreverb['di'], negPrefix = getNegPrefix['ne'], endings = getEndings['past'], preverbParticle = nil }, indPluperfect = { name = "indPluperfect", nameKu = "raboriya dûr", nameEn = "pluperfect", mode = "indicative", stem = "past", preverb = nil, negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['ibûm'], preverbParticle = nil }, indFuture = setmetatable({ name = "indFuture", nameKu = "dema bê", nameEn = "future", mode = "indicative", _commonRules = sharedTenseRules.indFuture, preverbParticle = 'ê' }, mt), indFuturePerfect = setmetatable({ name = "indFuturePerfect", nameKu = "dahatiya pêş", nameEn = "future perfect", mode = "indicative", _commonRules = sharedTenseRules.indFuturePerfect, preverbParticle = 'ê' }, mt), -- In some books, the "perfect" and "nonconfirmative pluperfect" tenses -- are classified in the "inferential mood" ("moda neşahidî"). -- Currently we classify them using the indicative mood (at the end). indPerfect = { name = "indPerfect", nameKu = "raboriya dûdar", nameEn = "perfect", mode = "indicative", stem = "past", preverb = nil, negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['ime'], preverbParticle = nil }, indNwPluperfect = { name = "indNwPluperfect", nameKu = "çîrokiya boriya dûdar", nameEn = "non-witnessed pluperfect", mode = "indicative", stem = "past", preverb = nil, negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['ibûme'], preverbParticle = nil }, -- SUBJUNCTIVE MOOD subjPresent = setmetatable({ name = "subjPresent", nameKu = "dema nihaya xwestekî", nameEn = "present subjunctive", mode = "subjunctive", _commonRules = sharedTenseRules.indFuture, preverbParticle = nil }, mt), subjPreterite = setmetatable({ name = "subjPreterite", nameKu = "dema boriya xwestekî", nameEn = "preterite subjunctive", mode = "subjunctive", _commonRules = sharedTenseRules.indFuturePerfect, preverbParticle = nil, }, mt), subjImperfect = setmetatable({ name = "subjImperfect", nameKu = "raboriya bilaniyê", nameEn = "imperfect subjunctive", mode = "subjunctive", _commonRules = sharedTenseRules.subImperfect, preverbParticle = nil, }, mt), subjPluperfect = setmetatable({ name = "subjPluperfect", nameKu = "raboriya dûr a bilaniyê", nameEn = "pluperfect subjunctive", mode = "subjunctive", _commonRules = sharedTenseRules.subPluperfect, preverbParticle = nil }, mt), -- CONDITIONAL MOOD condPresent = setmetatable({ name = "condPresent", nameKu = "çîrokiya dema nihaya mercî", nameEn = "present conditional", mode = "conditional", _commonRules = sharedTenseRules.subImperfect, preverbParticle = 'ê' }, mt), condPreterite = setmetatable({ name = "condPreterite", nameKu = "dema boriya mercî", nameEn = "preterite conditional", mode = "conditional", _commonRules = sharedTenseRules.subPluperfect, preverbParticle = 'ê' }, mt), } -- ============================================================================= -- MAIN CONJUGATION FUNCTOIN -- This function returns an array containing the conjugation table for a given -- tense as well as other information about the conjugated verb. -- ============================================================================= function export.conjugate(opts) opts = opts or {} -- Required parameters local tense = opts.tense or error("'tense' required", 2) --One of the two parameters is required: -- - If the tense uses the present stem, indicate "presentStem". -- - If it uses the past stem, indicate "pastStem". local presentStem = opts.presentStem local pastStem = opts.pastStem -- Optional parameters local isTransitive = opts.isTransitive or false -- Indicate if the verb is transitive (true/false) local isNegative = opts.isNegative or false -- Indicate if it's the negative form (true/false) local isCompoundVerb = opts.isCompoundVerb or false -- Indicate if it's a compound verb (true/false) local preSimpleVerb = opts.preSimpleVerb or '' -- The part before the simple verb local postSimpleVerb = opts.postSimpleVerb or '' -- The part after the simple verb -- These parameters are provided when the verb is irregular. -- Allows you to manually modify preverbs ("bi-"" or "di-") -- and negation prefixes ("na-" or "ne-") local overrideBi = opts.overrideBi or nil local overrideDi = opts.overrideDi or nil local overrideNa = opts.overrideNa or nil local overrideNe = opts.overrideNe or nil -- By default, the negation of the imperative is constructed from the prefix "me-"". -- To obtain the second variant, the prefix with "ne-", you must specify "impNegForm=2". local impNegForm = opts.impNegForm or nil -- Accent/ Devok local accent = opts.accent or 'std' -- If "tags='na'", remove links/tags local tags = opts.tags or 'erê' -- If addPreverbParticles='na', remove preverb particles (ê/dê) before -- the conjugated verbs. local addPreverbParticles = opts.addPreverbParticles or 'erê' -- We add a space to the left of the "postSimpleVerb" because it shouldn't be attached -- to the simple verb. if (postSimpleVerb ~= '' and postSimpleVerb ~=nil) then postSimpleVerb = ' ' .. postSimpleVerb end -- Access to the classification table and retrieval of verb tense parameters local infoTense = deepCopy(export.tenseRules[tense], 'copy') or false -- We check that this tense is indeed in table "tenseRules". if (not infoTense) then return '<span style="color:red">Unknown tense: ' .. tense ..'</span>' end -- We check that one of the two parameters of the stem is given if (infoTense.stem == 'present' and not presentStem) then return '<span style="color:red">presentStem parameter required</span>' elseif (infoTense.stem == 'past' and not pastStem) then return '<span style="color:red">pasttStem parameter required</span>' end -- Choice between the present stem or past stem local stem = (infoTense.stem == 'present') and presentStem or pastStem --──────────────────────────── -- Conjugation construction -- -- ─────────────────────────── local preverb = '' local negPrefix = '' -- Ruturns the verb type: "simpleVerb" or "preverbVerb" or "compoundVerb" local verbStruct = export.verbStruct(isCompoundVerb, preSimpleVerb) if isNegative then negPrefix = infoTense.negPrefix{stem=stem, tenseName=tense, impNegForm=impNegForm, overrideNa=overrideNa, overrideNe=overrideNe} if infoTense.negPreverb then preverb = infoTense:negPreverb{stem=stem, verbStruct=verbStruct, overrideBi=overrideBi, overrideDi=overrideDi} end else if infoTense.preverb then preverb = infoTense:preverb{stem=stem, verbStruct=verbStruct, overrideBi=overrideBi, overrideDi=overrideDi, accent=accent} end end infoTense.conj = {} local spacing = isCompoundVerb and ' ' or '' local endings = infoTense:endings(stem) -- 'rojhilatî' accent (devok) for present stem if (infoTense.stem == 'present') then if (accent == 'rojhilatî') then endings = endings['rojhilatî'] else endings = endings['std'] end end local preverbParticles = export.getPreverbParticules(infoTense.preverbParticle, infoTense.stem, isTransitive) local isErgative = isTransitive and (infoTense.stem == 'past') -- Creating the conjugation table for a given tense for _, pers in ipairs(export.order) do local ending local conjSimbleVerb local conjVerb if isErgative then ending = endings.s3 else ending = endings[pers] end -- Adding space after the preverbal particle, and -- if "addPreverbParticles='na'": remove preverb particles (ê/dê). local preverbParticle = '' if infoTense.preverbParticle and addPreverbParticles ~= 'na' then preverbParticle = preverbParticles[pers] .. ' ' end conjSimbleVerb = negPrefix .. preverb .. stem .. ending -- Adding prefixe and suffixe conjVerb = preSimpleVerb .. spacing .. conjSimbleVerb .. postSimpleVerb -- Spelling correction(îy -> iy) conjVerb = mw.ustring.gsub(conjVerb, 'îy', 'iy') -- Add a link / if tags='na' no links if tags ~= 'na' then conjVerb = link{term=conjVerb, lang=langKu} end -- Addition of the preverbal particle infoTense.conj[pers] = preverbParticle .. conjVerb end -- Imperative if (infoTense.name == 'impPresent') then infoTense.conj.s1 = nil infoTense.conj.s2 = infoTense.conj.s3 infoTense.conj.s3 = nil infoTense.conj.p1 = nil -- infoTense.conj.p2 = infoTense.conj.p2 infoTense.conj.p3 = nil end return infoTense end -- ============================================================================= -- END -- ============================================================================= -- Some useful tools -- ============================================================================= -- Returns the list of verb tenses export.tensesList = function() local list = {} for _, tense in pairs(export.tenseRules) do table.insert(list, tense.name) end return list end -- Concatenation of pronouns and conjugated verbs -- (for a given conjugate tense in all persons of that tense) function export.concatPronomsVerbs(pronoms, conjVerbs) local concatTab = {} for _, pers in ipairs(export.order) do concatTab[pers] = pronoms[pers] .. ' ' .. conjVerbs[pers] end return concatTab end -- ============================================================================= -- ADDITIONAL STEM OF THE PAST AND PRESENT (pastStem2, ... and presentStem2, ...) -- This function does nothing more than add additional parameters for verb stems -- in the past and present tenses. -- Conjugations for the different stems will be separated by "/" -- ============================================================================= function export.conjugateLong(baseOpts, tense, presentStems, pastStems) local opts = baseOpts or {} opts.tense = tense or nil presentStems = presentStems or {} pastStems = pastStems or {} local infoTense = deepCopy(export.tenseRules[tense], 'copy') or false -- We check that this tense is indeed in table "tenseRules". if not infoTense then return '<span style="color:red">Unknown tense: ' .. tense ..'</span>' end local stems = (infoTense.stem == 'present') and presentStems or pastStems -- For each verb stem, its conjugation table is calculated and stored in conjTabs. local conjTabs = {} for i = 1, #stems do if stems[i] then if (infoTense.stem == 'past') then opts.pastStem = stems[i] end if (infoTense.stem == 'present') then opts.presentStem = stems[i] end local conj = export.conjugate(opts).conj table.insert(conjTabs, conj) end end -- We concatenate each row of the conjugation tables. local concatConjTabs = {} for _, pers in ipairs(export.order) do local frag = {} for i = 1, #conjTabs do local val = conjTabs[i][pers] if val then table.insert(frag, tostring(val)) end end concatConjTabs[pers] = table.concat(frag, " / ") end infoTense.conj = concatConjTabs return infoTense end -- ==================================================================================== -- VERB CONUGATION IN ALL TENSES WITH OR WITHOUT PRONOUMS -- ==================================================================================== function export.conjugateAllTenses(baseOpts, presentStems, pastStems, negation, concatPrs) -- "concatPrs=false" table without pronouns local opts = baseOpts or {} if negation == 'negative' then opts.isNegative = true end -- Concatenation of pronouns and conjugated verbs local concatPronomsVerbs = export.concatPronomsVerbs -- Tenses list local tensesList = export.tensesList() -- Conjugation in all tenses local conjTab = {} for _, tense in ipairs(tensesList) do local infoTense = deepCopy(export.tenseRules[tense], 'copy') -- We create the conjugation table without the pronouns. conjTab[tense] = deepCopy(export.conjugateLong(opts, tense, presentStems, pastStems), 'copy') -- We concatenate the pronouns and the verbs if "concatPrs" is different of "false" -- No pronouns for the imperative mood if (tense ~= 'impPresent' and concatPrs ~= false) then local pronoms = deepCopy(export.conjPronouns(infoTense.stem, infoTense.mode, opts.isTransitive)) conjTab[tense].conj = concatPronomsVerbs(pronoms, conjTab[tense].conj) end end return conjTab end -- ==================================================================================== -- Allows you to obtain a given conjugation from a model. -- Ex. {{#invoke:ku-tewandin|tew|dem=indPresent|kes=s1}} -- See {{ku-tewîn-lk-niha}} -- ==================================================================================== function export.tew(frame) local args = frame:getParent().args local baseOpts = { isNegative = frame.args['neyînî'] or false, isTransitive = args['form'], isCompoundVerb = args['valahî'] or false, preSimpleVerb = args['pêşgir'] or nil, postSimpleVerb = args['paşgir'] or nil, accent = args['devok'] or 'std', tags = args['lînk'] or 'erê', overrideBi = args['bi'] or nil, overrideDi = args['di'] or nil, overrideNa = args['na'] or nil, overrideNe = args['ne'] or nil, impNegForm = nil } local tense = frame.args['dem'] or nil local pers = frame.args['kes'] or nil local presentStems = {args['niha'], args['niha2'], args['niha3']} local pastStems = {args['borî'], args['borî2'], args['borî3']} -- A few checks if (baseOpts.isTransitive == 'gerguhêz') then baseOpts.isTransitive = true elseif (baseOpts.isTransitive == 'negerguhêz') then baseOpts.isTransitive = false else return '<span style="color:red">form = gerguhêz / negerguhêz</span>' end if (baseOpts.isCompoundVerb == 'erê') then baseOpts.isCompoundVerb = true else baseOpts.isCompoundVerb = false end if (baseOpts.isNegative == 'erê') then baseOpts.isNegative = true end local tabConj = export.conjugateLong(baseOpts, tense, presentStems, pastStems).conj return tabConj[pers] end -- ==================================================================================== -- GET COMMMA SEPARED FORMS -- Bnr. [[MediaWiki:Gadget-QQ.js]] -- Ex. {{#invoke:ku-tewandin|get_comma_separated_forms|niha=kev|borî=ket}} -- ==================================================================================== function export.get_comma_separated_forms(frame) local opts = { presentStem = frame.args['niha'], pastStem = frame.args['borî'], isTransitive = false, isNegative = false, isCompoundVerb = frame['valahî'] or false, preSimpleVerb = frame['pêşgir'] or '', postSimpleVerb = frame['paşgir'] or '', overrideBi = frame['bi'] or nil, overrideDi = frame['di'] or nil, overrideNa = frame['na'] or nil, overrideNe = frame['ne'] or nil, impNegForm = nil, tags = 'na', -- Remove links/tags addPreverbParticles = 'na' -- Remove preverb particles (ê/dê) } local function concateList(tenseList) local concatList = {} for _, pers in ipairs({"s1", "s2", "s3", "p1"}) do local tense = tenseList[pers] table.insert(concatList, tense) end return table.concat(concatList, ",") end local tenseList = {'indPresent','indPreterite','indImperfect', 'indPluperfect','indPerfect','indNwPluperfect', 'indFuture','indFuturePerfect', 'subjImperfect','subjPluperfect' } local concatAllTense = {} for i = 1, #tenseList do local tense = tenseList[i] if export.tenseRules[tense] then opts.tense = tense local conj = shallowCopy(export.conjugate(opts).conj) local concatTense = concateList(conj) table.insert(concatAllTense, concatTense) end end return table.concat(concatAllTense, ",") end return export 2pjjvwb3sly1uu5y5u14bu61uuxvjfq Modul:ku-tewandin/tablo 828 628615 6237259 6237237 2026-06-07T15:20:13Z Ghybu 1393 + dovok 6237259 Scribunto text/plain local export = {} local conj = require('Modul:ku-tewandin') local lang = mw.getContentLanguage() function export.tablo(frame) local args = frame:getParent().args local baseOpts = { isTransitive = args['form'], isCompoundVerb = args['valahî'] or false, preSimpleVerb = args['pêşgir'] or '', postSimpleVerb = args['paşgir'] or '', accent = args['devok'] or 'std', overrideBi = args['bi'] or nil, overrideDi = args['di'] or nil, overrideNa = args['na'] or nil, overrideNe = args['ne'] or nil, -- impNegForm = 1, -- By default negative form with 'me' (1). -- tags = 'erê', -- addPreverbParticles = 'erê', } local presentStems = {args['niha'], args['niha2'], args['niha3']} local pastStems = {args['borî'], args['borî2'], args['borî3']} if (baseOpts.isTransitive == 'gerguhêz') then baseOpts.isTransitive = true elseif (baseOpts.isTransitive == 'negerguhêz') then baseOpts.isTransitive = false else return '<span style="color:red">form = gerghuhêz / negerguhêz</span>' end if (baseOpts.isCompoundVerb == 'erê') then baseOpts.isCompoundVerb = true else baseOpts.isCompoundVerb = false end -- Conjugation table in all tenses local infoTense = conj.conjugateAllTenses(baseOpts, presentStems, pastStems) -- Negatives conjugations table local negInfoTense = conj.conjugateAllTenses(baseOpts, presentStems, pastStems, 'negative') -- Imperatrive form '2'; negative form with 'ne' baseOpts.impNegForm = 2 local impNegForm2 = conj.conjugateLong(baseOpts, 'impPresent', presentStems, pastStems, 'negative').conj -- Creation of internal conjugation tables for the different tenses local function conjugateTable(tense) local nameKu = lang:ucfirst(infoTense[tense].nameKu) -- Kurdish name local nameEn = lang:ucfirst(infoTense[tense].nameEn) -- English name local idName = infoTense[tense].name -- 'tenseRules' name (indPresent, ...) local classStem = infoTense[tense].stem -- 'present' or 'past' -- First, create the table header. local tabHeader = '\n! colspan="2" id="' .. idName .. '"' .. 'class="' .. classStem .. '-stem tense-table-title" |' .. nameKu .. ' - <small><i>-{'.. nameEn ..'}-</i></small>' .. '\n|-' .. '\n! class="negative" | Erênî' .. '\n! class="positive" | Neyînî' .. '\n|-' -- Create the table body. local tabBody = '' for _, pers in ipairs(conj.order) do tabBody = tabBody .. '\n|' .. infoTense[tense].conj[pers] .. '\n|' .. negInfoTense[tense].conj[pers] .. '\n|-' end -- Create the table (header + body). local tab = '\n{| cellpadding="2" class="tense-table"' .. '\n|-' .. tabHeader .. tabBody .. '\n|}' return tab end --Retrieving some parameters for creating the main table header local verb = args[1] local transitivity = args['form'] local preSimpleVerb = args['pêşgir'] or '' local postSimpleVerb = args['paşgir'] or '' -- Cureyê lêkerê local verbStruc = conj.verbStruct(baseOpts.isCompoundVerb, baseOpts.preSimpleVerb) if (verbStruc == 'preverbVerb') then verbStruc = 'pêkhatî' elseif (verbStruc == 'compoundVerb') then verbStruc = 'hevedudanî' else verbStruc = 'xwerû' end local prsStemsFormat = {} for _, stem in ipairs(presentStems) do if stem then prsStemsFormat[#prsStemsFormat+1] = preSimpleVerb .. '-' .. stem ..'-' end end local pstStemsFormat = {} for _, stem in ipairs(pastStems) do if stem then pstStemsFormat[#pstStemsFormat+1] = preSimpleVerb .. '-' .. stem ..'-' end end local prsStems = table.concat(prsStemsFormat, ' / ') .. postSimpleVerb local pstStems = table.concat(pstStemsFormat, ' / ') .. postSimpleVerb return '{| align="center" class="conj-table"' .. '\n|-' .. '\n| colspan="8" class="title" | Tewandina lêkera [[' .. verb .. ']]<br><span style="font-weight:normal;">(' .. verbStruc .. ', ' .. transitivity .. ')</span>' .. '\n|-' .. '\n! colspan="2" class="present-stem" | Rehê dema niha' .. '\n! colspan="6" style="font-weight:normal; text-align:center; border-bottom:dotted 1px grey;" | ' .. prsStems .. '\n|-' .. '\n! colspan="2" class="past-stem" | Rehê dema borî' .. '\n! colspan="6" style="font-weight:normal; text-align:center;" | ' .. pstStems .. '\n|-' .. '\n|' .. '\n|-' .. '\n| colspan="8" id="imp" class="mood" | Raweya fermanî - <small><i>Imperative</i></small>' .. '\n|-' .. '\n| colspan="8" valign="top" | ' .. '\n{| cellpadding="2" class="tense-table"' .. '\n|-' .. '\n| colspan="2" class="present-stem" style="border-top:1px dotted grey; border-bottom:1px dotted grey"| ' .. '\n|-' .. '\n! class="negative" | Erênî' .. '\n! class="positive" | Neyînî' .. '\n|-' .. '\n| valign="top" | <span style="color:gray">(tû)</span> ' .. infoTense.impPresent.conj.s2 .. '\n| valign="top" | <span style="color:gray">(tû)</span> ' .. negInfoTense.impPresent.conj.s2 .. '<br> <span style="color:gray">(tû)</span> ' .. impNegForm2.s2 .. '\n|-' .. '\n| valign="top" | <span style="color:gray">(hûn)</span> ' .. infoTense.impPresent.conj.p2 .. '\n| valign="top" | <span style="color:gray">(hûn)</span> ' .. negInfoTense.impPresent.conj.p2 .. '<br> <span style="color:gray">(hûn)</span> ' .. impNegForm2.p2 ..'\n|}' .. '\n|-' .. '\n| colspan="8" id="ind" class="mood" | Raweya pêşkerî - <small><i>Indicative</i></small>' .. '\n|-' .. '\n| colspan="4" valign="top" | ' .. conjugateTable('indPresent') .. '\n| colspan="4" valign="top" | ' .. conjugateTable('indPreterite') .. '\n|-' .. '\n| colspan="4" valign="top" | ' .. conjugateTable('indImperfect') .. '\n| colspan="4" valign="top" | ' .. conjugateTable('indPluperfect') .. '\n|-' .. '\n| colspan="4" valign="top" | ' .. conjugateTable('indFuture') .. '\n| colspan="4" valign="top" | ' .. conjugateTable('indFuturePerfect') .. '\n|-' .. '\n| colspan="4" valign="top" | ' .. conjugateTable('indPerfect') .. '\n| colspan="4" valign="top" | ' .. conjugateTable('indNwPluperfect') .. '\n|-' .. '\n| colspan="8" id="subj" class="mood" | Raweya xwestekî - <small><i>Subjunctive</i></small>' .. '\n|-' .. '\n| colspan="4" valign="top" | ' .. conjugateTable('subjPresent') .. '\n| colspan="4" valign="top" | ' .. conjugateTable('subjPreterite') .. '\n|-' .. '\n| colspan="4" valign="top" | ' .. conjugateTable('subjImperfect') .. '\n| colspan="4" valign="top" | ' .. conjugateTable('subjPluperfect') .. '\n|-' .. '\n| colspan="8" id="cond" class="mood" | Raweya mercî - <small><i>Conditional</i></small>' .. '\n|-' .. '\n| colspan="4" valign="top" | ' .. conjugateTable('condPresent') .. '\n| colspan="4" valign="top" | ' .. conjugateTable('condPreterite') .. '\n|}' end return export rgtd35mw9rof4p45pubx8xo38mashn7 Modul:ku-tewandin/nestandard 828 628616 6237279 5156252 2026-06-08T03:19:16Z Ghybu 1393 Ghybuî/ê navê [[Modul:ku-tewandin/dijrêzik]] weke [[Modul:ku-tewandin/nestandard]] guhart 5156252 Scribunto text/plain local p = {} p.dijrezikDi = { [''] = '', ['anî'] = 'di', -- anîn (borî) (d → di) ['axiv'] = 'di', -- axivîn (niha) (d → di) ['axivî'] = 'di', -- axivîn (borî) (d → di) ['afirîn'] = 'di', -- afirîn (niha) (d → di) } p.dijrezikBi = { [''] = '', ['axiv'] = 'bi', -- axivîn (niha) (b → bi) ['axivî'] = 'bi', -- axivîn (bori) (b → bi) ['şêr'] = '', -- veşartin (niha) (bi → '') } p.dijrezikNa = { ['nas'] = 'na', -- nasîn (niha) (ni → na) ['vavêr'] = 'na', -- vavartin (niha) (ni → na) } p.dijrezikNe = { } p.dijrezikImp = { ['ç'] = {'here / biçe', 'herin / biçin', 'nere / neçe', 'nerin /neçin'}, -- çûn ['ê'] = {'were / bê', 'werin / bên', 'neyê', 'neyên'}, -- hatin } return p p3e2yqv6kf5c3pufwgi8oeo5zwmmzii 6237286 6237279 2026-06-08T05:02:07Z Ghybu 1393 6237286 Scribunto text/plain local reh = {} reh['ê'] = { 'hatin', imp = {s2={'were', 'meyê'}, p2={'werin', 'meyên'}} } reh['ç'] = { 'çûn', imp = {s2={'here', 'mere'}, p2={'herin', 'merin'}} } reh['ç'] = { 'çûn', imp = {s2={'here', 'mere'}, p2={'herin', 'merin'}} } reh['anî'] = { 'anîn', di = 'di', -- (d → di) } reh['axiv'] = { 'axivîn', bi = 'bi', -- (b → di) di = 'di', -- (d → di) } reh['axivî'] = { 'axivîn', bi = 'bi', di = 'di', } reh['afirîn'] = { 'afirîn', di = 'di', } reh['şêr'] = { 'veşartin', bi = '', } reh['nas'] = { 'nasîn', na = 'na', -- (ni → na) } reh['vavêr'] = { 'vavartin', na = 'na', -- (ni → na) } return reh 6171olf3ddckpjjfsovk16wqiwti8e9 6237287 6237286 2026-06-08T05:19:13Z Ghybu 1393 6237287 Scribunto text/plain local reh = {} reh['ê'] = { 'hatin', imp = {s2={pos='were', neg={'meyê', 'neyê'}}, p2={pos='werin', neg={'meyên', 'neyên'}} }, } reh['ç'] = { 'çûn', imp = {s2={pos='here', neg={'mere', 'nere'}}, p2={pos='herin', neg={'merin', 'nerin'}} }, } reh['anî'] = { 'anîn', di = 'di', -- (d → di) } reh['axiv'] = { 'axivîn', bi = 'bi', -- (b → di) di = 'di', -- (d → di) } reh['axivî'] = { 'axivîn', bi = 'bi', di = 'di', } reh['afirîn'] = { 'afirîn', di = 'di', } reh['şêr'] = { 'veşartin', bi = '', } reh['nas'] = { 'nasîn', na = 'na', -- (ni → na) } reh['vavêr'] = { 'vavartin', na = 'na', -- (ni → na) } return reh 2j035xh9wecsbndoau91w6cl6psf1w7 Modul:ku-tewandin/belge 828 628617 6237282 6236013 2026-06-08T03:20:41Z Ghybu 1393 6237282 wikitext text/x-wiki * [[Modul:ku-tewandin/ceribandin|../ceribandin]] * [[Modul:ku-tewandin/tablo/ceribandin|../tablo/ceribandin]] Bikaranîn: * {{ş|ku-tewandin}} * {{ş|ku-tewîn-lk}} Bin-modul: * [[Modul:ku-tewandin/tablo|../tablo]] (tabloya mezin) * [[Modul:ku-tewandin/tabloGotar|../tabloGotar]] (tabloya ku di nav gotaran de tê bikaranîn) * <s>[[Modul:ku-tewandin/nestandard|../nestandard]]</s> <small>(nayê bikaranîn)</small> Binêre: {{ku-dem-lîste}} i9355rahdr1b1uho0tmtv831c78w78o Gotûbêja modulê:ku-tewandin 829 628996 6237267 6236094 2026-06-08T00:22:55Z Ghybu 1393 /* Paşgirên lêkeran di kurmanciya rojhilatî de */ beşeke nû 6237267 wikitext text/x-wiki {{arşîvkirin|1= * [[Gotûbêja modulê:ku-tewandin/arşîv 1|Arşîv 1]] }} == Ergatîvî == ; Lêkera ''[[Tewandin:kirin#indPreterite|kirin]]'' (dema borî): {| class="wikitable" |+ {{reng2|green|Biker}} + Berkar {{nobold|(bireser/obje)}} + lêkera tewandî |- ! {{reng2|green|Biker}} \ Berkar !! ez !! tu !! ew/– !! em !! hûn !! ew |- ! {{reng2|green|min}} | <u>xwe</u> kirim || kirî || style="background-color:#FFF9E0"| kir || kirin || kirin || kirin |- ! {{reng2|green|te}} | kirim || <u>xwe</u> kirî || style="background-color:#FFF9E0"| kir || kirin || kirin || kirin |- ! {{reng2|green|wê/wî}} | kirim || kirî || style="background-color:#FFF9E0"| <u>xwe</u>/– kir || kirin || kirin || kirin |- ! {{reng2|green|me}} | kirim || kirî || style="background-color:#FFF9E0"| kir || <u>xwe</u> kirin || kirin || kirin |- ! {{reng2|green|we}} | kirim || kirî || style="background-color:#FFF9E0"| kir || kirin || <u>xwe</u> kirin || kirin |- ! {{reng2|green|wan}} | kirim || kirî || style="background-color:#FFF9E0"| kir || kirin || kirin || <u>xwe</u> kirin |} * <u>Xwandina tabloyê</u> ({{reng2|green|Bik.}} + '''Berk.''' + ''L''): *:stûn1 ('''Berk.'''=ez): {{reng2|green|min}} '''ez''' <u>xwe</u> kirim; {{reng2|green|te}} '''ez''' kirim; {{reng2|green|wê/wî}} '''ez''' kirim; {{reng2|green|me}} '''ez''' kirim; {{reng2|green|we}} '''ez''' kirim; {{reng2|green|hûn}} '''ez''' kirim *:stûn2 ('''Berk.'''=tu): {{reng2|green|min}} '''tu''' kirî; {{reng2|green|te}} '''tu''' <u>xwe</u> kirî; {{reng2|green|wê/wî}} '''tu''' kirî; {{reng2|green|me}} '''tu''' kirî; ... *:stûn3 ('''Berk.'''=ew/–): {{reng2|green|min}} '''(ew)''' kir; {{reng2|green|te}} '''(ew)''' kir; {{reng2|green|wê/wî}} '''(ew <u>xwe</u>)''' kir; {{reng2|green|me}} '''(ew)''' kir; ... *: ... Silav, em tewandinên lêkerên gerguhêz wekî tabloya jor tevlî Tabloya tewandinê ([[Tewandin:kirin]]) bikin? {{ping|Ferhengvan|Bikarhêner|Keyomerd}} [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:21, 11 gulan 2026 (UTC) :Ê min ket serê min. Lê min beşên ko "xwe" dihewînin fam nekir. Divê bo nimûne "min xwe kir" be, an jî "min ez kirim" be lê jixwe tiştekî werê jî tune ye. [[Bikarhêner:Keyomerd|Keyomerd]] ([[Gotûbêja bikarhêner:Keyomerd|gotûbêj]]) 08:36, 12 gulan 2026 (UTC) ::Bi vî awayî? {| cellspacing="0" cellpadding="4" style=" border-collapse:collapse;" align=center |+ {{{ser|}}} |-style="border-bottom:solid 1px grey; border-top:solid 1px grey;" !id="11" colspan="2" bgcolor=#FFFFE0|[[Pêvek:Rastnivîsî/Lêker/Dema niha|Dema niha]] - <small>''Present''</small> !colspan="4" bgcolor=#ececff|[[Pêvek:Rastnivîsî/Lêker/Dema borî ya sade|Raboriya sade]] - <small>''Preterite''</small><br><small>Dema boriya têdeyî</small> |- |bgcolor=#F4F4F4|Erênî |bgcolor=#F4F4F4|Neyînî |bgcolor=#e9e9e9|{{reng2|green|Biker}} |bgcolor=#e9e9e9|{{reng2|blue|Berkar}} |bgcolor=#F4F4F4|Erênî |bgcolor=#F4F4F4|Neyînî |- |ez dikim |ez '''na'''kim |{{reng2|green|te, wî/wê, we, wan}} |{{reng2|blue|ez}} |kirim |'''ne'''kirim |- |tu dikî |tu '''na'''kî |{{reng2|green|min, wî/wê, me, wan}} |{{reng2|blue|tu}} |kirî |'''ne'''kirî |- |ew dike |ew '''na'''ke |{{reng2|green|min, te, wî/wê, me, we, wan}} |{{reng2|blue|ew}} |kir |'''ne'''kir |- |em dikin |em '''na'''kin |{{reng2|green|te, wî/wê, we, wan}} |{{reng2|blue|em}} |kirin |'''ne'''kirin |- |hûn dikin |hûn '''na'''kin |{{reng2|green|min, wî/wê, me, wan}} |{{reng2|blue|hûn}} |kirin |'''ne'''kirin |- |ew dikin |ew '''na'''kin |{{reng2|green|min, te, wî/wê, me, we, wan}} |{{reng2|blue|ew}} |kirin |'''ne'''kirin |} ::--[[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:26, 20 gulan 2026 (UTC) :::{{silav|Bikarhêner}}. Tu dikarî van rûpelan çêkî: :::* [//ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Ghybu/common.js&oldid=6236001] → tevlî [[MediaWiki:Gadget-kuTewandin.js]] bike :::* <code><nowiki>Stûna bikerê (bireser/obje) di [[Şablon:ku-tewandin|tabloya tewandinê]] de berfire dike.</nowiki></code> → [[MediaWiki:Gadget-kuTewandin]] :::* <code><nowiki>* kuTewandin[ResourceLoader|default]|kuTewandin.js</nowiki></code> → tevlî beşa "Rû" ([[MediaWiki:Gadgets-definition#Rû]]) bike. :::* '''Encam''': [[Wîkîferheng:ceribandin]] / herwiha rûyê mobîlê û moda tarî jî hatin guherandin... :::Spas! [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:25, 24 gulan 2026 (UTC) ::::Çêbû? -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 09:25, 25 gulan 2026 (UTC) :::::Vêga çêbû? -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 17:54, 25 gulan 2026 (UTC) ::::::{{çêbû}} Spas! [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:50, 25 gulan 2026 (UTC) :::::::Yên din (her dukên pêşîyê, eger bêkêr bin) jê bibim? -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 22:24, 25 gulan 2026 (UTC) ::::::::Erê, jê bibe. Spas! [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 21:41, 26 gulan 2026 (UTC) == Paşgirên lêkeran di kurmanciya rojhilatî de == : ''Binêre: [[Gotûbêja_modulê:ku-tewandin/arşîv_1#Paşgirên_lêkeran_di_kurmanciya_rojhilatî_de]]'' {{silav|Ferhengvan}}. Min paşgirên lêkeran çêkirin (kod li [[Modul:ku-tewandin#L-132|'''vira''']] ye) feqet kontrol kirin hewce ye, bnr. [[Tewandin:ketin/test]] û [[Tewandin:ajotin/test]].<br>Min hemû paşgirên demên niha guherand: ''[[Tewandin:ketin/test#indPresent|'''indPresent''']], [[Tewandin:ketin/test#indFuture|'''indFuture''']], [[Tewandin:ketin/test#subjPresent|'''subjPresent''']], [[Tewandin:ketin/test#imp|'''imperative''']]'' Çend pirsên min hene: # Tenê dema hiha û dema bê tên guherandin an jî hemû (''indPresent, indFuture, subjPresent, imperative'') # Di devoka rojhilatê de raweya bangkirin çito tê çêkirin wekî dema bê (kesî 3em)?<br> Di forma neyînî de kijan paşgir tê bikaranîn '''[[me-]]''' an '''[[ne-]]''' ? # Paşgirên rojhilatî ji bo hemû rehan werin çêkirin an jî tenê yên ku di wê devokê de tên bikaranîn ? Niha bi parametreya {{param2|devok|rojhilatî}} tê çêkirin. # Paşgirên demên borî? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 00:22, 8 hezîran 2026 (UTC) n2yve1pp8zf4yhdgntjqjzbpwchw2wi 6237268 6237267 2026-06-08T00:33:09Z Ghybu 1393 /* Paşgirên lêkeran di kurmanciya rojhilatî de */ 6237268 wikitext text/x-wiki {{arşîvkirin|1= * [[Gotûbêja modulê:ku-tewandin/arşîv 1|Arşîv 1]] }} == Ergatîvî == ; Lêkera ''[[Tewandin:kirin#indPreterite|kirin]]'' (dema borî): {| class="wikitable" |+ {{reng2|green|Biker}} + Berkar {{nobold|(bireser/obje)}} + lêkera tewandî |- ! {{reng2|green|Biker}} \ Berkar !! ez !! tu !! ew/– !! em !! hûn !! ew |- ! {{reng2|green|min}} | <u>xwe</u> kirim || kirî || style="background-color:#FFF9E0"| kir || kirin || kirin || kirin |- ! {{reng2|green|te}} | kirim || <u>xwe</u> kirî || style="background-color:#FFF9E0"| kir || kirin || kirin || kirin |- ! {{reng2|green|wê/wî}} | kirim || kirî || style="background-color:#FFF9E0"| <u>xwe</u>/– kir || kirin || kirin || kirin |- ! {{reng2|green|me}} | kirim || kirî || style="background-color:#FFF9E0"| kir || <u>xwe</u> kirin || kirin || kirin |- ! {{reng2|green|we}} | kirim || kirî || style="background-color:#FFF9E0"| kir || kirin || <u>xwe</u> kirin || kirin |- ! {{reng2|green|wan}} | kirim || kirî || style="background-color:#FFF9E0"| kir || kirin || kirin || <u>xwe</u> kirin |} * <u>Xwandina tabloyê</u> ({{reng2|green|Bik.}} + '''Berk.''' + ''L''): *:stûn1 ('''Berk.'''=ez): {{reng2|green|min}} '''ez''' <u>xwe</u> kirim; {{reng2|green|te}} '''ez''' kirim; {{reng2|green|wê/wî}} '''ez''' kirim; {{reng2|green|me}} '''ez''' kirim; {{reng2|green|we}} '''ez''' kirim; {{reng2|green|hûn}} '''ez''' kirim *:stûn2 ('''Berk.'''=tu): {{reng2|green|min}} '''tu''' kirî; {{reng2|green|te}} '''tu''' <u>xwe</u> kirî; {{reng2|green|wê/wî}} '''tu''' kirî; {{reng2|green|me}} '''tu''' kirî; ... *:stûn3 ('''Berk.'''=ew/–): {{reng2|green|min}} '''(ew)''' kir; {{reng2|green|te}} '''(ew)''' kir; {{reng2|green|wê/wî}} '''(ew <u>xwe</u>)''' kir; {{reng2|green|me}} '''(ew)''' kir; ... *: ... Silav, em tewandinên lêkerên gerguhêz wekî tabloya jor tevlî Tabloya tewandinê ([[Tewandin:kirin]]) bikin? {{ping|Ferhengvan|Bikarhêner|Keyomerd}} [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:21, 11 gulan 2026 (UTC) :Ê min ket serê min. Lê min beşên ko "xwe" dihewînin fam nekir. Divê bo nimûne "min xwe kir" be, an jî "min ez kirim" be lê jixwe tiştekî werê jî tune ye. [[Bikarhêner:Keyomerd|Keyomerd]] ([[Gotûbêja bikarhêner:Keyomerd|gotûbêj]]) 08:36, 12 gulan 2026 (UTC) ::Bi vî awayî? {| cellspacing="0" cellpadding="4" style=" border-collapse:collapse;" align=center |+ {{{ser|}}} |-style="border-bottom:solid 1px grey; border-top:solid 1px grey;" !id="11" colspan="2" bgcolor=#FFFFE0|[[Pêvek:Rastnivîsî/Lêker/Dema niha|Dema niha]] - <small>''Present''</small> !colspan="4" bgcolor=#ececff|[[Pêvek:Rastnivîsî/Lêker/Dema borî ya sade|Raboriya sade]] - <small>''Preterite''</small><br><small>Dema boriya têdeyî</small> |- |bgcolor=#F4F4F4|Erênî |bgcolor=#F4F4F4|Neyînî |bgcolor=#e9e9e9|{{reng2|green|Biker}} |bgcolor=#e9e9e9|{{reng2|blue|Berkar}} |bgcolor=#F4F4F4|Erênî |bgcolor=#F4F4F4|Neyînî |- |ez dikim |ez '''na'''kim |{{reng2|green|te, wî/wê, we, wan}} |{{reng2|blue|ez}} |kirim |'''ne'''kirim |- |tu dikî |tu '''na'''kî |{{reng2|green|min, wî/wê, me, wan}} |{{reng2|blue|tu}} |kirî |'''ne'''kirî |- |ew dike |ew '''na'''ke |{{reng2|green|min, te, wî/wê, me, we, wan}} |{{reng2|blue|ew}} |kir |'''ne'''kir |- |em dikin |em '''na'''kin |{{reng2|green|te, wî/wê, we, wan}} |{{reng2|blue|em}} |kirin |'''ne'''kirin |- |hûn dikin |hûn '''na'''kin |{{reng2|green|min, wî/wê, me, wan}} |{{reng2|blue|hûn}} |kirin |'''ne'''kirin |- |ew dikin |ew '''na'''kin |{{reng2|green|min, te, wî/wê, me, we, wan}} |{{reng2|blue|ew}} |kirin |'''ne'''kirin |} ::--[[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:26, 20 gulan 2026 (UTC) :::{{silav|Bikarhêner}}. Tu dikarî van rûpelan çêkî: :::* [//ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Ghybu/common.js&oldid=6236001] → tevlî [[MediaWiki:Gadget-kuTewandin.js]] bike :::* <code><nowiki>Stûna bikerê (bireser/obje) di [[Şablon:ku-tewandin|tabloya tewandinê]] de berfire dike.</nowiki></code> → [[MediaWiki:Gadget-kuTewandin]] :::* <code><nowiki>* kuTewandin[ResourceLoader|default]|kuTewandin.js</nowiki></code> → tevlî beşa "Rû" ([[MediaWiki:Gadgets-definition#Rû]]) bike. :::* '''Encam''': [[Wîkîferheng:ceribandin]] / herwiha rûyê mobîlê û moda tarî jî hatin guherandin... :::Spas! [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:25, 24 gulan 2026 (UTC) ::::Çêbû? -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 09:25, 25 gulan 2026 (UTC) :::::Vêga çêbû? -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 17:54, 25 gulan 2026 (UTC) ::::::{{çêbû}} Spas! [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:50, 25 gulan 2026 (UTC) :::::::Yên din (her dukên pêşîyê, eger bêkêr bin) jê bibim? -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 22:24, 25 gulan 2026 (UTC) ::::::::Erê, jê bibe. Spas! [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 21:41, 26 gulan 2026 (UTC) == Paşgirên lêkeran di kurmanciya rojhilatî de == :→ ''Binêre: [[Gotûbêja_modulê:ku-tewandin/arşîv_1#Paşgirên_lêkeran_di_kurmanciya_rojhilatî_de|Paşgirên_lêkeran_di_kurmanciya_rojhilatî_de]]'' {{silav|Ferhengvan}}. Min paşgirên lêkeran çêkirin (kod li [[Modul:ku-tewandin#L-132|'''vira''']] ye) feqet kontrol kirin hewce ye, bnr. [[Tewandin:ketin/test]] û [[Tewandin:ajotin/test]].<br>Min hemû paşgirên demên niha guherand: ''[[Tewandin:ketin/test#indPresent|'''indPresent''']], [[Tewandin:ketin/test#indFuture|'''indFuture''']], [[Tewandin:ketin/test#subjPresent|'''subjPresent''']], [[Tewandin:ketin/test#imp|'''imperative''']]'' Çend pirsên min hene: # Tenê dema hiha û dema bê tên guherandin an jî hemû (''indPresent, indFuture, subjPresent, imperative'') # Di devoka rojhilatê de raweya bangkirin çito tê çêkirin wekî dema bê (kesê 3em)?<br> Di forma neyînî de kijan paşgir tê bikaranîn '''[[me-]]''' an '''[[ne-]]''' ? # Paşgirên rojhilatî ji bo hemû rehan werin çêkirin an jî tenê yên ku di wê devokê de tên bikaranîn ? Niha bi parametreya {{param2|devok|rojhilatî}} tê çêkirin. # Paşgirên demên borî? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 00:22, 8 hezîran 2026 (UTC) 4gtbk0y07nhlt47854148c4smxaz1vy 6237269 6237268 2026-06-08T00:36:17Z Ghybu 1393 /* Paşgirên lêkeran di kurmanciya rojhilatî de */ 6237269 wikitext text/x-wiki {{arşîvkirin|1= * [[Gotûbêja modulê:ku-tewandin/arşîv 1|Arşîv 1]] }} == Ergatîvî == ; Lêkera ''[[Tewandin:kirin#indPreterite|kirin]]'' (dema borî): {| class="wikitable" |+ {{reng2|green|Biker}} + Berkar {{nobold|(bireser/obje)}} + lêkera tewandî |- ! {{reng2|green|Biker}} \ Berkar !! ez !! tu !! ew/– !! em !! hûn !! ew |- ! {{reng2|green|min}} | <u>xwe</u> kirim || kirî || style="background-color:#FFF9E0"| kir || kirin || kirin || kirin |- ! {{reng2|green|te}} | kirim || <u>xwe</u> kirî || style="background-color:#FFF9E0"| kir || kirin || kirin || kirin |- ! {{reng2|green|wê/wî}} | kirim || kirî || style="background-color:#FFF9E0"| <u>xwe</u>/– kir || kirin || kirin || kirin |- ! {{reng2|green|me}} | kirim || kirî || style="background-color:#FFF9E0"| kir || <u>xwe</u> kirin || kirin || kirin |- ! {{reng2|green|we}} | kirim || kirî || style="background-color:#FFF9E0"| kir || kirin || <u>xwe</u> kirin || kirin |- ! {{reng2|green|wan}} | kirim || kirî || style="background-color:#FFF9E0"| kir || kirin || kirin || <u>xwe</u> kirin |} * <u>Xwandina tabloyê</u> ({{reng2|green|Bik.}} + '''Berk.''' + ''L''): *:stûn1 ('''Berk.'''=ez): {{reng2|green|min}} '''ez''' <u>xwe</u> kirim; {{reng2|green|te}} '''ez''' kirim; {{reng2|green|wê/wî}} '''ez''' kirim; {{reng2|green|me}} '''ez''' kirim; {{reng2|green|we}} '''ez''' kirim; {{reng2|green|hûn}} '''ez''' kirim *:stûn2 ('''Berk.'''=tu): {{reng2|green|min}} '''tu''' kirî; {{reng2|green|te}} '''tu''' <u>xwe</u> kirî; {{reng2|green|wê/wî}} '''tu''' kirî; {{reng2|green|me}} '''tu''' kirî; ... *:stûn3 ('''Berk.'''=ew/–): {{reng2|green|min}} '''(ew)''' kir; {{reng2|green|te}} '''(ew)''' kir; {{reng2|green|wê/wî}} '''(ew <u>xwe</u>)''' kir; {{reng2|green|me}} '''(ew)''' kir; ... *: ... Silav, em tewandinên lêkerên gerguhêz wekî tabloya jor tevlî Tabloya tewandinê ([[Tewandin:kirin]]) bikin? {{ping|Ferhengvan|Bikarhêner|Keyomerd}} [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:21, 11 gulan 2026 (UTC) :Ê min ket serê min. Lê min beşên ko "xwe" dihewînin fam nekir. Divê bo nimûne "min xwe kir" be, an jî "min ez kirim" be lê jixwe tiştekî werê jî tune ye. [[Bikarhêner:Keyomerd|Keyomerd]] ([[Gotûbêja bikarhêner:Keyomerd|gotûbêj]]) 08:36, 12 gulan 2026 (UTC) ::Bi vî awayî? {| cellspacing="0" cellpadding="4" style=" border-collapse:collapse;" align=center |+ {{{ser|}}} |-style="border-bottom:solid 1px grey; border-top:solid 1px grey;" !id="11" colspan="2" bgcolor=#FFFFE0|[[Pêvek:Rastnivîsî/Lêker/Dema niha|Dema niha]] - <small>''Present''</small> !colspan="4" bgcolor=#ececff|[[Pêvek:Rastnivîsî/Lêker/Dema borî ya sade|Raboriya sade]] - <small>''Preterite''</small><br><small>Dema boriya têdeyî</small> |- |bgcolor=#F4F4F4|Erênî |bgcolor=#F4F4F4|Neyînî |bgcolor=#e9e9e9|{{reng2|green|Biker}} |bgcolor=#e9e9e9|{{reng2|blue|Berkar}} |bgcolor=#F4F4F4|Erênî |bgcolor=#F4F4F4|Neyînî |- |ez dikim |ez '''na'''kim |{{reng2|green|te, wî/wê, we, wan}} |{{reng2|blue|ez}} |kirim |'''ne'''kirim |- |tu dikî |tu '''na'''kî |{{reng2|green|min, wî/wê, me, wan}} |{{reng2|blue|tu}} |kirî |'''ne'''kirî |- |ew dike |ew '''na'''ke |{{reng2|green|min, te, wî/wê, me, we, wan}} |{{reng2|blue|ew}} |kir |'''ne'''kir |- |em dikin |em '''na'''kin |{{reng2|green|te, wî/wê, we, wan}} |{{reng2|blue|em}} |kirin |'''ne'''kirin |- |hûn dikin |hûn '''na'''kin |{{reng2|green|min, wî/wê, me, wan}} |{{reng2|blue|hûn}} |kirin |'''ne'''kirin |- |ew dikin |ew '''na'''kin |{{reng2|green|min, te, wî/wê, me, we, wan}} |{{reng2|blue|ew}} |kirin |'''ne'''kirin |} ::--[[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:26, 20 gulan 2026 (UTC) :::{{silav|Bikarhêner}}. Tu dikarî van rûpelan çêkî: :::* [//ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Ghybu/common.js&oldid=6236001] → tevlî [[MediaWiki:Gadget-kuTewandin.js]] bike :::* <code><nowiki>Stûna bikerê (bireser/obje) di [[Şablon:ku-tewandin|tabloya tewandinê]] de berfire dike.</nowiki></code> → [[MediaWiki:Gadget-kuTewandin]] :::* <code><nowiki>* kuTewandin[ResourceLoader|default]|kuTewandin.js</nowiki></code> → tevlî beşa "Rû" ([[MediaWiki:Gadgets-definition#Rû]]) bike. :::* '''Encam''': [[Wîkîferheng:ceribandin]] / herwiha rûyê mobîlê û moda tarî jî hatin guherandin... :::Spas! [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:25, 24 gulan 2026 (UTC) ::::Çêbû? -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 09:25, 25 gulan 2026 (UTC) :::::Vêga çêbû? -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 17:54, 25 gulan 2026 (UTC) ::::::{{çêbû}} Spas! [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:50, 25 gulan 2026 (UTC) :::::::Yên din (her dukên pêşîyê, eger bêkêr bin) jê bibim? -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 22:24, 25 gulan 2026 (UTC) ::::::::Erê, jê bibe. Spas! [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 21:41, 26 gulan 2026 (UTC) == Paşgirên lêkeran di kurmanciya rojhilatî de == :→ ''Binêre: [[Gotûbêja_modulê:ku-tewandin/arşîv_1#Paşgirên_lêkeran_di_kurmanciya_rojhilatî_de|Paşgirên_lêkeran_di_kurmanciya_rojhilatî_de]]'' {{silav|Ferhengvan}}. Min paşgirên lêkeran çêkirin (kod li [[Modul:ku-tewandin#L-132|'''vira''']] ye) feqet kontrol kirin hewce ye, bnr. [[Tewandin:ketin/test]] û [[Tewandin:ajotin/test]].<br>Min hemû paşgirên demên niha guherand: ''[[Tewandin:ketin/test#indPresent|'''indPresent''']], [[Tewandin:ketin/test#indFuture|'''indFuture''']], [[Tewandin:ketin/test#subjPresent|'''subjPresent''']], [[Tewandin:ketin/test#imp|'''imperative''']]'' Çend pirsên min hene: # Tenê dema hiha û dema bê tên guherandin an jî hemû (''indPresent, indFuture, subjPresent, imperative'') # Di devoka rojhilatê de raweya fermanî çito tê çêkirin wekî dema bê (kesê 3em)?<br> Di forma neyînî de kijan paşgir tê bikaranîn '''[[me-]]''' an '''[[ne-]]''' ? # Paşgirên rojhilatî ji bo hemû rehan werin çêkirin an jî tenê yên ku di wê devokê de tên bikaranîn ? Niha bi parametreya {{param2|devok|rojhilatî}} tê çêkirin. # Paşgirên demên borî? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 00:22, 8 hezîran 2026 (UTC) kzwdqs2htrwv3zz1jy2j1x9lsandex7 6237273 6237269 2026-06-08T01:55:13Z Ghybu 1393 /* Paşgirên lêkeran di kurmanciya rojhilatî de */ 6237273 wikitext text/x-wiki {{arşîvkirin|1= * [[Gotûbêja modulê:ku-tewandin/arşîv 1|Arşîv 1]] }} == Ergatîvî == ; Lêkera ''[[Tewandin:kirin#indPreterite|kirin]]'' (dema borî): {| class="wikitable" |+ {{reng2|green|Biker}} + Berkar {{nobold|(bireser/obje)}} + lêkera tewandî |- ! {{reng2|green|Biker}} \ Berkar !! ez !! tu !! ew/– !! em !! hûn !! ew |- ! {{reng2|green|min}} | <u>xwe</u> kirim || kirî || style="background-color:#FFF9E0"| kir || kirin || kirin || kirin |- ! {{reng2|green|te}} | kirim || <u>xwe</u> kirî || style="background-color:#FFF9E0"| kir || kirin || kirin || kirin |- ! {{reng2|green|wê/wî}} | kirim || kirî || style="background-color:#FFF9E0"| <u>xwe</u>/– kir || kirin || kirin || kirin |- ! {{reng2|green|me}} | kirim || kirî || style="background-color:#FFF9E0"| kir || <u>xwe</u> kirin || kirin || kirin |- ! {{reng2|green|we}} | kirim || kirî || style="background-color:#FFF9E0"| kir || kirin || <u>xwe</u> kirin || kirin |- ! {{reng2|green|wan}} | kirim || kirî || style="background-color:#FFF9E0"| kir || kirin || kirin || <u>xwe</u> kirin |} * <u>Xwandina tabloyê</u> ({{reng2|green|Bik.}} + '''Berk.''' + ''L''): *:stûn1 ('''Berk.'''=ez): {{reng2|green|min}} '''ez''' <u>xwe</u> kirim; {{reng2|green|te}} '''ez''' kirim; {{reng2|green|wê/wî}} '''ez''' kirim; {{reng2|green|me}} '''ez''' kirim; {{reng2|green|we}} '''ez''' kirim; {{reng2|green|hûn}} '''ez''' kirim *:stûn2 ('''Berk.'''=tu): {{reng2|green|min}} '''tu''' kirî; {{reng2|green|te}} '''tu''' <u>xwe</u> kirî; {{reng2|green|wê/wî}} '''tu''' kirî; {{reng2|green|me}} '''tu''' kirî; ... *:stûn3 ('''Berk.'''=ew/–): {{reng2|green|min}} '''(ew)''' kir; {{reng2|green|te}} '''(ew)''' kir; {{reng2|green|wê/wî}} '''(ew <u>xwe</u>)''' kir; {{reng2|green|me}} '''(ew)''' kir; ... *: ... Silav, em tewandinên lêkerên gerguhêz wekî tabloya jor tevlî Tabloya tewandinê ([[Tewandin:kirin]]) bikin? {{ping|Ferhengvan|Bikarhêner|Keyomerd}} [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:21, 11 gulan 2026 (UTC) :Ê min ket serê min. Lê min beşên ko "xwe" dihewînin fam nekir. Divê bo nimûne "min xwe kir" be, an jî "min ez kirim" be lê jixwe tiştekî werê jî tune ye. [[Bikarhêner:Keyomerd|Keyomerd]] ([[Gotûbêja bikarhêner:Keyomerd|gotûbêj]]) 08:36, 12 gulan 2026 (UTC) ::Bi vî awayî? {| cellspacing="0" cellpadding="4" style=" border-collapse:collapse;" align=center |+ {{{ser|}}} |-style="border-bottom:solid 1px grey; border-top:solid 1px grey;" !id="11" colspan="2" bgcolor=#FFFFE0|[[Pêvek:Rastnivîsî/Lêker/Dema niha|Dema niha]] - <small>''Present''</small> !colspan="4" bgcolor=#ececff|[[Pêvek:Rastnivîsî/Lêker/Dema borî ya sade|Raboriya sade]] - <small>''Preterite''</small><br><small>Dema boriya têdeyî</small> |- |bgcolor=#F4F4F4|Erênî |bgcolor=#F4F4F4|Neyînî |bgcolor=#e9e9e9|{{reng2|green|Biker}} |bgcolor=#e9e9e9|{{reng2|blue|Berkar}} |bgcolor=#F4F4F4|Erênî |bgcolor=#F4F4F4|Neyînî |- |ez dikim |ez '''na'''kim |{{reng2|green|te, wî/wê, we, wan}} |{{reng2|blue|ez}} |kirim |'''ne'''kirim |- |tu dikî |tu '''na'''kî |{{reng2|green|min, wî/wê, me, wan}} |{{reng2|blue|tu}} |kirî |'''ne'''kirî |- |ew dike |ew '''na'''ke |{{reng2|green|min, te, wî/wê, me, we, wan}} |{{reng2|blue|ew}} |kir |'''ne'''kir |- |em dikin |em '''na'''kin |{{reng2|green|te, wî/wê, we, wan}} |{{reng2|blue|em}} |kirin |'''ne'''kirin |- |hûn dikin |hûn '''na'''kin |{{reng2|green|min, wî/wê, me, wan}} |{{reng2|blue|hûn}} |kirin |'''ne'''kirin |- |ew dikin |ew '''na'''kin |{{reng2|green|min, te, wî/wê, me, we, wan}} |{{reng2|blue|ew}} |kirin |'''ne'''kirin |} ::--[[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:26, 20 gulan 2026 (UTC) :::{{silav|Bikarhêner}}. Tu dikarî van rûpelan çêkî: :::* [//ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Ghybu/common.js&oldid=6236001] → tevlî [[MediaWiki:Gadget-kuTewandin.js]] bike :::* <code><nowiki>Stûna bikerê (bireser/obje) di [[Şablon:ku-tewandin|tabloya tewandinê]] de berfire dike.</nowiki></code> → [[MediaWiki:Gadget-kuTewandin]] :::* <code><nowiki>* kuTewandin[ResourceLoader|default]|kuTewandin.js</nowiki></code> → tevlî beşa "Rû" ([[MediaWiki:Gadgets-definition#Rû]]) bike. :::* '''Encam''': [[Wîkîferheng:ceribandin]] / herwiha rûyê mobîlê û moda tarî jî hatin guherandin... :::Spas! [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:25, 24 gulan 2026 (UTC) ::::Çêbû? -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 09:25, 25 gulan 2026 (UTC) :::::Vêga çêbû? -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 17:54, 25 gulan 2026 (UTC) ::::::{{çêbû}} Spas! [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:50, 25 gulan 2026 (UTC) :::::::Yên din (her dukên pêşîyê, eger bêkêr bin) jê bibim? -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 22:24, 25 gulan 2026 (UTC) ::::::::Erê, jê bibe. Spas! [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 21:41, 26 gulan 2026 (UTC) == Paşgirên lêkeran di kurmanciya rojhilatî de == :→ ''Binêre: [[Gotûbêja_modulê:ku-tewandin/arşîv_1#Paşgirên_lêkeran_di_kurmanciya_rojhilatî_de|Paşgirên_lêkeran_di_kurmanciya_rojhilatî_de]]'' {{silav|Ferhengvan}}. Min paşgirên lêkeran çêkirin (kod li [[Modul:ku-tewandin#L-132|'''vira''']] ye) feqet kontrol kirin hewce ye, bnr. [[Tewandin:kirin/test]] û [[Tewandin:xistin/test]].<br>Min hemû paşgirên demên niha guherand: ''[[Tewandin:kirin/test#indPresent|'''indPresent''']], [[Tewandin:kirin/test#indFuture|'''indFuture''']], [[Tewandin:kirin/test#subjPresent|'''subjPresent''']], [[Tewandin:kirin/test#imp|'''imperative''']]'' Çend pirsên min hene: # Tenê dema hiha û dema bê tên guherandin an jî hemû (''indPresent, indFuture, subjPresent, imperative'') # Di devoka rojhilatê de raweya fermanî çito tê çêkirin wekî dema bê (kesê 3em)?<br> Di forma neyînî de kijan paşgir tê bikaranîn '''[[me-]]''' an '''[[ne-]]''' ? # Paşgirên rojhilatî ji bo hemû rehan werin çêkirin an jî tenê yên ku di wê devokê de tên bikaranîn ? Niha bi parametreya {{param2|devok|rojhilatî}} tê çêkirin. # Paşgirên demên borî? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 00:22, 8 hezîran 2026 (UTC) mw8wkim7vwf5qyksw9fjdwb6krpwao0 6237278 6237273 2026-06-08T02:55:02Z Ghybu 1393 /* Paşgirên lêkeran di kurmanciya rojhilatî de */ 6237278 wikitext text/x-wiki {{arşîvkirin|1= * [[Gotûbêja modulê:ku-tewandin/arşîv 1|Arşîv 1]] }} == Ergatîvî == ; Lêkera ''[[Tewandin:kirin#indPreterite|kirin]]'' (dema borî): {| class="wikitable" |+ {{reng2|green|Biker}} + Berkar {{nobold|(bireser/obje)}} + lêkera tewandî |- ! {{reng2|green|Biker}} \ Berkar !! ez !! tu !! ew/– !! em !! hûn !! ew |- ! {{reng2|green|min}} | <u>xwe</u> kirim || kirî || style="background-color:#FFF9E0"| kir || kirin || kirin || kirin |- ! {{reng2|green|te}} | kirim || <u>xwe</u> kirî || style="background-color:#FFF9E0"| kir || kirin || kirin || kirin |- ! {{reng2|green|wê/wî}} | kirim || kirî || style="background-color:#FFF9E0"| <u>xwe</u>/– kir || kirin || kirin || kirin |- ! {{reng2|green|me}} | kirim || kirî || style="background-color:#FFF9E0"| kir || <u>xwe</u> kirin || kirin || kirin |- ! {{reng2|green|we}} | kirim || kirî || style="background-color:#FFF9E0"| kir || kirin || <u>xwe</u> kirin || kirin |- ! {{reng2|green|wan}} | kirim || kirî || style="background-color:#FFF9E0"| kir || kirin || kirin || <u>xwe</u> kirin |} * <u>Xwandina tabloyê</u> ({{reng2|green|Bik.}} + '''Berk.''' + ''L''): *:stûn1 ('''Berk.'''=ez): {{reng2|green|min}} '''ez''' <u>xwe</u> kirim; {{reng2|green|te}} '''ez''' kirim; {{reng2|green|wê/wî}} '''ez''' kirim; {{reng2|green|me}} '''ez''' kirim; {{reng2|green|we}} '''ez''' kirim; {{reng2|green|hûn}} '''ez''' kirim *:stûn2 ('''Berk.'''=tu): {{reng2|green|min}} '''tu''' kirî; {{reng2|green|te}} '''tu''' <u>xwe</u> kirî; {{reng2|green|wê/wî}} '''tu''' kirî; {{reng2|green|me}} '''tu''' kirî; ... *:stûn3 ('''Berk.'''=ew/–): {{reng2|green|min}} '''(ew)''' kir; {{reng2|green|te}} '''(ew)''' kir; {{reng2|green|wê/wî}} '''(ew <u>xwe</u>)''' kir; {{reng2|green|me}} '''(ew)''' kir; ... *: ... Silav, em tewandinên lêkerên gerguhêz wekî tabloya jor tevlî Tabloya tewandinê ([[Tewandin:kirin]]) bikin? {{ping|Ferhengvan|Bikarhêner|Keyomerd}} [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:21, 11 gulan 2026 (UTC) :Ê min ket serê min. Lê min beşên ko "xwe" dihewînin fam nekir. Divê bo nimûne "min xwe kir" be, an jî "min ez kirim" be lê jixwe tiştekî werê jî tune ye. [[Bikarhêner:Keyomerd|Keyomerd]] ([[Gotûbêja bikarhêner:Keyomerd|gotûbêj]]) 08:36, 12 gulan 2026 (UTC) ::Bi vî awayî? {| cellspacing="0" cellpadding="4" style=" border-collapse:collapse;" align=center |+ {{{ser|}}} |-style="border-bottom:solid 1px grey; border-top:solid 1px grey;" !id="11" colspan="2" bgcolor=#FFFFE0|[[Pêvek:Rastnivîsî/Lêker/Dema niha|Dema niha]] - <small>''Present''</small> !colspan="4" bgcolor=#ececff|[[Pêvek:Rastnivîsî/Lêker/Dema borî ya sade|Raboriya sade]] - <small>''Preterite''</small><br><small>Dema boriya têdeyî</small> |- |bgcolor=#F4F4F4|Erênî |bgcolor=#F4F4F4|Neyînî |bgcolor=#e9e9e9|{{reng2|green|Biker}} |bgcolor=#e9e9e9|{{reng2|blue|Berkar}} |bgcolor=#F4F4F4|Erênî |bgcolor=#F4F4F4|Neyînî |- |ez dikim |ez '''na'''kim |{{reng2|green|te, wî/wê, we, wan}} |{{reng2|blue|ez}} |kirim |'''ne'''kirim |- |tu dikî |tu '''na'''kî |{{reng2|green|min, wî/wê, me, wan}} |{{reng2|blue|tu}} |kirî |'''ne'''kirî |- |ew dike |ew '''na'''ke |{{reng2|green|min, te, wî/wê, me, we, wan}} |{{reng2|blue|ew}} |kir |'''ne'''kir |- |em dikin |em '''na'''kin |{{reng2|green|te, wî/wê, we, wan}} |{{reng2|blue|em}} |kirin |'''ne'''kirin |- |hûn dikin |hûn '''na'''kin |{{reng2|green|min, wî/wê, me, wan}} |{{reng2|blue|hûn}} |kirin |'''ne'''kirin |- |ew dikin |ew '''na'''kin |{{reng2|green|min, te, wî/wê, me, we, wan}} |{{reng2|blue|ew}} |kirin |'''ne'''kirin |} ::--[[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:26, 20 gulan 2026 (UTC) :::{{silav|Bikarhêner}}. Tu dikarî van rûpelan çêkî: :::* [//ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Ghybu/common.js&oldid=6236001] → tevlî [[MediaWiki:Gadget-kuTewandin.js]] bike :::* <code><nowiki>Stûna bikerê (bireser/obje) di [[Şablon:ku-tewandin|tabloya tewandinê]] de berfire dike.</nowiki></code> → [[MediaWiki:Gadget-kuTewandin]] :::* <code><nowiki>* kuTewandin[ResourceLoader|default]|kuTewandin.js</nowiki></code> → tevlî beşa "Rû" ([[MediaWiki:Gadgets-definition#Rû]]) bike. :::* '''Encam''': [[Wîkîferheng:ceribandin]] / herwiha rûyê mobîlê û moda tarî jî hatin guherandin... :::Spas! [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:25, 24 gulan 2026 (UTC) ::::Çêbû? -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 09:25, 25 gulan 2026 (UTC) :::::Vêga çêbû? -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 17:54, 25 gulan 2026 (UTC) ::::::{{çêbû}} Spas! [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:50, 25 gulan 2026 (UTC) :::::::Yên din (her dukên pêşîyê, eger bêkêr bin) jê bibim? -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 22:24, 25 gulan 2026 (UTC) ::::::::Erê, jê bibe. Spas! [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 21:41, 26 gulan 2026 (UTC) == Paşgirên lêkeran di kurmanciya rojhilatî de == :→ ''Binêre: [[Gotûbêja_modulê:ku-tewandin/arşîv_1#Paşgirên_lêkeran_di_kurmanciya_rojhilatî_de|Paşgirên_lêkeran_di_kurmanciya_rojhilatî_de]]'' {{silav|Ferhengvan}}. Min paşgirên lêkeran çêkirin (kod li [[Modul:ku-tewandin#L-132|'''vira''']] ye / [[Modul:ku-tewandin#L-290|kod]]) feqet kontrol kirin hewce ye, bnr. [[Tewandin:kirin/test]] û [[Tewandin:xistin/test]].<br>Min hemû paşgirên demên niha guherand: ''[[Tewandin:kirin/test#indPresent|'''indPresent''']], [[Tewandin:kirin/test#indFuture|'''indFuture''']], [[Tewandin:kirin/test#subjPresent|'''subjPresent''']], [[Tewandin:kirin/test#imp|'''imperative''']]'' Çend pirsên min hene: # Tenê dema hiha û dema bê tên guherandin an jî hemû (''indPresent, indFuture, subjPresent, imperative'') # Di devoka rojhilatê de raweya fermanî çito tê çêkirin wekî dema bê (kesê 3em)?<br> Di forma neyînî de kijan paşgir tê bikaranîn '''[[me-]]''' an '''[[ne-]]''' ? # Paşgirên rojhilatî ji bo hemû rehan werin çêkirin an jî tenê yên ku di wê devokê de tên bikaranîn ? Niha bi parametreya {{param2|devok|rojhilatî}} tê çêkirin. # Paşgirên demên borî? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 00:22, 8 hezîran 2026 (UTC) 470g2oph9xv0g6z57catdbyoqzp9ibi Mohrrübe 0 973267 6237261 6056508 2026-06-07T16:19:12Z Denny 7871 6237261 wikitext text/x-wiki == {{ziman|de}} == {{#function:Z29055|L859720|}} === Bilêvkirin === * {{IPA|de|/ˈmoː(r)ˌryːbə/|[ˈmoː(ɐ̯)ˌʁyːbə]}} * {{deng|de|De-Mohrrübe.ogg|Deng}} === Navdêr === [[Wêne:Mrkva.JPG|thumb|{{lang|de|Mohrrüben}}|upright=1.4]] {{navdêr|de|z=m}} # {{f|de|herêmî}} {{mijar|de|riwek}} {{g|ku|gêzer}} #: {{hevmane|de|Karotte|Möhre|gelbe Rübe|Rüebli|Burkane}} ==== Etîmolojî ==== Ji {{pêk|de|Mohre|Rübe}}. cvq3ziz0wp1jbd45bnwc0n3zwsde0bd 6237262 6237261 2026-06-07T16:19:44Z Denny 7871 Guhartoya [[Special:Diff/6237261|6237261]] yê [[Special:Contributions/Denny|Denny]] ([[User talk:Denny|gotûbêj]]) şûnde kir 6237262 wikitext text/x-wiki == {{ziman|de}} == === Bilêvkirin === * {{IPA|de|/ˈmoː(r)ˌryːbə/|[ˈmoː(ɐ̯)ˌʁyːbə]}} * {{deng|de|De-Mohrrübe.ogg|Deng}} === Navdêr === [[Wêne:Mrkva.JPG|thumb|{{lang|de|Mohrrüben}}|upright=1.4]] {{navdêr|de|z=m}} # {{f|de|herêmî}} {{mijar|de|riwek}} {{g|ku|gêzer}} #: {{hevmane|de|Karotte|Möhre|gelbe Rübe|Rüebli|Burkane}} ==== Etîmolojî ==== Ji {{pêk|de|Mohre|Rübe}}. monyx6xb7y8ja2uj3zsbfqnvr5n8icm Modul:ku-tewandin/ceribandin 828 1356654 6237256 6237224 2026-06-07T14:34:06Z Ghybu 1393 + devoka rojhilatî ji bo rehê dema niha 6237256 Scribunto text/plain -- Modula tewandina lêkerên kurmancî local export = {} -- Load irregular forms table -- local irreg = require('Module:ku-tewandin/dijrêzik') local langKu = require("Modul:languages").getByCode("ku") local link = require('Module:links').language_link local shallowCopy = require("Module:table/shallowCopy") local deepCopy = require("Module:table/deepCopy") -- ============================================================================= -- Pronouns in Kurmanji -- ============================================================================= export.order = {"s1", "s2", "s3", "p1", "p2", "p3"} export.pronouns = { s1 = "ez", p1 = "em", s2 = "tu", p2 = "hûn", s3 = "ew", p3 = "ew" } export.obliquePronouns = { s1 = "min", p1 = "me", s2 = "te", p2 = "we", s3 = "wê/wî", p3 = "wan" } export.agents = { s1 = "te, wî, wê, we, wan", p1 = "te, wî, wê, we, wan", s2 = "min, wî, wê, me, wan", p2 = "min, wî, wê, me, wan", s3 = "min, te, wî, wê, me, we, wan", p3 = "min, te, wî, wê, me, we, wan" } -- Oblique pronoun (green) export.obliquePronounsGreen = { s1 = '<span style="color:green">min</span>', s2 = '<span style="color:green">te</span>', s3 = '<span style="color:green">wê/wî</span>', p1 = '<span style="color:green">me</span>', p2 = '<span style="color:green">we</span>', p3 = '<span style="color:green">wan</span>' } -- ───────────────────────────────────────────────────────────────────────────── -- 1) This function returns correct subject/agent pronoun, ergativity rule: -- - Transitive verbs in past tenses → oblique pronoun (green) = agent -- - All other cases → direct pronoun (no color) = subject -- 2) Also add the subjunctive prefix "(bila)" -- ───────────────────────────────────────────────────────────────────────────── function export.conjPronouns(stemType, mode, isTransitive) local pronouns = shallowCopy(export.pronouns) -- Ergativity in kurdish: transitive verbs that are conjugated with the past tense stem are -- conjugated according to the object, not the subject. -- Therefore, to have an ergative construction, -- the verb must be transitive and its stem must be the stem of the past tense. local isErgative = isTransitive and (stemType == 'past') -- If it's ergative, we use oblique pronouns: "min", "te", ... -- If it's not ergative, we use normal pronouns: "ez", "tu", ... if isErgative then pronouns = shallowCopy(export.obliquePronounsGreen) end -- For the subjunctive mood, we add "(bila)" at the beginning. if mode == 'subjunctive' then local subjPrefix = '<span style="color:gray">(bila)</span>' for _, pers in ipairs(export.order) do pronouns[pers] = subjPrefix .. ' ' .. pronouns[pers] end end return pronouns end -- ============================================================================= -- VERBAL STRUCTURE IN THE INFINITIVE: -- Verbs in the infinitive appear in three main forms: -- 1) Simple verb (indivisible light verb): -- - ex.: "kirin", "çûn", "xwarin", ... -- 2) Verbs with preverbs (preverb + simple verb): -- - ex.: "rakirin" (ra- + kirin), "çêkirin" (çê- + kirin), "vexwarin" (ve- + xwarin), ... -- - Preverb verbs don't use the prefix "bi-" (ez ê rakim , ew ê rake , ...) -- 3) Compound verbs, construction with non-verbal element (the noun is not attached to the verb): -- - Left of the simple verb: "hez kirin" ("hez" + "kirin"), "li dar xistin" ("li dar" + "xistin"), ... -- - Right of the simple verb: "kirin der" ("kirin" + "der"), "girtin ser xwe" ("girtin" + "ser xwe"), ... -- - Compound verbs use the prefix "bi-" (ez ê hez bi-kim , ew ê hez bi-ke ) -- STRUCTURE: preSimpleVerb + spacing + simpleVerb + postSimpleVerb -- EX. kirin: preSimpleVerb=''; spacing=false; simpleVerb='kirin'; postSimpleVerb='' -- rakirin: preSimpleVerb='ra'; spacing=false; simpleVerb='kirin'; postSimpleVerb='' -- hez kirin: preSimpleVerb='hez'; spacing=true; simpleVerb='kirin'; postSimpleVerb='' -- pev çûn: preSimpleVerb='pev'; spacing=true; simpleVerb='çûn'; postSimpleVerb='' -- kirin der: preSimpleVerb=''; spacing=false; simpleVerb='kirin'; postSimpleVerb='der' -- WARNING: Conjugation can vary depending on the type of verb. -- For example, in the future tense,the prefix "bi" is used for compound verbs, -- but not for preverbal verbs, see the function that manages it "tenseRules" table. -- This table does not yet support the mixed case: a verb composed of a noun and a preverb verb. -- ============================================================================= function export.verbStruct(isCompoundVerb, preSimpleVerb) local struct if (preSimpleVerb and preSimpleVerb ~= '' and not isCompoundVerb) then struct = 'preverbVerb' elseif isCompoundVerb then struct = 'compoundVerb' else struct = 'simpleVerb' end return struct end -- ================================================================ -- INFLECTIONAL ENDINGS -- Assigns verb inflectional endings (suffixes) to all tenses -- ================================================================ local getEndings = {} do -- ─────────────────────────────────────────────────────────────── -- Ending using present stem -- ─────────────────────────────────────────────────────────────── getEndings['present'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local ends = {} if mw.ustring.match(stem, '[aeêiîouû]$') then ends['std'] = {s1='m', s2='yî', s3='', p1='n', p2='n', p3='n'} ends['rojhilatî'] = {s1='m', s2='(y)', s3='t', p1='yn', p2='n', p3='n'} else ends['std'] = {s1='im', s2='î', s3='e', p1='in', p2='in', p3='in'} ends['rojhilatî'] = {s1='im', s2='î', s3='<u>it</u>/ît', p1='în', p2='in', p3='in'} end return ends end -- ─────────────────────────────────────────────────────────────── -- Ind. preterite + ind. imperfect ending -- ─────────────────────────────────────────────────────────────── getEndings['past'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local ends if mw.ustring.match(stem, '[aeêiouû]$') then ends = {s1='m', s2='yî', s3='', p1='n', p2='n', p3='n'} elseif mw.ustring.match(stem, 'î$') then -- if self.name == 'indImperfect' then -- -- special indicative ind. imperfect rule -- ends = {s1='yam', s2='yayî', s3='ya', p1='yan', p2='yan', p3='yan'} -- end ends = {s1='m', s2='', s3='', p1='n', p2='n', p3='n'} else ends = {s1='im', s2='î', s3='', p1='in', p2='in', p3='in'} end return ends end -- ─────────────────────────────────────────────────────────────── -- Compound endings with auxiliary "bûn" -- Inflectional endings are created by taking the different forms of the -- verb "bûn" (with present stem "-b-" and past stem "-bû-") and -- adding an "i-" prefix before them: "i-b-im", "i-bû-m", "i-bû-me", "i-bû-ma". -- This "i-" varies according to the final letter of the verb stem. -- ─────────────────────────────────────────────────────────────── local function normalize_i(stem) local prfx_i = "i" if mw.ustring.match(stem, "ya$") or mw.ustring.match(stem, "[îû]$") then -- cf. karîn (-karî-) prfx_i = "" elseif mw.ustring.match(stem, '[aeêiou]$') then prfx_i = "yi" end return prfx_i end getEndings['ibim'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local prfx_i = normalize_i(stem) return { s1 = prfx_i .. "bim", p1 = prfx_i .. "bin", s2 = prfx_i .. "bî", p2 = prfx_i .. "bin", s3 = prfx_i .. "be", p3 = prfx_i .. "bin" } end getEndings['ibûm'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local prfx_i = normalize_i(stem) return { s1 = prfx_i .. "bûm", p1 = prfx_i .. "bûn", s2 = prfx_i .. "bûyî", p2 = prfx_i .. "bûn", s3 = prfx_i .. "bû", p3 = prfx_i .. "bûn" } end getEndings['ibûme'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local prfx_i = normalize_i(stem) return { s1 = prfx_i .. "bûme", p1 = prfx_i .. "bûne", s2 = prfx_i .. "bûyiye", p2 = prfx_i .. "bûne", s3 = prfx_i .. "bûye", p3 = prfx_i .. "bûne" } end getEndings['ibûma'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local prfx_i = normalize_i(stem) return { s1 = prfx_i .. "bûma", p1 = prfx_i .. "bûna", s2 = prfx_i .. "bûyayî", p2 = prfx_i .. "bûna", s3 = prfx_i .. "bûya", p3 = prfx_i .. "bûna" } end -- ─────────────────────────────────────────────────────────────── -- Ind. perfect ending. -- ─────────────────────────────────────────────────────────────── getEndings['ime'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local ends if mw.ustring.match(stem, '[aeêiîouû]$') then ends = {s1="me", s2="yî", s3="ye", p1="ne", p2="ne", p3="ne"} else ends = {s1="ime", s2="iyî", s3="iye", p1="ine", p2="ine", p3="ine"} end return ends end -- ─────────────────────────────────────────────────────────────── -- Subj. Imperfect ending. -- ─────────────────────────────────────────────────────────────── getEndings['ama'] = function(self, stem) -- self: reserved for future use (was used before, might be needed again) local _ = self -- delete the warning (unused argument) local ends -- The doublet in "-iyan" of verbs in -"în" (gerîn/-geriya-, kenîn/-keniya-, ...), -- in the conditional and subjunctive moods, a doublet "yaya" appears; it's removed. -- -yayayî → -yayî; -yaya → -ya if mw.ustring.match(stem, '(ya)$') then ends = {s1="ma", s2="yî", s3="", p1="na", p2="na", p3="na"} elseif mw.ustring.match(stem, '[aeêiîouû]$') then ends = {s1="ma", s2="yayî", s3="ya", p1="na", p2="na", p3="na"} else ends = {s1="ama", s2="ayî", s3="a", p1="ana", p2="ana", p3="ana"} end return ends end end -- ============================================================================= -- RULES FOR PREVERBS: "bi-" and "di-" -- There are two preverbs: "bi-" and "di-". These preverbs can change form -- depending on the first letters of the verb’s present stem or past stem. -- ============================================================================= local getPreverb = {} do getPreverb['bi'] = function (opts) opts = opts or {} local stem = opts.stem local verbStruct = opts.verbStruct local overrideBi = opts.overrideBi -- Preverb verbs don't use the preverb "bi-": ra-kirin (ez ê rakim), ve-xwarin (ez ê vexwim) , ... -- But compound verb and simple verbs use it: hez kirin (ez ê hez bi-kim), lê bigirin (ez ê lê bi-girim), ... if (verbStruct == 'preverbVerb') then return '' end if overrideBi then return overrideBi end -- if irreg.dijrezikBi[stem] then return irreg.dijrezikBi[stem] end -- Modification of the preverbe "bi-" according to the last letter of the stem. if mw.ustring.match(stem, '^[aeêiîouû]') then return 'b' end return 'bi' end getPreverb['di'] = function (opts) opts = opts or {} local stem = opts.stem local overrideDi = opts.overrideDi if overrideDi then return overrideDi end -- if irreg.dijrezikDi[stem] then return irreg.dijrezikDi[stem] end -- Modification of the preverbe "di-" according to the last letter of the stem. if mw.ustring.match(stem, '^[ai]') then return 'd' end -- Ex. hatin : stem = -ê- // ez têm if mw.ustring.match(stem, '^[êî]') then return 't' end return 'di' end end -- ============================================================================= -- RULES FOR NEGATION PREFIXES: "na-" and "ne-" -- There are two negation prefixes: "na-" and "ne-". These preverbs can change -- form depending on the first letters of the verb’s present stem or past stem. -- ============================================================================= local getNegPrefix = {} do getNegPrefix['na'] = function (opts) opts = opts or {} local stem = opts.stem local overrideNa = opts.overrideNa if overrideNa then return '<b>' .. overrideNa .. '</b>' end -- if irreg.dijrezikNa[stem] then return irreg.dijrezikNa[stem] end -- Add sufix "-y" before certain vowels. if mw.ustring.match(stem, '^[eêiîouû]') then return '<b>nay</b>' end -- Elision before stems beginning with "a-" (removal of the final "-e"). if mw.ustring.match(stem, '^a') then return '<b>n</b>' end -- Tîpa duyem "-a-" ye (k-a-rîn, z-a-nîn, ...) if mw.ustring.match(stem, '^%wa') then return '<b>ni</b>' end return '<b>na</b>' end getNegPrefix['ne'] = function (opts) opts = opts or {} local stem = opts.stem local tenseName = opts.tenseName local impNegForm = opts.impNegForm local overrideNe = opts.overrideNe if overrideNe then return '<b>' .. overrideNe .. '</b>' end -- if irreg.dijrezikNe[stem] then return irreg.dijrezikNe[stem] end local negPrefix = 'ne' -- There are two forms of construction of the imperative, -- one with the prefix "me-" and the other with the prefix "ne-". if (tenseName == 'impPresent') then negPrefix = (impNegForm == 2) and 'ne' or 'me' end -- Add sufix "-y" before certain vowels. if mw.ustring.match(stem, '^[eêiîouû]') then return '<b>' .. negPrefix .. 'y</b>' end -- Elision before stems beginning with "a-" (removal of the final "-e"). if mw.ustring.match(stem, '^a') then negPrefix = mw.ustring.sub(negPrefix, 1, -2) return '<b>' .. negPrefix .. '</b>' end return '<b>' .. negPrefix .. '</b>' end end -- ============================================================================= -- Standardization of the PREVERBAL PARTICLE -- The proverbial particle "ê" is placed after the personal pronoun. -- ============================================================================= -- If there are no verbal preparticles, return empty table. function export.getPreverbParticules(preverbParticle, typeStem, isTransitive) if not preverbParticle then return {s1='', s2='', s3='', p1='', p2='', p3=''} end if preverbParticle == 'ê' then local isErgative = isTransitive and (typeStem == 'past') -- When the personal pronoun ends in a vowel, a "y-" is added before "ê". -- If it's ergative, we use oblique pronouns: "min", "te", ... if isErgative then return {s1='ê/dê', s2='yê/dê', s3='yê/dê', p1='yê/dê', p2='yê/dê', p3='ê/dê'} else return {s1='ê/dê', s2='yê/dê', s3='ê/dê', p1='ê/dê', p2='ê/dê', p3='ê/dê'} end end -- If the verbal preparticle is identical for all pronouns, -- we create a table with the same value. local preverbParticles = {} for _, pers in ipairs(export.order) do preverbParticles[pers] = preverbParticle end return preverbParticles end -- ============================================================================= -- RULES FOR CONSTRUCTING EACH VERB TENSE -- This table lists, for each verb tense, what elements are required to form it: -- - Verb conjugation is built by placing either the preverb "bi-" or "di-" before -- the verb stem (past or present), followed by a personal ending. -- - For the negative form, one of the prefixes "na-" or "ne-" is added as well. -- - In some cases, a preverbal particle such as /ê/ or /dê/ is added before -- the conjugated verb as well. -- Not: - The "negPreverb" (preverb (bi-/di-) for negative tenses) parameter has a -- value different from "nil" only for the Imperfect tense ("negPreverb=di"). -- - The parameter "negPrefix=na" is used only for the present indicative. -- -- Preverb "di", used in: "indPresent"(present stem), "indImperfect"(past stem) -- - Bo neyînî: pêşgira "di-" tenê di nav dema "IndImperfect" de tê bikaranîn. -- Preverb "bi", used in: "indFuture"(present stem), "subPresent"(present stem), -- "subImperfect"(past stem) = "condPresent"(past stem) -- - The prefix "bi-" isn't used in negative forms. -- -- Present stem, used in: "indPresent"(di)(na), -- "indFuture"(bi)(ne) = "subPresent"(bi)(ne) -- -- Past stem, used in: "indPreterite"(-)(ne), "indImperfect"(di)(ne), "indPluperfect"(-)(ne), -- "indPerfect"(-)(ne), "indNwPluperfect"(-)(ne), "indFuturePerfect"(-)(ne), -- "subPreterite"(-)(ne), -- "subImperfect"(bi)(ne) = "condPresent"(bi)(ne), -- "subPluperfect"(-)(ne) = "condPreterite"(-)(ne) -- ============================================================================= -- Some conjugations are identical except that they differ only in the preverbal particle (/ê/, /dê/). -- So, to avoid repeating the same information (and thus risking errors), -- we establish the common part shared between these verbs. local sharedTenseRules = { indFuture = { stem = "present", preverb = getPreverb['bi'], negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['present'] }, indFuturePerfect = { stem = "past", preverb = nil, negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['ibim'] }, subImperfect = { stem = "past", preverb = getPreverb['bi'], negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['ama'] }, subPluperfect = { stem = "past", preverb = nil, negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['ibûma'] } } local mt = { __index = function(t, k) local commonRules = t._commonRules if commonRules then return commonRules[k] end end } -- TENSES CONJUGATION RULES export.tenseRules = { -- IMPERATIVE MOOD impPresent = setmetatable({ name = "impPresent", nameKu = "raweya fermanî", nameEn = "present imperative", mode = "imperative", _commonRules = sharedTenseRules.indFuture, preverbParticle = nil }, mt), -- INDICATIVE MOOD indPresent = { name = "indPresent", nameKu = "dema niha", nameEn = "present", mode = "indicative", stem = "present", preverb = getPreverb['di'], negPreverb = nil, negPrefix = getNegPrefix['na'], endings = getEndings['present'], preverbParticle = nil }, indPreterite = { name = "indPreterite", nameKu = "raboriya sade", nameEn = "simple past", mode = "indicative", stem = "past", preverb = nil, negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['past'], preverbParticle = nil }, indImperfect = { name = "indImperfect", nameKu = "raboriya berdest", nameEn = "Imperfect", mode = "indicative", stem = "past", preverb = getPreverb['di'], negPreverb = getPreverb['di'], negPrefix = getNegPrefix['ne'], endings = getEndings['past'], preverbParticle = nil }, indPluperfect = { name = "indPluperfect", nameKu = "raboriya dûr", nameEn = "pluperfect", mode = "indicative", stem = "past", preverb = nil, negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['ibûm'], preverbParticle = nil }, indFuture = setmetatable({ name = "indFuture", nameKu = "dema bê", nameEn = "future", mode = "indicative", _commonRules = sharedTenseRules.indFuture, preverbParticle = 'ê' }, mt), indFuturePerfect = setmetatable({ name = "indFuturePerfect", nameKu = "dahatiya pêş", nameEn = "future perfect", mode = "indicative", _commonRules = sharedTenseRules.indFuturePerfect, preverbParticle = 'ê' }, mt), -- In some books, the "perfect" and "nonconfirmative pluperfect" tenses -- are classified in the "inferential mood" ("moda neşahidî"). -- Currently we classify them using the indicative mood (at the end). indPerfect = { name = "indPerfect", nameKu = "raboriya dûdar", nameEn = "perfect", mode = "indicative", stem = "past", preverb = nil, negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['ime'], preverbParticle = nil }, indNwPluperfect = { name = "indNwPluperfect", nameKu = "çîrokiya boriya dûdar", nameEn = "non-witnessed pluperfect", mode = "indicative", stem = "past", preverb = nil, negPreverb = nil, negPrefix = getNegPrefix['ne'], endings = getEndings['ibûme'], preverbParticle = nil }, -- SUBJUNCTIVE MOOD subjPresent = setmetatable({ name = "subjPresent", nameKu = "dema nihaya xwestekî", nameEn = "present subjunctive", mode = "subjunctive", _commonRules = sharedTenseRules.indFuture, preverbParticle = nil }, mt), subjPreterite = setmetatable({ name = "subjPreterite", nameKu = "dema boriya xwestekî", nameEn = "preterite subjunctive", mode = "subjunctive", _commonRules = sharedTenseRules.indFuturePerfect, preverbParticle = nil, }, mt), subjImperfect = setmetatable({ name = "subjImperfect", nameKu = "raboriya bilaniyê", nameEn = "imperfect subjunctive", mode = "subjunctive", _commonRules = sharedTenseRules.subImperfect, preverbParticle = nil, }, mt), subjPluperfect = setmetatable({ name = "subjPluperfect", nameKu = "raboriya dûr a bilaniyê", nameEn = "pluperfect subjunctive", mode = "subjunctive", _commonRules = sharedTenseRules.subPluperfect, preverbParticle = nil }, mt), -- CONDITIONAL MOOD condPresent = setmetatable({ name = "condPresent", nameKu = "çîrokiya dema nihaya mercî", nameEn = "present conditional", mode = "conditional", _commonRules = sharedTenseRules.subImperfect, preverbParticle = 'ê' }, mt), condPreterite = setmetatable({ name = "condPreterite", nameKu = "dema boriya mercî", nameEn = "preterite conditional", mode = "conditional", _commonRules = sharedTenseRules.subPluperfect, preverbParticle = 'ê' }, mt), } -- ============================================================================= -- MAIN CONJUGATION FUNCTOIN -- This function returns an array containing the conjugation table for a given -- tense as well as other information about the conjugated verb. -- ============================================================================= function export.conjugate(opts) opts = opts or {} -- Required parameters local tense = opts.tense or error("'tense' required", 2) --One of the two parameters is required: -- - If the tense uses the present stem, indicate "presentStem". -- - If it uses the past stem, indicate "pastStem". local presentStem = opts.presentStem local pastStem = opts.pastStem -- Optional parameters local isTransitive = opts.isTransitive or false -- Indicate if the verb is transitive (true/false) local isNegative = opts.isNegative or false -- Indicate if it's the negative form (true/false) local isCompoundVerb = opts.isCompoundVerb or false -- Indicate if it's a compound verb (true/false) local preSimpleVerb = opts.preSimpleVerb or '' -- The part before the simple verb local postSimpleVerb = opts.postSimpleVerb or '' -- The part after the simple verb -- These parameters are provided when the verb is irregular. -- Allows you to manually modify preverbs ("bi-"" or "di-") -- and negation prefixes ("na-" or "ne-") local overrideBi = opts.overrideBi or nil local overrideDi = opts.overrideDi or nil local overrideNa = opts.overrideNa or nil local overrideNe = opts.overrideNe or nil -- By default, the negation of the imperative is constructed from the prefix "me-"". -- To obtain the second variant, the prefix with "ne-", you must specify "impNegForm=2". local impNegForm = opts.impNegForm or nil -- If "tags='na'", remove links/tags local tags = opts.tags or 'erê' -- If addPreverbParticles='na', remove preverb particles (ê/dê) before -- the conjugated verbs. local addPreverbParticles = opts.addPreverbParticles or 'erê' -- Accent/ Devok local accent = opts.accent -- We add a space to the left of the "postSimpleVerb" because it shouldn't be attached -- to the simple verb. if (postSimpleVerb ~= '' and postSimpleVerb ~=nil) then postSimpleVerb = ' ' .. postSimpleVerb end -- Access to the classification table and retrieval of verb tense parameters local infoTense = deepCopy(export.tenseRules[tense], 'copy') or false -- We check that this tense is indeed in table "tenseRules". if (not infoTense) then return '<span style="color:red">Unknown tense: ' .. tense ..'</span>' end -- We check that one of the two parameters of the stem is given if (infoTense.stem == 'present' and not presentStem) then return '<span style="color:red">presentStem parameter required</span>' elseif (infoTense.stem == 'past' and not pastStem) then return '<span style="color:red">pasttStem parameter required</span>' end -- Choice between the present stem or past stem local stem = (infoTense.stem == 'present') and presentStem or pastStem --──────────────────────────── -- Conjugation construction -- -- ─────────────────────────── local preverb = '' local negPrefix = '' -- Ruturns the verb type: "simpleVerb" or "preverbVerb" or "compoundVerb" local verbStruct = export.verbStruct(isCompoundVerb, preSimpleVerb) if isNegative then negPrefix = infoTense.negPrefix{stem=stem, tenseName=tense, impNegForm=impNegForm, overrideNa=overrideNa, overrideNe=overrideNe} if infoTense.negPreverb then preverb = infoTense.negPreverb{stem=stem, verbStruct=verbStruct, overrideBi=overrideBi, overrideDi=overrideDi} end else if infoTense.preverb then preverb = infoTense.preverb{stem=stem, verbStruct=verbStruct, overrideBi=overrideBi, overrideDi=overrideDi} end end infoTense.conj = {} local spacing = isCompoundVerb and ' ' or '' local endings = infoTense:endings(stem) if (infoTense.stem == 'present') then endings = endings['std'] if (accent == 'rojhilatî') then endings = endings['rojhilatî'] end end local preverbParticles = export.getPreverbParticules(infoTense.preverbParticle, infoTense.stem, isTransitive) local isErgative = isTransitive and (infoTense.stem == 'past') -- Creating the conjugation table for a given tense for _, pers in ipairs(export.order) do local ending local conjSimbleVerb local conjVerb if isErgative then ending = endings.s3 else ending = endings[pers] end -- Adding space after the preverbal particle, and -- if "addPreverbParticles='na'": remove preverb particles (ê/dê). local preverbParticle = '' if infoTense.preverbParticle and addPreverbParticles ~= 'na' then preverbParticle = preverbParticles[pers] .. ' ' end conjSimbleVerb = negPrefix .. preverb .. stem .. ending -- Adding prefixe and suffixe conjVerb = preSimpleVerb .. spacing .. conjSimbleVerb .. postSimpleVerb -- Spelling correction(îy -> iy) conjVerb = mw.ustring.gsub(conjVerb, 'îy', 'iy') -- Add a link / if tags='na' no links if tags ~= 'na' then conjVerb = link{term=conjVerb, lang=langKu} end -- Addition of the preverbal particle infoTense.conj[pers] = preverbParticle .. conjVerb end -- Imperative if (infoTense.name == 'impPresent') then infoTense.conj.s1 = nil infoTense.conj.s2 = infoTense.conj.s3 infoTense.conj.s3 = nil infoTense.conj.p1 = nil -- infoTense.conj.p2 = infoTense.conj.p2 infoTense.conj.p3 = nil end return infoTense end -- ============================================================================= -- END -- ============================================================================= -- Some useful tools -- ============================================================================= -- Returns the list of verb tenses export.tensesList = function() local list = {} for _, tense in pairs(export.tenseRules) do table.insert(list, tense.name) end return list end -- Concatenation of pronouns and conjugated verbs -- (for a given conjugate tense in all persons of that tense) function export.concatPronomsVerbs(pronoms, conjVerbs) local concatTab = {} for _, pers in ipairs(export.order) do concatTab[pers] = pronoms[pers] .. ' ' .. conjVerbs[pers] end return concatTab end -- ============================================================================= -- ADDITIONAL STEM OF THE PAST AND PRESENT (pastStem2, ... and presentStem2, ...) -- This function does nothing more than add additional parameters for verb stems -- in the past and present tenses. -- Conjugations for the different stems will be separated by "/" -- ============================================================================= function export.conjugateLong(baseOpts, tense, presentStems, pastStems) local opts = baseOpts or {} opts.tense = tense or nil presentStems = presentStems or {} pastStems = pastStems or {} local infoTense = deepCopy(export.tenseRules[tense], 'copy') or false -- We check that this tense is indeed in table "tenseRules". if not infoTense then return '<span style="color:red">Unknown tense: ' .. tense ..'</span>' end local stems = (infoTense.stem == 'present') and presentStems or pastStems -- For each verb stem, its conjugation table is calculated and stored in conjTabs. local conjTabs = {} for i = 1, #stems do if stems[i] then if (infoTense.stem == 'past') then opts.pastStem = stems[i] end if (infoTense.stem == 'present') then opts.presentStem = stems[i] end local conj = export.conjugate(opts).conj table.insert(conjTabs, conj) end end -- We concatenate each row of the conjugation tables. local concatConjTabs = {} for _, pers in ipairs(export.order) do local frag = {} for i = 1, #conjTabs do local val = conjTabs[i][pers] if val then table.insert(frag, tostring(val)) end end concatConjTabs[pers] = table.concat(frag, " / ") end infoTense.conj = concatConjTabs return infoTense end -- ==================================================================================== -- VERB CONUGATION IN ALL TENSES WITH OR WITHOUT PRONOUMS -- ==================================================================================== function export.conjugateAllTenses(baseOpts, presentStems, pastStems, negation, concatPrs) -- "concatPrs=false" table without pronouns local opts = baseOpts or {} if negation == 'negative' then opts.isNegative = true end -- Concatenation of pronouns and conjugated verbs local concatPronomsVerbs = export.concatPronomsVerbs -- Tenses list local tensesList = export.tensesList() -- Conjugation in all tenses local conjTab = {} for _, tense in ipairs(tensesList) do local infoTense = deepCopy(export.tenseRules[tense], 'copy') -- We create the conjugation table without the pronouns. conjTab[tense] = deepCopy(export.conjugateLong(opts, tense, presentStems, pastStems), 'copy') -- We concatenate the pronouns and the verbs if "concatPrs" is different of "false" -- No pronouns for the imperative mood if (tense ~= 'impPresent' and concatPrs ~= false) then local pronoms = deepCopy(export.conjPronouns(infoTense.stem, infoTense.mode, opts.isTransitive)) conjTab[tense].conj = concatPronomsVerbs(pronoms, conjTab[tense].conj) end end return conjTab end -- ==================================================================================== -- Allows you to obtain a given conjugation from a model. -- Ex. {{#invoke:ku-tewandin|tew|dem=indPresent|kes=s1}} -- See {{ku-tewîn-lk-niha}} -- ==================================================================================== function export.tew(frame) local args = frame:getParent().args local baseOpts = { isNegative = frame.args['neyînî'] or false, isTransitive = args['form'], isCompoundVerb = args['valahî'] or false, preSimpleVerb = args['pêşgir'] or nil, postSimpleVerb = args['paşgir'] or nil, tags = args['lînk'] or 'erê', overrideBi = args['bi'] or nil, overrideDi = args['di'] or nil, overrideNa = args['na'] or nil, overrideNe = args['ne'] or nil, impNegForm = nil } local tense = frame.args['dem'] or nil local pers = frame.args['kes'] or nil local presentStems = {args['niha'], args['niha2'], args['niha3']} local pastStems = {args['borî'], args['borî2'], args['borî3']} -- A few checks if (baseOpts.isTransitive == 'gerguhêz') then baseOpts.isTransitive = true elseif (baseOpts.isTransitive == 'negerguhêz') then baseOpts.isTransitive = false else return '<span style="color:red">form = gerguhêz / negerguhêz</span>' end if (baseOpts.isCompoundVerb == 'erê') then baseOpts.isCompoundVerb = true else baseOpts.isCompoundVerb = false end if (baseOpts.isNegative == 'erê') then baseOpts.isNegative = true end local tabConj = export.conjugateLong(baseOpts, tense, presentStems, pastStems).conj return tabConj[pers] end -- ==================================================================================== -- GET COMMMA SEPARED FORMS -- Bnr. [[MediaWiki:Gadget-QQ.js]] -- Ex. {{#invoke:ku-tewandin|get_comma_separated_forms|niha=kev|borî=ket}} -- ==================================================================================== function export.get_comma_separated_forms(frame) local opts = { presentStem = frame.args['niha'], pastStem = frame.args['borî'], isTransitive = false, isNegative = false, isCompoundVerb = frame['valahî'] or false, preSimpleVerb = frame['pêşgir'] or '', postSimpleVerb = frame['paşgir'] or '', overrideBi = frame['bi'] or nil, overrideDi = frame['di'] or nil, overrideNa = frame['na'] or nil, overrideNe = frame['ne'] or nil, impNegForm = nil, tags = 'na', -- Remove links/tags addPreverbParticles = 'na' -- Remove preverb particles (ê/dê) } local function concateList(tenseList) local concatList = {} for _, pers in ipairs({"s1", "s2", "s3", "p1"}) do local tense = tenseList[pers] table.insert(concatList, tense) end return table.concat(concatList, ",") end local tenseList = {'indPresent','indPreterite','indImperfect', 'indPluperfect','indPerfect','indNwPluperfect', 'indFuture','indFuturePerfect', 'subjImperfect','subjPluperfect' } local concatAllTense = {} for i = 1, #tenseList do local tense = tenseList[i] if export.tenseRules[tense] then opts.tense = tense local conj = shallowCopy(export.conjugate(opts).conj) local concatTense = concateList(conj) table.insert(concatAllTense, concatTense) end end return table.concat(concatAllTense, ",") end return export 99pnykdcaktnfrjb8wg8ghrh5e6z1r1 Modul:ku-tewandin/tabloGotar 828 1357097 6237260 6237228 2026-06-07T15:23:54Z Ghybu 1393 6237260 Scribunto text/plain -- ==================================================================================== -- Modula tabloya gotaran, bikaranîn: {{ku-tewîn-lk}} -- Ji bo tabloya mezin, bnr. [[Modul:ku-tewandin/tablo]] -- Ji bo stîla vê tabloyê, bnr. {{ku-tewîn-nav/style.css}} -- ==================================================================================== local export = {} local conj = require('Modul:ku-tewandin') function export.tew(frame) local args = frame:getParent().args local baseOpts = { isTransitive = args['form'], isNegative = false, isCompoundVerb = args['valahî'] or false, preSimpleVerb = args['pêşgir'] or nil, postSimpleVerb = args['paşgir'] or nil, accent = args['devok'] or 'std', overrideBi = args['bi'] or nil, overrideDi = args['di'] or nil, overrideNa = args['na'] or nil, overrideNe = args['ne'] or nil, impNegForm = nil, -- tags = 'erê', -- addPreverbParticles = 'erê' } local presentStems = {args['niha'], args['niha2'], args['niha3']} local pastStems = {args['borî'], args['borî2'], args['borî3']} if (baseOpts.isTransitive == 'gerguhêz') then baseOpts.isTransitive = true elseif (baseOpts.isTransitive == 'negerguhêz') then baseOpts.isTransitive = false else return '<span style="color:red">form = gerguhêz / negerguhêz</span>' end if (baseOpts.isCompoundVerb == 'erê') then baseOpts.isCompoundVerb = true else baseOpts.isCompoundVerb = false end -- Retrieving conjugation tables for different tenses local indPresent = conj.conjugateLong(baseOpts, 'indPresent', presentStems, pastStems).conj local impPresent = conj.conjugateLong(baseOpts, 'impPresent', presentStems, pastStems).conj local indPreterite = conj.conjugateLong(baseOpts, 'indPreterite', presentStems, pastStems).conj -- Past pronouns for preterite tense local prtPronouns = conj.conjPronouns('past', 'indicative', baseOpts.isTransitive) -- ========================================================================= -- TABLE -- ========================================================================= -- Construction of the verbal stems for the table title ("rehNiha" and "rehBori") local verb = args[1] or mw.title.getCurrentTitle().subpageText local transitivity = args['form'] local preSimpleVerb = args['pêşgir'] or '' local postSimpleVerb = args['paşgir'] or '' local sameConjAs = args['wekî'] or nil local prsStemsFormat = {} for _, stem in ipairs(presentStems) do if stem then prsStemsFormat[#prsStemsFormat+1] = preSimpleVerb .. '-' .. stem ..'-' end end local pstStemsFormat = {} for _, stem in ipairs(pastStems) do if stem then pstStemsFormat[#pstStemsFormat+1] = preSimpleVerb .. '-' .. stem ..'-' end end local prsStems = table.concat(prsStemsFormat, ' / ') .. postSimpleVerb local pstStems = table.concat(pstStemsFormat, ' / ') .. postSimpleVerb -- Formata "Raweya pêşkerî" (RP.) local indTitle = '<span style="cursor:help;" title="Raweya pêşkerî">' .. '<span style="border-bottom: 1px dotted #555555; ">RP.</span>' .. '</span>' local function nobold(str) return '<span style="font-weight:normal;"> '.. str .. '</span>' end -- Preloads [[Şablon:ku-tewandin/preload]] local function preloadUrl(title, preload) local params = { args['form'], args['niha'], args['niha2'] or nil, args['niha3'] or nil, args['borî'], args['borî2'] or nil, args['pêşgir'] or nil, args['valahî'] or nil, args['paşgir'] or nil } local query = { action = 'edit', preload = preload, ['preloadparams'] = params } local url = mw.uri.fullUrl(title, query) url = '<span class="plainlinks">[' .. tostring(url) .. ' <span style="color:#9f3526">'.. title .. '</span>' .. ']</span>' return url end -- Formên din local otherConjForms if (mw.title.new(verb, 'Tewandin').exists == true) then otherConjForms = '[['.. 'Tewandin:'.. verb ..']]' elseif sameConjAs then otherConjForms = 'wekî [['.. 'Tewandin:' .. sameConjAs ..']]' else otherConjForms = preloadUrl('Tewandin:' .. verb, 'Şablon:ku-tewandin/preload') end return '{| class="wikitable tablo-flip tewandin-tablo mw-collapsible"' .. '\n! colspan="3" class="row-flip tewandin-header" |' .. verb .. ' ' .. nobold('('.. transitivity .. '</span>)') .. '\n|-' .. '\n! colspan="3" class="tewandin-header3" align="center" style="font-size:85%;" |' .. nobold('Rehê dema niha:') .. ' ' .. prsStems .. '\n|-' .. '\n! rowspan="5" |' .. indTitle .. '<br>Niha' .. '\n|-' .. '\n| width="60" |ez' .. '\n| width="100" |' .. indPresent.s1 .. '\n|-' .. '\n| tu' .. '\n|' .. indPresent.s2 .. '\n|-' .. '\n| ew' .. '\n|' .. indPresent.s3 .. '\n|-' .. '\n| em, hûn, ew' .. '\n| ' .. indPresent.p1 .. '\n|-' .. '\n! rowspan="2" | Fermanî' .. '\n| width="60" | <small>Yekjimar</small>' .. '\n| width="100" |' .. impPresent.s2 .. '\n|-' .. '\n| width="60" | <small>Pirjimar</small>' .. '\n| width="100" |' .. impPresent.p2 .. '\n|-' .. '\n! colspan="3" class="tewandin-header3" align="center" style="font-size:85%;" |' .. nobold('Rehê dema borî:') .. ' ' .. pstStems .. '\n|-' .. '\n! rowspan="5" |'.. indTitle ..'<br>Boriya<br>sade' .. '\n|-' .. '\n|' .. prtPronouns.s1 .. '\n|' .. indPreterite.s1 .. '\n|-' .. '\n|' .. prtPronouns.s2 .. '\n|' .. indPreterite.s2 .. '\n|-' .. '\n|' .. prtPronouns.s3 .. '\n|' .. indPreterite.s3 .. '\n|-' .. '\n|' .. prtPronouns.p1 .. ', ' .. prtPronouns.p2 .. ', ' .. prtPronouns.p3 .. '\n|' .. indPreterite.p1 .. '\n|-' .. '\n| colspan="3" style="text-align:center; background-color:#transparent;" |' .. 'Formên din: [[Wêne:1rightarrow.png|15px|link=]]' .. otherConjForms .. '\n|}' end return export 4z5xo3sclt24l3y53u9f1rjnesqaaw1 6237263 6237260 2026-06-07T17:41:11Z Ghybu 1393 + rojhilatî 6237263 Scribunto text/plain -- ==================================================================================== -- Modula tabloya gotaran, bikaranîn: {{ku-tewîn-lk}} -- Ji bo tabloya mezin, bnr. [[Modul:ku-tewandin/tablo]] -- Ji bo stîla vê tabloyê, bnr. {{ku-tewîn-nav/style.css}} -- ==================================================================================== local export = {} local conj = require('Modul:ku-tewandin') function export.tew(frame) local args = frame:getParent().args local baseOpts = { isTransitive = args['form'], isNegative = false, isCompoundVerb = args['valahî'] or false, preSimpleVerb = args['pêşgir'] or nil, postSimpleVerb = args['paşgir'] or nil, overrideBi = args['bi'] or nil, overrideDi = args['di'] or nil, overrideNa = args['na'] or nil, overrideNe = args['ne'] or nil, impNegForm = nil, -- tags = 'erê', -- addPreverbParticles = 'erê' } local presentStems = {args['niha'], args['niha2'], args['niha3']} local pastStems = {args['borî'], args['borî2'], args['borî3']} if (baseOpts.isTransitive == 'gerguhêz') then baseOpts.isTransitive = true elseif (baseOpts.isTransitive == 'negerguhêz') then baseOpts.isTransitive = false else return '<span style="color:red">form = gerguhêz / negerguhêz</span>' end if (baseOpts.isCompoundVerb == 'erê') then baseOpts.isCompoundVerb = true else baseOpts.isCompoundVerb = false end -- Retrieving conjugation tables for different tenses local indPresent = conj.conjugateLong(baseOpts, 'indPresent', presentStems, pastStems).conj local impPresent = conj.conjugateLong(baseOpts, 'impPresent', presentStems, pastStems).conj local indPreterite = conj.conjugateLong(baseOpts, 'indPreterite', presentStems, pastStems).conj -- Devoka rojhilatî baseOpts.accent = 'rojhilatî' local indPresentRojhilati = conj.conjugateLong(baseOpts, 'indPresent', presentStems, pastStems).conj -- Past pronouns for preterite tense local prtPronouns = conj.conjPronouns('past', 'indicative', baseOpts.isTransitive) -- ========================================================================= -- TABLE -- ========================================================================= -- Construction of the verbal stems for the table title ("rehNiha" and "rehBori") local verb = args[1] or mw.title.getCurrentTitle().subpageText local transitivity = args['form'] local preSimpleVerb = args['pêşgir'] or '' local postSimpleVerb = args['paşgir'] or '' local sameConjAs = args['wekî'] or nil local prsStemsFormat = {} for _, stem in ipairs(presentStems) do if stem then prsStemsFormat[#prsStemsFormat+1] = preSimpleVerb .. '-' .. stem ..'-' end end local pstStemsFormat = {} for _, stem in ipairs(pastStems) do if stem then pstStemsFormat[#pstStemsFormat+1] = preSimpleVerb .. '-' .. stem ..'-' end end local prsStems = table.concat(prsStemsFormat, ' / ') .. postSimpleVerb local pstStems = table.concat(pstStemsFormat, ' / ') .. postSimpleVerb -- The second person singular may or may not be identical depending -- on the last letter of the root local indPresent2 = indPresent.s2 if indPresent.s2 ~= indPresentRojhilati.s2 then indPresent2 = indPresent.s2 .. '<br>' .. indPresentRojhilati.s2 .. '<small style="color:gray;font-style:italic; font-weight:bold"> (rojh.)</small>' end -- Formata "Raweya pêşkerî" (RP.) local indTitle = '<span style="cursor:help;" title="Raweya pêşkerî">' .. '<span style="border-bottom: 1px dotted #555555; ">RP.</span>' .. '</span>' local function nobold(str) return '<span style="font-weight:normal;"> '.. str .. '</span>' end -- Preloads [[Şablon:ku-tewandin/preload]] local function preloadUrl(title, preload) local params = { args['form'], args['niha'], args['niha2'] or nil, args['niha3'] or nil, args['borî'], args['borî2'] or nil, args['pêşgir'] or nil, args['valahî'] or nil, args['paşgir'] or nil } local query = { action = 'edit', preload = preload, ['preloadparams'] = params } local url = mw.uri.fullUrl(title, query) url = '<span class="plainlinks">[' .. tostring(url) .. ' <span style="color:#9f3526">'.. title .. '</span>' .. ']</span>' return url end -- Formên din local otherConjForms if (mw.title.new(verb, 'Tewandin').exists == true) then otherConjForms = '[['.. 'Tewandin:'.. verb ..']]' elseif sameConjAs then otherConjForms = 'wekî [['.. 'Tewandin:' .. sameConjAs ..']]' else otherConjForms = preloadUrl('Tewandin:' .. verb, 'Şablon:ku-tewandin/preload') end return '{| class="wikitable tablo-flip tewandin-tablo mw-collapsible"' .. '\n! colspan="3" class="row-flip tewandin-header" |' .. verb .. ' ' .. nobold('('.. transitivity .. '</span>)') .. '\n|-' .. '\n! colspan="3" class="tewandin-header3" align="center" style="font-size:85%;" |' .. nobold('Rehê dema niha:') .. ' ' .. prsStems .. '\n|-' .. '\n! rowspan="6" |' .. indTitle .. '<br>Niha' .. '\n|-' .. '\n| width="60" |ez' .. '\n| width="100" |' .. indPresent.s1 .. '\n|-' .. '\n| tu' .. '\n|' .. indPresent2 .. '\n|-' .. '\n| ew' .. '\n|' .. indPresent.s3 .. '<br>' .. indPresentRojhilati.s3.. '<small style="color:gray;font-style:italic; font-weight:bold"> (rojh.)</small>' .. '\n|-' .. '\n| em' .. '\n| ' .. indPresent.p1 .. '<br>' .. indPresentRojhilati.p1 .. '<small style="color:gray;font-style:italic; font-weight:bold"> (rojh.)</small>' .. '\n|-' .. '\n| hûn, ew' .. '\n| ' .. indPresent.p2 .. '\n|-' .. '\n! rowspan="2" | Fermanî' .. '\n| width="60" | <small>Yekjimar</small>' .. '\n| width="100" |' .. impPresent.s2 .. '\n|-' .. '\n| width="60" | <small>Pirjimar</small>' .. '\n| width="100" |' .. impPresent.p2 .. '\n|-' .. '\n! colspan="3" class="tewandin-header3" align="center" style="font-size:85%;" |' .. nobold('Rehê dema borî:') .. ' ' .. pstStems .. '\n|-' .. '\n! rowspan="5" |'.. indTitle ..'<br>Boriya<br>sade' .. '\n|-' .. '\n|' .. prtPronouns.s1 .. '\n|' .. indPreterite.s1 .. '\n|-' .. '\n|' .. prtPronouns.s2 .. '\n|' .. indPreterite.s2 .. '\n|-' .. '\n|' .. prtPronouns.s3 .. '\n|' .. indPreterite.s3 .. '\n|-' .. '\n|' .. prtPronouns.p1 .. ', ' .. prtPronouns.p2 .. ', ' .. prtPronouns.p3 .. '\n|' .. indPreterite.p1 .. '\n|-' .. '\n| colspan="3" style="text-align:center; background-color:#transparent;" |' .. 'Formên din: [[Wêne:1rightarrow.png|15px|link=]]' .. otherConjForms .. '\n|}' end return export fiuy0ijahvv77umtiy9f1zxc7br5eaa 6237264 6237263 2026-06-07T23:44:41Z Ghybu 1393 Guhartoya [[Special:Diff/6237263|6237263]] yê [[Special:Contributions/Ghybu|Ghybu]] ([[User talk:Ghybu|gotûbêj]]) şûnde kir 6237264 Scribunto text/plain -- ==================================================================================== -- Modula tabloya gotaran, bikaranîn: {{ku-tewîn-lk}} -- Ji bo tabloya mezin, bnr. [[Modul:ku-tewandin/tablo]] -- Ji bo stîla vê tabloyê, bnr. {{ku-tewîn-nav/style.css}} -- ==================================================================================== local export = {} local conj = require('Modul:ku-tewandin') function export.tew(frame) local args = frame:getParent().args local baseOpts = { isTransitive = args['form'], isNegative = false, isCompoundVerb = args['valahî'] or false, preSimpleVerb = args['pêşgir'] or nil, postSimpleVerb = args['paşgir'] or nil, accent = args['devok'] or 'std', overrideBi = args['bi'] or nil, overrideDi = args['di'] or nil, overrideNa = args['na'] or nil, overrideNe = args['ne'] or nil, impNegForm = nil, -- tags = 'erê', -- addPreverbParticles = 'erê' } local presentStems = {args['niha'], args['niha2'], args['niha3']} local pastStems = {args['borî'], args['borî2'], args['borî3']} if (baseOpts.isTransitive == 'gerguhêz') then baseOpts.isTransitive = true elseif (baseOpts.isTransitive == 'negerguhêz') then baseOpts.isTransitive = false else return '<span style="color:red">form = gerguhêz / negerguhêz</span>' end if (baseOpts.isCompoundVerb == 'erê') then baseOpts.isCompoundVerb = true else baseOpts.isCompoundVerb = false end -- Retrieving conjugation tables for different tenses local indPresent = conj.conjugateLong(baseOpts, 'indPresent', presentStems, pastStems).conj local impPresent = conj.conjugateLong(baseOpts, 'impPresent', presentStems, pastStems).conj local indPreterite = conj.conjugateLong(baseOpts, 'indPreterite', presentStems, pastStems).conj -- Past pronouns for preterite tense local prtPronouns = conj.conjPronouns('past', 'indicative', baseOpts.isTransitive) -- ========================================================================= -- TABLE -- ========================================================================= -- Construction of the verbal stems for the table title ("rehNiha" and "rehBori") local verb = args[1] or mw.title.getCurrentTitle().subpageText local transitivity = args['form'] local preSimpleVerb = args['pêşgir'] or '' local postSimpleVerb = args['paşgir'] or '' local sameConjAs = args['wekî'] or nil local prsStemsFormat = {} for _, stem in ipairs(presentStems) do if stem then prsStemsFormat[#prsStemsFormat+1] = preSimpleVerb .. '-' .. stem ..'-' end end local pstStemsFormat = {} for _, stem in ipairs(pastStems) do if stem then pstStemsFormat[#pstStemsFormat+1] = preSimpleVerb .. '-' .. stem ..'-' end end local prsStems = table.concat(prsStemsFormat, ' / ') .. postSimpleVerb local pstStems = table.concat(pstStemsFormat, ' / ') .. postSimpleVerb -- Formata "Raweya pêşkerî" (RP.) local indTitle = '<span style="cursor:help;" title="Raweya pêşkerî">' .. '<span style="border-bottom: 1px dotted #555555; ">RP.</span>' .. '</span>' local function nobold(str) return '<span style="font-weight:normal;"> '.. str .. '</span>' end -- Preloads [[Şablon:ku-tewandin/preload]] local function preloadUrl(title, preload) local params = { args['form'], args['niha'], args['niha2'] or nil, args['niha3'] or nil, args['borî'], args['borî2'] or nil, args['pêşgir'] or nil, args['valahî'] or nil, args['paşgir'] or nil } local query = { action = 'edit', preload = preload, ['preloadparams'] = params } local url = mw.uri.fullUrl(title, query) url = '<span class="plainlinks">[' .. tostring(url) .. ' <span style="color:#9f3526">'.. title .. '</span>' .. ']</span>' return url end -- Formên din local otherConjForms if (mw.title.new(verb, 'Tewandin').exists == true) then otherConjForms = '[['.. 'Tewandin:'.. verb ..']]' elseif sameConjAs then otherConjForms = 'wekî [['.. 'Tewandin:' .. sameConjAs ..']]' else otherConjForms = preloadUrl('Tewandin:' .. verb, 'Şablon:ku-tewandin/preload') end return '{| class="wikitable tablo-flip tewandin-tablo mw-collapsible"' .. '\n! colspan="3" class="row-flip tewandin-header" |' .. verb .. ' ' .. nobold('('.. transitivity .. '</span>)') .. '\n|-' .. '\n! colspan="3" class="tewandin-header3" align="center" style="font-size:85%;" |' .. nobold('Rehê dema niha:') .. ' ' .. prsStems .. '\n|-' .. '\n! rowspan="5" |' .. indTitle .. '<br>Niha' .. '\n|-' .. '\n| width="60" |ez' .. '\n| width="100" |' .. indPresent.s1 .. '\n|-' .. '\n| tu' .. '\n|' .. indPresent.s2 .. '\n|-' .. '\n| ew' .. '\n|' .. indPresent.s3 .. '\n|-' .. '\n| em, hûn, ew' .. '\n| ' .. indPresent.p1 .. '\n|-' .. '\n! rowspan="2" | Fermanî' .. '\n| width="60" | <small>Yekjimar</small>' .. '\n| width="100" |' .. impPresent.s2 .. '\n|-' .. '\n| width="60" | <small>Pirjimar</small>' .. '\n| width="100" |' .. impPresent.p2 .. '\n|-' .. '\n! colspan="3" class="tewandin-header3" align="center" style="font-size:85%;" |' .. nobold('Rehê dema borî:') .. ' ' .. pstStems .. '\n|-' .. '\n! rowspan="5" |'.. indTitle ..'<br>Boriya<br>sade' .. '\n|-' .. '\n|' .. prtPronouns.s1 .. '\n|' .. indPreterite.s1 .. '\n|-' .. '\n|' .. prtPronouns.s2 .. '\n|' .. indPreterite.s2 .. '\n|-' .. '\n|' .. prtPronouns.s3 .. '\n|' .. indPreterite.s3 .. '\n|-' .. '\n|' .. prtPronouns.p1 .. ', ' .. prtPronouns.p2 .. ', ' .. prtPronouns.p3 .. '\n|' .. indPreterite.p1 .. '\n|-' .. '\n| colspan="3" style="text-align:center; background-color:#transparent;" |' .. 'Formên din: [[Wêne:1rightarrow.png|15px|link=]]' .. otherConjForms .. '\n|}' end return export 4z5xo3sclt24l3y53u9f1rjnesqaaw1 Tewandin:ketin/test 106 1357306 6237265 2026-06-07T23:46:47Z Ghybu 1393 test (devok=rojhilatî) 6237265 wikitext text/x-wiki {{ku-tewandin|ketin|form=negerguhêz|niha=kev|borî=ket|devok=rojhilatî}} e1lqxx8puxkf8evjl8a4b7jwx012ovd 6237275 6237265 2026-06-08T01:56:04Z Ghybu 1393 6237275 wikitext text/x-wiki {{jêbirin}} mn31mov4vi76vjbr02oei11l4fghv1n Tewandin:ajotin/test 106 1357307 6237266 2026-06-07T23:48:12Z Ghybu 1393 Rûpel bi "{{ku-tewandin|ajotin|form=gerguhêz|niha=ajo|borî=ajot|devok=rojhilatî}}" hat çêkirin 6237266 wikitext text/x-wiki {{ku-tewandin|ajotin|form=gerguhêz|niha=ajo|borî=ajot|devok=rojhilatî}} ge2cgvosgm1gk5d048e3dbqv77gsw4z 6237274 6237266 2026-06-08T01:55:47Z Ghybu 1393 6237274 wikitext text/x-wiki {{jêbirin}} mn31mov4vi76vjbr02oei11l4fghv1n Tewandin:kirin/test 106 1357308 6237271 2026-06-08T01:38:05Z Ghybu 1393 Rûpel bi "{{ku-tewandin|kirin|form=gerguhêz|niha=ke|borî=kir|devok=rojhilatî}}" hat çêkirin 6237271 wikitext text/x-wiki {{ku-tewandin|kirin|form=gerguhêz|niha=ke|borî=kir|devok=rojhilatî}} 2azz6srdppu1sa240zgz7c9e7j251bs Tewandin:xistin/test 106 1357309 6237272 2026-06-08T01:51:57Z Ghybu 1393 test (devok=rojhilatî) 6237272 wikitext text/x-wiki {{ku-tewandin|êxistin|form=gerguhêz|niha=êx|borî=êxist|devok=rojhilatî}} ly67gqmjm1r2stzgfav2psospmz8gzz Modul:ku-tewandin/dijrêzik 828 1357310 6237280 2026-06-08T03:19:16Z Ghybu 1393 Ghybuî/ê navê [[Modul:ku-tewandin/dijrêzik]] weke [[Modul:ku-tewandin/nestandard]] guhart 6237280 Scribunto text/plain return require [[Modul:ku-tewandin/nestandard]] 62eocbnefyuss25ixt5y8ap2ozxsjw4 6237281 6237280 2026-06-08T03:19:48Z Ghybu 1393 Beralîkirin ji bo [[Modul:ku-tewandin/nestandard]] hate jêbirin. 6237281 Scribunto text/plain --{{jêbirin}} return require [[Modul:ku-tewandin/nestandard]] ju0cobaoxw0kcfqdme7v4hta3h22b4i هم وطن 0 1357311 6237289 2026-06-08T06:01:43Z Atitarev 702 Atitarevî/ê navê [[هم وطن]] weke [[هموطن]] guhart 6237289 wikitext text/x-wiki #BERALÎKIRIN [[هموطن]] nsrq3qz4927fkmma53rw7ikj7yej61f