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 a- 0 3123 6237173 6120668 2026-06-05T14:01:16Z Kawarizgar1 14836 /* Pêşgir */ 6237173 wikitext text/x-wiki {{binêre herwiha/a}} == {{ziman|ku}} == === Pêşgir === {{pêşgir|ku}} # [[tam]], di nêzîktirîn demê an cihî de #:<i><b>a</b>niha, <b>a</b>nêzîk</i> <b>a</b>vira</i> # [[pêş]], [[pêşve]], [[ber bi ... ve]] (bo çend nimûneyan binere): [[anîn]], [[asteng]], [[avêtin]], [[hatin]] ==== Bide ber ==== * [[a]] * [[-a]] * [[-a-]] ==== Jê ==== {{pêşgirbibîne|ku}} == {{ziman|en}} == === Bilêvkirin === * {{deng|en|LL-Q1860 (eng)-VGPaleontologist-a-.wav|Deng|dever=Teksas, DYA}} === Pêşgir === {{pêşgir|en}} # [[bê]] # [[li]], [[li ser]]; # [[di]] ==== Jê ==== {{pêşgirbibîne|en}} {{kol3|en |atonality |asexuality |amoral |anarchy |abed |asleep }} == {{ziman|la}} == === Pêşgir === {{pêşgir|la}} # [[dûr]]î hev # [[ji]], jê [[dûr]]; # [[bitemamî]] # di [[nebûn]]a... de ==== Bikaranîn ==== * berî bêdengan ji bilî "c" an "t" * berî "f" dibe "au" * berî "p" dibe "as" ==== Jê ==== {{kol3|la |auferre |asportare }} 1285ie3pg77ggq95plr78p1lg1lb8za hêlan 0 12327 6237212 6211809 2026-06-05T16:41:25Z Ghybu 1393 /* Hevmane */ 6237212 wikitext text/x-wiki {{bnr-h|helan}} == {{ziman|ku}} == === Bilêvkirin === * {{ku-IPA}} * {{deng|ku|LL-Q36163 (kmr)-Ebulfîda-hêlan.wav|Deng|Bidlîs}} * {{ku-kîte}} === Lêker === {{ku-tewîn-lk|hêlan|form=gerguhêz|niha=hêl|borî=hêla}} {{lêker|ku|c=x-gh}} # [[hiştin]], [[hêştin]], [[hîştin]], [[hêladin]] #* {{bêmînak|ku}} # [[berdan|Berdan]], [[dest jê berdan]], [[dev jê berdan]]. #: {{mk|ku|Min karê xwe '''nehêlaye'''.}} # [[çûn|Çûn]] û li gel xwe ne[[birin]]. #: {{mk|ku|Wî zarrokên xwe li Kurdistanê '''hêlan''' û hat Elmanyayê.}} # Jê [[cuda]] bûn, [[jê veqetîn]], li gel ne[[man]]. #: {{mk|ku|Çend sal in ku wî jina xwe '''hêlaye'''?}} # [[destûr|Destûr]] dan, [[rê]] dan, [[izin]] dan, [[pejirandin]], [[qebûl]] kirin. #: {{mk|ku|Polîs '''nahêlin''' em newrozê pîroz bikin.}} # Amûrek bi benik li hewa girêdayiye û zarok tê de xwe doş dikin. #: {{mk|ku|Ji '''hêlanê''' ket û serê xwe şikand.}} ==== Hevmane ==== {{kol3|ku | hiştin | hêştin | hîştin | hêliştin | hilîştin | hêladin | hêlandin }} ==== Jê ==== {{stûn| * {{mj|lêker}} [[hêlan çûn]] * {{mj|navdêr}} [[hêlançûn]] * [[hêlayî]] }} ==== Etîmolojî ==== Ji {{ji|ira-pro|ku|*herz-|w=hêlan, hiştin, rê dan}}, ji {{ji|ine-pro|ku|*selg-|w=hêlan, hiştin, rê dan}}. Hevreha {{ae}}: '''herşte'''-/'''harezāna-'''- ("hêlan, hiştin, rê dan"), {{peo}}: '''aveherd'''- ("rê dan"), {{xpr}}: '''hyrz'''- ("rê dan"), {{pal}}: '''hyl'''- ("rê dan"), {{fa}}: '''hiştan/hil'''- ("rê dan"), {{bal}}: '''hişt/hill'''- ("rê dan") … {{ir}}, {{gil}}: '''aşten/āl'''- ("rê dan"), {{kmr}}: '''hiştin/hêl'''- ("hiştin, rê dan"), {{ckb}}: '''[[hiştin]]/hêll'''- ("hiştin, rê dan"), {{hac}}: '''aştey/āz'''- ("rê dan"), ({{zza}}: '''verdayene/verda'''-) ("hiştin, rê dan"), {{sa}}: '''sarj''' ("hêlan, hiştin, rê dan "), {{hit}}: '''salk''', {{en}}: '''[[sulky]]''' <font style="font-size:10px">'''Çavkanî:''' [[Şablon:Cheung|Cheung p.133]]</font> ==== Werger ==== {{werger-ser}} * {{Z|af}}: {{W+|af|laat}} * {{Z|de}}: {{W+|de|lassen}}, {{W+|de|überlassen}}, {{W+|de|unterlassen}}, {{W+|de|zurücklassen}}, {{W+|de|erlauben}}, {{W+|de|gestatten}}, {{W|de|befugen}}, {{W|de|bewilligen}}, {{W|de|billigen}}, {{W|de|Duldung|f}}, {{W|de|einlassen}}, {{W|de|gewähren}}, {{W|de|Überlassung|f}}, {{W|de|verschonen}}, {{W|de|vorenthalten}}, {{W|de|zulassen}}, {{W|de|zusagen}}, {{W|de|aufhören}} * {{Z|cs}}: {{W+|cs|nechat}} * {{Z|da}}: {{W+|da|løslade}} * {{Z|id}}: {{W+|id|biar}}, {{W+|id|membiarkan}}, {{W+|id|meninggalkan}} * {{Z|ar}}: {{W|ar|الترك}}, {{W|ar|الإقلاع}}, {{W|ar|الهجـران}}, {{W|ar|تورع|guman=erê}}, {{W|ar|الإبقاء|guman=erê}}, {{W|ar|التلبیث|guman=erê}}, {{W|ar|التودیع|guman=erê}}, {{W|ar|المتاركة|guman=erê}} * {{Z|eo}}: {{W+|eo|lasi}} * {{Z|et}}: {{W+|et|jätma}}, {{W+|et|laskma}}, {{W+|et|lubama}} * {{Z|fa}}: {{W+|fa|گذاشتن}}, {{W+|fa|مساعدت کردن}}, {{W+|fa|رخصت دادن}}, {{W+|fa|اجازه دادن}}, {{W+|fa|برجای گذاشتن}}, {{W+|fa|برجاگذاشتن}}, {{W+|fa|دست آوردن}} * {{Z|fo}}: {{W+|fo|lata}}, {{W+|fo|sleppa}}, {{W+|fo|sleppa undan}} * {{Z|fi}}: {{W|fi|jättää}}; [[sallia]] * {{Z|fr}}: {{W+|fr|laisser}} * {{Z|nl}}: {{W+|nl|laten}}, {{W+|nl|laten begaan}}, {{W+|nl|laten schieten}}, {{W+|nl|loslaten}}, {{W+|nl|toelaten}} * {{Z|he}}: {{W|he|נטש|cuda=נטשׁ}} * {{Z|io}}: {{W+|io|lasar}} * {{Z|en}}: {{W|en|leave}} (1), {{W|en|let}} (2), {{W+|en|allow}}, {{W+|en|release}}, {{W+|en|abandonment}}, {{W+|en|permit}}, {{W+|en|unchain}}, {{W+|en|abandon}}, {{W+|en|adhibit}}, {{W+|en|omit}}, {{W+|en|resign}}, {{W+|en|sustain}}, {{W+|en|swing}}, {{W+|en|yield}}, {{W|en|connivance|guman=erê}}, {{W|en|connive|guman=erê}}, {{W|en|conniving|guman=erê}}, {{W|en|deliquesce|guman=erê}}, {{W|en|disaffiliate|guman=erê}}, {{W|en|lay aside|guman=erê}}, {{W|en|lay by|guman=erê}}, {{W|en|leave something out|guman=erê}}, {{W|en|leaving|guman=erê}}, {{W|en|let be|guman=erê}}, {{W|en|let up|guman=erê}}, {{W|en|letting|guman=erê}}, {{W|en|omission|guman=erê}}, {{W|en|permitting|guman=erê}}, {{W|en|skipping|guman=erê}}, {{W|en|spurn|guman=erê}}, {{W|en|unhand|guman=erê}} * {{Z|it}}: {{W+|it|lasciare}} * {{Z|ca}}: {{W+|ca|deixar}} * {{Z|hu}}: {{W+|hu|enged}} * {{Z|nb}}: {{W|nb|tillate}} * {{Z|no}}: {{W+|no|forlate}} * {{Z|pap}}: {{W+|pap|laga}} * {{Z|pl}}: {{W+|pl|zostawić}}, {{W+|pl|puścić}} * {{Z|pt}}: {{W+|pt|deixar}}, {{W+|pt|largar}}, {{W+|pt|permitir}} * {{Z|ro}}: {{W+|ro|lăsa}}, {{W+|ro|da voie}} * {{Z|ru}}: {{W+|ru|пускать}}, {{W+|ru|пустить}} * {{Z|es}}: {{W+|es|dejar}} * {{Z|sw}}: {{W+|sw|kuacha}} * {{Z|tr}}: {{W+|tr|bırakmak}}, {{W+|tr|izin vermek}}, {{W+|tr|salıncak}}, {{W+|tr|terk etmek}}, {{W+|tr|tevdi etmek}}, {{W+|tr|geçilmek}}, {{W+|tr|koyuvermek}}, {{W+|tr|kayşamak}}, {{W+|tr|alıkoymak}} {{werger-bin}} === Navdêr 1 === {{ku-tewîn-nav|hêlan|mê}} {{navdêr|ku|z=m}} # [[deng|Dengê]] ji [[der]]ekê tê û li derek din [[dubare]] dibe. #: {{hevmane|ku|olan|vedeng|dengvedan}} #: {{mk|ku|A bi wî awayî, 1ê Çile ya 1931ê li bajarê Yêrêvanê, Têxnîkoma Mamostetiyê ya Kurdî a Pişkavkazê bi şayanetî vebû. Gerekê bê gotinê ewê wisa jî '''hêlaneke''' gur da edebiyat û medeniyeta kurdî ya Pişkavkazê, mehkembûna heleqetiyên hemû kurdên Tifaqa Sovyêtê.}} ==== Werger ==== {{werger-ser}} * {{Z|tr}}: {{W+|tr|bırakım}}, {{W+|tr|göçük}}, {{W+|tr|terk}}, {{W+|tr|teslim}}, {{W+|tr|tevdi}}, {{W+|tr|bırakma}}, {{W+|tr|koyuverme}}, {{W+|tr|bağışlama}} {{werger-bin}} {{bend}} === Navdêr 2 === {{navdêr|ku|z=m}} # [[hêlekan]], [[colank]] #* {{bêmînak|ku}} ==== Etîmolojî ==== {{etîmolojî?}} ==== Werger ==== {{werger-ser}} * {{Z|tr}}: {{W|tr|salıncak}} {{werger-bin}} qm2yw0tzm6v1z9s45cq40syrivhvfwm hiştin 0 12328 6237195 6103921 2026-06-05T16:02:15Z Ghybu 1393 /* {{ziman|ku}} */ 6237195 wikitext text/x-wiki == {{ziman|ku}} == === Bilêvkirin === * {{ku-IPA}} * {{deng|ku|LL-Q36163 (kmr)-Ebulfîda-hiştin.wav|Deng|Bidlîs}} * {{ku-kîte}} === Lêker === {{ku-tewîn-lk|hiştin|form=gerguhêz|niha=hêl|borî=hişt}} {{lêker|ku|c=x-gh}} # [[çûn|Çûn]] û li gel xwe ne[[birin]], dev jê berdan. #: {{mk|ku|Wî zarokên xwe li Kurdistanê '''hişt''' û hat Elmanyayê.}} #* {{jêder|ku|{{Jêgirtin/Melayê Cizîrî/Dîwana Melayê Cizirî}}|jêgirtin=Ez kirim yekser pilox<br />Dest '''nehêlim''' ez ji dînê<br />Şubhê Ferhad û Şirînê}} # [[destûr|Destûr]] dan, [[rê]] dan, [[izin]] dan, [[pejirandin]], [[qebûl]] kirin. #: {{mk|ku|Ew ne '''hişt''' ez wilo bikim.}} #* {{jêder|ku|2=Mihyedîn Nahrîn, ''Perwerdeya Zarokan Bi Çîrokan'', Weşanên Nûbihar r. 163, 2023.|jêgirtin=Mejiyê zarokan ji yê me çalaktir e û afirînertir e. '''Bihêlin''' bila zarok alîkariya we bikin yan jî hûn ji wan alîkariyê bixwazin.}} # [[jiyandin]], [[jînde]] hiştin, [[sax]] [[kirin]] #: {{mk|ku|[[Xwedê te bihêle|Xwedê te '''bihêle]]}} #* {{bêmînak|ku}} ==== Herwiha ==== * [[hêştin]] * [[hîştin]] ==== Hevmane ==== {{stûn|h=3| * [[hêlan]] * [[hêladin]] * [[hêlandin]] * [[hêliştin]] * [[hilîştin]] }} ==== Jê ==== * [[hiştî]] * [[vehiştin]] ==== Etîmolojî ==== Ji {{ji|ine-pro|ku|-}}: {{jinûvesazî|ine-pro|selg-|w=hêlan, hiştin, rê dan}}, {{ji|iir-pro|ku|-}}: {{jinûvesazî|iir-pro|herz-|w=hêlan, hiştin, rê dan}}, {{z|ae}}: '''herşte'''-/'''harezāna-'''- ("hêlan, hiştin, rê dan"), {{z|peo}}: '''aveherd'''- ("rê dan"), {{z|xpr}}: '''hyrz'''- ("rê dan"), {{z|pal}}: '''hyl'''- ("rê dan"), {{z|fa}}: '''hiştan/hil'''- ("rê dan"), {{z|bal}}: '''hişt/hill'''- ("rê dan") … {{ir}}, {{z|gil}}: '''aşten/āl'''- ("rê dan"), {{z|ku}}: '''hiştin/hêl'''- ("hiştin, rê dan"), {{z|ckb}}: '''hiştin/hêll'''- ("hiştin, rê dan"), {{z|hac}}: '''aştey/āz'''- ("rê dan"), ({{z|zza}}: '''verdayene/verda'''-) ("hiştin, rê dan"), {{z|sa}}: '''sarj''' ("hêlan, hiştin, rê dan "), {{z|hit}}: '''salk''', {{z|en}}: '''[[sulky]]''' <font style="font-size:10px">'''Çavkanî:''' [[Şablon:Cheung|Cheung p.133]]</font> ==== Werger ==== {{werger-ser|destûr dan}} * {{Z|de}}: {{W|de|erlauben}}, {{W|de|zulassen}} * {{Z|rup}}: {{W|rup|alas}}, {{W|rup|las}} * {{Z|ast}}: {{W|ast|dexar}} * {{Z|be}}: {{W|be|дазваля́ць}}, {{W|be|дазво́ліць}} * {{Z|bg}}: {{W|bg|позволя́вам}}, {{W|bg|дава́м}} * {{Z|cs}}: {{W|cs|dovolovat}}, {{W|cs|dovolit}}, {{W|cs|povolovat}}, {{W|cs|povolit}} * {{Z|da}}: {{W|da|tillade}} * {{Z|ar}}: {{W|ar|سَمَحَ}}, {{W|ar|أَذِنَ}} * {{Z|hy}}: {{W|hy|թողնել}}, {{W|hy|թույլ տալ}}, {{W|hy|թույլատրել}} * {{Z|et}}: {{W|et|lubama}} * {{Z|fa}}: {{W|fa|اجازه دادن}} * {{Z|fo}}: {{W|fo|loyva}} * {{Z|fi}}: {{W|fi|sallia}}, {{W|fi|myöntää}} * {{Z|fr}}: {{W|fr|laisser}}, {{W|fr|accorder}} * {{Z|fur}}: {{W|fur|lassâ}} * {{Z|gl}}: {{W|gl|deixar}} * {{Z|hi}}: {{W|hi|इजाज़त देना}} * {{Z|nl}}: {{W|nl|toelaten}}, {{W|nl|toestaan}} * {{Z|io}}: {{W|io|grantar}} * {{Z|ang}}: {{W|ang|ālīefan}} * {{Z|en}}: {{W|en|allow}}, {{W|en|permit}}, {{W|en|let}} * {{Z|it}}: {{W|it|lasciare}}, {{W|it|permettere}} * {{Z|ja}}: {{W|ja|許す}} * {{Z|ca}}: {{W|ca|deixar}} * {{Z|ko}}: {{W|ko|허락하다}} * {{Z|lld}}: {{W|lld|lascer}} * {{Z|ltg}}: {{W|ltg|ļaut}} * {{Z|la}}: {{W|la|sinō}}, {{W|la|condono}} * {{Z|lv}}: {{W|lv|ļaut}} * {{Z|lo}}: {{W|lo|ອະນຸຍາດ}}, {{W|lo|ໃຫ້}}, {{W|lo|ຍອມ}} * {{Z|mk}}: {{W|mk|дозволува}}, {{W|mk|дозволи}} * {{Z|ms}}: {{W|ms|membenarkan}} * {{Z|cmn}}: {{W|cmn|讓}}, {{W|cmn|让}}, {{W|cmn|允許}}, {{W|cmn|允许}} * {{Z|mi}}: {{W|mi|tuku}} * {{Z|hu}}: {{W|hu|enged}} * {{Z|no}}: {{W|no|tillate}} * {{Z|pl}}: {{W|pl|pozwalać}}, {{W|pl|pozwolić}} * {{Z|pt}}: {{W|pt|deixar}}, {{W|pt|permitir}} * {{Z|ro}}: {{W|ro|lăsa}}, {{W|ro|acorda}}, {{W|ro|permite}}, {{W|ro|admite}} * {{Z|ru}}: {{W|ru|позволя́ть}}, {{W|ru|позво́лить}}, {{W|ru|разреша́ть}}, {{W|ru|разреши́ть}} * {{Z|sc}}: {{W|sc|lassare}}, {{W|sc|lassai}} * {{Z|scn}}: {{W|scn|lassari}} * {{Z|sh}}: {{W|sh|дозволити}}, {{W|sh|dozvoliti}} * {{Z|sk}}: {{W|sk|dovoliť}}, {{W|sk|povoliť}} * {{Z|sl}}: {{W|sl|dovoliti}} * {{Z|es}}: {{W|es|dejar}}, {{W|es|permitir}}, {{W|es|conceder}} * {{Z|sw}}: {{W|sw|idhinisha}} * {{Z|tg}}: {{W|tg|иҷозат додан}} * {{Z|th}}: {{W|th|อนุญาต}}, {{W|th|ให้}}, {{W|th|ยอม}} * {{Z|tpi}}: {{W|tpi|larim}} * {{Z|ur}}: {{W|ur|اجازت دینا}} * {{Z|uk}}: {{W|uk|дозволя́ти}}, {{W|uk|дозво́лити}} * {{Z|vec}}: {{W|vec|lasar}} * {{Z|vi}}: {{W|vi|cho phép}} * {{Z|wa}}: {{W|wa|leyî}}, {{W|wa|laire}} * {{Z|cy}}: {{W|cy|caniatáu}} * {{Z|km}}: {{W|km|អនុញ្ញាត}} * {{Z|grc}}: {{W|grc|ἐάω}} * {{Z|el}}: {{W|el|παραχωρώ}}, {{W|el|χορηγώ}}, {{W|el|παρέχω}} {{werger-bin}} {{werger-ser|dev jê berdan, tenê hiştin}} * {{Z|sq}}: {{W|sq|lëshoj}} * {{Z|de}}: {{W|de|lassen}}, {{W|de|zurücklassen}} * {{Z|rup}}: {{W|rup|alas}}, {{W|rup|las}} * {{Z|as}}: {{W|as|এৰা}} * {{Z|ast}}: {{W|ast|dexar}} * {{Z|ba}}: {{W|ba|ҡалдырыу}} * {{Z|be}}: {{W|be|застаўля́ць}}, {{W|be|заста́віць}} * {{Z|bcl}}: {{W|bcl|walat}} * {{Z|bg}}: {{W|bg|оста́вям}}, {{W|bg|оста́вя}} * {{Z|cs}}: {{W|cs|nechat}} * {{Z|da}}: {{W|da|efterlade}} * {{Z|gsw}}: {{W|gsw|laa}} * {{Z|id}}: {{W|id|tinggal}} * {{Z|ar}}: {{W|ar|تَرَكَ}} * {{Z|hy}}: {{W|hy|թողնել}} * {{Z|eo}}: {{W|eo|lasi}} * {{Z|fi}}: {{W|fi|jättää}} * {{Z|fr}}: {{W|fr|laisser}} * {{Z|fur}}: {{W|fur|lassâ}} * {{Z|gd}}: {{W|gd|fàg}} * {{Z|gl}}: {{W|gl|deixar}} * {{Z|hi}}: {{W|hi|छोड़ना}} * {{Z|nl}}: {{W|nl|achterlaten}}, {{W|nl|laten}} * {{Z|he}}: {{W|he|השאיר}} * {{Z|ang}}: {{W|ang|lǣtan}} * {{Z|en}}: {{W|en|leave}} * {{Z|ga}}: {{W|ga|fág}} * {{Z|it}}: {{W|it|lasciare}}, {{W|it|dimenticare}} * {{Z|ja}}: {{W|ja|残す}}, {{W|ja|放置}} * {{Z|yue}}: {{W|yue|留}} * {{Z|ca}}: {{W|ca|deixar}} * {{Z|qu}}: {{W|qu|saqiy}}, {{W|qu|sagii}}, {{W|qu|hagii}} * {{Z|ko}}: {{W|ko|떠나다}}, {{W|ko|나가다}}, {{W|ko|방치하다}} * {{Z|lld}}: {{W|lld|lascer}} * {{Z|la}}: {{W|la|desero}} * {{Z|lv}}: {{W|lv|atstāt}} * {{Z|mk}}: {{W|mk|остава}}, {{W|mk|остави}} * {{Z|cmn}}: {{W|cmn|留}} * {{Z|hu}}: {{W|hu|hagy}}, {{W|hu|meghagy}} * {{Z|nap}}: {{W|nap|lascià}}, {{W|nap|lassà}} * {{Z|nrf}}: {{W|nrf|laîssi}} * {{Z|no}}: {{W|no|etterlate}} * {{Z|oc}}: {{W|oc|daissar}} * {{Z|pl}}: {{W|pl|zostawiać}}, {{W|pl|zostawić}} * {{Z|pt}}: {{W|pt|deixar}} * {{Z|rm}}: {{W|rm|laschar}}, {{W|rm|schar}}, {{W|rm|lascher}} * {{Z|ro}}: {{W|ro|lăsa}} * {{Z|ru}}: {{W|ru|оставля́ть}}, {{W|ru|оста́вить}} * {{Z|sa}}: {{W|sa|रिणक्ति}} * {{Z|sc}}: {{W|sc|lassare}}, {{W|sc|lassai}} * {{Z|scn}}: {{W|scn|lassari}} * {{Z|sh}}: {{W|sh|остављати}}, {{W|sh|оставити}}, {{W|sh|ostavljati}}, {{W|sh|ostaviti}} * {{Z|sk}}: {{W|sk|nechávať}}, {{W|sk|nechať}} * {{Z|sl}}: {{W|sl|pustiti}} * {{Z|es}}: {{W|es|dejar}} * {{Z|sw}}: {{W|sw|toka}} * {{Z|sv}}: {{W|sv|lämna}}, {{W|sv|kvar}} * {{Z|tl}}: {{W|tl|matira}} * {{Z|th}}: {{W|th|เหลือ}} * {{Z|ur}}: {{W|ur|چھوڑنا}} * {{Z|uk}}: {{W|uk|залиша́ти}}, {{W|uk|залиши́ти}} * {{Z|vec}}: {{W|vec|lasar}} * {{Z|vi}}: {{W|vi|rời}} * {{Z|cy}}: {{W|cy|gadael}} * {{Z|grc}}: {{W|grc|ἀφίημι}} * {{Z|el}}: {{W|el|αφήνω}} {{werger-bin}} === Navdêr === {{ku-tewîn-nav|hiştin|mê}} {{navdêr|ku|z=m}} # {{bêwate}} #* {{bêmînak|ku}} ==== Werger ==== {{werger-ser}} {{werger-bin}} 1nby65fc5spumsstteihgnjmfghzcvb 6237196 6237195 2026-06-05T16:03:15Z Ghybu 1393 /* Etîmolojî */ 6237196 wikitext text/x-wiki == {{ziman|ku}} == === Bilêvkirin === * {{ku-IPA}} * {{deng|ku|LL-Q36163 (kmr)-Ebulfîda-hiştin.wav|Deng|Bidlîs}} * {{ku-kîte}} === Lêker === {{ku-tewîn-lk|hiştin|form=gerguhêz|niha=hêl|borî=hişt}} {{lêker|ku|c=x-gh}} # [[çûn|Çûn]] û li gel xwe ne[[birin]], dev jê berdan. #: {{mk|ku|Wî zarokên xwe li Kurdistanê '''hişt''' û hat Elmanyayê.}} #* {{jêder|ku|{{Jêgirtin/Melayê Cizîrî/Dîwana Melayê Cizirî}}|jêgirtin=Ez kirim yekser pilox<br />Dest '''nehêlim''' ez ji dînê<br />Şubhê Ferhad û Şirînê}} # [[destûr|Destûr]] dan, [[rê]] dan, [[izin]] dan, [[pejirandin]], [[qebûl]] kirin. #: {{mk|ku|Ew ne '''hişt''' ez wilo bikim.}} #* {{jêder|ku|2=Mihyedîn Nahrîn, ''Perwerdeya Zarokan Bi Çîrokan'', Weşanên Nûbihar r. 163, 2023.|jêgirtin=Mejiyê zarokan ji yê me çalaktir e û afirînertir e. '''Bihêlin''' bila zarok alîkariya we bikin yan jî hûn ji wan alîkariyê bixwazin.}} # [[jiyandin]], [[jînde]] hiştin, [[sax]] [[kirin]] #: {{mk|ku|[[Xwedê te bihêle|Xwedê te '''bihêle]]}} #* {{bêmînak|ku}} ==== Herwiha ==== * [[hêştin]] * [[hîştin]] ==== Hevmane ==== {{stûn|h=3| * [[hêlan]] * [[hêladin]] * [[hêlandin]] * [[hêliştin]] * [[hilîştin]] }} ==== Jê ==== * [[hiştî]] * [[vehiştin]] ==== Etîmolojî ==== Ji {{ji|ine-pro|ku|*selg-|w=hêlan, hiştin, rê dan}}, {{ji|iir-pro|ku|-}}: {{jinûvesazî|iir-pro|herz-|w=hêlan, hiştin, rê dan}}, {{z|ae}}: '''herşte'''-/'''harezāna-'''- ("hêlan, hiştin, rê dan"), {{z|peo}}: '''aveherd'''- ("rê dan"), {{z|xpr}}: '''hyrz'''- ("rê dan"), {{z|pal}}: '''hyl'''- ("rê dan"), {{z|fa}}: '''hiştan/hil'''- ("rê dan"), {{z|bal}}: '''hişt/hill'''- ("rê dan") … {{ir}}, {{z|gil}}: '''aşten/āl'''- ("rê dan"), {{z|ku}}: '''hiştin/hêl'''- ("hiştin, rê dan"), {{z|ckb}}: '''hiştin/hêll'''- ("hiştin, rê dan"), {{z|hac}}: '''aştey/āz'''- ("rê dan"), ({{z|zza}}: '''verdayene/verda'''-) ("hiştin, rê dan"), {{z|sa}}: '''sarj''' ("hêlan, hiştin, rê dan "), {{z|hit}}: '''salk''', {{z|en}}: '''[[sulky]]''' <font style="font-size:10px">'''Çavkanî:''' [[Şablon:Cheung|Cheung p.133]]</font> ==== Werger ==== {{werger-ser|destûr dan}} * {{Z|de}}: {{W|de|erlauben}}, {{W|de|zulassen}} * {{Z|rup}}: {{W|rup|alas}}, {{W|rup|las}} * {{Z|ast}}: {{W|ast|dexar}} * {{Z|be}}: {{W|be|дазваля́ць}}, {{W|be|дазво́ліць}} * {{Z|bg}}: {{W|bg|позволя́вам}}, {{W|bg|дава́м}} * {{Z|cs}}: {{W|cs|dovolovat}}, {{W|cs|dovolit}}, {{W|cs|povolovat}}, {{W|cs|povolit}} * {{Z|da}}: {{W|da|tillade}} * {{Z|ar}}: {{W|ar|سَمَحَ}}, {{W|ar|أَذِنَ}} * {{Z|hy}}: {{W|hy|թողնել}}, {{W|hy|թույլ տալ}}, {{W|hy|թույլատրել}} * {{Z|et}}: {{W|et|lubama}} * {{Z|fa}}: {{W|fa|اجازه دادن}} * {{Z|fo}}: {{W|fo|loyva}} * {{Z|fi}}: {{W|fi|sallia}}, {{W|fi|myöntää}} * {{Z|fr}}: {{W|fr|laisser}}, {{W|fr|accorder}} * {{Z|fur}}: {{W|fur|lassâ}} * {{Z|gl}}: {{W|gl|deixar}} * {{Z|hi}}: {{W|hi|इजाज़त देना}} * {{Z|nl}}: {{W|nl|toelaten}}, {{W|nl|toestaan}} * {{Z|io}}: {{W|io|grantar}} * {{Z|ang}}: {{W|ang|ālīefan}} * {{Z|en}}: {{W|en|allow}}, {{W|en|permit}}, {{W|en|let}} * {{Z|it}}: {{W|it|lasciare}}, {{W|it|permettere}} * {{Z|ja}}: {{W|ja|許す}} * {{Z|ca}}: {{W|ca|deixar}} * {{Z|ko}}: {{W|ko|허락하다}} * {{Z|lld}}: {{W|lld|lascer}} * {{Z|ltg}}: {{W|ltg|ļaut}} * {{Z|la}}: {{W|la|sinō}}, {{W|la|condono}} * {{Z|lv}}: {{W|lv|ļaut}} * {{Z|lo}}: {{W|lo|ອະນຸຍາດ}}, {{W|lo|ໃຫ້}}, {{W|lo|ຍອມ}} * {{Z|mk}}: {{W|mk|дозволува}}, {{W|mk|дозволи}} * {{Z|ms}}: {{W|ms|membenarkan}} * {{Z|cmn}}: {{W|cmn|讓}}, {{W|cmn|让}}, {{W|cmn|允許}}, {{W|cmn|允许}} * {{Z|mi}}: {{W|mi|tuku}} * {{Z|hu}}: {{W|hu|enged}} * {{Z|no}}: {{W|no|tillate}} * {{Z|pl}}: {{W|pl|pozwalać}}, {{W|pl|pozwolić}} * {{Z|pt}}: {{W|pt|deixar}}, {{W|pt|permitir}} * {{Z|ro}}: {{W|ro|lăsa}}, {{W|ro|acorda}}, {{W|ro|permite}}, {{W|ro|admite}} * {{Z|ru}}: {{W|ru|позволя́ть}}, {{W|ru|позво́лить}}, {{W|ru|разреша́ть}}, {{W|ru|разреши́ть}} * {{Z|sc}}: {{W|sc|lassare}}, {{W|sc|lassai}} * {{Z|scn}}: {{W|scn|lassari}} * {{Z|sh}}: {{W|sh|дозволити}}, {{W|sh|dozvoliti}} * {{Z|sk}}: {{W|sk|dovoliť}}, {{W|sk|povoliť}} * {{Z|sl}}: {{W|sl|dovoliti}} * {{Z|es}}: {{W|es|dejar}}, {{W|es|permitir}}, {{W|es|conceder}} * {{Z|sw}}: {{W|sw|idhinisha}} * {{Z|tg}}: {{W|tg|иҷозат додан}} * {{Z|th}}: {{W|th|อนุญาต}}, {{W|th|ให้}}, {{W|th|ยอม}} * {{Z|tpi}}: {{W|tpi|larim}} * {{Z|ur}}: {{W|ur|اجازت دینا}} * {{Z|uk}}: {{W|uk|дозволя́ти}}, {{W|uk|дозво́лити}} * {{Z|vec}}: {{W|vec|lasar}} * {{Z|vi}}: {{W|vi|cho phép}} * {{Z|wa}}: {{W|wa|leyî}}, {{W|wa|laire}} * {{Z|cy}}: {{W|cy|caniatáu}} * {{Z|km}}: {{W|km|អនុញ្ញាត}} * {{Z|grc}}: {{W|grc|ἐάω}} * {{Z|el}}: {{W|el|παραχωρώ}}, {{W|el|χορηγώ}}, {{W|el|παρέχω}} {{werger-bin}} {{werger-ser|dev jê berdan, tenê hiştin}} * {{Z|sq}}: {{W|sq|lëshoj}} * {{Z|de}}: {{W|de|lassen}}, {{W|de|zurücklassen}} * {{Z|rup}}: {{W|rup|alas}}, {{W|rup|las}} * {{Z|as}}: {{W|as|এৰা}} * {{Z|ast}}: {{W|ast|dexar}} * {{Z|ba}}: {{W|ba|ҡалдырыу}} * {{Z|be}}: {{W|be|застаўля́ць}}, {{W|be|заста́віць}} * {{Z|bcl}}: {{W|bcl|walat}} * {{Z|bg}}: {{W|bg|оста́вям}}, {{W|bg|оста́вя}} * {{Z|cs}}: {{W|cs|nechat}} * {{Z|da}}: {{W|da|efterlade}} * {{Z|gsw}}: {{W|gsw|laa}} * {{Z|id}}: {{W|id|tinggal}} * {{Z|ar}}: {{W|ar|تَرَكَ}} * {{Z|hy}}: {{W|hy|թողնել}} * {{Z|eo}}: {{W|eo|lasi}} * {{Z|fi}}: {{W|fi|jättää}} * {{Z|fr}}: {{W|fr|laisser}} * {{Z|fur}}: {{W|fur|lassâ}} * {{Z|gd}}: {{W|gd|fàg}} * {{Z|gl}}: {{W|gl|deixar}} * {{Z|hi}}: {{W|hi|छोड़ना}} * {{Z|nl}}: {{W|nl|achterlaten}}, {{W|nl|laten}} * {{Z|he}}: {{W|he|השאיר}} * {{Z|ang}}: {{W|ang|lǣtan}} * {{Z|en}}: {{W|en|leave}} * {{Z|ga}}: {{W|ga|fág}} * {{Z|it}}: {{W|it|lasciare}}, {{W|it|dimenticare}} * {{Z|ja}}: {{W|ja|残す}}, {{W|ja|放置}} * {{Z|yue}}: {{W|yue|留}} * {{Z|ca}}: {{W|ca|deixar}} * {{Z|qu}}: {{W|qu|saqiy}}, {{W|qu|sagii}}, {{W|qu|hagii}} * {{Z|ko}}: {{W|ko|떠나다}}, {{W|ko|나가다}}, {{W|ko|방치하다}} * {{Z|lld}}: {{W|lld|lascer}} * {{Z|la}}: {{W|la|desero}} * {{Z|lv}}: {{W|lv|atstāt}} * {{Z|mk}}: {{W|mk|остава}}, {{W|mk|остави}} * {{Z|cmn}}: {{W|cmn|留}} * {{Z|hu}}: {{W|hu|hagy}}, {{W|hu|meghagy}} * {{Z|nap}}: {{W|nap|lascià}}, {{W|nap|lassà}} * {{Z|nrf}}: {{W|nrf|laîssi}} * {{Z|no}}: {{W|no|etterlate}} * {{Z|oc}}: {{W|oc|daissar}} * {{Z|pl}}: {{W|pl|zostawiać}}, {{W|pl|zostawić}} * {{Z|pt}}: {{W|pt|deixar}} * {{Z|rm}}: {{W|rm|laschar}}, {{W|rm|schar}}, {{W|rm|lascher}} * {{Z|ro}}: {{W|ro|lăsa}} * {{Z|ru}}: {{W|ru|оставля́ть}}, {{W|ru|оста́вить}} * {{Z|sa}}: {{W|sa|रिणक्ति}} * {{Z|sc}}: {{W|sc|lassare}}, {{W|sc|lassai}} * {{Z|scn}}: {{W|scn|lassari}} * {{Z|sh}}: {{W|sh|остављати}}, {{W|sh|оставити}}, {{W|sh|ostavljati}}, {{W|sh|ostaviti}} * {{Z|sk}}: {{W|sk|nechávať}}, {{W|sk|nechať}} * {{Z|sl}}: {{W|sl|pustiti}} * {{Z|es}}: {{W|es|dejar}} * {{Z|sw}}: {{W|sw|toka}} * {{Z|sv}}: {{W|sv|lämna}}, {{W|sv|kvar}} * {{Z|tl}}: {{W|tl|matira}} * {{Z|th}}: {{W|th|เหลือ}} * {{Z|ur}}: {{W|ur|چھوڑنا}} * {{Z|uk}}: {{W|uk|залиша́ти}}, {{W|uk|залиши́ти}} * {{Z|vec}}: {{W|vec|lasar}} * {{Z|vi}}: {{W|vi|rời}} * {{Z|cy}}: {{W|cy|gadael}} * {{Z|grc}}: {{W|grc|ἀφίημι}} * {{Z|el}}: {{W|el|αφήνω}} {{werger-bin}} === Navdêr === {{ku-tewîn-nav|hiştin|mê}} {{navdêr|ku|z=m}} # {{bêwate}} #* {{bêmînak|ku}} ==== Werger ==== {{werger-ser}} {{werger-bin}} 71u8puvz8fzc4gj51crksrhwwha0myg tevdîr 0 12894 6237235 6235215 2026-06-06T06:40:29Z Wikihez 7344 /* */ bi [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]ê re 6237235 wikitext text/x-wiki == {{ziman|ku}} == === Bilêvkirin === * {{ku-kîte}} === Navdêr === {{ku-tewîn-nav|tevdîr|mê}} {{navdêr|ku|z=m}} # [[amadekarî]], [[teybûr]], [[bergirî]], [[plan]], [[program]], [[ajanda]], [[bername]], [[nexşe]] #* {{jêder-pirtûk|ku|jêgirtin=Serê malê siwarek bila her tim amede be, serdar wê '''tevdîra''' wan bigerînin.|nivîskar=Eyüp Kıran| sernav=Dewrêşê Evdî Kulîlka Bilbizêk û Rim|cîh=Stenbol|weşanxane={{w|Nûbihar}}|sal=2018|çap=4|rûpel=27 |isbn=978-9944-360-95-1}} #* {{jêder|ku|jêgirtin=Lê dûxana ku ji cixareya qalindpêçayî dikişand ser kezebşewatîya xwe, destûr nedida ku '''tevdîrekê''' bistîne.|{{Jêgirtin/Îrfan Amîda/Şevek Şîzofren|r=6}}}} ==== Bi alfabeyên din ==== * {{ku-ar|تەڤدیر}} ==== Herwiha ==== * [[tebdêr]] * [[tebdîr]] * [[tedbîr]] * [[tevdêr]] ==== Jê ==== {{stûn| * {{mj|Lêker}} [[tevdîr kirin]] * {{mj|Navdêr}} [[tevdîrkirin]] * {{mj|Rengdêr}} [[tevdîrkirî]] * [[bêtevdîr]] * [[bêtevdîrî]] * [[bitevdîr]] * [[bitevdîrî]] * [[tevdîrane]] * [[tevdîrî]] * [[tevdîrkar]] * [[tevdîrkarî]] }} ==== Etîmolojî ==== Ji {{deyn|ar|ku|تدبير}} ==== Werger ==== {{werger-ser}} * {{Z|de}}: {{W+|de|Plan}} {{n}}, {{W+|de|Umsicht}}, {{W+|de|Maßnahme|guman=erê}} {{m}}, {{W+|de|Maßregel|guman=erê}}, {{W+|de|Vorkehrung|f|guman=erê}}, {{W+|de|Vorsichtsmaßnahme|f|guman=erê}}, {{W+|de|Vorsichtsmaßregel|guman=erê}} * {{Z|ar}}: {{W-|ar|خطة}} * {{Z|fa}}: {{W+|fa|تدبیر}}, {{W-|fa|راهکار}}, {{W-|fa|راهکار}}, {{W+|fa|همزن}}, {{W+|fa|هوشمندی}}, {{W+|fa|تدبیر|guman=erê}}, {{W+|fa|مخلوطکن|guman=erê}} * {{Z|en}}: {{W+|en|preparation}}, {{W+|en|plan}} * {{Z|tr}}: {{W+|tr|plan}}, {{W+|tr|karıştırıcı}}, {{W+|tr|karmaç}}, {{W+|tr|önlem}}, {{W+|tr|tedbir}}, {{W+|tr|tılsım}}, {{W+|tr|hazırlık}}, {{W+|tr|çırpıcı}}, {{W+|tr|mikser}} {{werger-bin}} hwaydp2t6qlixxtl5481jynag075zod befrik 0 16759 6237209 6232641 2026-06-05T16:26:39Z Keyomerd 8814 /* Kurmancî */ 6237209 wikitext text/x-wiki {{bnr-h|befrîk}} == {{ziman|ku}} == === Bilêvkirin === * {{ku-IPA}} * {{ku-kîte}} === Navdêr 1 === {{navdêr|ku|z=m}} # {{awayekî din|ku|berfok}} === Navdêr 2 === {{navdêr|ku|z=m}} # {{guharto|ku|berfoke}} adev5r6ks64v6xqo1sgyssbhqk8yn6r Wîkîferheng:ceribandin 4 23016 6237221 6236894 2026-06-05T20:47:53Z Ghybu 1393 6237221 wikitext text/x-wiki : [[Modul:ku-tewandin/tablo/ceribandin]] # [[Wîkîferheng:ceribandin#Gerguhêz|Gerguhêz]] # [[Wîkîferheng:ceribandin#Negerguhêz|Negerguhêz]] {{#invoke:ku-tewîn-nav|get_comma_separated_forms|heval|mê û nêr}} {{#invoke:ku-tewandin|get_comma_separated_forms|niha=kev|borî=ket}} === Gerguhêz === {{ku-tewandin/ceribandin|dîtin|form=gerguhêz|niha=bîn|borî=dît}} === Negerguhêz === {{ku-tewandin/ceribandin|ketin|form=negerguhêz|niha=kev|borî=ket}} 84iwt90mzavcqgcylcxx35qo5s3fouk befrîk 0 181452 6237201 6237096 2026-06-05T16:21:39Z Keyomerd 8814 /* Kurmancî */ 6237201 wikitext text/x-wiki {{bnr-h|befrik}} == {{ziman|ku}} == === Navdêr 1 === {{navdêr|ku|z=m}} # {{guharto|ku|berfoke}} === Navdêr 2 === {{navdêr|ku|z=m}} # {{guharto|ku|berfok}} sfvwv5bk88xp3h2vwm4peydroi7dvh4 hiştî 0 378481 6237197 5824252 2026-06-05T16:03:51Z Ghybu 1393 /* {{ziman|ku}} */ 6237197 wikitext text/x-wiki == {{ziman|ku}} == === Rengdêr === {{rengdêr|ku}} # {{bnr|hiştin}} ==== Werger ==== {{werger-ser}} * {{Z|en}}: {{W|en|allowed}}, {{W|en|accepted}}, {{W|en|left}} {{werger-bin}} === Navdêr === {{navdêr|ku|z=m}} # [[raspartî]], [[dayî]] ==== Etîmolojî ==== Ji {{qertaf|ku|hiş|-tî}}. ==== Werger ==== {{werger-ser}} * {{Z|en}}: {{W+|en|omission}} * {{Z|tr}}: {{W+|tr|mevdu}}, {{W+|tr|dikkatli|guman=erê}} {{werger-bin}} sbavau99gyzncbtnqdcrmd09md6t2pw vehiştin 0 435418 6237198 6236785 2026-06-05T16:10:43Z Ghybu 1393 /* {{ziman|ku}} */ 6237198 wikitext text/x-wiki == {{ziman|ku}} == === Bilêvkirin === * {{ku-IPA}} * {{ku-kîte}} === Lêker === {{ku-tewîn-reh|form=gerhuhêz|niha=hêl|niha2=hiş|borî=hişt|paşgir=ve}} {{lêker|ku|c=x-gh}} # {{bêmane|ku}} #: {{hevmane|ku|hêlan|hiştin|helistin|berdan|vehêlan|şemirandin|terk kirin|ladan|terkandin|terk dan|destbiserkirin|nimînandin|teslîm kirin|pêre|radest kirin}} #: {{mk|ku|Berîya çûnê min li ber derîyê notek '''vehişt''' da tu bixwînî.}} #: {{mk|ku|Telefona xwe '''vehiştiye''' bi ku de çûye?}} #: {{mk|ku|Te çend hêk '''vehiştin''' da mêvan bixwin?}} #: {{mk|ku|Pirtûkê '''vehêle''' alîkarîya min bike!}} #: {{mk|ku|Dostên xwe '''venehêle''' li ber derîyê.}} #: {{mk|ku|Neteweyên ku zanistî '''vehiştiye''' nebûne hevpara serdema nû.}} #: {{mk|ku|Mêjî '''vehişto'''! çima te derî negirt?}} #: {{mk|ku|Min tu hinek '''vehiştî''' çima ku karê min hebû.}} #: {{mk|ku|Min motora xwe '''vehişt''' da dîsa vegerim.}} #: {{mk|ku|Artêşa şikîyayî enîyên xwe '''vehiştin'''.}} #: {{mk|ku|Karê îrojê '''venehêle''' rojên din.}} #: {{mk|ku|Mafên xwe wergire '''venehêle'''.}} #: {{mk|ku|Sînorên xwe '''venehêle''' da xurt bimînin.}} #: {{mk|ku|Dizî pere '''vehişte''' mala xwedanê.}} #* {{bêmînak|ku}} ==== Ji wêjeya klasîk ==== * {{jêder|ku|{{Jêgirtin/Melayê Cizîrî/Dîwana Melayê Cizirî}}|jêgirtin=Şîr û xişt in zulf û qişt in</br>Hin veşarin hin '''vehiştin'''</br>Pehlewanan dest vemiştin}} ==== Etîmolojî ==== Ji {{pêk|ku|ve-|hiştin}} ==== Werger ==== {{werger-ser}} * {{Z|de}}: {{W+|de|zurücklassen}} * {{Z|fa}}: {{W-|fa|تسلیم کردن}}, {{W-|fa|اعاده کردن|guman=erê}} * {{Z|tr}}: {{W+|tr|terk etmek}}, {{W-|tr|geride bırakmak|guman=erê}}, {{W-|tr|geri bırakmak|guman=erê}} {{werger-bin}} === Navdêr === {{ku-tewîn-nav|vehiştin|mê}} {{navdêr|ku|z=m}} # {{bêwate}} #: {{bêmînak}} ==== Werger ==== {{werger-ser}} * {{Z|tr}}: {{W+|tr|terk etme}}, {{W-|tr|geride bırakma|guman=erê}} {{werger-bin}} oaxif62kzyadr4p2mslzhic7kawyi6s 6237199 6237198 2026-06-05T16:14:01Z Ghybu 1393 /* Lêker */ 6237199 wikitext text/x-wiki == {{ziman|ku}} == === Bilêvkirin === * {{ku-IPA}} * {{ku-kîte}} === Lêker === {{ku-tewîn-reh|form=gerguhêz|niha=hêl|niha2=hiş|borî=hişt|pêşgir=ve}} {{lêker|ku|c=x-gh}} # {{bêmane|ku}} #: {{hevmane|ku|hêlan|hiştin|helistin|berdan|vehêlan|şemirandin|terk kirin|ladan|terkandin|terk dan|destbiserkirin|nimînandin|teslîm kirin|pêre|radest kirin}} #: {{mk|ku|Berîya çûnê min li ber derîyê notek '''vehişt''' da tu bixwînî.}} #: {{mk|ku|Telefona xwe '''vehiştiye''' bi ku de çûye?}} #: {{mk|ku|Te çend hêk '''vehiştin''' da mêvan bixwin?}} #: {{mk|ku|Pirtûkê '''vehêle''' alîkarîya min bike!}} #: {{mk|ku|Dostên xwe '''venehêle''' li ber derîyê.}} #: {{mk|ku|Neteweyên ku zanistî '''vehiştiye''' nebûne hevpara serdema nû.}} #: {{mk|ku|Mêjî '''vehişto'''! çima te derî negirt?}} #: {{mk|ku|Min tu hinek '''vehiştî''' çima ku karê min hebû.}} #: {{mk|ku|Min motora xwe '''vehişt''' da dîsa vegerim.}} #: {{mk|ku|Artêşa şikîyayî enîyên xwe '''vehiştin'''.}} #: {{mk|ku|Karê îrojê '''venehêle''' rojên din.}} #: {{mk|ku|Mafên xwe wergire '''venehêle'''.}} #: {{mk|ku|Sînorên xwe '''venehêle''' da xurt bimînin.}} #: {{mk|ku|Dizî pere '''vehişte''' mala xwedanê.}} #* {{bêmînak|ku}} ==== Ji wêjeya klasîk ==== * {{jêder|ku|{{Jêgirtin/Melayê Cizîrî/Dîwana Melayê Cizirî}}|jêgirtin=Şîr û xişt in zulf û qişt in</br>Hin veşarin hin '''vehiştin'''</br>Pehlewanan dest vemiştin}} ==== Etîmolojî ==== Ji {{pêk|ku|ve-|hiştin}} ==== Werger ==== {{werger-ser}} * {{Z|de}}: {{W+|de|zurücklassen}} * {{Z|fa}}: {{W-|fa|تسلیم کردن}}, {{W-|fa|اعاده کردن|guman=erê}} * {{Z|tr}}: {{W+|tr|terk etmek}}, {{W-|tr|geride bırakmak|guman=erê}}, {{W-|tr|geri bırakmak|guman=erê}} {{werger-bin}} === Navdêr === {{ku-tewîn-nav|vehiştin|mê}} {{navdêr|ku|z=m}} # {{bêwate}} #: {{bêmînak}} ==== Werger ==== {{werger-ser}} * {{Z|tr}}: {{W+|tr|terk etme}}, {{W-|tr|geride bırakma|guman=erê}} {{werger-bin}} csqt140zsvtrx86w9y3l2649oo19z4d 6237205 6237199 2026-06-05T16:24:44Z Ghybu 1393 /* Lêker */ 6237205 wikitext text/x-wiki == {{ziman|ku}} == === Bilêvkirin === * {{ku-IPA}} * {{ku-kîte}} === Lêker === {{ku-tewîn-reh|form=gerguhêz|niha=hêl|niha2=hiş|borî=hişt|pêşgir=ve}} {{lêker|ku|c=p-gh}} # {{bêmane|ku}} #: {{hevmane|ku|hêlan|hiştin|helistin|berdan|vehêlan|şemirandin|terk kirin|ladan|terkandin|terk dan|destbiserkirin|nimînandin|teslîm kirin|pêre|radest kirin}} #: {{mk|ku|Berîya çûnê min li ber derîyê notek '''vehişt''' da tu bixwînî.}} #: {{mk|ku|Telefona xwe '''vehiştiye''' bi ku de çûye?}} #: {{mk|ku|Te çend hêk '''vehiştin''' da mêvan bixwin?}} #: {{mk|ku|Pirtûkê '''vehêle''' alîkarîya min bike!}} #: {{mk|ku|Dostên xwe '''venehêle''' li ber derîyê.}} #: {{mk|ku|Neteweyên ku zanistî '''vehiştiye''' nebûne hevpara serdema nû.}} #: {{mk|ku|Mêjî '''vehişto'''! çima te derî negirt?}} #: {{mk|ku|Min tu hinek '''vehiştî''' çima ku karê min hebû.}} #: {{mk|ku|Min motora xwe '''vehişt''' da dîsa vegerim.}} #: {{mk|ku|Artêşa şikîyayî enîyên xwe '''vehiştin'''.}} #: {{mk|ku|Karê îrojê '''venehêle''' rojên din.}} #: {{mk|ku|Mafên xwe wergire '''venehêle'''.}} #: {{mk|ku|Sînorên xwe '''venehêle''' da xurt bimînin.}} #: {{mk|ku|Dizî pere '''vehişte''' mala xwedanê.}} #* {{bêmînak|ku}} ==== Ji wêjeya klasîk ==== * {{jêder|ku|{{Jêgirtin/Melayê Cizîrî/Dîwana Melayê Cizirî}}|jêgirtin=Şîr û xişt in zulf û qişt in</br>Hin veşarin hin '''vehiştin'''</br>Pehlewanan dest vemiştin}} ==== Etîmolojî ==== Ji {{pêk|ku|ve-|hiştin}} ==== Werger ==== {{werger-ser}} * {{Z|de}}: {{W+|de|zurücklassen}} * {{Z|fa}}: {{W-|fa|تسلیم کردن}}, {{W-|fa|اعاده کردن|guman=erê}} * {{Z|tr}}: {{W+|tr|terk etmek}}, {{W-|tr|geride bırakmak|guman=erê}}, {{W-|tr|geri bırakmak|guman=erê}} {{werger-bin}} === Navdêr === {{ku-tewîn-nav|vehiştin|mê}} {{navdêr|ku|z=m}} # {{bêwate}} #: {{bêmînak}} ==== Werger ==== {{werger-ser}} * {{Z|tr}}: {{W+|tr|terk etme}}, {{W-|tr|geride bırakma|guman=erê}} {{werger-bin}} 3rc4q32bsys0zxkxe7kx3s3bi4qd8qx Modul:ku-tewandin 828 628614 6237213 6237078 2026-06-05T17:26:20Z Ghybu 1393 6237213 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 = {s1='m', s2='yî', s3='', p1='n', p2='n', p3='n'} else ends = {s1='im', s2='î', s3='e', p1='in', 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. local function 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 -- 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) local preverbParticles = 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 local preverbParticle = preverbParticles[pers] if preverbParticle ~= '' then preverbParticle = preverbParticle .. ' ' end conjSimbleVerb = negPrefix .. preverb .. stem .. ending -- Adding prefixe and suffixe if postSimpleVerb ~= '' and postSimpleVerb ~=nil then postSimpleVerb = ' ' .. postSimpleVerb end conjVerb = preSimpleVerb .. spacing .. conjSimbleVerb .. spacing .. postSimpleVerb -- Spelling correction(îy -> iy) conjVerb = mw.ustring.gsub(conjVerb, 'îy', 'iy') -- Add a link conjVerb = link{term=conjVerb, lang=langKu} -- 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 PRONOUMS -- ==================================================================================== function export.conjugateAllTenses(baseOpts, presentStems, pastStems, negation, concatPrs) 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 pronoun 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. in the template: {{#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, 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]] -- ==================================================================================== 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, } local function removeTags(tag) tag = mw.ustring.gsub(tag, '%[%[(.+)%|(.+)%]%]', '%2') tag = mw.ustring.gsub(tag, '<b>(.+)</b>', '%1') tag = mw.ustring.gsub(tag, '<span(.*)>(.*)</span>', '%2') return tag end local function concateList(tenseList) local concatList = {} for _, pers in ipairs({"s1", "s2", "s3", "p1"}) do local tense = removeTags(tenseList[pers]) -- Remove tags 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 5jzt8cpyjhqztnu6670cj2qsrlxxnt8 6237214 6237213 2026-06-05T17:52:39Z Ghybu 1393 sererast kirin 6237214 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 = {s1='m', s2='yî', s3='', p1='n', p2='n', p3='n'} else ends = {s1='im', s2='î', s3='e', p1='in', 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. local function 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 -- 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) local preverbParticles = 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 local preverbParticle = preverbParticles[pers] if preverbParticle ~= '' then preverbParticle = preverbParticle .. ' ' 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 conjVerb = link{term=conjVerb, lang=langKu} -- 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 PRONOUMS -- ==================================================================================== function export.conjugateAllTenses(baseOpts, presentStems, pastStems, negation, concatPrs) 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 pronoun 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. in the template: {{#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, 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]] -- ==================================================================================== 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, } local function removeTags(tag) tag = mw.ustring.gsub(tag, '%[%[(.+)%|(.+)%]%]', '%2') tag = mw.ustring.gsub(tag, '<b>(.+)</b>', '%1') tag = mw.ustring.gsub(tag, '<span(.*)>(.*)</span>', '%2') return tag end local function concateList(tenseList) local concatList = {} for _, pers in ipairs({"s1", "s2", "s3", "p1"}) do local tense = removeTags(tenseList[pers]) -- Remove tags 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 3g59obwp1vr1k8m1nlsjtgcwcnuezqs 6237215 6237214 2026-06-05T17:59:30Z Ghybu 1393 6237215 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 = {s1='m', s2='yî', s3='', p1='n', p2='n', p3='n'} else ends = {s1='im', s2='î', s3='e', p1='in', 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. local function 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 -- 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) local preverbParticles = 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 local preverbParticle = preverbParticles[pers] if preverbParticle ~= '' then preverbParticle = preverbParticle .. ' ' 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 conjVerb = link{term=conjVerb, lang=langKu} -- 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 PRONOUMS -- ==================================================================================== function export.conjugateAllTenses(baseOpts, presentStems, pastStems, negation, concatPrs) 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 pronoun 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. in the template: {{#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, 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]] -- ==================================================================================== 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, } local function removeTags(tag) tag = mw.ustring.gsub(tag, '%[%[(.+)%|(.+)%]%]', '%2') tag = mw.ustring.gsub(tag, '<b>(.+)</b>', '%1') tag = mw.ustring.gsub(tag, '<span(.*)>(.*)</span>', '%2') return tag end local function concateList(tenseList) local concatList = {} for _, pers in ipairs({"s1", "s2", "s3", "p1"}) do local tense = removeTags(tenseList[pers]) -- Remove tags 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 eowjk4ju9t3ed51pyrnac3qsulxlvc4 6237218 6237215 2026-06-05T19:06:01Z Ghybu 1393 6237218 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 = {s1='m', s2='yî', s3='', p1='n', p2='n', p3='n'} else ends = {s1='im', s2='î', s3='e', p1='in', 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. local function 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 -- 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) local preverbParticles = 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 local preverbParticle = preverbParticles[pers] if preverbParticle ~= '' then preverbParticle = preverbParticle .. ' ' 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 conjVerb = link{term=conjVerb, lang=langKu} -- 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 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. in the template: {{#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, 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]] -- ==================================================================================== 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, } local function removeTags(tag) tag = mw.ustring.gsub(tag, '%[%[(.+)%|(.+)%]%]', '%2') tag = mw.ustring.gsub(tag, '<b>(.+)</b>', '%1') tag = mw.ustring.gsub(tag, '<span(.*)>(.*)</span>', '%2') return tag end local function concateList(tenseList) local concatList = {} for _, pers in ipairs({"s1", "s2", "s3", "p1"}) do local tense = removeTags(tenseList[pers]) -- Remove tags 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 4hrvevp94tz6gaqmfnx0nzvf6jrmdqf 6237219 6237218 2026-06-05T19:10:03Z Ghybu 1393 6237219 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 = {s1='m', s2='yî', s3='', p1='n', p2='n', p3='n'} else ends = {s1='im', s2='î', s3='e', p1='in', 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 -- 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) 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 local preverbParticle = preverbParticles[pers] if preverbParticle ~= '' then preverbParticle = preverbParticle .. ' ' 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 conjVerb = link{term=conjVerb, lang=langKu} -- 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 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. in the template: {{#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, 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]] -- ==================================================================================== 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, } local function removeTags(tag) tag = mw.ustring.gsub(tag, '%[%[(.+)%|(.+)%]%]', '%2') tag = mw.ustring.gsub(tag, '<b>(.+)</b>', '%1') tag = mw.ustring.gsub(tag, '<span(.*)>(.*)</span>', '%2') return tag end local function concateList(tenseList) local concatList = {} for _, pers in ipairs({"s1", "s2", "s3", "p1"}) do local tense = removeTags(tenseList[pers]) -- Remove tags 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 14vahi186432e36rszkfgtfrybkmil8 6237220 6237219 2026-06-05T20:33:46Z Ghybu 1393 + tags='na' 6237220 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 = {s1='m', s2='yî', s3='', p1='n', p2='n', p3='n'} else ends = {s1='im', s2='î', s3='e', p1='in', 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'" no links local tags = opts.tags 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) 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 local preverbParticle = preverbParticles[pers] if preverbParticle ~= '' then preverbParticle = preverbParticle .. ' ' 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 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. in the template: {{#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, 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]] -- ==================================================================================== 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, } local function removeTags(tag) tag = mw.ustring.gsub(tag, '%[%[(.+)%|(.+)%]%]', '%2') tag = mw.ustring.gsub(tag, '<b>(.+)</b>', '%1') tag = mw.ustring.gsub(tag, '<span(.*)>(.*)</span>', '%2') return tag end local function concateList(tenseList) local concatList = {} for _, pers in ipairs({"s1", "s2", "s3", "p1"}) do local tense = removeTags(tenseList[pers]) -- Remove tags 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 78zv730xv4wu0rwiznyz5e48fvqxlxe 6237222 6237220 2026-06-05T20:59:07Z Ghybu 1393 6237222 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 = {s1='m', s2='yî', s3='', p1='n', p2='n', p3='n'} else ends = {s1='im', s2='î', s3='e', p1='in', 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'" no links local tags = opts.tags 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) 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 local preverbParticle = preverbParticles[pers] if preverbParticle ~= '' then preverbParticle = preverbParticle .. ' ' 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 } 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 ftcuy7c1yzyj0dv60ao3crin92dzwk2 6237223 6237222 2026-06-05T23:01:48Z Ghybu 1393 addPreverbParticles = 'na' 6237223 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 = {s1='m', s2='yî', s3='', p1='n', p2='n', p3='n'} else ends = {s1='im', s2='î', s3='e', p1='in', 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ê' -- 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) 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 h254pf3ttkgzc8y8b7l7o6ke10lthzk Modul:ku-tewandin/tablo 828 628615 6237226 6236187 2026-06-05T23:26:57Z Ghybu 1393 6237226 Scribunto text/plain local conj = require('Modul:ku-tewandin') local export = {} 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 '', 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 = 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 conjTab = conj.conjugateAllTenses(baseOpts, presentStems, pastStems) -- Negatives conjugations table local negConjTab = conj.conjugateAllTenses(baseOpts, presentStems, pastStems, 'negative') -- Creation of internal conjugation tables for the different tenses local function conjugateTable(tense) -- First, create the table header. local tabHeader = '\n! colspan="2" id="' .. conjTab[tense].name .. '"' .. 'class="' .. conjTab[tense].stem .. '-stem tense-table-title" |' .. conjTab[tense].nameKu .. '- <small><i>-{'.. conjTab[tense].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|' .. conjTab[tense].conj[pers] .. '\n|' .. negConjTab[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:1px dotted grey"| ' .. '\n|-' .. '\n! class="negative" | Erênî' .. '\n! class="positive" | Neyînî' .. '\n|-' .. '\n| <span style="color:gray">(tû)</span> ' .. conjTab.impPresent.conj.s2 .. '\n| <span style="color:gray">(tû)</span> ' .. negConjTab.impPresent.conj.s2 .. '\n|-' .. '\n| <span style="color:gray">(hûn)</span> ' .. conjTab.impPresent.conj.p2 .. '\n| <span style="color:gray">(hûn)</span> ' .. negConjTab.impPresent.conj.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 khdb44gvb3hnini4z3fp8hc7bsczy4g 6237229 6237226 2026-06-06T01:13:40Z Ghybu 1393 6237229 Scribunto text/plain local conj = require('Modul:ku-tewandin') local export = {} 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 '', 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 = 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 conjTab = conj.conjugateAllTenses(baseOpts, presentStems, pastStems) -- Negatives conjugations table local negConjTab = conj.conjugateAllTenses(baseOpts, presentStems, pastStems, 'negative') -- Creation of internal conjugation tables for the different tenses local function conjugateTable(tense) -- First, create the table header. local tabHeader = '\n! colspan="2" id="' .. conjTab[tense].name .. '"' .. 'class="' .. conjTab[tense].stem .. '-stem tense-table-title" |' .. conjTab[tense].nameKu .. '- <small><i>-{'.. conjTab[tense].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|' .. conjTab[tense].conj[pers] .. '\n|' .. negConjTab[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| <span style="color:gray">(tû)</span> ' .. conjTab.impPresent.conj.s2 .. '\n| <span style="color:gray">(tû)</span> ' .. negConjTab.impPresent.conj.s2 .. '\n|-' .. '\n| <span style="color:gray">(hûn)</span> ' .. conjTab.impPresent.conj.p2 .. '\n| <span style="color:gray">(hûn)</span> ' .. negConjTab.impPresent.conj.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 i3k6cmlt48wdqhtbvea9v815x4yhc3j 6237230 6237229 2026-06-06T02:32:05Z Ghybu 1393 6237230 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 '', 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 = 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 conjTab = conj.conjugateAllTenses(baseOpts, presentStems, pastStems) -- Negatives conjugations table local negConjTab = conj.conjugateAllTenses(baseOpts, presentStems, pastStems, 'negative') -- Creation of internal conjugation tables for the different tenses local function conjugateTable(tense) -- First, create the table header. local tabHeader = '\n! colspan="2" id="' .. conjTab[tense].name .. '"' .. 'class="' .. conjTab[tense].stem .. '-stem tense-table-title" |' .. lang:ucfirst(conjTab[tense].nameKu) .. ' - <small><i>-{'.. lang:ucfirst(conjTab[tense].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|' .. conjTab[tense].conj[pers] .. '\n|' .. negConjTab[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| <span style="color:gray">(tû)</span> ' .. conjTab.impPresent.conj.s2 .. '\n| <span style="color:gray">(tû)</span> ' .. negConjTab.impPresent.conj.s2 .. '\n|-' .. '\n| <span style="color:gray">(hûn)</span> ' .. conjTab.impPresent.conj.p2 .. '\n| <span style="color:gray">(hûn)</span> ' .. negConjTab.impPresent.conj.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 ep6bhrzsisk3wg7kyykqagm2dk9e7o3 6237231 6237230 2026-06-06T03:15:43Z Ghybu 1393 6237231 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 '', 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 = 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 conjTab = conj.conjugateAllTenses(baseOpts, presentStems, pastStems) -- Negatives conjugations table local negConjTab = conj.conjugateAllTenses(baseOpts, presentStems, pastStems, 'negative') -- Creation of internal conjugation tables for the different tenses local function conjugateTable(tense) -- First, create the table header. local tabHeader = '\n! colspan="2" id="' .. conjTab[tense].name .. '"' .. 'class="' .. conjTab[tense].stem .. '-stem tense-table-title" |' .. lang:ucfirst(conjTab[tense].nameKu) .. ' - <small><i>-{'.. lang:ucfirst(conjTab[tense].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|' .. conjTab[tense].conj[pers] .. '\n|' .. negConjTab[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| <span style="color:gray">(tû)</span> ' .. conjTab.impPresent.conj.s2 .. '\n| <span style="color:gray">(tû)</span> ' .. negConjTab.impPresent.conj.s2 .. '\n|-' .. '\n| <span style="color:gray">(hûn)</span> ' .. conjTab.impPresent.conj.p2 .. '\n| <span style="color:gray">(hûn)</span> ' .. negConjTab.impPresent.conj.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 onfglrqqgkvsoik86kzgkmfvofsd63d 6237233 6237231 2026-06-06T03:56:34Z Ghybu 1393 6237233 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 '', 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 = 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 conjTab = conj.conjugateAllTenses(baseOpts, presentStems, pastStems) -- Negatives conjugations table local negConjTab = conj.conjugateAllTenses(baseOpts, presentStems, pastStems, 'negative') -- Creation of internal conjugation tables for the different tenses local function conjugateTable(tense) local nameKu = lang:ucfirst(conjTab[tense].nameKu) -- Kurdish name local nameEn = lang:ucfirst(conjTab[tense].nameEn) -- English name local idName = conjTab[tense].name -- 'tenseRules' name (indPresent, ...) local classStem = conjTab[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|' .. conjTab[tense].conj[pers] .. '\n|' .. negConjTab[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| <span style="color:gray">(tû)</span> ' .. conjTab.impPresent.conj.s2 .. '\n| <span style="color:gray">(tû)</span> ' .. negConjTab.impPresent.conj.s2 .. '\n|-' .. '\n| <span style="color:gray">(hûn)</span> ' .. conjTab.impPresent.conj.p2 .. '\n| <span style="color:gray">(hûn)</span> ' .. negConjTab.impPresent.conj.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 5vuh8l59zqsjpb64ham79xu0dzgov5a 6237234 6237233 2026-06-06T05:40:38Z Ghybu 1393 6237234 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 '', 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 = 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') -- 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| <span style="color:gray">(tû)</span> ' .. infoTense.impPresent.conj.s2 .. '\n| <span style="color:gray">(tû)</span> ' .. negInfoTense.impPresent.conj.s2 .. '\n|-' .. '\n| <span style="color:gray">(hûn)</span> ' .. infoTense.impPresent.conj.p2 .. '\n| <span style="color:gray">(hûn)</span> ' .. negInfoTense.impPresent.conj.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 petfa3bniu82hyxlc8wyghvkleb8q6y hesab pirsîn 0 642678 6237165 6237160 2026-06-05T12:41:09Z Kawarizgar1 14836 /* Biwêj */ 6237165 wikitext text/x-wiki == {{ziman|ku}} == === Bilêvkirin === * {{ku-kîte}} === Biwêj === {{biwêj|ku}} # [[doz danîn]], [[dad danîn]] , [[pirs danîn]], [[pirs girêdan]], [[dada tiştekî danîn]], [[dada kesekî danîn]] [[dad danîn kesekî]] , [[doza tiştekî danîn]] , [[doza kesekî danîn]], [[pirs girêdan yekî]] ji bo heyfe yan jî egera dozekê hewl dan #: Li me hesab dipirsî li navrasta rêyê #: Tu hesaba kê dipirsî îşev? ==== Etîmolojî ==== Ji {{heve|ku|hesab|pirsîn}}. ==== Werger ==== {{werger-ser}} * {{Z|tr}}:{{W|tr|hesap sormak|guman=erê}} {{werger-bin}} tahy3jnx8s1i99hpk65lktaar68smf8 6237166 6237165 2026-06-05T12:41:35Z Kawarizgar1 14836 /* Biwêj */ 6237166 wikitext text/x-wiki == {{ziman|ku}} == === Bilêvkirin === * {{ku-kîte}} === Biwêj === {{biwêj|ku}} # [[doz danîn]], [[dad danîn]] , [[pirs danîn]], [[pirs girêdan]], [[dada tiştekî danîn]], [[dada kesekî danîn]], [[dad danîn kesekî]] , [[doza tiştekî danîn]] , [[doza kesekî danîn]], [[pirs girêdan yekî]] ji bo heyfe yan jî egera dozekê hewl dan #: Li me hesab dipirsî li navrasta rêyê #: Tu hesaba kê dipirsî îşev? ==== Etîmolojî ==== Ji {{heve|ku|hesab|pirsîn}}. ==== Werger ==== {{werger-ser}} * {{Z|tr}}:{{W|tr|hesap sormak|guman=erê}} {{werger-bin}} t07sog0mkfk6sdsilh60h5kh59bij5f 6237182 6237166 2026-06-05T15:22:04Z Ghybu 1393 /* Biwêj */ 6237182 wikitext text/x-wiki == {{ziman|ku}} == === Bilêvkirin === * {{ku-kîte}} === Biwêj === {{ku-tewîn-lk|pirsîn|form=gerguhêz|niha=pirs|borî=pirsî}} {{biwêj|ku}} # [[doz danîn]], [[dad danîn]] , [[pirs danîn]], [[pirs girêdan]], [[dada tiştekî danîn]], [[dada kesekî danîn]], [[dad danîn kesekî]] , [[doza tiştekî danîn]] , [[doza kesekî danîn]], [[pirs girêdan yekî]] ji bo heyfe yan jî egera dozekê hewl dan #: {{mk|ku|Li me hesab dipirsî li navrasta rêyê.}} #: {{mk|ku|Tu '''hesaba''' kê '''dipirsî''' îşev?}} #* {{bêmînak|ku}} ==== Hevmane ==== * {{g|ku|pirs girê dan}} ==== Etîmolojî ==== Ji {{heve|ku|hesab|pirsîn}}. ==== Werger ==== {{werger-ser}} * {{Z|tr}}:{{W|tr|hesap sormak}} {{werger-bin}} 122tej18pkez5tp1ffr8avp8rugfovc 6237185 6237182 2026-06-05T15:25:19Z Ghybu 1393 /* Werger */ 6237185 wikitext text/x-wiki == {{ziman|ku}} == === Bilêvkirin === * {{ku-kîte}} === Biwêj === {{ku-tewîn-lk|pirsîn|form=gerguhêz|niha=pirs|borî=pirsî}} {{biwêj|ku}} # [[doz danîn]], [[dad danîn]] , [[pirs danîn]], [[pirs girêdan]], [[dada tiştekî danîn]], [[dada kesekî danîn]], [[dad danîn kesekî]] , [[doza tiştekî danîn]] , [[doza kesekî danîn]], [[pirs girêdan yekî]] ji bo heyfe yan jî egera dozekê hewl dan #: {{mk|ku|Li me hesab dipirsî li navrasta rêyê.}} #: {{mk|ku|Tu '''hesaba''' kê '''dipirsî''' îşev?}} #* {{bêmînak|ku}} ==== Hevmane ==== * {{g|ku|pirs girê dan}} ==== Etîmolojî ==== Ji {{heve|ku|hesab|pirsîn}}. ==== Werger ==== {{werger-ser}} * {{Z|fr}}: {{W+|fr|demander des comptes}} * {{Z|tr}}: {{W+|tr|hesap sormak}} {{werger-bin}} 1tm8lrhy4mduio3m4m65rckf61d2wn1 6237186 6237185 2026-06-05T15:33:59Z Ghybu 1393 /* Biwêj */ 6237186 wikitext text/x-wiki == {{ziman|ku}} == === Bilêvkirin === * {{ku-kîte}} === Lêker === {{ku-tewîn-lk|hesab pirsîn|form=gerguhêz|niha=pirs|borî=pirsî|pêşgir=hesab|valahî=erê}} {{lêker|ku|c=h-gh|nd=hesabpirsîn}} # Ji bo [[heyf]]e yan jî egera dozekê [[hewl dan]]. #: {{hevmane|ku|doz danîn|dad danîn|pirs danîn|pirs girêdan|dada tiştekî danîn|dada kesekî danîn|dad danîn kesekî|doza tiştekî danîn|doza kesekî danîn|pirs girêdan yekî}} #: {{mk|ku|Li me hesab dipirsî li navrasta rêyê.}} #: {{mk|ku|Tu '''hesaba''' kê '''dipirsî''' îşev?}} #* {{bêmînak|ku}} ==== Hevmane ==== * {{g|ku|pirs girê dan}} ==== Etîmolojî ==== Ji {{heve|ku|hesab|pirsîn}}. ==== Werger ==== {{werger-ser}} * {{Z|fr}}: {{W+|fr|demander des comptes}} * {{Z|tr}}: {{W+|tr|hesap sormak}} {{werger-bin}} mnuy19r3z33740n2vpon8j2cqbs4gxx 6237188 6237186 2026-06-05T15:36:29Z Ghybu 1393 /* Lêker */ 6237188 wikitext text/x-wiki == {{ziman|ku}} == === Bilêvkirin === * {{ku-kîte}} === Lêker === {{ku-tewîn-lk|hesab pirsîn|form=gerguhêz|niha=pirs|borî=pirsî|pêşgir=hesab|valahî=erê}} {{lêker|ku|c=h-gh|nd=hesabpirsîn}} # Ji bo [[heyf]]e yan jî egera dozekê [[hewl dan]]. #: {{hevmane|ku|doz danîn|dad danîn|pirs danîn|pirs girê dan|dada tiştekî danîn|dada kesekî danîn|dad danîn kesekî|doza tiştekî danîn|doza kesekî danîn|pirs girêdan yekî}} #: {{mk|ku|Li me hesab dipirsî li navrasta rêyê.}} #: {{mk|ku|Tu '''hesaba''' kê '''dipirsî''' îşev?}} #* {{bêmînak|ku}} ==== Etîmolojî ==== Ji {{heve|ku|hesab|pirsîn}}. ==== Werger ==== {{werger-ser}} * {{Z|fr}}: {{W+|fr|demander des comptes}} * {{Z|tr}}: {{W+|tr|hesap sormak}} {{werger-bin}} nu4i5zv6v8iqhhq41fthyyzjyiuahs6 Modul:ku-tewîn-nav 828 652549 6237171 6237121 2026-06-05T13:24:33Z Ghybu 1393 6237171 Scribunto text/plain local export = {} -- ==== Ferheng: =============================================================== -- Declination (decl.) → Tewandin, tewîn -- Definite (def.) → Binavkirî, diyar -- Indefinite (indef.) → Nebinavkirî, nediyar -- Singular (Sg.) → Yekjimar -- Plural (Pl.) → Pirjimar -- Masculine (m.) → Nêr (n.) -- Feminine. (f.) → Mê (m.) -- Case → Rewş, awa -- Nominative (nom.) → Rewşa (awayê) navkî, netewandî, xwerû -- Construct (constr.) → Îzafe, ravek -- Oblique (obl.) → Rewşa (awayê) çemandî (tewandî) -- Demonstrative oblique (demons. obl.) → Rewşa nîşandera çem. -- Vocative (voc.) → Rewşa bangkirinê -- Alternative (alt.) → Guherto -- ============================================================================= local langKu = require("Modul:languages").getByCode("ku") local link = require('Module:links').language_link local gsub = mw.ustring.gsub local find = mw.ustring.find --============================================================================== -- NAVDÊRÊN HEVEDUDANÎ -- Di peyvên hevedudanî de (mk. [[hespê avê]] (nêr), [[odeya nivistinê]] (mê)) tenê -- peyva yekem li gor diyarîtiyê (binavkirî/nebinavkirî) û li gor hejmarê diguhere. -- Ew li gor rewşê (navkî, çemandî, îzafe) naguherin: herdem di rewşa îzafeyî de ne. -- Zayenda peyva hevedudanî, zayenda peyva yekem e ji ber ku li gor wê tê tewandin. --============================================================================== function export.declCompoundNoun(noun) local decl = {} local nounTab = mw.text.split(noun, '%s') local word1 = nounTab[1] local word2 = table.concat(nounTab, ' ', 2) decl.defSg = noun decl.defPl = gsub(word1, '(.)$', 'ên').. ' ' .. word2 -- The last letter of a singular compound noun determines its gender. -- If its ending is "-a", the compound noun is feminine; -- if it's ending is "-ê", it's masculine. if find(word1, 'a$') then decl.gender ='mê' decl.indefSg = gsub(word1, '(.)$', 'eke') .. ' ' .. word2 decl.indefPl = gsub(word1, '(.)$', 'ine') .. ' ' .. word2 elseif find(word1, 'ê$') then decl.gender ='nêr' decl.indefSg = gsub(word1, '(.)$', 'ekî') .. ' ' .. word2 decl.indefPl = gsub(word1, '(.)$', 'ine') .. ' ' .. word2 else return 'Zayenda peyva yekem nayê zanîn!' end return decl end --============================================================================== -- NAVDÊRÊN SADE --============================================================================== -- We need this function to create the demons. obl. case (nîşandera çem.)). -- ex. wê sêvê (f.) / wî gundî (m.) local function oblPronoun(gender) if gender == 'mê' then return 'wê' end if gender == 'nêr' then return 'wî' end end -- Function to make endings bold. local function b(bold) return '<b>' .. bold .. '</b>' end -- This function returns an array containing all possible declined forms of -- the simple noun for every grammatical case (definite/indefinite): -- nominative (navkî), construct (îzafe), oblique (çemandî). -- The demons. obl. (nîşandera çem.) and vocative (bangkirin) only exists -- in the definite form. function export.declSimpleNoun(opts) opts = opts or {} local noun = opts[1] local gender = opts[2] -- 'mê' or 'nêr' -- By default, display the standard form of the declension (1) -- '2' for the alternative form local alt = opts.alt or '1' -- By default, the tags are displayed(<br></br>, [[..]]).. -- tags='na' to disable it. local tags = opts.tags or 'erê' local decl = {} decl.defNomSg = noun decl.defNomPl = noun if (find(noun, '[bcçdfghjklmnpqrsştvwxyz]$')) then if (gender == 'nêr') then decl.defConstrSg = noun .. b('ê') decl.defConstrPl = noun .. b('ên') decl.defOblSg = noun .. b('î') decl.defOblPl = noun .. b('an') decl.indefNomSg = noun .. b('ek') decl.indefNomPl = noun .. b('in') decl.indefConstrSg = noun .. b('ekî') decl.indefConstrPl = noun .. b('ine') decl.indefOblSg = noun .. b('ekî') decl.indefOblPl = noun .. b('inan') decl.vocSg = noun .. b('o') decl.vocPl = noun .. b('ino') elseif (gender == 'mê') then decl.defConstrSg = noun .. b('a') decl.defConstrPl = noun .. b('ên') decl.defOblSg = noun .. b('ê') decl.defOblPl = noun .. b('an') decl.indefNomSg = noun .. b('ek') decl.indefNomPl = noun .. b('in') decl.indefConstrSg = noun .. b('eke') decl.indefConstrPl = noun .. b('ine') decl.indefOblSg = noun .. b('ekê') decl.indefOblPl = noun .. b('inan') decl.vocSg = noun .. b('ê') decl.vocPl = noun .. b('ino') end elseif (find(noun, '[êiîouû]$') and alt == '2') then if (gender == 'nêr') then decl.defConstrSg = noun .. b('yê') decl.defConstrPl = noun .. b('yên') if (find(noun, '[î]$')) then decl.defOblSg = noun else decl.defOblSg = noun .. b('yî') end decl.defOblPl = noun .. b('yan') decl.indefNomSg = noun .. b('yek') decl.indefNomPl = noun .. b('yin') decl.indefConstrSg = noun .. b('yekî') decl.indefConstrPl = noun .. b('yine') decl.indefOblSg = noun .. b('yekî') decl.indefOblPl = noun .. b('yinan') decl.vocSg = noun .. b('yo') decl.vocPl = noun .. b('yino') elseif (gender == 'mê') then decl.defConstrSg = noun .. b('ya') decl.defConstrPl = noun .. b('yên') if (find(noun, '[ê]$')) then decl.defOblSg = noun else decl.defOblSg = noun .. b('yê') end decl.defOblPl = noun .. b('yan') decl.indefNomSg = noun .. b('yek') decl.indefNomPl = noun .. b('yin') decl.indefConstrSg = noun .. b('yeke') decl.indefConstrPl = noun .. b('yine') decl.indefOblSg = noun .. b('yekê') decl.indefOblPl = noun .. b('yinan') decl.vocSg = noun .. b('yê') decl.vocPl = noun .. b('yino') end elseif (find(noun, '[ae]$') and alt == '2') then if (gender == 'nêr') then decl.defConstrSg = gsub(noun, '(.)$', b('ê')) decl.defConstrPl = gsub(noun, '(.)$', b('ên')) decl.defOblSg = gsub(noun, '(.)$', b('î')) decl.defOblPl = gsub(noun, '(.)$', b('an')) decl.indefNomSg = gsub(noun, '(.)$', 'e' .. b('k')) decl.indefNomPl = gsub(noun, '(.)$', b('in')) decl.indefConstrSg = gsub(noun, '(.)$', 'e' .. b('kî')) decl.indefConstrPl = gsub(noun, '(.)$', b('ine')) decl.indefOblSg = gsub(noun, '(.)$', 'e' .. b('kî')) decl.indefOblPl = gsub(noun, '(.)$', b('inan')) decl.vocSg = gsub(noun, '(.)$', b('o')) decl.vocPl = gsub(noun, '(.)$', b('ino')) elseif (gender == 'mê') then decl.defConstrSg = gsub(noun, '(.)$', b('a')) decl.defConstrPl = gsub(noun, '(.)$', b('ên')) decl.defOblSg = gsub(noun, '(.)$', b('ê')) decl.defOblPl = gsub(noun, '(.)$', b('an')) decl.indefNomSg = gsub(noun, '(.)$', 'e' .. b('k')) decl.indefNomPl = gsub(noun, '(.)$', b('in')) decl.indefConstrSg = gsub(noun, '(.)$', 'e' .. b('ke')) decl.indefConstrPl = gsub(noun, '(.)$', b('ine')) decl.indefOblSg = gsub(noun, '(.)$', 'e' .. b('kê')) decl.indefOblPl = gsub(noun, '(.)$', b('inan')) decl.vocSg = gsub(noun, '(.)$', b('ê')) decl.vocPl = gsub(noun, '(.)$', b('ino')) end elseif (find(noun, '[aeîouû]$')) then if (gender == 'nêr') then decl.defConstrSg = noun .. b('yê') decl.defConstrPl = noun .. b('yên') if (find(noun, '[î]$')) then decl.defOblSg = noun else decl.defOblSg = noun .. b('yî') end decl.defOblPl = noun .. b('yan') decl.indefNomSg = noun .. b('yek') decl.indefNomPl = noun .. b('yin') decl.indefConstrSg = noun .. b('yekî') decl.indefConstrPl = noun .. b('yine') decl.indefOblSg = noun .. b('yekî') decl.indefOblPl = noun .. b('yinan') decl.vocSg = noun .. b('yo') decl.vocPl = noun .. b('yino') elseif (gender == 'mê') then decl.defConstrSg = noun .. b('ya') decl.defConstrPl = noun .. b('yên') decl.defOblSg = noun .. b('yê') decl.defOblPl = noun .. b('yan') decl.indefNomSg = noun .. b('yek') decl.indefNomPl = noun .. b('yin') decl.indefConstrSg = noun .. b('yeke') decl.indefConstrPl = noun .. b('yine') decl.indefOblSg = noun .. b('yekê') decl.indefOblPl = noun .. b('yinan') decl.vocSg = noun .. b('yê') decl.vocPl = noun .. b('yino') end elseif (find(noun, '[ê]$')) then if (gender == 'nêr') then decl.defConstrSg = gsub(noun, '(.)$', b('iyê')) decl.defConstrPl = gsub(noun, '(.)$', b('iyên')) decl.defOblSg = gsub(noun, '(.)$', b('iyî')) decl.defOblPl = gsub(noun, '(.)$', b('iyan')) decl.indefNomSg = gsub(noun, '(.)$', b('iyek')) decl.indefNomPl = gsub(noun, '(.)$', b('iyin')) decl.indefConstrSg = gsub(noun, '(.)$', b('iyekî')) decl.indefConstrPl = gsub(noun, '(.)$', b('iyine')) decl.indefOblSg = gsub(noun, '(.)$', b('iyekî')) decl.indefOblPl = gsub(noun, '(.)$', b('iyinan')) decl.vocSg = gsub(noun, '(.)$', b('iyo')) decl.vocPl = gsub(noun, '(.)$', b('iyino')) elseif (gender == 'mê') then decl.defConstrSg = gsub(noun, '(.)$', b('iya')) decl.defConstrPl = gsub(noun, '(.)$', b('iyên')) if (find(noun, '[ê]$')) then decl.defOblSg = noun else decl.defOblSg = gsub(noun, '(.)$', b('iyê')) end decl.defOblPl = gsub(noun, '(.)$', b('iyan')) decl.indefNomSg = gsub(noun, '(.)$', b('iyek')) decl.indefNomPl = gsub(noun, '(.)$', b('iyin')) decl.indefConstrSg = gsub(noun, '(.)$', b('iyeke')) decl.indefConstrPl = gsub(noun, '(.)$', b('iyine')) decl.indefOblSg = gsub(noun, '(.)$', b('iyekê')) decl.indefOblPl = gsub(noun, '(.)$', b('iyinan')) decl.vocSg = gsub(noun, '(.)$', b('iyê')) decl.vocPl = gsub(noun, '(.)$', b('iyino')) end end -- Spelling correction (îy → iy) + link for i, v in pairs(decl) do if (tags == 'na') then decl[i] = mw.ustring.gsub(decl[i], '<b>(.+)</b>', '%1') decl[i] = gsub(decl[i], 'îy', 'iy') else decl[i] = gsub(decl[i], 'î<b>y', '<b>iy') decl[i] = link{term=decl[i], lang=langKu} end end -- Zêdekirina cînavên wê/wî/wan ji bo nîşandera çemandî. decl.defDemonsOblSg = oblPronoun(gender) .. ' ' .. decl.defOblSg decl.defDemonsOblPl = 'wan ' .. decl.defOblPl return decl end --============================================================================== -- DAWÎ --============================================================================== -- ───────────────────────────────────────────────────────────────────────────── -- ÇÊKIRINA TABLOYA GOTARÊ: [[Şablon:ku-tewîn-nav]] -- Bnr. [[sêv]], [[gund]], [[bajar]], [[rê]] -- ───────────────────────────────────────────────────────────────────────────── local function genderTable(gender) if (gender == 'nêr') then return ' Zayenda nêr a' elseif (gender == 'mê') then return ' Zayenda mê ya' end end local function formsTab(forms, sep) forms = mw.text.split(forms, ';') for i, v in ipairs(forms) do forms[i] = v end if sep then sep = sep else sep = ', ' end return table.concat(forms, sep) end function export.tewandin(frame) local args = frame:getParent().args local noun = args[1] local gender = args[2] local singular = args[3] local alt = args['guherto'] -- Parametre ji bo formên ne standard local vocSg = args['bang_y'] local vocPl = args['bang_p'] local defOblSg = args['çemandî_y'] local defOblPl = args['çemandî_p'] local declMNtab = require('Modul:ku-tewîn-nav/mê û nêr').declMNtable local declSingularTab = require('Modul:ku-tewîn-nav/yekjimar').declSingularTable if (gender == 'mê û nêr') then return declMNtab(noun, alt) elseif (singular == 'y') then return declSingularTab(noun, gender, alt) elseif gender == '-' then local flexTab = export.declCompoundNoun(noun, gender) return '{| class="wikitable tablo-flip tewandin-tablo mw-collapsible' ..'\n|-' ..'\n! colspan="3" class="tewandin-header2" align="center" | Tewandin: zayenda ' .. flexTab['gender'] .. ' &nbsp;&nbsp;' ..'\n|-' ..'\n! class="row-flip tewandin-header3" | Rewş' ..'\n! class="tewandin-header3" | Yekjimar' ..'\n! class="tewandin-header3" | Pirjimar' ..'\n|-' ..'\n! class="row-flip tewandin-rez"| Binavkirî' ..'\n|' .. link{lang=langKu, term=flexTab["defSg"]} ..'\n|' .. link{lang=langKu, term=flexTab["defPl"]} ..'\n|-' ..'\n! class="row-flip tewandin-rez" | Nebinavkirî' ..'\n|' .. link{lang=langKu, term=flexTab["indefSg"]} ..'\n|' .. link{lang=langKu, term=flexTab["indefPl"]} ..'\n|-' ..'\n| colspan="3" align="center" style="font-size:x-small;" | <b style="color:green">Agahdarî</b>: Di peyvên <u>hevedudanî</u> de tenê peyva<br>yekem li gor diyarîtiyê û li gor hejmarê diguhere.' ..'\n|}' else local flexTabAlt1 = export.declSimpleNoun{noun, gender, alt='1'} local flexTabAlt2 = export.declSimpleNoun{noun, gender, alt='2'} -- Formên "Nîşandera çemandî" li gorî formên çemandî yên standard tên çêkirin: -- Bo mînak "wî bajarî" rast e feqet "wî bajêr" nayê bikaranîn -- Binêre gotûbêja [[Wîkîferheng:Dîwan/2023#dayê/diyê]] if vocSg then flexTabAlt1["vocSg"] = formsTab(args['bang_y']) flexTabAlt2["vocSg"] = formsTab(args['bang_y']) end if vocPl then flexTabAlt1["vocPl"] = formsTab(args['bang_p']) flexTabAlt2["vocPl"] = formsTab(args['bang_p']) end if defOblSg then flexTabAlt1["defOblSg"] = formsTab(args['çemandî_y']) flexTabAlt2["defOblSg"] = formsTab(args['çemandî_y']) end if defOblPl then flexTabAlt1["defOblPl"] = formsTab(args['çemandî_p']) flexTabAlt2["defOblPl"] = formsTab(args['çemandî_p']) end local function flexTab(case) if alt == 'hemû' then if (vocSg ~= nil or vocPl ~= nil or defOblSg ~= nil or defOblPl ~= nil) then return flexTabAlt1[case] else return flexTabAlt1[case] .. '<br>' .. flexTabAlt2[case] end elseif alt == '2' then return flexTabAlt2[case] else return flexTabAlt1[case] end end return '{| class="wikitable tablo-flip tewandin-tablo mw-collapsible"' ..'\n|-' ..'\n! colspan="3" class="row-flip tewandin-header"| Tewandina <i>' .. noun .. '</i>&nbsp;&nbsp;' ..'\n|-' ..'\n! colspan="3" class="tewandin-header2" align="center" |' .. genderTable(gender) .. ' binavkirî' ..'\n|-' ..'\n! class="row-flip tewandin-header3" | Rewş' ..'\n! class="tewandin-header3" | Yekjimar' ..'\n! class="tewandin-header3" | Pirjimar' ..'\n|-' ..'\n! class="row-flip tewandin-rez" | Navkî' ..'\n|' .. flexTabAlt1["defNomSg"] ..'\n|' .. flexTabAlt1["defNomPl"] ..'\n|-' ..'\n! class="row-flip tewandin-rez" | Îzafe' ..'\n|' .. flexTab("defConstrSg") ..'\n|' .. flexTab("defConstrPl") ..'\n|-' ..'\n! class="row-flip tewandin-rez" | Çemandî' ..'\n|' .. flexTab("defOblSg") ..'\n|' .. flexTab("defOblPl") ..'\n|-' ..'\n! class="row-flip tewandin-rez" | Nîşandera çem.' ..'\n|' .. flexTab("defDemonsOblSg") ..'\n|' .. flexTab("defDemonsOblPl") ..'\n|-' ..'\n! class="row-flip tewandin-rez" | Bangkirin' ..'\n|' .. flexTab("vocSg") ..'\n|' .. flexTab("vocPl") ..'\n|-' ..'\n! colspan="3" class="tewandin-header2" align="center" |' .. genderTable(gender) .. ' nebinavkirî' ..'\n|-' ..'\n! class="row-flip tewandin-header3" | Rewş' ..'\n! class="tewandin-header3" | Yekjimar' ..'\n! class="tewandin-header3" | Pirjimar' ..'\n|-' ..'\n! class="row-flip tewandin-rez" | Navkî' ..'\n|' .. flexTab("indefNomSg") ..'\n|' .. flexTab("indefNomPl") ..'\n|-' ..'\n! class="row-flip tewandin-rez" | Îzafe' ..'\n|' .. flexTab("indefConstrSg") ..'\n|' .. flexTab("indefConstrPl") ..'\n|-' ..'\n! class="row-flip tewandin-rez" | Çemandî' ..'\n|' .. flexTab("indefOblSg") ..'\n|' .. flexTab("indefOblPl") ..'\n|}' end end -- ───────────────────────────────────────────────────────────────────────────── -- Bikaranîn, mk.: -- 1. {{#invoke:ku-tewîn-nav|tew|pos=indefOblSg}} -- 2. {{#invoke:ku-tewîn-nav|tew|nêr|pos=indefConstrSg}} -- Ji bo tabloyên formên navdêran: [[Şablon:ku-tewîn-navForm]] -- Bnr. [[sêva]], [[sêvê]], [[hevala]], [[hevalê]] -- ───────────────────────────────────────────────────────────────────────────── function export.tew(frame) local args = frame:getParent().args local noun = args[1] local gender = frame.args[1] or args[2] local alt = args['guherto'] local case = frame.args['rewş'] if alt == 'hemû' then local tew_hemu = export.declSimpleNoun{noun, gender, alt='1'}[case] .. '<br>' .. export.declSimpleNoun{noun, gender, alt='2'}[case] return tew_hemu else return export.declSimpleNoun{noun, gender, alt=alt}[case] end end -- ───────────────────────────────────────────────────────────────────────────── -- Get comma separated forms -- Bnr. [[MediaWiki:Gadget-QQ.js]] -- ───────────────────────────────────────────────────────────────────────────── function export.get_comma_separated_forms(frame) local noun = frame.args[1] local gender = frame.args[2] local declResults local declResults2 local forms = {} if gender == "mê û nêr" then declResults = export.declSimpleNoun{noun, 'nêr', tags='na'} declResults2 = export.declSimpleNoun{noun, 'mê', tags='na'} for k, v in pairs(declResults2) do table.insert(forms, v) end else declResults = export.declSimpleNoun{noun, gender, tags='na'} end for k, v in pairs(declResults) do table.insert(forms, v) end -- Remove duplicate elements local newForms = {} local checkForms = {} for _, v in ipairs(forms) do if not checkForms[v] then checkForms[v] = true table.insert(newForms, v) end end return table.concat(newForms, ',') end return export qsspa13fw48q0jwqc13m42cdhmb39el Şablon:ku-tewîn-navForm 10 652809 6237172 6237120 2026-06-05T13:24:44Z Ghybu 1393 6237172 wikitext text/x-wiki <templatestyles src="Şablon:ku-tewîn/style.css"/><includeonly> {| class="wikitable tablo-flip tewandin-tablo" style=" width:250px;" |- ! colspan="{{#ifeq:{{{2|}}}|mê û nêr|5|3}}" align="center" | <span style=float:left>{{#if:{{{wate|}}}|({{{wate}}})|}}</span> {{#ifeq:{{{2|}}}|mê û nêr|Zayendên|Zayenda}} {{{2}}} {{#if:{{{4|}}}|{{#switch:{{{2}}}|nêr=a|mê=ya|mê û nêr=ên}} {{{4|}}}|}} |- ! class="align-left-flip tewandin-header3" | Rewş ! class="tewandin-header3" | {{#ifeq:{{{2|}}}|mê û nêr|Mê|Yekjimar}} ! class="tewandin-header3" | {{#ifeq:{{{2|}}}|mê û nêr|Nêr|Pirjimar}} {{#ifeq:{{{2|}}}|mê û nêr| ! class="tewandin-header3" {{!}} Pirjimar }} |- ! class="align-left-flip tewandin-rez" | [[{{#invoke:string|gsub|{{{3}}}|(%w+)(-*)(%w*)(-*)(%w*)|%1}}|{{ucfirst:{{#invoke:string|gsub|{{{3}}}|(%w+)(-*)(%w*)(-*)(%w*)|%1}}}}]] {{#ifeq:{{#invoke:string|gsub|{{{3}}}|(%w+)(-*)(%w*)(-*)(%w*)|%1}}-{{{4}}}|navkî-binavkirî| {{!}} {{#invoke:ku-tewîn-nav|tew|rewş=defNomSg}} {{!}} {{#invoke:ku-tewîn-nav|tew|rewş=defNomPl}} }}<!-- -->{{#ifeq:{{#invoke:string|gsub|{{{3}}}|(%w+)(-*)(%w*)(-*)(%w*)|%1}}|bangkirin| {{#ifeq:{{{2|}}}|mê û nêr| {{!}} {{#invoke:ku-tewîn-nav|tew|mê|rewş=vocSg}} {{!}} {{#invoke:ku-tewîn-nav|tew|nêr|rewş=vocSg}} {{!}} {{#invoke:ku-tewîn-nav|tew|nêr|rewş=vocPl}} | {{!}} {{#invoke:ku-tewîn-nav|tew|rewş=vocSg}} {{!}} {{#invoke:ku-tewîn-nav|tew|rewş=vocPl}} }} }}<!-- -->{{#ifeq:{{#invoke:string|gsub|{{{3}}}|(%w+)(-*)(%w*)(-*)(%w*)|%1}}-{{{4}}}|navkî-nebinavkirî| {{#ifeq:{{{2|}}}|mê û nêr| {{!}} {{#invoke:ku-tewîn-nav|tew|mê|rewş=indefNomSg}} {{!}} {{#invoke:ku-tewîn-nav|tew|nêr|rewş=indefNomSg}} {{!}} {{#invoke:ku-tewîn-nav|tew|nêr|rewş=indefNomPl}} | {{!}} {{#invoke:ku-tewîn-nav|tew|rewş=indefNomSg}} {{!}} {{#invoke:ku-tewîn-nav|tew|rewş=indefNomPl}} }} }}<!-- -->{{#ifeq:{{#invoke:string|gsub|{{{3}}}|(%w+)(-*)(%w*)(-*)(%w*)|%1}}-{{{4}}}|îzafe-binavkirî| {{#ifeq:{{{2|}}}|mê û nêr| {{!}} {{#invoke:ku-tewîn-nav|tew|mê|rewş=defConstrSg}} {{!}} {{#invoke:ku-tewîn-nav|tew|nêr|rewş=defConstrSg}} {{!}} {{#invoke:ku-tewîn-nav|tew|nêr|rewş=defConstrPl}} | {{!}} {{#invoke:ku-tewîn-nav|tew|rewş=defConstrSg}} {{!}} {{#invoke:ku-tewîn-nav|tew|rewş=defConstrPl}} }} }}<!-- -->{{#ifeq:{{#invoke:string|gsub|{{{3}}}|(%w+)(-*)(%w*)(-*)(%w*)|%1}}-{{{4}}}|îzafe-nebinavkirî| {{#ifeq:{{{2|}}}|mê û nêr| {{!}} {{#invoke:ku-tewîn-nav|tew|mê|rewş=indefConstrSg}} {{!}} {{#invoke:ku-tewîn-nav|tew|nêr|rewş=indefConstrSg}} {{!}} {{#invoke:ku-tewîn-nav|tew|nêr|rewş=indefConstrPl}} | {{!}} {{#invoke:ku-tewîn-nav|tew|rewş=indefConstrSg}} {{!}} {{#invoke:ku-tewîn-nav|tew|rewş=indefConstrPl}} }} }}<!-- -->{{#ifeq:{{#invoke:string|gsub|{{{3}}}|(%w+)(-*)(%w*)(-*)(%w*)|%1}}-{{{4}}}|çemandî-binavkirî| {{#ifeq:{{{2|}}}|mê û nêr| {{!}} {{#invoke:ku-tewîn-nav|tew|mê|rewş=defOblSg}} {{!}} {{#invoke:ku-tewîn-nav|tew|nêr|rewş=defOblSg}} {{!}} {{#invoke:ku-tewîn-nav|tew|nêr|rewş=defOblPl}} | {{!}} {{#invoke:ku-tewîn-nav|tew|rewş=defOblSg}} {{!}} {{#invoke:ku-tewîn-nav|tew|rewş=defOblPl}} }} }}<!-- -->{{#ifeq:{{#invoke:string|gsub|{{{3}}}|(%w+)(-*)(%w*)(-*)(%w*)|%1}}-{{{4}}}|çemandî-nebinavkirî| {{#ifeq:{{{2|}}}|mê û nêr| {{!}} {{#invoke:ku-tewîn-nav|tew|mê|rewş=indefOblSg}} {{!}} {{#invoke:ku-tewîn-nav|tew|nêr|rewş=indefOblSg}} {{!}} {{#invoke:ku-tewîn-nav|tew|nêr|rewş=indefOblPl}} | {{!}} {{#invoke:ku-tewîn-nav|tew|rewş=indefOblSg}} {{!}} {{#invoke:ku-tewîn-nav|tew|rewş=indefOblPl}} }} }} |- <!---------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------ -->{{#ifeq:{{#invoke:string|gsub|{{{3}}}|(%w+)(-*)(%w*)(-*)(%w*)|%3}}|çemandî| ! class="align-left-flip tewandin-rez" {{!}} [[çemandî|Çemandî]] {{#switch:{{{2|}}}-{{{4}}} |mê û nêr-binavkirî= {{!}} {{#invoke:ku-tewîn-nav|tew|mê|rewş=defOblSg}} {{!}} {{#invoke:ku-tewîn-nav|tew|nêr|rewş=defOblSg}} {{!}} {{#invoke:ku-tewîn-nav|tew|nêr|rewş=defOblPl}} |mê-binavkirî|nêr-binavkirî= {{!}} {{#invoke:ku-tewîn-nav|tew|rewş=defOblSg}} {{!}} {{#invoke:ku-tewîn-nav|tew|rewş=defOblPl}} |mê û nêr-nebinavkirî= {{!}} {{#invoke:ku-tewîn-nav|tew|mê|rewş=indefOblSg}} {{!}} {{#invoke:ku-tewîn-nav|tew|nêr|rewş=indefOblSg}} {{!}} {{#invoke:ku-tewîn-nav|tew|nêr|rewş=indefOblPl}} |mê-nebinavkirî|nêr-nebinavkirî= {{!}} {{#invoke:ku-tewîn-nav|tew|rewş=indefOblSg}} {{!}} {{#invoke:ku-tewîn-nav|tew|rewş=indefOblPl}} }} }}<!-- -->{{#ifeq:{{#invoke:string|gsub|{{{3}}}|(%w+)(-*)(%w*)(-*)(%w*)|%3}}-{{{4}}}|bangkirin-binavkirî| ! class="align-left-flip tewandin-rez" {{!}} [[bangkirin|Bangkirin]] {{#ifeq:{{{2|}}}|mê û nêr| {{!}} {{#invoke:ku-tewîn-nav|tew|mê|rewş=vocSg}} {{!}} {{#invoke:ku-tewîn-nav|tew|nêr|rewş=vocSg}} {{!}} {{#invoke:ku-tewîn-nav|tew|nêr|rewş=vocPl}} | {{!}} {{#invoke:ku-tewîn-nav|tew|rewş=vocSg}} {{!}} {{#invoke:ku-tewîn-nav|tew|rewş=vocPl}} }} }} |- <!---------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------ -->{{#ifeq:{{#invoke:string|gsub|{{{3}}}|(%w+)(-*)(%w*)(-*)(%w*)|%5}}-{{{4}}}|bangkirin-binavkirî| ! class="align-left-flip tewandin-rez" {{!}} [[bangkirin|Bankirin]] {{!}} {{#invoke:ku-tewîn-nav|tew|mê|rewş=vocSg}} {{!}} {{#invoke:ku-tewîn-nav|tew|nêr|rewş=vocSg}} {{!}} {{#invoke:ku-tewîn-nav|tew|nêr|rewş=vocPl}} }} |}{{#ifeq:{{{îp|}}}|1|[[Kategorî:ku-tew-nav-îp]]}}</includeonly><noinclude>{{belgekirin}}</noinclude> d0ymuxe52okckupzl0709klrot1gxun Şablon:ku-tewîn-reh 10 670877 6237203 6237040 2026-06-05T16:24:01Z Ghybu 1393 6237203 wikitext text/x-wiki <templatestyles src="Şablon:ku-tewîn/style.css"/> <includeonly>{| class="wikitable tablo-flip tewandin-tablo" style="max-width:250px" ! colspan="2" align="center" | Lêkera {{#switch:{{{form|?}}}|gh=gerguhêz|ngh=negerguhêz|{{{form}}} }} |- | bgcolor="#FFFFE0" | Rehê{{#if:{{{niha2|}}}|n}} niha | style="padding:0.5em" | {{#if:{{{pêşgir|}}}|&nbsp;{{{pêşgir}}}}}[[-{{{niha}}}-]]{{#if:{{{dn|}}}|&nbsp;<small>({{{dn}}})</small>}}<!-- -->{{#if:{{{niha2|}}}|<br>{{#if:{{{pêşgir|}}}|&nbsp;{{{pêşgir}}}}}[[-{{{niha2}}}-]]{{#if:{{{dn2|}}}|&nbsp;<small>({{{dn2}}})</small>}}}}<!-- -->{{#if:{{{niha3|}}}|<br>{{#if:{{{pêşgir|}}}|&nbsp;{{{pêşgir}}}}}[[-{{{niha3}}}-]]{{#if:{{{dn3|}}}|&nbsp;<small>({{{dn3}}})</small>}}}}<!-- -->{{#if:{{{niha4|}}}|<br>{{#if:{{{pêşgir|}}}|&nbsp;{{{pêşgir}}}}}[[-{{{niha4}}}-]]{{#if:{{{dn4|}}}|&nbsp;<small>({{{dn4}}})</small>}}}}<!-- -->{{#if:{{{niha5|}}}|<br>{{#if:{{{pêşgir|}}}|&nbsp;{{{pêşgir}}}}}[[-{{{niha5}}}-]]{{#if:{{{dn5|}}}|&nbsp;<small>({{{dn5}}})</small>}}}}<!-- -->{{#if:{{{niha6|}}}|<br>{{#if:{{{pêşgir|}}}|&nbsp;{{{pêşgir}}}}}[[-{{{niha6}}}-]]{{#if:{{{dn6|}}}|&nbsp;<small>({{{dn6}}})</small>}}}}<!-- -->{{#if:{{{niha7|}}}|<br>{{#if:{{{pêşgir|}}}|&nbsp;{{{pêşgir}}}}}[[-{{{niha7}}}-]]{{#if:{{{dn7|}}}|&nbsp;<small>({{{dn7}}})</small>}}}} |- | bgcolor="#FFFFE0" | Rehê{{#if:{{{borî2|}}}|n}} borî | style="padding:0.5em" | {{#if:{{{pêşgir|}}}|&nbsp;{{{pêşgir}}}}}[[-{{{borî}}}-]]{{#if:{{{db|}}}|&nbsp;<small>({{{db}}})</small>}}<!-- -->{{#if:{{{borî2|}}}|<br>{{#if:{{{pêşgir|}}}|&nbsp;{{{pêşgir}}}}}[[-{{{borî2}}}-]]{{#if:{{{db2|}}}|&nbsp;<small>({{{db2}}})</small>}}}}<!-- -->{{#if:{{{borî3|}}}|<br>{{#if:{{{pêşgir|}}}|&nbsp;{{{pêşgir}}}}}[[-{{{borî3}}}-]]{{#if:{{{db3|}}}|&nbsp;<small>({{{db3}}})</small>}}}}<!-- -->{{#if:{{{borî4|}}}|<br>{{#if:{{{pêşgir|}}}|&nbsp;{{{pêşgir}}}}}[[-{{{borî4}}}-]]{{#if:{{{db4|}}}|&nbsp;<small>({{{db4}}})</small>}}}}<!-- -->{{#if:{{{borî5|}}}|<br>{{#if:{{{pêşgir|}}}|&nbsp;{{{pêşgir}}}}}[[-{{{borî5}}}-]]{{#if:{{{db5|}}}|&nbsp;<small>({{{db5}}})</small>}}}} |- | colspan="2" class="blue-link" style="text-align:center; background-color:#transparent; font-size:87%;" | [[Wêne:1rightarrow.png|15px|link=]] {{#if:{{{lînk|}}}|[[Tewandin:{{{lînk}}}|Tewandin:{{PAGENAME}}]]|{{#if:{{{tewandinên din|}}}|<b>[[Tewandin:{{{tewandinên din}}}|TEWANDINA LÊKERÊ]]</b>|<b>[[Tewandin:{{PAGENAME}}|TEWANDINA LÊKERÊ]]</b>}}}} |}</includeonly><noinclude> {{belgekirin}} </noinclude> q86ecplhnvvwhdw4a8m6ke8erzc1lot A vitamini 0 853033 6237174 4604411 2026-06-05T14:03:46Z Kawarizgar1 14836 /* Navdêr */ 6237174 wikitext text/x-wiki == {{ziman|tr}} == === Bilêvkirin === * {{ku-tîp|A vîtamînî}} === Navdêr === {{navdêr|tr}} # [[vîtamîn A]] # [[vîtamîna Ayê]] ggh46ltcz9p5fmloaj1u04ykmknnvio Şablon:ku-tewîn/style.css 10 1324902 6237211 6236918 2026-06-05T16:32:16Z Ghybu 1393 6237211 sanitized-css text/css /* Bikaranîn: [[Şablon:ku-tewîn-nav]] [[Şablon:ku-tewîn-navForm]] [[Şablon:ku-tewîn-lk]] [[Şablon:ku-tewîn-reh]] */ .tewandin-tablo { /* margin: 0.5em 0 0.5em 0.5em;*/ /*Bnr. [[MediaWiki:Gadget-Site.css]] */ background-color: white; } .tewandin-tablo td:not(.blue-link) a.new { color: inherit; text-decoration: none; cursor: pointer; } .tewandin-header { background-color: #f8f9fa; } .tewandin-header2 { background-color: #eaecf0; } .tewandin-header3 { background-color: #FFFFE0; } .tewandin-rez { background-color: #f8f9fa; } /* Dark mode */ html.skin-theme-clientpref-night .tewandin-tablo { background-color: #101418; } html.skin-theme-clientpref-night .tewandin-header { background-color: #202122; color: white; } html.skin-theme-clientpref-night .tewandin-header2 { background-color: #27292d; color: white; } html.skin-theme-clientpref-night .tewandin-header3 { background-color: #24241a; color: white; } html.skin-theme-clientpref-night .tewandin-rez { background-color: #202122; color: white; } html.skin-theme-clientpref-night .tewandin-tablo td { background-color: #101418; color: white; } /***** Mobîl *****/ @media screen and ( max-width: 748px ) { .tewandin-tablo { display: table; } } htj2qv7bi6pr3g8zhs0b7axhu2a5oof Modul:ku-tewandin/tablo/ceribandin 828 1325207 6237225 6237080 2026-06-05T23:19:31Z Ghybu 1393 6237225 Scribunto text/plain -- [[Wîkîferheng:ceribandin]] -- [[Template:ku-tewandin/ceribandin]] -- [[Template:ku-tewandin/ceribandin/style.css]] local conj = require('Modul:ku-tewandin/ceribandin') local export = {} function export.tablo(frame) local args = frame:getParent().args local baseOpts = { isTransitive = false, isCompoundVerb = args['valahî'] or false, preSimpleVerb = args['pêşgir'] or '', postSimpleVerb = args['paşgir'] or '', overrideBi = args['bi'] or nil, overrideDi = args['di'] or nil, overrideNa = args['na'] or nil, overrideNe = args['ne'] or nil, impNegForm = nil, addPreverbParticles = 'na' -- Remove preverb particles (ê/dê) } local presentStems = {args['niha'], args['niha2'], args['niha3']} local pastStems = {args['borî'], args['borî2'], args['borî3']} local transitivity = args['form'] if (transitivity ~= 'gerguhêz' and transitivity ~= 'negerguhêz') then 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 concatPrs = false local conjTab = conj.conjugateAllTenses(baseOpts, presentStems, pastStems, 'positive', concatPrs) -- Negatives conjugations table local negConjTab = conj.conjugateAllTenses(baseOpts, presentStems, pastStems, 'negative', concatPrs) -- Construction of conjugation table whose dimensions change depending on -- whether it is a transitive verb or not; and whether there is a preverbParticle (yes or no). -- First, we create the table header, then the body (content). local function tenseTableHeader(tense) local tabHeader = function(col) local header = '\n! id="' .. conjTab[tense].name .. '"' .. 'class="' .. conjTab[tense].stem .. '-stem tense-table-title" colspan="'.. col .. '" |' .. conjTab[tense].nameKu .. '- <small><i>-{'.. conjTab[tense].nameEn ..'}-</i></small>' .. '\n|-' return header end local preverbParticle = '' local tabH = tabHeader(4) if conjTab[tense].preverbParticle == "ê" then tabH = tabHeader(5) preverbParticle = '\n! class="agent-title" | ' end local tenseHeader = tabHeader(2) .. '\n! class="negative" | Erênî' ..'\n! class="positive" | Neyînî' .. '\n|-' if (conjTab[tense].stem == "past" and transitivity == "gerguhêz") then tenseHeader = tabH .. '\n! class="agent-title" | Biker <span class="toggle-width">zêde <span class="arrow">›</span></span>' .. preverbParticle .. '\n! class="object-title" | Berkar' .. '\n! class="negative" | Erênî' .. '\n! class="positive" | Neyînî' .. '\n|-' end return tenseHeader end local function tenseTableBody(tense, pers) local preverbParticules = conj.getPreverbParticules(conjTab[tense].preverbParticle, conjTab[tense].stem, false) local bila = '' if conjTab[tense].mode == "subjunctive" then bila = '<span style="color:gray">(bila) </span>' end local preverbParticle = '' if conjTab[tense].preverbParticle == "ê" then preverbParticle = '\n| class="particle" | (y)ê/dê' end local body = '\n|' .. bila .. conj.pronouns[pers] .. ' ' .. preverbParticules[pers] .. ' ' .. conjTab[tense].conj[pers] .. '\n|' .. bila .. conj.pronouns[pers] .. ' ' .. preverbParticules[pers] .. ' ' .. negConjTab[tense].conj[pers] .. '\n|-' if (conjTab[tense].stem == "past" and transitivity == "gerguhêz") then body = '\n| class="agent" |' .. bila .. conj.agents[pers] .. preverbParticle .. '\n| class="object" |' .. conj.pronouns[pers] .. '\n|' .. conjTab[tense].conj[pers] .. '\n|' .. negConjTab[tense].conj[pers] .. '\n|-' end return body end -- Construction of the conjugation table for a given tense: the header -- and the body are combined. local function conjugateTable(tense) local tenseBody = '' local tenseHeader = tenseTableHeader(tense) for _, pers in ipairs(conj.order) do tenseBody = tenseBody .. tenseTableBody(tense, pers) end local tab = '\n{| cellpadding="2" class="tense-table"' .. '\n|-' .. tenseHeader .. tenseBody .. '\n|}' return tab end --Retrieving some parameters for creating the main table header local verb = args[1] 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! class="negative" | Erênî' .. '\n! class="positive" | Neyînî' .. '\n|-' .. '\n| <span style="color:gray">(tû)</span> ' .. conjTab.impPresent.conj.s2 .. '\n| <span style="color:gray">(tû)</span> ' .. negConjTab.impPresent.conj.s2 .. '\n|-' .. '\n| <span style="color:gray">(hûn)</span> ' .. conjTab.impPresent.conj.p2 .. '\n| <span style="color:gray">(hûn)</span> ' .. negConjTab.impPresent.conj.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 5cnfthor4obwr5ng40tq98wvpsfcjh6 bi êşê ketin 0 1326838 6237175 6197812 2026-06-05T14:12:55Z Kawarizgar1 14836 /* Lêker */ 6237175 wikitext text/x-wiki == {{ziman|ku}} == === Bilêvkirin === * {{ku-kîte}} === Lêker === {{lêker|ku|z=b-ngh}} # [[nexweş ketin]] #* {{jêder|ku|jêgirtin=Dewlet bi fen û fûtan bi benda miletî ket û wan jî wekî mirîşka gêj, rabû, mirîşk û elok û werdek û qazên xwe giş bi ser hev da şerjê kirin û binax kirin. Xêr e? Mirîşkên we '''bi êşê ketine'''. Ê!? Wan bikujin û biavêjin! De bicehime! Tişta ez dizanim wextê ku mirîşk '''bi êşê diketin''' me ew şerjê dikirin û dixwarin. Min rojekê nedît kesek bi êşa mirîşkan mir.|{{Jêgirtin/Sadiq Ûskan/Şampaz}}}} ==== Etîmolojî ==== Ji {{heve|ku|bi|êş|ketin}}. ==== Werger ==== {{werger-ser}} {{werger-bin}} 8m9opwmgqn7n200tjl9mw6q6kr44rmq Modul:ku-tewandin/ceribandin 828 1356654 6237216 6237079 2026-06-05T18:47:04Z Ghybu 1393 6237216 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 = {s1='m', s2='yî', s3='', p1='n', p2='n', p3='n'} else ends = {s1='im', s2='î', s3='e', p1='in', 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 -- 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) -- 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 --[[ local preverbParticle = preverbParticles[pers] if preverbParticle ~= '' then preverbParticle = preverbParticle .. ' ' 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 conjVerb = link{term=conjVerb, lang=langKu} -- Addition of the preverbal particle -- infoTense.conj[pers] = preverbParticle .. conjVerb infoTense.conj[pers] = 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 PRONOUMS -- ==================================================================================== function export.conjugateAllTenses(baseOpts, presentStems, pastStems, negation, concatPrs) 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 pronoun 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. in the template: {{#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, 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]] -- ==================================================================================== 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, } local function removeTags(tag) tag = mw.ustring.gsub(tag, '%[%[(.+)%|(.+)%]%]', '%2') tag = mw.ustring.gsub(tag, '<b>(.+)</b>', '%1') tag = mw.ustring.gsub(tag, '<span(.*)>(.*)</span>', '%2') return tag end local function concateList(tenseList) local concatList = {} for _, pers in ipairs({"s1", "s2", "s3", "p1"}) do local tense = removeTags(tenseList[pers]) -- Remove tags 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 3jaadfrh4e54k90g1s020pqh38dyal6 6237217 6237216 2026-06-05T19:05:46Z Ghybu 1393 6237217 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 = {s1='m', s2='yî', s3='', p1='n', p2='n', p3='n'} else ends = {s1='im', s2='î', s3='e', p1='in', 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 -- 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) -- 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 --[[ local preverbParticle = preverbParticles[pers] if preverbParticle ~= '' then preverbParticle = preverbParticle .. ' ' 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 conjVerb = link{term=conjVerb, lang=langKu} -- Addition of the preverbal particle -- infoTense.conj[pers] = preverbParticle .. conjVerb infoTense.conj[pers] = 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 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. in the template: {{#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, 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]] -- ==================================================================================== 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, } local function removeTags(tag) tag = mw.ustring.gsub(tag, '%[%[(.+)%|(.+)%]%]', '%2') tag = mw.ustring.gsub(tag, '<b>(.+)</b>', '%1') tag = mw.ustring.gsub(tag, '<span(.*)>(.*)</span>', '%2') return tag end local function concateList(tenseList) local concatList = {} for _, pers in ipairs({"s1", "s2", "s3", "p1"}) do local tense = removeTags(tenseList[pers]) -- Remove tags 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 hk4a0gxoqnxtfo08nz327mw5kr8tv26 6237224 6237217 2026-06-05T23:16:09Z Ghybu 1393 6237224 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 = {s1='m', s2='yî', s3='', p1='n', p2='n', p3='n'} else ends = {s1='im', s2='î', s3='e', p1='in', 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ê' -- 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) 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 h254pf3ttkgzc8y8b7l7o6ke10lthzk berfîtik 0 1356958 6237204 6232776 2026-06-05T16:24:43Z Keyomerd 8814 /* Kurmancî */ 6237204 wikitext text/x-wiki == {{ziman|ku}} == === Navdêr === {{navdêr|ku|z=m}} # {{f|ku|teyr|Efrîn}} {{guharto|ku|berfoke}} 197edbxmclo9kjmq1j8gnq3zrrd4rkb 6237207 6237204 2026-06-05T16:25:21Z Keyomerd 8814 /* Navdêr */ 6237207 wikitext text/x-wiki == {{ziman|ku}} == === Navdêr === {{navdêr|ku|z=m}} # {{f|ku|Efrîn}} {{guharto|ku|berfoke}} mtz82ns7gkpdll3gz12f4m2az41lwmj Modul:ku-tewandin/tabloGotar 828 1357097 6237227 6237061 2026-06-05T23:27:31Z Ghybu 1393 6237227 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 -- 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 1lgqoutgq5adech90ijnv4uqlagh28a 6237228 6237227 2026-06-05T23:29:25Z Ghybu 1393 6237228 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 -- 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 2ux8rf37znqs6zulzmicgjgx05lllav berfîtok 0 1357286 6237206 6236864 2026-06-05T16:25:06Z Keyomerd 8814 /* Kurmancî */ 6237206 wikitext text/x-wiki == {{ziman|ku}} == === Navdêr === {{navdêr|ku|z=m}} # {{f|ku|teyr|Efrîn}} {{guharto|ku|berfoke}} 197edbxmclo9kjmq1j8gnq3zrrd4rkb 6237208 6237206 2026-06-05T16:25:39Z Keyomerd 8814 /* Navdêr */ 6237208 wikitext text/x-wiki == {{ziman|ku}} == === Navdêr === {{navdêr|ku|z=m}} # {{f|ku|Efrîn}} {{guharto|ku|berfoke}} mtz82ns7gkpdll3gz12f4m2az41lwmj pirs girê dan 0 1357298 6237170 6237161 2026-06-05T12:43:51Z Kawarizgar1 14836 /* Biwêj */ 6237170 wikitext text/x-wiki == {{ziman|ku}} == === Bilêvkirin === * {{ku-kîte}} === Biwêj === {{biwêj|ku}} # [[hesab pirsîn]], [[doz danîn]], [[dad danîn]] , [[pirs danîn]], [[dada tiştekî danîn]], [[dada kesekî danîn]], [[dad danîn kesekî]] , [[doza tiştekî danîn]] , [[doza kesekî danîn]], [[pirs girêdan yekî]] #: Li rêyê ji me ra pirs girêda ==== Etîmolojî ==== Ji {{heve|ku|pirs|girêdan}}. ==== Werger ==== {{werger-ser}} * {{Z|tr}}:{{W|tr|hesap sormak|guman=erê}} {{werger-bin}} 98bcr8iubuj5hbe40e73xmeyudph0rr 6237176 6237170 2026-06-05T15:13:14Z Ghybu 1393 Ghybuî/ê navê [[pirs girêdan]] weke [[pirs girê dan]] guhart 6237170 wikitext text/x-wiki == {{ziman|ku}} == === Bilêvkirin === * {{ku-kîte}} === Biwêj === {{biwêj|ku}} # [[hesab pirsîn]], [[doz danîn]], [[dad danîn]] , [[pirs danîn]], [[dada tiştekî danîn]], [[dada kesekî danîn]], [[dad danîn kesekî]] , [[doza tiştekî danîn]] , [[doza kesekî danîn]], [[pirs girêdan yekî]] #: Li rêyê ji me ra pirs girêda ==== Etîmolojî ==== Ji {{heve|ku|pirs|girêdan}}. ==== Werger ==== {{werger-ser}} * {{Z|tr}}:{{W|tr|hesap sormak|guman=erê}} {{werger-bin}} 98bcr8iubuj5hbe40e73xmeyudph0rr 6237179 6237176 2026-06-05T15:16:56Z Ghybu 1393 /* {{ziman|ku}} */ 6237179 wikitext text/x-wiki == {{ziman|ku}} == === Bilêvkirin === * {{ku-kîte}} === Biwêj === {{ku-tewîn-lk|pirs girê dan|form=gerguhêz|niha=d|borî=da|pêşgir=pirs girê|valahî=erê}} {{biwêj|ku|nd=pirsgirêdan}} # [[hesab pirsîn]], [[doz danîn]], [[dad danîn]] , [[pirs danîn]], [[dada tiştekî danîn]], [[dada kesekî danîn]], [[dad danîn kesekî]] , [[doza tiştekî danîn]] , [[doza kesekî danîn]], [[pirs girêdan yekî]] #: {{mk|ku|Li rêyê ji me ra '''pirs girê da'''.}} #* {{bêmînak|ku}} ==== Etîmolojî ==== Ji {{heve|ku|pirs|girêdan}}. ==== Werger ==== {{werger-ser}} * {{Z|tr}}:{{W|tr|hesap sormak|guman=erê}} {{werger-bin}} re2bggdhuqkqc9e2wg6igwpmy943nw4 6237180 6237179 2026-06-05T15:18:04Z Ghybu 1393 /* Biwêj */ 6237180 wikitext text/x-wiki == {{ziman|ku}} == === Bilêvkirin === * {{ku-kîte}} === Lêker === {{ku-tewîn-lk|pirs girê dan|form=gerguhêz|niha=d|borî=da|pêşgir=pirs girê|valahî=erê}} {{lêker|ku|c=b-gh|nd=pirsgirêdan}} # [[hesab pirsîn]], [[doz danîn]], [[dad danîn]] , [[pirs danîn]], [[dada tiştekî danîn]], [[dada kesekî danîn]], [[dad danîn kesekî]] , [[doza tiştekî danîn]] , [[doza kesekî danîn]], [[pirs girêdan yekî]] #: {{mk|ku|Li rêyê ji me ra '''pirs girê da'''.}} #* {{bêmînak|ku}} ==== Etîmolojî ==== Ji {{heve|ku|pirs|girêdan}}. ==== Werger ==== {{werger-ser}} * {{Z|tr}}:{{W|tr|hesap sormak|guman=erê}} {{werger-bin}} 30xqci1m4bmf8m4m7laef583yf4y4iq 6237181 6237180 2026-06-05T15:20:10Z Ghybu 1393 /* Lêker */ 6237181 wikitext text/x-wiki == {{ziman|ku}} == === Bilêvkirin === * {{ku-kîte}} === Lêker === {{ku-tewîn-lk|pirs girê dan|form=gerguhêz|niha=d|borî=da|pêşgir=pirs girê|valahî=erê}} {{lêker|ku|c=b-gh|nd=pirsgirêdan}} # [[hesab pirsîn]], [[doz danîn]], [[dad danîn]] , [[pirs danîn]], [[dada tiştekî danîn]], [[dada kesekî danîn]], [[dad danîn kesekî]] , [[doza tiştekî danîn]] , [[doza kesekî danîn]], [[pirs girêdan yekî]] #: {{mk|ku|Li rêyê ji me ra '''pirs girê da'''.}} #* {{bêmînak|ku}} ==== Hevmane ==== * {{g|ku|hesab pirsîn}} ==== Etîmolojî ==== Ji {{heve|ku|pirs|girêdan}}. ==== Werger ==== {{werger-ser}} * {{Z|tr}}:{{W|tr|hesap sormak|guman=erê}} {{werger-bin}} rpoai3nqwtvz4y7ze4aa4l21p5xv8tv 6237183 6237181 2026-06-05T15:22:24Z Ghybu 1393 /* Werger */ 6237183 wikitext text/x-wiki == {{ziman|ku}} == === Bilêvkirin === * {{ku-kîte}} === Lêker === {{ku-tewîn-lk|pirs girê dan|form=gerguhêz|niha=d|borî=da|pêşgir=pirs girê|valahî=erê}} {{lêker|ku|c=b-gh|nd=pirsgirêdan}} # [[hesab pirsîn]], [[doz danîn]], [[dad danîn]] , [[pirs danîn]], [[dada tiştekî danîn]], [[dada kesekî danîn]], [[dad danîn kesekî]] , [[doza tiştekî danîn]] , [[doza kesekî danîn]], [[pirs girêdan yekî]] #: {{mk|ku|Li rêyê ji me ra '''pirs girê da'''.}} #* {{bêmînak|ku}} ==== Hevmane ==== * {{g|ku|hesab pirsîn}} ==== Etîmolojî ==== Ji {{heve|ku|pirs|girêdan}}. ==== Werger ==== {{werger-ser}} * {{Z|tr}}:{{W|tr|hesap sormak}} {{werger-bin}} tplxjvtam3rshnk4fuiteppfppxq4iv 6237184 6237183 2026-06-05T15:24:57Z Ghybu 1393 /* Werger */ 6237184 wikitext text/x-wiki == {{ziman|ku}} == === Bilêvkirin === * {{ku-kîte}} === Lêker === {{ku-tewîn-lk|pirs girê dan|form=gerguhêz|niha=d|borî=da|pêşgir=pirs girê|valahî=erê}} {{lêker|ku|c=b-gh|nd=pirsgirêdan}} # [[hesab pirsîn]], [[doz danîn]], [[dad danîn]] , [[pirs danîn]], [[dada tiştekî danîn]], [[dada kesekî danîn]], [[dad danîn kesekî]] , [[doza tiştekî danîn]] , [[doza kesekî danîn]], [[pirs girêdan yekî]] #: {{mk|ku|Li rêyê ji me ra '''pirs girê da'''.}} #* {{bêmînak|ku}} ==== Hevmane ==== * {{g|ku|hesab pirsîn}} ==== Etîmolojî ==== Ji {{heve|ku|pirs|girêdan}}. ==== Werger ==== {{werger-ser}} * {{Z|fr}}: {{W+|fr|demander des comptes}} * {{Z|tr}}: {{W+|tr|hesap sormak}} {{werger-bin}} j0gg7e57qm8sv31eko8jiwjtcu3dbp5 6237187 6237184 2026-06-05T15:35:58Z Ghybu 1393 /* Lêker */ 6237187 wikitext text/x-wiki == {{ziman|ku}} == === Bilêvkirin === * {{ku-kîte}} === Lêker === {{ku-tewîn-lk|pirs girê dan|form=gerguhêz|niha=d|borî=da|pêşgir=pirs girê|valahî=erê}} {{lêker|ku|c=b-gh|nd=pirsgirêdan}} # {{bêmane|ku}} #: {{hevmane|ku|hesab pirsîn|doz danîn|dad danîn|pirs danîn|dada tiştekî danîn|dada kesekî danîn|dad danîn kesekî|doza tiştekî danîn|doza kesekî danîn|pirs girêdan yekî}} #: {{mk|ku|Li rêyê ji me ra '''pirs girê da'''.}} #* {{bêmînak|ku}} ==== Etîmolojî ==== Ji {{heve|ku|pirs|girêdan}}. ==== Werger ==== {{werger-ser}} * {{Z|fr}}: {{W+|fr|demander des comptes}} * {{Z|tr}}: {{W+|tr|hesap sormak}} {{werger-bin}} 33k6c0mc8y7oi8uloyl8xhtk9lkmy5a 6237200 6237187 2026-06-05T16:17:33Z Ghybu 1393 /* Etîmolojî */ 6237200 wikitext text/x-wiki == {{ziman|ku}} == === Bilêvkirin === * {{ku-kîte}} === Lêker === {{ku-tewîn-lk|pirs girê dan|form=gerguhêz|niha=d|borî=da|pêşgir=pirs girê|valahî=erê}} {{lêker|ku|c=b-gh|nd=pirsgirêdan}} # {{bêmane|ku}} #: {{hevmane|ku|hesab pirsîn|doz danîn|dad danîn|pirs danîn|dada tiştekî danîn|dada kesekî danîn|dad danîn kesekî|doza tiştekî danîn|doza kesekî danîn|pirs girêdan yekî}} #: {{mk|ku|Li rêyê ji me ra '''pirs girê da'''.}} #* {{bêmînak|ku}} ==== Etîmolojî ==== Ji {{heve|ku|pirs|girê dan}}. ==== Werger ==== {{werger-ser}} * {{Z|fr}}: {{W+|fr|demander des comptes}} * {{Z|tr}}: {{W+|tr|hesap sormak}} {{werger-bin}} prhiwpstip8sii12plos9438sg7xnle doz danîn 0 1357299 6237167 6237162 2026-06-05T12:42:33Z Kawarizgar1 14836 /* Biwêj */ 6237167 wikitext text/x-wiki == {{ziman|ku}} == === Bilêvkirin === * {{ku-kîte}} === Biwêj === {{biwêj|ku}} # [[hesab pirsîn]], [[pirs girêdan]], [[dad danîn]] , [[pirs danîn]], [[dada tiştekî danîn]], [[dada kesekî danîn]], [[dad danîn kesekî]] , [[doza tiştekî danîn]] , [[doza kesekî danîn]], [[pirs girêdan yekî]] #: Te çima dozên berê danî? ==== Etîmolojî ==== Ji {{heve|ku|doz|danîn}}. ==== Werger ==== {{werger-ser}} * {{Z|tr}}:{{W|tr|hesap sormak|guman=erê}} {{werger-bin}} ebya9ju0e48vk89vyyt2900trjdnnen 6237189 6237167 2026-06-05T15:40:14Z Ghybu 1393 /* Biwêj */ 6237189 wikitext text/x-wiki == {{ziman|ku}} == === Bilêvkirin === * {{ku-kîte}} === Lêker === {{lêker|ku|c=h-gh|nd=dozdanîn}} # {{bêmane|ku}} #: {{hevmane|ku|hesab pirsîn|pirs girêdan|dad danîn|pirs danîn|dada tiştekî danîn|dada kesekî danîn|dad danîn kesekî|doza tiştekî danîn|doza kesekî danîn|pirs girêdan yekî}} #: {{mk|ku|Te çima '''dozên''' berê '''danî'''?}} #* {{bêmînak|ku}} ==== Etîmolojî ==== Ji {{heve|ku|doz|danîn}}. ==== Werger ==== {{werger-ser}} * {{Z|fr}}: {{W+|fr|demander des comptes}} * {{Z|tr}}: {{W+|tr|hesap sormak}} {{werger-bin}} nyk33kkipjs1ibcdo1g2mz9ggxlhud7 6237190 6237189 2026-06-05T15:41:15Z Ghybu 1393 /* Lêker */ 6237190 wikitext text/x-wiki == {{ziman|ku}} == === Bilêvkirin === * {{ku-kîte}} === Lêker === {{lêker|ku|c=h-gh|nd=dozdanîn}} # {{bêmane|ku}} #: {{hevmane|ku|hesab pirsîn|pirs girê dan|dad danîn|pirs danîn|dada tiştekî danîn|dada kesekî danîn|dad danîn kesekî|doza tiştekî danîn|doza kesekî danîn|pirs girêdan yekî}} #: {{mk|ku|Te çima '''dozên''' berê '''danî'''?}} #* {{bêmînak|ku}} ==== Etîmolojî ==== Ji {{heve|ku|doz|danîn}}. ==== Werger ==== {{werger-ser}} * {{Z|fr}}: {{W+|fr|demander des comptes}} * {{Z|tr}}: {{W+|tr|hesap sormak}} {{werger-bin}} r78iazoh82yebtfmz35avu4mhd0zv41 dad danîn 0 1357300 6237168 6237163 2026-06-05T12:42:58Z Kawarizgar1 14836 /* Biwêj */ 6237168 wikitext text/x-wiki == {{ziman|ku}} == === Bilêvkirin === * {{ku-kîte}} === Biwêj === {{biwêj|ku}} # [[hesab pirsîn]], [[pirs girêdan]], [[doz danîn]] , [[pirs danîn]], [[dada tiştekî danîn]], [[dada kesekî danîn]], [[dad danîn kesekî]] , [[doza tiştekî danîn]] , [[doza kesekî danîn]], [[pirs girêdan yekî]] #: Ciwanan li kuncikekê dad danî ji zarokekî ra ==== Etîmolojî ==== Ji {{heve|ku|dad|danîn}}. ==== Werger ==== {{werger-ser}} * {{Z|tr}}:{{W|tr|hesap sormak|guman=erê}} {{werger-bin}} kks7zygprss7ifcv31id5i3fzd6dsqv 6237191 6237168 2026-06-05T15:43:56Z Ghybu 1393 /* Biwêj */ 6237191 wikitext text/x-wiki == {{ziman|ku}} == === Bilêvkirin === * {{ku-kîte}} === Lêker === {{lêker|ku|c=h-gh|nd=dozdanîn}} # {{bêmane|ku}} #: {{hevmane|ku|hesab pirsîn|pirs girê dan|doz danîn|pirs danîn|dada tiştekî danîn|dada kesekî danîn|dad danîn kesekî|doza tiştekî danîn|doza kesekî danîn|pirs girêdan yekî}} #: {{mk|ku|Ciwanan li kuncikekê '''dad danî''' ji zarokekî ra.}} #* {{bêmînak|ku}} ==== Etîmolojî ==== Ji {{heve|ku|dad|danîn}}. ==== Werger ==== {{werger-ser}} * {{Z|tr}}:{{W|tr|hesap sormak|guman=erê}} {{werger-bin}} qe91v27nzjbla63v7b0xrhq8nhdwp8m 6237192 6237191 2026-06-05T15:44:11Z Ghybu 1393 /* Lêker */ 6237192 wikitext text/x-wiki == {{ziman|ku}} == === Bilêvkirin === * {{ku-kîte}} === Lêker === {{lêker|ku|c=h-gh|nd=daddanîn}} # {{bêmane|ku}} #: {{hevmane|ku|hesab pirsîn|pirs girê dan|doz danîn|pirs danîn|dada tiştekî danîn|dada kesekî danîn|dad danîn kesekî|doza tiştekî danîn|doza kesekî danîn|pirs girêdan yekî}} #: {{mk|ku|Ciwanan li kuncikekê '''dad danî''' ji zarokekî ra.}} #* {{bêmînak|ku}} ==== Etîmolojî ==== Ji {{heve|ku|dad|danîn}}. ==== Werger ==== {{werger-ser}} * {{Z|tr}}:{{W|tr|hesap sormak|guman=erê}} {{werger-bin}} nq6gf8asgt96mu0cbyozh5xpzrqfzyt 6237194 6237192 2026-06-05T15:48:55Z Ghybu 1393 /* Werger */ 6237194 wikitext text/x-wiki == {{ziman|ku}} == === Bilêvkirin === * {{ku-kîte}} === Lêker === {{lêker|ku|c=h-gh|nd=daddanîn}} # {{bêmane|ku}} #: {{hevmane|ku|hesab pirsîn|pirs girê dan|doz danîn|pirs danîn|dada tiştekî danîn|dada kesekî danîn|dad danîn kesekî|doza tiştekî danîn|doza kesekî danîn|pirs girêdan yekî}} #: {{mk|ku|Ciwanan li kuncikekê '''dad danî''' ji zarokekî ra.}} #* {{bêmînak|ku}} ==== Etîmolojî ==== Ji {{heve|ku|dad|danîn}}. ==== Werger ==== {{werger-ser}} * {{Z|fr}}: {{W+|fr|demander des comptes}} * {{Z|tr}}: {{W+|tr|hesap sormak}} {{werger-bin}} 403hpbsdhbqj1n7r162w15o1p9ecf21 pirs danîn 0 1357301 6237169 6237164 2026-06-05T12:43:30Z Kawarizgar1 14836 /* Biwêj */ 6237169 wikitext text/x-wiki == {{ziman|ku}} == === Bilêvkirin === * {{ku-kîte}} === Biwêj === {{biwêj|ku}} # [[pirs kirin]], [[pirsîn]] # [[hesab pirsîn]], [[pirs girêdan]], [[dad danîn]] , [[doz danîn]], [[dada tiştekî danîn]], [[dada kesekî danîn]], [[dad danîn kesekî]] , [[doza tiştekî danîn]] , [[doza kesekî danîn]], [[pirs girêdan yekî]] #: Ev der ne cihê pirs danînê ye ==== Etîmolojî ==== Ji {{heve|ku|pirs|danîn}}. ==== Werger ==== {{werger-ser}} * {{Z|tr}}:{{W|tr|hesap sormak|guman=erê}} {{werger-bin}} krxxkvfgn8nfgtzwprvf3aey87gh9sc 6237193 6237169 2026-06-05T15:48:36Z Ghybu 1393 /* Biwêj */ 6237193 wikitext text/x-wiki == {{ziman|ku}} == === Bilêvkirin === * {{ku-kîte}} === Lêker === {{lêker|ku|c=h-gh|nd=pirsdanîn}} # {{bêmane|ku}} #: {{hevmane|ku|hesab pirsîn|pirs girê dan|dad danîn|doz danîn|dada tiştekî danîn|dada kesekî danîn|dad danîn kesekî|doza tiştekî danîn|doza kesekî danîn|pirs girêdan yekî}} #: {{mk|ku|Ev der ne cihê '''pirsdanînê''' ye.|navdêr (pirsdanîn)|rêz=1}} #* {{bêmînak|ku}} ==== Etîmolojî ==== Ji {{heve|ku|pirs|danîn}}. ==== Werger ==== {{werger-ser}} * {{Z|fr}}: {{W+|fr|demander des comptes}} * {{Z|tr}}: {{W+|tr|hesap sormak}} {{werger-bin}} a2xu6pnl4isgsmr9byj2ryd1v1haqfn pirs girêdan 0 1357302 6237177 2026-06-05T15:13:14Z Ghybu 1393 Ghybuî/ê navê [[pirs girêdan]] weke [[pirs girê dan]] guhart 6237177 wikitext text/x-wiki #BERALÎKIRIN [[pirs girê dan]] hvbz01qf4f7s6jhci0tg4u9d8x8ibjm 6237178 6237177 2026-06-05T15:13:33Z Ghybu 1393 Beralîkirin ji bo [[pirs girê dan]] hate jêbirin. 6237178 wikitext text/x-wiki {{jêbirin}} #BERALÎKIRIN [[pirs girê dan]] c1hz6ckfmwmjzdc5gwmc6aoapzip2mn berfoke 0 1357303 6237202 2026-06-05T16:23:54Z Keyomerd 8814 Rûpel bi "== {{ziman|ku}} == === Bilêvkirin === * {{ku-IPA}} * {{ku-kîte}} === Navdêr === [[Wêne: Fringilla_coelebs_male1.jpg|thumb|'''Berfokeyekî''' nêr.]] {{navdêr|ku|z=m}} # {{f|ku|teyr}} Çivîkeke tovxwer e, mezinahiya wê digêje 15 santîmetreyan û li daristan, baxçe û zeviyan tê dîtin. ==== Herwiha ==== * {{hw|ku|befrik}} * {{hw|ku|befroke}} * {{hw|ku|berfîtik||Efrîn}} * {{hw|ku|berfîtok||Efrîn}} ==== Navê zanistî ==== * {{q|navz|Fringilla coele..." hat çêkirin 6237202 wikitext text/x-wiki == {{ziman|ku}} == === Bilêvkirin === * {{ku-IPA}} * {{ku-kîte}} === Navdêr === [[Wêne: Fringilla_coelebs_male1.jpg|thumb|'''Berfokeyekî''' nêr.]] {{navdêr|ku|z=m}} # {{f|ku|teyr}} Çivîkeke tovxwer e, mezinahiya wê digêje 15 santîmetreyan û li daristan, baxçe û zeviyan tê dîtin. ==== Herwiha ==== * {{hw|ku|befrik}} * {{hw|ku|befroke}} * {{hw|ku|berfîtik||Efrîn}} * {{hw|ku|berfîtok||Efrîn}} ==== Navê zanistî ==== * {{q|navz|Fringilla coelebs}} ==== Etîmolojî ==== Ji {{paş|ku|berf|oke}}, ji ber ku bêtir zivistanî têne aliyên başûrî ên Kurdistanê. ==== Bi zaravayên din ==== * {{Z|ckb}}: {{W-|ckb|سەیرە}} ==== Werger ==== {{werger-ser}} * {{Z|fa}}: {{W+|fa|سهره}} * {{Z|fr}}: {{W+|fr|pinson|n}}, {{W+|fr|pinsonne|m}} * {{Z|en}}: {{W+|en|chaffinch}} * {{Z|tr}}: {{W+|tr|ispinoz}} {{werger-bin}} q8z3svb955lsvp5s0eftx9ski6xjazj befroke 0 1357304 6237210 2026-06-05T16:27:02Z Keyomerd 8814 Rûpel bi "== {{ziman|ku}} == === Navdêr === {{navdêr|ku|z=m}} # {{guharto|ku|berfoke}}" hat çêkirin 6237210 wikitext text/x-wiki == {{ziman|ku}} == === Navdêr === {{navdêr|ku|z=m}} # {{guharto|ku|berfoke}} cnl6yzfs0yogm3o4w654gicfnwe1t0o Bikarhêner:Kawarizgar1 2 1357305 6237232 2026-06-06T03:24:20Z Kawarizgar1 14836 /* */ 6237232 wikitext text/x-wiki Bijî Kurdistan dnh6wtukcls8tclmzb0kv4shih4nk5d