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'] .. ' '
..'\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> '
..'\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|}}}| {{{pêşgir}}}}}[[-{{{niha}}}-]]{{#if:{{{dn|}}}| <small>({{{dn}}})</small>}}<!--
-->{{#if:{{{niha2|}}}|<br>{{#if:{{{pêşgir|}}}| {{{pêşgir}}}}}[[-{{{niha2}}}-]]{{#if:{{{dn2|}}}| <small>({{{dn2}}})</small>}}}}<!--
-->{{#if:{{{niha3|}}}|<br>{{#if:{{{pêşgir|}}}| {{{pêşgir}}}}}[[-{{{niha3}}}-]]{{#if:{{{dn3|}}}| <small>({{{dn3}}})</small>}}}}<!--
-->{{#if:{{{niha4|}}}|<br>{{#if:{{{pêşgir|}}}| {{{pêşgir}}}}}[[-{{{niha4}}}-]]{{#if:{{{dn4|}}}| <small>({{{dn4}}})</small>}}}}<!--
-->{{#if:{{{niha5|}}}|<br>{{#if:{{{pêşgir|}}}| {{{pêşgir}}}}}[[-{{{niha5}}}-]]{{#if:{{{dn5|}}}| <small>({{{dn5}}})</small>}}}}<!--
-->{{#if:{{{niha6|}}}|<br>{{#if:{{{pêşgir|}}}| {{{pêşgir}}}}}[[-{{{niha6}}}-]]{{#if:{{{dn6|}}}| <small>({{{dn6}}})</small>}}}}<!--
-->{{#if:{{{niha7|}}}|<br>{{#if:{{{pêşgir|}}}| {{{pêşgir}}}}}[[-{{{niha7}}}-]]{{#if:{{{dn7|}}}| <small>({{{dn7}}})</small>}}}}
|-
| bgcolor="#FFFFE0" | Rehê{{#if:{{{borî2|}}}|n}} borî
| style="padding:0.5em" | {{#if:{{{pêşgir|}}}| {{{pêşgir}}}}}[[-{{{borî}}}-]]{{#if:{{{db|}}}| <small>({{{db}}})</small>}}<!--
-->{{#if:{{{borî2|}}}|<br>{{#if:{{{pêşgir|}}}| {{{pêşgir}}}}}[[-{{{borî2}}}-]]{{#if:{{{db2|}}}| <small>({{{db2}}})</small>}}}}<!--
-->{{#if:{{{borî3|}}}|<br>{{#if:{{{pêşgir|}}}| {{{pêşgir}}}}}[[-{{{borî3}}}-]]{{#if:{{{db3|}}}| <small>({{{db3}}})</small>}}}}<!--
-->{{#if:{{{borî4|}}}|<br>{{#if:{{{pêşgir|}}}| {{{pêşgir}}}}}[[-{{{borî4}}}-]]{{#if:{{{db4|}}}| <small>({{{db4}}})</small>}}}}<!--
-->{{#if:{{{borî5|}}}|<br>{{#if:{{{pêşgir|}}}| {{{pêşgir}}}}}[[-{{{borî5}}}-]]{{#if:{{{db5|}}}| <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