Wîkîferheng
kuwiktionary
https://ku.wiktionary.org/wiki/Destp%C3%AAk
MediaWiki 1.47.0-wmf.6
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
saw
0
16468
6237463
6082131
2026-06-11T16:15:59Z
Ghybu
1393
/* Bilêvkirin */
6237463
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Navdêr ===
{{ku-tewîn-nav|saw|mê}}
{{navdêr|ku|z=m}}
# [[fobî]]
#* {{jêder|ku|jêgirtin=Hingî ji van dengan û dîmenan '''saw''' girtîbû, keçika qerweş bêhiş ketibû.|{{Jêgirtin/Robert Louis Stevenson/Meseleya Seyr a Dr. Jekyll û Mr. Hyde|r=32}}}}
#* {{jêder|ku|jêgirtin=Dema weku bi pêçîyên xwe kerînekên guh bixijiqînin direyin ji bo xwe direyin û niha jî ew bû, ne ew dengê ku ew têxista nav hesaban û '''saw''' bi ser xista.|{{Jêgirtin/Îrfan Amîda/Şevek Şîzofren|r=6}}}}
==== Bi alfabeyên din ====
* {{ku-ar|ساو}}
==== Bide ber ====
* [[sawa]]
==== Etîmolojî ====
''Binere'': '''[[sam]]'''
==== Jê ====
{{stûn|
* [[bêsaw]]
* [[bêsawî]]
* [[bêsawîtî]]
* [[bêsawtî]]
* [[bisaw]]
* [[bisawî]]
* [[bisawîtî]]
* [[bisawtî]]
* [[sawdar]]
* [[sawdarî]]
* [[sawdarîtî]]
* [[sawdartî]]
* [[sawder]]
* [[sawderî]]
* [[sawderîtî]]
* [[sawdertî]]
* [[sawdêr]]
* [[sawdêrî]]
* [[sawdêrîtî]]
* [[sawdêrtî]]
* [[sawêr]]
* [[sawêrî]]
* [[sawî]]
}}
==== Werger ====
{{werger-ser}}
* {{Z|de}}: {{W+|de|Angst}} {{m}}, {{W+|de|Entsetzen}} {{n}}, {{W+|de|Furcht}} {{m}}
* {{Z|ar}}: {{W-|ar|فزع}}, {{W-|ar|رهبة}}, {{W-|ar|ارتعاب}}, {{W-|ar|جزع}}, {{W-|ar|رعب}}, {{W-|ar|هلع}}
* {{Z|fa}}: {{W+|fa|ترس|guman=erê}}, {{W+|fa|وحشت|guman=erê}}
* {{Z|en}}: {{W+|en|terror}}, {{W+|en|direfulness}}, {{W+|en|direness}}, {{W+|en|dread}}, {{W-|en|great fear|guman=erê}}
* {{Z|tr}}: {{W+|tr|birsam}}, {{W+|tr|fobi}}, {{W+|tr|haşyet}}, {{W+|tr|korku}}, {{W+|tr|sam}}, {{W+|tr|tedhiş}}, {{W+|tr|terör}}, {{W+|tr|ürküntü}}, {{W+|tr|vahşet}}, {{W+|tr|yılgı}}, {{W+|tr|nezle}}, {{W+|tr|dehşet}}, {{W+|tr|heybet}}, {{W+|tr|varsayım}}, {{W+|tr|faraziye}}
{{werger-bin}}
== {{ziman|en}} ==
=== Bilêvkirin ===
* {{IPA|en|\sɔː\}}
* {{deng|en|en-us-saw.ogg|dever=DYA}}
* {{deng|en|LL-Q1860 (eng)-Back ache-saw.wav|Deng|dever=London, QY}}
* {{deng|en|LL-Q1860 (eng)-Assorted-Interests-saw.wav|Deng|dever=New York City, DYA}}
* {{deng|en|LL-Q1860 (eng)-Wodencafe-saw.wav|Deng|dever=Teksas, DYA}}
* {{deng|en|LL-Q1860 (eng)-Grendelkhan-saw.wav|Deng|dever=Connecticut, DYA}}
=== Navdêr ===
{{navdêr|en}}
# [[mişar]], [[birrek]]a [[dar]]an
=== Lêker ===
{{en-tewîn-lk|form=awarte|n3y=saws|b=sawed|pb=sawn|pb2=sawed|pn=sawing}}
{{lêker|en}}
# Bi [[mişar]]ê [[birîn]].
{{bend}}
=== Formeke lêkerê ===
{{lêker|en|form=erê}}
# ''[[form]]a [[dem]]a [[raborî]] ji lêkera '''{{g|en|see}}''' ([[dîtin]])
#: {{mk|en|I didn't see him.|Min ew nedît.|rêz=1}}
== {{ziman|za}} ==
=== Navdêr ===
{{navdêr|za}}
# [[kitêb#ku|kitêb]], [[pirtûk#ku|pirtûk]]
d7nyhqyqv0rr9r77m8e7i9w7zy2bwps
6237467
6237463
2026-06-11T16:23:25Z
Ghybu
1393
/* Formeke lêkerê */
6237467
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Navdêr ===
{{ku-tewîn-nav|saw|mê}}
{{navdêr|ku|z=m}}
# [[fobî]]
#* {{jêder|ku|jêgirtin=Hingî ji van dengan û dîmenan '''saw''' girtîbû, keçika qerweş bêhiş ketibû.|{{Jêgirtin/Robert Louis Stevenson/Meseleya Seyr a Dr. Jekyll û Mr. Hyde|r=32}}}}
#* {{jêder|ku|jêgirtin=Dema weku bi pêçîyên xwe kerînekên guh bixijiqînin direyin ji bo xwe direyin û niha jî ew bû, ne ew dengê ku ew têxista nav hesaban û '''saw''' bi ser xista.|{{Jêgirtin/Îrfan Amîda/Şevek Şîzofren|r=6}}}}
==== Bi alfabeyên din ====
* {{ku-ar|ساو}}
==== Bide ber ====
* [[sawa]]
==== Etîmolojî ====
''Binere'': '''[[sam]]'''
==== Jê ====
{{stûn|
* [[bêsaw]]
* [[bêsawî]]
* [[bêsawîtî]]
* [[bêsawtî]]
* [[bisaw]]
* [[bisawî]]
* [[bisawîtî]]
* [[bisawtî]]
* [[sawdar]]
* [[sawdarî]]
* [[sawdarîtî]]
* [[sawdartî]]
* [[sawder]]
* [[sawderî]]
* [[sawderîtî]]
* [[sawdertî]]
* [[sawdêr]]
* [[sawdêrî]]
* [[sawdêrîtî]]
* [[sawdêrtî]]
* [[sawêr]]
* [[sawêrî]]
* [[sawî]]
}}
==== Werger ====
{{werger-ser}}
* {{Z|de}}: {{W+|de|Angst}} {{m}}, {{W+|de|Entsetzen}} {{n}}, {{W+|de|Furcht}} {{m}}
* {{Z|ar}}: {{W-|ar|فزع}}, {{W-|ar|رهبة}}, {{W-|ar|ارتعاب}}, {{W-|ar|جزع}}, {{W-|ar|رعب}}, {{W-|ar|هلع}}
* {{Z|fa}}: {{W+|fa|ترس|guman=erê}}, {{W+|fa|وحشت|guman=erê}}
* {{Z|en}}: {{W+|en|terror}}, {{W+|en|direfulness}}, {{W+|en|direness}}, {{W+|en|dread}}, {{W-|en|great fear|guman=erê}}
* {{Z|tr}}: {{W+|tr|birsam}}, {{W+|tr|fobi}}, {{W+|tr|haşyet}}, {{W+|tr|korku}}, {{W+|tr|sam}}, {{W+|tr|tedhiş}}, {{W+|tr|terör}}, {{W+|tr|ürküntü}}, {{W+|tr|vahşet}}, {{W+|tr|yılgı}}, {{W+|tr|nezle}}, {{W+|tr|dehşet}}, {{W+|tr|heybet}}, {{W+|tr|varsayım}}, {{W+|tr|faraziye}}
{{werger-bin}}
== {{ziman|en}} ==
=== Bilêvkirin ===
* {{IPA|en|\sɔː\}}
* {{deng|en|en-us-saw.ogg|dever=DYA}}
* {{deng|en|LL-Q1860 (eng)-Back ache-saw.wav|Deng|dever=London, QY}}
* {{deng|en|LL-Q1860 (eng)-Assorted-Interests-saw.wav|Deng|dever=New York City, DYA}}
* {{deng|en|LL-Q1860 (eng)-Wodencafe-saw.wav|Deng|dever=Teksas, DYA}}
* {{deng|en|LL-Q1860 (eng)-Grendelkhan-saw.wav|Deng|dever=Connecticut, DYA}}
=== Navdêr ===
{{navdêr|en}}
# [[mişar]], [[birrek]]a [[dar]]an
=== Lêker ===
{{en-tewîn-lk|form=awarte|n3y=saws|b=sawed|pb=sawn|pb2=sawed|pn=sawing}}
{{lêker|en}}
# Bi [[mişar]]ê [[birîn]].
{{bend}}
=== Formeke lêkerê ===
{{lêker|en|form=erê}}
# {{en-dema-borî-sade|see}}
#: {{mk|en|I didn't '''see''' him.|Min ew nedît.|rêz=1}}
== {{ziman|za}} ==
=== Navdêr ===
{{navdêr|za}}
# [[kitêb#ku|kitêb]], [[pirtûk#ku|pirtûk]]
7kiavew8rwzit5acq68ou0q7pm5im4o
6237470
6237467
2026-06-11T16:26:58Z
Ghybu
1393
/* Jê */
6237470
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Navdêr ===
{{ku-tewîn-nav|saw|mê}}
{{navdêr|ku|z=m}}
# [[fobî]]
#* {{jêder|ku|jêgirtin=Hingî ji van dengan û dîmenan '''saw''' girtîbû, keçika qerweş bêhiş ketibû.|{{Jêgirtin/Robert Louis Stevenson/Meseleya Seyr a Dr. Jekyll û Mr. Hyde|r=32}}}}
#* {{jêder|ku|jêgirtin=Dema weku bi pêçîyên xwe kerînekên guh bixijiqînin direyin ji bo xwe direyin û niha jî ew bû, ne ew dengê ku ew têxista nav hesaban û '''saw''' bi ser xista.|{{Jêgirtin/Îrfan Amîda/Şevek Şîzofren|r=6}}}}
==== Bi alfabeyên din ====
* {{ku-ar|ساو}}
==== Bide ber ====
* [[sawa]]
==== Etîmolojî ====
''Binere'': '''[[sam]]'''
==== Jê ====
{{kol3|ku
| bêsaw
| bêsawî
| bêsawîtî
| bêsawtî
| bisaw
| bisawî
| bisawîtî
| bisawtî
| sawdar
| sawdarî
| sawdarîtî
| sawdartî
| sawder
| sawderî
| sawderîtî
| sawdertî
| sawdêr
| sawdêrî
| sawdêrîtî
| sawdêrtî
| sawêr
| sawêrî
| sawî
}}
==== Werger ====
{{werger-ser}}
* {{Z|de}}: {{W+|de|Angst}} {{m}}, {{W+|de|Entsetzen}} {{n}}, {{W+|de|Furcht}} {{m}}
* {{Z|ar}}: {{W-|ar|فزع}}, {{W-|ar|رهبة}}, {{W-|ar|ارتعاب}}, {{W-|ar|جزع}}, {{W-|ar|رعب}}, {{W-|ar|هلع}}
* {{Z|fa}}: {{W+|fa|ترس|guman=erê}}, {{W+|fa|وحشت|guman=erê}}
* {{Z|en}}: {{W+|en|terror}}, {{W+|en|direfulness}}, {{W+|en|direness}}, {{W+|en|dread}}, {{W-|en|great fear|guman=erê}}
* {{Z|tr}}: {{W+|tr|birsam}}, {{W+|tr|fobi}}, {{W+|tr|haşyet}}, {{W+|tr|korku}}, {{W+|tr|sam}}, {{W+|tr|tedhiş}}, {{W+|tr|terör}}, {{W+|tr|ürküntü}}, {{W+|tr|vahşet}}, {{W+|tr|yılgı}}, {{W+|tr|nezle}}, {{W+|tr|dehşet}}, {{W+|tr|heybet}}, {{W+|tr|varsayım}}, {{W+|tr|faraziye}}
{{werger-bin}}
== {{ziman|en}} ==
=== Bilêvkirin ===
* {{IPA|en|\sɔː\}}
* {{deng|en|en-us-saw.ogg|dever=DYA}}
* {{deng|en|LL-Q1860 (eng)-Back ache-saw.wav|Deng|dever=London, QY}}
* {{deng|en|LL-Q1860 (eng)-Assorted-Interests-saw.wav|Deng|dever=New York City, DYA}}
* {{deng|en|LL-Q1860 (eng)-Wodencafe-saw.wav|Deng|dever=Teksas, DYA}}
* {{deng|en|LL-Q1860 (eng)-Grendelkhan-saw.wav|Deng|dever=Connecticut, DYA}}
=== Navdêr ===
{{navdêr|en}}
# [[mişar]], [[birrek]]a [[dar]]an
=== Lêker ===
{{en-tewîn-lk|form=awarte|n3y=saws|b=sawed|pb=sawn|pb2=sawed|pn=sawing}}
{{lêker|en}}
# Bi [[mişar]]ê [[birîn]].
{{bend}}
=== Formeke lêkerê ===
{{lêker|en|form=erê}}
# {{en-dema-borî-sade|see}}
#: {{mk|en|I didn't '''see''' him.|Min ew nedît.|rêz=1}}
== {{ziman|za}} ==
=== Navdêr ===
{{navdêr|za}}
# [[kitêb#ku|kitêb]], [[pirtûk#ku|pirtûk]]
0dfmybl7j457oog9bxsgvdlikh0derl
6237471
6237470
2026-06-11T16:27:24Z
Ghybu
1393
/* Navdêr */
6237471
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Navdêr ===
{{ku-tewîn-nav|saw|mê}}
{{navdêr|ku|z=m}}
# [[fobî]]
#* {{jêder|ku|jêgirtin=Hingî ji van dengan û dîmenan '''saw''' girtîbû, keçika qerweş bêhiş ketibû.|{{Jêgirtin/Robert Louis Stevenson/Meseleya Seyr a Dr. Jekyll û Mr. Hyde|r=32}}}}
#* {{jêder|ku|jêgirtin=Dema weku bi pêçîyên xwe kerînekên guh bixijiqînin direyin ji bo xwe direyin û niha jî ew bû, ne ew dengê ku ew têxista nav hesaban û '''saw''' bi ser xista.|{{Jêgirtin/Îrfan Amîda/Şevek Şîzofren|r=6}}}}
==== Bi alfabeyên din ====
* {{ku-ar|ساو}}
==== Bide ber ====
* [[sawa]]
==== Jê ====
{{kol3|ku
| bêsaw
| bêsawî
| bêsawîtî
| bêsawtî
| bisaw
| bisawî
| bisawîtî
| bisawtî
| sawdar
| sawdarî
| sawdarîtî
| sawdartî
| sawder
| sawderî
| sawderîtî
| sawdertî
| sawdêr
| sawdêrî
| sawdêrîtî
| sawdêrtî
| sawêr
| sawêrî
| sawî
}}
==== Etîmolojî ====
''Binêre'': '''[[sam]]'''.
==== Werger ====
{{werger-ser}}
* {{Z|de}}: {{W+|de|Angst}} {{m}}, {{W+|de|Entsetzen}} {{n}}, {{W+|de|Furcht}} {{m}}
* {{Z|ar}}: {{W-|ar|فزع}}, {{W-|ar|رهبة}}, {{W-|ar|ارتعاب}}, {{W-|ar|جزع}}, {{W-|ar|رعب}}, {{W-|ar|هلع}}
* {{Z|fa}}: {{W+|fa|ترس|guman=erê}}, {{W+|fa|وحشت|guman=erê}}
* {{Z|en}}: {{W+|en|terror}}, {{W+|en|direfulness}}, {{W+|en|direness}}, {{W+|en|dread}}, {{W-|en|great fear|guman=erê}}
* {{Z|tr}}: {{W+|tr|birsam}}, {{W+|tr|fobi}}, {{W+|tr|haşyet}}, {{W+|tr|korku}}, {{W+|tr|sam}}, {{W+|tr|tedhiş}}, {{W+|tr|terör}}, {{W+|tr|ürküntü}}, {{W+|tr|vahşet}}, {{W+|tr|yılgı}}, {{W+|tr|nezle}}, {{W+|tr|dehşet}}, {{W+|tr|heybet}}, {{W+|tr|varsayım}}, {{W+|tr|faraziye}}
{{werger-bin}}
== {{ziman|en}} ==
=== Bilêvkirin ===
* {{IPA|en|\sɔː\}}
* {{deng|en|en-us-saw.ogg|dever=DYA}}
* {{deng|en|LL-Q1860 (eng)-Back ache-saw.wav|Deng|dever=London, QY}}
* {{deng|en|LL-Q1860 (eng)-Assorted-Interests-saw.wav|Deng|dever=New York City, DYA}}
* {{deng|en|LL-Q1860 (eng)-Wodencafe-saw.wav|Deng|dever=Teksas, DYA}}
* {{deng|en|LL-Q1860 (eng)-Grendelkhan-saw.wav|Deng|dever=Connecticut, DYA}}
=== Navdêr ===
{{navdêr|en}}
# [[mişar]], [[birrek]]a [[dar]]an
=== Lêker ===
{{en-tewîn-lk|form=awarte|n3y=saws|b=sawed|pb=sawn|pb2=sawed|pn=sawing}}
{{lêker|en}}
# Bi [[mişar]]ê [[birîn]].
{{bend}}
=== Formeke lêkerê ===
{{lêker|en|form=erê}}
# {{en-dema-borî-sade|see}}
#: {{mk|en|I didn't '''see''' him.|Min ew nedît.|rêz=1}}
== {{ziman|za}} ==
=== Navdêr ===
{{navdêr|za}}
# [[kitêb#ku|kitêb]], [[pirtûk#ku|pirtûk]]
708ry93xe1krw8e9emi4v6ozgkf20fu
6237472
6237471
2026-06-11T16:31:35Z
Ghybu
1393
/* {{ziman|en}} */
6237472
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Navdêr ===
{{ku-tewîn-nav|saw|mê}}
{{navdêr|ku|z=m}}
# [[fobî]]
#* {{jêder|ku|jêgirtin=Hingî ji van dengan û dîmenan '''saw''' girtîbû, keçika qerweş bêhiş ketibû.|{{Jêgirtin/Robert Louis Stevenson/Meseleya Seyr a Dr. Jekyll û Mr. Hyde|r=32}}}}
#* {{jêder|ku|jêgirtin=Dema weku bi pêçîyên xwe kerînekên guh bixijiqînin direyin ji bo xwe direyin û niha jî ew bû, ne ew dengê ku ew têxista nav hesaban û '''saw''' bi ser xista.|{{Jêgirtin/Îrfan Amîda/Şevek Şîzofren|r=6}}}}
==== Bi alfabeyên din ====
* {{ku-ar|ساو}}
==== Bide ber ====
* [[sawa]]
==== Jê ====
{{kol3|ku
| bêsaw
| bêsawî
| bêsawîtî
| bêsawtî
| bisaw
| bisawî
| bisawîtî
| bisawtî
| sawdar
| sawdarî
| sawdarîtî
| sawdartî
| sawder
| sawderî
| sawderîtî
| sawdertî
| sawdêr
| sawdêrî
| sawdêrîtî
| sawdêrtî
| sawêr
| sawêrî
| sawî
}}
==== Etîmolojî ====
''Binêre'': '''[[sam]]'''.
==== Werger ====
{{werger-ser}}
* {{Z|de}}: {{W+|de|Angst}} {{m}}, {{W+|de|Entsetzen}} {{n}}, {{W+|de|Furcht}} {{m}}
* {{Z|ar}}: {{W-|ar|فزع}}, {{W-|ar|رهبة}}, {{W-|ar|ارتعاب}}, {{W-|ar|جزع}}, {{W-|ar|رعب}}, {{W-|ar|هلع}}
* {{Z|fa}}: {{W+|fa|ترس|guman=erê}}, {{W+|fa|وحشت|guman=erê}}
* {{Z|en}}: {{W+|en|terror}}, {{W+|en|direfulness}}, {{W+|en|direness}}, {{W+|en|dread}}, {{W-|en|great fear|guman=erê}}
* {{Z|tr}}: {{W+|tr|birsam}}, {{W+|tr|fobi}}, {{W+|tr|haşyet}}, {{W+|tr|korku}}, {{W+|tr|sam}}, {{W+|tr|tedhiş}}, {{W+|tr|terör}}, {{W+|tr|ürküntü}}, {{W+|tr|vahşet}}, {{W+|tr|yılgı}}, {{W+|tr|nezle}}, {{W+|tr|dehşet}}, {{W+|tr|heybet}}, {{W+|tr|varsayım}}, {{W+|tr|faraziye}}
{{werger-bin}}
== {{ziman|en}} ==
=== Bilêvkirin ===
* {{IPA|en|\sɔː\}}
* {{deng|en|en-us-saw.ogg|dever=DYA}}
* {{deng|en|LL-Q1860 (eng)-Back ache-saw.wav|Deng|dever=London, QY}}
* {{deng|en|LL-Q1860 (eng)-Assorted-Interests-saw.wav|Deng|dever=New York City, DYA}}
* {{deng|en|LL-Q1860 (eng)-Wodencafe-saw.wav|Deng|dever=Teksas, DYA}}
* {{deng|en|LL-Q1860 (eng)-Grendelkhan-saw.wav|Deng|dever=Connecticut, DYA}}
=== Navdêr ===
{{en-navdêr}}
# {{f|en|amûr}} [[mişar]], [[birrek]]a [[dar]]an
=== Lêker ===
{{en-tewîn-lk|form=awarte|n3y=saws|b=sawed|pb=sawn|pb2=sawed|pn=sawing}}
{{lêker|en}}
# Bi [[mişar]]ê [[birîn]].
{{bend}}
=== Formeke lêkerê ===
{{lêker|en|form=erê}}
# {{en-dema-borî-sade|see}}
#: {{mk|en|I didn't '''see''' him.|Min ew nedît.|rêz=1}}
== {{ziman|za}} ==
=== Navdêr ===
{{navdêr|za}}
# [[kitêb#ku|kitêb]], [[pirtûk#ku|pirtûk]]
brsutnvw2y1ymd3m64xoxpc5iy4nhdn
Wîkîferheng:ceribandin
4
23016
6237484
6237381
2026-06-11T22:33:58Z
Ghybu
1393
6237484
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}}
{{ku-tewandin/ceribandin|emilandin|form=gerguhêz|niha=emilîn|borî=emiland|bi=bi|na=na|ne=ne}}
=== çûn ===
{{ku-tewandin/ceribandin|çûn|form=negerguhêz|niha=ç|borî=çû}}
=== hatin ===
{{ku-tewandin/ceribandin|hatin|form=negerguhêz|niha=ê|borî=hat}}
dfr73hn4mypwzgr9ryhxqhoq18mhp9o
6237485
6237484
2026-06-11T22:34:43Z
Ghybu
1393
6237485
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/ceribandin|get_comma_separated_forms|niha=kev|borî=ket}}
{{ku-tewandin/ceribandin|emilandin|form=gerguhêz|niha=emilîn|borî=emiland|bi=bi|na=na|ne=ne}}
=== çûn ===
{{ku-tewandin/ceribandin|çûn|form=negerguhêz|niha=ç|borî=çû}}
=== hatin ===
{{ku-tewandin/ceribandin|hatin|form=negerguhêz|niha=ê|borî=hat}}
azs7zhyuwnmew23xs8tjxi1xmo1lyf3
6237504
6237485
2026-06-12T03:01:08Z
Ghybu
1393
6237504
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/ceribandin|get_comma_separated_forms|niha=kev|borî=ket}}
=== çûn ===
{{ku-tewandin/ceribandin|çûn|form=negerguhêz|niha=ç|borî=çû}}
=== hatin ===
{{ku-tewandin/ceribandin|hatin|form=negerguhêz|niha=ê|borî=hat}}
3kap6sjcnlywas2p5undvrmz134fgql
6237520
6237504
2026-06-12T08:17:40Z
Ghybu
1393
/* hatin */
6237520
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/ceribandin|get_comma_separated_forms|niha=kev|borî=ket}}
=== çûn ===
{{ku-tewandin/ceribandin|çûn|form=negerguhêz|niha=ç|borî=çû}}
=== hatin ===
{{ku-tewandin|hatin|form=negerguhêz|niha=wer|niha2=ê|borî=hat}}
80v2oeise3hg8bxp3wfqg1gm6zvfq8n
see
0
25368
6237461
6082450
2026-06-11T16:11:05Z
Ghybu
1393
/* Bilêvkirin */
6237461
wikitext
text/x-wiki
== {{ziman|af}} ==
=== Navdêr ===
{{navdêr|af}}
# {{f|af|erdnîgarî}} {{g|ku|derya}}, {{g|ku|behr}}, {{g|ku|dengiz}}
#* {{bêmînak|af}}
=== Çavkanî ===
{{rûpela wergerê|af|derya}}
== {{ziman|et}} ==
=== Cînav ===
{{cînav|et}}
# {{g|ku|ev}} ([[yekjimar]], [[biker]])
#* {{bêmînak|et}}
== {{ziman|fur}} ==
=== Navdêr ===
{{navdêr|fur|z=m}}
# {{mijar|fur|amûr}} {{g|ku|mişar}}
#* {{bêmînak|fur}}
=== Çavkanî ===
{{rûpela wergerê|fur|mişar}}
== {{ziman|frr}} ==
=== Navdêr ===
{{navdêr|frr|z=n}}
# {{mijar|frr|av}} {{g|ku|gol}}, {{g|ku|deryaçe}}, {{g|ku|gol}}a {{g|ku|av}}ê
#* {{bêmînak|frr}}
=== Çavkanî ===
{{rûpela wergerê|frr|gol}}
== {{ziman|fy}} ==
=== Navdêr ===
{{navdêr|fy|z=m}}
# {{f|fy|erdnîgarî}} {{g|ku|derya}}, {{g|ku|behr}}, {{g|ku|dengiz}}
#* {{bêmînak|fy}}
=== Çavkanî ===
{{rûpela wergerê|fy|derya}}
== {{ziman|enm}} ==
=== Navdêr ===
{{navdêr|enm}}
# {{f|enm|erdnîgarî}} {{g|ku|derya}}, {{g|ku|behr}}, {{g|ku|dengiz}}
#* {{bêmînak|enm}}
=== Çavkanî ===
{{rûpela wergerê|enm|derya}}
== {{ziman|en}} ==
=== Bilêvkirin ===
:{{ku-tîp|sî}}
* {{IPA|en|/siː/}}
* {{deng|en|en-uk-to see.ogg|Deng - 'to see'|dever=QY}}
* {{deng|en|LL-Q1860 (eng)-Back ache-see.wav|Deng|dever=London, QY}}
* {{deng|en|en-us-see.ogg|dever=DYA}}
=== Lêker ===
{{en-tewîn-lk|form=awarte|n3y=sees|b=saw|pb=seen|pn=seeing}}
{{lêker|en}}
# [[dîtin]]
#: {{mk|en|I cannot '''see''' you today.|Ez nikarim te îro bibînim.|rêz=1}}
# [[tê gihiştin]], [[fam|fam kirin]]
#: {{mk|en|I don't '''see''' why you cannot come.|Ez tê nagihim tu çima nikarî werî.}}
==== Bide ber ====
* {{g|en|sea}}
== {{ziman|jam}} ==
=== Lêker ===
{{lêker|jam}}
# [[dîtin#ku|dîtin]]
#* {{bêmînak|jam}}
dwlm5ya92bbexpx1gz5gvgfv8c0gbed
watch
0
29492
6237452
6237369
2026-06-11T15:42:54Z
Ghybu
1393
/* Navdêr */
6237452
wikitext
text/x-wiki
== {{ziman|en}} ==
=== Bilêvkirin ===
* {{deng|en|en-gb-watch.ogg|dever=QY}}
* {{deng|en|LL-Q1860 (eng)-Back ache-watch.wav|Deng|dever=London, QY}}
* {{deng|en|en-us-watch.ogg|dever=DYA}}
* {{deng|en|LL-Q1860 (eng)-Wodencafe-watch.wav|Deng|dever=Teksas, DYA}}
=== Lêker ===
{{en-lêker}}
# [[nerîn]], [[temaşe]] kirin, [[mêzîn]], [[berê xwe danê]], [[seh|seh kirin]], [[fekirin]], [[hêv|hêv kirin]], [[mêze|mêze kirin]], [[mêzandin]], [[darî kirin]], [[çav lê gerandin]]
#* {{bêmînak|en}}
=== Navdêr ===
{{en-navdêr}}
# [[demjimêrk]], [[seet]] (bi taybetî yên [[zend]]an)
#* {{bêmînak|en}}
46qmgxjhdhe5mhw86yw9dzzqk200f4y
6237458
6237452
2026-06-11T15:58:38Z
Ghybu
1393
/* Bilêvkirin */
6237458
wikitext
text/x-wiki
== {{ziman|en}} ==
=== Bilêvkirin ===
* {{IPA|en|/ˈwɒt͡ʃ/}}
* {{deng|en|en-gb-watch.ogg|dever=QY}}
* {{deng|en|LL-Q1860 (eng)-Back ache-watch.wav|Deng|dever=London, QY}}
* {{deng|en|en-us-watch.ogg|dever=DYA}}
=== Lêker ===
{{en-lêker}}
# [[nerîn]], [[temaşe]] kirin, [[mêzîn]], [[berê xwe danê]], [[seh|seh kirin]], [[fekirin]], [[hêv|hêv kirin]], [[mêze|mêze kirin]], [[mêzandin]], [[darî kirin]], [[çav lê gerandin]]
#* {{bêmînak|en}}
=== Navdêr ===
{{en-navdêr}}
# [[demjimêrk]], [[seet]] (bi taybetî yên [[zend]]an)
#* {{bêmînak|en}}
o55xzghnl1cvdeo6si6xffsaaz1yoic
codex
0
38579
6237505
6037904
2026-06-12T03:21:20Z
~2026-34493-14
15046
6237505
wikitext
text/x-wiki
== {{ziman|en}} ==
=== Bilêvkirin ===
* {{deng|en|LL-Q1860 (eng)-Wodencafe-codex.wav|Deng|dever=Teksas, DYA}}
* {{deng|en|En-us-codex.ogg}}
=== Navdêr ===
{{navdêr|en}}
# [[nexşe]] <ref>Ferhenga Kurdî-Îngîlîzî ya Salah Sadallah</ref>
#* {{bêmînak|en}}
== {{ziman|la}} ==
=== Navdêr ===
{{navdêr|la|z=}}
# [[pirtûk]], [[kitêb]]
#* {{bêmînak|la}}
=== Çavkanî ===
{{çavkanî}}
59my15ja8k2m7k7mqop2v8lumgh1htq
gerçi
0
41301
6237424
6233257
2026-06-11T13:51:40Z
Rewiye tine
7120
/* Etîmolojî */
6237424
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Hoker ===
{{hoker|ku}}
# [[welew]], [[tevî ku]], [[rexma]], [[rexmen]], [[çendî ku]], [[her çiqas ku]], [[çawa]] be jî, [[herçend e ku]], [[dîsan jî]], [[her çend]], ya rastî
#:'''''Gerçi''' ku wan zilm li me kiriye jî, divê em zilmê li wan nekin!''
#* {{jêder|ku|{{Jêgirtin/Melayê Cizîrî/Dîwana Melayê Cizirî}}|jêgirtin=Şerh-i halê min Mela narit beyadê hê temam</br>Vê sewadê '''gerçi''' herdem jê birin sed intixab}}
==== Bide ber ====
* [[gerçî]]
==== Etîmolojî ====
ji {{pêk|ger|çi}}
==== Werger ====
{{werger-ser}}
* {{Z|de}}: {{W|de|obwohl}}, {{W|de|obgleich}}, {{W|de|obschon}}, [[so]] (wenn auch, {{W|de|obwohl)}}, [[soviel]] (in wie großen Maß auch immer), [[wenn]] (konditional), {{W|de|wenngleich}}, {{W|de|wennschon}}, {{W|de|zwar|guman=erê}}
* {{Z|ar}}: {{W|ar|رغم}}
* {{Z|fa}}: {{W|fa|گرچه}}, {{W|fa|هر چند}}, {{W|fa|گوجه فرنگی}}
* {{Z|fi}}: {{W|fi|vaikka}}
* {{Z|fr}}: {{W|fr|quoique}}, {{W|fr|même si}}
* {{Z|nl}}: {{W|nl|}}
* {{Z|en}}: {{W|en|albeit}}, {{W|en|although}}, {{W|en|though}}
* {{Z|it}}: {{W|it|benché}}, {{W|it|anche se}}, {{W|it|per quanto}}
* {{Z|ru}}: {{W|ru|несмотря на то}}, {{W|ru|что}}, {{W|ru|хотя}}
* {{Z|es}}: {{W|es|aunque}}, {{W|es|aun cuando}}, {{W|es|aun si}}
* {{Z|sv}}: {{W|sv|fastän}}, {{W|sv|fast}}
* {{Z|tr}}: {{W|tr|gerçi}}, [[her]] [[ne]] [[kadar]], [[ise]] [[de]], {{W|tr|rağmen}}, {{W|tr|vakia|guman=erê}}, {{W|tr|vakıa|guman=erê}}
{{werger-bin}}
== {{ziman|tr}} ==
=== Bilêvkirin ===
* {{deng|tr|LL-Q256 (tur)-ToprakM-gerçi.wav|Deng|dever=Îzmîr, Tirkiye}}
=== Hoker ===
{{hoker|tr}}
# [[çendî]], [[heçî]], [[gerçî]], [[rexma]], [[her çiqas]]
#* {{bêmînak|tr}}
6ww6ll8vtwdr5wk26geigcsewgdbfb6
6237425
6237424
2026-06-11T13:51:55Z
Rewiye tine
7120
/* Etîmolojî */
6237425
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Hoker ===
{{hoker|ku}}
# [[welew]], [[tevî ku]], [[rexma]], [[rexmen]], [[çendî ku]], [[her çiqas ku]], [[çawa]] be jî, [[herçend e ku]], [[dîsan jî]], [[her çend]], ya rastî
#:'''''Gerçi''' ku wan zilm li me kiriye jî, divê em zilmê li wan nekin!''
#* {{jêder|ku|{{Jêgirtin/Melayê Cizîrî/Dîwana Melayê Cizirî}}|jêgirtin=Şerh-i halê min Mela narit beyadê hê temam</br>Vê sewadê '''gerçi''' herdem jê birin sed intixab}}
==== Bide ber ====
* [[gerçî]]
==== Etîmolojî ====
ji {{pêk|ku|ger|çi}}
==== Werger ====
{{werger-ser}}
* {{Z|de}}: {{W|de|obwohl}}, {{W|de|obgleich}}, {{W|de|obschon}}, [[so]] (wenn auch, {{W|de|obwohl)}}, [[soviel]] (in wie großen Maß auch immer), [[wenn]] (konditional), {{W|de|wenngleich}}, {{W|de|wennschon}}, {{W|de|zwar|guman=erê}}
* {{Z|ar}}: {{W|ar|رغم}}
* {{Z|fa}}: {{W|fa|گرچه}}, {{W|fa|هر چند}}, {{W|fa|گوجه فرنگی}}
* {{Z|fi}}: {{W|fi|vaikka}}
* {{Z|fr}}: {{W|fr|quoique}}, {{W|fr|même si}}
* {{Z|nl}}: {{W|nl|}}
* {{Z|en}}: {{W|en|albeit}}, {{W|en|although}}, {{W|en|though}}
* {{Z|it}}: {{W|it|benché}}, {{W|it|anche se}}, {{W|it|per quanto}}
* {{Z|ru}}: {{W|ru|несмотря на то}}, {{W|ru|что}}, {{W|ru|хотя}}
* {{Z|es}}: {{W|es|aunque}}, {{W|es|aun cuando}}, {{W|es|aun si}}
* {{Z|sv}}: {{W|sv|fastän}}, {{W|sv|fast}}
* {{Z|tr}}: {{W|tr|gerçi}}, [[her]] [[ne]] [[kadar]], [[ise]] [[de]], {{W|tr|rağmen}}, {{W|tr|vakia|guman=erê}}, {{W|tr|vakıa|guman=erê}}
{{werger-bin}}
== {{ziman|tr}} ==
=== Bilêvkirin ===
* {{deng|tr|LL-Q256 (tur)-ToprakM-gerçi.wav|Deng|dever=Îzmîr, Tirkiye}}
=== Hoker ===
{{hoker|tr}}
# [[çendî]], [[heçî]], [[gerçî]], [[rexma]], [[her çiqas]]
#* {{bêmînak|tr}}
ntpcq9nex6usldg02amy77xua4pgotx
hêvên
0
45500
6237456
6237402
2026-06-11T15:50:14Z
Bikarhêner
3719
6237456
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Navdêr ===
{{navdêr|ku|z=n}}
# {{guharto|ku|havên}}
av8pdf4k70wfe1lu0j4u9v0zqqmielc
sererast
0
45802
6237453
6098515
2026-06-11T15:44:15Z
Ghybu
1393
/* Rengdêr */
6237453
wikitext
text/x-wiki
{{ds|sererast|serrast}}
== {{ziman|ku}} ==
=== Bilêvkirin ===
<!-- * {{ku-IPA}} -->
* {{ku-kîte}}
=== Rengdêr ===
{{ku-tewîn-rd|sererast}}
{{rengdêr|ku}}
# [[dirist|Dirist]], [[rast]]kirî, [[bêkêmasî]], [[bêşaşî]], [[bêçewtî]], [[bêxeletî]].
#: {{nim|ku|'''Sererast''' kirin.|kêmasiyên tiştekî jê derxistin|rêz=1}}
==== Herwiha ====
{{kol3|ku|cure=Herwiha
|serast
|serrast
}}
==== Jê ====
{{kol3|ku|cure=Jê
|sererast bûn<pos:lêker>
|sererast kirin<pos:lêker>
|sererastbûn<pos:navdêr>
|sererastkirin<pos:navdêr>
|sererastbûyî<pos:rengdêr>
|sererastkirî<pos:rengdêr>
|sererastî
}}
==== Etîmolojî ====
Ji {{qertaf|ku|ser|-e-|rast}}.
==== Werger ====
{{werger-ser}}
* {{Z|de}}: {{W+|de|direkt}}, {{W+|de|ordentlich}}, {{W+|de|regelmäßig}}, {{W+|de|bestimmt}}
* {{Z|ar}}: {{W-|ar|مصحح}},{{W-|ar|منظم}},{{W-|ar|مرتب}}
* {{Z|fa}}: {{W+|fa|هماهنگ}}
* {{Z|fi}}: {{W+|fi|oikaistu}}
* {{Z|en}}: {{W+|en|corrected}}, {{W+|en|orderly}}, {{W+|en|tidy}}
* {{Z|tr}}: {{W+|tr|direkt}}, {{W+|tr|sağlıklı}}, {{W+|tr|düzgün}}
{{werger-bin}}
n0bko4pre3zidj47jda4hiu53svv2cq
6237476
6237453
2026-06-11T17:40:20Z
Ghybu
1393
/* Werger */
6237476
wikitext
text/x-wiki
{{ds|sererast|serrast}}
== {{ziman|ku}} ==
=== Bilêvkirin ===
<!-- * {{ku-IPA}} -->
* {{ku-kîte}}
=== Rengdêr ===
{{ku-tewîn-rd|sererast}}
{{rengdêr|ku}}
# [[dirist|Dirist]], [[rast]]kirî, [[bêkêmasî]], [[bêşaşî]], [[bêçewtî]], [[bêxeletî]].
#: {{nim|ku|'''Sererast''' kirin.|kêmasiyên tiştekî jê derxistin|rêz=1}}
==== Herwiha ====
{{kol3|ku|cure=Herwiha
|serast
|serrast
}}
==== Jê ====
{{kol3|ku|cure=Jê
|sererast bûn<pos:lêker>
|sererast kirin<pos:lêker>
|sererastbûn<pos:navdêr>
|sererastkirin<pos:navdêr>
|sererastbûyî<pos:rengdêr>
|sererastkirî<pos:rengdêr>
|sererastî
}}
==== Etîmolojî ====
Ji {{qertaf|ku|ser|-e-|rast}}.
==== Werger ====
{{werger-ser}}
* {{Z|de}}: {{W+|de|direkt}}, {{W+|de|ordentlich}}, {{W+|de|regelmäßig}}, {{W+|de|bestimmt}}
* {{Z|ar}}: {{W-|ar|مُصَحَّح}}, {{W-|ar|مُنَظَّم}}, {{W-|ar|مُرَتَّب}}
* {{Z|fa}}: {{W+|fa|هماهنگ}}
* {{Z|fi}}: {{W+|fi|oikaistu}}
* {{Z|en}}: {{W+|en|corrected}}, {{W+|en|orderly}}, {{W+|en|tidy}}
* {{Z|tr}}: {{W+|tr|direkt}}, {{W+|tr|sağlıklı}}, {{W+|tr|düzgün}}
{{werger-bin}}
ak9jtonq2k2p8f7nwzd2097j2cn3yal
angaşt
0
46382
6237416
6120272
2026-06-11T12:56:27Z
~2026-31809-51
15005
/* Etîmolojî */ Peyv warê zimanên Îranî ye. Nabe tenê bo zimanê farisî be.
6237416
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-IPA}}
* {{ku-kîte}}
=== Navdêr ===
{{ku-tewîn-nav|angaşt|mê}}
{{navdêr|ku|z=m}}
# Tiştê ku kesek dibêje lê [[bêguman]] nayê [[zanîn]] ka [[rast]] e yan ne.
#: {{hevmaneyên peyvê|ku|îdia|tez|argument|ingir|dahk|tiwêj}}
==== Herwiha ====
{{kol3|ku|cure=Herwiha
|engaşt
}}
==== Jê ====
{{kol3|ku|cure=Jê
|angaşt kirin<q:lêker>
|angaştkirin<q:navdêr>
|angaştkirî<q:rengdêr>
|angaştin
|angaştî
}}
==== Etîmolojî ====
Ev peyv bingeha انگاشتن engaşten "fikirîn, xeyal kirin, tesewir kirin, ferz kirin" a farisî [[Peyva farisî çi ye KERO? Çawa bo te diyare ko ev peyv peyvek farisî ye? Nabe ku peyvek Tat, Taliş, Mazenderan, Pamîr, Peştûn, yan jî Avesta be?]] ye ku bi xeletî yaxud bi kêfî ji alîyê hin kesan ve manaya "îdia" lê hate barkirin.
==== Werger ====
{{werger-ser}}
* {{Z|de}}: {{W+|de|Behauptung|f}}, {{W+|de|Argument|n}}, {{W+|de|Claim|m|guman=erê}}
* {{Z|ar}}: {{W-|ar|ادعاء}}
* {{Z|fa}}: {{W+|fa|ادعا}}, {{W+|fa|شرط}}
* {{Z|fi}}: {{W+|fi|väite}}
* {{Z|fr}}: {{W+|fr|thèse}}
* {{Z|he}}: {{W-|he|טענה|tr=t'a'na}}, [[טיעון]] (t'i'un)
* {{Z|en}}: {{W+|en|claim}}, {{W+|en|argument}}, {{W+|en|thesis}}, {{W+|en|allegation}}
* {{Z|it}}: {{W+|it|dichiarazione|f}}, {{W+|it|affermazione|f}}
* {{Z|sv}}: {{W+|sv|påstående|n}}
* {{Z|tr}}: {{W+|tr|iddia}}, {{W+|tr|av}}, {{W+|tr|tez}}, {{W+|tr|sav}}
{{werger-bin}}
eib2os5e3uklog7zcuyn7fkbrx3f7es
6237454
6237416
2026-06-11T15:44:51Z
Bikarhêner
3719
Guhartinên [[Special:Contributions/~2026-31809-51|~2026-31809-51]] ([[User talk:~2026-31809-51|gotûbêj]]) hatine betalkirin, vegerand guhartoya dawî ya [[User:Bikarhêner|Bikarhêner]]
6120272
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-IPA}}
* {{ku-kîte}}
=== Navdêr ===
{{ku-tewîn-nav|angaşt|mê}}
{{navdêr|ku|z=m}}
# Tiştê ku kesek dibêje lê [[bêguman]] nayê [[zanîn]] ka [[rast]] e yan ne.
#: {{hevmaneyên peyvê|ku|îdia|tez|argument|ingir|dahk|tiwêj}}
==== Herwiha ====
{{kol3|ku|cure=Herwiha
|engaşt
}}
==== Jê ====
{{kol3|ku|cure=Jê
|angaşt kirin<q:lêker>
|angaştkirin<q:navdêr>
|angaştkirî<q:rengdêr>
|angaştin
|angaştî
}}
==== Etîmolojî ====
Ev peyv bingeha انگاشتن engaşten "fikirîn, xeyal kirin, tesewir kirin, ferz kirin" a farisî ye ku bi xeletî yaxud bi kêfî ji alîyê hin kesan ve manaya "îdia" lê hate barkirin.
==== Werger ====
{{werger-ser}}
* {{Z|de}}: {{W+|de|Behauptung|f}}, {{W+|de|Argument|n}}, {{W+|de|Claim|m|guman=erê}}
* {{Z|ar}}: {{W-|ar|ادعاء}}
* {{Z|fa}}: {{W+|fa|ادعا}}, {{W+|fa|شرط}}
* {{Z|fi}}: {{W+|fi|väite}}
* {{Z|fr}}: {{W+|fr|thèse}}
* {{Z|he}}: {{W-|he|טענה|tr=t'a'na}}, [[טיעון]] (t'i'un)
* {{Z|en}}: {{W+|en|claim}}, {{W+|en|argument}}, {{W+|en|thesis}}, {{W+|en|allegation}}
* {{Z|it}}: {{W+|it|dichiarazione|f}}, {{W+|it|affermazione|f}}
* {{Z|sv}}: {{W+|sv|påstående|n}}
* {{Z|tr}}: {{W+|tr|iddia}}, {{W+|tr|av}}, {{W+|tr|tez}}, {{W+|tr|sav}}
{{werger-bin}}
4y094u6qpyfb3nyggyk913tevdhffkz
take
0
47941
6237451
6235743
2026-06-11T15:40:08Z
Ghybu
1393
/* Bilêvkirin */
6237451
wikitext
text/x-wiki
== {{ziman|en}} ==
=== Bilêvkirin ===
:{{ku-tîp|teyk}}
* {{IPA|en|/teɪk/|[tʰeɪ̯k]}}
{{stûn|h=2|
* {{deng|en|En-uk-to take.ogg|dever=QY}}
* {{deng|en|LL-Q1860 (eng)-Back ache-take.wav|Deng|dever=London, QY}}
* {{deng|en|en-us-take.ogg|dever=DYA}}
* {{deng|en|en-au-take.ogg|dever=Awistralya}}
}}
=== Lêker ===
{{en-tewîn-lk|form=awarte|n3y=takes|b=took|pb=taken|pn=taking}}
{{lêker|en}}
# [[girtin]], [[wergirtin]], [[hildan]], [[standin]]
#* {{bêmînak|en}}
# [[birin]]
#: {{mk|en|My friends '''took''' me to meet him.|Hevalên min ez birim ji bo wî nas kim.}}
{{bend}}
=== Navdêr ===
{{navdêr|en|p=takes}}
# [[girtin#Navdêr|Girtin]].
#* {{bêmînak|en}}
# Tiştek ku tête [[birin]].
#* {{bêmînak|en}}
# [[miqdar|Miqdar]]a [[masî]], leyistik û hwd. di yek carî de girtin.
#* {{bêmînak|en}}
# [[raman|Raman]], [[nêrîn]] an [[nirxandin]]ek
#: {{mk|en|What's your '''take''' on the candidate?|Nerîna we li ser namzet çi ye?}}
# [[nêrîn|Nêrîn]]ek; [[çareser]]kirin
#: {{mk|en|A new '''take''' on an old idea.|Awireke nû li ser ramaneke kevn.}}
# {{f|en|nefermî}} [[dirav|Dirav]]ê ku tê [[standin]], bi taybetî jî [[qezenc]].
#* {{bêmînak|en}}
# {{f|en|rojnamevanî}} Beşek ji [[nusxe]]yê ku ji [[kargêr]] an [[afirîner]]ê Linotype re hatî teîn kirin, bi gelemperî beşek [[çîrok]] an [[gotar]]ek e.
#* {{bêmînak|en}}
# {{f|en|sînema}} Wêne kişandina [[dîmen]]ek, an perçeyek ji dîmenek, bêyî qutbûn û birîn.
#* {{bêmînak|en}}
## Mînakeke xebata domdar a [[kamera]]yê.
#* {{bêmînak|en}}
# {{f|en|nefermî}} [[berter|Bertekeke]] [[dîtbarî]] û [[derûnî]] ji tiştekê/î re bi gelemperî diyar kirin di starekê de ku vekêşîn an ecêbbûna tevahî îfade dike.
#: {{mk|en|She did a slow '''take''' on being asked by reporters the same question for the third time.|Wê girtinek hêdî kir li ser ku ji hêla nûçegihanan ve cara sêyem heman pirs tê pirsîn.}}
# [[tomarkirin|Tomarkirina]] performansa [[muzîkal]]ek.
#* {{bêmînak|en}}
# {{f|en|bijîşkî}} [[derzîn|Derzîn]]eke serketî.
#* {{bêmînak|en}}
=== Çavkanî ===
* {{malper|url=https://www.dictionary.com/browse/take|sernav=take|malper=dictionary.com}}
== {{ziman|mh}} ==
=== Navdêr ===
{{navdêr|mh}}
# {{mijar|mh|heywan}} {{g|ku|elok}}
#* {{bêmînak|mh}}
=== Çavkanî ===
{{rûpela wergerê|mh|elok}}
qgpzyryhbfs9jxiaq9bhf7t835o4ibw
took
0
47942
6237446
6083777
2026-06-11T15:27:23Z
Ghybu
1393
/* Bilêvkirin */
6237446
wikitext
text/x-wiki
== {{ziman|en}} ==
=== Bilêvkirin ===
:{{ku-tîp|tuk}}
* {{IPA|en|/tʊk/}}
* {{deng|en|LL-Q1860 (eng)-Pvanp7-took.wav|QY}}
* {{deng|en|en-us-took.ogg|DYA}}
=== Formeke lêkerê ===
{{lêker|en|form=erê}}
# {{en-dema-borî-sade|take}}
## [[girt]]
== {{ziman|yua}} ==
=== Lêker ===
{{lêker|yua}}
# {{g|ku|şewitîn}}, {{g|ku|sotin}}
=== Çavkanî ===
{{rûpela wergerê|yua|şewitîn}}
9sfz1ivmapqter80ab87v7aa2pl35k4
6237447
6237446
2026-06-11T15:30:01Z
Ghybu
1393
/* Bilêvkirin */
6237447
wikitext
text/x-wiki
== {{ziman|en}} ==
=== Bilêvkirin ===
:{{ku-tîp|tuk}}
* {{IPA|en|/tʊk/}}
* {{deng|en|LL-Q1860 (eng)-Pvanp7-took.wav|dever=QY}}
* {{deng|en|en-us-took.ogg|dever=DYA}}
=== Formeke lêkerê ===
{{lêker|en|form=erê}}
# {{en-dema-borî-sade|take}}
## [[girt]]
== {{ziman|yua}} ==
=== Lêker ===
{{lêker|yua}}
# {{g|ku|şewitîn}}, {{g|ku|sotin}}
=== Çavkanî ===
{{rûpela wergerê|yua|şewitîn}}
d1fswfuamorqwofv0a72pbf3b688c91
taken
0
47943
6237448
6083778
2026-06-11T15:34:46Z
Ghybu
1393
/* Bilêvkirin */
6237448
wikitext
text/x-wiki
== {{ziman|en}} ==
=== Bilêvkirin ===
:{{ku-tîp|teykin}}
* {{IPA|en|/ˈteɪ.kn̩/}}
* {{deng|en|LL-Q1860 (eng)-Back ache-taken.wav|dever=UK}}
* {{deng|en|en-us-taken.ogg|dever=US}}
=== Formeke lêkerê ===
{{lêker|en|form=erê}}
# {{partîsîpa borî|en|take}}
## [[girtî]]
0pumryy30vzg4cpuhzfimenz5qm61au
6237449
6237448
2026-06-11T15:35:54Z
Ghybu
1393
/* Bilêvkirin */
6237449
wikitext
text/x-wiki
== {{ziman|en}} ==
=== Bilêvkirin ===
:{{ku-tîp|teykin}}
* {{IPA|en|/ˈteɪ.kn̩/}}
* {{deng|en|LL-Q1860 (eng)-Back ache-taken.wav|dever=QY}}
* {{deng|en|en-us-taken.ogg|dever=DYA}}
=== Formeke lêkerê ===
{{lêker|en|form=erê}}
# {{partîsîpa borî|en|take}}
## [[girtî]]
2058mn8z4pbs6dzq1oi2maamspdiggr
seen
0
48245
6237464
6083964
2026-06-11T16:18:34Z
Ghybu
1393
/* {{ziman|en}} */
6237464
wikitext
text/x-wiki
== {{ziman|en}} ==
=== Bilêvkirin ===
* {{IPA|en|/siːn/}}
* {{deng|en|en-us-seen.ogg|dever=DYA}}
* {{deng|en|LL-Q1860 (eng)-Back ache-seen.wav|Deng|dever=London, QY}}
* {{deng|en|LL-Q1860 (eng)-Assorted-Interests-seen.wav|Deng|dever=New York City, DYA}}
* {{deng|en|LL-Q1860 (eng)-Wodencafe-seen.wav|Deng|dever=Teksas, DYA}}
* {{deng|en|LL-Q1860 (eng)-Grendelkhan-seen.wav|Deng|dever=Connecticut, DYA}}
=== Formeke lêkerê ===
{{lêker|en|form=erê}}
# {{partîsîpa borî|en|take}}
## [[dîtî]]
== {{ziman|nds}} ==
=== Lêker ===
{{lêker|nds}}
# [[dîtin#ku|dîtin]]
93nskk5xrlrya94x33f8xd3m2jxq0q0
6237465
6237464
2026-06-11T16:19:18Z
Ghybu
1393
/* Formeke lêkerê */
6237465
wikitext
text/x-wiki
== {{ziman|en}} ==
=== Bilêvkirin ===
* {{IPA|en|/siːn/}}
* {{deng|en|en-us-seen.ogg|dever=DYA}}
* {{deng|en|LL-Q1860 (eng)-Back ache-seen.wav|Deng|dever=London, QY}}
* {{deng|en|LL-Q1860 (eng)-Assorted-Interests-seen.wav|Deng|dever=New York City, DYA}}
* {{deng|en|LL-Q1860 (eng)-Wodencafe-seen.wav|Deng|dever=Teksas, DYA}}
* {{deng|en|LL-Q1860 (eng)-Grendelkhan-seen.wav|Deng|dever=Connecticut, DYA}}
=== Formeke lêkerê ===
{{lêker|en|form=erê}}
# {{partîsîpa borî|en|seen}}
## [[dîtî]]
== {{ziman|nds}} ==
=== Lêker ===
{{lêker|nds}}
# [[dîtin#ku|dîtin]]
i8xe05415tdwnkzrrgpo5fz8kyebmew
6237466
6237465
2026-06-11T16:19:30Z
Ghybu
1393
/* Formeke lêkerê */
6237466
wikitext
text/x-wiki
== {{ziman|en}} ==
=== Bilêvkirin ===
* {{IPA|en|/siːn/}}
* {{deng|en|en-us-seen.ogg|dever=DYA}}
* {{deng|en|LL-Q1860 (eng)-Back ache-seen.wav|Deng|dever=London, QY}}
* {{deng|en|LL-Q1860 (eng)-Assorted-Interests-seen.wav|Deng|dever=New York City, DYA}}
* {{deng|en|LL-Q1860 (eng)-Wodencafe-seen.wav|Deng|dever=Teksas, DYA}}
* {{deng|en|LL-Q1860 (eng)-Grendelkhan-seen.wav|Deng|dever=Connecticut, DYA}}
=== Formeke lêkerê ===
{{lêker|en|form=erê}}
# {{partîsîpa borî|en|see}}
## [[dîtî]]
== {{ziman|nds}} ==
=== Lêker ===
{{lêker|nds}}
# [[dîtin#ku|dîtin]]
o5hn8nfmjul51h3gvkzrmqib6t1ob20
taking
0
49233
6237450
6084189
2026-06-11T15:36:55Z
Ghybu
1393
/* {{ziman|en}} */
6237450
wikitext
text/x-wiki
== {{ziman|en}} ==
=== Bilêvkirin ===
:{{ku-tîp|teyking}}
* {{IPA|en|/ˈteɪkɪŋ/}}
* {{deng|en|en-us-taking.ogg|dever=DYA}}
* {{deng|en|LL-Q1860 (eng)-Back ache-taking.wav|Deng|dever=London, QY}}
=== Formeke lêkerê ===
{{lêker|en|form=erê}}
# {{partîsîpa niha|en|take}}
0fd8lnih8si3wyjrncityyswvkpvy7p
seeing
0
49258
6237468
6084211
2026-06-11T16:25:22Z
Ghybu
1393
/* Formeke lêkerê */
6237468
wikitext
text/x-wiki
== {{ziman|en}} ==
=== Bilêvkirin ===
:{{ku-tîp|sîying}}
* {{deng|en|en-us-seeing.ogg|dever=DYA}}
* {{deng|en|LL-Q1860 (eng)-Wodencafe-seeing.wav|Deng|dever=Teksas, DYA}}
* {{deng|en|LL-Q1860 (eng)-Grendelkhan-seeing.wav|Deng|dever=Connecticut, DYA}}
=== Formeke lêkerê ===
{{lêker|en|form=erê}}
# {{partîsîpa niha|en|see}}
7r67d4ydjm4ud6v6fx9w9gv0fk1m7z5
6237469
6237468
2026-06-11T16:26:07Z
Ghybu
1393
/* Bilêvkirin */
6237469
wikitext
text/x-wiki
== {{ziman|en}} ==
=== Bilêvkirin ===
:{{ku-tîp|sîying}}
* {{IPA|en|/ˈsiː.ɪŋ/}}
* {{deng|en|en-us-seeing.ogg|dever=DYA}}
* {{deng|en|LL-Q1860 (eng)-Wodencafe-seeing.wav|Deng|dever=Teksas, DYA}}
* {{deng|en|LL-Q1860 (eng)-Grendelkhan-seeing.wav|Deng|dever=Connecticut, DYA}}
=== Formeke lêkerê ===
{{lêker|en|form=erê}}
# {{partîsîpa niha|en|see}}
dn967yywx7heb55pr9yxt082df0sd4a
takes
0
49332
6237445
6084265
2026-06-11T15:21:08Z
Ghybu
1393
/* Bilêvkirin */
6237445
wikitext
text/x-wiki
== {{ziman|en}} ==
=== Bilêvkirin ===
* {{IPA|en|/teɪks/}}
* {{deng|en|en-us-takes.ogg|dever=DYA}}
* {{deng|en|LL-Q1860 (eng)-Wodencafe-takes.wav|Deng|dever=Teksas, DYA}}
* {{deng|en|LL-Q1860 (eng)-Back ache-takes.wav|Deng|dever=London, QY}}
=== Formeke lêkerê ===
{{lêker|en|form=erê}}
# {{en-dema-niha|take|sêyem|yekjimar}}
=== Formeke navdêrê ===
{{navdêr|en|form=erê}}
# {{pirjimar|en|take}}
k4q1klx5b3kh5ol1z8za3hu0xphyzcx
watched
0
49476
6237427
6084378
2026-06-11T14:32:59Z
Ghybu
1393
/* Lêker */
6237427
wikitext
text/x-wiki
== {{ziman|en}} ==
=== Bilêvkirin ===
:{{ku-tîp|woçt}}
* {{deng|en|en-us-watched.ogg|dever=DYA}}
* {{deng|en|LL-Q1860 (eng)-Grendelkhan-watched.wav|Deng|dever=Connecticut, DYA}}
=== Lêker ===
{{lêker|en}}
# {{partîsîpa borî|en|watch}}
#* {{bêmînak|en}}
qml2sbtla94tmvvohr9703391fif477
6237428
6237427
2026-06-11T14:38:33Z
Ghybu
1393
/* Lêker */
6237428
wikitext
text/x-wiki
== {{ziman|en}} ==
=== Bilêvkirin ===
:{{ku-tîp|woçt}}
* {{deng|en|en-us-watched.ogg|dever=DYA}}
* {{deng|en|LL-Q1860 (eng)-Grendelkhan-watched.wav|Deng|dever=Connecticut, DYA}}
=== Lêker ===
{{lêker|en}}
# {{en-dema-borî-sade|watch}}
# {{partîsîpa borî|en|watch}}
etjtdyij6pl3147hepms5weig6oca1b
6237430
6237428
2026-06-11T14:42:13Z
Ghybu
1393
/* Lêker */
6237430
wikitext
text/x-wiki
== {{ziman|en}} ==
=== Bilêvkirin ===
:{{ku-tîp|woçt}}
* {{deng|en|en-us-watched.ogg|dever=DYA}}
* {{deng|en|LL-Q1860 (eng)-Grendelkhan-watched.wav|Deng|dever=Connecticut, DYA}}
=== Formeke lêkerê ===
{{lêker|en|form=erê}}
# {{en-dema-borî-sade|watch}}
# {{partîsîpa borî|en|watch}}
7dx6v6bvkdkdicbgi42qztnn4wa5n5x
6237444
6237430
2026-06-11T15:10:59Z
Ghybu
1393
/* Bilêvkirin */
6237444
wikitext
text/x-wiki
== {{ziman|en}} ==
=== Bilêvkirin ===
:{{ku-tîp|woçt}}
* {{IPA|en|/wɑt͡ʃt/}}
* {{deng|en|en-us-watched.ogg|dever=DYA}}
* {{deng|en|LL-Q1860 (eng)-Grendelkhan-watched.wav|Deng|dever=Connecticut, DYA}}
=== Formeke lêkerê ===
{{lêker|en|form=erê}}
# {{en-dema-borî-sade|watch}}
# {{partîsîpa borî|en|watch}}
s91mlyz9qtyh011f72fekp4eho1tifm
havên
0
52090
6237457
6237411
2026-06-11T15:51:17Z
Bikarhêner
3719
6237457
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-IPA}}
* {{ku-kîte}}
=== Navdêr ===
{{navdêr|ku|z=n}}
# [[mast|Mast]]ê ku [[têkil]]î nav [[şîr]]î tê kirin daku [[şîr]] [[meyîn|bimeye]] û bibe [[mast]].
#* {{bêmînak|ku}}
# Tiştê ku tiştek din jê çêdibe yan tê çêkirin.
#: {{hevmane|ku|tov}}
#* {{jêder|ku|jêgirtin=Lê ew hîç ne difikirî Jî ku dibe hin zilam jî hene ku zarûk ji '''havênê''' wan çênabin.|{{Jêgirtin/Zeynelabidîn Zinar/Balafira Jînê}}}}
==== Herwiha ====
{{stûn|
* {{hw|ku|hêvin||Ûrmiye}}
* {{hw|ku|aveyn}}
* {{hw|ku|avên}}
* {{hw|ku|haveyn}}
* {{hw|ku|heyvên}}
* {{hw|ku|hêvên}}
* {{hw|ku|heyvan}}
}}
==== Jê ====
{{stûn|
* {{mj|lêker}} [[havên kirin]]
* {{mj|navdêr}} [[havênkirin]]
* {{mj|rengdêr}} [[havênkirî]]
}}
==== Têkildar ====
* [[hevîrtirş]]
==== Etîmolojî ====
Hevreha soranî {{g|ckb|ههوێن|tr=hewên}}, zazakî {{q|zza|ameyn}} / {{q|zza|amên}} / {{q|zza|amîn}}, hewramî [[amyan]], farisî {{g|fa|مایه|tr=mayê}}, pehlewî ''madek'', ji {{ji|ira}} *ham-madu/a-ya-na- (*mad- < IE *maǵ-).
==== Bi zaravayên din ====
* {{Z|zza}}: {{W-|zza|ameyn}}, {{W-|zza|amên}}
==== Werger ====
{{werger-ser}}
* {{Z|de}}: {{W|de|Hefe|f}}, {{W|de|Sauerteig|m}}
* {{Z|cs}}: {{W|cs|kvasinka|f}}
* {{Z|zh}}: [[酵母]] xiào mǔ
* {{Z|da}}: {{W|da|gær|c}}
* {{Z|ar}}: [[خميرة]] (xemîre), {{W|ar|الخمرة|guman=erê}}, {{W|ar|خاثر|guman=erê}}
* {{Z|et}}: {{W+|et|pärm}}, {{W+|et|pärmseened}}
* {{Z|fa}}: {{W+|fa|مایه}}, {{W+|fa|خمیر مایه}}, {{W+|fa|مایه پنیر}}
* {{Z|fi}}: {{W+|fi|hiiva}}
* {{Z|fr}}: {{W|fr|levure|f}}
* {{Z|nl}}: {{W|nl|gist|m}}
* {{Z|en}}: {{W-|en|yogurt starter}}, {{W-|en|starter culture}}, {{W+|en|yeast}}, {{W+|en|ferment}}, {{W+|en|atom}}, {{W+|en|leaven|guman=erê}}, {{W+|en|leavening|guman=erê}}, {{W|en|yeast ferment|guman=erê}}, {{W|en|sour dough|guman=erê}}, {{W+|en|seed}}
* {{Z|ga}}: {{W|ga|giosta|m}}
* {{Z|ja}}: [[酵母]] (kōbo)
* {{Z|ko}}: [[효모]] (hyomo)
* {{Z|pl}}: [[drożdże]] {{fpl}}
* {{Z|ru}}: [[дрожжи]] (dróžži) {{fpl}}
* {{Z|es}}: {{W|es|levadura|f}}
* {{Z|sv}}: {{W+|sv|jäst}}
* {{Z|tr}}: {{W+|tr|maya}}, {{W+|tr|bel}}, {{W+|tr|cibiliyet}}, {{W|tr|damızlık|guman=erê}}, {{W|tr|döl|guman=erê}}
* {{Z|el}}: {{W|el|μαγιά|f}}, {{W|el|ζύμη|f}}
{{werger-bin}}
5zkyv23tawcn6c0s4fwpc53chs51gp8
ihtişam
0
52803
6237525
6231595
2026-06-12T10:35:48Z
Wikihez
7344
/* */ bi [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]ê re
6237525
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-kîte}}
=== Navdêr ===
{{ku-tewîn-nav|ihtişam|mê}}
{{navdêr|ku|z=m}}
# [[mezinahî]], [[ewrengî]], [[mirês]], [[wurşe]], [[şeml]], [[rewnaqî]], [[debdebe]], [[hişmet]], [[gewretî]], [[şiyan]], [[qewet]], [[qudret]], [[şan]], [[rûmet]], [[hêz]], [[hêzdarî]], [[qedir]], [[qîmet]], [[prestîj]]
#* {{jêder|ku|jêgirtin=Gerek em avahiyên saziyên din çêkin: Kurdî Der, Enstituya Kurdî, Akademiyên Kurdî û hin wekî din. Gerek bi '''îhtîşama''' wan zimanê kurdî li psîkolojiya xwe ya normal vegere.|xwendevanek bi navê Remezan di Amidakurd.com de, 8/2009}}
==== Herwiha ====
* [[îhtişam]]
* [[îhtîşam]]
==== Etîmolojî ====
Ji {{ji|ar|ku|احتشام}}
==== Jê ====
* [[biihtişam]]
* [[bêihtişam]]
* [[ihtişamdar]]
* [[ihtişamî]]
==== Werger ====
{{werger-ser}}
* {{Z|af}}: {{W+|af|gesag}}, {{W+|af|beroemdheid}}
* {{Z|de}}: {{W+|de|Blendwerk}}, {{W|de|Verdienst|n}}, {{W|de|Berühmtheit|f}}, {{W|de|Glorie|f}}, {{W|de|Pracht|f}}, {{W|de|Prunk}}, {{W|de|Glanz|m|guman=erê}}, {{W|de|Herrlichkeit|f|guman=erê}}
* {{Z|eo}}: {{W+|eo|gloro}}, {{W+|eo|merito}}, {{W+|eo|prestiĝo}}
* {{Z|fo}}: {{W+|fo|heiður}}
* {{Z|fi}}: {{W+|fi|mahti}}, {{W+|fi|mahtavuus}}
* {{Z|fr}}: {{W+|fr|grandeur}}, {{W+|fr|gloire}}, {{W+|fr|splendeur}}
* {{Z|fy}}: {{W+|fy|gloarje}}
* {{Z|nl}}: {{W+|nl|autoriteit}}, {{W+|nl|gezag}}, {{W+|nl|prestige}}, {{W+|nl|verdienste}}, {{W+|nl|glorie}}, {{W+|nl|beroemdheid}}, {{W+|nl|lof}}, {{W+|nl|roem}}
* {{Z|io}}: {{W+|io|glorio}}
* {{Z|en}}: {{W+|en|magnificence}}, {{W+|en|grandeur}}, {{W+|en|splendor}}, {{W+|en|glamour}}, {{W+|en|prestige}}, {{W+|en|merit}}, {{W+|en|worth}}, {{W+|en|fame}}, {{W+|en|glory}}, {{W+|en|renown}}, {{W+|en|flamboyance}}, {{W+|en|array}}, {{W+|en|bravery}}, {{W+|en|pomp}}, {{W+|en|pride}}, {{W+|en|effulgence}}, {{W+|en|lavishness}}, {{W+|en|luster}}, {{W+|en|resplendence}}, {{W+|en|stateliness}}, {{W+|en|sumptuousness}}, {{W+|en|magesty}}, {{W+|en|majesty}}, {{W+|en|splendour}}, {{W+|en|brilliancy}}, {{W+|en|resplendency}}
* {{Z|ca}}: {{W+|ca|glòria}}
* {{Z|la}}: {{W+|la|gloria}}
* {{Z|pap}}: {{W+|pap|mérito}}, {{W+|pap|gloria}}
* {{Z|pt}}: {{W+|pt|importância social}}, {{W+|pt|prestígio}}, {{W+|pt|merecimento}}, {{W+|pt|mérito}}, {{W+|pt|glória}}
* {{Z|ro}}: {{W+|ro|slavă}}
* {{Z|ru}}: {{W|ru|слава|R=slava}}
* {{Z|es}}: {{W+|es|prestigio}}, {{W+|es|mérito}}, {{W+|es|gloria}}, {{W+|es|fama}}
* {{Z|tr}}: {{W+|tr|debdebe}}, {{W+|tr|ihtişam}}, {{W+|tr|şan}}, {{W+|tr|görkem}}, {{W+|tr|anıtsal}}
* {{Z|el}}: {{W|el|αίγλη|R=égli}}
{{werger-bin}}
== {{ziman|tr}} ==
=== Navdêr ===
{{navdêr|tr}}
# [[semyan]], [[ewrengî]], [[mirês]], [[şeml]], [[wurşe]], [[mezinayî]], [[ihtîşam]]
#* {{bêmînak|tr}}
66btf0gqhykygj0rh9wxjdlr04w29p6
sees
0
57107
6237462
6085810
2026-06-11T16:12:54Z
Ghybu
1393
/* Bilêvkirin */
6237462
wikitext
text/x-wiki
== {{ziman|et}} ==
=== Daçek ===
{{daçek|et}}
# {{g|ku|di ... de}}
=== Çavkanî ===
{{rûpela wergerê|et|di ... de}}
== {{ziman|en}} ==
=== Bilêvkirin ===
* {{IPA|en|/siːz/}}
* {{deng|en|en-us-sees.ogg|dever=DYA}}
* {{deng|en|LL-Q1860 (eng)-Grendelkhan-sees.wav|Deng|dever=Connecticut, DYA}}
=== Formeke lêkerê ===
{{lêker|en|form=erê}}
# {{en-dema-niha|see|sêyem|yekjimar}}
=== Formeke navdêrê ===
{{navdêr|en|form=erê}}
# {{pirjimar|en|see}}
9y0q5ua6njvkxtcljh2vbblzwyfxmgv
edits
0
81061
6237433
4999924
2026-06-11T14:49:27Z
Ghybu
1393
/* {{ziman|en}} */
6237433
wikitext
text/x-wiki
== {{ziman|en}} ==
=== Formeke lêkerê ===
{{lêker|en|form=erê}}
# {{en-dema-niha|edit|sêyem|yekjimar}}
=== Formeke navdêrê ===
{{navdêr|en|form=erê}}
# {{pirjimar|en|edit}}
1tbrtf4253yydv9hwk4v2s385rf9ljw
6237439
6237433
2026-06-11T15:03:51Z
Ghybu
1393
/* {{ziman|en}} */
6237439
wikitext
text/x-wiki
== {{ziman|en}} ==
=== Bilêvkirin ===
* {{IPA|en|/ˈɛdɪts/}}
=== Formeke lêkerê ===
{{lêker|en|form=erê}}
# {{en-dema-niha|edit|sêyem|yekjimar}}
=== Formeke navdêrê ===
{{navdêr|en|form=erê}}
# {{pirjimar|en|edit}}
fixllsl08f3r81p5nxppxu1wqrom555
saws
0
102310
6237473
4973047
2026-06-11T16:33:13Z
Ghybu
1393
/* {{ziman|en}} */
6237473
wikitext
text/x-wiki
== {{ziman|en}} ==
=== Formeke lêkerê ===
{{lêker|en|form=erê}}
# {{en-dema-niha|saw|sêyem|yekjimar}}
=== Formeke navdêrê ===
{{navdêr|en|form=erê}}
# {{pirjimar|en|saw}}
bouidf2kr2lgc61hi9zuzfy31v0ubt3
watches
0
110009
6237435
4986953
2026-06-11T14:55:27Z
Ghybu
1393
/* {{ziman|en}} */
6237435
wikitext
text/x-wiki
== {{ziman|en}} ==
=== Formeke lêkerê ===
{{lêker|en|form=erê}}
# {{en-dema-niha|watch|sêyem|yekjimar}}
=== Formeke navdêrê ===
{{navdêr|en|form=erê}}
# {{pirjimar|en|watch}}
bfeknbaofpr79idej4xe6f526z9pi6i
6237436
6237435
2026-06-11T14:57:37Z
Ghybu
1393
/* {{ziman|en}} */
6237436
wikitext
text/x-wiki
== {{ziman|en}} ==
=== Bilêvkirin ===
* {{IPA|en|ku|/ˈwɑt͡ʃɪz/}}
=== Formeke lêkerê ===
{{lêker|en|form=erê}}
# {{en-dema-niha|watch|sêyem|yekjimar}}
=== Formeke navdêrê ===
{{navdêr|en|form=erê}}
# {{pirjimar|en|watch}}
qdbh5gpgkko0ie8xxmanjdzmonvoc5r
6237443
6237436
2026-06-11T15:09:55Z
Ghybu
1393
/* Bilêvkirin */
6237443
wikitext
text/x-wiki
== {{ziman|en}} ==
=== Bilêvkirin ===
* {{IPA|en|/ˈwɑt͡ʃɪz/}}
=== Formeke lêkerê ===
{{lêker|en|form=erê}}
# {{en-dema-niha|watch|sêyem|yekjimar}}
=== Formeke navdêrê ===
{{navdêr|en|form=erê}}
# {{pirjimar|en|watch}}
brrzmq3dfelbnvgawgif2m141xdma2c
editing
0
312573
6237434
6092272
2026-06-11T14:52:52Z
Ghybu
1393
/* {{ziman|en}} */
6237434
wikitext
text/x-wiki
== {{ziman|en}} ==
=== Bilêvkirin ===
* {{IPA|en|/ˈɛdɪtɪŋ/}}
* {{deng|en|en-us-editing.ogg|dever=DYA}}
=== Navdêr ===
{{en-navdêr}}
# [[montaj]]
=== Formeke lêkerê ===
{{lêker|en|form=erê}}
# {{partîsîpa niha|en|edit}}
j1xd7f02xow6s1zqfmjdcdhp9u9jntn
rûbirû
0
341488
6237418
6120974
2026-06-11T13:25:37Z
Rewiye tine
7120
/* Jê */
6237418
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
<!-- * {{ku-IPA}} -->
* {{ku-kîte}}
=== Rengdêr ===
{{rengdêr|ku}}
# [[beramberî|Beramberî]], li [[hember]], li def êk.
#: {{nim|ku|Min nevêt bi telefonê digel te biaxivim, lê min divêt te '''rûbirû''' bibînim û bibêjim te.}}
==== Jê ====
{{kol3|ku|cure=Jê
|rûbirû kirin<pos:lêker>
|rûbirû bûn<pos:lêker>
|rûbirûbûn<pos:navdêr>
|rûbirûkirin<pos:navdêr>
}}
==== Etîmolojî ====
Ji {{qertaf|ku|rû|bi|rû}}.
==== Werger ====
{{werger-ser}}
* {{Z|de}}: {{W+|de|frontal|guman=erê}}, {{W-|de|von Angesicht zu Angesicht|guman=erê}}
* {{Z|ar}}: {{W-|ar|وجهاً لوجه}}, {{W-|ar|شخصياً}}
* {{Z|fa}}: {{W+|fa|روبرو}}, {{W+|fa|مقایسه}}, {{W-|fa|روبرو مقایسه}}, {{W-|fa|روبه رو|guman=erê}}, {{W+|fa|رودررو|guman=erê}}, {{W+|fa|متقابل}}
* {{Z|en}}: {{W+|en|face to face}}, {{W+|en|in person}}, {{W+|en|reciprocal|guman=erê}}
* {{Z|tr}}: {{W+|tr|karşılıklı}}, {{W+|tr|karşı karşıya}}, {{W+|tr|yüz yüze}}, {{W+|tr|yüzleşmece|guman=erê}}, {{W+|tr|burun buruna|guman=erê}}, {{W+|tr|faça façaya|guman=erê}}, {{W-|tr|yüz be yüz|guman=erê}}
{{werger-bin}}
7ize61bn11lwle7nz8mwc8u41x4w7t5
6237419
6237418
2026-06-11T13:28:35Z
Rewiye tine
7120
/* Jê */
6237419
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
<!-- * {{ku-IPA}} -->
* {{ku-kîte}}
=== Rengdêr ===
{{rengdêr|ku}}
# [[beramberî|Beramberî]], li [[hember]], li def êk.
#: {{nim|ku|Min nevêt bi telefonê digel te biaxivim, lê min divêt te '''rûbirû''' bibînim û bibêjim te.}}
==== Jê ====
{{kol3|ku|cure=Jê
|rûbirû kirin<pos:lêker>
|rû bi rû bûn<pos:lêker>
|rûbirûbûn<pos:navdêr>
|rûbirûkirin<pos:navdêr>
}}
==== Etîmolojî ====
Ji {{qertaf|ku|rû|bi|rû}}.
==== Werger ====
{{werger-ser}}
* {{Z|de}}: {{W+|de|frontal|guman=erê}}, {{W-|de|von Angesicht zu Angesicht|guman=erê}}
* {{Z|ar}}: {{W-|ar|وجهاً لوجه}}, {{W-|ar|شخصياً}}
* {{Z|fa}}: {{W+|fa|روبرو}}, {{W+|fa|مقایسه}}, {{W-|fa|روبرو مقایسه}}, {{W-|fa|روبه رو|guman=erê}}, {{W+|fa|رودررو|guman=erê}}, {{W+|fa|متقابل}}
* {{Z|en}}: {{W+|en|face to face}}, {{W+|en|in person}}, {{W+|en|reciprocal|guman=erê}}
* {{Z|tr}}: {{W+|tr|karşılıklı}}, {{W+|tr|karşı karşıya}}, {{W+|tr|yüz yüze}}, {{W+|tr|yüzleşmece|guman=erê}}, {{W+|tr|burun buruna|guman=erê}}, {{W+|tr|faça façaya|guman=erê}}, {{W-|tr|yüz be yüz|guman=erê}}
{{werger-bin}}
suzuhdhmai85zw7xm7vyxbw9k0to059
serast kirin
0
356895
6237440
5672538
2026-06-11T15:07:08Z
Ghybu
1393
/* Lêker */
6237440
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Lêker ===
{{lêker|ku|c=h-gh}}
# {{guharto|ku|sererast kirin}}
2wt1lu18p5w8g0y96neqrxe674z29zx
6237441
6237440
2026-06-11T15:08:03Z
Ghybu
1393
6237441
wikitext
text/x-wiki
{{bnr-h|serastkirin}}
== {{ziman|ku}} ==
=== Lêker ===
{{lêker|ku|c=h-gh|nd=serastkirin}}
# {{guharto|ku|sererast kirin}}
iows7b12ltej9gajpq27g81vrhs3mca
serastkirin
0
356896
6237442
5672540
2026-06-11T15:08:30Z
Ghybu
1393
6237442
wikitext
text/x-wiki
{{bnr-h|serast kirin}}
== {{ziman|ku}} ==
=== Navdêr ===
{{navdêr|ku|z=m|lk=serast kirin}}
# {{guharto|ku|sererastkirin}}
he6lb6i01lgzgcmdefgn1bqngsmtwm5
هماهنگ
0
364583
6237455
4586608
2026-06-11T15:45:02Z
Ghybu
1393
/* Rengdêr */
6237455
wikitext
text/x-wiki
== {{ziman|fa}} ==
=== Rengdêr ===
{{rengdêr|fa|tr=hamâhang}}
# [[cûr]], [[sererast]], [[sererast]]
okoehb1bg17cdjdw7pzcrg8gmx7h0yq
edit
0
390935
6237426
6237403
2026-06-11T14:29:18Z
Ghybu
1393
/* {{ziman|en}} */
6237426
wikitext
text/x-wiki
== {{ziman|en}} ==
=== Bilêvkirin ===
* {{IPA|en|/ˈɛd.ɪt/}}
* {{deng|en|LL-Q1860 (eng)-Samuel Muldoon (Muldoonsamuel55)-edit.wav|Deng|dever=Aurora, DYA}}
=== Lêker ===
{{en-lêker}}
# [[nivîsîn]], [[bijare kirin]]<ref>Ferhenga Kurdî-Îngîlîzî ya Salah Sadallah</ref>
# [[guherandin]], [[serastkirin]], [[rastvekirin]]
=== Navdêr ===
{{en-navdêr}}
# [[guherandin]], [[serastkirin]]
# {{i|fîlm}} [[montaj]]
=== Çavkanî ===
{{çavkanî}}
n3aykm0c2idfx2ymo27pjd3umftwzf9
6237432
6237426
2026-06-11T14:47:55Z
Ghybu
1393
6237432
wikitext
text/x-wiki
== {{ziman|en}} ==
=== Bilêvkirin ===
* {{IPA|en|/ˈɛd.ɪt/}}
* {{deng|en|LL-Q1860 (eng)-Samuel Muldoon (Muldoonsamuel55)-edit.wav|Deng|dever=Aurora, DYA}}
=== Lêker ===
{{en-lêker}}
# [[nivîsîn]], [[bijare kirin]]<ref>Ferhenga Kurdî-Îngîlîzî ya Salah Sadallah</ref>
# [[guherandin]], [[serast kirin]]
=== Navdêr ===
{{en-navdêr}}
# [[guherandin]], [[serastkirin]], [[rastvekirin]]
# {{i|fîlm}} [[montaj]]
=== Çavkanî ===
{{çavkanî}}
kr4iukfv4k7rrr67ejbgkoaivj9akmg
6237460
6237432
2026-06-11T16:04:55Z
Ghybu
1393
/* Bilêvkirin */
6237460
wikitext
text/x-wiki
== {{ziman|en}} ==
=== Bilêvkirin ===
* {{IPA|en|/ˈɛd.ɪt/}}
* {{deng|en|LL-Q1860 (eng)-Vealhurl-edit.wav|dever=Başûrê Îngilistanê}}
* {{deng|en|LL-Q1860 (eng)-Samuel Muldoon (Muldoonsamuel55)-edit.wav|Deng|dever=Aurora, DYA}}
=== Lêker ===
{{en-lêker}}
# [[nivîsîn]], [[bijare kirin]]<ref>Ferhenga Kurdî-Îngîlîzî ya Salah Sadallah</ref>
# [[guherandin]], [[serast kirin]]
=== Navdêr ===
{{en-navdêr}}
# [[guherandin]], [[serastkirin]], [[rastvekirin]]
# {{i|fîlm}} [[montaj]]
=== Çavkanî ===
{{çavkanî}}
3y413oy5keg8qmtguoadg4pfrjprrv3
li hemberî
0
435189
6237510
6175487
2026-06-12T06:45:12Z
~2026-34511-14
15049
Werger: +almanî : [[gegenüberliegend]] (bi alîkarî)
6237510
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-kîte}}
=== Navdêr ===
{{navdêr|ku|z=m}}
# [[li ber]], [[li pêşberî]]
==== Bi alfabeyên din ====
* {{ku-ar|ل ههمبهری}}
==== Etîmolojî ====
Ji {{heve|ku|li hember|-î}}.
==== Werger ====
{{werger-ser}}
* {{Z|de}}: {{W+|de|gegenüberliegend}}
* {{Z|ar}}: {{W|ar|محاذي|guman=erê}}
* {{Z|tr}}: {{W+|tr|karşısında}}, {{W+|tr|karşılık olarak|guman=erê}}, {{W+|tr|mukabilinde|guman=erê}}
{{werger-bin}}
th5v17rmvwbelrouprtx7bnlmdbvfjz
Tewandin:hatin
106
608944
6237517
6236988
2026-06-12T08:12:46Z
Ghybu
1393
/* Tabloya tewandinê */
6237517
wikitext
text/x-wiki
{{vegere|hatin}}
== Reh ==
Gelek caran hin kes dibêjin ku formên lêkera ”hatin” yên wek ”ez bêm/têm” formên kurtkirî ne û divê li cihê wan mirov binivîse ”ez dihêm”. Lê gelo bi rastî formên wek "ew bên/neyên" yan "ew bihên/nehên" bo zimanê nivîsînê çêtir in?
Di peyva "hatin" ya rader de "h" heye lê hem di pirraniya kurmancî û hem jî pirraniya soranî û herwiha farisî û zazakî de jî "h" di rehê dema niha de ne li kar e.
:- Bi soranî "d-êm" (ez têm) yan "y-êm" e, ne *de-hêm" yan *e-hêm.
:- Bi zazakî: "yena" (ez têm), ne "ez *hena"
:- Bi farisî: "men mî-ayem" yan "men mî-am" (ne *mî-hayem yan mî-ham").
Di zazakî (ameyen), farisî (ameden), hewramî (amay), pehlewî (amd-), avestayî (agem-) de "h" li destpêka peyvê nîne. Di kurmancî û soranî de "-m/ma-/me-" ji nîva peyvê ketiye lê "h" li destpêka peyvê zêde bûye ji ber ku bi taybetî kurmancî ji herfên bideng li destpêkê hez nake.
Lê di kurmancî de jî di pirraniya devokan de "h" tenê li peyva xwerû "hatin" zêde bûye, ne li rehê dema niha -ê- (soranî -ê-, farisî -a- yan -ay-, zazakî -yen-).
Bi kurmancî ji Konyayê bigire heta Zaxo û ji Ermenistanê heta Efrînê "ew t-ên" û "ew na(y)ên" e. "Ew di-hên" û "Ew na-hên" bi Behdînan û Hekariyan ve sinordar e.
Loma zêdekirina "h" li rehê dema niha anku bikaranîna formên wek "ez di-h-ê-m” hîperkorekt e anku mirov wisa zêde hewl dide sererast bike ku taliyê encama wê xelet derdikeve!
'''Rehên dema niha:'''
* {{g|ku|-ê-}}
* {{mj|devokî}} {{g|ku|-hê-}}
== Tabloya tewandinê ==
{{etîket tewandin
|etîket1 = Standard, kurmanciya navendî, rojavayî û serhedî
|naverok1 = {{ku-tewandin|hatin|form=negerguhêz|niha=wer|niha2=ê|borî=hat}}
|etîket2 = Kurmanciya rojhilatî
|naverok2 = {{ku-tewandin|hatin|form=negerguhêz|niha=wer|niha2=hê|borî=hat}}
}}
6u9c0vs7kidsr1eipxemjer0tzyx6kd
6237518
6237517
2026-06-12T08:14:42Z
Ghybu
1393
/* Tabloya tewandinê */
6237518
wikitext
text/x-wiki
{{vegere|hatin}}
== Reh ==
Gelek caran hin kes dibêjin ku formên lêkera ”hatin” yên wek ”ez bêm/têm” formên kurtkirî ne û divê li cihê wan mirov binivîse ”ez dihêm”. Lê gelo bi rastî formên wek "ew bên/neyên" yan "ew bihên/nehên" bo zimanê nivîsînê çêtir in?
Di peyva "hatin" ya rader de "h" heye lê hem di pirraniya kurmancî û hem jî pirraniya soranî û herwiha farisî û zazakî de jî "h" di rehê dema niha de ne li kar e.
:- Bi soranî "d-êm" (ez têm) yan "y-êm" e, ne *de-hêm" yan *e-hêm.
:- Bi zazakî: "yena" (ez têm), ne "ez *hena"
:- Bi farisî: "men mî-ayem" yan "men mî-am" (ne *mî-hayem yan mî-ham").
Di zazakî (ameyen), farisî (ameden), hewramî (amay), pehlewî (amd-), avestayî (agem-) de "h" li destpêka peyvê nîne. Di kurmancî û soranî de "-m/ma-/me-" ji nîva peyvê ketiye lê "h" li destpêka peyvê zêde bûye ji ber ku bi taybetî kurmancî ji herfên bideng li destpêkê hez nake.
Lê di kurmancî de jî di pirraniya devokan de "h" tenê li peyva xwerû "hatin" zêde bûye, ne li rehê dema niha -ê- (soranî -ê-, farisî -a- yan -ay-, zazakî -yen-).
Bi kurmancî ji Konyayê bigire heta Zaxo û ji Ermenistanê heta Efrînê "ew t-ên" û "ew na(y)ên" e. "Ew di-hên" û "Ew na-hên" bi Behdînan û Hekariyan ve sinordar e.
Loma zêdekirina "h" li rehê dema niha anku bikaranîna formên wek "ez di-h-ê-m” hîperkorekt e anku mirov wisa zêde hewl dide sererast bike ku taliyê encama wê xelet derdikeve!
'''Rehên dema niha:'''
* {{g|ku|-ê-}}
* {{mj|devokî}} {{g|ku|-hê-}}
== Tabloya tewandinê ==
{{etîket tewandin
|etîket1 = Standard, kurmanciya navendî, rojavayî û serhedî
|naverok1 = {{ku-tewandin|hatin|form=negerguhêz|niha=wer|niha2=ê|borî=hat}}
|etîket2 = Kurmanciya rojhilatî
|naverok2 = {{ku-tewandin|hatin|form=negerguhêz|niha=hê|borî=hat}}
}}
czna3cei7edrqs1lfvk34k2px6uif3q
6237519
6237518
2026-06-12T08:16:17Z
Ghybu
1393
bt.
6237519
wikitext
text/x-wiki
{{vegere|hatin}}
== Reh ==
Gelek caran hin kes dibêjin ku formên lêkera ”hatin” yên wek ”ez bêm/têm” formên kurtkirî ne û divê li cihê wan mirov binivîse ”ez dihêm”. Lê gelo bi rastî formên wek "ew bên/neyên" yan "ew bihên/nehên" bo zimanê nivîsînê çêtir in?
Di peyva "hatin" ya rader de "h" heye lê hem di pirraniya kurmancî û hem jî pirraniya soranî û herwiha farisî û zazakî de jî "h" di rehê dema niha de ne li kar e.
:- Bi soranî "d-êm" (ez têm) yan "y-êm" e, ne *de-hêm" yan *e-hêm.
:- Bi zazakî: "yena" (ez têm), ne "ez *hena"
:- Bi farisî: "men mî-ayem" yan "men mî-am" (ne *mî-hayem yan mî-ham").
Di zazakî (ameyen), farisî (ameden), hewramî (amay), pehlewî (amd-), avestayî (agem-) de "h" li destpêka peyvê nîne. Di kurmancî û soranî de "-m/ma-/me-" ji nîva peyvê ketiye lê "h" li destpêka peyvê zêde bûye ji ber ku bi taybetî kurmancî ji herfên bideng li destpêkê hez nake.
Lê di kurmancî de jî di pirraniya devokan de "h" tenê li peyva xwerû "hatin" zêde bûye, ne li rehê dema niha -ê- (soranî -ê-, farisî -a- yan -ay-, zazakî -yen-).
Bi kurmancî ji Konyayê bigire heta Zaxo û ji Ermenistanê heta Efrînê "ew t-ên" û "ew na(y)ên" e. "Ew di-hên" û "Ew na-hên" bi Behdînan û Hekariyan ve sinordar e.
Loma zêdekirina "h" li rehê dema niha anku bikaranîna formên wek "ez di-h-ê-m” hîperkorekt e anku mirov wisa zêde hewl dide sererast bike ku taliyê encama wê xelet derdikeve!
'''Rehên dema niha:'''
* {{g|ku|-ê-}}
* {{mj|devokî}} {{g|ku|-hê-}}
== Tabloya tewandinê ==
{{etîket tewandin
|etîket1 = Standard, kurmanciya navendî, rojavayî û serhedî
|naverok1 = {{ku-tewandin|hatin|form=negerguhêz|niha=ê|borî=hat}}
|etîket2 = Kurmanciya rojhilatî
|naverok2 = {{ku-tewandin|hatin|form=negerguhêz|niha=hê|borî=hat}}
}}
jfsqnt4nm6rtfbpkn6l5vf6d8nju8f9
6237523
6237519
2026-06-12T09:22:00Z
Ghybu
1393
/* Tabloya tewandinê */
6237523
wikitext
text/x-wiki
{{vegere|hatin}}
== Reh ==
Gelek caran hin kes dibêjin ku formên lêkera ”hatin” yên wek ”ez bêm/têm” formên kurtkirî ne û divê li cihê wan mirov binivîse ”ez dihêm”. Lê gelo bi rastî formên wek "ew bên/neyên" yan "ew bihên/nehên" bo zimanê nivîsînê çêtir in?
Di peyva "hatin" ya rader de "h" heye lê hem di pirraniya kurmancî û hem jî pirraniya soranî û herwiha farisî û zazakî de jî "h" di rehê dema niha de ne li kar e.
:- Bi soranî "d-êm" (ez têm) yan "y-êm" e, ne *de-hêm" yan *e-hêm.
:- Bi zazakî: "yena" (ez têm), ne "ez *hena"
:- Bi farisî: "men mî-ayem" yan "men mî-am" (ne *mî-hayem yan mî-ham").
Di zazakî (ameyen), farisî (ameden), hewramî (amay), pehlewî (amd-), avestayî (agem-) de "h" li destpêka peyvê nîne. Di kurmancî û soranî de "-m/ma-/me-" ji nîva peyvê ketiye lê "h" li destpêka peyvê zêde bûye ji ber ku bi taybetî kurmancî ji herfên bideng li destpêkê hez nake.
Lê di kurmancî de jî di pirraniya devokan de "h" tenê li peyva xwerû "hatin" zêde bûye, ne li rehê dema niha -ê- (soranî -ê-, farisî -a- yan -ay-, zazakî -yen-).
Bi kurmancî ji Konyayê bigire heta Zaxo û ji Ermenistanê heta Efrînê "ew t-ên" û "ew na(y)ên" e. "Ew di-hên" û "Ew na-hên" bi Behdînan û Hekariyan ve sinordar e.
Loma zêdekirina "h" li rehê dema niha anku bikaranîna formên wek "ez di-h-ê-m” hîperkorekt e anku mirov wisa zêde hewl dide sererast bike ku taliyê encama wê xelet derdikeve!
'''Rehên dema niha:'''
* {{g|ku|-ê-}}
* {{mj|devokî}} {{g|ku|-hê-}}
== Tabloya tewandinê ==
{{etîket tewandin
|etîket1 = Standard, kurmanciya navendî, rojavayî û serhedî
|naverok1 = {{ku-tewandin|hatin|form=negerguhêz|niha=wer|niha2=ê|borî=hat}}
|etîket2 = Kurmanciya rojhilatî
|naverok2 = {{ku-tewandin|hatin|form=negerguhêz|niha=hê|borî=hat}}
}}
4tiu2q4uy2r082z3x24n1furcl6osid
Tewandin:çûn
106
608951
6237514
6237298
2026-06-12T07:54:43Z
Ghybu
1393
/* Tabloya tewandinê */
6237514
wikitext
text/x-wiki
== Reh ==
;Rehên demên niha
* [[-ç-]]
* [[-her-]]
* [[-er-]]
== Tabloya tewandinê ==
<!--
{{agadarî}} Tablo tenê li formên ji rehê '''-ç-''' avakirî dide û lê formên ji rehên '''-her-''', '''-er-''' û '''-r-''' jî berbelav in, bo nimûne:
* {{i|fermanî, erênî}}: [[here]], [[herin]]
*: {{i|fermanî, neyînî}}: [[mere]]/[[nere]], [[merin]]/[[nerin]]
* {{i|îndîkatîv, erênî}}: ez [[terim]], tu [[terî]], ew [[tere]], em/hûn/ew [[terin]]
*: {{i|îndîkatîv, neyînî}}: ez [[narim]], tu [[narî]], ew [[nare]], em/hûn/ew [[narin]]
* {{i|subjunktîv, erênî}}: ez [[herim]], tu [[herî]], ew [[here]], em/hûn/ew [[herin]]
*: {{i|subjunktîv, neyînî}}: ez [[nerim]], tu [[nerî]], ew [[nere]], em/hûn/ew [[nerin]]
-->
{{ku-tewandin|çûn|form=negerguhêz|niha=ç|niha2=her|borî=çû}}
iu8tfsg0kfd88qaretiwtnv6mjddzjo
6237515
6237514
2026-06-12T07:55:26Z
Ghybu
1393
/* Tabloya tewandinê */
6237515
wikitext
text/x-wiki
== Reh ==
;Rehên demên niha
* [[-ç-]]
* [[-her-]]
* [[-er-]]
== Tabloya tewandinê ==
<!--
{{agadarî}} Tablo tenê li formên ji rehê '''-ç-''' avakirî dide û lê formên ji rehên '''-her-''', '''-er-''' û '''-r-''' jî berbelav in, bo nimûne:
* {{i|fermanî, erênî}}: [[here]], [[herin]]
*: {{i|fermanî, neyînî}}: [[mere]]/[[nere]], [[merin]]/[[nerin]]
* {{i|îndîkatîv, erênî}}: ez [[terim]], tu [[terî]], ew [[tere]], em/hûn/ew [[terin]]
*: {{i|îndîkatîv, neyînî}}: ez [[narim]], tu [[narî]], ew [[nare]], em/hûn/ew [[narin]]
* {{i|subjunktîv, erênî}}: ez [[herim]], tu [[herî]], ew [[here]], em/hûn/ew [[herin]]
*: {{i|subjunktîv, neyînî}}: ez [[nerim]], tu [[nerî]], ew [[nere]], em/hûn/ew [[nerin]]
-->
{{ku-tewandin|çûn|form=negerguhêz|niha=her|niha2=ç|borî=çû}}
4q70mjiwegvnm3ewgp7989tzc6wmhki
Şablon:ku-tewandin/belge
10
608996
6237492
6078025
2026-06-12T01:54:11Z
Ghybu
1393
/* Bikaranîn */
6237492
wikitext
text/x-wiki
{{Lua bikartîne|Modul:ku-tewandin}}
{{Lua bikartîne|Modul:ku-tewandin/tablo}}
{{TemplateStyles|Şablon:ku-tewandin/style.css}}
== Bikaranîn ==
<syntaxhighlight lang="wikitext">
→ Lêkerên xwerû:
{{ku-tewandin|lêker|form=gerguhêz/negerguhêz|niha=|niha2=|niha3=|borî=|borî2=}}
→ Lêkerên pêkhatî:
{{ku-tewandin|lêker|form=gerguhêz/negerguhêz|pêşgir=|paşgir=|niha=|niha2=|niha3=|borî=|borî2=}}
→ Lêkerên hevedudanî:
{{ku-tewandin|lêker|form=gerguhêz/negerguhêz|pêşgir=|paşgir=|valahî=erê|niha=|niha2=|niha3=|borî=|borî2=}}
</syntaxhighlight>
=== Parametre ===
* {{param2|form}} "<u>gerguhêz</u>" an "<u>negerguhêz</u>"
* {{param2|niha}} rehê dema niha ('''mînak''': {{param2|niha|kev}} bo lêkerên ''ketin'', ''raketin'', ''lê_ketin'', ...)
* {{param2|borî}} rehê dema borî ('''mînak''': {{param2|borî|ket}} bo lêkerên ''ketin'', ''raketin'', ''lê_ketin'', ...)
* {{param2|pêşgir}} bo lêkerên [[pêkhatî]] û [[hevedudanî]] ('''mînak''': ''{{reng2|blue|ra}}kirin'' {{param2|pêşgir|ra}}, ''{{reng2|blue|bang}} kirin'' {{param2|pêşgir|bang}}, ''{{reng2|blue|lê}} gerîn'' ({{param2|pêşgir|jê}}, ...)
** {{param2|valahî|erê}} bo lêkerên [[hevedudanî]] ('''mînak''': ''{{reng2|blue|bang}} kirin'', ''{{reng2|blue|lê}} gerîn'', ...)
* {{param2|paşgir}} bo lêkerên [[hevedudanî]] ('''mînak''': ''[[dan dû]]'', ''[[girtin ser xwe]]'')
;Parametre bo pêşgirên {{nobold|(''bi-/di-/na-/ne-/me-'')}} ku ne standard in
* {{param2|bi}} {{param2|nihaBi}} {{param2|borîBi}}
* {{param2|di}} {{param2|nihaDi}} {{param2|borîDi}}
* {{param2|ne}} {{param2|nihaNe}} {{param2|borîNe}}
* {{param2|me}}
* {{param2|na}}
: → ''Mînak ([[Tewandin:emilîn]])'':
:<syntaxhighlight lang="wikitext" inline>
{{ku-tewandin|emilîn|form=negerguhêz|niha=emil|borî=emilî|bi=bi|na=na|ne=ne}}
</syntaxhighlight>
;Parametreyên din:
: {{param2|niha2}}, {{param2|niha3}} bo tewandinên din.
: {{param2|borî2}} bo tewandinên din.
== Mînak ==
;Lêkerên gerguhêz:
* [[Tewandin:kirin]] → Lêkera xwerû: <code><nowiki>{{</nowiki>'''ku-tewandin'''|kirin|'''{{reng2|olive|form}}'''=gerguhêz|'''{{reng2|olive|niha}}'''=k|'''{{reng2|olive|borî}}'''=kir}}</code>
* [[Tewandin:rakirin]] → Lêkera pêkhatî: ''{{reng2|blue|ra}}'' + ''kirin'' → <code><nowiki>{{</nowiki>'''ku-tewandin'''|{{reng2|blue|ra}}kirin|'''{{reng2|olive|form}}'''=gerguhêz|'''{{reng2|olive|niha}}'''=k|'''{{reng2|olive|borî}}'''=kir|'''{{reng2|olive|pêşgir}}'''={{reng2|blue|ra}}}}</code>
* [[Tewandin:pîroz kirin]] → Lêkera hevedudanî: ''{{reng2|blue|bang}}'' + ''kirin'' → <code><nowiki>{{</nowiki>'''ku-tewandin'''|{{reng2|blue|bang}} kirin|'''{{reng2|olive|form}}'''=gerguhêz|'''{{reng2|olive|niha}}'''=k|'''{{reng2|olive|borî}}'''=kir|'''{{reng2|olive|pêşgir}}'''={{reng2|blue|bang}}|'''{{reng2|olive|valahî}}'''={{reng2|brown|erê}}}}</code>
*: <code>|'''{{reng2|olive|valahî}}'''={{reng2|brown|erê}}</code>: "{{reng2|blue|bang}}" û "kirin" du parçe ne (valahiyek di navbera her du da heye)
* [[Tewandin:gotin]] → Lêkera xwerû: <code><nowiki>{{</nowiki>'''ku-tewandin'''|gotin|'''{{reng2|olive|form}}'''=gerguhêz|'''{{reng2|olive|niha}}'''=bêj|'''{{reng2|olive|niha2}}'''=vê|'''{{reng2|olive|niha3}}'''=wê|'''{{reng2|olive|borî}}'''=got}}</code>
;Lêkerên negerguhêz:
* [[Tewandin:ketin ]] → Lêkera xwerû: <code><nowiki>{{</nowiki>'''ku-tewandin'''|ketin|'''{{reng2|olive|form}}'''=negerguhêz|'''{{reng2|olive|niha}}'''=kev|'''{{reng2|olive|borî}}'''=ket}}</code>
* [[Tewandin:daketin]] → Lêkera pêkhatî: ''{{reng2|blue|da}}'' + ''ketin'' → <code><nowiki>{{</nowiki>'''ku-tewandin'''|{{reng2|blue|ra}}ketin|'''{{reng2|olive|form}}'''=negerguhêz|'''{{reng2|olive|niha}}'''=kev|'''{{reng2|olive|borî}}'''=ket|'''{{reng2|olive|pêşgir}}'''={{reng2|blue|da}}}}</code>
* [[Tewandin:lê gerîn]] → Lêkera hevedudanî: ''{{reng2|blue|lê}}'' + ''gerîn'' → <code><nowiki>{{</nowiki>'''ku-tewandin'''|{{reng2|blue|lê}} gerîn|'''{{reng2|olive|form}}'''=gerguhêz|'''{{reng2|olive|niha}}'''=b|'''{{reng2|olive|borî}}'''=bir|'''{{reng2|olive|pêşgir}}'''={{reng2|blue|jê}}|'''{{reng2|olive|valahî}}'''={{reng2|brown|erê}}}}</code>
*: <code>|'''{{reng2|olive|valahî}}'''={{reng2|brown|erê}}</code>: "{{reng2|blue|lê}}" û "gerîn" du parçe ne (valahiyek di navbera her du da heye)
* [[Tewandin:kenîn]] → <code><nowiki>{{</nowiki>'''ku-tewandin'''|kenîn|'''{{reng2|olive|form}}'''=negerguhêz|'''{{reng2|olive|niha}}'''=ken|'''{{reng2|olive|borî}}'''=kenî|'''{{reng2|olive|borî2}}'''=keniya}}</code>
;Lêkerên dijrêzik:
* [[Modul:ku-tewandin/dijrêzik]]
;Binêrin:
* [[:Kategorî:Tewandin:lêker ({{navê zimanî|ku}})]]
== Mijarên têkildar ==
* [[Modul:ku-tewandin]]
** [[Modul:ku-tewandin/tablo]]
** '''[[Modul:ku-tewandin/dijrêzik]]'''
* {{ş|ku-tewîn-lk}}
* {{ş|ku-tewîn-lk-niha}}
;Çend çavkanî
* [http://docs.google.com/viewer?a=v&q=cache:Ys6yRjKm2SEJ:www.kurdigeh.com/rwdx/sitepdf/ibrahimseydo-demenkurdi-ZEND.pdf+Di+kurmanciy%C3%AA+de+s%C3%AEstema+deman&hl=fr&gl=fr&pid=bl&srcid=ADGEEShCfRxplfM7NxKmaVEW50KjPrsOEZ31JXlN12Q2mdRo95TnGsn5B7YtsYTxgyTy4-hLVmuiiyvlbKOYB_4O1e1FbcA6SSBnr-L3Iu2jWzSWvEKohNp1rQjgiAIg3ll-BsbcOybD&sig=AHIEtbQOd1wFWTX8Qh4JFFwtbqg2itgruQ Di kurmanciyê de sîstema deman] (ku)
* [http://docs.google.com/viewer?a=v&q=cache:LkERbEhkNSMJ:www.institutkurde.org/publications/kurmanci/telechargement/ku12.pdf+Raboriya+d%C3%BBr+a+bilaniy%C3%AA&hl=fr&gl=fr&pid=bl&srcid=ADGEESgkAOze54EwkWmhYNoaQp7FDnv0QHQrj2CNgHM8TYLD2CSi8sVmWkEm-q0C1dnU5x9Ya_rtJAjbSu_oeahBnlzb1IjRY7vUMpSUkKMosTSDFOyAO7GAIZMTqXLXHOZ67AQx5RN8&sig=AHIEtbQ_4vMTwA37fjran9QEuVo3LX_3Mw KurmancÎ (kovar), hejmar 12, 1993] (ku)
* [http://www.institutkurde.org/en/conferences/kurdish_studies_irbil_2006/Ibrahim+Seydo+AYDOGAN.html Identification des temps verbaux dans les grammaires kurdes] (fr)
* Binêrin jî: [http://www.mesopotamia-ita.com/leker/Minak_.htm#a17 ''KÊŞANA LÊKERAN'' (Brahîm Xelîl TAŞ)] (bo navên demên lêkeran + tewandinên çend lêkeran)
* ''Rêzimanên kurdî û termînolojiya wan ya zimannasiyê'', Îbrahîm Seydo AYDOGAN, INALCO / CNU 15
* [https://books.openedition.org/ifeagd/2229?lang=fr ''Le médiatif en kurde-kurmandji résurgence ou renouveau du système verbal ?''], Ibrahim Seydo Aydoğan (ji bo dema "Çîrokiya boriya dûdar", bnr. ''[[:w:en:Inferential mood|Inferential mood]]'') (fr)
== TemplateData ==
<templatedata>
{
"description": "Şablona tewandinên lêkerên kurmancî",
"params": {
"1": {
"label": "Navê lêkerê",
"type": "string",
"required": true
},
"form": {
"label": "Cure",
"example": "\"gerguhêz\" an jî \"negerguhêz\"",
"type": "string",
"required": true
},
"pêşgir": {
"label": "Pêşgir",
"example": "bo lêkerên pêkhatî û hevedudanî: raketin = 'ra' + 'ketin' (pêşgir = 'ra')",
"type": "string"
},
"valahî": {
"label": "Valahî",
"example": "erê (bo lêkerên hevedudanî: bang_kirin, jê_birin)",
"type": "string"
},
"niha": {
"label": "rehê dema niha",
"type": "string",
"example": " 'kev' bo lêkerên 'ketin', 'rakatin', 'lê_ketin'",
"required": true
},
"niha2": {
"label": "rehê dema niha 2"
},
"niha3": {
"label": "rehê dema niha 3"
},
"borî": {
"label": "rehê dema borî",
"example": " 'ket' bo lêkerên 'ketin', 'rakatin', 'lê_ketin'",
"required": true
},
"borî2": {
"label": "rehê dema borî 2"
}
}
}
</templatedata>
<includeonly>
[[Kategorî:Şablonên lêkeran ({{navê zimanî|ku}})| ]]
</includeonly>
9c43v3897loelzaex8pdvk558xd2ffb
6237493
6237492
2026-06-12T01:55:12Z
Ghybu
1393
/* Mijarên têkildar */
6237493
wikitext
text/x-wiki
{{Lua bikartîne|Modul:ku-tewandin}}
{{Lua bikartîne|Modul:ku-tewandin/tablo}}
{{TemplateStyles|Şablon:ku-tewandin/style.css}}
== Bikaranîn ==
<syntaxhighlight lang="wikitext">
→ Lêkerên xwerû:
{{ku-tewandin|lêker|form=gerguhêz/negerguhêz|niha=|niha2=|niha3=|borî=|borî2=}}
→ Lêkerên pêkhatî:
{{ku-tewandin|lêker|form=gerguhêz/negerguhêz|pêşgir=|paşgir=|niha=|niha2=|niha3=|borî=|borî2=}}
→ Lêkerên hevedudanî:
{{ku-tewandin|lêker|form=gerguhêz/negerguhêz|pêşgir=|paşgir=|valahî=erê|niha=|niha2=|niha3=|borî=|borî2=}}
</syntaxhighlight>
=== Parametre ===
* {{param2|form}} "<u>gerguhêz</u>" an "<u>negerguhêz</u>"
* {{param2|niha}} rehê dema niha ('''mînak''': {{param2|niha|kev}} bo lêkerên ''ketin'', ''raketin'', ''lê_ketin'', ...)
* {{param2|borî}} rehê dema borî ('''mînak''': {{param2|borî|ket}} bo lêkerên ''ketin'', ''raketin'', ''lê_ketin'', ...)
* {{param2|pêşgir}} bo lêkerên [[pêkhatî]] û [[hevedudanî]] ('''mînak''': ''{{reng2|blue|ra}}kirin'' {{param2|pêşgir|ra}}, ''{{reng2|blue|bang}} kirin'' {{param2|pêşgir|bang}}, ''{{reng2|blue|lê}} gerîn'' ({{param2|pêşgir|jê}}, ...)
** {{param2|valahî|erê}} bo lêkerên [[hevedudanî]] ('''mînak''': ''{{reng2|blue|bang}} kirin'', ''{{reng2|blue|lê}} gerîn'', ...)
* {{param2|paşgir}} bo lêkerên [[hevedudanî]] ('''mînak''': ''[[dan dû]]'', ''[[girtin ser xwe]]'')
;Parametre bo pêşgirên {{nobold|(''bi-/di-/na-/ne-/me-'')}} ku ne standard in
* {{param2|bi}} {{param2|nihaBi}} {{param2|borîBi}}
* {{param2|di}} {{param2|nihaDi}} {{param2|borîDi}}
* {{param2|ne}} {{param2|nihaNe}} {{param2|borîNe}}
* {{param2|me}}
* {{param2|na}}
: → ''Mînak ([[Tewandin:emilîn]])'':
:<syntaxhighlight lang="wikitext" inline>
{{ku-tewandin|emilîn|form=negerguhêz|niha=emil|borî=emilî|bi=bi|na=na|ne=ne}}
</syntaxhighlight>
;Parametreyên din:
: {{param2|niha2}}, {{param2|niha3}} bo tewandinên din.
: {{param2|borî2}} bo tewandinên din.
== Mînak ==
;Lêkerên gerguhêz:
* [[Tewandin:kirin]] → Lêkera xwerû: <code><nowiki>{{</nowiki>'''ku-tewandin'''|kirin|'''{{reng2|olive|form}}'''=gerguhêz|'''{{reng2|olive|niha}}'''=k|'''{{reng2|olive|borî}}'''=kir}}</code>
* [[Tewandin:rakirin]] → Lêkera pêkhatî: ''{{reng2|blue|ra}}'' + ''kirin'' → <code><nowiki>{{</nowiki>'''ku-tewandin'''|{{reng2|blue|ra}}kirin|'''{{reng2|olive|form}}'''=gerguhêz|'''{{reng2|olive|niha}}'''=k|'''{{reng2|olive|borî}}'''=kir|'''{{reng2|olive|pêşgir}}'''={{reng2|blue|ra}}}}</code>
* [[Tewandin:pîroz kirin]] → Lêkera hevedudanî: ''{{reng2|blue|bang}}'' + ''kirin'' → <code><nowiki>{{</nowiki>'''ku-tewandin'''|{{reng2|blue|bang}} kirin|'''{{reng2|olive|form}}'''=gerguhêz|'''{{reng2|olive|niha}}'''=k|'''{{reng2|olive|borî}}'''=kir|'''{{reng2|olive|pêşgir}}'''={{reng2|blue|bang}}|'''{{reng2|olive|valahî}}'''={{reng2|brown|erê}}}}</code>
*: <code>|'''{{reng2|olive|valahî}}'''={{reng2|brown|erê}}</code>: "{{reng2|blue|bang}}" û "kirin" du parçe ne (valahiyek di navbera her du da heye)
* [[Tewandin:gotin]] → Lêkera xwerû: <code><nowiki>{{</nowiki>'''ku-tewandin'''|gotin|'''{{reng2|olive|form}}'''=gerguhêz|'''{{reng2|olive|niha}}'''=bêj|'''{{reng2|olive|niha2}}'''=vê|'''{{reng2|olive|niha3}}'''=wê|'''{{reng2|olive|borî}}'''=got}}</code>
;Lêkerên negerguhêz:
* [[Tewandin:ketin ]] → Lêkera xwerû: <code><nowiki>{{</nowiki>'''ku-tewandin'''|ketin|'''{{reng2|olive|form}}'''=negerguhêz|'''{{reng2|olive|niha}}'''=kev|'''{{reng2|olive|borî}}'''=ket}}</code>
* [[Tewandin:daketin]] → Lêkera pêkhatî: ''{{reng2|blue|da}}'' + ''ketin'' → <code><nowiki>{{</nowiki>'''ku-tewandin'''|{{reng2|blue|ra}}ketin|'''{{reng2|olive|form}}'''=negerguhêz|'''{{reng2|olive|niha}}'''=kev|'''{{reng2|olive|borî}}'''=ket|'''{{reng2|olive|pêşgir}}'''={{reng2|blue|da}}}}</code>
* [[Tewandin:lê gerîn]] → Lêkera hevedudanî: ''{{reng2|blue|lê}}'' + ''gerîn'' → <code><nowiki>{{</nowiki>'''ku-tewandin'''|{{reng2|blue|lê}} gerîn|'''{{reng2|olive|form}}'''=gerguhêz|'''{{reng2|olive|niha}}'''=b|'''{{reng2|olive|borî}}'''=bir|'''{{reng2|olive|pêşgir}}'''={{reng2|blue|jê}}|'''{{reng2|olive|valahî}}'''={{reng2|brown|erê}}}}</code>
*: <code>|'''{{reng2|olive|valahî}}'''={{reng2|brown|erê}}</code>: "{{reng2|blue|lê}}" û "gerîn" du parçe ne (valahiyek di navbera her du da heye)
* [[Tewandin:kenîn]] → <code><nowiki>{{</nowiki>'''ku-tewandin'''|kenîn|'''{{reng2|olive|form}}'''=negerguhêz|'''{{reng2|olive|niha}}'''=ken|'''{{reng2|olive|borî}}'''=kenî|'''{{reng2|olive|borî2}}'''=keniya}}</code>
;Lêkerên dijrêzik:
* [[Modul:ku-tewandin/dijrêzik]]
;Binêrin:
* [[:Kategorî:Tewandin:lêker ({{navê zimanî|ku}})]]
== Mijarên têkildar ==
* [[Modul:ku-tewandin]]
** [[Modul:ku-tewandin/tablo]]
** <u>[[Modul:ku-tewandin/nestandard]]</u>
* {{ş|ku-tewîn-lk}}
* {{ş|ku-tewîn-lk-niha}}
;Çend çavkanî
* [http://docs.google.com/viewer?a=v&q=cache:Ys6yRjKm2SEJ:www.kurdigeh.com/rwdx/sitepdf/ibrahimseydo-demenkurdi-ZEND.pdf+Di+kurmanciy%C3%AA+de+s%C3%AEstema+deman&hl=fr&gl=fr&pid=bl&srcid=ADGEEShCfRxplfM7NxKmaVEW50KjPrsOEZ31JXlN12Q2mdRo95TnGsn5B7YtsYTxgyTy4-hLVmuiiyvlbKOYB_4O1e1FbcA6SSBnr-L3Iu2jWzSWvEKohNp1rQjgiAIg3ll-BsbcOybD&sig=AHIEtbQOd1wFWTX8Qh4JFFwtbqg2itgruQ Di kurmanciyê de sîstema deman] (ku)
* [http://docs.google.com/viewer?a=v&q=cache:LkERbEhkNSMJ:www.institutkurde.org/publications/kurmanci/telechargement/ku12.pdf+Raboriya+d%C3%BBr+a+bilaniy%C3%AA&hl=fr&gl=fr&pid=bl&srcid=ADGEESgkAOze54EwkWmhYNoaQp7FDnv0QHQrj2CNgHM8TYLD2CSi8sVmWkEm-q0C1dnU5x9Ya_rtJAjbSu_oeahBnlzb1IjRY7vUMpSUkKMosTSDFOyAO7GAIZMTqXLXHOZ67AQx5RN8&sig=AHIEtbQ_4vMTwA37fjran9QEuVo3LX_3Mw KurmancÎ (kovar), hejmar 12, 1993] (ku)
* [http://www.institutkurde.org/en/conferences/kurdish_studies_irbil_2006/Ibrahim+Seydo+AYDOGAN.html Identification des temps verbaux dans les grammaires kurdes] (fr)
* Binêrin jî: [http://www.mesopotamia-ita.com/leker/Minak_.htm#a17 ''KÊŞANA LÊKERAN'' (Brahîm Xelîl TAŞ)] (bo navên demên lêkeran + tewandinên çend lêkeran)
* ''Rêzimanên kurdî û termînolojiya wan ya zimannasiyê'', Îbrahîm Seydo AYDOGAN, INALCO / CNU 15
* [https://books.openedition.org/ifeagd/2229?lang=fr ''Le médiatif en kurde-kurmandji résurgence ou renouveau du système verbal ?''], Ibrahim Seydo Aydoğan (ji bo dema "Çîrokiya boriya dûdar", bnr. ''[[:w:en:Inferential mood|Inferential mood]]'') (fr)
== TemplateData ==
<templatedata>
{
"description": "Şablona tewandinên lêkerên kurmancî",
"params": {
"1": {
"label": "Navê lêkerê",
"type": "string",
"required": true
},
"form": {
"label": "Cure",
"example": "\"gerguhêz\" an jî \"negerguhêz\"",
"type": "string",
"required": true
},
"pêşgir": {
"label": "Pêşgir",
"example": "bo lêkerên pêkhatî û hevedudanî: raketin = 'ra' + 'ketin' (pêşgir = 'ra')",
"type": "string"
},
"valahî": {
"label": "Valahî",
"example": "erê (bo lêkerên hevedudanî: bang_kirin, jê_birin)",
"type": "string"
},
"niha": {
"label": "rehê dema niha",
"type": "string",
"example": " 'kev' bo lêkerên 'ketin', 'rakatin', 'lê_ketin'",
"required": true
},
"niha2": {
"label": "rehê dema niha 2"
},
"niha3": {
"label": "rehê dema niha 3"
},
"borî": {
"label": "rehê dema borî",
"example": " 'ket' bo lêkerên 'ketin', 'rakatin', 'lê_ketin'",
"required": true
},
"borî2": {
"label": "rehê dema borî 2"
}
}
}
</templatedata>
<includeonly>
[[Kategorî:Şablonên lêkeran ({{navê zimanî|ku}})| ]]
</includeonly>
sbwujz1jael7polgky3fsq2ixvwqdxb
6237494
6237493
2026-06-12T01:56:55Z
Ghybu
1393
/* Mijarên têkildar */
6237494
wikitext
text/x-wiki
{{Lua bikartîne|Modul:ku-tewandin}}
{{Lua bikartîne|Modul:ku-tewandin/tablo}}
{{TemplateStyles|Şablon:ku-tewandin/style.css}}
== Bikaranîn ==
<syntaxhighlight lang="wikitext">
→ Lêkerên xwerû:
{{ku-tewandin|lêker|form=gerguhêz/negerguhêz|niha=|niha2=|niha3=|borî=|borî2=}}
→ Lêkerên pêkhatî:
{{ku-tewandin|lêker|form=gerguhêz/negerguhêz|pêşgir=|paşgir=|niha=|niha2=|niha3=|borî=|borî2=}}
→ Lêkerên hevedudanî:
{{ku-tewandin|lêker|form=gerguhêz/negerguhêz|pêşgir=|paşgir=|valahî=erê|niha=|niha2=|niha3=|borî=|borî2=}}
</syntaxhighlight>
=== Parametre ===
* {{param2|form}} "<u>gerguhêz</u>" an "<u>negerguhêz</u>"
* {{param2|niha}} rehê dema niha ('''mînak''': {{param2|niha|kev}} bo lêkerên ''ketin'', ''raketin'', ''lê_ketin'', ...)
* {{param2|borî}} rehê dema borî ('''mînak''': {{param2|borî|ket}} bo lêkerên ''ketin'', ''raketin'', ''lê_ketin'', ...)
* {{param2|pêşgir}} bo lêkerên [[pêkhatî]] û [[hevedudanî]] ('''mînak''': ''{{reng2|blue|ra}}kirin'' {{param2|pêşgir|ra}}, ''{{reng2|blue|bang}} kirin'' {{param2|pêşgir|bang}}, ''{{reng2|blue|lê}} gerîn'' ({{param2|pêşgir|jê}}, ...)
** {{param2|valahî|erê}} bo lêkerên [[hevedudanî]] ('''mînak''': ''{{reng2|blue|bang}} kirin'', ''{{reng2|blue|lê}} gerîn'', ...)
* {{param2|paşgir}} bo lêkerên [[hevedudanî]] ('''mînak''': ''[[dan dû]]'', ''[[girtin ser xwe]]'')
;Parametre bo pêşgirên {{nobold|(''bi-/di-/na-/ne-/me-'')}} ku ne standard in
* {{param2|bi}} {{param2|nihaBi}} {{param2|borîBi}}
* {{param2|di}} {{param2|nihaDi}} {{param2|borîDi}}
* {{param2|ne}} {{param2|nihaNe}} {{param2|borîNe}}
* {{param2|me}}
* {{param2|na}}
: → ''Mînak ([[Tewandin:emilîn]])'':
:<syntaxhighlight lang="wikitext" inline>
{{ku-tewandin|emilîn|form=negerguhêz|niha=emil|borî=emilî|bi=bi|na=na|ne=ne}}
</syntaxhighlight>
;Parametreyên din:
: {{param2|niha2}}, {{param2|niha3}} bo tewandinên din.
: {{param2|borî2}} bo tewandinên din.
== Mînak ==
;Lêkerên gerguhêz:
* [[Tewandin:kirin]] → Lêkera xwerû: <code><nowiki>{{</nowiki>'''ku-tewandin'''|kirin|'''{{reng2|olive|form}}'''=gerguhêz|'''{{reng2|olive|niha}}'''=k|'''{{reng2|olive|borî}}'''=kir}}</code>
* [[Tewandin:rakirin]] → Lêkera pêkhatî: ''{{reng2|blue|ra}}'' + ''kirin'' → <code><nowiki>{{</nowiki>'''ku-tewandin'''|{{reng2|blue|ra}}kirin|'''{{reng2|olive|form}}'''=gerguhêz|'''{{reng2|olive|niha}}'''=k|'''{{reng2|olive|borî}}'''=kir|'''{{reng2|olive|pêşgir}}'''={{reng2|blue|ra}}}}</code>
* [[Tewandin:pîroz kirin]] → Lêkera hevedudanî: ''{{reng2|blue|bang}}'' + ''kirin'' → <code><nowiki>{{</nowiki>'''ku-tewandin'''|{{reng2|blue|bang}} kirin|'''{{reng2|olive|form}}'''=gerguhêz|'''{{reng2|olive|niha}}'''=k|'''{{reng2|olive|borî}}'''=kir|'''{{reng2|olive|pêşgir}}'''={{reng2|blue|bang}}|'''{{reng2|olive|valahî}}'''={{reng2|brown|erê}}}}</code>
*: <code>|'''{{reng2|olive|valahî}}'''={{reng2|brown|erê}}</code>: "{{reng2|blue|bang}}" û "kirin" du parçe ne (valahiyek di navbera her du da heye)
* [[Tewandin:gotin]] → Lêkera xwerû: <code><nowiki>{{</nowiki>'''ku-tewandin'''|gotin|'''{{reng2|olive|form}}'''=gerguhêz|'''{{reng2|olive|niha}}'''=bêj|'''{{reng2|olive|niha2}}'''=vê|'''{{reng2|olive|niha3}}'''=wê|'''{{reng2|olive|borî}}'''=got}}</code>
;Lêkerên negerguhêz:
* [[Tewandin:ketin ]] → Lêkera xwerû: <code><nowiki>{{</nowiki>'''ku-tewandin'''|ketin|'''{{reng2|olive|form}}'''=negerguhêz|'''{{reng2|olive|niha}}'''=kev|'''{{reng2|olive|borî}}'''=ket}}</code>
* [[Tewandin:daketin]] → Lêkera pêkhatî: ''{{reng2|blue|da}}'' + ''ketin'' → <code><nowiki>{{</nowiki>'''ku-tewandin'''|{{reng2|blue|ra}}ketin|'''{{reng2|olive|form}}'''=negerguhêz|'''{{reng2|olive|niha}}'''=kev|'''{{reng2|olive|borî}}'''=ket|'''{{reng2|olive|pêşgir}}'''={{reng2|blue|da}}}}</code>
* [[Tewandin:lê gerîn]] → Lêkera hevedudanî: ''{{reng2|blue|lê}}'' + ''gerîn'' → <code><nowiki>{{</nowiki>'''ku-tewandin'''|{{reng2|blue|lê}} gerîn|'''{{reng2|olive|form}}'''=gerguhêz|'''{{reng2|olive|niha}}'''=b|'''{{reng2|olive|borî}}'''=bir|'''{{reng2|olive|pêşgir}}'''={{reng2|blue|jê}}|'''{{reng2|olive|valahî}}'''={{reng2|brown|erê}}}}</code>
*: <code>|'''{{reng2|olive|valahî}}'''={{reng2|brown|erê}}</code>: "{{reng2|blue|lê}}" û "gerîn" du parçe ne (valahiyek di navbera her du da heye)
* [[Tewandin:kenîn]] → <code><nowiki>{{</nowiki>'''ku-tewandin'''|kenîn|'''{{reng2|olive|form}}'''=negerguhêz|'''{{reng2|olive|niha}}'''=ken|'''{{reng2|olive|borî}}'''=kenî|'''{{reng2|olive|borî2}}'''=keniya}}</code>
;Lêkerên dijrêzik:
* [[Modul:ku-tewandin/dijrêzik]]
;Binêrin:
* [[:Kategorî:Tewandin:lêker ({{navê zimanî|ku}})]]
== Mijarên têkildar ==
* [[Modul:ku-tewandin]]
** [[Modul:ku-tewandin/tablo]]
** <s>[[Modul:ku-tewandin/nestandard]]</s>
* {{ş|ku-tewîn-lk}}
* {{ş|ku-tewîn-lk-niha}}
;Çend çavkanî
* [http://docs.google.com/viewer?a=v&q=cache:Ys6yRjKm2SEJ:www.kurdigeh.com/rwdx/sitepdf/ibrahimseydo-demenkurdi-ZEND.pdf+Di+kurmanciy%C3%AA+de+s%C3%AEstema+deman&hl=fr&gl=fr&pid=bl&srcid=ADGEEShCfRxplfM7NxKmaVEW50KjPrsOEZ31JXlN12Q2mdRo95TnGsn5B7YtsYTxgyTy4-hLVmuiiyvlbKOYB_4O1e1FbcA6SSBnr-L3Iu2jWzSWvEKohNp1rQjgiAIg3ll-BsbcOybD&sig=AHIEtbQOd1wFWTX8Qh4JFFwtbqg2itgruQ Di kurmanciyê de sîstema deman] (ku)
* [http://docs.google.com/viewer?a=v&q=cache:LkERbEhkNSMJ:www.institutkurde.org/publications/kurmanci/telechargement/ku12.pdf+Raboriya+d%C3%BBr+a+bilaniy%C3%AA&hl=fr&gl=fr&pid=bl&srcid=ADGEESgkAOze54EwkWmhYNoaQp7FDnv0QHQrj2CNgHM8TYLD2CSi8sVmWkEm-q0C1dnU5x9Ya_rtJAjbSu_oeahBnlzb1IjRY7vUMpSUkKMosTSDFOyAO7GAIZMTqXLXHOZ67AQx5RN8&sig=AHIEtbQ_4vMTwA37fjran9QEuVo3LX_3Mw KurmancÎ (kovar), hejmar 12, 1993] (ku)
* [http://www.institutkurde.org/en/conferences/kurdish_studies_irbil_2006/Ibrahim+Seydo+AYDOGAN.html Identification des temps verbaux dans les grammaires kurdes] (fr)
* Binêrin jî: [http://www.mesopotamia-ita.com/leker/Minak_.htm#a17 ''KÊŞANA LÊKERAN'' (Brahîm Xelîl TAŞ)] (bo navên demên lêkeran + tewandinên çend lêkeran)
* ''Rêzimanên kurdî û termînolojiya wan ya zimannasiyê'', Îbrahîm Seydo AYDOGAN, INALCO / CNU 15
* [https://books.openedition.org/ifeagd/2229?lang=fr ''Le médiatif en kurde-kurmandji résurgence ou renouveau du système verbal ?''], Ibrahim Seydo Aydoğan (ji bo dema "Çîrokiya boriya dûdar", bnr. ''[[:w:en:Inferential mood|Inferential mood]]'') (fr)
== TemplateData ==
<templatedata>
{
"description": "Şablona tewandinên lêkerên kurmancî",
"params": {
"1": {
"label": "Navê lêkerê",
"type": "string",
"required": true
},
"form": {
"label": "Cure",
"example": "\"gerguhêz\" an jî \"negerguhêz\"",
"type": "string",
"required": true
},
"pêşgir": {
"label": "Pêşgir",
"example": "bo lêkerên pêkhatî û hevedudanî: raketin = 'ra' + 'ketin' (pêşgir = 'ra')",
"type": "string"
},
"valahî": {
"label": "Valahî",
"example": "erê (bo lêkerên hevedudanî: bang_kirin, jê_birin)",
"type": "string"
},
"niha": {
"label": "rehê dema niha",
"type": "string",
"example": " 'kev' bo lêkerên 'ketin', 'rakatin', 'lê_ketin'",
"required": true
},
"niha2": {
"label": "rehê dema niha 2"
},
"niha3": {
"label": "rehê dema niha 3"
},
"borî": {
"label": "rehê dema borî",
"example": " 'ket' bo lêkerên 'ketin', 'rakatin', 'lê_ketin'",
"required": true
},
"borî2": {
"label": "rehê dema borî 2"
}
}
}
</templatedata>
<includeonly>
[[Kategorî:Şablonên lêkeran ({{navê zimanî|ku}})| ]]
</includeonly>
p2xbtx9sp5qpsdclwcmj2h06urgfkh6
6237495
6237494
2026-06-12T01:57:37Z
Ghybu
1393
/* Mînak */
6237495
wikitext
text/x-wiki
{{Lua bikartîne|Modul:ku-tewandin}}
{{Lua bikartîne|Modul:ku-tewandin/tablo}}
{{TemplateStyles|Şablon:ku-tewandin/style.css}}
== Bikaranîn ==
<syntaxhighlight lang="wikitext">
→ Lêkerên xwerû:
{{ku-tewandin|lêker|form=gerguhêz/negerguhêz|niha=|niha2=|niha3=|borî=|borî2=}}
→ Lêkerên pêkhatî:
{{ku-tewandin|lêker|form=gerguhêz/negerguhêz|pêşgir=|paşgir=|niha=|niha2=|niha3=|borî=|borî2=}}
→ Lêkerên hevedudanî:
{{ku-tewandin|lêker|form=gerguhêz/negerguhêz|pêşgir=|paşgir=|valahî=erê|niha=|niha2=|niha3=|borî=|borî2=}}
</syntaxhighlight>
=== Parametre ===
* {{param2|form}} "<u>gerguhêz</u>" an "<u>negerguhêz</u>"
* {{param2|niha}} rehê dema niha ('''mînak''': {{param2|niha|kev}} bo lêkerên ''ketin'', ''raketin'', ''lê_ketin'', ...)
* {{param2|borî}} rehê dema borî ('''mînak''': {{param2|borî|ket}} bo lêkerên ''ketin'', ''raketin'', ''lê_ketin'', ...)
* {{param2|pêşgir}} bo lêkerên [[pêkhatî]] û [[hevedudanî]] ('''mînak''': ''{{reng2|blue|ra}}kirin'' {{param2|pêşgir|ra}}, ''{{reng2|blue|bang}} kirin'' {{param2|pêşgir|bang}}, ''{{reng2|blue|lê}} gerîn'' ({{param2|pêşgir|jê}}, ...)
** {{param2|valahî|erê}} bo lêkerên [[hevedudanî]] ('''mînak''': ''{{reng2|blue|bang}} kirin'', ''{{reng2|blue|lê}} gerîn'', ...)
* {{param2|paşgir}} bo lêkerên [[hevedudanî]] ('''mînak''': ''[[dan dû]]'', ''[[girtin ser xwe]]'')
;Parametre bo pêşgirên {{nobold|(''bi-/di-/na-/ne-/me-'')}} ku ne standard in
* {{param2|bi}} {{param2|nihaBi}} {{param2|borîBi}}
* {{param2|di}} {{param2|nihaDi}} {{param2|borîDi}}
* {{param2|ne}} {{param2|nihaNe}} {{param2|borîNe}}
* {{param2|me}}
* {{param2|na}}
: → ''Mînak ([[Tewandin:emilîn]])'':
:<syntaxhighlight lang="wikitext" inline>
{{ku-tewandin|emilîn|form=negerguhêz|niha=emil|borî=emilî|bi=bi|na=na|ne=ne}}
</syntaxhighlight>
;Parametreyên din:
: {{param2|niha2}}, {{param2|niha3}} bo tewandinên din.
: {{param2|borî2}} bo tewandinên din.
== Mînak ==
;Lêkerên gerguhêz:
* [[Tewandin:kirin]] → Lêkera xwerû: <code><nowiki>{{</nowiki>'''ku-tewandin'''|kirin|'''{{reng2|olive|form}}'''=gerguhêz|'''{{reng2|olive|niha}}'''=k|'''{{reng2|olive|borî}}'''=kir}}</code>
* [[Tewandin:rakirin]] → Lêkera pêkhatî: ''{{reng2|blue|ra}}'' + ''kirin'' → <code><nowiki>{{</nowiki>'''ku-tewandin'''|{{reng2|blue|ra}}kirin|'''{{reng2|olive|form}}'''=gerguhêz|'''{{reng2|olive|niha}}'''=k|'''{{reng2|olive|borî}}'''=kir|'''{{reng2|olive|pêşgir}}'''={{reng2|blue|ra}}}}</code>
* [[Tewandin:pîroz kirin]] → Lêkera hevedudanî: ''{{reng2|blue|bang}}'' + ''kirin'' → <code><nowiki>{{</nowiki>'''ku-tewandin'''|{{reng2|blue|bang}} kirin|'''{{reng2|olive|form}}'''=gerguhêz|'''{{reng2|olive|niha}}'''=k|'''{{reng2|olive|borî}}'''=kir|'''{{reng2|olive|pêşgir}}'''={{reng2|blue|bang}}|'''{{reng2|olive|valahî}}'''={{reng2|brown|erê}}}}</code>
*: <code>|'''{{reng2|olive|valahî}}'''={{reng2|brown|erê}}</code>: "{{reng2|blue|bang}}" û "kirin" du parçe ne (valahiyek di navbera her du da heye)
* [[Tewandin:gotin]] → Lêkera xwerû: <code><nowiki>{{</nowiki>'''ku-tewandin'''|gotin|'''{{reng2|olive|form}}'''=gerguhêz|'''{{reng2|olive|niha}}'''=bêj|'''{{reng2|olive|niha2}}'''=vê|'''{{reng2|olive|niha3}}'''=wê|'''{{reng2|olive|borî}}'''=got}}</code>
;Lêkerên negerguhêz:
* [[Tewandin:ketin ]] → Lêkera xwerû: <code><nowiki>{{</nowiki>'''ku-tewandin'''|ketin|'''{{reng2|olive|form}}'''=negerguhêz|'''{{reng2|olive|niha}}'''=kev|'''{{reng2|olive|borî}}'''=ket}}</code>
* [[Tewandin:daketin]] → Lêkera pêkhatî: ''{{reng2|blue|da}}'' + ''ketin'' → <code><nowiki>{{</nowiki>'''ku-tewandin'''|{{reng2|blue|ra}}ketin|'''{{reng2|olive|form}}'''=negerguhêz|'''{{reng2|olive|niha}}'''=kev|'''{{reng2|olive|borî}}'''=ket|'''{{reng2|olive|pêşgir}}'''={{reng2|blue|da}}}}</code>
* [[Tewandin:lê gerîn]] → Lêkera hevedudanî: ''{{reng2|blue|lê}}'' + ''gerîn'' → <code><nowiki>{{</nowiki>'''ku-tewandin'''|{{reng2|blue|lê}} gerîn|'''{{reng2|olive|form}}'''=gerguhêz|'''{{reng2|olive|niha}}'''=b|'''{{reng2|olive|borî}}'''=bir|'''{{reng2|olive|pêşgir}}'''={{reng2|blue|jê}}|'''{{reng2|olive|valahî}}'''={{reng2|brown|erê}}}}</code>
*: <code>|'''{{reng2|olive|valahî}}'''={{reng2|brown|erê}}</code>: "{{reng2|blue|lê}}" û "gerîn" du parçe ne (valahiyek di navbera her du da heye)
* [[Tewandin:kenîn]] → <code><nowiki>{{</nowiki>'''ku-tewandin'''|kenîn|'''{{reng2|olive|form}}'''=negerguhêz|'''{{reng2|olive|niha}}'''=ken|'''{{reng2|olive|borî}}'''=kenî|'''{{reng2|olive|borî2}}'''=keniya}}</code>
;Lêkerên dijrêzik:
* <s>[[Modul:ku-tewandin/nestandard]]</s>
;Binêrin:
* [[:Kategorî:Tewandin:lêker ({{navê zimanî|ku}})]]
== Mijarên têkildar ==
* [[Modul:ku-tewandin]]
** [[Modul:ku-tewandin/tablo]]
** <s>[[Modul:ku-tewandin/nestandard]]</s>
* {{ş|ku-tewîn-lk}}
* {{ş|ku-tewîn-lk-niha}}
;Çend çavkanî
* [http://docs.google.com/viewer?a=v&q=cache:Ys6yRjKm2SEJ:www.kurdigeh.com/rwdx/sitepdf/ibrahimseydo-demenkurdi-ZEND.pdf+Di+kurmanciy%C3%AA+de+s%C3%AEstema+deman&hl=fr&gl=fr&pid=bl&srcid=ADGEEShCfRxplfM7NxKmaVEW50KjPrsOEZ31JXlN12Q2mdRo95TnGsn5B7YtsYTxgyTy4-hLVmuiiyvlbKOYB_4O1e1FbcA6SSBnr-L3Iu2jWzSWvEKohNp1rQjgiAIg3ll-BsbcOybD&sig=AHIEtbQOd1wFWTX8Qh4JFFwtbqg2itgruQ Di kurmanciyê de sîstema deman] (ku)
* [http://docs.google.com/viewer?a=v&q=cache:LkERbEhkNSMJ:www.institutkurde.org/publications/kurmanci/telechargement/ku12.pdf+Raboriya+d%C3%BBr+a+bilaniy%C3%AA&hl=fr&gl=fr&pid=bl&srcid=ADGEESgkAOze54EwkWmhYNoaQp7FDnv0QHQrj2CNgHM8TYLD2CSi8sVmWkEm-q0C1dnU5x9Ya_rtJAjbSu_oeahBnlzb1IjRY7vUMpSUkKMosTSDFOyAO7GAIZMTqXLXHOZ67AQx5RN8&sig=AHIEtbQ_4vMTwA37fjran9QEuVo3LX_3Mw KurmancÎ (kovar), hejmar 12, 1993] (ku)
* [http://www.institutkurde.org/en/conferences/kurdish_studies_irbil_2006/Ibrahim+Seydo+AYDOGAN.html Identification des temps verbaux dans les grammaires kurdes] (fr)
* Binêrin jî: [http://www.mesopotamia-ita.com/leker/Minak_.htm#a17 ''KÊŞANA LÊKERAN'' (Brahîm Xelîl TAŞ)] (bo navên demên lêkeran + tewandinên çend lêkeran)
* ''Rêzimanên kurdî û termînolojiya wan ya zimannasiyê'', Îbrahîm Seydo AYDOGAN, INALCO / CNU 15
* [https://books.openedition.org/ifeagd/2229?lang=fr ''Le médiatif en kurde-kurmandji résurgence ou renouveau du système verbal ?''], Ibrahim Seydo Aydoğan (ji bo dema "Çîrokiya boriya dûdar", bnr. ''[[:w:en:Inferential mood|Inferential mood]]'') (fr)
== TemplateData ==
<templatedata>
{
"description": "Şablona tewandinên lêkerên kurmancî",
"params": {
"1": {
"label": "Navê lêkerê",
"type": "string",
"required": true
},
"form": {
"label": "Cure",
"example": "\"gerguhêz\" an jî \"negerguhêz\"",
"type": "string",
"required": true
},
"pêşgir": {
"label": "Pêşgir",
"example": "bo lêkerên pêkhatî û hevedudanî: raketin = 'ra' + 'ketin' (pêşgir = 'ra')",
"type": "string"
},
"valahî": {
"label": "Valahî",
"example": "erê (bo lêkerên hevedudanî: bang_kirin, jê_birin)",
"type": "string"
},
"niha": {
"label": "rehê dema niha",
"type": "string",
"example": " 'kev' bo lêkerên 'ketin', 'rakatin', 'lê_ketin'",
"required": true
},
"niha2": {
"label": "rehê dema niha 2"
},
"niha3": {
"label": "rehê dema niha 3"
},
"borî": {
"label": "rehê dema borî",
"example": " 'ket' bo lêkerên 'ketin', 'rakatin', 'lê_ketin'",
"required": true
},
"borî2": {
"label": "rehê dema borî 2"
}
}
}
</templatedata>
<includeonly>
[[Kategorî:Şablonên lêkeran ({{navê zimanî|ku}})| ]]
</includeonly>
d4s5mi9fc63603m3ahl6c8ro54p7flw
6237508
6237495
2026-06-12T03:52:09Z
Ghybu
1393
/* Parametre */
6237508
wikitext
text/x-wiki
{{Lua bikartîne|Modul:ku-tewandin}}
{{Lua bikartîne|Modul:ku-tewandin/tablo}}
{{TemplateStyles|Şablon:ku-tewandin/style.css}}
== Bikaranîn ==
<syntaxhighlight lang="wikitext">
→ Lêkerên xwerû:
{{ku-tewandin|lêker|form=gerguhêz/negerguhêz|niha=|niha2=|niha3=|borî=|borî2=}}
→ Lêkerên pêkhatî:
{{ku-tewandin|lêker|form=gerguhêz/negerguhêz|pêşgir=|paşgir=|niha=|niha2=|niha3=|borî=|borî2=}}
→ Lêkerên hevedudanî:
{{ku-tewandin|lêker|form=gerguhêz/negerguhêz|pêşgir=|paşgir=|valahî=erê|niha=|niha2=|niha3=|borî=|borî2=}}
</syntaxhighlight>
=== Parametre ===
* {{param2|form}} "<u>gerguhêz</u>" an "<u>negerguhêz</u>"
* {{param2|niha}} rehê dema niha ('''mînak''': {{param2|niha|kev}} bo lêkerên ''ketin'', ''raketin'', ''lê_ketin'', ...)
* {{param2|borî}} rehê dema borî ('''mînak''': {{param2|borî|ket}} bo lêkerên ''ketin'', ''raketin'', ''lê_ketin'', ...)
* {{param2|pêşgir}} bo lêkerên [[pêkhatî]] û [[hevedudanî]] ('''mînak''': ''{{reng2|blue|ra}}kirin'' {{param2|pêşgir|ra}}, ''{{reng2|blue|bang}} kirin'' {{param2|pêşgir|bang}}, ''{{reng2|blue|lê}} gerîn'' ({{param2|pêşgir|jê}}, ...)
** {{param2|valahî|erê}} bo lêkerên [[hevedudanî]] ('''mînak''': ''{{reng2|blue|bang}} kirin'', ''{{reng2|blue|lê}} gerîn'', ...)
* {{param2|paşgir}} bo lêkerên [[hevedudanî]] ('''mînak''': ''[[dan dû]]'', ''[[girtin ser xwe]]'')
;Parametre bo pêşgirên {{nobold|(''bi-/di-/na-/ne-/me-'')}} ku ne standard in
* {{param2|bi}} {{param2|nihaBi}} {{param2|borîBi}}
* {{param2|di}} {{param2|nihaDi}} {{param2|borîDi}}
* {{param2|ne}} {{param2|nihaNe}} {{param2|borîNe}}
* {{param2|me}}
* {{param2|na}}
: → ''Mînak ([[Tewandin:emilîn]])'':
:<syntaxhighlight lang="wikitext" inline>
{{ku-tewandin|emilîn|form=negerguhêz|niha=emil|borî=emilî|bi=bi|na=na|ne=ne}}
</syntaxhighlight>
;Parametreyên din:
: {{param2|niha2}}, {{param2|niha3}} bo tewandinên din.
: {{param2|borî2}}, {{param2|borî3}} bo tewandinên din.
: {{param2|devok}} "rojhilatî"
== Mînak ==
;Lêkerên gerguhêz:
* [[Tewandin:kirin]] → Lêkera xwerû: <code><nowiki>{{</nowiki>'''ku-tewandin'''|kirin|'''{{reng2|olive|form}}'''=gerguhêz|'''{{reng2|olive|niha}}'''=k|'''{{reng2|olive|borî}}'''=kir}}</code>
* [[Tewandin:rakirin]] → Lêkera pêkhatî: ''{{reng2|blue|ra}}'' + ''kirin'' → <code><nowiki>{{</nowiki>'''ku-tewandin'''|{{reng2|blue|ra}}kirin|'''{{reng2|olive|form}}'''=gerguhêz|'''{{reng2|olive|niha}}'''=k|'''{{reng2|olive|borî}}'''=kir|'''{{reng2|olive|pêşgir}}'''={{reng2|blue|ra}}}}</code>
* [[Tewandin:pîroz kirin]] → Lêkera hevedudanî: ''{{reng2|blue|bang}}'' + ''kirin'' → <code><nowiki>{{</nowiki>'''ku-tewandin'''|{{reng2|blue|bang}} kirin|'''{{reng2|olive|form}}'''=gerguhêz|'''{{reng2|olive|niha}}'''=k|'''{{reng2|olive|borî}}'''=kir|'''{{reng2|olive|pêşgir}}'''={{reng2|blue|bang}}|'''{{reng2|olive|valahî}}'''={{reng2|brown|erê}}}}</code>
*: <code>|'''{{reng2|olive|valahî}}'''={{reng2|brown|erê}}</code>: "{{reng2|blue|bang}}" û "kirin" du parçe ne (valahiyek di navbera her du da heye)
* [[Tewandin:gotin]] → Lêkera xwerû: <code><nowiki>{{</nowiki>'''ku-tewandin'''|gotin|'''{{reng2|olive|form}}'''=gerguhêz|'''{{reng2|olive|niha}}'''=bêj|'''{{reng2|olive|niha2}}'''=vê|'''{{reng2|olive|niha3}}'''=wê|'''{{reng2|olive|borî}}'''=got}}</code>
;Lêkerên negerguhêz:
* [[Tewandin:ketin ]] → Lêkera xwerû: <code><nowiki>{{</nowiki>'''ku-tewandin'''|ketin|'''{{reng2|olive|form}}'''=negerguhêz|'''{{reng2|olive|niha}}'''=kev|'''{{reng2|olive|borî}}'''=ket}}</code>
* [[Tewandin:daketin]] → Lêkera pêkhatî: ''{{reng2|blue|da}}'' + ''ketin'' → <code><nowiki>{{</nowiki>'''ku-tewandin'''|{{reng2|blue|ra}}ketin|'''{{reng2|olive|form}}'''=negerguhêz|'''{{reng2|olive|niha}}'''=kev|'''{{reng2|olive|borî}}'''=ket|'''{{reng2|olive|pêşgir}}'''={{reng2|blue|da}}}}</code>
* [[Tewandin:lê gerîn]] → Lêkera hevedudanî: ''{{reng2|blue|lê}}'' + ''gerîn'' → <code><nowiki>{{</nowiki>'''ku-tewandin'''|{{reng2|blue|lê}} gerîn|'''{{reng2|olive|form}}'''=gerguhêz|'''{{reng2|olive|niha}}'''=b|'''{{reng2|olive|borî}}'''=bir|'''{{reng2|olive|pêşgir}}'''={{reng2|blue|jê}}|'''{{reng2|olive|valahî}}'''={{reng2|brown|erê}}}}</code>
*: <code>|'''{{reng2|olive|valahî}}'''={{reng2|brown|erê}}</code>: "{{reng2|blue|lê}}" û "gerîn" du parçe ne (valahiyek di navbera her du da heye)
* [[Tewandin:kenîn]] → <code><nowiki>{{</nowiki>'''ku-tewandin'''|kenîn|'''{{reng2|olive|form}}'''=negerguhêz|'''{{reng2|olive|niha}}'''=ken|'''{{reng2|olive|borî}}'''=kenî|'''{{reng2|olive|borî2}}'''=keniya}}</code>
;Lêkerên dijrêzik:
* <s>[[Modul:ku-tewandin/nestandard]]</s>
;Binêrin:
* [[:Kategorî:Tewandin:lêker ({{navê zimanî|ku}})]]
== Mijarên têkildar ==
* [[Modul:ku-tewandin]]
** [[Modul:ku-tewandin/tablo]]
** <s>[[Modul:ku-tewandin/nestandard]]</s>
* {{ş|ku-tewîn-lk}}
* {{ş|ku-tewîn-lk-niha}}
;Çend çavkanî
* [http://docs.google.com/viewer?a=v&q=cache:Ys6yRjKm2SEJ:www.kurdigeh.com/rwdx/sitepdf/ibrahimseydo-demenkurdi-ZEND.pdf+Di+kurmanciy%C3%AA+de+s%C3%AEstema+deman&hl=fr&gl=fr&pid=bl&srcid=ADGEEShCfRxplfM7NxKmaVEW50KjPrsOEZ31JXlN12Q2mdRo95TnGsn5B7YtsYTxgyTy4-hLVmuiiyvlbKOYB_4O1e1FbcA6SSBnr-L3Iu2jWzSWvEKohNp1rQjgiAIg3ll-BsbcOybD&sig=AHIEtbQOd1wFWTX8Qh4JFFwtbqg2itgruQ Di kurmanciyê de sîstema deman] (ku)
* [http://docs.google.com/viewer?a=v&q=cache:LkERbEhkNSMJ:www.institutkurde.org/publications/kurmanci/telechargement/ku12.pdf+Raboriya+d%C3%BBr+a+bilaniy%C3%AA&hl=fr&gl=fr&pid=bl&srcid=ADGEESgkAOze54EwkWmhYNoaQp7FDnv0QHQrj2CNgHM8TYLD2CSi8sVmWkEm-q0C1dnU5x9Ya_rtJAjbSu_oeahBnlzb1IjRY7vUMpSUkKMosTSDFOyAO7GAIZMTqXLXHOZ67AQx5RN8&sig=AHIEtbQ_4vMTwA37fjran9QEuVo3LX_3Mw KurmancÎ (kovar), hejmar 12, 1993] (ku)
* [http://www.institutkurde.org/en/conferences/kurdish_studies_irbil_2006/Ibrahim+Seydo+AYDOGAN.html Identification des temps verbaux dans les grammaires kurdes] (fr)
* Binêrin jî: [http://www.mesopotamia-ita.com/leker/Minak_.htm#a17 ''KÊŞANA LÊKERAN'' (Brahîm Xelîl TAŞ)] (bo navên demên lêkeran + tewandinên çend lêkeran)
* ''Rêzimanên kurdî û termînolojiya wan ya zimannasiyê'', Îbrahîm Seydo AYDOGAN, INALCO / CNU 15
* [https://books.openedition.org/ifeagd/2229?lang=fr ''Le médiatif en kurde-kurmandji résurgence ou renouveau du système verbal ?''], Ibrahim Seydo Aydoğan (ji bo dema "Çîrokiya boriya dûdar", bnr. ''[[:w:en:Inferential mood|Inferential mood]]'') (fr)
== TemplateData ==
<templatedata>
{
"description": "Şablona tewandinên lêkerên kurmancî",
"params": {
"1": {
"label": "Navê lêkerê",
"type": "string",
"required": true
},
"form": {
"label": "Cure",
"example": "\"gerguhêz\" an jî \"negerguhêz\"",
"type": "string",
"required": true
},
"pêşgir": {
"label": "Pêşgir",
"example": "bo lêkerên pêkhatî û hevedudanî: raketin = 'ra' + 'ketin' (pêşgir = 'ra')",
"type": "string"
},
"valahî": {
"label": "Valahî",
"example": "erê (bo lêkerên hevedudanî: bang_kirin, jê_birin)",
"type": "string"
},
"niha": {
"label": "rehê dema niha",
"type": "string",
"example": " 'kev' bo lêkerên 'ketin', 'rakatin', 'lê_ketin'",
"required": true
},
"niha2": {
"label": "rehê dema niha 2"
},
"niha3": {
"label": "rehê dema niha 3"
},
"borî": {
"label": "rehê dema borî",
"example": " 'ket' bo lêkerên 'ketin', 'rakatin', 'lê_ketin'",
"required": true
},
"borî2": {
"label": "rehê dema borî 2"
}
}
}
</templatedata>
<includeonly>
[[Kategorî:Şablonên lêkeran ({{navê zimanî|ku}})| ]]
</includeonly>
c4wg15sp2g6ajyuga7n5ayyjarpyej3
Şablon:ku-tewîn-lk/belge
10
612382
6237496
6236927
2026-06-12T01:58:38Z
Ghybu
1393
/* Bikaranîn */
6237496
wikitext
text/x-wiki
{{Lua bikartîne|Modul:ku-tewandin|Modul:ku-tewandin/tabloGotar}}
{{TemplateStyles|Şablon:ku-tewîn/style.css}}
{{agahdarî}} {{bilezkirî}}
== Bikaranîn ==
<syntaxhighlight lang="wikitext">
→ Lêkerên xwerû:
{{ku-tewîn-lk|lêker|form=gerguhêz/negerguhêz|niha=|niha2=|niha3=|borî=|borî2=}}
→ Lêkerên pêkhatî:
{{ku-tewîn-lk|lêker|form=gerguhêz/negerguhêz|pêşgir=|paşgir=|niha=|niha2=|niha3=|borî=|borî2=}}
→ Lêkerên hevedudanî:
{{ku-tewîn-lk|lêker|form=gerguhêz/negerguhêz|pêşgir=|paşgir=|valahî=erê|niha=|niha2=|niha3=|borî=|borî2=}}
</syntaxhighlight>
=== Parametre ===
* {{param2|form}} "<u>gerguhêz</u>" an "<u>negerguhêz</u>"
* {{param2|niha}} rehê dema niha ('''mînak''': {{param2|niha|kev}} bo lêkerên ''ketin'', ''raketin'', ''lê_ketin'', ...)
* {{param2|borî}} rehê dema borî ('''mînak''': {{param2|borî|ket}} bo lêkerên ''ketin'', ''raketin'', ''lê_ketin'', ...)
* {{param2|pêşgir}} bo lêkerên [[pêkhatî]] û [[hevedudanî]] ('''mînak''': ''{{reng2|blue|ra}}kirin'' {{param2|pêşgir|ra}}, ''{{reng2|blue|bang}} kirin'' {{param2|pêşgir|bang}}, ''{{reng2|blue|lê}} gerîn'' ({{param2|pêşgir|jê}}, ...)
** {{param2|valahî|erê}} bo lêkerên [[hevedudanî]] ('''mînak''': ''{{reng2|blue|bang}} kirin'', ''{{reng2|blue|lê}} gerîn'', ...)
* {{param2|paşgir}} bo lêkerên [[hevedudanî]] ('''mînak''': ''[[dan dû]]'', ''[[girtin ser xwe]]'')
;Parametre bo pêşgirên {{nobold|(''bi-/di-/na-/ne-/me-'')}} ku ne standard in
* {{param2|bi}} {{param2|nihaBi}} {{param2|borîBi}}
* {{param2|di}} {{param2|nihaDi}} {{param2|borîDi}}
* {{param2|ne}} {{param2|nihaNe}} {{param2|borîNe}}
* {{param2|me}}
* {{param2|na}}
: → ''Mînak ([[Tewandin:emilîn]])'':
:<syntaxhighlight lang="wikitext" inline>
{{ku-tewîn-lk|emilîn|form=negerguhêz|niha=emil|borî=emilî|bi=bi|na=na|ne=ne}}
</syntaxhighlight>
== Mînak ==
:→ [[Şablon:ku-tewandin#Mînak]] (şûnda <nowiki>{{</nowiki>'''ku-tewandin'''| → <nowiki>{{</nowiki>'''ku-tewîn-lk'''| binivîsin)
* Lêkera pêkhatî ({{g|ku|raketin}} = {{reng2|blue|ra}} + ketin):
:<syntaxhighlight lang="wikitext" inline>
{{ku-tewîn-lk|raketin|form=negerguhêz|pêşgir=ra|niha=kev|borî=ket}}
</syntaxhighlight>
<div style="float:left">
{{ku-tewîn-lk|raketin|form=negerguhêz|pêşgir=ra|niha=kev|borî=ket}}
</div>
{{bend}}
== Binêre ==
* {{şl|ku-tewandin}}
* {{şl|ku-tewîn-reh}}
* {{şl|tewandin}}
* {{şl|ku-tewîn-nav}}, {{şl|ku-tewîn-navForm}}
* {{şl|ku-tewîn-rd}}
* [[:Kategorî:Tewandin:lêker ({{navê zimanî|ku}})]]
== TemplateData ==
<templatedata>
{
"description": "Şablona tewandinên lêkerên kurmancî",
"params": {
"1": {
"label": "Navê lêkerê",
"type": "string",
"required": true,
"autovalue": "{{subst:PAGENAME}}"
},
"form": {
"label": "Cure",
"example": "\"gerguhêz\" an jî \"negerguhêz\"",
"type": "string",
"required": true,
"suggestedvalues": [
"gerguhêz",
"negerguhêz"
]
},
"pêşgir": {
"label": "Pêşgir",
"example": "bo lêkerên pêkhatî û hevedudanî: raketin = 'ra' + 'ketin' (pêşgir = 'ra')",
"type": "string"
},
"valahî": {
"label": "Valahî",
"example": "erê (bo lêkerên hevedudanî: bang_kirin, jê_birin)",
"type": "string"
},
"niha": {
"label": "rehê dema niha",
"type": "string",
"example": " 'kev' bo lêkerên 'ketin', 'rakatin', 'lê_ketin'",
"required": true
},
"niha2": {
"label": "rehê dema niha 2"
},
"niha3": {
"label": "rehê dema niha 3"
},
"borî": {
"label": "rehê dema borî",
"example": " 'ket' bo lêkerên 'ketin', 'rakatin', 'lê_ketin'",
"required": true
},
"borî2": {
"label": "rehê dema borî 2"
}
}
}
</templatedata>
<includeonly>
[[Kategorî:Şablonên lêkeran ({{navê zimanî|ku}})| ]]
</includeonly>
nw2eqkoqh5ay4xa8kwgdhimwpmzpa5w
6237509
6237496
2026-06-12T03:53:18Z
Ghybu
1393
/* Parametre */
6237509
wikitext
text/x-wiki
{{Lua bikartîne|Modul:ku-tewandin|Modul:ku-tewandin/tabloGotar}}
{{TemplateStyles|Şablon:ku-tewîn/style.css}}
{{agahdarî}} {{bilezkirî}}
== Bikaranîn ==
<syntaxhighlight lang="wikitext">
→ Lêkerên xwerû:
{{ku-tewîn-lk|lêker|form=gerguhêz/negerguhêz|niha=|niha2=|niha3=|borî=|borî2=}}
→ Lêkerên pêkhatî:
{{ku-tewîn-lk|lêker|form=gerguhêz/negerguhêz|pêşgir=|paşgir=|niha=|niha2=|niha3=|borî=|borî2=}}
→ Lêkerên hevedudanî:
{{ku-tewîn-lk|lêker|form=gerguhêz/negerguhêz|pêşgir=|paşgir=|valahî=erê|niha=|niha2=|niha3=|borî=|borî2=}}
</syntaxhighlight>
=== Parametre ===
* {{param2|form}} "<u>gerguhêz</u>" an "<u>negerguhêz</u>"
* {{param2|niha}} rehê dema niha ('''mînak''': {{param2|niha|kev}} bo lêkerên ''ketin'', ''raketin'', ''lê_ketin'', ...)
* {{param2|borî}} rehê dema borî ('''mînak''': {{param2|borî|ket}} bo lêkerên ''ketin'', ''raketin'', ''lê_ketin'', ...)
* {{param2|pêşgir}} bo lêkerên [[pêkhatî]] û [[hevedudanî]] ('''mînak''': ''{{reng2|blue|ra}}kirin'' {{param2|pêşgir|ra}}, ''{{reng2|blue|bang}} kirin'' {{param2|pêşgir|bang}}, ''{{reng2|blue|lê}} gerîn'' ({{param2|pêşgir|jê}}, ...)
** {{param2|valahî|erê}} bo lêkerên [[hevedudanî]] ('''mînak''': ''{{reng2|blue|bang}} kirin'', ''{{reng2|blue|lê}} gerîn'', ...)
* {{param2|paşgir}} bo lêkerên [[hevedudanî]] ('''mînak''': ''[[dan dû]]'', ''[[girtin ser xwe]]'')
: {{param2|devok}} "rojhilatî"
;Parametre bo pêşgirên {{nobold|(''bi-/di-/na-/ne-/me-'')}} ku ne standard in
* {{param2|bi}} {{param2|nihaBi}} {{param2|borîBi}}
* {{param2|di}} {{param2|nihaDi}} {{param2|borîDi}}
* {{param2|ne}} {{param2|nihaNe}} {{param2|borîNe}}
* {{param2|me}}
* {{param2|na}}
: → ''Mînak ([[Tewandin:emilîn]])'':
:<syntaxhighlight lang="wikitext" inline>
{{ku-tewîn-lk|emilîn|form=negerguhêz|niha=emil|borî=emilî|bi=bi|na=na|ne=ne}}
</syntaxhighlight>
== Mînak ==
:→ [[Şablon:ku-tewandin#Mînak]] (şûnda <nowiki>{{</nowiki>'''ku-tewandin'''| → <nowiki>{{</nowiki>'''ku-tewîn-lk'''| binivîsin)
* Lêkera pêkhatî ({{g|ku|raketin}} = {{reng2|blue|ra}} + ketin):
:<syntaxhighlight lang="wikitext" inline>
{{ku-tewîn-lk|raketin|form=negerguhêz|pêşgir=ra|niha=kev|borî=ket}}
</syntaxhighlight>
<div style="float:left">
{{ku-tewîn-lk|raketin|form=negerguhêz|pêşgir=ra|niha=kev|borî=ket}}
</div>
{{bend}}
== Binêre ==
* {{şl|ku-tewandin}}
* {{şl|ku-tewîn-reh}}
* {{şl|tewandin}}
* {{şl|ku-tewîn-nav}}, {{şl|ku-tewîn-navForm}}
* {{şl|ku-tewîn-rd}}
* [[:Kategorî:Tewandin:lêker ({{navê zimanî|ku}})]]
== TemplateData ==
<templatedata>
{
"description": "Şablona tewandinên lêkerên kurmancî",
"params": {
"1": {
"label": "Navê lêkerê",
"type": "string",
"required": true,
"autovalue": "{{subst:PAGENAME}}"
},
"form": {
"label": "Cure",
"example": "\"gerguhêz\" an jî \"negerguhêz\"",
"type": "string",
"required": true,
"suggestedvalues": [
"gerguhêz",
"negerguhêz"
]
},
"pêşgir": {
"label": "Pêşgir",
"example": "bo lêkerên pêkhatî û hevedudanî: raketin = 'ra' + 'ketin' (pêşgir = 'ra')",
"type": "string"
},
"valahî": {
"label": "Valahî",
"example": "erê (bo lêkerên hevedudanî: bang_kirin, jê_birin)",
"type": "string"
},
"niha": {
"label": "rehê dema niha",
"type": "string",
"example": " 'kev' bo lêkerên 'ketin', 'rakatin', 'lê_ketin'",
"required": true
},
"niha2": {
"label": "rehê dema niha 2"
},
"niha3": {
"label": "rehê dema niha 3"
},
"borî": {
"label": "rehê dema borî",
"example": " 'ket' bo lêkerên 'ketin', 'rakatin', 'lê_ketin'",
"required": true
},
"borî2": {
"label": "rehê dema borî 2"
}
}
}
</templatedata>
<includeonly>
[[Kategorî:Şablonên lêkeran ({{navê zimanî|ku}})| ]]
</includeonly>
83b9g4ris5xqlcl7at6pyipgf3m30f3
Modul:ku-tewandin
828
628614
6237502
6237384
2026-06-12T02:54:18Z
Ghybu
1393
+
6237502
Scribunto
text/plain
-- Modula tewandina lêkerên kurmancî
local export = {}
-- Load irregular forms table
-- local irreg = require('Module:ku-tewandin/nestandard')
local langKu = require("Modul:languages").getByCode("ku")
local link = require('Module:links').language_link
local shallowCopy = require("Module:table/shallowCopy")
local deepCopy = require("Module:table/deepCopy")
local gsub = mw.ustring.gsub
local find = mw.ustring.find
-- =============================================================================
-- Pronouns in Kurmanji
-- =============================================================================
export.order = {"s1", "s2", "s3", "p1", "p2", "p3"}
export.pronouns = {
s1 = "ez", p1 = "em",
s2 = "tu", p2 = "hûn",
s3 = "ew", p3 = "ew"
}
export.obliquePronouns = {
s1 = "min", p1 = "me",
s2 = "te", p2 = "we",
s3 = "wê/wî", p3 = "wan"
}
export.agents = {
s1 = "te, wî, wê, we, wan", p1 = "te, wî, wê, we, wan",
s2 = "min, wî, wê, me, wan", p2 = "min, wî, wê, me, wan",
s3 = "min, te, wî, wê, me, we, wan", p3 = "min, te, wî, wê, me, we, wan"
}
-- Oblique pronoun (green)
export.obliquePronounsGreen = {
s1 = '<span style="color:green">min</span>',
s2 = '<span style="color:green">te</span>',
s3 = '<span style="color:green">wê/wî</span>',
p1 = '<span style="color:green">me</span>',
p2 = '<span style="color:green">we</span>',
p3 = '<span style="color:green">wan</span>'
}
-- ─────────────────────────────────────────────────────────────────────────────
-- 1) This function returns correct subject/agent pronoun, ergativity rule:
-- - Transitive verbs in past tenses → oblique pronoun (green) = agent
-- - All other cases → direct pronoun (no color) = subject
-- 2) Also add the subjunctive prefix "(bila)"
-- ─────────────────────────────────────────────────────────────────────────────
function export.conjPronouns(stemType, mode, isTransitive)
local pronouns = shallowCopy(export.pronouns)
-- Ergativity in kurdish: transitive verbs that are conjugated with the past tense stem are
-- conjugated according to the object, not the subject.
-- Therefore, to have an ergative construction,
-- the verb must be transitive and its stem must be the stem of the past tense.
local isErgative = isTransitive and (stemType == 'past')
-- If it's ergative, we use oblique pronouns: "min", "te", ...
-- If it's not ergative, we use normal pronouns: "ez", "tu", ...
if isErgative then
pronouns = shallowCopy(export.obliquePronounsGreen)
end
-- For the subjunctive mood, we add "(bila)" at the beginning.
if mode == 'subjunctive' then
local subjPrefix = '<span style="color:gray">(bila)</span>'
for _, pers in ipairs(export.order) do
pronouns[pers] = subjPrefix .. ' ' .. pronouns[pers]
end
end
return pronouns
end
-- =============================================================================
-- VERBAL STRUCTURE IN THE INFINITIVE:
-- Verbs in the infinitive appear in three main forms:
-- 1) Simple verb (indivisible light verb):
-- - ex.: "kirin", "çûn", "xwarin", ...
-- 2) Verbs with preverbs (preverb + simple verb):
-- - ex.: "rakirin" (ra- + kirin), "çêkirin" (çê- + kirin), "vexwarin" (ve- + xwarin), ...
-- - Preverb verbs don't use the prefix "bi-" (ez ê rakim , ew ê rake , ...)
-- 3) Compound verbs, construction with non-verbal element (the noun is not attached to the verb):
-- - Left of the simple verb: "hez kirin" ("hez" + "kirin"), "li dar xistin" ("li dar" + "xistin"), ...
-- - Right of the simple verb: "kirin der" ("kirin" + "der"), "girtin ser xwe" ("girtin" + "ser xwe"), ...
-- - Compound verbs use the prefix "bi-" (ez ê hez bi-kim , ew ê hez bi-ke )
-- STRUCTURE: preSimpleVerb + spacing + simpleVerb + postSimpleVerb
-- EX. kirin: preSimpleVerb=''; spacing=false; simpleVerb='kirin'; postSimpleVerb=''
-- rakirin: preSimpleVerb='ra'; spacing=false; simpleVerb='kirin'; postSimpleVerb=''
-- hez kirin: preSimpleVerb='hez'; spacing=true; simpleVerb='kirin'; postSimpleVerb=''
-- pev çûn: preSimpleVerb='pev'; spacing=true; simpleVerb='çûn'; postSimpleVerb=''
-- kirin der: preSimpleVerb=''; spacing=false; simpleVerb='kirin'; postSimpleVerb='der'
-- WARNING: Conjugation can vary depending on the type of verb.
-- For example, in the future tense,the prefix "bi" is used for compound verbs,
-- but not for preverbal verbs, see the function that manages it "tenseRules" table.
-- This table does not yet support the mixed case: a verb composed of a noun and a preverb verb.
-- =============================================================================
function export.verbStruct(isCompoundVerb, preSimpleVerb)
local struct
if (preSimpleVerb and preSimpleVerb ~= '' and not isCompoundVerb) then
struct = 'preverbVerb'
elseif isCompoundVerb then
struct = 'compoundVerb'
else
struct = 'simpleVerb'
end
return struct
end
-- ================================================================
-- INFLECTIONAL ENDINGS
-- Assigns verb inflectional endings (suffixes) to all tenses
-- ================================================================
local getEndings = {}
do
-- ───────────────────────────────────────────────────────────────
-- Ending using present stem
-- ───────────────────────────────────────────────────────────────
getEndings['present'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends = {}
if mw.ustring.match(stem, '[aeêiîouû]$') then
ends['std'] = {s1='m', s2='yî', s3='', p1='n', p2='n', p3='n'}
ends['rojhilatî'] = {s1='m', s2='(y)', s3='t', p1='yn', p2='n', p3='n'}
else
ends['std'] = {s1='im', s2='î', s3='e', p1='in', p2='in', p3='in'}
ends['rojhilatî'] = {s1='im', s2='î', s3='<u>it</u>/ît', p1='în', p2='in', p3='in'}
end
return ends
end
-- ───────────────────────────────────────────────────────────────
-- Ind. preterite + ind. imperfect ending
-- ───────────────────────────────────────────────────────────────
getEndings['past'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends
if mw.ustring.match(stem, '[aeêiouû]$') then
ends = {s1='m', s2='yî', s3='', p1='n', p2='n', p3='n'}
elseif mw.ustring.match(stem, 'î$') then
-- if self.name == 'indImperfect' then
-- -- special indicative ind. imperfect rule
-- ends = {s1='yam', s2='yayî', s3='ya', p1='yan', p2='yan', p3='yan'}
-- end
ends = {s1='m', s2='', s3='', p1='n', p2='n', p3='n'}
else
ends = {s1='im', s2='î', s3='', p1='in', p2='in', p3='in'}
end
return ends
end
-- ───────────────────────────────────────────────────────────────
-- Compound endings with auxiliary "bûn"
-- Inflectional endings are created by taking the different forms of the
-- verb "bûn" (with present stem "-b-" and past stem "-bû-") and
-- adding an "i-" prefix before them: "i-b-im", "i-bû-m", "i-bû-me", "i-bû-ma".
-- This "i-" varies according to the final letter of the verb stem.
-- ───────────────────────────────────────────────────────────────
local function normalize_i(stem)
local prfx_i = "i"
if mw.ustring.match(stem, "ya$") or
mw.ustring.match(stem, "[îû]$") then -- cf. karîn (-karî-)
prfx_i = ""
elseif mw.ustring.match(stem, '[aeêiou]$') then
prfx_i = "yi"
end
return prfx_i
end
getEndings['ibim'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bim", p1 = prfx_i .. "bin",
s2 = prfx_i .. "bî", p2 = prfx_i .. "bin",
s3 = prfx_i .. "be", p3 = prfx_i .. "bin"
}
end
getEndings['ibûm'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bûm", p1 = prfx_i .. "bûn",
s2 = prfx_i .. "bûyî", p2 = prfx_i .. "bûn",
s3 = prfx_i .. "bû", p3 = prfx_i .. "bûn"
}
end
getEndings['ibûme'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bûme", p1 = prfx_i .. "bûne",
s2 = prfx_i .. "bûyiye", p2 = prfx_i .. "bûne",
s3 = prfx_i .. "bûye", p3 = prfx_i .. "bûne"
}
end
getEndings['ibûma'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bûma", p1 = prfx_i .. "bûna",
s2 = prfx_i .. "bûyayî", p2 = prfx_i .. "bûna",
s3 = prfx_i .. "bûya", p3 = prfx_i .. "bûna"
}
end
-- ───────────────────────────────────────────────────────────────
-- Ind. perfect ending.
-- ───────────────────────────────────────────────────────────────
getEndings['ime'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends
if mw.ustring.match(stem, '[aeêiîouû]$') then
ends = {s1="me", s2="yî", s3="ye", p1="ne", p2="ne", p3="ne"}
else
ends = {s1="ime", s2="iyî", s3="iye", p1="ine", p2="ine", p3="ine"}
end
return ends
end
-- ───────────────────────────────────────────────────────────────
-- Subj. Imperfect ending.
-- ───────────────────────────────────────────────────────────────
getEndings['ama'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends
-- The doublet in "-iyan" of verbs in -"în" (gerîn/-geriya-, kenîn/-keniya-, ...),
-- in the conditional and subjunctive moods, a doublet "yaya" appears; it's removed.
-- -yayayî → -yayî; -yaya → -ya
if mw.ustring.match(stem, '(ya)$') then
ends = {s1="ma", s2="yî", s3="", p1="na", p2="na", p3="na"}
elseif mw.ustring.match(stem, '[aeêiîouû]$') then
ends = {s1="ma", s2="yayî", s3="ya", p1="na", p2="na", p3="na"}
else
ends = {s1="ama", s2="ayî", s3="a", p1="ana", p2="ana", p3="ana"}
end
return ends
end
end
-- =============================================================================
-- RULES FOR PREVERBS: "bi-" and "di-"
-- There are two preverbs: "bi-" and "di-". These preverbs can change form
-- depending on the first letters of the verb’s present stem or past stem.
-- =============================================================================
local getPreverb = {}
do
getPreverb['bi'] = function (self, opts)
opts = opts or {}
local stem = opts.stem
local verbStruct = opts.verbStruct
local overridePreverb = opts.overridePreverb
local accent = opts.accent
-- Devoka rojhilatî:
-- @Ferhengvan: Dema bêt bi lêkera alîkar "ê / dê" û bi rehê lêkerê yê
-- dema niha û pêşgirên kesî tê çêkirin. Pêşgira "bi-" li destpêka lêkera
-- serekî nîne: - ez ê / dê xw-im (standard: ez ê/dê bi-xw-im).
if (self.name == 'indFuture' and accent == 'rojhilatî') then
return ''
end
-- Preverb verbs don't use the preverb "bi-": ra-kirin (ez ê rakim), ve-xwarin (ez ê vexwim) , ...
-- But compound verb and simple verbs use it: hez kirin (ez ê hez bi-kim), lê bigirin (ez ê lê bi-girim), ...
if (verbStruct == 'preverbVerb') then
return ''
end
-- If the preverb "bi-" is provided.
if (self.stem == 'present' and overridePreverb.presentBi) then
return overridePreverb.presentBi
elseif (self.stem == 'past' and overridePreverb.pastBi) then
return overridePreverb.pastBi
elseif overridePreverb.sameBi then
return overridePreverb.sameBi
end
-- Modification of the preverbe "bi-" according to the last letter of the stem.
if mw.ustring.match(stem, '^[aeêiîouû]') then
return 'b'
end
return 'bi'
end
getPreverb['di'] = function (self, opts)
opts = opts or {}
local stem = opts.stem
local overridePreverb = opts.overridePreverb
-- If the preverb "di" is provided.
if (self.stem == 'present' and overridePreverb.presentDi) then
return overridePreverb.presentDi
elseif (self.stem == 'past' and overridePreverb.pastDi) then
return overridePreverb.pastDi
elseif overridePreverb.sameDi then
return overridePreverb.sameDi
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 (self, opts)
-- self: reserved for future use
local _ = self -- delete the warning (unused argument)
opts = opts or {}
local stem = opts.stem
local overrideNa = opts.overrideNegPrefix.presentNa
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 (self, opts)
opts = opts or {}
local stem = opts.stem
local tenseName = self.name
local impNegForm = opts.impNegForm -- form "1" or "2" of imp.
local overrideNegPrefix = opts.overrideNegPrefix
local negPrefix = 'ne'
-- Bo neyînî: pêşgira "di-" tenê di nav dema "indImperfect" de tê bikaranîn.
-- ji ber vê yekê 'negPrefix' hertim (?) 'ne' ye ji ber ku dikeve pêş
-- pêşgira "di-": wê/wî ne-di-elimand (elimandin)
if (tenseName == 'indImperfect') then
return '<b>' .. negPrefix .. '</b>'
end
-- Override
if (overrideNegPrefix.impMe or overrideNegPrefix.presentNe
or overrideNegPrefix.pastNe
or overrideNegPrefix.sameNe) then
-- Ovverride imp.
if (tenseName == 'impPresent') then
if (impNegForm == 1 and overrideNegPrefix.impMe) then
return '<b>' .. overrideNegPrefix.impMe .. '</b>'
elseif (impNegForm == 1 and overrideNegPrefix.presentNe and
find(overrideNegPrefix.presentNe, '^n')) then
--For the "me-" form, we replace the "n" with an "m".
return '<b>' .. gsub(overrideNegPrefix.presentNe, '^(.)', 'm') .. '</b>'
elseif (impNegForm == 1 and overrideNegPrefix.sameNe and
find(overrideNegPrefix.sameNe, '^n')) then
--For the "me-" form, we replace the "n" with an "m".
return '<b>' .. gsub(overrideNegPrefix.sameNe, '^(.)', 'm') .. '</b>'
elseif (impNegForm == 2 and overrideNegPrefix.presentNe) then
return '<b>' .. overrideNegPrefix.presentNe .. '</b>'
elseif (impNegForm == 2 and overrideNegPrefix.sameNe) then
return '<b>' .. overrideNegPrefix.sameNe .. '</b>'
end
else
-- For other tenses besides the imperative
if (self.stem == 'present' and overrideNegPrefix.presentNe) then
return '<b>' .. overrideNegPrefix.presentNe .. '</b>'
elseif (self.stem == 'past' and overrideNegPrefix.pastNe) then
return '<b>' .. overrideNegPrefix.pastNe .. '</b>'
elseif overrideNegPrefix.sameNe then
return '<b>' .. overrideNegPrefix.sameNe .. '</b>'
end
end
end
-- There are two forms of construction of the imperative,
-- one with the prefix "me-" (1) and the other (2) 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 overridePreverb = {
-- Preverbs (bi-, di)
presentBi = opts.presentBi or nil,
presentDi = opts.presentDi or nil,
pastBi = opts.pastBi or nil,
pastDi = opts.pastDi or nil,
-- Same preverbs ("past" and "present" stem)
sameBi = opts.sameBi or nil,
sameDi = opts.sameDi or nil,
}
local overrideNegPrefix = {
-- Neg. prefix (na-, ne-)
presentNa = opts.presentNa or nil,
presentNe = opts.presentNe or nil,
pastNe = opts.pastNe or nil,
-- same neg. prefix (for past and present stem)
sameNe = opts.sameNe or nil,
impMe = opts.impMe 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 1
-- Accent/ Devok
local accent = opts.accent or 'std'
-- If "tags='na'", remove links/tags
local tags = opts.tags or 'erê'
-- If addPreverbParticles='na', remove preverb particles (ê/dê) before
-- the conjugated verbs.
local addPreverbParticles = opts.addPreverbParticles or 'erê'
-- We add a space to the left of the "postSimpleVerb" because it shouldn't be attached
-- to the simple verb.
if (postSimpleVerb ~= '' and postSimpleVerb ~=nil) then
postSimpleVerb = ' ' .. postSimpleVerb
end
-- Access to the classification table and retrieval of verb tense parameters
local infoTense = deepCopy(export.tenseRules[tense], 'copy') or false
-- We check that this tense is indeed in table "tenseRules".
if (not infoTense) then
return '<span style="color:red">Unknown tense: ' .. tense ..'</span>'
end
-- We check that one of the two parameters of the stem is given
if (infoTense.stem == 'present' and not presentStem) then
return '<span style="color:red">presentStem parameter required</span>'
elseif (infoTense.stem == 'past' and not pastStem) then
return '<span style="color:red">pasttStem parameter required</span>'
end
-- Choice between the present stem or past stem
local stem = (infoTense.stem == 'present') and presentStem or pastStem
--────────────────────────────
-- Conjugation construction --
-- ───────────────────────────
local preverb = ''
local negPrefix = ''
-- Ruturns the verb type: "simpleVerb" or "preverbVerb" or "compoundVerb"
local verbStruct = export.verbStruct(isCompoundVerb, preSimpleVerb)
if isNegative then
negPrefix = infoTense:negPrefix{stem=stem,
impNegForm=impNegForm,
overrideNegPrefix=overrideNegPrefix}
if infoTense.negPreverb then
preverb = infoTense:negPreverb{stem=stem, verbStruct=verbStruct,
overridePreverb=overridePreverb}
end
else
if infoTense.preverb then
preverb = infoTense:preverb{stem=stem, verbStruct=verbStruct,
overridePreverb=overridePreverb,
accent=accent}
end
end
infoTense.conj = {}
local spacing = isCompoundVerb and ' ' or ''
local endings = infoTense:endings(stem)
-- 'rojhilatî' accent (devok) for present stem
if (infoTense.stem == 'present') then
if (accent == 'rojhilatî') then
endings = endings['rojhilatî']
else
endings = endings['std']
end
end
local preverbParticles = export.getPreverbParticules(infoTense.preverbParticle, infoTense.stem, isTransitive)
local isErgative = isTransitive and (infoTense.stem == 'past')
-- Creating the conjugation table for a given tense
for _, pers in ipairs(export.order) do
local ending
local conjSimbleVerb
local conjVerb
if isErgative then
ending = endings.s3
else
ending = endings[pers]
end
-- Adding space after the preverbal particle, and
-- if "addPreverbParticles='na'": remove preverb particles (ê/dê).
local preverbParticle = ''
if infoTense.preverbParticle and addPreverbParticles ~= 'na' then
preverbParticle = preverbParticles[pers] .. ' '
end
conjSimbleVerb = negPrefix .. preverb .. stem .. ending
-- Adding prefixe and suffixe
conjVerb = preSimpleVerb .. spacing .. conjSimbleVerb .. postSimpleVerb
-- Spelling correction(îy -> iy)
conjVerb = 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,
-- overridePreverb:
presentBi = frame['nihaBi'] or nil,
presentDi = frame['nihaDi'] or nil,
pastBi = frame['borîBi'] or nil,
pastDi = frame['borîDi'] or nil,
sameBi = frame['bi'] or nil,
sameDi = frame['di'] or nil,
-- overrideNegPrefix:
presentNa = frame['na'] or nil,
presentNe = frame['nihaNe'] or nil,
pastNe = frame['borîNe'] or nil,
sameNe = frame['ne'] or nil,
impMe = frame['me'] or nil,
impNegForm = 1,
tags = args['lînk'] or 'erê',
accent = args['devok'] or 'std',
}
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 '',
-- overridePreverb:
presentBi = frame['nihaBi'] or nil,
presentDi = frame['nihaDi'] or nil,
pastBi = frame['borîBi'] or nil,
pastDi = frame['borîDi'] or nil,
sameBi = frame['bi'] or nil,
sameDi = frame['di'] or nil,
-- overrideNegPrefix:
presentNa = frame['na'] or nil,
presentNe = frame['nihaNe'] or nil,
pastNe = frame['borîNe'] or nil,
sameNe = frame['ne'] or nil,
impMe = frame['me'] or nil,
impNegForm = 1,
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
41e6dsdzgpli8b2xxuwp2l6paa69bcn
6237512
6237502
2026-06-12T07:50:34Z
Ghybu
1393
+ çûn / hatin (form2)
6237512
Scribunto
text/plain
-- Modula tewandina lêkerên kurmancî
local export = {}
-- Load irregular forms table
-- local irreg = require('Module:ku-tewandin/nestandard')
local langKu = require("Modul:languages").getByCode("ku")
local link = require('Module:links').language_link
local shallowCopy = require("Module:table/shallowCopy")
local deepCopy = require("Module:table/deepCopy")
local gsub = mw.ustring.gsub
local find = mw.ustring.find
-- =============================================================================
-- Pronouns in Kurmanji
-- =============================================================================
export.order = {"s1", "s2", "s3", "p1", "p2", "p3"}
export.pronouns = {
s1 = "ez", p1 = "em",
s2 = "tu", p2 = "hûn",
s3 = "ew", p3 = "ew"
}
export.obliquePronouns = {
s1 = "min", p1 = "me",
s2 = "te", p2 = "we",
s3 = "wê/wî", p3 = "wan"
}
export.agents = {
s1 = "te, wî, wê, we, wan", p1 = "te, wî, wê, we, wan",
s2 = "min, wî, wê, me, wan", p2 = "min, wî, wê, me, wan",
s3 = "min, te, wî, wê, me, we, wan", p3 = "min, te, wî, wê, me, we, wan"
}
-- Oblique pronoun (green)
export.obliquePronounsGreen = {
s1 = '<span style="color:green">min</span>',
s2 = '<span style="color:green">te</span>',
s3 = '<span style="color:green">wê/wî</span>',
p1 = '<span style="color:green">me</span>',
p2 = '<span style="color:green">we</span>',
p3 = '<span style="color:green">wan</span>'
}
-- ─────────────────────────────────────────────────────────────────────────────
-- 1) This function returns correct subject/agent pronoun, ergativity rule:
-- - Transitive verbs in past tenses → oblique pronoun (green) = agent
-- - All other cases → direct pronoun (no color) = subject
-- 2) Also add the subjunctive prefix "(bila)"
-- ─────────────────────────────────────────────────────────────────────────────
function export.conjPronouns(stemType, mode, isTransitive)
local pronouns = shallowCopy(export.pronouns)
-- Ergativity in kurdish: transitive verbs that are conjugated with the past tense stem are
-- conjugated according to the object, not the subject.
-- Therefore, to have an ergative construction,
-- the verb must be transitive and its stem must be the stem of the past tense.
local isErgative = isTransitive and (stemType == 'past')
-- If it's ergative, we use oblique pronouns: "min", "te", ...
-- If it's not ergative, we use normal pronouns: "ez", "tu", ...
if isErgative then
pronouns = shallowCopy(export.obliquePronounsGreen)
end
-- For the subjunctive mood, we add "(bila)" at the beginning.
if mode == 'subjunctive' then
local subjPrefix = '<span style="color:gray">(bila)</span>'
for _, pers in ipairs(export.order) do
pronouns[pers] = subjPrefix .. ' ' .. pronouns[pers]
end
end
return pronouns
end
-- =============================================================================
-- VERBAL STRUCTURE IN THE INFINITIVE:
-- Verbs in the infinitive appear in three main forms:
-- 1) Simple verb (indivisible light verb):
-- - ex.: "kirin", "çûn", "xwarin", ...
-- 2) Verbs with preverbs (preverb + simple verb):
-- - ex.: "rakirin" (ra- + kirin), "çêkirin" (çê- + kirin), "vexwarin" (ve- + xwarin), ...
-- - Preverb verbs don't use the prefix "bi-" (ez ê rakim , ew ê rake , ...)
-- 3) Compound verbs, construction with non-verbal element (the noun is not attached to the verb):
-- - Left of the simple verb: "hez kirin" ("hez" + "kirin"), "li dar xistin" ("li dar" + "xistin"), ...
-- - Right of the simple verb: "kirin der" ("kirin" + "der"), "girtin ser xwe" ("girtin" + "ser xwe"), ...
-- - Compound verbs use the prefix "bi-" (ez ê hez bi-kim , ew ê hez bi-ke )
-- STRUCTURE: preSimpleVerb + spacing + simpleVerb + postSimpleVerb
-- EX. kirin: preSimpleVerb=''; spacing=false; simpleVerb='kirin'; postSimpleVerb=''
-- rakirin: preSimpleVerb='ra'; spacing=false; simpleVerb='kirin'; postSimpleVerb=''
-- hez kirin: preSimpleVerb='hez'; spacing=true; simpleVerb='kirin'; postSimpleVerb=''
-- pev çûn: preSimpleVerb='pev'; spacing=true; simpleVerb='çûn'; postSimpleVerb=''
-- kirin der: preSimpleVerb=''; spacing=false; simpleVerb='kirin'; postSimpleVerb='der'
-- WARNING: Conjugation can vary depending on the type of verb.
-- For example, in the future tense,the prefix "bi" is used for compound verbs,
-- but not for preverbal verbs, see the function that manages it "tenseRules" table.
-- This table does not yet support the mixed case: a verb composed of a noun and a preverb verb.
-- =============================================================================
function export.verbStruct(isCompoundVerb, preSimpleVerb)
local struct
if (preSimpleVerb and preSimpleVerb ~= '' and not isCompoundVerb) then
struct = 'preverbVerb'
elseif isCompoundVerb then
struct = 'compoundVerb'
else
struct = 'simpleVerb'
end
return struct
end
-- ================================================================
-- INFLECTIONAL ENDINGS
-- Assigns verb inflectional endings (suffixes) to all tenses
-- ================================================================
local getEndings = {}
do
-- ───────────────────────────────────────────────────────────────
-- Ending using present stem
-- ───────────────────────────────────────────────────────────────
getEndings['present'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends = {}
if mw.ustring.match(stem, '[aeêiîouû]$') then
ends['std'] = {s1='m', s2='yî', s3='', p1='n', p2='n', p3='n'}
ends['rojhilatî'] = {s1='m', s2='(y)', s3='t', p1='yn', p2='n', p3='n'}
else
ends['std'] = {s1='im', s2='î', s3='e', p1='in', p2='in', p3='in'}
ends['rojhilatî'] = {s1='im', s2='î', s3='<u>it</u>/ît', p1='în', p2='in', p3='in'}
end
return ends
end
-- ───────────────────────────────────────────────────────────────
-- Ind. preterite + ind. imperfect ending
-- ───────────────────────────────────────────────────────────────
getEndings['past'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends
if mw.ustring.match(stem, '[aeêiouû]$') then
ends = {s1='m', s2='yî', s3='', p1='n', p2='n', p3='n'}
elseif mw.ustring.match(stem, 'î$') then
-- if self.name == 'indImperfect' then
-- -- special indicative ind. imperfect rule
-- ends = {s1='yam', s2='yayî', s3='ya', p1='yan', p2='yan', p3='yan'}
-- end
ends = {s1='m', s2='', s3='', p1='n', p2='n', p3='n'}
else
ends = {s1='im', s2='î', s3='', p1='in', p2='in', p3='in'}
end
return ends
end
-- ───────────────────────────────────────────────────────────────
-- Compound endings with auxiliary "bûn"
-- Inflectional endings are created by taking the different forms of the
-- verb "bûn" (with present stem "-b-" and past stem "-bû-") and
-- adding an "i-" prefix before them: "i-b-im", "i-bû-m", "i-bû-me", "i-bû-ma".
-- This "i-" varies according to the final letter of the verb stem.
-- ───────────────────────────────────────────────────────────────
local function normalize_i(stem)
local prfx_i = "i"
if mw.ustring.match(stem, "ya$") or
mw.ustring.match(stem, "[îû]$") then -- cf. karîn (-karî-)
prfx_i = ""
elseif mw.ustring.match(stem, '[aeêiou]$') then
prfx_i = "yi"
end
return prfx_i
end
getEndings['ibim'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bim", p1 = prfx_i .. "bin",
s2 = prfx_i .. "bî", p2 = prfx_i .. "bin",
s3 = prfx_i .. "be", p3 = prfx_i .. "bin"
}
end
getEndings['ibûm'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bûm", p1 = prfx_i .. "bûn",
s2 = prfx_i .. "bûyî", p2 = prfx_i .. "bûn",
s3 = prfx_i .. "bû", p3 = prfx_i .. "bûn"
}
end
getEndings['ibûme'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bûme", p1 = prfx_i .. "bûne",
s2 = prfx_i .. "bûyiye", p2 = prfx_i .. "bûne",
s3 = prfx_i .. "bûye", p3 = prfx_i .. "bûne"
}
end
getEndings['ibûma'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bûma", p1 = prfx_i .. "bûna",
s2 = prfx_i .. "bûyayî", p2 = prfx_i .. "bûna",
s3 = prfx_i .. "bûya", p3 = prfx_i .. "bûna"
}
end
-- ───────────────────────────────────────────────────────────────
-- Ind. perfect ending.
-- ───────────────────────────────────────────────────────────────
getEndings['ime'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends
if mw.ustring.match(stem, '[aeêiîouû]$') then
ends = {s1="me", s2="yî", s3="ye", p1="ne", p2="ne", p3="ne"}
else
ends = {s1="ime", s2="iyî", s3="iye", p1="ine", p2="ine", p3="ine"}
end
return ends
end
-- ───────────────────────────────────────────────────────────────
-- Subj. Imperfect ending.
-- ───────────────────────────────────────────────────────────────
getEndings['ama'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends
-- The doublet in "-iyan" of verbs in -"în" (gerîn/-geriya-, kenîn/-keniya-, ...),
-- in the conditional and subjunctive moods, a doublet "yaya" appears; it's removed.
-- -yayayî → -yayî; -yaya → -ya
if mw.ustring.match(stem, '(ya)$') then
ends = {s1="ma", s2="yî", s3="", p1="na", p2="na", p3="na"}
elseif mw.ustring.match(stem, '[aeêiîouû]$') then
ends = {s1="ma", s2="yayî", s3="ya", p1="na", p2="na", p3="na"}
else
ends = {s1="ama", s2="ayî", s3="a", p1="ana", p2="ana", p3="ana"}
end
return ends
end
end
-- =============================================================================
-- RULES FOR PREVERBS: "bi-" and "di-"
-- There are two preverbs: "bi-" and "di-". These preverbs can change form
-- depending on the first letters of the verb’s present stem or past stem.
-- =============================================================================
local getPreverb = {}
do
getPreverb['bi'] = function (self, opts)
opts = opts or {}
local stem = opts.stem
local verbStruct = opts.verbStruct
local overridePreverb = opts.overridePreverb
local accent = opts.accent
-- Devoka rojhilatî:
-- @Ferhengvan: Dema bêt bi lêkera alîkar "ê / dê" û bi rehê lêkerê yê
-- dema niha û pêşgirên kesî tê çêkirin. Pêşgira "bi-" li destpêka lêkera
-- serekî nîne: - ez ê / dê xw-im (standard: ez ê/dê bi-xw-im).
if (self.name == 'indFuture' and accent == 'rojhilatî') then
return ''
end
-- Preverb verbs don't use the preverb "bi-": ra-kirin (ez ê rakim), ve-xwarin (ez ê vexwim) , ...
-- But compound verb and simple verbs use it: hez kirin (ez ê hez bi-kim), lê bigirin (ez ê lê bi-girim), ...
if (verbStruct == 'preverbVerb') then
return ''
end
-- If the preverb "bi-" is provided.
if (self.stem == 'present' and overridePreverb.presentBi) then
return overridePreverb.presentBi
elseif (self.stem == 'past' and overridePreverb.pastBi) then
return overridePreverb.pastBi
elseif overridePreverb.sameBi then
return overridePreverb.sameBi
end
-- Modification of the preverbe "bi-" according to the last letter of the stem.
if mw.ustring.match(stem, '^[aeêiîouû]') then
return 'b'
end
return 'bi'
end
getPreverb['di'] = function (self, opts)
opts = opts or {}
local stem = opts.stem
local overridePreverb = opts.overridePreverb
-- If the preverb "di" is provided.
if (self.stem == 'present' and overridePreverb.presentDi) then
return overridePreverb.presentDi
elseif (self.stem == 'past' and overridePreverb.pastDi) then
return overridePreverb.pastDi
elseif overridePreverb.sameDi then
return overridePreverb.sameDi
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 (self, opts)
-- self: reserved for future use
local _ = self -- delete the warning (unused argument)
opts = opts or {}
local stem = opts.stem
local overrideNa = opts.overrideNegPrefix.presentNa
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 (self, opts)
opts = opts or {}
local stem = opts.stem
local tenseName = self.name
local impNegForm = opts.impNegForm -- form "1" or "2" of imp.
local overrideNegPrefix = opts.overrideNegPrefix
local negPrefix = 'ne'
-- Bo neyînî: pêşgira "di-" tenê di nav dema "indImperfect" de tê bikaranîn.
-- ji ber vê yekê 'negPrefix' hertim (?) 'ne' ye ji ber ku dikeve pêş
-- pêşgira "di-": wê/wî ne-di-elimand (elimandin)
if (tenseName == 'indImperfect') then
return '<b>' .. negPrefix .. '</b>'
end
-- Override
if (overrideNegPrefix.impMe or overrideNegPrefix.presentNe
or overrideNegPrefix.pastNe
or overrideNegPrefix.sameNe) then
-- Ovverride imp.
if (tenseName == 'impPresent') then
if (impNegForm == 1 and overrideNegPrefix.impMe) then
return '<b>' .. overrideNegPrefix.impMe .. '</b>'
elseif (impNegForm == 1 and overrideNegPrefix.presentNe and
find(overrideNegPrefix.presentNe, '^n')) then
--For the "me-" form, we replace the "n" with an "m".
return '<b>' .. gsub(overrideNegPrefix.presentNe, '^(.)', 'm') .. '</b>'
elseif (impNegForm == 1 and overrideNegPrefix.sameNe and
find(overrideNegPrefix.sameNe, '^n')) then
--For the "me-" form, we replace the "n" with an "m".
return '<b>' .. gsub(overrideNegPrefix.sameNe, '^(.)', 'm') .. '</b>'
elseif (impNegForm == 2 and overrideNegPrefix.presentNe) then
return '<b>' .. overrideNegPrefix.presentNe .. '</b>'
elseif (impNegForm == 2 and overrideNegPrefix.sameNe) then
return '<b>' .. overrideNegPrefix.sameNe .. '</b>'
end
else
-- For other tenses besides the imperative
if (self.stem == 'present' and overrideNegPrefix.presentNe) then
return '<b>' .. overrideNegPrefix.presentNe .. '</b>'
elseif (self.stem == 'past' and overrideNegPrefix.pastNe) then
return '<b>' .. overrideNegPrefix.pastNe .. '</b>'
elseif overrideNegPrefix.sameNe then
return '<b>' .. overrideNegPrefix.sameNe .. '</b>'
end
end
end
-- There are two forms of construction of the imperative,
-- one with the prefix "me-" (1) and the other (2) 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 overridePreverb = {
-- Preverbs (bi-, di)
presentBi = opts.presentBi or nil,
presentDi = opts.presentDi or nil,
pastBi = opts.pastBi or nil,
pastDi = opts.pastDi or nil,
-- Same preverbs ("past" and "present" stem)
sameBi = opts.sameBi or nil,
sameDi = opts.sameDi or nil,
}
local overrideNegPrefix = {
-- Neg. prefix (na-, ne-)
presentNa = opts.presentNa or nil,
presentNe = opts.presentNe or nil,
pastNe = opts.pastNe or nil,
-- same neg. prefix (for past and present stem)
sameNe = opts.sameNe or nil,
impMe = opts.impMe 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 1
-- Accent/ Devok
local accent = opts.accent or 'std'
-- If "tags='na'", remove links/tags
local tags = opts.tags or 'erê'
-- If addPreverbParticles='na', remove preverb particles (ê/dê) before
-- the conjugated verbs.
local addPreverbParticles = opts.addPreverbParticles or 'erê'
-- We add a space to the left of the "postSimpleVerb" because it shouldn't be attached
-- to the simple verb.
if (postSimpleVerb ~= '' and postSimpleVerb ~=nil) then
postSimpleVerb = ' ' .. postSimpleVerb
end
-- Access to the classification table and retrieval of verb tense parameters
local infoTense = deepCopy(export.tenseRules[tense], 'copy') or false
-- We check that this tense is indeed in table "tenseRules".
if (not infoTense) then
return '<span style="color:red">Unknown tense: ' .. tense ..'</span>'
end
-- We check that one of the two parameters of the stem is given
if (infoTense.stem == 'present' and not presentStem) then
return '<span style="color:red">presentStem parameter required</span>'
elseif (infoTense.stem == 'past' and not pastStem) then
return '<span style="color:red">pasttStem parameter required</span>'
end
-- Choice between the present stem or past stem
local stem = (infoTense.stem == 'present') and presentStem or pastStem
--────────────────────────────
-- Conjugation construction --
-- ───────────────────────────
local preverb = ''
local negPrefix = ''
-- Ruturns the verb type: "simpleVerb" or "preverbVerb" or "compoundVerb"
local verbStruct = export.verbStruct(isCompoundVerb, preSimpleVerb)
if isNegative then
negPrefix = infoTense:negPrefix{stem=stem,
impNegForm=impNegForm,
overrideNegPrefix=overrideNegPrefix}
if infoTense.negPreverb then
preverb = infoTense:negPreverb{stem=stem, verbStruct=verbStruct,
overridePreverb=overridePreverb}
end
else
if infoTense.preverb then
preverb = infoTense:preverb{stem=stem, verbStruct=verbStruct,
overridePreverb=overridePreverb,
accent=accent}
end
end
infoTense.conj = {}
local spacing = isCompoundVerb and ' ' or ''
local endings = infoTense:endings(stem)
-- 'rojhilatî' accent (devok) for present stem
if (infoTense.stem == 'present') then
if (accent == 'rojhilatî') then
endings = endings['rojhilatî']
else
endings = endings['std']
end
end
-- +++++++++++++++++++++++++++
-- Lêkerin nestandard --
-- +++++++++++++++++++++++++++
-- çûn
if (stem == 'her' and pastStem == 'çû') then
if tense == 'indPresent' then
if isNegative then
stem = 'r'
else
stem = 'er'
preverb = 't'
end
elseif ({impPresent=true, indFuture=true, subjPresent=true})[tense] then
preverb = ''
if isNegative then
stem = 'r'
else
stem = 'her'
end
end
end
-- hatin
if (stem == 'wer' and pastStem == 'hat') then
if ({impPresent=true, indFuture=true, subjPresent=true})[tense] then
if isNegative then
stem = 'ê'
else
preverb = ''
stem = 'wer'
end
end
end
-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
local preverbParticles = export.getPreverbParticules(infoTense.preverbParticle, infoTense.stem, isTransitive)
local isErgative = isTransitive and (infoTense.stem == 'past')
-- Creating the conjugation table for a given tense
for _, pers in ipairs(export.order) do
local ending
local conjSimbleVerb
local conjVerb
if isErgative then
ending = endings.s3
else
ending = endings[pers]
end
-- Adding space after the preverbal particle, and
-- if "addPreverbParticles='na'": remove preverb particles (ê/dê).
local preverbParticle = ''
if infoTense.preverbParticle and addPreverbParticles ~= 'na' then
preverbParticle = preverbParticles[pers] .. ' '
end
conjSimbleVerb = negPrefix .. preverb .. stem .. ending
-- Adding prefixe and suffixe
conjVerb = preSimpleVerb .. spacing .. conjSimbleVerb .. postSimpleVerb
-- Spelling correction(îy -> iy)
conjVerb = 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,
-- overridePreverb:
presentBi = frame['nihaBi'] or nil,
presentDi = frame['nihaDi'] or nil,
pastBi = frame['borîBi'] or nil,
pastDi = frame['borîDi'] or nil,
sameBi = frame['bi'] or nil,
sameDi = frame['di'] or nil,
-- overrideNegPrefix:
presentNa = frame['na'] or nil,
presentNe = frame['nihaNe'] or nil,
pastNe = frame['borîNe'] or nil,
sameNe = frame['ne'] or nil,
impMe = frame['me'] or nil,
impNegForm = 1,
tags = args['lînk'] or 'erê',
accent = args['devok'] or 'std',
}
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 '',
-- overridePreverb:
presentBi = frame['nihaBi'] or nil,
presentDi = frame['nihaDi'] or nil,
pastBi = frame['borîBi'] or nil,
pastDi = frame['borîDi'] or nil,
sameBi = frame['bi'] or nil,
sameDi = frame['di'] or nil,
-- overrideNegPrefix:
presentNa = frame['na'] or nil,
presentNe = frame['nihaNe'] or nil,
pastNe = frame['borîNe'] or nil,
sameNe = frame['ne'] or nil,
impMe = frame['me'] or nil,
impNegForm = 1,
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
9dqiss9yh1agovm3zx1erytoeogxb9p
6237513
6237512
2026-06-12T07:52:27Z
Ghybu
1393
sep=<br>
6237513
Scribunto
text/plain
-- Modula tewandina lêkerên kurmancî
local export = {}
-- Load irregular forms table
-- local irreg = require('Module:ku-tewandin/nestandard')
local langKu = require("Modul:languages").getByCode("ku")
local link = require('Module:links').language_link
local shallowCopy = require("Module:table/shallowCopy")
local deepCopy = require("Module:table/deepCopy")
local gsub = mw.ustring.gsub
local find = mw.ustring.find
-- =============================================================================
-- Pronouns in Kurmanji
-- =============================================================================
export.order = {"s1", "s2", "s3", "p1", "p2", "p3"}
export.pronouns = {
s1 = "ez", p1 = "em",
s2 = "tu", p2 = "hûn",
s3 = "ew", p3 = "ew"
}
export.obliquePronouns = {
s1 = "min", p1 = "me",
s2 = "te", p2 = "we",
s3 = "wê/wî", p3 = "wan"
}
export.agents = {
s1 = "te, wî, wê, we, wan", p1 = "te, wî, wê, we, wan",
s2 = "min, wî, wê, me, wan", p2 = "min, wî, wê, me, wan",
s3 = "min, te, wî, wê, me, we, wan", p3 = "min, te, wî, wê, me, we, wan"
}
-- Oblique pronoun (green)
export.obliquePronounsGreen = {
s1 = '<span style="color:green">min</span>',
s2 = '<span style="color:green">te</span>',
s3 = '<span style="color:green">wê/wî</span>',
p1 = '<span style="color:green">me</span>',
p2 = '<span style="color:green">we</span>',
p3 = '<span style="color:green">wan</span>'
}
-- ─────────────────────────────────────────────────────────────────────────────
-- 1) This function returns correct subject/agent pronoun, ergativity rule:
-- - Transitive verbs in past tenses → oblique pronoun (green) = agent
-- - All other cases → direct pronoun (no color) = subject
-- 2) Also add the subjunctive prefix "(bila)"
-- ─────────────────────────────────────────────────────────────────────────────
function export.conjPronouns(stemType, mode, isTransitive)
local pronouns = shallowCopy(export.pronouns)
-- Ergativity in kurdish: transitive verbs that are conjugated with the past tense stem are
-- conjugated according to the object, not the subject.
-- Therefore, to have an ergative construction,
-- the verb must be transitive and its stem must be the stem of the past tense.
local isErgative = isTransitive and (stemType == 'past')
-- If it's ergative, we use oblique pronouns: "min", "te", ...
-- If it's not ergative, we use normal pronouns: "ez", "tu", ...
if isErgative then
pronouns = shallowCopy(export.obliquePronounsGreen)
end
-- For the subjunctive mood, we add "(bila)" at the beginning.
if mode == 'subjunctive' then
local subjPrefix = '<span style="color:gray">(bila)</span>'
for _, pers in ipairs(export.order) do
pronouns[pers] = subjPrefix .. ' ' .. pronouns[pers]
end
end
return pronouns
end
-- =============================================================================
-- VERBAL STRUCTURE IN THE INFINITIVE:
-- Verbs in the infinitive appear in three main forms:
-- 1) Simple verb (indivisible light verb):
-- - ex.: "kirin", "çûn", "xwarin", ...
-- 2) Verbs with preverbs (preverb + simple verb):
-- - ex.: "rakirin" (ra- + kirin), "çêkirin" (çê- + kirin), "vexwarin" (ve- + xwarin), ...
-- - Preverb verbs don't use the prefix "bi-" (ez ê rakim , ew ê rake , ...)
-- 3) Compound verbs, construction with non-verbal element (the noun is not attached to the verb):
-- - Left of the simple verb: "hez kirin" ("hez" + "kirin"), "li dar xistin" ("li dar" + "xistin"), ...
-- - Right of the simple verb: "kirin der" ("kirin" + "der"), "girtin ser xwe" ("girtin" + "ser xwe"), ...
-- - Compound verbs use the prefix "bi-" (ez ê hez bi-kim , ew ê hez bi-ke )
-- STRUCTURE: preSimpleVerb + spacing + simpleVerb + postSimpleVerb
-- EX. kirin: preSimpleVerb=''; spacing=false; simpleVerb='kirin'; postSimpleVerb=''
-- rakirin: preSimpleVerb='ra'; spacing=false; simpleVerb='kirin'; postSimpleVerb=''
-- hez kirin: preSimpleVerb='hez'; spacing=true; simpleVerb='kirin'; postSimpleVerb=''
-- pev çûn: preSimpleVerb='pev'; spacing=true; simpleVerb='çûn'; postSimpleVerb=''
-- kirin der: preSimpleVerb=''; spacing=false; simpleVerb='kirin'; postSimpleVerb='der'
-- WARNING: Conjugation can vary depending on the type of verb.
-- For example, in the future tense,the prefix "bi" is used for compound verbs,
-- but not for preverbal verbs, see the function that manages it "tenseRules" table.
-- This table does not yet support the mixed case: a verb composed of a noun and a preverb verb.
-- =============================================================================
function export.verbStruct(isCompoundVerb, preSimpleVerb)
local struct
if (preSimpleVerb and preSimpleVerb ~= '' and not isCompoundVerb) then
struct = 'preverbVerb'
elseif isCompoundVerb then
struct = 'compoundVerb'
else
struct = 'simpleVerb'
end
return struct
end
-- ================================================================
-- INFLECTIONAL ENDINGS
-- Assigns verb inflectional endings (suffixes) to all tenses
-- ================================================================
local getEndings = {}
do
-- ───────────────────────────────────────────────────────────────
-- Ending using present stem
-- ───────────────────────────────────────────────────────────────
getEndings['present'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends = {}
if mw.ustring.match(stem, '[aeêiîouû]$') then
ends['std'] = {s1='m', s2='yî', s3='', p1='n', p2='n', p3='n'}
ends['rojhilatî'] = {s1='m', s2='(y)', s3='t', p1='yn', p2='n', p3='n'}
else
ends['std'] = {s1='im', s2='î', s3='e', p1='in', p2='in', p3='in'}
ends['rojhilatî'] = {s1='im', s2='î', s3='<u>it</u>/ît', p1='în', p2='in', p3='in'}
end
return ends
end
-- ───────────────────────────────────────────────────────────────
-- Ind. preterite + ind. imperfect ending
-- ───────────────────────────────────────────────────────────────
getEndings['past'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends
if mw.ustring.match(stem, '[aeêiouû]$') then
ends = {s1='m', s2='yî', s3='', p1='n', p2='n', p3='n'}
elseif mw.ustring.match(stem, 'î$') then
-- if self.name == 'indImperfect' then
-- -- special indicative ind. imperfect rule
-- ends = {s1='yam', s2='yayî', s3='ya', p1='yan', p2='yan', p3='yan'}
-- end
ends = {s1='m', s2='', s3='', p1='n', p2='n', p3='n'}
else
ends = {s1='im', s2='î', s3='', p1='in', p2='in', p3='in'}
end
return ends
end
-- ───────────────────────────────────────────────────────────────
-- Compound endings with auxiliary "bûn"
-- Inflectional endings are created by taking the different forms of the
-- verb "bûn" (with present stem "-b-" and past stem "-bû-") and
-- adding an "i-" prefix before them: "i-b-im", "i-bû-m", "i-bû-me", "i-bû-ma".
-- This "i-" varies according to the final letter of the verb stem.
-- ───────────────────────────────────────────────────────────────
local function normalize_i(stem)
local prfx_i = "i"
if mw.ustring.match(stem, "ya$") or
mw.ustring.match(stem, "[îû]$") then -- cf. karîn (-karî-)
prfx_i = ""
elseif mw.ustring.match(stem, '[aeêiou]$') then
prfx_i = "yi"
end
return prfx_i
end
getEndings['ibim'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bim", p1 = prfx_i .. "bin",
s2 = prfx_i .. "bî", p2 = prfx_i .. "bin",
s3 = prfx_i .. "be", p3 = prfx_i .. "bin"
}
end
getEndings['ibûm'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bûm", p1 = prfx_i .. "bûn",
s2 = prfx_i .. "bûyî", p2 = prfx_i .. "bûn",
s3 = prfx_i .. "bû", p3 = prfx_i .. "bûn"
}
end
getEndings['ibûme'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bûme", p1 = prfx_i .. "bûne",
s2 = prfx_i .. "bûyiye", p2 = prfx_i .. "bûne",
s3 = prfx_i .. "bûye", p3 = prfx_i .. "bûne"
}
end
getEndings['ibûma'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bûma", p1 = prfx_i .. "bûna",
s2 = prfx_i .. "bûyayî", p2 = prfx_i .. "bûna",
s3 = prfx_i .. "bûya", p3 = prfx_i .. "bûna"
}
end
-- ───────────────────────────────────────────────────────────────
-- Ind. perfect ending.
-- ───────────────────────────────────────────────────────────────
getEndings['ime'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends
if mw.ustring.match(stem, '[aeêiîouû]$') then
ends = {s1="me", s2="yî", s3="ye", p1="ne", p2="ne", p3="ne"}
else
ends = {s1="ime", s2="iyî", s3="iye", p1="ine", p2="ine", p3="ine"}
end
return ends
end
-- ───────────────────────────────────────────────────────────────
-- Subj. Imperfect ending.
-- ───────────────────────────────────────────────────────────────
getEndings['ama'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends
-- The doublet in "-iyan" of verbs in -"în" (gerîn/-geriya-, kenîn/-keniya-, ...),
-- in the conditional and subjunctive moods, a doublet "yaya" appears; it's removed.
-- -yayayî → -yayî; -yaya → -ya
if mw.ustring.match(stem, '(ya)$') then
ends = {s1="ma", s2="yî", s3="", p1="na", p2="na", p3="na"}
elseif mw.ustring.match(stem, '[aeêiîouû]$') then
ends = {s1="ma", s2="yayî", s3="ya", p1="na", p2="na", p3="na"}
else
ends = {s1="ama", s2="ayî", s3="a", p1="ana", p2="ana", p3="ana"}
end
return ends
end
end
-- =============================================================================
-- RULES FOR PREVERBS: "bi-" and "di-"
-- There are two preverbs: "bi-" and "di-". These preverbs can change form
-- depending on the first letters of the verb’s present stem or past stem.
-- =============================================================================
local getPreverb = {}
do
getPreverb['bi'] = function (self, opts)
opts = opts or {}
local stem = opts.stem
local verbStruct = opts.verbStruct
local overridePreverb = opts.overridePreverb
local accent = opts.accent
-- Devoka rojhilatî:
-- @Ferhengvan: Dema bêt bi lêkera alîkar "ê / dê" û bi rehê lêkerê yê
-- dema niha û pêşgirên kesî tê çêkirin. Pêşgira "bi-" li destpêka lêkera
-- serekî nîne: - ez ê / dê xw-im (standard: ez ê/dê bi-xw-im).
if (self.name == 'indFuture' and accent == 'rojhilatî') then
return ''
end
-- Preverb verbs don't use the preverb "bi-": ra-kirin (ez ê rakim), ve-xwarin (ez ê vexwim) , ...
-- But compound verb and simple verbs use it: hez kirin (ez ê hez bi-kim), lê bigirin (ez ê lê bi-girim), ...
if (verbStruct == 'preverbVerb') then
return ''
end
-- If the preverb "bi-" is provided.
if (self.stem == 'present' and overridePreverb.presentBi) then
return overridePreverb.presentBi
elseif (self.stem == 'past' and overridePreverb.pastBi) then
return overridePreverb.pastBi
elseif overridePreverb.sameBi then
return overridePreverb.sameBi
end
-- Modification of the preverbe "bi-" according to the last letter of the stem.
if mw.ustring.match(stem, '^[aeêiîouû]') then
return 'b'
end
return 'bi'
end
getPreverb['di'] = function (self, opts)
opts = opts or {}
local stem = opts.stem
local overridePreverb = opts.overridePreverb
-- If the preverb "di" is provided.
if (self.stem == 'present' and overridePreverb.presentDi) then
return overridePreverb.presentDi
elseif (self.stem == 'past' and overridePreverb.pastDi) then
return overridePreverb.pastDi
elseif overridePreverb.sameDi then
return overridePreverb.sameDi
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 (self, opts)
-- self: reserved for future use
local _ = self -- delete the warning (unused argument)
opts = opts or {}
local stem = opts.stem
local overrideNa = opts.overrideNegPrefix.presentNa
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 (self, opts)
opts = opts or {}
local stem = opts.stem
local tenseName = self.name
local impNegForm = opts.impNegForm -- form "1" or "2" of imp.
local overrideNegPrefix = opts.overrideNegPrefix
local negPrefix = 'ne'
-- Bo neyînî: pêşgira "di-" tenê di nav dema "indImperfect" de tê bikaranîn.
-- ji ber vê yekê 'negPrefix' hertim (?) 'ne' ye ji ber ku dikeve pêş
-- pêşgira "di-": wê/wî ne-di-elimand (elimandin)
if (tenseName == 'indImperfect') then
return '<b>' .. negPrefix .. '</b>'
end
-- Override
if (overrideNegPrefix.impMe or overrideNegPrefix.presentNe
or overrideNegPrefix.pastNe
or overrideNegPrefix.sameNe) then
-- Ovverride imp.
if (tenseName == 'impPresent') then
if (impNegForm == 1 and overrideNegPrefix.impMe) then
return '<b>' .. overrideNegPrefix.impMe .. '</b>'
elseif (impNegForm == 1 and overrideNegPrefix.presentNe and
find(overrideNegPrefix.presentNe, '^n')) then
--For the "me-" form, we replace the "n" with an "m".
return '<b>' .. gsub(overrideNegPrefix.presentNe, '^(.)', 'm') .. '</b>'
elseif (impNegForm == 1 and overrideNegPrefix.sameNe and
find(overrideNegPrefix.sameNe, '^n')) then
--For the "me-" form, we replace the "n" with an "m".
return '<b>' .. gsub(overrideNegPrefix.sameNe, '^(.)', 'm') .. '</b>'
elseif (impNegForm == 2 and overrideNegPrefix.presentNe) then
return '<b>' .. overrideNegPrefix.presentNe .. '</b>'
elseif (impNegForm == 2 and overrideNegPrefix.sameNe) then
return '<b>' .. overrideNegPrefix.sameNe .. '</b>'
end
else
-- For other tenses besides the imperative
if (self.stem == 'present' and overrideNegPrefix.presentNe) then
return '<b>' .. overrideNegPrefix.presentNe .. '</b>'
elseif (self.stem == 'past' and overrideNegPrefix.pastNe) then
return '<b>' .. overrideNegPrefix.pastNe .. '</b>'
elseif overrideNegPrefix.sameNe then
return '<b>' .. overrideNegPrefix.sameNe .. '</b>'
end
end
end
-- There are two forms of construction of the imperative,
-- one with the prefix "me-" (1) and the other (2) 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 overridePreverb = {
-- Preverbs (bi-, di)
presentBi = opts.presentBi or nil,
presentDi = opts.presentDi or nil,
pastBi = opts.pastBi or nil,
pastDi = opts.pastDi or nil,
-- Same preverbs ("past" and "present" stem)
sameBi = opts.sameBi or nil,
sameDi = opts.sameDi or nil,
}
local overrideNegPrefix = {
-- Neg. prefix (na-, ne-)
presentNa = opts.presentNa or nil,
presentNe = opts.presentNe or nil,
pastNe = opts.pastNe or nil,
-- same neg. prefix (for past and present stem)
sameNe = opts.sameNe or nil,
impMe = opts.impMe 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 1
-- Accent/ Devok
local accent = opts.accent or 'std'
-- If "tags='na'", remove links/tags
local tags = opts.tags or 'erê'
-- If addPreverbParticles='na', remove preverb particles (ê/dê) before
-- the conjugated verbs.
local addPreverbParticles = opts.addPreverbParticles or 'erê'
-- We add a space to the left of the "postSimpleVerb" because it shouldn't be attached
-- to the simple verb.
if (postSimpleVerb ~= '' and postSimpleVerb ~=nil) then
postSimpleVerb = ' ' .. postSimpleVerb
end
-- Access to the classification table and retrieval of verb tense parameters
local infoTense = deepCopy(export.tenseRules[tense], 'copy') or false
-- We check that this tense is indeed in table "tenseRules".
if (not infoTense) then
return '<span style="color:red">Unknown tense: ' .. tense ..'</span>'
end
-- We check that one of the two parameters of the stem is given
if (infoTense.stem == 'present' and not presentStem) then
return '<span style="color:red">presentStem parameter required</span>'
elseif (infoTense.stem == 'past' and not pastStem) then
return '<span style="color:red">pasttStem parameter required</span>'
end
-- Choice between the present stem or past stem
local stem = (infoTense.stem == 'present') and presentStem or pastStem
--────────────────────────────
-- Conjugation construction --
-- ───────────────────────────
local preverb = ''
local negPrefix = ''
-- Ruturns the verb type: "simpleVerb" or "preverbVerb" or "compoundVerb"
local verbStruct = export.verbStruct(isCompoundVerb, preSimpleVerb)
if isNegative then
negPrefix = infoTense:negPrefix{stem=stem,
impNegForm=impNegForm,
overrideNegPrefix=overrideNegPrefix}
if infoTense.negPreverb then
preverb = infoTense:negPreverb{stem=stem, verbStruct=verbStruct,
overridePreverb=overridePreverb}
end
else
if infoTense.preverb then
preverb = infoTense:preverb{stem=stem, verbStruct=verbStruct,
overridePreverb=overridePreverb,
accent=accent}
end
end
infoTense.conj = {}
local spacing = isCompoundVerb and ' ' or ''
local endings = infoTense:endings(stem)
-- 'rojhilatî' accent (devok) for present stem
if (infoTense.stem == 'present') then
if (accent == 'rojhilatî') then
endings = endings['rojhilatî']
else
endings = endings['std']
end
end
-- +++++++++++++++++++++++++++
-- Lêkerin nestandard --
-- +++++++++++++++++++++++++++
-- çûn
if (stem == 'her' and pastStem == 'çû') then
if tense == 'indPresent' then
if isNegative then
stem = 'r'
else
stem = 'er'
preverb = 't'
end
elseif ({impPresent=true, indFuture=true, subjPresent=true})[tense] then
preverb = ''
if isNegative then
stem = 'r'
else
stem = 'her'
end
end
end
-- hatin
if (stem == 'wer' and pastStem == 'hat') then
if ({impPresent=true, indFuture=true, subjPresent=true})[tense] then
if isNegative then
stem = 'ê'
else
preverb = ''
stem = 'wer'
end
end
end
-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
local preverbParticles = export.getPreverbParticules(infoTense.preverbParticle, infoTense.stem, isTransitive)
local isErgative = isTransitive and (infoTense.stem == 'past')
-- Creating the conjugation table for a given tense
for _, pers in ipairs(export.order) do
local ending
local conjSimbleVerb
local conjVerb
if isErgative then
ending = endings.s3
else
ending = endings[pers]
end
-- Adding space after the preverbal particle, and
-- if "addPreverbParticles='na'": remove preverb particles (ê/dê).
local preverbParticle = ''
if infoTense.preverbParticle and addPreverbParticles ~= 'na' then
preverbParticle = preverbParticles[pers] .. ' '
end
conjSimbleVerb = negPrefix .. preverb .. stem .. ending
-- Adding prefixe and suffixe
conjVerb = preSimpleVerb .. spacing .. conjSimbleVerb .. postSimpleVerb
-- Spelling correction(îy -> iy)
conjVerb = 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, "<br>")
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,
-- overridePreverb:
presentBi = frame['nihaBi'] or nil,
presentDi = frame['nihaDi'] or nil,
pastBi = frame['borîBi'] or nil,
pastDi = frame['borîDi'] or nil,
sameBi = frame['bi'] or nil,
sameDi = frame['di'] or nil,
-- overrideNegPrefix:
presentNa = frame['na'] or nil,
presentNe = frame['nihaNe'] or nil,
pastNe = frame['borîNe'] or nil,
sameNe = frame['ne'] or nil,
impMe = frame['me'] or nil,
impNegForm = 1,
tags = args['lînk'] or 'erê',
accent = args['devok'] or 'std',
}
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 '',
-- overridePreverb:
presentBi = frame['nihaBi'] or nil,
presentDi = frame['nihaDi'] or nil,
pastBi = frame['borîBi'] or nil,
pastDi = frame['borîDi'] or nil,
sameBi = frame['bi'] or nil,
sameDi = frame['di'] or nil,
-- overrideNegPrefix:
presentNa = frame['na'] or nil,
presentNe = frame['nihaNe'] or nil,
pastNe = frame['borîNe'] or nil,
sameNe = frame['ne'] or nil,
impMe = frame['me'] or nil,
impNegForm = 1,
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
4jcsqzktrfjbe8k9cny3frvwolbuiiz
6237516
6237513
2026-06-12T08:02:30Z
Ghybu
1393
—
6237516
Scribunto
text/plain
-- Modula tewandina lêkerên kurmancî
local export = {}
-- Load irregular forms table
-- local irreg = require('Module:ku-tewandin/nestandard')
local langKu = require("Modul:languages").getByCode("ku")
local link = require('Module:links').language_link
local shallowCopy = require("Module:table/shallowCopy")
local deepCopy = require("Module:table/deepCopy")
local gsub = mw.ustring.gsub
local find = mw.ustring.find
-- =============================================================================
-- Pronouns in Kurmanji
-- =============================================================================
export.order = {"s1", "s2", "s3", "p1", "p2", "p3"}
export.pronouns = {
s1 = "ez", p1 = "em",
s2 = "tu", p2 = "hûn",
s3 = "ew", p3 = "ew"
}
export.obliquePronouns = {
s1 = "min", p1 = "me",
s2 = "te", p2 = "we",
s3 = "wê/wî", p3 = "wan"
}
export.agents = {
s1 = "te, wî, wê, we, wan", p1 = "te, wî, wê, we, wan",
s2 = "min, wî, wê, me, wan", p2 = "min, wî, wê, me, wan",
s3 = "min, te, wî, wê, me, we, wan", p3 = "min, te, wî, wê, me, we, wan"
}
-- Oblique pronoun (green)
export.obliquePronounsGreen = {
s1 = '<span style="color:green">min</span>',
s2 = '<span style="color:green">te</span>',
s3 = '<span style="color:green">wê/wî</span>',
p1 = '<span style="color:green">me</span>',
p2 = '<span style="color:green">we</span>',
p3 = '<span style="color:green">wan</span>'
}
-- ─────────────────────────────────────────────────────────────────────────────
-- 1) This function returns correct subject/agent pronoun, ergativity rule:
-- - Transitive verbs in past tenses → oblique pronoun (green) = agent
-- - All other cases → direct pronoun (no color) = subject
-- 2) Also add the subjunctive prefix "(bila)"
-- ─────────────────────────────────────────────────────────────────────────────
function export.conjPronouns(stemType, mode, isTransitive)
local pronouns = shallowCopy(export.pronouns)
-- Ergativity in kurdish: transitive verbs that are conjugated with the past tense stem are
-- conjugated according to the object, not the subject.
-- Therefore, to have an ergative construction,
-- the verb must be transitive and its stem must be the stem of the past tense.
local isErgative = isTransitive and (stemType == 'past')
-- If it's ergative, we use oblique pronouns: "min", "te", ...
-- If it's not ergative, we use normal pronouns: "ez", "tu", ...
if isErgative then
pronouns = shallowCopy(export.obliquePronounsGreen)
end
-- For the subjunctive mood, we add "(bila)" at the beginning.
if mode == 'subjunctive' then
local subjPrefix = '<span style="color:gray">(bila)</span>'
for _, pers in ipairs(export.order) do
pronouns[pers] = subjPrefix .. ' ' .. pronouns[pers]
end
end
return pronouns
end
-- =============================================================================
-- VERBAL STRUCTURE IN THE INFINITIVE:
-- Verbs in the infinitive appear in three main forms:
-- 1) Simple verb (indivisible light verb):
-- - ex.: "kirin", "çûn", "xwarin", ...
-- 2) Verbs with preverbs (preverb + simple verb):
-- - ex.: "rakirin" (ra- + kirin), "çêkirin" (çê- + kirin), "vexwarin" (ve- + xwarin), ...
-- - Preverb verbs don't use the prefix "bi-" (ez ê rakim , ew ê rake , ...)
-- 3) Compound verbs, construction with non-verbal element (the noun is not attached to the verb):
-- - Left of the simple verb: "hez kirin" ("hez" + "kirin"), "li dar xistin" ("li dar" + "xistin"), ...
-- - Right of the simple verb: "kirin der" ("kirin" + "der"), "girtin ser xwe" ("girtin" + "ser xwe"), ...
-- - Compound verbs use the prefix "bi-" (ez ê hez bi-kim , ew ê hez bi-ke )
-- STRUCTURE: preSimpleVerb + spacing + simpleVerb + postSimpleVerb
-- EX. kirin: preSimpleVerb=''; spacing=false; simpleVerb='kirin'; postSimpleVerb=''
-- rakirin: preSimpleVerb='ra'; spacing=false; simpleVerb='kirin'; postSimpleVerb=''
-- hez kirin: preSimpleVerb='hez'; spacing=true; simpleVerb='kirin'; postSimpleVerb=''
-- pev çûn: preSimpleVerb='pev'; spacing=true; simpleVerb='çûn'; postSimpleVerb=''
-- kirin der: preSimpleVerb=''; spacing=false; simpleVerb='kirin'; postSimpleVerb='der'
-- WARNING: Conjugation can vary depending on the type of verb.
-- For example, in the future tense,the prefix "bi" is used for compound verbs,
-- but not for preverbal verbs, see the function that manages it "tenseRules" table.
-- This table does not yet support the mixed case: a verb composed of a noun and a preverb verb.
-- =============================================================================
function export.verbStruct(isCompoundVerb, preSimpleVerb)
local struct
if (preSimpleVerb and preSimpleVerb ~= '' and not isCompoundVerb) then
struct = 'preverbVerb'
elseif isCompoundVerb then
struct = 'compoundVerb'
else
struct = 'simpleVerb'
end
return struct
end
-- ================================================================
-- INFLECTIONAL ENDINGS
-- Assigns verb inflectional endings (suffixes) to all tenses
-- ================================================================
local getEndings = {}
do
-- ───────────────────────────────────────────────────────────────
-- Ending using present stem
-- ───────────────────────────────────────────────────────────────
getEndings['present'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends = {}
if mw.ustring.match(stem, '[aeêiîouû]$') then
ends['std'] = {s1='m', s2='yî', s3='', p1='n', p2='n', p3='n'}
ends['rojhilatî'] = {s1='m', s2='(y)', s3='t', p1='yn', p2='n', p3='n'}
else
ends['std'] = {s1='im', s2='î', s3='e', p1='in', p2='in', p3='in'}
ends['rojhilatî'] = {s1='im', s2='î', s3='<u>it</u>/ît', p1='în', p2='in', p3='in'}
end
return ends
end
-- ───────────────────────────────────────────────────────────────
-- Ind. preterite + ind. imperfect ending
-- ───────────────────────────────────────────────────────────────
getEndings['past'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends
if mw.ustring.match(stem, '[aeêiouû]$') then
ends = {s1='m', s2='yî', s3='', p1='n', p2='n', p3='n'}
elseif mw.ustring.match(stem, 'î$') then
-- if self.name == 'indImperfect' then
-- -- special indicative ind. imperfect rule
-- ends = {s1='yam', s2='yayî', s3='ya', p1='yan', p2='yan', p3='yan'}
-- end
ends = {s1='m', s2='', s3='', p1='n', p2='n', p3='n'}
else
ends = {s1='im', s2='î', s3='', p1='in', p2='in', p3='in'}
end
return ends
end
-- ───────────────────────────────────────────────────────────────
-- Compound endings with auxiliary "bûn"
-- Inflectional endings are created by taking the different forms of the
-- verb "bûn" (with present stem "-b-" and past stem "-bû-") and
-- adding an "i-" prefix before them: "i-b-im", "i-bû-m", "i-bû-me", "i-bû-ma".
-- This "i-" varies according to the final letter of the verb stem.
-- ───────────────────────────────────────────────────────────────
local function normalize_i(stem)
local prfx_i = "i"
if mw.ustring.match(stem, "ya$") or
mw.ustring.match(stem, "[îû]$") then -- cf. karîn (-karî-)
prfx_i = ""
elseif mw.ustring.match(stem, '[aeêiou]$') then
prfx_i = "yi"
end
return prfx_i
end
getEndings['ibim'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bim", p1 = prfx_i .. "bin",
s2 = prfx_i .. "bî", p2 = prfx_i .. "bin",
s3 = prfx_i .. "be", p3 = prfx_i .. "bin"
}
end
getEndings['ibûm'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bûm", p1 = prfx_i .. "bûn",
s2 = prfx_i .. "bûyî", p2 = prfx_i .. "bûn",
s3 = prfx_i .. "bû", p3 = prfx_i .. "bûn"
}
end
getEndings['ibûme'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bûme", p1 = prfx_i .. "bûne",
s2 = prfx_i .. "bûyiye", p2 = prfx_i .. "bûne",
s3 = prfx_i .. "bûye", p3 = prfx_i .. "bûne"
}
end
getEndings['ibûma'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bûma", p1 = prfx_i .. "bûna",
s2 = prfx_i .. "bûyayî", p2 = prfx_i .. "bûna",
s3 = prfx_i .. "bûya", p3 = prfx_i .. "bûna"
}
end
-- ───────────────────────────────────────────────────────────────
-- Ind. perfect ending.
-- ───────────────────────────────────────────────────────────────
getEndings['ime'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends
if mw.ustring.match(stem, '[aeêiîouû]$') then
ends = {s1="me", s2="yî", s3="ye", p1="ne", p2="ne", p3="ne"}
else
ends = {s1="ime", s2="iyî", s3="iye", p1="ine", p2="ine", p3="ine"}
end
return ends
end
-- ───────────────────────────────────────────────────────────────
-- Subj. Imperfect ending.
-- ───────────────────────────────────────────────────────────────
getEndings['ama'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends
-- The doublet in "-iyan" of verbs in -"în" (gerîn/-geriya-, kenîn/-keniya-, ...),
-- in the conditional and subjunctive moods, a doublet "yaya" appears; it's removed.
-- -yayayî → -yayî; -yaya → -ya
if mw.ustring.match(stem, '(ya)$') then
ends = {s1="ma", s2="yî", s3="", p1="na", p2="na", p3="na"}
elseif mw.ustring.match(stem, '[aeêiîouû]$') then
ends = {s1="ma", s2="yayî", s3="ya", p1="na", p2="na", p3="na"}
else
ends = {s1="ama", s2="ayî", s3="a", p1="ana", p2="ana", p3="ana"}
end
return ends
end
end
-- =============================================================================
-- RULES FOR PREVERBS: "bi-" and "di-"
-- There are two preverbs: "bi-" and "di-". These preverbs can change form
-- depending on the first letters of the verb’s present stem or past stem.
-- =============================================================================
local getPreverb = {}
do
getPreverb['bi'] = function (self, opts)
opts = opts or {}
local stem = opts.stem
local verbStruct = opts.verbStruct
local overridePreverb = opts.overridePreverb
local accent = opts.accent
-- Devoka rojhilatî:
-- @Ferhengvan: Dema bêt bi lêkera alîkar "ê / dê" û bi rehê lêkerê yê
-- dema niha û pêşgirên kesî tê çêkirin. Pêşgira "bi-" li destpêka lêkera
-- serekî nîne: - ez ê / dê xw-im (standard: ez ê/dê bi-xw-im).
if (self.name == 'indFuture' and accent == 'rojhilatî') then
return ''
end
-- Preverb verbs don't use the preverb "bi-": ra-kirin (ez ê rakim), ve-xwarin (ez ê vexwim) , ...
-- But compound verb and simple verbs use it: hez kirin (ez ê hez bi-kim), lê bigirin (ez ê lê bi-girim), ...
if (verbStruct == 'preverbVerb') then
return ''
end
-- If the preverb "bi-" is provided.
if (self.stem == 'present' and overridePreverb.presentBi) then
return overridePreverb.presentBi
elseif (self.stem == 'past' and overridePreverb.pastBi) then
return overridePreverb.pastBi
elseif overridePreverb.sameBi then
return overridePreverb.sameBi
end
-- Modification of the preverbe "bi-" according to the last letter of the stem.
if mw.ustring.match(stem, '^[aeêiîouû]') then
return 'b'
end
return 'bi'
end
getPreverb['di'] = function (self, opts)
opts = opts or {}
local stem = opts.stem
local overridePreverb = opts.overridePreverb
-- If the preverb "di" is provided.
if (self.stem == 'present' and overridePreverb.presentDi) then
return overridePreverb.presentDi
elseif (self.stem == 'past' and overridePreverb.pastDi) then
return overridePreverb.pastDi
elseif overridePreverb.sameDi then
return overridePreverb.sameDi
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 (self, opts)
-- self: reserved for future use
local _ = self -- delete the warning (unused argument)
opts = opts or {}
local stem = opts.stem
local overrideNa = opts.overrideNegPrefix.presentNa
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 (self, opts)
opts = opts or {}
local stem = opts.stem
local tenseName = self.name
local impNegForm = opts.impNegForm -- form "1" or "2" of imp.
local overrideNegPrefix = opts.overrideNegPrefix
local negPrefix = 'ne'
-- Bo neyînî: pêşgira "di-" tenê di nav dema "indImperfect" de tê bikaranîn.
-- ji ber vê yekê 'negPrefix' hertim (?) 'ne' ye ji ber ku dikeve pêş
-- pêşgira "di-": wê/wî ne-di-elimand (elimandin)
if (tenseName == 'indImperfect') then
return '<b>' .. negPrefix .. '</b>'
end
-- Override
if (overrideNegPrefix.impMe or overrideNegPrefix.presentNe
or overrideNegPrefix.pastNe
or overrideNegPrefix.sameNe) then
-- Ovverride imp.
if (tenseName == 'impPresent') then
if (impNegForm == 1 and overrideNegPrefix.impMe) then
return '<b>' .. overrideNegPrefix.impMe .. '</b>'
elseif (impNegForm == 1 and overrideNegPrefix.presentNe and
find(overrideNegPrefix.presentNe, '^n')) then
--For the "me-" form, we replace the "n" with an "m".
return '<b>' .. gsub(overrideNegPrefix.presentNe, '^(.)', 'm') .. '</b>'
elseif (impNegForm == 1 and overrideNegPrefix.sameNe and
find(overrideNegPrefix.sameNe, '^n')) then
--For the "me-" form, we replace the "n" with an "m".
return '<b>' .. gsub(overrideNegPrefix.sameNe, '^(.)', 'm') .. '</b>'
elseif (impNegForm == 2 and overrideNegPrefix.presentNe) then
return '<b>' .. overrideNegPrefix.presentNe .. '</b>'
elseif (impNegForm == 2 and overrideNegPrefix.sameNe) then
return '<b>' .. overrideNegPrefix.sameNe .. '</b>'
end
else
-- For other tenses besides the imperative
if (self.stem == 'present' and overrideNegPrefix.presentNe) then
return '<b>' .. overrideNegPrefix.presentNe .. '</b>'
elseif (self.stem == 'past' and overrideNegPrefix.pastNe) then
return '<b>' .. overrideNegPrefix.pastNe .. '</b>'
elseif overrideNegPrefix.sameNe then
return '<b>' .. overrideNegPrefix.sameNe .. '</b>'
end
end
end
-- There are two forms of construction of the imperative,
-- one with the prefix "me-" (1) and the other (2) 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 overridePreverb = {
-- Preverbs (bi-, di)
presentBi = opts.presentBi or nil,
presentDi = opts.presentDi or nil,
pastBi = opts.pastBi or nil,
pastDi = opts.pastDi or nil,
-- Same preverbs ("past" and "present" stem)
sameBi = opts.sameBi or nil,
sameDi = opts.sameDi or nil,
}
local overrideNegPrefix = {
-- Neg. prefix (na-, ne-)
presentNa = opts.presentNa or nil,
presentNe = opts.presentNe or nil,
pastNe = opts.pastNe or nil,
-- same neg. prefix (for past and present stem)
sameNe = opts.sameNe or nil,
impMe = opts.impMe 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 1
-- Accent/ Devok
local accent = opts.accent or 'std'
-- If "tags='na'", remove links/tags
local tags = opts.tags or 'erê'
-- If addPreverbParticles='na', remove preverb particles (ê/dê) before
-- the conjugated verbs.
local addPreverbParticles = opts.addPreverbParticles or 'erê'
-- We add a space to the left of the "postSimpleVerb" because it shouldn't be attached
-- to the simple verb.
if (postSimpleVerb ~= '' and postSimpleVerb ~=nil) then
postSimpleVerb = ' ' .. postSimpleVerb
end
-- Access to the classification table and retrieval of verb tense parameters
local infoTense = deepCopy(export.tenseRules[tense], 'copy') or false
-- We check that this tense is indeed in table "tenseRules".
if (not infoTense) then
return '<span style="color:red">Unknown tense: ' .. tense ..'</span>'
end
-- We check that one of the two parameters of the stem is given
if (infoTense.stem == 'present' and not presentStem) then
return '<span style="color:red">presentStem parameter required</span>'
elseif (infoTense.stem == 'past' and not pastStem) then
return '<span style="color:red">pasttStem parameter required</span>'
end
-- Choice between the present stem or past stem
local stem = (infoTense.stem == 'present') and presentStem or pastStem
--────────────────────────────
-- Conjugation construction --
-- ───────────────────────────
local preverb = ''
local negPrefix = ''
-- Ruturns the verb type: "simpleVerb" or "preverbVerb" or "compoundVerb"
local verbStruct = export.verbStruct(isCompoundVerb, preSimpleVerb)
if isNegative then
negPrefix = infoTense:negPrefix{stem=stem,
impNegForm=impNegForm,
overrideNegPrefix=overrideNegPrefix}
if infoTense.negPreverb then
preverb = infoTense:negPreverb{stem=stem, verbStruct=verbStruct,
overridePreverb=overridePreverb}
end
else
if infoTense.preverb then
preverb = infoTense:preverb{stem=stem, verbStruct=verbStruct,
overridePreverb=overridePreverb,
accent=accent}
end
end
infoTense.conj = {}
local spacing = isCompoundVerb and ' ' or ''
local endings = infoTense:endings(stem)
-- 'rojhilatî' accent (devok) for present stem
if (infoTense.stem == 'present') then
if (accent == 'rojhilatî') then
endings = endings['rojhilatî']
else
endings = endings['std']
end
end
-- +++++++++++++++++++++++++++
-- Lêkerin nestandard --
-- +++++++++++++++++++++++++++
-- çûn
if (stem == 'her' and pastStem == 'çû') then
if tense == 'indPresent' then
if isNegative then
stem = 'r'
else
stem = 'er'
preverb = 't'
end
elseif ({impPresent=true, indFuture=true, subjPresent=true})[tense] then
preverb = ''
if isNegative then
stem = 'r'
else
stem = 'her'
end
end
end
-- hatin
if (stem == 'wer' and pastStem == 'hat') then
if ({impPresent=true, indFuture=true, subjPresent=true})[tense] then
if isNegative then
stem = 'ê'
else
preverb = ''
stem = 'wer'
end
end
end
-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
local preverbParticles = export.getPreverbParticules(infoTense.preverbParticle, infoTense.stem, isTransitive)
local isErgative = isTransitive and (infoTense.stem == 'past')
-- Creating the conjugation table for a given tense
for _, pers in ipairs(export.order) do
local ending
local conjSimbleVerb
local conjVerb
if isErgative then
ending = endings.s3
else
ending = endings[pers]
end
-- Adding space after the preverbal particle, and
-- if "addPreverbParticles='na'": remove preverb particles (ê/dê).
local preverbParticle = ''
if infoTense.preverbParticle and addPreverbParticles ~= 'na' then
preverbParticle = preverbParticles[pers] .. ' '
end
conjSimbleVerb = negPrefix .. preverb .. stem .. ending
-- Adding prefixe and suffixe
conjVerb = preSimpleVerb .. spacing .. conjSimbleVerb .. postSimpleVerb
-- Spelling correction(îy -> iy)
conjVerb = 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,
-- overridePreverb:
presentBi = frame['nihaBi'] or nil,
presentDi = frame['nihaDi'] or nil,
pastBi = frame['borîBi'] or nil,
pastDi = frame['borîDi'] or nil,
sameBi = frame['bi'] or nil,
sameDi = frame['di'] or nil,
-- overrideNegPrefix:
presentNa = frame['na'] or nil,
presentNe = frame['nihaNe'] or nil,
pastNe = frame['borîNe'] or nil,
sameNe = frame['ne'] or nil,
impMe = frame['me'] or nil,
impNegForm = 1,
tags = args['lînk'] or 'erê',
accent = args['devok'] or 'std',
}
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 '',
-- overridePreverb:
presentBi = frame['nihaBi'] or nil,
presentDi = frame['nihaDi'] or nil,
pastBi = frame['borîBi'] or nil,
pastDi = frame['borîDi'] or nil,
sameBi = frame['bi'] or nil,
sameDi = frame['di'] or nil,
-- overrideNegPrefix:
presentNa = frame['na'] or nil,
presentNe = frame['nihaNe'] or nil,
pastNe = frame['borîNe'] or nil,
sameNe = frame['ne'] or nil,
impMe = frame['me'] or nil,
impNegForm = 1,
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
j4qod0osrsu6kn55g5stnk4sg01too5
6237521
6237516
2026-06-12T08:57:43Z
Ghybu
1393
6237521
Scribunto
text/plain
-- Modula tewandina lêkerên kurmancî
local export = {}
-- Load irregular forms table
-- local irreg = require('Module:ku-tewandin/nestandard')
local langKu = require("Modul:languages").getByCode("ku")
local link = require('Module:links').language_link
local shallowCopy = require("Module:table/shallowCopy")
local deepCopy = require("Module:table/deepCopy")
local gsub = mw.ustring.gsub
local find = mw.ustring.find
-- =============================================================================
-- Pronouns in Kurmanji
-- =============================================================================
export.order = {"s1", "s2", "s3", "p1", "p2", "p3"}
export.pronouns = {
s1 = "ez", p1 = "em",
s2 = "tu", p2 = "hûn",
s3 = "ew", p3 = "ew"
}
export.obliquePronouns = {
s1 = "min", p1 = "me",
s2 = "te", p2 = "we",
s3 = "wê/wî", p3 = "wan"
}
export.agents = {
s1 = "te, wî, wê, we, wan", p1 = "te, wî, wê, we, wan",
s2 = "min, wî, wê, me, wan", p2 = "min, wî, wê, me, wan",
s3 = "min, te, wî, wê, me, we, wan", p3 = "min, te, wî, wê, me, we, wan"
}
-- Oblique pronoun (green)
export.obliquePronounsGreen = {
s1 = '<span style="color:green">min</span>',
s2 = '<span style="color:green">te</span>',
s3 = '<span style="color:green">wê/wî</span>',
p1 = '<span style="color:green">me</span>',
p2 = '<span style="color:green">we</span>',
p3 = '<span style="color:green">wan</span>'
}
-- ─────────────────────────────────────────────────────────────────────────────
-- 1) This function returns correct subject/agent pronoun, ergativity rule:
-- - Transitive verbs in past tenses → oblique pronoun (green) = agent
-- - All other cases → direct pronoun (no color) = subject
-- 2) Also add the subjunctive prefix "(bila)"
-- ─────────────────────────────────────────────────────────────────────────────
function export.conjPronouns(stemType, mode, isTransitive)
local pronouns = shallowCopy(export.pronouns)
-- Ergativity in kurdish: transitive verbs that are conjugated with the past tense stem are
-- conjugated according to the object, not the subject.
-- Therefore, to have an ergative construction,
-- the verb must be transitive and its stem must be the stem of the past tense.
local isErgative = isTransitive and (stemType == 'past')
-- If it's ergative, we use oblique pronouns: "min", "te", ...
-- If it's not ergative, we use normal pronouns: "ez", "tu", ...
if isErgative then
pronouns = shallowCopy(export.obliquePronounsGreen)
end
-- For the subjunctive mood, we add "(bila)" at the beginning.
if mode == 'subjunctive' then
local subjPrefix = '<span style="color:gray">(bila)</span>'
for _, pers in ipairs(export.order) do
pronouns[pers] = subjPrefix .. ' ' .. pronouns[pers]
end
end
return pronouns
end
-- =============================================================================
-- VERBAL STRUCTURE IN THE INFINITIVE:
-- Verbs in the infinitive appear in three main forms:
-- 1) Simple verb (indivisible light verb):
-- - ex.: "kirin", "çûn", "xwarin", ...
-- 2) Verbs with preverbs (preverb + simple verb):
-- - ex.: "rakirin" (ra- + kirin), "çêkirin" (çê- + kirin), "vexwarin" (ve- + xwarin), ...
-- - Preverb verbs don't use the prefix "bi-" (ez ê rakim , ew ê rake , ...)
-- 3) Compound verbs, construction with non-verbal element (the noun is not attached to the verb):
-- - Left of the simple verb: "hez kirin" ("hez" + "kirin"), "li dar xistin" ("li dar" + "xistin"), ...
-- - Right of the simple verb: "kirin der" ("kirin" + "der"), "girtin ser xwe" ("girtin" + "ser xwe"), ...
-- - Compound verbs use the prefix "bi-" (ez ê hez bi-kim , ew ê hez bi-ke )
-- STRUCTURE: preSimpleVerb + spacing + simpleVerb + postSimpleVerb
-- EX. kirin: preSimpleVerb=''; spacing=false; simpleVerb='kirin'; postSimpleVerb=''
-- rakirin: preSimpleVerb='ra'; spacing=false; simpleVerb='kirin'; postSimpleVerb=''
-- hez kirin: preSimpleVerb='hez'; spacing=true; simpleVerb='kirin'; postSimpleVerb=''
-- pev çûn: preSimpleVerb='pev'; spacing=true; simpleVerb='çûn'; postSimpleVerb=''
-- kirin der: preSimpleVerb=''; spacing=false; simpleVerb='kirin'; postSimpleVerb='der'
-- WARNING: Conjugation can vary depending on the type of verb.
-- For example, in the future tense,the prefix "bi" is used for compound verbs,
-- but not for preverbal verbs, see the function that manages it "tenseRules" table.
-- This table does not yet support the mixed case: a verb composed of a noun and a preverb verb.
-- =============================================================================
function export.verbStruct(isCompoundVerb, preSimpleVerb)
local struct
if (preSimpleVerb and preSimpleVerb ~= '' and not isCompoundVerb) then
struct = 'preverbVerb'
elseif isCompoundVerb then
struct = 'compoundVerb'
else
struct = 'simpleVerb'
end
return struct
end
-- ================================================================
-- INFLECTIONAL ENDINGS
-- Assigns verb inflectional endings (suffixes) to all tenses
-- ================================================================
local getEndings = {}
do
-- ───────────────────────────────────────────────────────────────
-- Ending using present stem
-- ───────────────────────────────────────────────────────────────
getEndings['present'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends = {}
if mw.ustring.match(stem, '[aeêiîouû]$') then
ends['std'] = {s1='m', s2='yî', s3='', p1='n', p2='n', p3='n'}
ends['rojhilatî'] = {s1='m', s2='(y)', s3='t', p1='yn', p2='n', p3='n'}
else
ends['std'] = {s1='im', s2='î', s3='e', p1='in', p2='in', p3='in'}
ends['rojhilatî'] = {s1='im', s2='î', s3='<u>it</u>/ît', p1='în', p2='in', p3='in'}
end
return ends
end
-- ───────────────────────────────────────────────────────────────
-- Ind. preterite + ind. imperfect ending
-- ───────────────────────────────────────────────────────────────
getEndings['past'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends
if mw.ustring.match(stem, '[aeêiouû]$') then
ends = {s1='m', s2='yî', s3='', p1='n', p2='n', p3='n'}
elseif mw.ustring.match(stem, 'î$') then
-- if self.name == 'indImperfect' then
-- -- special indicative ind. imperfect rule
-- ends = {s1='yam', s2='yayî', s3='ya', p1='yan', p2='yan', p3='yan'}
-- end
ends = {s1='m', s2='', s3='', p1='n', p2='n', p3='n'}
else
ends = {s1='im', s2='î', s3='', p1='in', p2='in', p3='in'}
end
return ends
end
-- ───────────────────────────────────────────────────────────────
-- Compound endings with auxiliary "bûn"
-- Inflectional endings are created by taking the different forms of the
-- verb "bûn" (with present stem "-b-" and past stem "-bû-") and
-- adding an "i-" prefix before them: "i-b-im", "i-bû-m", "i-bû-me", "i-bû-ma".
-- This "i-" varies according to the final letter of the verb stem.
-- ───────────────────────────────────────────────────────────────
local function normalize_i(stem)
local prfx_i = "i"
if mw.ustring.match(stem, "ya$") or
mw.ustring.match(stem, "[îû]$") then -- cf. karîn (-karî-)
prfx_i = ""
elseif mw.ustring.match(stem, '[aeêiou]$') then
prfx_i = "yi"
end
return prfx_i
end
getEndings['ibim'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bim", p1 = prfx_i .. "bin",
s2 = prfx_i .. "bî", p2 = prfx_i .. "bin",
s3 = prfx_i .. "be", p3 = prfx_i .. "bin"
}
end
getEndings['ibûm'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bûm", p1 = prfx_i .. "bûn",
s2 = prfx_i .. "bûyî", p2 = prfx_i .. "bûn",
s3 = prfx_i .. "bû", p3 = prfx_i .. "bûn"
}
end
getEndings['ibûme'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bûme", p1 = prfx_i .. "bûne",
s2 = prfx_i .. "bûyiye", p2 = prfx_i .. "bûne",
s3 = prfx_i .. "bûye", p3 = prfx_i .. "bûne"
}
end
getEndings['ibûma'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bûma", p1 = prfx_i .. "bûna",
s2 = prfx_i .. "bûyayî", p2 = prfx_i .. "bûna",
s3 = prfx_i .. "bûya", p3 = prfx_i .. "bûna"
}
end
-- ───────────────────────────────────────────────────────────────
-- Ind. perfect ending.
-- ───────────────────────────────────────────────────────────────
getEndings['ime'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends
if mw.ustring.match(stem, '[aeêiîouû]$') then
ends = {s1="me", s2="yî", s3="ye", p1="ne", p2="ne", p3="ne"}
else
ends = {s1="ime", s2="iyî", s3="iye", p1="ine", p2="ine", p3="ine"}
end
return ends
end
-- ───────────────────────────────────────────────────────────────
-- Subj. Imperfect ending.
-- ───────────────────────────────────────────────────────────────
getEndings['ama'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends
-- The doublet in "-iyan" of verbs in -"în" (gerîn/-geriya-, kenîn/-keniya-, ...),
-- in the conditional and subjunctive moods, a doublet "yaya" appears; it's removed.
-- -yayayî → -yayî; -yaya → -ya
if mw.ustring.match(stem, '(ya)$') then
ends = {s1="ma", s2="yî", s3="", p1="na", p2="na", p3="na"}
elseif mw.ustring.match(stem, '[aeêiîouû]$') then
ends = {s1="ma", s2="yayî", s3="ya", p1="na", p2="na", p3="na"}
else
ends = {s1="ama", s2="ayî", s3="a", p1="ana", p2="ana", p3="ana"}
end
return ends
end
end
-- =============================================================================
-- RULES FOR PREVERBS: "bi-" and "di-"
-- There are two preverbs: "bi-" and "di-". These preverbs can change form
-- depending on the first letters of the verb’s present stem or past stem.
-- =============================================================================
local getPreverb = {}
do
getPreverb['bi'] = function (self, opts)
opts = opts or {}
local stem = opts.stem
local verbStruct = opts.verbStruct
local overridePreverb = opts.overridePreverb
local accent = opts.accent
-- Devoka rojhilatî:
-- @Ferhengvan: Dema bêt bi lêkera alîkar "ê / dê" û bi rehê lêkerê yê
-- dema niha û pêşgirên kesî tê çêkirin. Pêşgira "bi-" li destpêka lêkera
-- serekî nîne: - ez ê / dê xw-im (standard: ez ê/dê bi-xw-im).
if (self.name == 'indFuture' and accent == 'rojhilatî') then
return ''
end
-- Preverb verbs don't use the preverb "bi-": ra-kirin (ez ê rakim), ve-xwarin (ez ê vexwim) , ...
-- But compound verb and simple verbs use it: hez kirin (ez ê hez bi-kim), lê bigirin (ez ê lê bi-girim), ...
if (verbStruct == 'preverbVerb') then
return ''
end
-- If the preverb "bi-" is provided.
if (self.stem == 'present' and overridePreverb.presentBi) then
return overridePreverb.presentBi
elseif (self.stem == 'past' and overridePreverb.pastBi) then
return overridePreverb.pastBi
elseif overridePreverb.sameBi then
return overridePreverb.sameBi
end
-- Modification of the preverbe "bi-" according to the last letter of the stem.
if mw.ustring.match(stem, '^[aeêiîouû]') then
return 'b'
end
return 'bi'
end
getPreverb['di'] = function (self, opts)
opts = opts or {}
local stem = opts.stem
local overridePreverb = opts.overridePreverb
-- If the preverb "di" is provided.
if (self.stem == 'present' and overridePreverb.presentDi) then
return overridePreverb.presentDi
elseif (self.stem == 'past' and overridePreverb.pastDi) then
return overridePreverb.pastDi
elseif overridePreverb.sameDi then
return overridePreverb.sameDi
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 (self, opts)
-- self: reserved for future use
local _ = self -- delete the warning (unused argument)
opts = opts or {}
local stem = opts.stem
local overrideNa = opts.overrideNegPrefix.presentNa
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 (self, opts)
opts = opts or {}
local stem = opts.stem
local tenseName = self.name
local impNegForm = opts.impNegForm -- form "1" or "2" of imp.
local overrideNegPrefix = opts.overrideNegPrefix
local negPrefix = 'ne'
-- Bo neyînî: pêşgira "di-" tenê di nav dema "indImperfect" de tê bikaranîn.
-- ji ber vê yekê 'negPrefix' hertim (?) 'ne' ye ji ber ku dikeve pêş
-- pêşgira "di-": wê/wî ne-di-elimand (elimandin)
if (tenseName == 'indImperfect') then
return '<b>' .. negPrefix .. '</b>'
end
-- Override
if (overrideNegPrefix.impMe or overrideNegPrefix.presentNe
or overrideNegPrefix.pastNe
or overrideNegPrefix.sameNe) then
-- Ovverride imp.
if (tenseName == 'impPresent') then
if (impNegForm == 1 and overrideNegPrefix.impMe) then
return '<b>' .. overrideNegPrefix.impMe .. '</b>'
elseif (impNegForm == 1 and overrideNegPrefix.presentNe and
find(overrideNegPrefix.presentNe, '^n')) then
--For the "me-" form, we replace the "n" with an "m".
return '<b>' .. gsub(overrideNegPrefix.presentNe, '^(.)', 'm') .. '</b>'
elseif (impNegForm == 1 and overrideNegPrefix.sameNe and
find(overrideNegPrefix.sameNe, '^n')) then
--For the "me-" form, we replace the "n" with an "m".
return '<b>' .. gsub(overrideNegPrefix.sameNe, '^(.)', 'm') .. '</b>'
elseif (impNegForm == 2 and overrideNegPrefix.presentNe) then
return '<b>' .. overrideNegPrefix.presentNe .. '</b>'
elseif (impNegForm == 2 and overrideNegPrefix.sameNe) then
return '<b>' .. overrideNegPrefix.sameNe .. '</b>'
end
else
-- For other tenses besides the imperative
if (self.stem == 'present' and overrideNegPrefix.presentNe) then
return '<b>' .. overrideNegPrefix.presentNe .. '</b>'
elseif (self.stem == 'past' and overrideNegPrefix.pastNe) then
return '<b>' .. overrideNegPrefix.pastNe .. '</b>'
elseif overrideNegPrefix.sameNe then
return '<b>' .. overrideNegPrefix.sameNe .. '</b>'
end
end
end
-- There are two forms of construction of the imperative,
-- one with the prefix "me-" (1) and the other (2) 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 overridePreverb = {
-- Preverbs (bi-, di)
presentBi = opts.presentBi or nil,
presentDi = opts.presentDi or nil,
pastBi = opts.pastBi or nil,
pastDi = opts.pastDi or nil,
-- Same preverbs ("past" and "present" stem)
sameBi = opts.sameBi or nil,
sameDi = opts.sameDi or nil,
}
local overrideNegPrefix = {
-- Neg. prefix (na-, ne-)
presentNa = opts.presentNa or nil,
presentNe = opts.presentNe or nil,
pastNe = opts.pastNe or nil,
-- same neg. prefix (for past and present stem)
sameNe = opts.sameNe or nil,
impMe = opts.impMe 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 1
-- Accent/ Devok
local accent = opts.accent or 'std'
-- If "tags='na'", remove links/tags
local tags = opts.tags or 'erê'
-- If addPreverbParticles='na', remove preverb particles (ê/dê) before
-- the conjugated verbs.
local addPreverbParticles = opts.addPreverbParticles or 'erê'
-- We add a space to the left of the "postSimpleVerb" because it shouldn't be attached
-- to the simple verb.
if (postSimpleVerb ~= '' and postSimpleVerb ~=nil) then
postSimpleVerb = ' ' .. postSimpleVerb
end
-- Access to the classification table and retrieval of verb tense parameters
local infoTense = deepCopy(export.tenseRules[tense], 'copy') or false
-- We check that this tense is indeed in table "tenseRules".
if (not infoTense) then
return '<span style="color:red">Unknown tense: ' .. tense ..'</span>'
end
-- We check that one of the two parameters of the stem is given
if (infoTense.stem == 'present' and not presentStem) then
return '<span style="color:red">presentStem parameter required</span>'
elseif (infoTense.stem == 'past' and not pastStem) then
return '<span style="color:red">pasttStem parameter required</span>'
end
-- Choice between the present stem or past stem
local stem = (infoTense.stem == 'present') and presentStem or pastStem
--────────────────────────────
-- Conjugation construction --
-- ───────────────────────────
local preverb = ''
local negPrefix = ''
-- +++++++++++++++++++++++++++
-- Lêkerin nestandard --
-- +++++++++++++++++++++++++++
-- çûn
if (stem == 'her' and pastStem == 'çû') then
if tense == 'indPresent' then
if isNegative then
stem = 'r'
else
stem = 'er'
preverb = 't'
end
elseif ({impPresent=true, indFuture=true, subjPresent=true})[tense] then
preverb = ''
if isNegative then
stem = 'r'
else
stem = 'her'
end
end
end
-- hatin
if (stem == 'wer' and pastStem == 'hat') then
if ({impPresent=true, indFuture=true, subjPresent=true})[tense] then
if isNegative then
stem = 'ê'
else
overridePreverb.presentBi = ''
stem = 'wer'
end
elseif (tense == 'indPresent') then
stem = 'ê'
end
end
-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- Ruturns the verb type: "simpleVerb" or "preverbVerb" or "compoundVerb"
local verbStruct = export.verbStruct(isCompoundVerb, preSimpleVerb)
if isNegative then
negPrefix = infoTense:negPrefix{stem=stem,
impNegForm=impNegForm,
overrideNegPrefix=overrideNegPrefix}
if infoTense.negPreverb then
preverb = infoTense:negPreverb{stem=stem, verbStruct=verbStruct,
overridePreverb=overridePreverb}
end
else
if infoTense.preverb then
preverb = infoTense:preverb{stem=stem, verbStruct=verbStruct,
overridePreverb=overridePreverb,
accent=accent}
end
end
infoTense.conj = {}
local spacing = isCompoundVerb and ' ' or ''
local endings = infoTense:endings(stem)
-- 'rojhilatî' accent (devok) for present stem
if (infoTense.stem == 'present') then
if (accent == 'rojhilatî') then
endings = endings['rojhilatî']
else
endings = endings['std']
end
end
local preverbParticles = export.getPreverbParticules(infoTense.preverbParticle, infoTense.stem, isTransitive)
local isErgative = isTransitive and (infoTense.stem == 'past')
-- Creating the conjugation table for a given tense
for _, pers in ipairs(export.order) do
local ending
local conjSimbleVerb
local conjVerb
if isErgative then
ending = endings.s3
else
ending = endings[pers]
end
-- Adding space after the preverbal particle, and
-- if "addPreverbParticles='na'": remove preverb particles (ê/dê).
local preverbParticle = ''
if infoTense.preverbParticle and addPreverbParticles ~= 'na' then
preverbParticle = preverbParticles[pers] .. ' '
end
conjSimbleVerb = negPrefix .. preverb .. stem .. ending
-- Adding prefixe and suffixe
conjVerb = preSimpleVerb .. spacing .. conjSimbleVerb .. postSimpleVerb
-- Spelling correction(îy -> iy)
conjVerb = 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,
-- overridePreverb:
presentBi = frame['nihaBi'] or nil,
presentDi = frame['nihaDi'] or nil,
pastBi = frame['borîBi'] or nil,
pastDi = frame['borîDi'] or nil,
sameBi = frame['bi'] or nil,
sameDi = frame['di'] or nil,
-- overrideNegPrefix:
presentNa = frame['na'] or nil,
presentNe = frame['nihaNe'] or nil,
pastNe = frame['borîNe'] or nil,
sameNe = frame['ne'] or nil,
impMe = frame['me'] or nil,
impNegForm = 1,
tags = args['lînk'] or 'erê',
accent = args['devok'] or 'std',
}
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 '',
-- overridePreverb:
presentBi = frame['nihaBi'] or nil,
presentDi = frame['nihaDi'] or nil,
pastBi = frame['borîBi'] or nil,
pastDi = frame['borîDi'] or nil,
sameBi = frame['bi'] or nil,
sameDi = frame['di'] or nil,
-- overrideNegPrefix:
presentNa = frame['na'] or nil,
presentNe = frame['nihaNe'] or nil,
pastNe = frame['borîNe'] or nil,
sameNe = frame['ne'] or nil,
impMe = frame['me'] or nil,
impNegForm = 1,
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
7mk75q416jhutlviv152duhhs4oc9sx
6237522
6237521
2026-06-12T09:20:47Z
Ghybu
1393
6237522
Scribunto
text/plain
-- Modula tewandina lêkerên kurmancî
local export = {}
-- Load irregular forms table
-- local irreg = require('Module:ku-tewandin/nestandard')
local langKu = require("Modul:languages").getByCode("ku")
local link = require('Module:links').language_link
local shallowCopy = require("Module:table/shallowCopy")
local deepCopy = require("Module:table/deepCopy")
local gsub = mw.ustring.gsub
local find = mw.ustring.find
-- =============================================================================
-- Pronouns in Kurmanji
-- =============================================================================
export.order = {"s1", "s2", "s3", "p1", "p2", "p3"}
export.pronouns = {
s1 = "ez", p1 = "em",
s2 = "tu", p2 = "hûn",
s3 = "ew", p3 = "ew"
}
export.obliquePronouns = {
s1 = "min", p1 = "me",
s2 = "te", p2 = "we",
s3 = "wê/wî", p3 = "wan"
}
export.agents = {
s1 = "te, wî, wê, we, wan", p1 = "te, wî, wê, we, wan",
s2 = "min, wî, wê, me, wan", p2 = "min, wî, wê, me, wan",
s3 = "min, te, wî, wê, me, we, wan", p3 = "min, te, wî, wê, me, we, wan"
}
-- Oblique pronoun (green)
export.obliquePronounsGreen = {
s1 = '<span style="color:green">min</span>',
s2 = '<span style="color:green">te</span>',
s3 = '<span style="color:green">wê/wî</span>',
p1 = '<span style="color:green">me</span>',
p2 = '<span style="color:green">we</span>',
p3 = '<span style="color:green">wan</span>'
}
-- ─────────────────────────────────────────────────────────────────────────────
-- 1) This function returns correct subject/agent pronoun, ergativity rule:
-- - Transitive verbs in past tenses → oblique pronoun (green) = agent
-- - All other cases → direct pronoun (no color) = subject
-- 2) Also add the subjunctive prefix "(bila)"
-- ─────────────────────────────────────────────────────────────────────────────
function export.conjPronouns(stemType, mode, isTransitive)
local pronouns = shallowCopy(export.pronouns)
-- Ergativity in kurdish: transitive verbs that are conjugated with the past tense stem are
-- conjugated according to the object, not the subject.
-- Therefore, to have an ergative construction,
-- the verb must be transitive and its stem must be the stem of the past tense.
local isErgative = isTransitive and (stemType == 'past')
-- If it's ergative, we use oblique pronouns: "min", "te", ...
-- If it's not ergative, we use normal pronouns: "ez", "tu", ...
if isErgative then
pronouns = shallowCopy(export.obliquePronounsGreen)
end
-- For the subjunctive mood, we add "(bila)" at the beginning.
if mode == 'subjunctive' then
local subjPrefix = '<span style="color:gray">(bila)</span>'
for _, pers in ipairs(export.order) do
pronouns[pers] = subjPrefix .. ' ' .. pronouns[pers]
end
end
return pronouns
end
-- =============================================================================
-- VERBAL STRUCTURE IN THE INFINITIVE:
-- Verbs in the infinitive appear in three main forms:
-- 1) Simple verb (indivisible light verb):
-- - ex.: "kirin", "çûn", "xwarin", ...
-- 2) Verbs with preverbs (preverb + simple verb):
-- - ex.: "rakirin" (ra- + kirin), "çêkirin" (çê- + kirin), "vexwarin" (ve- + xwarin), ...
-- - Preverb verbs don't use the prefix "bi-" (ez ê rakim , ew ê rake , ...)
-- 3) Compound verbs, construction with non-verbal element (the noun is not attached to the verb):
-- - Left of the simple verb: "hez kirin" ("hez" + "kirin"), "li dar xistin" ("li dar" + "xistin"), ...
-- - Right of the simple verb: "kirin der" ("kirin" + "der"), "girtin ser xwe" ("girtin" + "ser xwe"), ...
-- - Compound verbs use the prefix "bi-" (ez ê hez bi-kim , ew ê hez bi-ke )
-- STRUCTURE: preSimpleVerb + spacing + simpleVerb + postSimpleVerb
-- EX. kirin: preSimpleVerb=''; spacing=false; simpleVerb='kirin'; postSimpleVerb=''
-- rakirin: preSimpleVerb='ra'; spacing=false; simpleVerb='kirin'; postSimpleVerb=''
-- hez kirin: preSimpleVerb='hez'; spacing=true; simpleVerb='kirin'; postSimpleVerb=''
-- pev çûn: preSimpleVerb='pev'; spacing=true; simpleVerb='çûn'; postSimpleVerb=''
-- kirin der: preSimpleVerb=''; spacing=false; simpleVerb='kirin'; postSimpleVerb='der'
-- WARNING: Conjugation can vary depending on the type of verb.
-- For example, in the future tense,the prefix "bi" is used for compound verbs,
-- but not for preverbal verbs, see the function that manages it "tenseRules" table.
-- This table does not yet support the mixed case: a verb composed of a noun and a preverb verb.
-- =============================================================================
function export.verbStruct(isCompoundVerb, preSimpleVerb)
local struct
if (preSimpleVerb and preSimpleVerb ~= '' and not isCompoundVerb) then
struct = 'preverbVerb'
elseif isCompoundVerb then
struct = 'compoundVerb'
else
struct = 'simpleVerb'
end
return struct
end
-- ================================================================
-- INFLECTIONAL ENDINGS
-- Assigns verb inflectional endings (suffixes) to all tenses
-- ================================================================
local getEndings = {}
do
-- ───────────────────────────────────────────────────────────────
-- Ending using present stem
-- ───────────────────────────────────────────────────────────────
getEndings['present'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends = {}
if mw.ustring.match(stem, '[aeêiîouû]$') then
ends['std'] = {s1='m', s2='yî', s3='', p1='n', p2='n', p3='n'}
ends['rojhilatî'] = {s1='m', s2='(y)', s3='t', p1='yn', p2='n', p3='n'}
else
ends['std'] = {s1='im', s2='î', s3='e', p1='in', p2='in', p3='in'}
ends['rojhilatî'] = {s1='im', s2='î', s3='<u>it</u>/ît', p1='în', p2='in', p3='in'}
end
return ends
end
-- ───────────────────────────────────────────────────────────────
-- Ind. preterite + ind. imperfect ending
-- ───────────────────────────────────────────────────────────────
getEndings['past'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends
if mw.ustring.match(stem, '[aeêiouû]$') then
ends = {s1='m', s2='yî', s3='', p1='n', p2='n', p3='n'}
elseif mw.ustring.match(stem, 'î$') then
-- if self.name == 'indImperfect' then
-- -- special indicative ind. imperfect rule
-- ends = {s1='yam', s2='yayî', s3='ya', p1='yan', p2='yan', p3='yan'}
-- end
ends = {s1='m', s2='', s3='', p1='n', p2='n', p3='n'}
else
ends = {s1='im', s2='î', s3='', p1='in', p2='in', p3='in'}
end
return ends
end
-- ───────────────────────────────────────────────────────────────
-- Compound endings with auxiliary "bûn"
-- Inflectional endings are created by taking the different forms of the
-- verb "bûn" (with present stem "-b-" and past stem "-bû-") and
-- adding an "i-" prefix before them: "i-b-im", "i-bû-m", "i-bû-me", "i-bû-ma".
-- This "i-" varies according to the final letter of the verb stem.
-- ───────────────────────────────────────────────────────────────
local function normalize_i(stem)
local prfx_i = "i"
if mw.ustring.match(stem, "ya$") or
mw.ustring.match(stem, "[îû]$") then -- cf. karîn (-karî-)
prfx_i = ""
elseif mw.ustring.match(stem, '[aeêiou]$') then
prfx_i = "yi"
end
return prfx_i
end
getEndings['ibim'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bim", p1 = prfx_i .. "bin",
s2 = prfx_i .. "bî", p2 = prfx_i .. "bin",
s3 = prfx_i .. "be", p3 = prfx_i .. "bin"
}
end
getEndings['ibûm'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bûm", p1 = prfx_i .. "bûn",
s2 = prfx_i .. "bûyî", p2 = prfx_i .. "bûn",
s3 = prfx_i .. "bû", p3 = prfx_i .. "bûn"
}
end
getEndings['ibûme'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bûme", p1 = prfx_i .. "bûne",
s2 = prfx_i .. "bûyiye", p2 = prfx_i .. "bûne",
s3 = prfx_i .. "bûye", p3 = prfx_i .. "bûne"
}
end
getEndings['ibûma'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bûma", p1 = prfx_i .. "bûna",
s2 = prfx_i .. "bûyayî", p2 = prfx_i .. "bûna",
s3 = prfx_i .. "bûya", p3 = prfx_i .. "bûna"
}
end
-- ───────────────────────────────────────────────────────────────
-- Ind. perfect ending.
-- ───────────────────────────────────────────────────────────────
getEndings['ime'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends
if mw.ustring.match(stem, '[aeêiîouû]$') then
ends = {s1="me", s2="yî", s3="ye", p1="ne", p2="ne", p3="ne"}
else
ends = {s1="ime", s2="iyî", s3="iye", p1="ine", p2="ine", p3="ine"}
end
return ends
end
-- ───────────────────────────────────────────────────────────────
-- Subj. Imperfect ending.
-- ───────────────────────────────────────────────────────────────
getEndings['ama'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends
-- The doublet in "-iyan" of verbs in -"în" (gerîn/-geriya-, kenîn/-keniya-, ...),
-- in the conditional and subjunctive moods, a doublet "yaya" appears; it's removed.
-- -yayayî → -yayî; -yaya → -ya
if mw.ustring.match(stem, '(ya)$') then
ends = {s1="ma", s2="yî", s3="", p1="na", p2="na", p3="na"}
elseif mw.ustring.match(stem, '[aeêiîouû]$') then
ends = {s1="ma", s2="yayî", s3="ya", p1="na", p2="na", p3="na"}
else
ends = {s1="ama", s2="ayî", s3="a", p1="ana", p2="ana", p3="ana"}
end
return ends
end
end
-- =============================================================================
-- RULES FOR PREVERBS: "bi-" and "di-"
-- There are two preverbs: "bi-" and "di-". These preverbs can change form
-- depending on the first letters of the verb’s present stem or past stem.
-- =============================================================================
local getPreverb = {}
do
getPreverb['bi'] = function (self, opts)
opts = opts or {}
local stem = opts.stem
local verbStruct = opts.verbStruct
local overridePreverb = opts.overridePreverb
local accent = opts.accent
-- Devoka rojhilatî:
-- @Ferhengvan: Dema bêt bi lêkera alîkar "ê / dê" û bi rehê lêkerê yê
-- dema niha û pêşgirên kesî tê çêkirin. Pêşgira "bi-" li destpêka lêkera
-- serekî nîne: - ez ê / dê xw-im (standard: ez ê/dê bi-xw-im).
if (self.name == 'indFuture' and accent == 'rojhilatî') then
return ''
end
-- Preverb verbs don't use the preverb "bi-": ra-kirin (ez ê rakim), ve-xwarin (ez ê vexwim) , ...
-- But compound verb and simple verbs use it: hez kirin (ez ê hez bi-kim), lê bigirin (ez ê lê bi-girim), ...
if (verbStruct == 'preverbVerb') then
return ''
end
-- If the preverb "bi-" is provided.
if (self.stem == 'present' and overridePreverb.presentBi) then
return overridePreverb.presentBi
elseif (self.stem == 'past' and overridePreverb.pastBi) then
return overridePreverb.pastBi
elseif overridePreverb.sameBi then
return overridePreverb.sameBi
end
-- Modification of the preverbe "bi-" according to the last letter of the stem.
if mw.ustring.match(stem, '^[aeêiîouû]') then
return 'b'
end
return 'bi'
end
getPreverb['di'] = function (self, opts)
opts = opts or {}
local stem = opts.stem
local overridePreverb = opts.overridePreverb
-- If the preverb "di" is provided.
if (self.stem == 'present' and overridePreverb.presentDi) then
return overridePreverb.presentDi
elseif (self.stem == 'past' and overridePreverb.pastDi) then
return overridePreverb.pastDi
elseif overridePreverb.sameDi then
return overridePreverb.sameDi
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 (self, opts)
-- self: reserved for future use
local _ = self -- delete the warning (unused argument)
opts = opts or {}
local stem = opts.stem
local overrideNa = opts.overrideNegPrefix.presentNa
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 (self, opts)
opts = opts or {}
local stem = opts.stem
local tenseName = self.name
local impNegForm = opts.impNegForm -- form "1" or "2" of imp.
local overrideNegPrefix = opts.overrideNegPrefix
local negPrefix = 'ne'
-- Bo neyînî: pêşgira "di-" tenê di nav dema "indImperfect" de tê bikaranîn.
-- ji ber vê yekê 'negPrefix' hertim (?) 'ne' ye ji ber ku dikeve pêş
-- pêşgira "di-": wê/wî ne-di-elimand (elimandin)
if (tenseName == 'indImperfect') then
return '<b>' .. negPrefix .. '</b>'
end
-- Override
if (overrideNegPrefix.impMe or overrideNegPrefix.presentNe
or overrideNegPrefix.pastNe
or overrideNegPrefix.sameNe) then
-- Ovverride imp.
if (tenseName == 'impPresent') then
if (impNegForm == 1 and overrideNegPrefix.impMe) then
return '<b>' .. overrideNegPrefix.impMe .. '</b>'
elseif (impNegForm == 1 and overrideNegPrefix.presentNe and
find(overrideNegPrefix.presentNe, '^n')) then
--For the "me-" form, we replace the "n" with an "m".
return '<b>' .. gsub(overrideNegPrefix.presentNe, '^(.)', 'm') .. '</b>'
elseif (impNegForm == 1 and overrideNegPrefix.sameNe and
find(overrideNegPrefix.sameNe, '^n')) then
--For the "me-" form, we replace the "n" with an "m".
return '<b>' .. gsub(overrideNegPrefix.sameNe, '^(.)', 'm') .. '</b>'
elseif (impNegForm == 2 and overrideNegPrefix.presentNe) then
return '<b>' .. overrideNegPrefix.presentNe .. '</b>'
elseif (impNegForm == 2 and overrideNegPrefix.sameNe) then
return '<b>' .. overrideNegPrefix.sameNe .. '</b>'
end
else
-- For other tenses besides the imperative
if (self.stem == 'present' and overrideNegPrefix.presentNe) then
return '<b>' .. overrideNegPrefix.presentNe .. '</b>'
elseif (self.stem == 'past' and overrideNegPrefix.pastNe) then
return '<b>' .. overrideNegPrefix.pastNe .. '</b>'
elseif overrideNegPrefix.sameNe then
return '<b>' .. overrideNegPrefix.sameNe .. '</b>'
end
end
end
-- There are two forms of construction of the imperative,
-- one with the prefix "me-" (1) and the other (2) 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 overridePreverb = {
-- Preverbs (bi-, di)
presentBi = opts.presentBi or nil,
presentDi = opts.presentDi or nil,
pastBi = opts.pastBi or nil,
pastDi = opts.pastDi or nil,
-- Same preverbs ("past" and "present" stem)
sameBi = opts.sameBi or nil,
sameDi = opts.sameDi or nil,
}
local overrideNegPrefix = {
-- Neg. prefix (na-, ne-)
presentNa = opts.presentNa or nil,
presentNe = opts.presentNe or nil,
pastNe = opts.pastNe or nil,
-- same neg. prefix (for past and present stem)
sameNe = opts.sameNe or nil,
impMe = opts.impMe 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 1
-- Accent/ Devok
local accent = opts.accent or 'std'
-- If "tags='na'", remove links/tags
local tags = opts.tags or 'erê'
-- If addPreverbParticles='na', remove preverb particles (ê/dê) before
-- the conjugated verbs.
local addPreverbParticles = opts.addPreverbParticles or 'erê'
-- We add a space to the left of the "postSimpleVerb" because it shouldn't be attached
-- to the simple verb.
if (postSimpleVerb ~= '' and postSimpleVerb ~=nil) then
postSimpleVerb = ' ' .. postSimpleVerb
end
-- Access to the classification table and retrieval of verb tense parameters
local infoTense = deepCopy(export.tenseRules[tense], 'copy') or false
-- We check that this tense is indeed in table "tenseRules".
if (not infoTense) then
return '<span style="color:red">Unknown tense: ' .. tense ..'</span>'
end
-- We check that one of the two parameters of the stem is given
if (infoTense.stem == 'present' and not presentStem) then
return '<span style="color:red">presentStem parameter required</span>'
elseif (infoTense.stem == 'past' and not pastStem) then
return '<span style="color:red">pasttStem parameter required</span>'
end
-- Choice between the present stem or past stem
local stem = (infoTense.stem == 'present') and presentStem or pastStem
--────────────────────────────
-- Conjugation construction --
-- ───────────────────────────
local preverb = ''
local negPrefix = ''
-- +++++++++++++++++++++++++++
-- Lêkerin nestandard --
-- +++++++++++++++++++++++++++
-- çûn
if (stem == 'her' and pastStem == 'çû') then
if tense == 'indPresent' then
if isNegative then
stem = 'r'
else
stem = 'er'
preverb = 't'
end
elseif ({impPresent=true, indFuture=true, subjPresent=true})[tense] then
preverb = ''
if isNegative then
stem = 'r'
else
stem = 'her'
end
end
end
-- hatin
if (stem == 'wer' and pastStem == 'hat') then
if ({impPresent=true, indFuture=true, subjPresent=true})[tense] then
if isNegative then
stem = 'ê'
else
overridePreverb.presentBi = ''
stem = 'wer'
end
elseif (tense == 'indPresent') then
stem = 'ê'
end
end
-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- Ruturns the verb type: "simpleVerb" or "preverbVerb" or "compoundVerb"
local verbStruct = export.verbStruct(isCompoundVerb, preSimpleVerb)
if isNegative then
negPrefix = infoTense:negPrefix{stem=stem,
impNegForm=impNegForm,
overrideNegPrefix=overrideNegPrefix}
if infoTense.negPreverb then
preverb = infoTense:negPreverb{stem=stem, verbStruct=verbStruct,
overridePreverb=overridePreverb}
end
else
if infoTense.preverb then
preverb = infoTense:preverb{stem=stem, verbStruct=verbStruct,
overridePreverb=overridePreverb,
accent=accent}
end
end
infoTense.conj = {}
local spacing = isCompoundVerb and ' ' or ''
local endings = infoTense:endings(stem)
-- 'rojhilatî' accent (devok) for present stem
if (infoTense.stem == 'present') then
if (accent == 'rojhilatî') then
endings = endings['rojhilatî']
else
endings = endings['std']
end
end
local preverbParticles = export.getPreverbParticules(infoTense.preverbParticle, infoTense.stem, isTransitive)
local isErgative = isTransitive and (infoTense.stem == 'past')
-- Creating the conjugation table for a given tense
for _, pers in ipairs(export.order) do
local ending
local conjSimbleVerb
local conjVerb
if isErgative then
ending = endings.s3
else
ending = endings[pers]
end
-- Adding space after the preverbal particle, and
-- if "addPreverbParticles='na'": remove preverb particles (ê/dê).
local preverbParticle = ''
if infoTense.preverbParticle and addPreverbParticles ~= 'na' then
preverbParticle = preverbParticles[pers] .. ' '
end
conjSimbleVerb = negPrefix .. preverb .. stem .. ending
-- Adding prefixe and suffixe
conjVerb = preSimpleVerb .. spacing .. conjSimbleVerb .. postSimpleVerb
-- Spelling correction(îy -> iy)
conjVerb = 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
-- Remove duplicates
local function removeDuplicates(list)
local seen = {}
local result = {}
for _, value in ipairs(list) do
if not seen[value] then
seen[value] = true
table.insert(result, value)
end
end
return result
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
frag = removeDuplicates(frag)
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,
-- overridePreverb:
presentBi = frame['nihaBi'] or nil,
presentDi = frame['nihaDi'] or nil,
pastBi = frame['borîBi'] or nil,
pastDi = frame['borîDi'] or nil,
sameBi = frame['bi'] or nil,
sameDi = frame['di'] or nil,
-- overrideNegPrefix:
presentNa = frame['na'] or nil,
presentNe = frame['nihaNe'] or nil,
pastNe = frame['borîNe'] or nil,
sameNe = frame['ne'] or nil,
impMe = frame['me'] or nil,
impNegForm = 1,
tags = args['lînk'] or 'erê',
accent = args['devok'] or 'std',
}
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 '',
-- overridePreverb:
presentBi = frame['nihaBi'] or nil,
presentDi = frame['nihaDi'] or nil,
pastBi = frame['borîBi'] or nil,
pastDi = frame['borîDi'] or nil,
sameBi = frame['bi'] or nil,
sameDi = frame['di'] or nil,
-- overrideNegPrefix:
presentNa = frame['na'] or nil,
presentNe = frame['nihaNe'] or nil,
pastNe = frame['borîNe'] or nil,
sameNe = frame['ne'] or nil,
impMe = frame['me'] or nil,
impNegForm = 1,
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
hym9j6qmgaukdd57i3ixak07gbzbrb6
6237524
6237522
2026-06-12T09:31:20Z
Ghybu
1393
6237524
Scribunto
text/plain
-- Modula tewandina lêkerên kurmancî
local export = {}
-- Load irregular forms table
-- local irreg = require('Module:ku-tewandin/nestandard')
local langKu = require("Modul:languages").getByCode("ku")
local link = require('Module:links').language_link
local shallowCopy = require("Module:table/shallowCopy")
local deepCopy = require("Module:table/deepCopy")
local gsub = mw.ustring.gsub
local find = mw.ustring.find
-- =============================================================================
-- Pronouns in Kurmanji
-- =============================================================================
export.order = {"s1", "s2", "s3", "p1", "p2", "p3"}
export.pronouns = {
s1 = "ez", p1 = "em",
s2 = "tu", p2 = "hûn",
s3 = "ew", p3 = "ew"
}
export.obliquePronouns = {
s1 = "min", p1 = "me",
s2 = "te", p2 = "we",
s3 = "wê/wî", p3 = "wan"
}
export.agents = {
s1 = "te, wî, wê, we, wan", p1 = "te, wî, wê, we, wan",
s2 = "min, wî, wê, me, wan", p2 = "min, wî, wê, me, wan",
s3 = "min, te, wî, wê, me, we, wan", p3 = "min, te, wî, wê, me, we, wan"
}
-- Oblique pronoun (green)
export.obliquePronounsGreen = {
s1 = '<span style="color:green">min</span>',
s2 = '<span style="color:green">te</span>',
s3 = '<span style="color:green">wê/wî</span>',
p1 = '<span style="color:green">me</span>',
p2 = '<span style="color:green">we</span>',
p3 = '<span style="color:green">wan</span>'
}
-- ─────────────────────────────────────────────────────────────────────────────
-- 1) This function returns correct subject/agent pronoun, ergativity rule:
-- - Transitive verbs in past tenses → oblique pronoun (green) = agent
-- - All other cases → direct pronoun (no color) = subject
-- 2) Also add the subjunctive prefix "(bila)"
-- ─────────────────────────────────────────────────────────────────────────────
function export.conjPronouns(stemType, mode, isTransitive)
local pronouns = shallowCopy(export.pronouns)
-- Ergativity in kurdish: transitive verbs that are conjugated with the past tense stem are
-- conjugated according to the object, not the subject.
-- Therefore, to have an ergative construction,
-- the verb must be transitive and its stem must be the stem of the past tense.
local isErgative = isTransitive and (stemType == 'past')
-- If it's ergative, we use oblique pronouns: "min", "te", ...
-- If it's not ergative, we use normal pronouns: "ez", "tu", ...
if isErgative then
pronouns = shallowCopy(export.obliquePronounsGreen)
end
-- For the subjunctive mood, we add "(bila)" at the beginning.
if mode == 'subjunctive' then
local subjPrefix = '<span style="color:gray">(bila)</span>'
for _, pers in ipairs(export.order) do
pronouns[pers] = subjPrefix .. ' ' .. pronouns[pers]
end
end
return pronouns
end
-- =============================================================================
-- VERBAL STRUCTURE IN THE INFINITIVE:
-- Verbs in the infinitive appear in three main forms:
-- 1) Simple verb (indivisible light verb):
-- - ex.: "kirin", "çûn", "xwarin", ...
-- 2) Verbs with preverbs (preverb + simple verb):
-- - ex.: "rakirin" (ra- + kirin), "çêkirin" (çê- + kirin), "vexwarin" (ve- + xwarin), ...
-- - Preverb verbs don't use the prefix "bi-" (ez ê rakim , ew ê rake , ...)
-- 3) Compound verbs, construction with non-verbal element (the noun is not attached to the verb):
-- - Left of the simple verb: "hez kirin" ("hez" + "kirin"), "li dar xistin" ("li dar" + "xistin"), ...
-- - Right of the simple verb: "kirin der" ("kirin" + "der"), "girtin ser xwe" ("girtin" + "ser xwe"), ...
-- - Compound verbs use the prefix "bi-" (ez ê hez bi-kim , ew ê hez bi-ke )
-- STRUCTURE: preSimpleVerb + spacing + simpleVerb + postSimpleVerb
-- EX. kirin: preSimpleVerb=''; spacing=false; simpleVerb='kirin'; postSimpleVerb=''
-- rakirin: preSimpleVerb='ra'; spacing=false; simpleVerb='kirin'; postSimpleVerb=''
-- hez kirin: preSimpleVerb='hez'; spacing=true; simpleVerb='kirin'; postSimpleVerb=''
-- pev çûn: preSimpleVerb='pev'; spacing=true; simpleVerb='çûn'; postSimpleVerb=''
-- kirin der: preSimpleVerb=''; spacing=false; simpleVerb='kirin'; postSimpleVerb='der'
-- WARNING: Conjugation can vary depending on the type of verb.
-- For example, in the future tense,the prefix "bi" is used for compound verbs,
-- but not for preverbal verbs, see the function that manages it "tenseRules" table.
-- This table does not yet support the mixed case: a verb composed of a noun and a preverb verb.
-- =============================================================================
function export.verbStruct(isCompoundVerb, preSimpleVerb)
local struct
if (preSimpleVerb and preSimpleVerb ~= '' and not isCompoundVerb) then
struct = 'preverbVerb'
elseif isCompoundVerb then
struct = 'compoundVerb'
else
struct = 'simpleVerb'
end
return struct
end
-- ================================================================
-- INFLECTIONAL ENDINGS
-- Assigns verb inflectional endings (suffixes) to all tenses
-- ================================================================
local getEndings = {}
do
-- ───────────────────────────────────────────────────────────────
-- Ending using present stem
-- ───────────────────────────────────────────────────────────────
getEndings['present'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends = {}
if mw.ustring.match(stem, '[aeêiîouû]$') then
ends['std'] = {s1='m', s2='yî', s3='', p1='n', p2='n', p3='n'}
ends['rojhilatî'] = {s1='m', s2='(y)', s3='t', p1='yn', p2='n', p3='n'}
else
ends['std'] = {s1='im', s2='î', s3='e', p1='in', p2='in', p3='in'}
ends['rojhilatî'] = {s1='im', s2='î', s3='<u>it</u>/ît', p1='în', p2='in', p3='in'}
end
return ends
end
-- ───────────────────────────────────────────────────────────────
-- Ind. preterite + ind. imperfect ending
-- ───────────────────────────────────────────────────────────────
getEndings['past'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends
if mw.ustring.match(stem, '[aeêiouû]$') then
ends = {s1='m', s2='yî', s3='', p1='n', p2='n', p3='n'}
elseif mw.ustring.match(stem, 'î$') then
-- if self.name == 'indImperfect' then
-- -- special indicative ind. imperfect rule
-- ends = {s1='yam', s2='yayî', s3='ya', p1='yan', p2='yan', p3='yan'}
-- end
ends = {s1='m', s2='', s3='', p1='n', p2='n', p3='n'}
else
ends = {s1='im', s2='î', s3='', p1='in', p2='in', p3='in'}
end
return ends
end
-- ───────────────────────────────────────────────────────────────
-- Compound endings with auxiliary "bûn"
-- Inflectional endings are created by taking the different forms of the
-- verb "bûn" (with present stem "-b-" and past stem "-bû-") and
-- adding an "i-" prefix before them: "i-b-im", "i-bû-m", "i-bû-me", "i-bû-ma".
-- This "i-" varies according to the final letter of the verb stem.
-- ───────────────────────────────────────────────────────────────
local function normalize_i(stem)
local prfx_i = "i"
if mw.ustring.match(stem, "ya$") or
mw.ustring.match(stem, "[îû]$") then -- cf. karîn (-karî-)
prfx_i = ""
elseif mw.ustring.match(stem, '[aeêiou]$') then
prfx_i = "yi"
end
return prfx_i
end
getEndings['ibim'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bim", p1 = prfx_i .. "bin",
s2 = prfx_i .. "bî", p2 = prfx_i .. "bin",
s3 = prfx_i .. "be", p3 = prfx_i .. "bin"
}
end
getEndings['ibûm'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bûm", p1 = prfx_i .. "bûn",
s2 = prfx_i .. "bûyî", p2 = prfx_i .. "bûn",
s3 = prfx_i .. "bû", p3 = prfx_i .. "bûn"
}
end
getEndings['ibûme'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bûme", p1 = prfx_i .. "bûne",
s2 = prfx_i .. "bûyiye", p2 = prfx_i .. "bûne",
s3 = prfx_i .. "bûye", p3 = prfx_i .. "bûne"
}
end
getEndings['ibûma'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bûma", p1 = prfx_i .. "bûna",
s2 = prfx_i .. "bûyayî", p2 = prfx_i .. "bûna",
s3 = prfx_i .. "bûya", p3 = prfx_i .. "bûna"
}
end
-- ───────────────────────────────────────────────────────────────
-- Ind. perfect ending.
-- ───────────────────────────────────────────────────────────────
getEndings['ime'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends
if mw.ustring.match(stem, '[aeêiîouû]$') then
ends = {s1="me", s2="yî", s3="ye", p1="ne", p2="ne", p3="ne"}
else
ends = {s1="ime", s2="iyî", s3="iye", p1="ine", p2="ine", p3="ine"}
end
return ends
end
-- ───────────────────────────────────────────────────────────────
-- Subj. Imperfect ending.
-- ───────────────────────────────────────────────────────────────
getEndings['ama'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends
-- The doublet in "-iyan" of verbs in -"în" (gerîn/-geriya-, kenîn/-keniya-, ...),
-- in the conditional and subjunctive moods, a doublet "yaya" appears; it's removed.
-- -yayayî → -yayî; -yaya → -ya
if mw.ustring.match(stem, '(ya)$') then
ends = {s1="ma", s2="yî", s3="", p1="na", p2="na", p3="na"}
elseif mw.ustring.match(stem, '[aeêiîouû]$') then
ends = {s1="ma", s2="yayî", s3="ya", p1="na", p2="na", p3="na"}
else
ends = {s1="ama", s2="ayî", s3="a", p1="ana", p2="ana", p3="ana"}
end
return ends
end
end
-- =============================================================================
-- RULES FOR PREVERBS: "bi-" and "di-"
-- There are two preverbs: "bi-" and "di-". These preverbs can change form
-- depending on the first letters of the verb’s present stem or past stem.
-- =============================================================================
local getPreverb = {}
do
getPreverb['bi'] = function (self, opts)
opts = opts or {}
local stem = opts.stem
local verbStruct = opts.verbStruct
local overridePreverb = opts.overridePreverb
local accent = opts.accent
-- Devoka rojhilatî:
-- @Ferhengvan: Dema bêt bi lêkera alîkar "ê / dê" û bi rehê lêkerê yê
-- dema niha û pêşgirên kesî tê çêkirin. Pêşgira "bi-" li destpêka lêkera
-- serekî nîne: - ez ê / dê xw-im (standard: ez ê/dê bi-xw-im).
if (self.name == 'indFuture' and accent == 'rojhilatî') then
return ''
end
-- Preverb verbs don't use the preverb "bi-": ra-kirin (ez ê rakim), ve-xwarin (ez ê vexwim) , ...
-- But compound verb and simple verbs use it: hez kirin (ez ê hez bi-kim), lê bigirin (ez ê lê bi-girim), ...
if (verbStruct == 'preverbVerb') then
return ''
end
-- If the preverb "bi-" is provided.
if (self.stem == 'present' and overridePreverb.presentBi) then
return overridePreverb.presentBi
elseif (self.stem == 'past' and overridePreverb.pastBi) then
return overridePreverb.pastBi
elseif overridePreverb.sameBi then
return overridePreverb.sameBi
end
-- Modification of the preverbe "bi-" according to the last letter of the stem.
if mw.ustring.match(stem, '^[aeêiîouû]') then
return 'b'
end
return 'bi'
end
getPreverb['di'] = function (self, opts)
opts = opts or {}
local stem = opts.stem
local overridePreverb = opts.overridePreverb
-- If the preverb "di" is provided.
if (self.stem == 'present' and overridePreverb.presentDi) then
return overridePreverb.presentDi
elseif (self.stem == 'past' and overridePreverb.pastDi) then
return overridePreverb.pastDi
elseif overridePreverb.sameDi then
return overridePreverb.sameDi
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 (self, opts)
-- self: reserved for future use
local _ = self -- delete the warning (unused argument)
opts = opts or {}
local stem = opts.stem
local overrideNa = opts.overrideNegPrefix.presentNa
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 (self, opts)
opts = opts or {}
local stem = opts.stem
local tenseName = self.name
local impNegForm = opts.impNegForm -- form "1" or "2" of imp.
local overrideNegPrefix = opts.overrideNegPrefix
local negPrefix = 'ne'
-- Bo neyînî: pêşgira "di-" tenê di nav dema "indImperfect" de tê bikaranîn.
-- ji ber vê yekê 'negPrefix' hertim (?) 'ne' ye ji ber ku dikeve pêş
-- pêşgira "di-": wê/wî ne-di-elimand (elimandin)
if (tenseName == 'indImperfect') then
return '<b>' .. negPrefix .. '</b>'
end
-- Override
if (overrideNegPrefix.impMe or overrideNegPrefix.presentNe
or overrideNegPrefix.pastNe
or overrideNegPrefix.sameNe) then
-- Ovverride imp.
if (tenseName == 'impPresent') then
if (impNegForm == 1 and overrideNegPrefix.impMe) then
return '<b>' .. overrideNegPrefix.impMe .. '</b>'
elseif (impNegForm == 1 and overrideNegPrefix.presentNe and
find(overrideNegPrefix.presentNe, '^n')) then
--For the "me-" form, we replace the "n" with an "m".
return '<b>' .. gsub(overrideNegPrefix.presentNe, '^(.)', 'm') .. '</b>'
elseif (impNegForm == 1 and overrideNegPrefix.sameNe and
find(overrideNegPrefix.sameNe, '^n')) then
--For the "me-" form, we replace the "n" with an "m".
return '<b>' .. gsub(overrideNegPrefix.sameNe, '^(.)', 'm') .. '</b>'
elseif (impNegForm == 2 and overrideNegPrefix.presentNe) then
return '<b>' .. overrideNegPrefix.presentNe .. '</b>'
elseif (impNegForm == 2 and overrideNegPrefix.sameNe) then
return '<b>' .. overrideNegPrefix.sameNe .. '</b>'
end
else
-- For other tenses besides the imperative
if (self.stem == 'present' and overrideNegPrefix.presentNe) then
return '<b>' .. overrideNegPrefix.presentNe .. '</b>'
elseif (self.stem == 'past' and overrideNegPrefix.pastNe) then
return '<b>' .. overrideNegPrefix.pastNe .. '</b>'
elseif overrideNegPrefix.sameNe then
return '<b>' .. overrideNegPrefix.sameNe .. '</b>'
end
end
end
-- There are two forms of construction of the imperative,
-- one with the prefix "me-" (1) and the other (2) 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 overridePreverb = {
-- Preverbs (bi-, di)
presentBi = opts.presentBi or nil,
presentDi = opts.presentDi or nil,
pastBi = opts.pastBi or nil,
pastDi = opts.pastDi or nil,
-- Same preverbs ("past" and "present" stem)
sameBi = opts.sameBi or nil,
sameDi = opts.sameDi or nil,
}
local overrideNegPrefix = {
-- Neg. prefix (na-, ne-)
presentNa = opts.presentNa or nil,
presentNe = opts.presentNe or nil,
pastNe = opts.pastNe or nil,
-- same neg. prefix (for past and present stem)
sameNe = opts.sameNe or nil,
impMe = opts.impMe 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 1
-- Accent/ Devok
local accent = opts.accent or 'std'
-- If "tags='na'", remove links/tags
local tags = opts.tags or 'erê'
-- If addPreverbParticles='na', remove preverb particles (ê/dê) before
-- the conjugated verbs.
local addPreverbParticles = opts.addPreverbParticles or 'erê'
-- We add a space to the left of the "postSimpleVerb" because it shouldn't be attached
-- to the simple verb.
if (postSimpleVerb ~= '' and postSimpleVerb ~=nil) then
postSimpleVerb = ' ' .. postSimpleVerb
end
-- Access to the classification table and retrieval of verb tense parameters
local infoTense = deepCopy(export.tenseRules[tense], 'copy') or false
-- We check that this tense is indeed in table "tenseRules".
if (not infoTense) then
return '<span style="color:red">Unknown tense: ' .. tense ..'</span>'
end
-- We check that one of the two parameters of the stem is given
if (infoTense.stem == 'present' and not presentStem) then
return '<span style="color:red">presentStem parameter required</span>'
elseif (infoTense.stem == 'past' and not pastStem) then
return '<span style="color:red">pasttStem parameter required</span>'
end
-- Choice between the present stem or past stem
local stem = (infoTense.stem == 'present') and presentStem or pastStem
--────────────────────────────
-- Conjugation construction --
-- ───────────────────────────
local preverb = ''
local negPrefix = ''
-- +++++++++++++++++++++++++++
-- Lêkerin nestandard --
-- +++++++++++++++++++++++++++
-- çûn
if (stem == 'her' and pastStem == 'çû') then
if tense == 'indPresent' then
if isNegative then
stem = 'r'
else
stem = 'er'
overridePreverb.presentDi = 't'
end
elseif ({impPresent=true, indFuture=true, subjPresent=true})[tense] then
overridePreverb.presentBi = ''
if isNegative then
stem = 'r'
else
stem = 'her'
end
end
end
-- hatin
if (stem == 'wer' and pastStem == 'hat') then
if ({impPresent=true, indFuture=true, subjPresent=true})[tense] then
if isNegative then
stem = 'ê'
else
overridePreverb.presentBi = ''
stem = 'wer'
end
elseif (tense == 'indPresent') then
stem = 'ê'
end
end
-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- Ruturns the verb type: "simpleVerb" or "preverbVerb" or "compoundVerb"
local verbStruct = export.verbStruct(isCompoundVerb, preSimpleVerb)
if isNegative then
negPrefix = infoTense:negPrefix{stem=stem,
impNegForm=impNegForm,
overrideNegPrefix=overrideNegPrefix}
if infoTense.negPreverb then
preverb = infoTense:negPreverb{stem=stem, verbStruct=verbStruct,
overridePreverb=overridePreverb}
end
else
if infoTense.preverb then
preverb = infoTense:preverb{stem=stem, verbStruct=verbStruct,
overridePreverb=overridePreverb,
accent=accent}
end
end
infoTense.conj = {}
local spacing = isCompoundVerb and ' ' or ''
local endings = infoTense:endings(stem)
-- 'rojhilatî' accent (devok) for present stem
if (infoTense.stem == 'present') then
if (accent == 'rojhilatî') then
endings = endings['rojhilatî']
else
endings = endings['std']
end
end
local preverbParticles = export.getPreverbParticules(infoTense.preverbParticle, infoTense.stem, isTransitive)
local isErgative = isTransitive and (infoTense.stem == 'past')
-- Creating the conjugation table for a given tense
for _, pers in ipairs(export.order) do
local ending
local conjSimbleVerb
local conjVerb
if isErgative then
ending = endings.s3
else
ending = endings[pers]
end
-- Adding space after the preverbal particle, and
-- if "addPreverbParticles='na'": remove preverb particles (ê/dê).
local preverbParticle = ''
if infoTense.preverbParticle and addPreverbParticles ~= 'na' then
preverbParticle = preverbParticles[pers] .. ' '
end
conjSimbleVerb = negPrefix .. preverb .. stem .. ending
-- Adding prefixe and suffixe
conjVerb = preSimpleVerb .. spacing .. conjSimbleVerb .. postSimpleVerb
-- Spelling correction(îy -> iy)
conjVerb = 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
-- Remove duplicates
local function removeDuplicates(list)
local seen = {}
local result = {}
for _, value in ipairs(list) do
if not seen[value] then
seen[value] = true
table.insert(result, value)
end
end
return result
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
frag = removeDuplicates(frag)
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,
-- overridePreverb:
presentBi = frame['nihaBi'] or nil,
presentDi = frame['nihaDi'] or nil,
pastBi = frame['borîBi'] or nil,
pastDi = frame['borîDi'] or nil,
sameBi = frame['bi'] or nil,
sameDi = frame['di'] or nil,
-- overrideNegPrefix:
presentNa = frame['na'] or nil,
presentNe = frame['nihaNe'] or nil,
pastNe = frame['borîNe'] or nil,
sameNe = frame['ne'] or nil,
impMe = frame['me'] or nil,
impNegForm = 1,
tags = args['lînk'] or 'erê',
accent = args['devok'] or 'std',
}
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 '',
-- overridePreverb:
presentBi = frame['nihaBi'] or nil,
presentDi = frame['nihaDi'] or nil,
pastBi = frame['borîBi'] or nil,
pastDi = frame['borîDi'] or nil,
sameBi = frame['bi'] or nil,
sameDi = frame['di'] or nil,
-- overrideNegPrefix:
presentNa = frame['na'] or nil,
presentNe = frame['nihaNe'] or nil,
pastNe = frame['borîNe'] or nil,
sameNe = frame['ne'] or nil,
impMe = frame['me'] or nil,
impNegForm = 1,
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
at1m4sz3j4bvfea4ip4qitiiprvk3tb
Modul:ku-tewandin/tablo
828
628615
6237501
6237259
2026-06-12T02:52:07Z
Ghybu
1393
+
6237501
Scribunto
text/plain
local export = {}
local conj = require('Modul:ku-tewandin')
local lang = mw.getContentLanguage()
function export.tablo(frame)
local args = frame:getParent().args
local baseOpts = {
isTransitive = args['form'],
isCompoundVerb = args['valahî'] or false,
preSimpleVerb = args['pêşgir'] or '',
postSimpleVerb = args['paşgir'] or '',
accent = args['devok'] or 'std',
-- overridePreverb:
presentBi = args['nihaBi'] or nil,
presentDi = args['nihaDi'] or nil,
pastBi = args['borîBi'] or nil,
pastDi = args['borîDi'] or nil,
sameBi = args['bi'] or nil,
sameDi = args['di'] or nil,
-- overrideNegPrefix:
presentNa = args['na'] or nil,
presentNe = args['nihaNe'] or nil,
pastNe = args['borîNe'] or nil,
sameNe = args['ne'] or nil,
impMe = args['me'] or nil,
-- impNegForm = 1, -- By default negative form with 'me' (1).
-- tags = 'erê',
-- addPreverbParticles = 'erê',
}
local presentStems = {args['niha'], args['niha2'], args['niha3']}
local pastStems = {args['borî'], args['borî2'], args['borî3']}
if (baseOpts.isTransitive == 'gerguhêz') then
baseOpts.isTransitive = true
elseif (baseOpts.isTransitive == 'negerguhêz') then
baseOpts.isTransitive = false
else
return '<span style="color:red">form = gerghuhêz / negerguhêz</span>'
end
if (baseOpts.isCompoundVerb == 'erê') then
baseOpts.isCompoundVerb = true
else
baseOpts.isCompoundVerb = false
end
-- Conjugation table in all tenses
local infoTense = conj.conjugateAllTenses(baseOpts, presentStems, pastStems)
-- Negatives conjugations table
local negInfoTense = conj.conjugateAllTenses(baseOpts, presentStems, pastStems, 'negative')
-- Imperatrive form '2'; negative form with 'ne'
baseOpts.impNegForm = 2
local impNegForm2 = conj.conjugateLong(baseOpts, 'impPresent', presentStems, pastStems, 'negative').conj
-- Creation of internal conjugation tables for the different tenses
local function conjugateTable(tense)
local nameKu = lang:ucfirst(infoTense[tense].nameKu) -- Kurdish name
local nameEn = lang:ucfirst(infoTense[tense].nameEn) -- English name
local idName = infoTense[tense].name -- 'tenseRules' name (indPresent, ...)
local classStem = infoTense[tense].stem -- 'present' or 'past'
-- First, create the table header.
local tabHeader = '\n! colspan="2" id="' .. idName .. '"'
.. 'class="' .. classStem .. '-stem tense-table-title" |'
.. nameKu .. ' - <small><i>-{'.. nameEn ..'}-</i></small>'
.. '\n|-'
.. '\n! class="negative" | Erênî'
.. '\n! class="positive" | Neyînî'
.. '\n|-'
-- Create the table body.
local tabBody = ''
for _, pers in ipairs(conj.order) do
tabBody = tabBody .. '\n|' .. infoTense[tense].conj[pers]
.. '\n|' .. negInfoTense[tense].conj[pers]
.. '\n|-'
end
-- Create the table (header + body).
local tab = '\n{| cellpadding="2" class="tense-table"'
.. '\n|-'
.. tabHeader
.. tabBody
.. '\n|}'
return tab
end
--Retrieving some parameters for creating the main table header
local verb = args[1]
local transitivity = args['form']
local preSimpleVerb = args['pêşgir'] or ''
local postSimpleVerb = args['paşgir'] or ''
-- Cureyê lêkerê
local verbStruc = conj.verbStruct(baseOpts.isCompoundVerb, baseOpts.preSimpleVerb)
if (verbStruc == 'preverbVerb') then
verbStruc = 'pêkhatî'
elseif (verbStruc == 'compoundVerb') then
verbStruc = 'hevedudanî'
else
verbStruc = 'xwerû'
end
local prsStemsFormat = {}
for _, stem in ipairs(presentStems) do
if stem then prsStemsFormat[#prsStemsFormat+1] = preSimpleVerb .. '-' .. stem ..'-' end
end
local pstStemsFormat = {}
for _, stem in ipairs(pastStems) do
if stem then pstStemsFormat[#pstStemsFormat+1] = preSimpleVerb .. '-' .. stem ..'-' end
end
local prsStems = table.concat(prsStemsFormat, ' / ') .. postSimpleVerb
local pstStems = table.concat(pstStemsFormat, ' / ') .. postSimpleVerb
return
'{| align="center" class="conj-table"'
.. '\n|-'
.. '\n| colspan="8" class="title" | Tewandina lêkera [[' .. verb .. ']]<br><span style="font-weight:normal;">(' .. verbStruc .. ', ' .. transitivity .. ')</span>'
.. '\n|-'
.. '\n! colspan="2" class="present-stem" | Rehê dema niha'
.. '\n! colspan="6" style="font-weight:normal; text-align:center; border-bottom:dotted 1px grey;" | ' .. prsStems
.. '\n|-'
.. '\n! colspan="2" class="past-stem" | Rehê dema borî'
.. '\n! colspan="6" style="font-weight:normal; text-align:center;" | ' .. pstStems
.. '\n|-'
.. '\n|'
.. '\n|-'
.. '\n| colspan="8" id="imp" class="mood" | Raweya fermanî - <small><i>Imperative</i></small>'
.. '\n|-'
.. '\n| colspan="8" valign="top" | '
.. '\n{| cellpadding="2" class="tense-table"'
.. '\n|-'
.. '\n| colspan="2" class="present-stem" style="border-top:1px dotted grey; border-bottom:1px dotted grey"| '
.. '\n|-'
.. '\n! class="negative" | Erênî'
.. '\n! class="positive" | Neyînî'
.. '\n|-'
.. '\n| valign="top" | <span style="color:gray">(tû)</span> ' .. infoTense.impPresent.conj.s2
.. '\n| valign="top" | <span style="color:gray">(tû)</span> ' .. negInfoTense.impPresent.conj.s2
.. '<br> <span style="color:gray">(tû)</span> ' .. impNegForm2.s2
.. '\n|-'
.. '\n| valign="top" | <span style="color:gray">(hûn)</span> ' .. infoTense.impPresent.conj.p2
.. '\n| valign="top" | <span style="color:gray">(hûn)</span> ' .. negInfoTense.impPresent.conj.p2
.. '<br> <span style="color:gray">(hûn)</span> ' .. impNegForm2.p2
..'\n|}'
.. '\n|-'
.. '\n| colspan="8" id="ind" class="mood" | Raweya pêşkerî - <small><i>Indicative</i></small>'
.. '\n|-'
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('indPresent')
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('indPreterite')
.. '\n|-'
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('indImperfect')
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('indPluperfect')
.. '\n|-'
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('indFuture')
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('indFuturePerfect')
.. '\n|-'
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('indPerfect')
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('indNwPluperfect')
.. '\n|-'
.. '\n| colspan="8" id="subj" class="mood" | Raweya xwestekî - <small><i>Subjunctive</i></small>'
.. '\n|-'
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('subjPresent')
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('subjPreterite')
.. '\n|-'
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('subjImperfect')
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('subjPluperfect')
.. '\n|-'
.. '\n| colspan="8" id="cond" class="mood" | Raweya mercî - <small><i>Conditional</i></small>'
.. '\n|-'
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('condPresent')
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('condPreterite')
.. '\n|}'
end
return export
ilbe206lzczbs21kaz2xk17s9136z83
Modul:ku-tewandin/nestandard
828
628616
6237511
6237377
2026-06-12T07:13:56Z
Ghybu
1393
6237511
Scribunto
text/plain
local reh = {}
reh['ê'] = {
'hatin',
stem = 'present',
impPresent = {pos={s1='were', s2='werin'},
neg1={s1='meyê', s2='meyên'},
neg2={s1='neyê', s2='neyên'}
},
indFuture = {pos={s1='werim', s2='werî', s3='were',
p1 ='werin', p2='werin', p3='werin'},
neg={s1='neyêm', s2='neyêyî', s3='neyê',
p1='neyên', p2='neyên', p3='neyên'}
},
}
reh['ç'] = {
'çûn',
stem = 'present',
impPresent = {pos = {s1='here', s2='herin'},
neg1= {s1='mere', s2='merin'},
neg2= {s1='nere', s2='nerin'},
},
indPresent = {pos={s1='terim', s2='terî', s3='tere',
p1 ='terin', p2='terin', p3='terin'},
neg={s1='narim', s2='nerî', s3='nare',
p1='narin', p2='narin', p3='narin'}
},
indFuture = {pos={s1='herim', s2='herî', s3='here',
p1 ='herin', p2='herin', p3='herin'},
neg={s1='nerim', s2='nerî', s3='nere',
p1='nerin', p2='nerin', p3='nerin'}
},
}
reh['anî'] = {
'anîn',
stem = 'borî',
di = 'di', -- (d → di)
}
reh['axiv'] = {
'axivîn',
stem = 'present',
bi = 'bi', -- (b → di)
di = 'di', -- (d → di)
}
reh['axivî'] = {
'axivîn',
stem ='borî',
bi = 'bi',
di = 'di',
}
reh['afirîn'] = {
'afirîn',
stem = 'present',
di = 'di',
}
reh['şêr'] = {
'veşartin',
stem = 'present',
bi = '',
}
reh['nas'] = {
'nasîn',
stem='present',
na = 'na', -- (ni → na)
}
reh['vavêr'] = {
'vavartin',
stem = 'present',
na = 'na', -- (ni → na)
}
return reh
qpxxgyltv00lkjqcno4bbpqgs3l7gmj
Modul:ku-tewandin/tablo/ceribandin
828
1325207
6237478
6237323
2026-06-11T21:59:53Z
Ghybu
1393
6237478
Scribunto
text/plain
local export = {}
local conj = require('Modul:ku-tewandin/ceribandin')
local lang = mw.getContentLanguage()
function export.tablo(frame)
local args = frame:getParent().args
local baseOpts = {
isTransitive = args['form'],
isCompoundVerb = args['valahî'] or false,
preSimpleVerb = args['pêşgir'] or '',
postSimpleVerb = args['paşgir'] or '',
accent = args['devok'] or 'std',
overridePreverb = {
presentBi = frame['presentBi'] or nil,
presentDi = frame['presentDi'] or nil,
pastBi = frame['pastBi'] or nil,
pastDi = frame['pastDi'] or nil,
sameBi = frame['di'] or nil,
sameDi = frame['di'] or nil,
},
overrideNegPrefix = {
presentNa = frame['na'] or nil,
presentNe = frame['nihaNe'] or nil,
pastNe = frame['borîNe'] or nil,
sameNe = frame['ne'] or nil,
},
-- impNegForm = 1, -- By default negative form with 'me' (1).
-- tags = 'erê',
-- addPreverbParticles = 'erê',
}
local presentStems = {args['niha'], args['niha2'], args['niha3']}
local pastStems = {args['borî'], args['borî2'], args['borî3']}
if (baseOpts.isTransitive == 'gerguhêz') then
baseOpts.isTransitive = true
elseif (baseOpts.isTransitive == 'negerguhêz') then
baseOpts.isTransitive = false
else
return '<span style="color:red">form = gerghuhêz / negerguhêz</span>'
end
if (baseOpts.isCompoundVerb == 'erê') then
baseOpts.isCompoundVerb = true
else
baseOpts.isCompoundVerb = false
end
-- Conjugation table in all tenses
local infoTense = conj.conjugateAllTenses(baseOpts, presentStems, pastStems)
-- Negatives conjugations table
local negInfoTense = conj.conjugateAllTenses(baseOpts, presentStems, pastStems, 'negative')
-- Imperatrive form '2'; negative form with 'ne'
baseOpts.impNegForm = 2
local impNegForm2 = conj.conjugateLong(baseOpts, 'impPresent', presentStems, pastStems, 'negative').conj
-- Creation of internal conjugation tables for the different tenses
local function conjugateTable(tense)
local nameKu = lang:ucfirst(infoTense[tense].nameKu) -- Kurdish name
local nameEn = lang:ucfirst(infoTense[tense].nameEn) -- English name
local idName = infoTense[tense].name -- 'tenseRules' name (indPresent, ...)
local classStem = infoTense[tense].stem -- 'present' or 'past'
-- First, create the table header.
local tabHeader = '\n! colspan="2" id="' .. idName .. '"'
.. 'class="' .. classStem .. '-stem tense-table-title" |'
.. nameKu .. ' - <small><i>-{'.. nameEn ..'}-</i></small>'
.. '\n|-'
.. '\n! class="negative" | Erênî'
.. '\n! class="positive" | Neyînî'
.. '\n|-'
-- Create the table body.
local tabBody = ''
for _, pers in ipairs(conj.order) do
tabBody = tabBody .. '\n|' .. infoTense[tense].conj[pers]
.. '\n|' .. negInfoTense[tense].conj[pers]
.. '\n|-'
end
-- Create the table (header + body).
local tab = '\n{| cellpadding="2" class="tense-table"'
.. '\n|-'
.. tabHeader
.. tabBody
.. '\n|}'
return tab
end
--Retrieving some parameters for creating the main table header
local verb = args[1]
local transitivity = args['form']
local preSimpleVerb = args['pêşgir'] or ''
local postSimpleVerb = args['paşgir'] or ''
-- Cureyê lêkerê
local verbStruc = conj.verbStruct(baseOpts.isCompoundVerb, baseOpts.preSimpleVerb)
if (verbStruc == 'preverbVerb') then
verbStruc = 'pêkhatî'
elseif (verbStruc == 'compoundVerb') then
verbStruc = 'hevedudanî'
else
verbStruc = 'xwerû'
end
local prsStemsFormat = {}
for _, stem in ipairs(presentStems) do
if stem then prsStemsFormat[#prsStemsFormat+1] = preSimpleVerb .. '-' .. stem ..'-' end
end
local pstStemsFormat = {}
for _, stem in ipairs(pastStems) do
if stem then pstStemsFormat[#pstStemsFormat+1] = preSimpleVerb .. '-' .. stem ..'-' end
end
local prsStems = table.concat(prsStemsFormat, ' / ') .. postSimpleVerb
local pstStems = table.concat(pstStemsFormat, ' / ') .. postSimpleVerb
return
'{| align="center" class="conj-table"'
.. '\n|-'
.. '\n| colspan="8" class="title" | Tewandina lêkera [[' .. verb .. ']]<br><span style="font-weight:normal;">(' .. verbStruc .. ', ' .. transitivity .. ')</span>'
.. '\n|-'
.. '\n! colspan="2" class="present-stem" | Rehê dema niha'
.. '\n! colspan="6" style="font-weight:normal; text-align:center; border-bottom:dotted 1px grey;" | ' .. prsStems
.. '\n|-'
.. '\n! colspan="2" class="past-stem" | Rehê dema borî'
.. '\n! colspan="6" style="font-weight:normal; text-align:center;" | ' .. pstStems
.. '\n|-'
.. '\n|'
.. '\n|-'
.. '\n| colspan="8" id="imp" class="mood" | Raweya fermanî - <small><i>Imperative</i></small>'
.. '\n|-'
.. '\n| colspan="8" valign="top" | '
.. '\n{| cellpadding="2" class="tense-table"'
.. '\n|-'
.. '\n| colspan="2" class="present-stem" style="border-top:1px dotted grey; border-bottom:1px dotted grey"| '
.. '\n|-'
.. '\n! class="negative" | Erênî'
.. '\n! class="positive" | Neyînî'
.. '\n|-'
.. '\n| valign="top" | <span style="color:gray">(tû)</span> ' .. infoTense.impPresent.conj.s2
.. '\n| valign="top" | <span style="color:gray">(tû)</span> ' .. negInfoTense.impPresent.conj.s2
.. '<br> <span style="color:gray">(tû)</span> ' .. impNegForm2.s2
.. '\n|-'
.. '\n| valign="top" | <span style="color:gray">(hûn)</span> ' .. infoTense.impPresent.conj.p2
.. '\n| valign="top" | <span style="color:gray">(hûn)</span> ' .. negInfoTense.impPresent.conj.p2
.. '<br> <span style="color:gray">(hûn)</span> ' .. impNegForm2.p2
..'\n|}'
.. '\n|-'
.. '\n| colspan="8" id="ind" class="mood" | Raweya pêşkerî - <small><i>Indicative</i></small>'
.. '\n|-'
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('indPresent')
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('indPreterite')
.. '\n|-'
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('indImperfect')
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('indPluperfect')
.. '\n|-'
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('indFuture')
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('indFuturePerfect')
.. '\n|-'
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('indPerfect')
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('indNwPluperfect')
.. '\n|-'
.. '\n| colspan="8" id="subj" class="mood" | Raweya xwestekî - <small><i>Subjunctive</i></small>'
.. '\n|-'
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('subjPresent')
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('subjPreterite')
.. '\n|-'
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('subjImperfect')
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('subjPluperfect')
.. '\n|-'
.. '\n| colspan="8" id="cond" class="mood" | Raweya mercî - <small><i>Conditional</i></small>'
.. '\n|-'
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('condPresent')
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('condPreterite')
.. '\n|}'
end
return export
phtyhfld3f173lhcjz5e0t2eb1fqnwo
6237479
6237478
2026-06-11T22:00:32Z
Ghybu
1393
6237479
Scribunto
text/plain
local export = {}
local conj = require('Modul:ku-tewandin/ceribandin')
local lang = mw.getContentLanguage()
function export.tablo(frame)
local args = frame:getParent().args
local baseOpts = {
isTransitive = args['form'],
isCompoundVerb = args['valahî'] or false,
preSimpleVerb = args['pêşgir'] or '',
postSimpleVerb = args['paşgir'] or '',
accent = args['devok'] or 'std',
overridePreverb = {
presentBi = frame['presentBi'] or nil,
presentDi = frame['presentDi'] or nil,
pastBi = frame['pastBi'] or nil,
pastDi = frame['pastDi'] or nil,
sameBi = frame['bi'] or nil,
sameDi = frame['di'] or nil,
},
overrideNegPrefix = {
presentNa = frame['na'] or nil,
presentNe = frame['nihaNe'] or nil,
pastNe = frame['borîNe'] or nil,
sameNe = frame['ne'] or nil,
},
-- impNegForm = 1, -- By default negative form with 'me' (1).
-- tags = 'erê',
-- addPreverbParticles = 'erê',
}
local presentStems = {args['niha'], args['niha2'], args['niha3']}
local pastStems = {args['borî'], args['borî2'], args['borî3']}
if (baseOpts.isTransitive == 'gerguhêz') then
baseOpts.isTransitive = true
elseif (baseOpts.isTransitive == 'negerguhêz') then
baseOpts.isTransitive = false
else
return '<span style="color:red">form = gerghuhêz / negerguhêz</span>'
end
if (baseOpts.isCompoundVerb == 'erê') then
baseOpts.isCompoundVerb = true
else
baseOpts.isCompoundVerb = false
end
-- Conjugation table in all tenses
local infoTense = conj.conjugateAllTenses(baseOpts, presentStems, pastStems)
-- Negatives conjugations table
local negInfoTense = conj.conjugateAllTenses(baseOpts, presentStems, pastStems, 'negative')
-- Imperatrive form '2'; negative form with 'ne'
baseOpts.impNegForm = 2
local impNegForm2 = conj.conjugateLong(baseOpts, 'impPresent', presentStems, pastStems, 'negative').conj
-- Creation of internal conjugation tables for the different tenses
local function conjugateTable(tense)
local nameKu = lang:ucfirst(infoTense[tense].nameKu) -- Kurdish name
local nameEn = lang:ucfirst(infoTense[tense].nameEn) -- English name
local idName = infoTense[tense].name -- 'tenseRules' name (indPresent, ...)
local classStem = infoTense[tense].stem -- 'present' or 'past'
-- First, create the table header.
local tabHeader = '\n! colspan="2" id="' .. idName .. '"'
.. 'class="' .. classStem .. '-stem tense-table-title" |'
.. nameKu .. ' - <small><i>-{'.. nameEn ..'}-</i></small>'
.. '\n|-'
.. '\n! class="negative" | Erênî'
.. '\n! class="positive" | Neyînî'
.. '\n|-'
-- Create the table body.
local tabBody = ''
for _, pers in ipairs(conj.order) do
tabBody = tabBody .. '\n|' .. infoTense[tense].conj[pers]
.. '\n|' .. negInfoTense[tense].conj[pers]
.. '\n|-'
end
-- Create the table (header + body).
local tab = '\n{| cellpadding="2" class="tense-table"'
.. '\n|-'
.. tabHeader
.. tabBody
.. '\n|}'
return tab
end
--Retrieving some parameters for creating the main table header
local verb = args[1]
local transitivity = args['form']
local preSimpleVerb = args['pêşgir'] or ''
local postSimpleVerb = args['paşgir'] or ''
-- Cureyê lêkerê
local verbStruc = conj.verbStruct(baseOpts.isCompoundVerb, baseOpts.preSimpleVerb)
if (verbStruc == 'preverbVerb') then
verbStruc = 'pêkhatî'
elseif (verbStruc == 'compoundVerb') then
verbStruc = 'hevedudanî'
else
verbStruc = 'xwerû'
end
local prsStemsFormat = {}
for _, stem in ipairs(presentStems) do
if stem then prsStemsFormat[#prsStemsFormat+1] = preSimpleVerb .. '-' .. stem ..'-' end
end
local pstStemsFormat = {}
for _, stem in ipairs(pastStems) do
if stem then pstStemsFormat[#pstStemsFormat+1] = preSimpleVerb .. '-' .. stem ..'-' end
end
local prsStems = table.concat(prsStemsFormat, ' / ') .. postSimpleVerb
local pstStems = table.concat(pstStemsFormat, ' / ') .. postSimpleVerb
return
'{| align="center" class="conj-table"'
.. '\n|-'
.. '\n| colspan="8" class="title" | Tewandina lêkera [[' .. verb .. ']]<br><span style="font-weight:normal;">(' .. verbStruc .. ', ' .. transitivity .. ')</span>'
.. '\n|-'
.. '\n! colspan="2" class="present-stem" | Rehê dema niha'
.. '\n! colspan="6" style="font-weight:normal; text-align:center; border-bottom:dotted 1px grey;" | ' .. prsStems
.. '\n|-'
.. '\n! colspan="2" class="past-stem" | Rehê dema borî'
.. '\n! colspan="6" style="font-weight:normal; text-align:center;" | ' .. pstStems
.. '\n|-'
.. '\n|'
.. '\n|-'
.. '\n| colspan="8" id="imp" class="mood" | Raweya fermanî - <small><i>Imperative</i></small>'
.. '\n|-'
.. '\n| colspan="8" valign="top" | '
.. '\n{| cellpadding="2" class="tense-table"'
.. '\n|-'
.. '\n| colspan="2" class="present-stem" style="border-top:1px dotted grey; border-bottom:1px dotted grey"| '
.. '\n|-'
.. '\n! class="negative" | Erênî'
.. '\n! class="positive" | Neyînî'
.. '\n|-'
.. '\n| valign="top" | <span style="color:gray">(tû)</span> ' .. infoTense.impPresent.conj.s2
.. '\n| valign="top" | <span style="color:gray">(tû)</span> ' .. negInfoTense.impPresent.conj.s2
.. '<br> <span style="color:gray">(tû)</span> ' .. impNegForm2.s2
.. '\n|-'
.. '\n| valign="top" | <span style="color:gray">(hûn)</span> ' .. infoTense.impPresent.conj.p2
.. '\n| valign="top" | <span style="color:gray">(hûn)</span> ' .. negInfoTense.impPresent.conj.p2
.. '<br> <span style="color:gray">(hûn)</span> ' .. impNegForm2.p2
..'\n|}'
.. '\n|-'
.. '\n| colspan="8" id="ind" class="mood" | Raweya pêşkerî - <small><i>Indicative</i></small>'
.. '\n|-'
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('indPresent')
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('indPreterite')
.. '\n|-'
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('indImperfect')
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('indPluperfect')
.. '\n|-'
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('indFuture')
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('indFuturePerfect')
.. '\n|-'
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('indPerfect')
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('indNwPluperfect')
.. '\n|-'
.. '\n| colspan="8" id="subj" class="mood" | Raweya xwestekî - <small><i>Subjunctive</i></small>'
.. '\n|-'
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('subjPresent')
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('subjPreterite')
.. '\n|-'
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('subjImperfect')
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('subjPluperfect')
.. '\n|-'
.. '\n| colspan="8" id="cond" class="mood" | Raweya mercî - <small><i>Conditional</i></small>'
.. '\n|-'
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('condPresent')
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('condPreterite')
.. '\n|}'
end
return export
9gzge2id1wkwppyrxvfkf3ep18t38xi
6237480
6237479
2026-06-11T22:02:35Z
Ghybu
1393
6237480
Scribunto
text/plain
local export = {}
local conj = require('Modul:ku-tewandin/ceribandin')
local lang = mw.getContentLanguage()
function export.tablo(frame)
local args = frame:getParent().args
local baseOpts = {
isTransitive = args['form'],
isCompoundVerb = args['valahî'] or false,
preSimpleVerb = args['pêşgir'] or '',
postSimpleVerb = args['paşgir'] or '',
accent = args['devok'] or 'std',
overridePreverb = {
presentBi = frame['nihaBi'] or nil,
presentDi = frame['nihaDi'] or nil,
pastBi = frame['borîBi'] or nil,
pastDi = frame['borîDi'] or nil,
sameBi = frame['bi'] or nil,
sameDi = frame['di'] or nil,
},
overrideNegPrefix = {
presentNa = frame['na'] or nil,
presentNe = frame['nihaNe'] or nil,
pastNe = frame['borîNe'] or nil,
sameNe = frame['ne'] or nil,
},
-- impNegForm = 1, -- By default negative form with 'me' (1).
-- tags = 'erê',
-- addPreverbParticles = 'erê',
}
local presentStems = {args['niha'], args['niha2'], args['niha3']}
local pastStems = {args['borî'], args['borî2'], args['borî3']}
if (baseOpts.isTransitive == 'gerguhêz') then
baseOpts.isTransitive = true
elseif (baseOpts.isTransitive == 'negerguhêz') then
baseOpts.isTransitive = false
else
return '<span style="color:red">form = gerghuhêz / negerguhêz</span>'
end
if (baseOpts.isCompoundVerb == 'erê') then
baseOpts.isCompoundVerb = true
else
baseOpts.isCompoundVerb = false
end
-- Conjugation table in all tenses
local infoTense = conj.conjugateAllTenses(baseOpts, presentStems, pastStems)
-- Negatives conjugations table
local negInfoTense = conj.conjugateAllTenses(baseOpts, presentStems, pastStems, 'negative')
-- Imperatrive form '2'; negative form with 'ne'
baseOpts.impNegForm = 2
local impNegForm2 = conj.conjugateLong(baseOpts, 'impPresent', presentStems, pastStems, 'negative').conj
-- Creation of internal conjugation tables for the different tenses
local function conjugateTable(tense)
local nameKu = lang:ucfirst(infoTense[tense].nameKu) -- Kurdish name
local nameEn = lang:ucfirst(infoTense[tense].nameEn) -- English name
local idName = infoTense[tense].name -- 'tenseRules' name (indPresent, ...)
local classStem = infoTense[tense].stem -- 'present' or 'past'
-- First, create the table header.
local tabHeader = '\n! colspan="2" id="' .. idName .. '"'
.. 'class="' .. classStem .. '-stem tense-table-title" |'
.. nameKu .. ' - <small><i>-{'.. nameEn ..'}-</i></small>'
.. '\n|-'
.. '\n! class="negative" | Erênî'
.. '\n! class="positive" | Neyînî'
.. '\n|-'
-- Create the table body.
local tabBody = ''
for _, pers in ipairs(conj.order) do
tabBody = tabBody .. '\n|' .. infoTense[tense].conj[pers]
.. '\n|' .. negInfoTense[tense].conj[pers]
.. '\n|-'
end
-- Create the table (header + body).
local tab = '\n{| cellpadding="2" class="tense-table"'
.. '\n|-'
.. tabHeader
.. tabBody
.. '\n|}'
return tab
end
--Retrieving some parameters for creating the main table header
local verb = args[1]
local transitivity = args['form']
local preSimpleVerb = args['pêşgir'] or ''
local postSimpleVerb = args['paşgir'] or ''
-- Cureyê lêkerê
local verbStruc = conj.verbStruct(baseOpts.isCompoundVerb, baseOpts.preSimpleVerb)
if (verbStruc == 'preverbVerb') then
verbStruc = 'pêkhatî'
elseif (verbStruc == 'compoundVerb') then
verbStruc = 'hevedudanî'
else
verbStruc = 'xwerû'
end
local prsStemsFormat = {}
for _, stem in ipairs(presentStems) do
if stem then prsStemsFormat[#prsStemsFormat+1] = preSimpleVerb .. '-' .. stem ..'-' end
end
local pstStemsFormat = {}
for _, stem in ipairs(pastStems) do
if stem then pstStemsFormat[#pstStemsFormat+1] = preSimpleVerb .. '-' .. stem ..'-' end
end
local prsStems = table.concat(prsStemsFormat, ' / ') .. postSimpleVerb
local pstStems = table.concat(pstStemsFormat, ' / ') .. postSimpleVerb
return
'{| align="center" class="conj-table"'
.. '\n|-'
.. '\n| colspan="8" class="title" | Tewandina lêkera [[' .. verb .. ']]<br><span style="font-weight:normal;">(' .. verbStruc .. ', ' .. transitivity .. ')</span>'
.. '\n|-'
.. '\n! colspan="2" class="present-stem" | Rehê dema niha'
.. '\n! colspan="6" style="font-weight:normal; text-align:center; border-bottom:dotted 1px grey;" | ' .. prsStems
.. '\n|-'
.. '\n! colspan="2" class="past-stem" | Rehê dema borî'
.. '\n! colspan="6" style="font-weight:normal; text-align:center;" | ' .. pstStems
.. '\n|-'
.. '\n|'
.. '\n|-'
.. '\n| colspan="8" id="imp" class="mood" | Raweya fermanî - <small><i>Imperative</i></small>'
.. '\n|-'
.. '\n| colspan="8" valign="top" | '
.. '\n{| cellpadding="2" class="tense-table"'
.. '\n|-'
.. '\n| colspan="2" class="present-stem" style="border-top:1px dotted grey; border-bottom:1px dotted grey"| '
.. '\n|-'
.. '\n! class="negative" | Erênî'
.. '\n! class="positive" | Neyînî'
.. '\n|-'
.. '\n| valign="top" | <span style="color:gray">(tû)</span> ' .. infoTense.impPresent.conj.s2
.. '\n| valign="top" | <span style="color:gray">(tû)</span> ' .. negInfoTense.impPresent.conj.s2
.. '<br> <span style="color:gray">(tû)</span> ' .. impNegForm2.s2
.. '\n|-'
.. '\n| valign="top" | <span style="color:gray">(hûn)</span> ' .. infoTense.impPresent.conj.p2
.. '\n| valign="top" | <span style="color:gray">(hûn)</span> ' .. negInfoTense.impPresent.conj.p2
.. '<br> <span style="color:gray">(hûn)</span> ' .. impNegForm2.p2
..'\n|}'
.. '\n|-'
.. '\n| colspan="8" id="ind" class="mood" | Raweya pêşkerî - <small><i>Indicative</i></small>'
.. '\n|-'
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('indPresent')
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('indPreterite')
.. '\n|-'
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('indImperfect')
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('indPluperfect')
.. '\n|-'
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('indFuture')
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('indFuturePerfect')
.. '\n|-'
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('indPerfect')
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('indNwPluperfect')
.. '\n|-'
.. '\n| colspan="8" id="subj" class="mood" | Raweya xwestekî - <small><i>Subjunctive</i></small>'
.. '\n|-'
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('subjPresent')
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('subjPreterite')
.. '\n|-'
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('subjImperfect')
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('subjPluperfect')
.. '\n|-'
.. '\n| colspan="8" id="cond" class="mood" | Raweya mercî - <small><i>Conditional</i></small>'
.. '\n|-'
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('condPresent')
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('condPreterite')
.. '\n|}'
end
return export
ikcwezttbj653x0sdf745cd2de8ze4o
6237482
6237480
2026-06-11T22:24:10Z
Ghybu
1393
6237482
Scribunto
text/plain
local export = {}
local conj = require('Modul:ku-tewandin/ceribandin')
local lang = mw.getContentLanguage()
function export.tablo(frame)
local args = frame:getParent().args
local baseOpts = {
isTransitive = args['form'],
isCompoundVerb = args['valahî'] or false,
preSimpleVerb = args['pêşgir'] or '',
postSimpleVerb = args['paşgir'] or '',
accent = args['devok'] or 'std',
-- overridePreverb:
presentBi = frame['nihaBi'] or nil,
presentDi = frame['nihaDi'] or nil,
pastBi = frame['borîBi'] or nil,
pastDi = frame['borîDi'] or nil,
sameBi = frame['bi'] or nil,
sameDi = frame['di'] or nil,
-- overrideNegPrefix:
presentNa = frame['na'] or nil,
presentNe = frame['nihaNe'] or nil,
pastNe = frame['borîNe'] or nil,
sameNe = frame['ne'] or nil,
-- impNegForm = 1, -- By default negative form with 'me' (1).
-- tags = 'erê',
-- addPreverbParticles = 'erê',
}
local presentStems = {args['niha'], args['niha2'], args['niha3']}
local pastStems = {args['borî'], args['borî2'], args['borî3']}
if (baseOpts.isTransitive == 'gerguhêz') then
baseOpts.isTransitive = true
elseif (baseOpts.isTransitive == 'negerguhêz') then
baseOpts.isTransitive = false
else
return '<span style="color:red">form = gerghuhêz / negerguhêz</span>'
end
if (baseOpts.isCompoundVerb == 'erê') then
baseOpts.isCompoundVerb = true
else
baseOpts.isCompoundVerb = false
end
-- Conjugation table in all tenses
local infoTense = conj.conjugateAllTenses(baseOpts, presentStems, pastStems)
-- Negatives conjugations table
local negInfoTense = conj.conjugateAllTenses(baseOpts, presentStems, pastStems, 'negative')
-- Imperatrive form '2'; negative form with 'ne'
baseOpts.impNegForm = 2
local impNegForm2 = conj.conjugateLong(baseOpts, 'impPresent', presentStems, pastStems, 'negative').conj
-- Creation of internal conjugation tables for the different tenses
local function conjugateTable(tense)
local nameKu = lang:ucfirst(infoTense[tense].nameKu) -- Kurdish name
local nameEn = lang:ucfirst(infoTense[tense].nameEn) -- English name
local idName = infoTense[tense].name -- 'tenseRules' name (indPresent, ...)
local classStem = infoTense[tense].stem -- 'present' or 'past'
-- First, create the table header.
local tabHeader = '\n! colspan="2" id="' .. idName .. '"'
.. 'class="' .. classStem .. '-stem tense-table-title" |'
.. nameKu .. ' - <small><i>-{'.. nameEn ..'}-</i></small>'
.. '\n|-'
.. '\n! class="negative" | Erênî'
.. '\n! class="positive" | Neyînî'
.. '\n|-'
-- Create the table body.
local tabBody = ''
for _, pers in ipairs(conj.order) do
tabBody = tabBody .. '\n|' .. infoTense[tense].conj[pers]
.. '\n|' .. negInfoTense[tense].conj[pers]
.. '\n|-'
end
-- Create the table (header + body).
local tab = '\n{| cellpadding="2" class="tense-table"'
.. '\n|-'
.. tabHeader
.. tabBody
.. '\n|}'
return tab
end
--Retrieving some parameters for creating the main table header
local verb = args[1]
local transitivity = args['form']
local preSimpleVerb = args['pêşgir'] or ''
local postSimpleVerb = args['paşgir'] or ''
-- Cureyê lêkerê
local verbStruc = conj.verbStruct(baseOpts.isCompoundVerb, baseOpts.preSimpleVerb)
if (verbStruc == 'preverbVerb') then
verbStruc = 'pêkhatî'
elseif (verbStruc == 'compoundVerb') then
verbStruc = 'hevedudanî'
else
verbStruc = 'xwerû'
end
local prsStemsFormat = {}
for _, stem in ipairs(presentStems) do
if stem then prsStemsFormat[#prsStemsFormat+1] = preSimpleVerb .. '-' .. stem ..'-' end
end
local pstStemsFormat = {}
for _, stem in ipairs(pastStems) do
if stem then pstStemsFormat[#pstStemsFormat+1] = preSimpleVerb .. '-' .. stem ..'-' end
end
local prsStems = table.concat(prsStemsFormat, ' / ') .. postSimpleVerb
local pstStems = table.concat(pstStemsFormat, ' / ') .. postSimpleVerb
return
'{| align="center" class="conj-table"'
.. '\n|-'
.. '\n| colspan="8" class="title" | Tewandina lêkera [[' .. verb .. ']]<br><span style="font-weight:normal;">(' .. verbStruc .. ', ' .. transitivity .. ')</span>'
.. '\n|-'
.. '\n! colspan="2" class="present-stem" | Rehê dema niha'
.. '\n! colspan="6" style="font-weight:normal; text-align:center; border-bottom:dotted 1px grey;" | ' .. prsStems
.. '\n|-'
.. '\n! colspan="2" class="past-stem" | Rehê dema borî'
.. '\n! colspan="6" style="font-weight:normal; text-align:center;" | ' .. pstStems
.. '\n|-'
.. '\n|'
.. '\n|-'
.. '\n| colspan="8" id="imp" class="mood" | Raweya fermanî - <small><i>Imperative</i></small>'
.. '\n|-'
.. '\n| colspan="8" valign="top" | '
.. '\n{| cellpadding="2" class="tense-table"'
.. '\n|-'
.. '\n| colspan="2" class="present-stem" style="border-top:1px dotted grey; border-bottom:1px dotted grey"| '
.. '\n|-'
.. '\n! class="negative" | Erênî'
.. '\n! class="positive" | Neyînî'
.. '\n|-'
.. '\n| valign="top" | <span style="color:gray">(tû)</span> ' .. infoTense.impPresent.conj.s2
.. '\n| valign="top" | <span style="color:gray">(tû)</span> ' .. negInfoTense.impPresent.conj.s2
.. '<br> <span style="color:gray">(tû)</span> ' .. impNegForm2.s2
.. '\n|-'
.. '\n| valign="top" | <span style="color:gray">(hûn)</span> ' .. infoTense.impPresent.conj.p2
.. '\n| valign="top" | <span style="color:gray">(hûn)</span> ' .. negInfoTense.impPresent.conj.p2
.. '<br> <span style="color:gray">(hûn)</span> ' .. impNegForm2.p2
..'\n|}'
.. '\n|-'
.. '\n| colspan="8" id="ind" class="mood" | Raweya pêşkerî - <small><i>Indicative</i></small>'
.. '\n|-'
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('indPresent')
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('indPreterite')
.. '\n|-'
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('indImperfect')
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('indPluperfect')
.. '\n|-'
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('indFuture')
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('indFuturePerfect')
.. '\n|-'
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('indPerfect')
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('indNwPluperfect')
.. '\n|-'
.. '\n| colspan="8" id="subj" class="mood" | Raweya xwestekî - <small><i>Subjunctive</i></small>'
.. '\n|-'
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('subjPresent')
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('subjPreterite')
.. '\n|-'
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('subjImperfect')
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('subjPluperfect')
.. '\n|-'
.. '\n| colspan="8" id="cond" class="mood" | Raweya mercî - <small><i>Conditional</i></small>'
.. '\n|-'
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('condPresent')
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('condPreterite')
.. '\n|}'
end
return export
9xuxhtxauw6x319wz8uoa54nuldojbp
6237487
6237482
2026-06-11T22:57:10Z
Ghybu
1393
6237487
Scribunto
text/plain
local export = {}
local conj = require('Modul:ku-tewandin/ceribandin')
local lang = mw.getContentLanguage()
function export.tablo(frame)
local args = frame:getParent().args
local baseOpts = {
isTransitive = args['form'],
isCompoundVerb = args['valahî'] or false,
preSimpleVerb = args['pêşgir'] or '',
postSimpleVerb = args['paşgir'] or '',
accent = args['devok'] or 'std',
-- overridePreverb:
presentBi = args['nihaDi'] or nil,
pastBi = args['borîBi'] or nil,
pastDi = args['borîDi'] or nil,
sameBi = args['bi'] or nil,
sameDi = args['di'] or nil,
-- overrideNegPrefix:
presentNa = args['na'] or nil,
presentNe = args['nihaNe'] or nil,
pastNe = args['borîNe'] or nil,
sameNe = args['ne'] or nil,
-- impNegForm = 1, -- By default negative form with 'me' (1).
-- tags = 'erê',
-- addPreverbParticles = 'erê',
}
local presentStems = {args['niha'], args['niha2'], args['niha3']}
local pastStems = {args['borî'], args['borî2'], args['borî3']}
if (baseOpts.isTransitive == 'gerguhêz') then
baseOpts.isTransitive = true
elseif (baseOpts.isTransitive == 'negerguhêz') then
baseOpts.isTransitive = false
else
return '<span style="color:red">form = gerghuhêz / negerguhêz</span>'
end
if (baseOpts.isCompoundVerb == 'erê') then
baseOpts.isCompoundVerb = true
else
baseOpts.isCompoundVerb = false
end
-- Conjugation table in all tenses
local infoTense = conj.conjugateAllTenses(baseOpts, presentStems, pastStems)
-- Negatives conjugations table
local negInfoTense = conj.conjugateAllTenses(baseOpts, presentStems, pastStems, 'negative')
-- Imperatrive form '2'; negative form with 'ne'
baseOpts.impNegForm = 2
local impNegForm2 = conj.conjugateLong(baseOpts, 'impPresent', presentStems, pastStems, 'negative').conj
-- Creation of internal conjugation tables for the different tenses
local function conjugateTable(tense)
local nameKu = lang:ucfirst(infoTense[tense].nameKu) -- Kurdish name
local nameEn = lang:ucfirst(infoTense[tense].nameEn) -- English name
local idName = infoTense[tense].name -- 'tenseRules' name (indPresent, ...)
local classStem = infoTense[tense].stem -- 'present' or 'past'
-- First, create the table header.
local tabHeader = '\n! colspan="2" id="' .. idName .. '"'
.. 'class="' .. classStem .. '-stem tense-table-title" |'
.. nameKu .. ' - <small><i>-{'.. nameEn ..'}-</i></small>'
.. '\n|-'
.. '\n! class="negative" | Erênî'
.. '\n! class="positive" | Neyînî'
.. '\n|-'
-- Create the table body.
local tabBody = ''
for _, pers in ipairs(conj.order) do
tabBody = tabBody .. '\n|' .. infoTense[tense].conj[pers]
.. '\n|' .. negInfoTense[tense].conj[pers]
.. '\n|-'
end
-- Create the table (header + body).
local tab = '\n{| cellpadding="2" class="tense-table"'
.. '\n|-'
.. tabHeader
.. tabBody
.. '\n|}'
return tab
end
--Retrieving some parameters for creating the main table header
local verb = args[1]
local transitivity = args['form']
local preSimpleVerb = args['pêşgir'] or ''
local postSimpleVerb = args['paşgir'] or ''
-- Cureyê lêkerê
local verbStruc = conj.verbStruct(baseOpts.isCompoundVerb, baseOpts.preSimpleVerb)
if (verbStruc == 'preverbVerb') then
verbStruc = 'pêkhatî'
elseif (verbStruc == 'compoundVerb') then
verbStruc = 'hevedudanî'
else
verbStruc = 'xwerû'
end
local prsStemsFormat = {}
for _, stem in ipairs(presentStems) do
if stem then prsStemsFormat[#prsStemsFormat+1] = preSimpleVerb .. '-' .. stem ..'-' end
end
local pstStemsFormat = {}
for _, stem in ipairs(pastStems) do
if stem then pstStemsFormat[#pstStemsFormat+1] = preSimpleVerb .. '-' .. stem ..'-' end
end
local prsStems = table.concat(prsStemsFormat, ' / ') .. postSimpleVerb
local pstStems = table.concat(pstStemsFormat, ' / ') .. postSimpleVerb
return
'{| align="center" class="conj-table"'
.. '\n|-'
.. '\n| colspan="8" class="title" | Tewandina lêkera [[' .. verb .. ']]<br><span style="font-weight:normal;">(' .. verbStruc .. ', ' .. transitivity .. ')</span>'
.. '\n|-'
.. '\n! colspan="2" class="present-stem" | Rehê dema niha'
.. '\n! colspan="6" style="font-weight:normal; text-align:center; border-bottom:dotted 1px grey;" | ' .. prsStems
.. '\n|-'
.. '\n! colspan="2" class="past-stem" | Rehê dema borî'
.. '\n! colspan="6" style="font-weight:normal; text-align:center;" | ' .. pstStems
.. '\n|-'
.. '\n|'
.. '\n|-'
.. '\n| colspan="8" id="imp" class="mood" | Raweya fermanî - <small><i>Imperative</i></small>'
.. '\n|-'
.. '\n| colspan="8" valign="top" | '
.. '\n{| cellpadding="2" class="tense-table"'
.. '\n|-'
.. '\n| colspan="2" class="present-stem" style="border-top:1px dotted grey; border-bottom:1px dotted grey"| '
.. '\n|-'
.. '\n! class="negative" | Erênî'
.. '\n! class="positive" | Neyînî'
.. '\n|-'
.. '\n| valign="top" | <span style="color:gray">(tû)</span> ' .. infoTense.impPresent.conj.s2
.. '\n| valign="top" | <span style="color:gray">(tû)</span> ' .. negInfoTense.impPresent.conj.s2
.. '<br> <span style="color:gray">(tû)</span> ' .. impNegForm2.s2
.. '\n|-'
.. '\n| valign="top" | <span style="color:gray">(hûn)</span> ' .. infoTense.impPresent.conj.p2
.. '\n| valign="top" | <span style="color:gray">(hûn)</span> ' .. negInfoTense.impPresent.conj.p2
.. '<br> <span style="color:gray">(hûn)</span> ' .. impNegForm2.p2
..'\n|}'
.. '\n|-'
.. '\n| colspan="8" id="ind" class="mood" | Raweya pêşkerî - <small><i>Indicative</i></small>'
.. '\n|-'
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('indPresent')
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('indPreterite')
.. '\n|-'
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('indImperfect')
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('indPluperfect')
.. '\n|-'
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('indFuture')
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('indFuturePerfect')
.. '\n|-'
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('indPerfect')
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('indNwPluperfect')
.. '\n|-'
.. '\n| colspan="8" id="subj" class="mood" | Raweya xwestekî - <small><i>Subjunctive</i></small>'
.. '\n|-'
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('subjPresent')
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('subjPreterite')
.. '\n|-'
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('subjImperfect')
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('subjPluperfect')
.. '\n|-'
.. '\n| colspan="8" id="cond" class="mood" | Raweya mercî - <small><i>Conditional</i></small>'
.. '\n|-'
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('condPresent')
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('condPreterite')
.. '\n|}'
end
return export
5qmywx5oeweyzh1vtlr6eih8kr1kirs
6237490
6237487
2026-06-12T01:16:50Z
Ghybu
1393
6237490
Scribunto
text/plain
local export = {}
local conj = require('Modul:ku-tewandin/ceribandin')
local lang = mw.getContentLanguage()
function export.tablo(frame)
local args = frame:getParent().args
local baseOpts = {
isTransitive = args['form'],
isCompoundVerb = args['valahî'] or false,
preSimpleVerb = args['pêşgir'] or '',
postSimpleVerb = args['paşgir'] or '',
accent = args['devok'] or 'std',
-- overridePreverb:
presentBi = args['nihaDi'] or nil,
pastBi = args['borîBi'] or nil,
pastDi = args['borîDi'] or nil,
sameBi = args['bi'] or nil,
sameDi = args['di'] or nil,
-- overrideNegPrefix:
presentNa = args['na'] or nil,
presentNe = args['nihaNe'] or nil,
pastNe = args['borîNe'] or nil,
sameNe = args['ne'] or nil,
impMe = args['me'] or nil,
-- impNegForm = 1, -- By default negative form with 'me' (1).
-- tags = 'erê',
-- addPreverbParticles = 'erê',
}
local presentStems = {args['niha'], args['niha2'], args['niha3']}
local pastStems = {args['borî'], args['borî2'], args['borî3']}
if (baseOpts.isTransitive == 'gerguhêz') then
baseOpts.isTransitive = true
elseif (baseOpts.isTransitive == 'negerguhêz') then
baseOpts.isTransitive = false
else
return '<span style="color:red">form = gerghuhêz / negerguhêz</span>'
end
if (baseOpts.isCompoundVerb == 'erê') then
baseOpts.isCompoundVerb = true
else
baseOpts.isCompoundVerb = false
end
-- Conjugation table in all tenses
local infoTense = conj.conjugateAllTenses(baseOpts, presentStems, pastStems)
-- Negatives conjugations table
local negInfoTense = conj.conjugateAllTenses(baseOpts, presentStems, pastStems, 'negative')
-- Imperatrive form '2'; negative form with 'ne'
baseOpts.impNegForm = 2
local impNegForm2 = conj.conjugateLong(baseOpts, 'impPresent', presentStems, pastStems, 'negative').conj
-- Creation of internal conjugation tables for the different tenses
local function conjugateTable(tense)
local nameKu = lang:ucfirst(infoTense[tense].nameKu) -- Kurdish name
local nameEn = lang:ucfirst(infoTense[tense].nameEn) -- English name
local idName = infoTense[tense].name -- 'tenseRules' name (indPresent, ...)
local classStem = infoTense[tense].stem -- 'present' or 'past'
-- First, create the table header.
local tabHeader = '\n! colspan="2" id="' .. idName .. '"'
.. 'class="' .. classStem .. '-stem tense-table-title" |'
.. nameKu .. ' - <small><i>-{'.. nameEn ..'}-</i></small>'
.. '\n|-'
.. '\n! class="negative" | Erênî'
.. '\n! class="positive" | Neyînî'
.. '\n|-'
-- Create the table body.
local tabBody = ''
for _, pers in ipairs(conj.order) do
tabBody = tabBody .. '\n|' .. infoTense[tense].conj[pers]
.. '\n|' .. negInfoTense[tense].conj[pers]
.. '\n|-'
end
-- Create the table (header + body).
local tab = '\n{| cellpadding="2" class="tense-table"'
.. '\n|-'
.. tabHeader
.. tabBody
.. '\n|}'
return tab
end
--Retrieving some parameters for creating the main table header
local verb = args[1]
local transitivity = args['form']
local preSimpleVerb = args['pêşgir'] or ''
local postSimpleVerb = args['paşgir'] or ''
-- Cureyê lêkerê
local verbStruc = conj.verbStruct(baseOpts.isCompoundVerb, baseOpts.preSimpleVerb)
if (verbStruc == 'preverbVerb') then
verbStruc = 'pêkhatî'
elseif (verbStruc == 'compoundVerb') then
verbStruc = 'hevedudanî'
else
verbStruc = 'xwerû'
end
local prsStemsFormat = {}
for _, stem in ipairs(presentStems) do
if stem then prsStemsFormat[#prsStemsFormat+1] = preSimpleVerb .. '-' .. stem ..'-' end
end
local pstStemsFormat = {}
for _, stem in ipairs(pastStems) do
if stem then pstStemsFormat[#pstStemsFormat+1] = preSimpleVerb .. '-' .. stem ..'-' end
end
local prsStems = table.concat(prsStemsFormat, ' / ') .. postSimpleVerb
local pstStems = table.concat(pstStemsFormat, ' / ') .. postSimpleVerb
return
'{| align="center" class="conj-table"'
.. '\n|-'
.. '\n| colspan="8" class="title" | Tewandina lêkera [[' .. verb .. ']]<br><span style="font-weight:normal;">(' .. verbStruc .. ', ' .. transitivity .. ')</span>'
.. '\n|-'
.. '\n! colspan="2" class="present-stem" | Rehê dema niha'
.. '\n! colspan="6" style="font-weight:normal; text-align:center; border-bottom:dotted 1px grey;" | ' .. prsStems
.. '\n|-'
.. '\n! colspan="2" class="past-stem" | Rehê dema borî'
.. '\n! colspan="6" style="font-weight:normal; text-align:center;" | ' .. pstStems
.. '\n|-'
.. '\n|'
.. '\n|-'
.. '\n| colspan="8" id="imp" class="mood" | Raweya fermanî - <small><i>Imperative</i></small>'
.. '\n|-'
.. '\n| colspan="8" valign="top" | '
.. '\n{| cellpadding="2" class="tense-table"'
.. '\n|-'
.. '\n| colspan="2" class="present-stem" style="border-top:1px dotted grey; border-bottom:1px dotted grey"| '
.. '\n|-'
.. '\n! class="negative" | Erênî'
.. '\n! class="positive" | Neyînî'
.. '\n|-'
.. '\n| valign="top" | <span style="color:gray">(tû)</span> ' .. infoTense.impPresent.conj.s2
.. '\n| valign="top" | <span style="color:gray">(tû)</span> ' .. negInfoTense.impPresent.conj.s2
.. '<br> <span style="color:gray">(tû)</span> ' .. impNegForm2.s2
.. '\n|-'
.. '\n| valign="top" | <span style="color:gray">(hûn)</span> ' .. infoTense.impPresent.conj.p2
.. '\n| valign="top" | <span style="color:gray">(hûn)</span> ' .. negInfoTense.impPresent.conj.p2
.. '<br> <span style="color:gray">(hûn)</span> ' .. impNegForm2.p2
..'\n|}'
.. '\n|-'
.. '\n| colspan="8" id="ind" class="mood" | Raweya pêşkerî - <small><i>Indicative</i></small>'
.. '\n|-'
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('indPresent')
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('indPreterite')
.. '\n|-'
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('indImperfect')
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('indPluperfect')
.. '\n|-'
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('indFuture')
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('indFuturePerfect')
.. '\n|-'
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('indPerfect')
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('indNwPluperfect')
.. '\n|-'
.. '\n| colspan="8" id="subj" class="mood" | Raweya xwestekî - <small><i>Subjunctive</i></small>'
.. '\n|-'
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('subjPresent')
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('subjPreterite')
.. '\n|-'
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('subjImperfect')
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('subjPluperfect')
.. '\n|-'
.. '\n| colspan="8" id="cond" class="mood" | Raweya mercî - <small><i>Conditional</i></small>'
.. '\n|-'
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('condPresent')
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('condPreterite')
.. '\n|}'
end
return export
bfwmehphnl4qlmm13mniu8urkdfffvl
6237499
6237490
2026-06-12T02:43:48Z
Ghybu
1393
6237499
Scribunto
text/plain
local export = {}
local conj = require('Modul:ku-tewandin/ceribandin')
local lang = mw.getContentLanguage()
function export.tablo(frame)
local args = frame:getParent().args
local baseOpts = {
isTransitive = args['form'],
isCompoundVerb = args['valahî'] or false,
preSimpleVerb = args['pêşgir'] or '',
postSimpleVerb = args['paşgir'] or '',
accent = args['devok'] or 'std',
-- overridePreverb:
presentBi = args['nihaBi'] or nil,
presentDi = args['nihaDi'] or nil,
pastBi = args['borîBi'] or nil,
pastDi = args['borîDi'] or nil,
sameBi = args['bi'] or nil,
sameDi = args['di'] or nil,
-- overrideNegPrefix:
presentNa = args['na'] or nil,
presentNe = args['nihaNe'] or nil,
pastNe = args['borîNe'] or nil,
sameNe = args['ne'] or nil,
impMe = args['me'] or nil,
-- impNegForm = 1, -- By default negative form with 'me' (1).
-- tags = 'erê',
-- addPreverbParticles = 'erê',
}
local presentStems = {args['niha'], args['niha2'], args['niha3']}
local pastStems = {args['borî'], args['borî2'], args['borî3']}
if (baseOpts.isTransitive == 'gerguhêz') then
baseOpts.isTransitive = true
elseif (baseOpts.isTransitive == 'negerguhêz') then
baseOpts.isTransitive = false
else
return '<span style="color:red">form = gerghuhêz / negerguhêz</span>'
end
if (baseOpts.isCompoundVerb == 'erê') then
baseOpts.isCompoundVerb = true
else
baseOpts.isCompoundVerb = false
end
-- Conjugation table in all tenses
local infoTense = conj.conjugateAllTenses(baseOpts, presentStems, pastStems)
-- Negatives conjugations table
local negInfoTense = conj.conjugateAllTenses(baseOpts, presentStems, pastStems, 'negative')
-- Imperatrive form '2'; negative form with 'ne'
baseOpts.impNegForm = 2
local impNegForm2 = conj.conjugateLong(baseOpts, 'impPresent', presentStems, pastStems, 'negative').conj
-- Creation of internal conjugation tables for the different tenses
local function conjugateTable(tense)
local nameKu = lang:ucfirst(infoTense[tense].nameKu) -- Kurdish name
local nameEn = lang:ucfirst(infoTense[tense].nameEn) -- English name
local idName = infoTense[tense].name -- 'tenseRules' name (indPresent, ...)
local classStem = infoTense[tense].stem -- 'present' or 'past'
-- First, create the table header.
local tabHeader = '\n! colspan="2" id="' .. idName .. '"'
.. 'class="' .. classStem .. '-stem tense-table-title" |'
.. nameKu .. ' - <small><i>-{'.. nameEn ..'}-</i></small>'
.. '\n|-'
.. '\n! class="negative" | Erênî'
.. '\n! class="positive" | Neyînî'
.. '\n|-'
-- Create the table body.
local tabBody = ''
for _, pers in ipairs(conj.order) do
tabBody = tabBody .. '\n|' .. infoTense[tense].conj[pers]
.. '\n|' .. negInfoTense[tense].conj[pers]
.. '\n|-'
end
-- Create the table (header + body).
local tab = '\n{| cellpadding="2" class="tense-table"'
.. '\n|-'
.. tabHeader
.. tabBody
.. '\n|}'
return tab
end
--Retrieving some parameters for creating the main table header
local verb = args[1]
local transitivity = args['form']
local preSimpleVerb = args['pêşgir'] or ''
local postSimpleVerb = args['paşgir'] or ''
-- Cureyê lêkerê
local verbStruc = conj.verbStruct(baseOpts.isCompoundVerb, baseOpts.preSimpleVerb)
if (verbStruc == 'preverbVerb') then
verbStruc = 'pêkhatî'
elseif (verbStruc == 'compoundVerb') then
verbStruc = 'hevedudanî'
else
verbStruc = 'xwerû'
end
local prsStemsFormat = {}
for _, stem in ipairs(presentStems) do
if stem then prsStemsFormat[#prsStemsFormat+1] = preSimpleVerb .. '-' .. stem ..'-' end
end
local pstStemsFormat = {}
for _, stem in ipairs(pastStems) do
if stem then pstStemsFormat[#pstStemsFormat+1] = preSimpleVerb .. '-' .. stem ..'-' end
end
local prsStems = table.concat(prsStemsFormat, ' / ') .. postSimpleVerb
local pstStems = table.concat(pstStemsFormat, ' / ') .. postSimpleVerb
return
'{| align="center" class="conj-table"'
.. '\n|-'
.. '\n| colspan="8" class="title" | Tewandina lêkera [[' .. verb .. ']]<br><span style="font-weight:normal;">(' .. verbStruc .. ', ' .. transitivity .. ')</span>'
.. '\n|-'
.. '\n! colspan="2" class="present-stem" | Rehê dema niha'
.. '\n! colspan="6" style="font-weight:normal; text-align:center; border-bottom:dotted 1px grey;" | ' .. prsStems
.. '\n|-'
.. '\n! colspan="2" class="past-stem" | Rehê dema borî'
.. '\n! colspan="6" style="font-weight:normal; text-align:center;" | ' .. pstStems
.. '\n|-'
.. '\n|'
.. '\n|-'
.. '\n| colspan="8" id="imp" class="mood" | Raweya fermanî - <small><i>Imperative</i></small>'
.. '\n|-'
.. '\n| colspan="8" valign="top" | '
.. '\n{| cellpadding="2" class="tense-table"'
.. '\n|-'
.. '\n| colspan="2" class="present-stem" style="border-top:1px dotted grey; border-bottom:1px dotted grey"| '
.. '\n|-'
.. '\n! class="negative" | Erênî'
.. '\n! class="positive" | Neyînî'
.. '\n|-'
.. '\n| valign="top" | <span style="color:gray">(tû)</span> ' .. infoTense.impPresent.conj.s2
.. '\n| valign="top" | <span style="color:gray">(tû)</span> ' .. negInfoTense.impPresent.conj.s2
.. '<br> <span style="color:gray">(tû)</span> ' .. impNegForm2.s2
.. '\n|-'
.. '\n| valign="top" | <span style="color:gray">(hûn)</span> ' .. infoTense.impPresent.conj.p2
.. '\n| valign="top" | <span style="color:gray">(hûn)</span> ' .. negInfoTense.impPresent.conj.p2
.. '<br> <span style="color:gray">(hûn)</span> ' .. impNegForm2.p2
..'\n|}'
.. '\n|-'
.. '\n| colspan="8" id="ind" class="mood" | Raweya pêşkerî - <small><i>Indicative</i></small>'
.. '\n|-'
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('indPresent')
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('indPreterite')
.. '\n|-'
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('indImperfect')
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('indPluperfect')
.. '\n|-'
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('indFuture')
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('indFuturePerfect')
.. '\n|-'
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('indPerfect')
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('indNwPluperfect')
.. '\n|-'
.. '\n| colspan="8" id="subj" class="mood" | Raweya xwestekî - <small><i>Subjunctive</i></small>'
.. '\n|-'
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('subjPresent')
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('subjPreterite')
.. '\n|-'
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('subjImperfect')
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('subjPluperfect')
.. '\n|-'
.. '\n| colspan="8" id="cond" class="mood" | Raweya mercî - <small><i>Conditional</i></small>'
.. '\n|-'
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('condPresent')
.. '\n| colspan="4" valign="top" | ' .. conjugateTable('condPreterite')
.. '\n|}'
end
return export
jkf9w7agkq5yuxzfpqxqv9rdrvukbnc
Modul:ku-tewandin/ceribandin
828
1356654
6237477
6237383
2026-06-11T21:52:23Z
Ghybu
1393
---
6237477
Scribunto
text/plain
-- Modula tewandina lêkerên kurmancî
local export = {}
-- Load irregular forms table
-- local irreg = require('Module:ku-tewandin/nestandard')
local langKu = require("Modul:languages").getByCode("ku")
local link = require('Module:links').language_link
local shallowCopy = require("Module:table/shallowCopy")
local deepCopy = require("Module:table/deepCopy")
-- =============================================================================
-- Pronouns in Kurmanji
-- =============================================================================
export.order = {"s1", "s2", "s3", "p1", "p2", "p3"}
export.pronouns = {
s1 = "ez", p1 = "em",
s2 = "tu", p2 = "hûn",
s3 = "ew", p3 = "ew"
}
export.obliquePronouns = {
s1 = "min", p1 = "me",
s2 = "te", p2 = "we",
s3 = "wê/wî", p3 = "wan"
}
export.agents = {
s1 = "te, wî, wê, we, wan", p1 = "te, wî, wê, we, wan",
s2 = "min, wî, wê, me, wan", p2 = "min, wî, wê, me, wan",
s3 = "min, te, wî, wê, me, we, wan", p3 = "min, te, wî, wê, me, we, wan"
}
-- Oblique pronoun (green)
export.obliquePronounsGreen = {
s1 = '<span style="color:green">min</span>',
s2 = '<span style="color:green">te</span>',
s3 = '<span style="color:green">wê/wî</span>',
p1 = '<span style="color:green">me</span>',
p2 = '<span style="color:green">we</span>',
p3 = '<span style="color:green">wan</span>'
}
-- ─────────────────────────────────────────────────────────────────────────────
-- 1) This function returns correct subject/agent pronoun, ergativity rule:
-- - Transitive verbs in past tenses → oblique pronoun (green) = agent
-- - All other cases → direct pronoun (no color) = subject
-- 2) Also add the subjunctive prefix "(bila)"
-- ─────────────────────────────────────────────────────────────────────────────
function export.conjPronouns(stemType, mode, isTransitive)
local pronouns = shallowCopy(export.pronouns)
-- Ergativity in kurdish: transitive verbs that are conjugated with the past tense stem are
-- conjugated according to the object, not the subject.
-- Therefore, to have an ergative construction,
-- the verb must be transitive and its stem must be the stem of the past tense.
local isErgative = isTransitive and (stemType == 'past')
-- If it's ergative, we use oblique pronouns: "min", "te", ...
-- If it's not ergative, we use normal pronouns: "ez", "tu", ...
if isErgative then
pronouns = shallowCopy(export.obliquePronounsGreen)
end
-- For the subjunctive mood, we add "(bila)" at the beginning.
if mode == 'subjunctive' then
local subjPrefix = '<span style="color:gray">(bila)</span>'
for _, pers in ipairs(export.order) do
pronouns[pers] = subjPrefix .. ' ' .. pronouns[pers]
end
end
return pronouns
end
-- =============================================================================
-- VERBAL STRUCTURE IN THE INFINITIVE:
-- Verbs in the infinitive appear in three main forms:
-- 1) Simple verb (indivisible light verb):
-- - ex.: "kirin", "çûn", "xwarin", ...
-- 2) Verbs with preverbs (preverb + simple verb):
-- - ex.: "rakirin" (ra- + kirin), "çêkirin" (çê- + kirin), "vexwarin" (ve- + xwarin), ...
-- - Preverb verbs don't use the prefix "bi-" (ez ê rakim , ew ê rake , ...)
-- 3) Compound verbs, construction with non-verbal element (the noun is not attached to the verb):
-- - Left of the simple verb: "hez kirin" ("hez" + "kirin"), "li dar xistin" ("li dar" + "xistin"), ...
-- - Right of the simple verb: "kirin der" ("kirin" + "der"), "girtin ser xwe" ("girtin" + "ser xwe"), ...
-- - Compound verbs use the prefix "bi-" (ez ê hez bi-kim , ew ê hez bi-ke )
-- STRUCTURE: preSimpleVerb + spacing + simpleVerb + postSimpleVerb
-- EX. kirin: preSimpleVerb=''; spacing=false; simpleVerb='kirin'; postSimpleVerb=''
-- rakirin: preSimpleVerb='ra'; spacing=false; simpleVerb='kirin'; postSimpleVerb=''
-- hez kirin: preSimpleVerb='hez'; spacing=true; simpleVerb='kirin'; postSimpleVerb=''
-- pev çûn: preSimpleVerb='pev'; spacing=true; simpleVerb='çûn'; postSimpleVerb=''
-- kirin der: preSimpleVerb=''; spacing=false; simpleVerb='kirin'; postSimpleVerb='der'
-- WARNING: Conjugation can vary depending on the type of verb.
-- For example, in the future tense,the prefix "bi" is used for compound verbs,
-- but not for preverbal verbs, see the function that manages it "tenseRules" table.
-- This table does not yet support the mixed case: a verb composed of a noun and a preverb verb.
-- =============================================================================
function export.verbStruct(isCompoundVerb, preSimpleVerb)
local struct
if (preSimpleVerb and preSimpleVerb ~= '' and not isCompoundVerb) then
struct = 'preverbVerb'
elseif isCompoundVerb then
struct = 'compoundVerb'
else
struct = 'simpleVerb'
end
return struct
end
-- ================================================================
-- INFLECTIONAL ENDINGS
-- Assigns verb inflectional endings (suffixes) to all tenses
-- ================================================================
local getEndings = {}
do
-- ───────────────────────────────────────────────────────────────
-- Ending using present stem
-- ───────────────────────────────────────────────────────────────
getEndings['present'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends = {}
if mw.ustring.match(stem, '[aeêiîouû]$') then
ends['std'] = {s1='m', s2='yî', s3='', p1='n', p2='n', p3='n'}
ends['rojhilatî'] = {s1='m', s2='(y)', s3='t', p1='yn', p2='n', p3='n'}
else
ends['std'] = {s1='im', s2='î', s3='e', p1='in', p2='in', p3='in'}
ends['rojhilatî'] = {s1='im', s2='î', s3='<u>it</u>/ît', p1='în', p2='in', p3='in'}
end
return ends
end
-- ───────────────────────────────────────────────────────────────
-- Ind. preterite + ind. imperfect ending
-- ───────────────────────────────────────────────────────────────
getEndings['past'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends
if mw.ustring.match(stem, '[aeêiouû]$') then
ends = {s1='m', s2='yî', s3='', p1='n', p2='n', p3='n'}
elseif mw.ustring.match(stem, 'î$') then
-- if self.name == 'indImperfect' then
-- -- special indicative ind. imperfect rule
-- ends = {s1='yam', s2='yayî', s3='ya', p1='yan', p2='yan', p3='yan'}
-- end
ends = {s1='m', s2='', s3='', p1='n', p2='n', p3='n'}
else
ends = {s1='im', s2='î', s3='', p1='in', p2='in', p3='in'}
end
return ends
end
-- ───────────────────────────────────────────────────────────────
-- Compound endings with auxiliary "bûn"
-- Inflectional endings are created by taking the different forms of the
-- verb "bûn" (with present stem "-b-" and past stem "-bû-") and
-- adding an "i-" prefix before them: "i-b-im", "i-bû-m", "i-bû-me", "i-bû-ma".
-- This "i-" varies according to the final letter of the verb stem.
-- ───────────────────────────────────────────────────────────────
local function normalize_i(stem)
local prfx_i = "i"
if mw.ustring.match(stem, "ya$") or
mw.ustring.match(stem, "[îû]$") then -- cf. karîn (-karî-)
prfx_i = ""
elseif mw.ustring.match(stem, '[aeêiou]$') then
prfx_i = "yi"
end
return prfx_i
end
getEndings['ibim'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bim", p1 = prfx_i .. "bin",
s2 = prfx_i .. "bî", p2 = prfx_i .. "bin",
s3 = prfx_i .. "be", p3 = prfx_i .. "bin"
}
end
getEndings['ibûm'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bûm", p1 = prfx_i .. "bûn",
s2 = prfx_i .. "bûyî", p2 = prfx_i .. "bûn",
s3 = prfx_i .. "bû", p3 = prfx_i .. "bûn"
}
end
getEndings['ibûme'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bûme", p1 = prfx_i .. "bûne",
s2 = prfx_i .. "bûyiye", p2 = prfx_i .. "bûne",
s3 = prfx_i .. "bûye", p3 = prfx_i .. "bûne"
}
end
getEndings['ibûma'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bûma", p1 = prfx_i .. "bûna",
s2 = prfx_i .. "bûyayî", p2 = prfx_i .. "bûna",
s3 = prfx_i .. "bûya", p3 = prfx_i .. "bûna"
}
end
-- ───────────────────────────────────────────────────────────────
-- Ind. perfect ending.
-- ───────────────────────────────────────────────────────────────
getEndings['ime'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends
if mw.ustring.match(stem, '[aeêiîouû]$') then
ends = {s1="me", s2="yî", s3="ye", p1="ne", p2="ne", p3="ne"}
else
ends = {s1="ime", s2="iyî", s3="iye", p1="ine", p2="ine", p3="ine"}
end
return ends
end
-- ───────────────────────────────────────────────────────────────
-- Subj. Imperfect ending.
-- ───────────────────────────────────────────────────────────────
getEndings['ama'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends
-- The doublet in "-iyan" of verbs in -"în" (gerîn/-geriya-, kenîn/-keniya-, ...),
-- in the conditional and subjunctive moods, a doublet "yaya" appears; it's removed.
-- -yayayî → -yayî; -yaya → -ya
if mw.ustring.match(stem, '(ya)$') then
ends = {s1="ma", s2="yî", s3="", p1="na", p2="na", p3="na"}
elseif mw.ustring.match(stem, '[aeêiîouû]$') then
ends = {s1="ma", s2="yayî", s3="ya", p1="na", p2="na", p3="na"}
else
ends = {s1="ama", s2="ayî", s3="a", p1="ana", p2="ana", p3="ana"}
end
return ends
end
end
-- =============================================================================
-- RULES FOR PREVERBS: "bi-" and "di-"
-- There are two preverbs: "bi-" and "di-". These preverbs can change form
-- depending on the first letters of the verb’s present stem or past stem.
-- =============================================================================
local getPreverb = {}
do
getPreverb['bi'] = function (self, opts)
opts = opts or {}
local stem = opts.stem
local verbStruct = opts.verbStruct
local overridePreverb = opts.overridePreverb
local accent = opts.accent
-- Devoka rojhilatî:
-- @Ferhengvan: Dema bêt bi lêkera alîkar "ê / dê" û bi rehê lêkerê yê
-- dema niha û pêşgirên kesî tê çêkirin. Pêşgira "bi-" li destpêka lêkera
-- serekî nîne: - ez ê / dê xw-im (standard: ez ê/dê bi-xw-im).
if (self.name == 'indFuture' and accent == 'rojhilatî') then
return ''
end
-- Preverb verbs don't use the preverb "bi-": ra-kirin (ez ê rakim), ve-xwarin (ez ê vexwim) , ...
-- But compound verb and simple verbs use it: hez kirin (ez ê hez bi-kim), lê bigirin (ez ê lê bi-girim), ...
if (verbStruct == 'preverbVerb') then
return ''
end
-- If the preverb "bi" is provided.
if (self.stem == 'present' and overridePreverb.presentBi) then
return overridePreverb.presentBi
elseif (self.stem == 'past' and overridePreverb.pastBi) then
return overridePreverb.pastBi
elseif overridePreverb.sameBi then
return overridePreverb.sameBi
end
-- Modification of the preverbe "bi-" according to the last letter of the stem.
if mw.ustring.match(stem, '^[aeêiîouû]') then
return 'b'
end
return 'bi'
end
getPreverb['di'] = function (self, opts)
opts = opts or {}
local stem = opts.stem
local overridePreverb = opts.overridePreverb
-- If the preverb "di" is provided.
if (self.stem == 'present' and overridePreverb.presentDi) then
return overridePreverb.presentDi
elseif (self.stem == 'past' and overridePreverb.pastDi) then
return overridePreverb.pastDi
elseif overridePreverb.sameDi then
return overridePreverb.sameDi
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 (self, opts)
-- self: reserved for future use
local _ = self -- delete the warning (unused argument)
opts = opts or {}
local stem = opts.stem
local overrideNa = opts.overrideNegPrefix.presentNa
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 (self, opts)
opts = opts or {}
local stem = opts.stem
local tenseName = self.name
local impNegForm = opts.impNegForm -- form "1" or "2" of imp.
local overrideNegPrefix = opts.overrideNegPrefix
-- If the neg. prefix "di" is provided.
if (self.stem == 'present' and overrideNegPrefix.presentNe) then
return '<b>' .. overrideNegPrefix.presentNe .. '</b>'
elseif (self.stem == 'past' and overrideNegPrefix.pastNe) then
return '<b>' .. overrideNegPrefix.pastNe .. '</b>'
elseif overrideNegPrefix.sameNe then
return '<b>' .. overrideNegPrefix.sameNe .. '</b>'
end
local negPrefix = 'ne'
-- Bo neyînî: pêşgira "di-" tenê di nav dema "indImperfect" de tê bikaranîn.
-- ji ber vê yekê 'negPrefix' hertim (?) 'ne' ye ji ber ku dikeve pêş
-- pêşgira "di-": wê/wî ne-di-elimand (elimandin)
if (tenseName == 'indImperfect') then
return '<b>' .. negPrefix .. '</b>'
end
-- 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 overridePreverb = opts.overridePreverb {
-- Preverb (bi-, di)
presentBi = opts.presentBi or nil,
presentDi = opts.presentDi or nil,
pastBi = opts.pastBi or nil,
pastDi = opts.pastDi or nil,
-- same preverb (for past and present stem)
sameBi = opts.sameBi or nil,
sameDi = opts.sameDi or nil,
}
local overrideNegPrefix = opts.overrideNegPrefix{
-- Neg. prefix (na-, ne-)
presentNa = opts.presentNa or nil,
presentNe = opts.presentNe or nil,
pastNe = opts.pastNe or nil,
-- same neg. prefix (for past and present stem)
sameNe = opts.sameNe or nil,
}
-- By default, the negation of the imperative is constructed from the prefix "me-"".
-- To obtain the second variant, the prefix with "ne-", you must specify "impNegForm=2".
local impNegForm = opts.impNegForm or nil
-- Accent/ Devok
local accent = opts.accent or 'std'
-- If "tags='na'", remove links/tags
local tags = opts.tags or 'erê'
-- If addPreverbParticles='na', remove preverb particles (ê/dê) before
-- the conjugated verbs.
local addPreverbParticles = opts.addPreverbParticles or 'erê'
-- We add a space to the left of the "postSimpleVerb" because it shouldn't be attached
-- to the simple verb.
if (postSimpleVerb ~= '' and postSimpleVerb ~=nil) then
postSimpleVerb = ' ' .. postSimpleVerb
end
-- Access to the classification table and retrieval of verb tense parameters
local infoTense = deepCopy(export.tenseRules[tense], 'copy') or false
-- We check that this tense is indeed in table "tenseRules".
if (not infoTense) then
return '<span style="color:red">Unknown tense: ' .. tense ..'</span>'
end
-- We check that one of the two parameters of the stem is given
if (infoTense.stem == 'present' and not presentStem) then
return '<span style="color:red">presentStem parameter required</span>'
elseif (infoTense.stem == 'past' and not pastStem) then
return '<span style="color:red">pasttStem parameter required</span>'
end
-- Choice between the present stem or past stem
local stem = (infoTense.stem == 'present') and presentStem or pastStem
--────────────────────────────
-- Conjugation construction --
-- ───────────────────────────
local preverb = ''
local negPrefix = ''
-- Ruturns the verb type: "simpleVerb" or "preverbVerb" or "compoundVerb"
local verbStruct = export.verbStruct(isCompoundVerb, preSimpleVerb)
if isNegative then
negPrefix = infoTense:negPrefix{stem=stem,
impNegForm=impNegForm,
overrideNegPrefix=overrideNegPrefix}
if infoTense.negPreverb then
preverb = infoTense:negPreverb{stem=stem, verbStruct=verbStruct,
overridePreverb=overridePreverb}
end
else
if infoTense.preverb then
preverb = infoTense:preverb{stem=stem, verbStruct=verbStruct,
overridePreverb=overridePreverb,
accent=accent}
end
end
infoTense.conj = {}
local spacing = isCompoundVerb and ' ' or ''
local endings = infoTense:endings(stem)
-- 'rojhilatî' accent (devok) for present stem
if (infoTense.stem == 'present') then
if (accent == 'rojhilatî') then
endings = endings['rojhilatî']
else
endings = endings['std']
end
end
local preverbParticles = export.getPreverbParticules(infoTense.preverbParticle, infoTense.stem, isTransitive)
local isErgative = isTransitive and (infoTense.stem == 'past')
-- Creating the conjugation table for a given tense
for _, pers in ipairs(export.order) do
local ending
local conjSimbleVerb
local conjVerb
if isErgative then
ending = endings.s3
else
ending = endings[pers]
end
-- Adding space after the preverbal particle, and
-- if "addPreverbParticles='na'": remove preverb particles (ê/dê).
local preverbParticle = ''
if infoTense.preverbParticle and addPreverbParticles ~= 'na' then
preverbParticle = preverbParticles[pers] .. ' '
end
conjSimbleVerb = negPrefix .. preverb .. stem .. ending
-- Adding prefixe and suffixe
conjVerb = preSimpleVerb .. spacing .. conjSimbleVerb .. postSimpleVerb
-- Spelling correction(îy -> iy)
conjVerb = mw.ustring.gsub(conjVerb, 'îy', 'iy')
-- Add a link / if tags='na' no links
if tags ~= 'na' then
conjVerb = link{term=conjVerb, lang=langKu}
end
-- Addition of the preverbal particle
infoTense.conj[pers] = preverbParticle .. conjVerb
end
-- Imperative
if (infoTense.name == 'impPresent') then
infoTense.conj.s1 = nil
infoTense.conj.s2 = infoTense.conj.s3
infoTense.conj.s3 = nil
infoTense.conj.p1 = nil
-- infoTense.conj.p2 = infoTense.conj.p2
infoTense.conj.p3 = nil
end
return infoTense
end
-- =============================================================================
-- END
-- =============================================================================
-- Some useful tools
-- =============================================================================
-- Returns the list of verb tenses
export.tensesList = function()
local list = {}
for _, tense in pairs(export.tenseRules) do
table.insert(list, tense.name)
end
return list
end
-- Concatenation of pronouns and conjugated verbs
-- (for a given conjugate tense in all persons of that tense)
function export.concatPronomsVerbs(pronoms, conjVerbs)
local concatTab = {}
for _, pers in ipairs(export.order) do
concatTab[pers] = pronoms[pers] .. ' ' .. conjVerbs[pers]
end
return concatTab
end
-- =============================================================================
-- ADDITIONAL STEM OF THE PAST AND PRESENT (pastStem2, ... and presentStem2, ...)
-- This function does nothing more than add additional parameters for verb stems
-- in the past and present tenses.
-- Conjugations for the different stems will be separated by "/"
-- =============================================================================
function export.conjugateLong(baseOpts, tense, presentStems, pastStems)
local opts = baseOpts or {}
opts.tense = tense or nil
presentStems = presentStems or {}
pastStems = pastStems or {}
local infoTense = deepCopy(export.tenseRules[tense], 'copy') or false
-- We check that this tense is indeed in table "tenseRules".
if not infoTense then
return '<span style="color:red">Unknown tense: ' .. tense ..'</span>'
end
local stems = (infoTense.stem == 'present') and presentStems or pastStems
-- For each verb stem, its conjugation table is calculated and stored in conjTabs.
local conjTabs = {}
for i = 1, #stems do
if stems[i] then
if (infoTense.stem == 'past') then opts.pastStem = stems[i] end
if (infoTense.stem == 'present') then opts.presentStem = stems[i] end
local conj = export.conjugate(opts).conj
table.insert(conjTabs, conj)
end
end
-- We concatenate each row of the conjugation tables.
local concatConjTabs = {}
for _, pers in ipairs(export.order) do
local frag = {}
for i = 1, #conjTabs do
local val = conjTabs[i][pers]
if val then table.insert(frag, tostring(val)) end
end
concatConjTabs[pers] = table.concat(frag, " / ")
end
infoTense.conj = concatConjTabs
return infoTense
end
-- ====================================================================================
-- VERB CONUGATION IN ALL TENSES WITH OR WITHOUT PRONOUMS
-- ====================================================================================
function export.conjugateAllTenses(baseOpts, presentStems, pastStems, negation, concatPrs)
-- "concatPrs=false" table without pronouns
local opts = baseOpts or {}
if negation == 'negative' then opts.isNegative = true end
-- Concatenation of pronouns and conjugated verbs
local concatPronomsVerbs = export.concatPronomsVerbs
-- Tenses list
local tensesList = export.tensesList()
-- Conjugation in all tenses
local conjTab = {}
for _, tense in ipairs(tensesList) do
local infoTense = deepCopy(export.tenseRules[tense], 'copy')
-- We create the conjugation table without the pronouns.
conjTab[tense] = deepCopy(export.conjugateLong(opts, tense, presentStems, pastStems), 'copy')
-- We concatenate the pronouns and the verbs if "concatPrs" is different of "false"
-- No pronouns for the imperative mood
if (tense ~= 'impPresent' and concatPrs ~= false) then
local pronoms = deepCopy(export.conjPronouns(infoTense.stem, infoTense.mode, opts.isTransitive))
conjTab[tense].conj = concatPronomsVerbs(pronoms, conjTab[tense].conj)
end
end
return conjTab
end
-- ====================================================================================
-- Allows you to obtain a given conjugation from a model.
-- Ex. {{#invoke:ku-tewandin|tew|dem=indPresent|kes=s1}}
-- See {{ku-tewîn-lk-niha}}
-- ====================================================================================
function export.tew(frame)
local args = frame:getParent().args
local baseOpts = {
isNegative = frame.args['neyînî'] or false,
isTransitive = args['form'],
isCompoundVerb = args['valahî'] or false,
preSimpleVerb = args['pêşgir'] or nil,
postSimpleVerb = args['paşgir'] or nil,
accent = args['devok'] or 'std',
tags = args['lînk'] or 'erê',
overrideBi = args['bi'] or nil,
overrideDi = args['di'] or nil,
overrideNa = args['na'] or nil,
overrideNe = args['ne'] or nil,
impNegForm = nil
}
local tense = frame.args['dem'] or nil
local pers = frame.args['kes'] or nil
local presentStems = {args['niha'], args['niha2'], args['niha3']}
local pastStems = {args['borî'], args['borî2'], args['borî3']}
-- A few checks
if (baseOpts.isTransitive == 'gerguhêz') then
baseOpts.isTransitive = true
elseif (baseOpts.isTransitive == 'negerguhêz') then
baseOpts.isTransitive = false
else
return '<span style="color:red">form = gerguhêz / negerguhêz</span>'
end
if (baseOpts.isCompoundVerb == 'erê') then
baseOpts.isCompoundVerb = true
else
baseOpts.isCompoundVerb = false
end
if (baseOpts.isNegative == 'erê') then
baseOpts.isNegative = true
end
local tabConj = export.conjugateLong(baseOpts, tense, presentStems, pastStems).conj
return tabConj[pers]
end
-- ====================================================================================
-- GET COMMMA SEPARED FORMS
-- Bnr. [[MediaWiki:Gadget-QQ.js]]
-- Ex. {{#invoke:ku-tewandin|get_comma_separated_forms|niha=kev|borî=ket}}
-- ====================================================================================
function export.get_comma_separated_forms(frame)
local opts = {
presentStem = frame.args['niha'],
pastStem = frame.args['borî'],
isTransitive = false,
isNegative = false,
isCompoundVerb = frame['valahî'] or false,
preSimpleVerb = frame['pêşgir'] or '',
postSimpleVerb = frame['paşgir'] or '',
overridePreverb = {
presentBi = frame['presentBi'] or nil,
presentDi = frame['presentDi'] or nil,
pastBi = frame['pastBi'] or nil,
pastDi = frame['pastDi'] or nil,
sameBi = frame['di'] or nil,
sameDi = frame['di'] or nil,
},
overrideNegPrefix = {
presentNa = frame['na'] or nil,
presentNe = frame['nihaNe'] or nil,
pastNe = frame['borîNe'] or nil,
sameNe = 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
76uwqtrdaxq1iodka3avflax8s8eqnc
6237481
6237477
2026-06-11T22:02:46Z
Ghybu
1393
6237481
Scribunto
text/plain
-- Modula tewandina lêkerên kurmancî
local export = {}
-- Load irregular forms table
-- local irreg = require('Module:ku-tewandin/nestandard')
local langKu = require("Modul:languages").getByCode("ku")
local link = require('Module:links').language_link
local shallowCopy = require("Module:table/shallowCopy")
local deepCopy = require("Module:table/deepCopy")
-- =============================================================================
-- Pronouns in Kurmanji
-- =============================================================================
export.order = {"s1", "s2", "s3", "p1", "p2", "p3"}
export.pronouns = {
s1 = "ez", p1 = "em",
s2 = "tu", p2 = "hûn",
s3 = "ew", p3 = "ew"
}
export.obliquePronouns = {
s1 = "min", p1 = "me",
s2 = "te", p2 = "we",
s3 = "wê/wî", p3 = "wan"
}
export.agents = {
s1 = "te, wî, wê, we, wan", p1 = "te, wî, wê, we, wan",
s2 = "min, wî, wê, me, wan", p2 = "min, wî, wê, me, wan",
s3 = "min, te, wî, wê, me, we, wan", p3 = "min, te, wî, wê, me, we, wan"
}
-- Oblique pronoun (green)
export.obliquePronounsGreen = {
s1 = '<span style="color:green">min</span>',
s2 = '<span style="color:green">te</span>',
s3 = '<span style="color:green">wê/wî</span>',
p1 = '<span style="color:green">me</span>',
p2 = '<span style="color:green">we</span>',
p3 = '<span style="color:green">wan</span>'
}
-- ─────────────────────────────────────────────────────────────────────────────
-- 1) This function returns correct subject/agent pronoun, ergativity rule:
-- - Transitive verbs in past tenses → oblique pronoun (green) = agent
-- - All other cases → direct pronoun (no color) = subject
-- 2) Also add the subjunctive prefix "(bila)"
-- ─────────────────────────────────────────────────────────────────────────────
function export.conjPronouns(stemType, mode, isTransitive)
local pronouns = shallowCopy(export.pronouns)
-- Ergativity in kurdish: transitive verbs that are conjugated with the past tense stem are
-- conjugated according to the object, not the subject.
-- Therefore, to have an ergative construction,
-- the verb must be transitive and its stem must be the stem of the past tense.
local isErgative = isTransitive and (stemType == 'past')
-- If it's ergative, we use oblique pronouns: "min", "te", ...
-- If it's not ergative, we use normal pronouns: "ez", "tu", ...
if isErgative then
pronouns = shallowCopy(export.obliquePronounsGreen)
end
-- For the subjunctive mood, we add "(bila)" at the beginning.
if mode == 'subjunctive' then
local subjPrefix = '<span style="color:gray">(bila)</span>'
for _, pers in ipairs(export.order) do
pronouns[pers] = subjPrefix .. ' ' .. pronouns[pers]
end
end
return pronouns
end
-- =============================================================================
-- VERBAL STRUCTURE IN THE INFINITIVE:
-- Verbs in the infinitive appear in three main forms:
-- 1) Simple verb (indivisible light verb):
-- - ex.: "kirin", "çûn", "xwarin", ...
-- 2) Verbs with preverbs (preverb + simple verb):
-- - ex.: "rakirin" (ra- + kirin), "çêkirin" (çê- + kirin), "vexwarin" (ve- + xwarin), ...
-- - Preverb verbs don't use the prefix "bi-" (ez ê rakim , ew ê rake , ...)
-- 3) Compound verbs, construction with non-verbal element (the noun is not attached to the verb):
-- - Left of the simple verb: "hez kirin" ("hez" + "kirin"), "li dar xistin" ("li dar" + "xistin"), ...
-- - Right of the simple verb: "kirin der" ("kirin" + "der"), "girtin ser xwe" ("girtin" + "ser xwe"), ...
-- - Compound verbs use the prefix "bi-" (ez ê hez bi-kim , ew ê hez bi-ke )
-- STRUCTURE: preSimpleVerb + spacing + simpleVerb + postSimpleVerb
-- EX. kirin: preSimpleVerb=''; spacing=false; simpleVerb='kirin'; postSimpleVerb=''
-- rakirin: preSimpleVerb='ra'; spacing=false; simpleVerb='kirin'; postSimpleVerb=''
-- hez kirin: preSimpleVerb='hez'; spacing=true; simpleVerb='kirin'; postSimpleVerb=''
-- pev çûn: preSimpleVerb='pev'; spacing=true; simpleVerb='çûn'; postSimpleVerb=''
-- kirin der: preSimpleVerb=''; spacing=false; simpleVerb='kirin'; postSimpleVerb='der'
-- WARNING: Conjugation can vary depending on the type of verb.
-- For example, in the future tense,the prefix "bi" is used for compound verbs,
-- but not for preverbal verbs, see the function that manages it "tenseRules" table.
-- This table does not yet support the mixed case: a verb composed of a noun and a preverb verb.
-- =============================================================================
function export.verbStruct(isCompoundVerb, preSimpleVerb)
local struct
if (preSimpleVerb and preSimpleVerb ~= '' and not isCompoundVerb) then
struct = 'preverbVerb'
elseif isCompoundVerb then
struct = 'compoundVerb'
else
struct = 'simpleVerb'
end
return struct
end
-- ================================================================
-- INFLECTIONAL ENDINGS
-- Assigns verb inflectional endings (suffixes) to all tenses
-- ================================================================
local getEndings = {}
do
-- ───────────────────────────────────────────────────────────────
-- Ending using present stem
-- ───────────────────────────────────────────────────────────────
getEndings['present'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends = {}
if mw.ustring.match(stem, '[aeêiîouû]$') then
ends['std'] = {s1='m', s2='yî', s3='', p1='n', p2='n', p3='n'}
ends['rojhilatî'] = {s1='m', s2='(y)', s3='t', p1='yn', p2='n', p3='n'}
else
ends['std'] = {s1='im', s2='î', s3='e', p1='in', p2='in', p3='in'}
ends['rojhilatî'] = {s1='im', s2='î', s3='<u>it</u>/ît', p1='în', p2='in', p3='in'}
end
return ends
end
-- ───────────────────────────────────────────────────────────────
-- Ind. preterite + ind. imperfect ending
-- ───────────────────────────────────────────────────────────────
getEndings['past'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends
if mw.ustring.match(stem, '[aeêiouû]$') then
ends = {s1='m', s2='yî', s3='', p1='n', p2='n', p3='n'}
elseif mw.ustring.match(stem, 'î$') then
-- if self.name == 'indImperfect' then
-- -- special indicative ind. imperfect rule
-- ends = {s1='yam', s2='yayî', s3='ya', p1='yan', p2='yan', p3='yan'}
-- end
ends = {s1='m', s2='', s3='', p1='n', p2='n', p3='n'}
else
ends = {s1='im', s2='î', s3='', p1='in', p2='in', p3='in'}
end
return ends
end
-- ───────────────────────────────────────────────────────────────
-- Compound endings with auxiliary "bûn"
-- Inflectional endings are created by taking the different forms of the
-- verb "bûn" (with present stem "-b-" and past stem "-bû-") and
-- adding an "i-" prefix before them: "i-b-im", "i-bû-m", "i-bû-me", "i-bû-ma".
-- This "i-" varies according to the final letter of the verb stem.
-- ───────────────────────────────────────────────────────────────
local function normalize_i(stem)
local prfx_i = "i"
if mw.ustring.match(stem, "ya$") or
mw.ustring.match(stem, "[îû]$") then -- cf. karîn (-karî-)
prfx_i = ""
elseif mw.ustring.match(stem, '[aeêiou]$') then
prfx_i = "yi"
end
return prfx_i
end
getEndings['ibim'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bim", p1 = prfx_i .. "bin",
s2 = prfx_i .. "bî", p2 = prfx_i .. "bin",
s3 = prfx_i .. "be", p3 = prfx_i .. "bin"
}
end
getEndings['ibûm'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bûm", p1 = prfx_i .. "bûn",
s2 = prfx_i .. "bûyî", p2 = prfx_i .. "bûn",
s3 = prfx_i .. "bû", p3 = prfx_i .. "bûn"
}
end
getEndings['ibûme'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bûme", p1 = prfx_i .. "bûne",
s2 = prfx_i .. "bûyiye", p2 = prfx_i .. "bûne",
s3 = prfx_i .. "bûye", p3 = prfx_i .. "bûne"
}
end
getEndings['ibûma'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bûma", p1 = prfx_i .. "bûna",
s2 = prfx_i .. "bûyayî", p2 = prfx_i .. "bûna",
s3 = prfx_i .. "bûya", p3 = prfx_i .. "bûna"
}
end
-- ───────────────────────────────────────────────────────────────
-- Ind. perfect ending.
-- ───────────────────────────────────────────────────────────────
getEndings['ime'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends
if mw.ustring.match(stem, '[aeêiîouû]$') then
ends = {s1="me", s2="yî", s3="ye", p1="ne", p2="ne", p3="ne"}
else
ends = {s1="ime", s2="iyî", s3="iye", p1="ine", p2="ine", p3="ine"}
end
return ends
end
-- ───────────────────────────────────────────────────────────────
-- Subj. Imperfect ending.
-- ───────────────────────────────────────────────────────────────
getEndings['ama'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends
-- The doublet in "-iyan" of verbs in -"în" (gerîn/-geriya-, kenîn/-keniya-, ...),
-- in the conditional and subjunctive moods, a doublet "yaya" appears; it's removed.
-- -yayayî → -yayî; -yaya → -ya
if mw.ustring.match(stem, '(ya)$') then
ends = {s1="ma", s2="yî", s3="", p1="na", p2="na", p3="na"}
elseif mw.ustring.match(stem, '[aeêiîouû]$') then
ends = {s1="ma", s2="yayî", s3="ya", p1="na", p2="na", p3="na"}
else
ends = {s1="ama", s2="ayî", s3="a", p1="ana", p2="ana", p3="ana"}
end
return ends
end
end
-- =============================================================================
-- RULES FOR PREVERBS: "bi-" and "di-"
-- There are two preverbs: "bi-" and "di-". These preverbs can change form
-- depending on the first letters of the verb’s present stem or past stem.
-- =============================================================================
local getPreverb = {}
do
getPreverb['bi'] = function (self, opts)
opts = opts or {}
local stem = opts.stem
local verbStruct = opts.verbStruct
local overridePreverb = opts.overridePreverb
local accent = opts.accent
-- Devoka rojhilatî:
-- @Ferhengvan: Dema bêt bi lêkera alîkar "ê / dê" û bi rehê lêkerê yê
-- dema niha û pêşgirên kesî tê çêkirin. Pêşgira "bi-" li destpêka lêkera
-- serekî nîne: - ez ê / dê xw-im (standard: ez ê/dê bi-xw-im).
if (self.name == 'indFuture' and accent == 'rojhilatî') then
return ''
end
-- Preverb verbs don't use the preverb "bi-": ra-kirin (ez ê rakim), ve-xwarin (ez ê vexwim) , ...
-- But compound verb and simple verbs use it: hez kirin (ez ê hez bi-kim), lê bigirin (ez ê lê bi-girim), ...
if (verbStruct == 'preverbVerb') then
return ''
end
-- If the preverb "bi" is provided.
if (self.stem == 'present' and overridePreverb.presentBi) then
return overridePreverb.presentBi
elseif (self.stem == 'past' and overridePreverb.pastBi) then
return overridePreverb.pastBi
elseif overridePreverb.sameBi then
return overridePreverb.sameBi
end
-- Modification of the preverbe "bi-" according to the last letter of the stem.
if mw.ustring.match(stem, '^[aeêiîouû]') then
return 'b'
end
return 'bi'
end
getPreverb['di'] = function (self, opts)
opts = opts or {}
local stem = opts.stem
local overridePreverb = opts.overridePreverb
-- If the preverb "di" is provided.
if (self.stem == 'present' and overridePreverb.presentDi) then
return overridePreverb.presentDi
elseif (self.stem == 'past' and overridePreverb.pastDi) then
return overridePreverb.pastDi
elseif overridePreverb.sameDi then
return overridePreverb.sameDi
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 (self, opts)
-- self: reserved for future use
local _ = self -- delete the warning (unused argument)
opts = opts or {}
local stem = opts.stem
local overrideNa = opts.overrideNegPrefix.presentNa
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 (self, opts)
opts = opts or {}
local stem = opts.stem
local tenseName = self.name
local impNegForm = opts.impNegForm -- form "1" or "2" of imp.
local overrideNegPrefix = opts.overrideNegPrefix
-- If the neg. prefix "di" is provided.
if (self.stem == 'present' and overrideNegPrefix.presentNe) then
return '<b>' .. overrideNegPrefix.presentNe .. '</b>'
elseif (self.stem == 'past' and overrideNegPrefix.pastNe) then
return '<b>' .. overrideNegPrefix.pastNe .. '</b>'
elseif overrideNegPrefix.sameNe then
return '<b>' .. overrideNegPrefix.sameNe .. '</b>'
end
local negPrefix = 'ne'
-- Bo neyînî: pêşgira "di-" tenê di nav dema "indImperfect" de tê bikaranîn.
-- ji ber vê yekê 'negPrefix' hertim (?) 'ne' ye ji ber ku dikeve pêş
-- pêşgira "di-": wê/wî ne-di-elimand (elimandin)
if (tenseName == 'indImperfect') then
return '<b>' .. negPrefix .. '</b>'
end
-- 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 overridePreverb = opts.overridePreverb {
-- Preverb (bi-, di)
presentBi = opts.presentBi or nil,
presentDi = opts.presentDi or nil,
pastBi = opts.pastBi or nil,
pastDi = opts.pastDi or nil,
-- same preverb (for past and present stem)
sameBi = opts.sameBi or nil,
sameDi = opts.sameDi or nil,
}
local overrideNegPrefix = opts.overrideNegPrefix{
-- Neg. prefix (na-, ne-)
presentNa = opts.presentNa or nil,
presentNe = opts.presentNe or nil,
pastNe = opts.pastNe or nil,
-- same neg. prefix (for past and present stem)
sameNe = opts.sameNe or nil,
}
-- By default, the negation of the imperative is constructed from the prefix "me-"".
-- To obtain the second variant, the prefix with "ne-", you must specify "impNegForm=2".
local impNegForm = opts.impNegForm or nil
-- Accent/ Devok
local accent = opts.accent or 'std'
-- If "tags='na'", remove links/tags
local tags = opts.tags or 'erê'
-- If addPreverbParticles='na', remove preverb particles (ê/dê) before
-- the conjugated verbs.
local addPreverbParticles = opts.addPreverbParticles or 'erê'
-- We add a space to the left of the "postSimpleVerb" because it shouldn't be attached
-- to the simple verb.
if (postSimpleVerb ~= '' and postSimpleVerb ~=nil) then
postSimpleVerb = ' ' .. postSimpleVerb
end
-- Access to the classification table and retrieval of verb tense parameters
local infoTense = deepCopy(export.tenseRules[tense], 'copy') or false
-- We check that this tense is indeed in table "tenseRules".
if (not infoTense) then
return '<span style="color:red">Unknown tense: ' .. tense ..'</span>'
end
-- We check that one of the two parameters of the stem is given
if (infoTense.stem == 'present' and not presentStem) then
return '<span style="color:red">presentStem parameter required</span>'
elseif (infoTense.stem == 'past' and not pastStem) then
return '<span style="color:red">pasttStem parameter required</span>'
end
-- Choice between the present stem or past stem
local stem = (infoTense.stem == 'present') and presentStem or pastStem
--────────────────────────────
-- Conjugation construction --
-- ───────────────────────────
local preverb = ''
local negPrefix = ''
-- Ruturns the verb type: "simpleVerb" or "preverbVerb" or "compoundVerb"
local verbStruct = export.verbStruct(isCompoundVerb, preSimpleVerb)
if isNegative then
negPrefix = infoTense:negPrefix{stem=stem,
impNegForm=impNegForm,
overrideNegPrefix=overrideNegPrefix}
if infoTense.negPreverb then
preverb = infoTense:negPreverb{stem=stem, verbStruct=verbStruct,
overridePreverb=overridePreverb}
end
else
if infoTense.preverb then
preverb = infoTense:preverb{stem=stem, verbStruct=verbStruct,
overridePreverb=overridePreverb,
accent=accent}
end
end
infoTense.conj = {}
local spacing = isCompoundVerb and ' ' or ''
local endings = infoTense:endings(stem)
-- 'rojhilatî' accent (devok) for present stem
if (infoTense.stem == 'present') then
if (accent == 'rojhilatî') then
endings = endings['rojhilatî']
else
endings = endings['std']
end
end
local preverbParticles = export.getPreverbParticules(infoTense.preverbParticle, infoTense.stem, isTransitive)
local isErgative = isTransitive and (infoTense.stem == 'past')
-- Creating the conjugation table for a given tense
for _, pers in ipairs(export.order) do
local ending
local conjSimbleVerb
local conjVerb
if isErgative then
ending = endings.s3
else
ending = endings[pers]
end
-- Adding space after the preverbal particle, and
-- if "addPreverbParticles='na'": remove preverb particles (ê/dê).
local preverbParticle = ''
if infoTense.preverbParticle and addPreverbParticles ~= 'na' then
preverbParticle = preverbParticles[pers] .. ' '
end
conjSimbleVerb = negPrefix .. preverb .. stem .. ending
-- Adding prefixe and suffixe
conjVerb = preSimpleVerb .. spacing .. conjSimbleVerb .. postSimpleVerb
-- Spelling correction(îy -> iy)
conjVerb = mw.ustring.gsub(conjVerb, 'îy', 'iy')
-- Add a link / if tags='na' no links
if tags ~= 'na' then
conjVerb = link{term=conjVerb, lang=langKu}
end
-- Addition of the preverbal particle
infoTense.conj[pers] = preverbParticle .. conjVerb
end
-- Imperative
if (infoTense.name == 'impPresent') then
infoTense.conj.s1 = nil
infoTense.conj.s2 = infoTense.conj.s3
infoTense.conj.s3 = nil
infoTense.conj.p1 = nil
-- infoTense.conj.p2 = infoTense.conj.p2
infoTense.conj.p3 = nil
end
return infoTense
end
-- =============================================================================
-- END
-- =============================================================================
-- Some useful tools
-- =============================================================================
-- Returns the list of verb tenses
export.tensesList = function()
local list = {}
for _, tense in pairs(export.tenseRules) do
table.insert(list, tense.name)
end
return list
end
-- Concatenation of pronouns and conjugated verbs
-- (for a given conjugate tense in all persons of that tense)
function export.concatPronomsVerbs(pronoms, conjVerbs)
local concatTab = {}
for _, pers in ipairs(export.order) do
concatTab[pers] = pronoms[pers] .. ' ' .. conjVerbs[pers]
end
return concatTab
end
-- =============================================================================
-- ADDITIONAL STEM OF THE PAST AND PRESENT (pastStem2, ... and presentStem2, ...)
-- This function does nothing more than add additional parameters for verb stems
-- in the past and present tenses.
-- Conjugations for the different stems will be separated by "/"
-- =============================================================================
function export.conjugateLong(baseOpts, tense, presentStems, pastStems)
local opts = baseOpts or {}
opts.tense = tense or nil
presentStems = presentStems or {}
pastStems = pastStems or {}
local infoTense = deepCopy(export.tenseRules[tense], 'copy') or false
-- We check that this tense is indeed in table "tenseRules".
if not infoTense then
return '<span style="color:red">Unknown tense: ' .. tense ..'</span>'
end
local stems = (infoTense.stem == 'present') and presentStems or pastStems
-- For each verb stem, its conjugation table is calculated and stored in conjTabs.
local conjTabs = {}
for i = 1, #stems do
if stems[i] then
if (infoTense.stem == 'past') then opts.pastStem = stems[i] end
if (infoTense.stem == 'present') then opts.presentStem = stems[i] end
local conj = export.conjugate(opts).conj
table.insert(conjTabs, conj)
end
end
-- We concatenate each row of the conjugation tables.
local concatConjTabs = {}
for _, pers in ipairs(export.order) do
local frag = {}
for i = 1, #conjTabs do
local val = conjTabs[i][pers]
if val then table.insert(frag, tostring(val)) end
end
concatConjTabs[pers] = table.concat(frag, " / ")
end
infoTense.conj = concatConjTabs
return infoTense
end
-- ====================================================================================
-- VERB CONUGATION IN ALL TENSES WITH OR WITHOUT PRONOUMS
-- ====================================================================================
function export.conjugateAllTenses(baseOpts, presentStems, pastStems, negation, concatPrs)
-- "concatPrs=false" table without pronouns
local opts = baseOpts or {}
if negation == 'negative' then opts.isNegative = true end
-- Concatenation of pronouns and conjugated verbs
local concatPronomsVerbs = export.concatPronomsVerbs
-- Tenses list
local tensesList = export.tensesList()
-- Conjugation in all tenses
local conjTab = {}
for _, tense in ipairs(tensesList) do
local infoTense = deepCopy(export.tenseRules[tense], 'copy')
-- We create the conjugation table without the pronouns.
conjTab[tense] = deepCopy(export.conjugateLong(opts, tense, presentStems, pastStems), 'copy')
-- We concatenate the pronouns and the verbs if "concatPrs" is different of "false"
-- No pronouns for the imperative mood
if (tense ~= 'impPresent' and concatPrs ~= false) then
local pronoms = deepCopy(export.conjPronouns(infoTense.stem, infoTense.mode, opts.isTransitive))
conjTab[tense].conj = concatPronomsVerbs(pronoms, conjTab[tense].conj)
end
end
return conjTab
end
-- ====================================================================================
-- Allows you to obtain a given conjugation from a model.
-- Ex. {{#invoke:ku-tewandin|tew|dem=indPresent|kes=s1}}
-- See {{ku-tewîn-lk-niha}}
-- ====================================================================================
function export.tew(frame)
local args = frame:getParent().args
local baseOpts = {
isNegative = frame.args['neyînî'] or false,
isTransitive = args['form'],
isCompoundVerb = args['valahî'] or false,
preSimpleVerb = args['pêşgir'] or nil,
postSimpleVerb = args['paşgir'] or nil,
accent = args['devok'] or 'std',
tags = args['lînk'] or 'erê',
overrideBi = args['bi'] or nil,
overrideDi = args['di'] or nil,
overrideNa = args['na'] or nil,
overrideNe = args['ne'] or nil,
impNegForm = nil
}
local tense = frame.args['dem'] or nil
local pers = frame.args['kes'] or nil
local presentStems = {args['niha'], args['niha2'], args['niha3']}
local pastStems = {args['borî'], args['borî2'], args['borî3']}
-- A few checks
if (baseOpts.isTransitive == 'gerguhêz') then
baseOpts.isTransitive = true
elseif (baseOpts.isTransitive == 'negerguhêz') then
baseOpts.isTransitive = false
else
return '<span style="color:red">form = gerguhêz / negerguhêz</span>'
end
if (baseOpts.isCompoundVerb == 'erê') then
baseOpts.isCompoundVerb = true
else
baseOpts.isCompoundVerb = false
end
if (baseOpts.isNegative == 'erê') then
baseOpts.isNegative = true
end
local tabConj = export.conjugateLong(baseOpts, tense, presentStems, pastStems).conj
return tabConj[pers]
end
-- ====================================================================================
-- GET COMMMA SEPARED FORMS
-- Bnr. [[MediaWiki:Gadget-QQ.js]]
-- Ex. {{#invoke:ku-tewandin|get_comma_separated_forms|niha=kev|borî=ket}}
-- ====================================================================================
function export.get_comma_separated_forms(frame)
local opts = {
presentStem = frame.args['niha'],
pastStem = frame.args['borî'],
isTransitive = false,
isNegative = false,
isCompoundVerb = frame['valahî'] or false,
preSimpleVerb = frame['pêşgir'] or '',
postSimpleVerb = frame['paşgir'] or '',
overridePreverb = {
presentBi = frame['nihaBi'] or nil,
presentDi = frame['nihaDi'] or nil,
pastBi = frame['borîBi'] or nil,
pastDi = frame['borîDi'] or nil,
sameBi = frame['bi'] or nil,
sameDi = frame['di'] or nil,
},
overrideNegPrefix = {
presentNa = frame['na'] or nil,
presentNe = frame['nihaNe'] or nil,
pastNe = frame['borîNe'] or nil,
sameNe = 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
e3rvbd6iv9tf7ccq0306eksdmyix9xn
6237483
6237481
2026-06-11T22:24:35Z
Ghybu
1393
6237483
Scribunto
text/plain
-- Modula tewandina lêkerên kurmancî
local export = {}
-- Load irregular forms table
-- local irreg = require('Module:ku-tewandin/nestandard')
local langKu = require("Modul:languages").getByCode("ku")
local link = require('Module:links').language_link
local shallowCopy = require("Module:table/shallowCopy")
local deepCopy = require("Module:table/deepCopy")
-- =============================================================================
-- Pronouns in Kurmanji
-- =============================================================================
export.order = {"s1", "s2", "s3", "p1", "p2", "p3"}
export.pronouns = {
s1 = "ez", p1 = "em",
s2 = "tu", p2 = "hûn",
s3 = "ew", p3 = "ew"
}
export.obliquePronouns = {
s1 = "min", p1 = "me",
s2 = "te", p2 = "we",
s3 = "wê/wî", p3 = "wan"
}
export.agents = {
s1 = "te, wî, wê, we, wan", p1 = "te, wî, wê, we, wan",
s2 = "min, wî, wê, me, wan", p2 = "min, wî, wê, me, wan",
s3 = "min, te, wî, wê, me, we, wan", p3 = "min, te, wî, wê, me, we, wan"
}
-- Oblique pronoun (green)
export.obliquePronounsGreen = {
s1 = '<span style="color:green">min</span>',
s2 = '<span style="color:green">te</span>',
s3 = '<span style="color:green">wê/wî</span>',
p1 = '<span style="color:green">me</span>',
p2 = '<span style="color:green">we</span>',
p3 = '<span style="color:green">wan</span>'
}
-- ─────────────────────────────────────────────────────────────────────────────
-- 1) This function returns correct subject/agent pronoun, ergativity rule:
-- - Transitive verbs in past tenses → oblique pronoun (green) = agent
-- - All other cases → direct pronoun (no color) = subject
-- 2) Also add the subjunctive prefix "(bila)"
-- ─────────────────────────────────────────────────────────────────────────────
function export.conjPronouns(stemType, mode, isTransitive)
local pronouns = shallowCopy(export.pronouns)
-- Ergativity in kurdish: transitive verbs that are conjugated with the past tense stem are
-- conjugated according to the object, not the subject.
-- Therefore, to have an ergative construction,
-- the verb must be transitive and its stem must be the stem of the past tense.
local isErgative = isTransitive and (stemType == 'past')
-- If it's ergative, we use oblique pronouns: "min", "te", ...
-- If it's not ergative, we use normal pronouns: "ez", "tu", ...
if isErgative then
pronouns = shallowCopy(export.obliquePronounsGreen)
end
-- For the subjunctive mood, we add "(bila)" at the beginning.
if mode == 'subjunctive' then
local subjPrefix = '<span style="color:gray">(bila)</span>'
for _, pers in ipairs(export.order) do
pronouns[pers] = subjPrefix .. ' ' .. pronouns[pers]
end
end
return pronouns
end
-- =============================================================================
-- VERBAL STRUCTURE IN THE INFINITIVE:
-- Verbs in the infinitive appear in three main forms:
-- 1) Simple verb (indivisible light verb):
-- - ex.: "kirin", "çûn", "xwarin", ...
-- 2) Verbs with preverbs (preverb + simple verb):
-- - ex.: "rakirin" (ra- + kirin), "çêkirin" (çê- + kirin), "vexwarin" (ve- + xwarin), ...
-- - Preverb verbs don't use the prefix "bi-" (ez ê rakim , ew ê rake , ...)
-- 3) Compound verbs, construction with non-verbal element (the noun is not attached to the verb):
-- - Left of the simple verb: "hez kirin" ("hez" + "kirin"), "li dar xistin" ("li dar" + "xistin"), ...
-- - Right of the simple verb: "kirin der" ("kirin" + "der"), "girtin ser xwe" ("girtin" + "ser xwe"), ...
-- - Compound verbs use the prefix "bi-" (ez ê hez bi-kim , ew ê hez bi-ke )
-- STRUCTURE: preSimpleVerb + spacing + simpleVerb + postSimpleVerb
-- EX. kirin: preSimpleVerb=''; spacing=false; simpleVerb='kirin'; postSimpleVerb=''
-- rakirin: preSimpleVerb='ra'; spacing=false; simpleVerb='kirin'; postSimpleVerb=''
-- hez kirin: preSimpleVerb='hez'; spacing=true; simpleVerb='kirin'; postSimpleVerb=''
-- pev çûn: preSimpleVerb='pev'; spacing=true; simpleVerb='çûn'; postSimpleVerb=''
-- kirin der: preSimpleVerb=''; spacing=false; simpleVerb='kirin'; postSimpleVerb='der'
-- WARNING: Conjugation can vary depending on the type of verb.
-- For example, in the future tense,the prefix "bi" is used for compound verbs,
-- but not for preverbal verbs, see the function that manages it "tenseRules" table.
-- This table does not yet support the mixed case: a verb composed of a noun and a preverb verb.
-- =============================================================================
function export.verbStruct(isCompoundVerb, preSimpleVerb)
local struct
if (preSimpleVerb and preSimpleVerb ~= '' and not isCompoundVerb) then
struct = 'preverbVerb'
elseif isCompoundVerb then
struct = 'compoundVerb'
else
struct = 'simpleVerb'
end
return struct
end
-- ================================================================
-- INFLECTIONAL ENDINGS
-- Assigns verb inflectional endings (suffixes) to all tenses
-- ================================================================
local getEndings = {}
do
-- ───────────────────────────────────────────────────────────────
-- Ending using present stem
-- ───────────────────────────────────────────────────────────────
getEndings['present'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends = {}
if mw.ustring.match(stem, '[aeêiîouû]$') then
ends['std'] = {s1='m', s2='yî', s3='', p1='n', p2='n', p3='n'}
ends['rojhilatî'] = {s1='m', s2='(y)', s3='t', p1='yn', p2='n', p3='n'}
else
ends['std'] = {s1='im', s2='î', s3='e', p1='in', p2='in', p3='in'}
ends['rojhilatî'] = {s1='im', s2='î', s3='<u>it</u>/ît', p1='în', p2='in', p3='in'}
end
return ends
end
-- ───────────────────────────────────────────────────────────────
-- Ind. preterite + ind. imperfect ending
-- ───────────────────────────────────────────────────────────────
getEndings['past'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends
if mw.ustring.match(stem, '[aeêiouû]$') then
ends = {s1='m', s2='yî', s3='', p1='n', p2='n', p3='n'}
elseif mw.ustring.match(stem, 'î$') then
-- if self.name == 'indImperfect' then
-- -- special indicative ind. imperfect rule
-- ends = {s1='yam', s2='yayî', s3='ya', p1='yan', p2='yan', p3='yan'}
-- end
ends = {s1='m', s2='', s3='', p1='n', p2='n', p3='n'}
else
ends = {s1='im', s2='î', s3='', p1='in', p2='in', p3='in'}
end
return ends
end
-- ───────────────────────────────────────────────────────────────
-- Compound endings with auxiliary "bûn"
-- Inflectional endings are created by taking the different forms of the
-- verb "bûn" (with present stem "-b-" and past stem "-bû-") and
-- adding an "i-" prefix before them: "i-b-im", "i-bû-m", "i-bû-me", "i-bû-ma".
-- This "i-" varies according to the final letter of the verb stem.
-- ───────────────────────────────────────────────────────────────
local function normalize_i(stem)
local prfx_i = "i"
if mw.ustring.match(stem, "ya$") or
mw.ustring.match(stem, "[îû]$") then -- cf. karîn (-karî-)
prfx_i = ""
elseif mw.ustring.match(stem, '[aeêiou]$') then
prfx_i = "yi"
end
return prfx_i
end
getEndings['ibim'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bim", p1 = prfx_i .. "bin",
s2 = prfx_i .. "bî", p2 = prfx_i .. "bin",
s3 = prfx_i .. "be", p3 = prfx_i .. "bin"
}
end
getEndings['ibûm'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bûm", p1 = prfx_i .. "bûn",
s2 = prfx_i .. "bûyî", p2 = prfx_i .. "bûn",
s3 = prfx_i .. "bû", p3 = prfx_i .. "bûn"
}
end
getEndings['ibûme'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bûme", p1 = prfx_i .. "bûne",
s2 = prfx_i .. "bûyiye", p2 = prfx_i .. "bûne",
s3 = prfx_i .. "bûye", p3 = prfx_i .. "bûne"
}
end
getEndings['ibûma'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bûma", p1 = prfx_i .. "bûna",
s2 = prfx_i .. "bûyayî", p2 = prfx_i .. "bûna",
s3 = prfx_i .. "bûya", p3 = prfx_i .. "bûna"
}
end
-- ───────────────────────────────────────────────────────────────
-- Ind. perfect ending.
-- ───────────────────────────────────────────────────────────────
getEndings['ime'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends
if mw.ustring.match(stem, '[aeêiîouû]$') then
ends = {s1="me", s2="yî", s3="ye", p1="ne", p2="ne", p3="ne"}
else
ends = {s1="ime", s2="iyî", s3="iye", p1="ine", p2="ine", p3="ine"}
end
return ends
end
-- ───────────────────────────────────────────────────────────────
-- Subj. Imperfect ending.
-- ───────────────────────────────────────────────────────────────
getEndings['ama'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends
-- The doublet in "-iyan" of verbs in -"în" (gerîn/-geriya-, kenîn/-keniya-, ...),
-- in the conditional and subjunctive moods, a doublet "yaya" appears; it's removed.
-- -yayayî → -yayî; -yaya → -ya
if mw.ustring.match(stem, '(ya)$') then
ends = {s1="ma", s2="yî", s3="", p1="na", p2="na", p3="na"}
elseif mw.ustring.match(stem, '[aeêiîouû]$') then
ends = {s1="ma", s2="yayî", s3="ya", p1="na", p2="na", p3="na"}
else
ends = {s1="ama", s2="ayî", s3="a", p1="ana", p2="ana", p3="ana"}
end
return ends
end
end
-- =============================================================================
-- RULES FOR PREVERBS: "bi-" and "di-"
-- There are two preverbs: "bi-" and "di-". These preverbs can change form
-- depending on the first letters of the verb’s present stem or past stem.
-- =============================================================================
local getPreverb = {}
do
getPreverb['bi'] = function (self, opts)
opts = opts or {}
local stem = opts.stem
local verbStruct = opts.verbStruct
local overridePreverb = opts.overridePreverb
local accent = opts.accent
-- Devoka rojhilatî:
-- @Ferhengvan: Dema bêt bi lêkera alîkar "ê / dê" û bi rehê lêkerê yê
-- dema niha û pêşgirên kesî tê çêkirin. Pêşgira "bi-" li destpêka lêkera
-- serekî nîne: - ez ê / dê xw-im (standard: ez ê/dê bi-xw-im).
if (self.name == 'indFuture' and accent == 'rojhilatî') then
return ''
end
-- Preverb verbs don't use the preverb "bi-": ra-kirin (ez ê rakim), ve-xwarin (ez ê vexwim) , ...
-- But compound verb and simple verbs use it: hez kirin (ez ê hez bi-kim), lê bigirin (ez ê lê bi-girim), ...
if (verbStruct == 'preverbVerb') then
return ''
end
-- If the preverb "bi" is provided.
if (self.stem == 'present' and overridePreverb.presentBi) then
return overridePreverb.presentBi
elseif (self.stem == 'past' and overridePreverb.pastBi) then
return overridePreverb.pastBi
elseif overridePreverb.sameBi then
return overridePreverb.sameBi
end
-- Modification of the preverbe "bi-" according to the last letter of the stem.
if mw.ustring.match(stem, '^[aeêiîouû]') then
return 'b'
end
return 'bi'
end
getPreverb['di'] = function (self, opts)
opts = opts or {}
local stem = opts.stem
local overridePreverb = opts.overridePreverb
-- If the preverb "di" is provided.
if (self.stem == 'present' and overridePreverb.presentDi) then
return overridePreverb.presentDi
elseif (self.stem == 'past' and overridePreverb.pastDi) then
return overridePreverb.pastDi
elseif overridePreverb.sameDi then
return overridePreverb.sameDi
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 (self, opts)
-- self: reserved for future use
local _ = self -- delete the warning (unused argument)
opts = opts or {}
local stem = opts.stem
local overrideNa = opts.overrideNegPrefix.presentNa
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 (self, opts)
opts = opts or {}
local stem = opts.stem
local tenseName = self.name
local impNegForm = opts.impNegForm -- form "1" or "2" of imp.
local overrideNegPrefix = opts.overrideNegPrefix
-- If the neg. prefix "di" is provided.
if (self.stem == 'present' and overrideNegPrefix.presentNe) then
return '<b>' .. overrideNegPrefix.presentNe .. '</b>'
elseif (self.stem == 'past' and overrideNegPrefix.pastNe) then
return '<b>' .. overrideNegPrefix.pastNe .. '</b>'
elseif overrideNegPrefix.sameNe then
return '<b>' .. overrideNegPrefix.sameNe .. '</b>'
end
local negPrefix = 'ne'
-- Bo neyînî: pêşgira "di-" tenê di nav dema "indImperfect" de tê bikaranîn.
-- ji ber vê yekê 'negPrefix' hertim (?) 'ne' ye ji ber ku dikeve pêş
-- pêşgira "di-": wê/wî ne-di-elimand (elimandin)
if (tenseName == 'indImperfect') then
return '<b>' .. negPrefix .. '</b>'
end
-- 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 overridePreverb = {
-- Preverb (bi-, di)
presentBi = opts.presentBi or nil,
presentDi = opts.presentDi or nil,
pastBi = opts.pastBi or nil,
pastDi = opts.pastDi or nil,
-- same preverb (for past and present stem)
sameBi = opts.sameBi or nil,
sameDi = opts.sameDi or nil,
}
local overrideNegPrefix = {
-- Neg. prefix (na-, ne-)
presentNa = opts.presentNa or nil,
presentNe = opts.presentNe or nil,
pastNe = opts.pastNe or nil,
-- same neg. prefix (for past and present stem)
sameNe = opts.sameNe or nil,
}
-- By default, the negation of the imperative is constructed from the prefix "me-"".
-- To obtain the second variant, the prefix with "ne-", you must specify "impNegForm=2".
local impNegForm = opts.impNegForm or nil
-- Accent/ Devok
local accent = opts.accent or 'std'
-- If "tags='na'", remove links/tags
local tags = opts.tags or 'erê'
-- If addPreverbParticles='na', remove preverb particles (ê/dê) before
-- the conjugated verbs.
local addPreverbParticles = opts.addPreverbParticles or 'erê'
-- We add a space to the left of the "postSimpleVerb" because it shouldn't be attached
-- to the simple verb.
if (postSimpleVerb ~= '' and postSimpleVerb ~=nil) then
postSimpleVerb = ' ' .. postSimpleVerb
end
-- Access to the classification table and retrieval of verb tense parameters
local infoTense = deepCopy(export.tenseRules[tense], 'copy') or false
-- We check that this tense is indeed in table "tenseRules".
if (not infoTense) then
return '<span style="color:red">Unknown tense: ' .. tense ..'</span>'
end
-- We check that one of the two parameters of the stem is given
if (infoTense.stem == 'present' and not presentStem) then
return '<span style="color:red">presentStem parameter required</span>'
elseif (infoTense.stem == 'past' and not pastStem) then
return '<span style="color:red">pasttStem parameter required</span>'
end
-- Choice between the present stem or past stem
local stem = (infoTense.stem == 'present') and presentStem or pastStem
--────────────────────────────
-- Conjugation construction --
-- ───────────────────────────
local preverb = ''
local negPrefix = ''
-- Ruturns the verb type: "simpleVerb" or "preverbVerb" or "compoundVerb"
local verbStruct = export.verbStruct(isCompoundVerb, preSimpleVerb)
if isNegative then
negPrefix = infoTense:negPrefix{stem=stem,
impNegForm=impNegForm,
overrideNegPrefix=overrideNegPrefix}
if infoTense.negPreverb then
preverb = infoTense:negPreverb{stem=stem, verbStruct=verbStruct,
overridePreverb=overridePreverb}
end
else
if infoTense.preverb then
preverb = infoTense:preverb{stem=stem, verbStruct=verbStruct,
overridePreverb=overridePreverb,
accent=accent}
end
end
infoTense.conj = {}
local spacing = isCompoundVerb and ' ' or ''
local endings = infoTense:endings(stem)
-- 'rojhilatî' accent (devok) for present stem
if (infoTense.stem == 'present') then
if (accent == 'rojhilatî') then
endings = endings['rojhilatî']
else
endings = endings['std']
end
end
local preverbParticles = export.getPreverbParticules(infoTense.preverbParticle, infoTense.stem, isTransitive)
local isErgative = isTransitive and (infoTense.stem == 'past')
-- Creating the conjugation table for a given tense
for _, pers in ipairs(export.order) do
local ending
local conjSimbleVerb
local conjVerb
if isErgative then
ending = endings.s3
else
ending = endings[pers]
end
-- Adding space after the preverbal particle, and
-- if "addPreverbParticles='na'": remove preverb particles (ê/dê).
local preverbParticle = ''
if infoTense.preverbParticle and addPreverbParticles ~= 'na' then
preverbParticle = preverbParticles[pers] .. ' '
end
conjSimbleVerb = negPrefix .. preverb .. stem .. ending
-- Adding prefixe and suffixe
conjVerb = preSimpleVerb .. spacing .. conjSimbleVerb .. postSimpleVerb
-- Spelling correction(îy -> iy)
conjVerb = mw.ustring.gsub(conjVerb, 'îy', 'iy')
-- Add a link / if tags='na' no links
if tags ~= 'na' then
conjVerb = link{term=conjVerb, lang=langKu}
end
-- Addition of the preverbal particle
infoTense.conj[pers] = preverbParticle .. conjVerb
end
-- Imperative
if (infoTense.name == 'impPresent') then
infoTense.conj.s1 = nil
infoTense.conj.s2 = infoTense.conj.s3
infoTense.conj.s3 = nil
infoTense.conj.p1 = nil
-- infoTense.conj.p2 = infoTense.conj.p2
infoTense.conj.p3 = nil
end
return infoTense
end
-- =============================================================================
-- END
-- =============================================================================
-- Some useful tools
-- =============================================================================
-- Returns the list of verb tenses
export.tensesList = function()
local list = {}
for _, tense in pairs(export.tenseRules) do
table.insert(list, tense.name)
end
return list
end
-- Concatenation of pronouns and conjugated verbs
-- (for a given conjugate tense in all persons of that tense)
function export.concatPronomsVerbs(pronoms, conjVerbs)
local concatTab = {}
for _, pers in ipairs(export.order) do
concatTab[pers] = pronoms[pers] .. ' ' .. conjVerbs[pers]
end
return concatTab
end
-- =============================================================================
-- ADDITIONAL STEM OF THE PAST AND PRESENT (pastStem2, ... and presentStem2, ...)
-- This function does nothing more than add additional parameters for verb stems
-- in the past and present tenses.
-- Conjugations for the different stems will be separated by "/"
-- =============================================================================
function export.conjugateLong(baseOpts, tense, presentStems, pastStems)
local opts = baseOpts or {}
opts.tense = tense or nil
presentStems = presentStems or {}
pastStems = pastStems or {}
local infoTense = deepCopy(export.tenseRules[tense], 'copy') or false
-- We check that this tense is indeed in table "tenseRules".
if not infoTense then
return '<span style="color:red">Unknown tense: ' .. tense ..'</span>'
end
local stems = (infoTense.stem == 'present') and presentStems or pastStems
-- For each verb stem, its conjugation table is calculated and stored in conjTabs.
local conjTabs = {}
for i = 1, #stems do
if stems[i] then
if (infoTense.stem == 'past') then opts.pastStem = stems[i] end
if (infoTense.stem == 'present') then opts.presentStem = stems[i] end
local conj = export.conjugate(opts).conj
table.insert(conjTabs, conj)
end
end
-- We concatenate each row of the conjugation tables.
local concatConjTabs = {}
for _, pers in ipairs(export.order) do
local frag = {}
for i = 1, #conjTabs do
local val = conjTabs[i][pers]
if val then table.insert(frag, tostring(val)) end
end
concatConjTabs[pers] = table.concat(frag, " / ")
end
infoTense.conj = concatConjTabs
return infoTense
end
-- ====================================================================================
-- VERB CONUGATION IN ALL TENSES WITH OR WITHOUT PRONOUMS
-- ====================================================================================
function export.conjugateAllTenses(baseOpts, presentStems, pastStems, negation, concatPrs)
-- "concatPrs=false" table without pronouns
local opts = baseOpts or {}
if negation == 'negative' then opts.isNegative = true end
-- Concatenation of pronouns and conjugated verbs
local concatPronomsVerbs = export.concatPronomsVerbs
-- Tenses list
local tensesList = export.tensesList()
-- Conjugation in all tenses
local conjTab = {}
for _, tense in ipairs(tensesList) do
local infoTense = deepCopy(export.tenseRules[tense], 'copy')
-- We create the conjugation table without the pronouns.
conjTab[tense] = deepCopy(export.conjugateLong(opts, tense, presentStems, pastStems), 'copy')
-- We concatenate the pronouns and the verbs if "concatPrs" is different of "false"
-- No pronouns for the imperative mood
if (tense ~= 'impPresent' and concatPrs ~= false) then
local pronoms = deepCopy(export.conjPronouns(infoTense.stem, infoTense.mode, opts.isTransitive))
conjTab[tense].conj = concatPronomsVerbs(pronoms, conjTab[tense].conj)
end
end
return conjTab
end
-- ====================================================================================
-- Allows you to obtain a given conjugation from a model.
-- Ex. {{#invoke:ku-tewandin|tew|dem=indPresent|kes=s1}}
-- See {{ku-tewîn-lk-niha}}
-- ====================================================================================
function export.tew(frame)
local args = frame:getParent().args
local baseOpts = {
isNegative = frame.args['neyînî'] or false,
isTransitive = args['form'],
isCompoundVerb = args['valahî'] or false,
preSimpleVerb = args['pêşgir'] or nil,
postSimpleVerb = args['paşgir'] or nil,
accent = args['devok'] or 'std',
tags = args['lînk'] or 'erê',
overrideBi = args['bi'] or nil,
overrideDi = args['di'] or nil,
overrideNa = args['na'] or nil,
overrideNe = args['ne'] or nil,
impNegForm = nil
}
local tense = frame.args['dem'] or nil
local pers = frame.args['kes'] or nil
local presentStems = {args['niha'], args['niha2'], args['niha3']}
local pastStems = {args['borî'], args['borî2'], args['borî3']}
-- A few checks
if (baseOpts.isTransitive == 'gerguhêz') then
baseOpts.isTransitive = true
elseif (baseOpts.isTransitive == 'negerguhêz') then
baseOpts.isTransitive = false
else
return '<span style="color:red">form = gerguhêz / negerguhêz</span>'
end
if (baseOpts.isCompoundVerb == 'erê') then
baseOpts.isCompoundVerb = true
else
baseOpts.isCompoundVerb = false
end
if (baseOpts.isNegative == 'erê') then
baseOpts.isNegative = true
end
local tabConj = export.conjugateLong(baseOpts, tense, presentStems, pastStems).conj
return tabConj[pers]
end
-- ====================================================================================
-- GET COMMMA SEPARED FORMS
-- Bnr. [[MediaWiki:Gadget-QQ.js]]
-- Ex. {{#invoke:ku-tewandin|get_comma_separated_forms|niha=kev|borî=ket}}
-- ====================================================================================
function export.get_comma_separated_forms(frame)
local opts = {
presentStem = frame.args['niha'],
pastStem = frame.args['borî'],
isTransitive = false,
isNegative = false,
isCompoundVerb = frame['valahî'] or false,
preSimpleVerb = frame['pêşgir'] or '',
postSimpleVerb = frame['paşgir'] or '',
-- overridePreverb:
presentBi = frame['nihaBi'] or nil,
presentDi = frame['nihaDi'] or nil,
pastBi = frame['borîBi'] or nil,
pastDi = frame['borîDi'] or nil,
sameBi = frame['bi'] or nil,
sameDi = frame['di'] or nil,
-- overrideNegPrefix:
presentNa = frame['na'] or nil,
presentNe = frame['nihaNe'] or nil,
pastNe = frame['borîNe'] or nil,
sameNe = 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
jzx45hd1eg3pjqnhukdz9hnq4992kz0
6237486
6237483
2026-06-11T22:45:21Z
Ghybu
1393
---
6237486
Scribunto
text/plain
-- Modula tewandina lêkerên kurmancî
local export = {}
-- Load irregular forms table
-- local irreg = require('Module:ku-tewandin/nestandard')
local langKu = require("Modul:languages").getByCode("ku")
local link = require('Module:links').language_link
local shallowCopy = require("Module:table/shallowCopy")
local deepCopy = require("Module:table/deepCopy")
-- =============================================================================
-- Pronouns in Kurmanji
-- =============================================================================
export.order = {"s1", "s2", "s3", "p1", "p2", "p3"}
export.pronouns = {
s1 = "ez", p1 = "em",
s2 = "tu", p2 = "hûn",
s3 = "ew", p3 = "ew"
}
export.obliquePronouns = {
s1 = "min", p1 = "me",
s2 = "te", p2 = "we",
s3 = "wê/wî", p3 = "wan"
}
export.agents = {
s1 = "te, wî, wê, we, wan", p1 = "te, wî, wê, we, wan",
s2 = "min, wî, wê, me, wan", p2 = "min, wî, wê, me, wan",
s3 = "min, te, wî, wê, me, we, wan", p3 = "min, te, wî, wê, me, we, wan"
}
-- Oblique pronoun (green)
export.obliquePronounsGreen = {
s1 = '<span style="color:green">min</span>',
s2 = '<span style="color:green">te</span>',
s3 = '<span style="color:green">wê/wî</span>',
p1 = '<span style="color:green">me</span>',
p2 = '<span style="color:green">we</span>',
p3 = '<span style="color:green">wan</span>'
}
-- ─────────────────────────────────────────────────────────────────────────────
-- 1) This function returns correct subject/agent pronoun, ergativity rule:
-- - Transitive verbs in past tenses → oblique pronoun (green) = agent
-- - All other cases → direct pronoun (no color) = subject
-- 2) Also add the subjunctive prefix "(bila)"
-- ─────────────────────────────────────────────────────────────────────────────
function export.conjPronouns(stemType, mode, isTransitive)
local pronouns = shallowCopy(export.pronouns)
-- Ergativity in kurdish: transitive verbs that are conjugated with the past tense stem are
-- conjugated according to the object, not the subject.
-- Therefore, to have an ergative construction,
-- the verb must be transitive and its stem must be the stem of the past tense.
local isErgative = isTransitive and (stemType == 'past')
-- If it's ergative, we use oblique pronouns: "min", "te", ...
-- If it's not ergative, we use normal pronouns: "ez", "tu", ...
if isErgative then
pronouns = shallowCopy(export.obliquePronounsGreen)
end
-- For the subjunctive mood, we add "(bila)" at the beginning.
if mode == 'subjunctive' then
local subjPrefix = '<span style="color:gray">(bila)</span>'
for _, pers in ipairs(export.order) do
pronouns[pers] = subjPrefix .. ' ' .. pronouns[pers]
end
end
return pronouns
end
-- =============================================================================
-- VERBAL STRUCTURE IN THE INFINITIVE:
-- Verbs in the infinitive appear in three main forms:
-- 1) Simple verb (indivisible light verb):
-- - ex.: "kirin", "çûn", "xwarin", ...
-- 2) Verbs with preverbs (preverb + simple verb):
-- - ex.: "rakirin" (ra- + kirin), "çêkirin" (çê- + kirin), "vexwarin" (ve- + xwarin), ...
-- - Preverb verbs don't use the prefix "bi-" (ez ê rakim , ew ê rake , ...)
-- 3) Compound verbs, construction with non-verbal element (the noun is not attached to the verb):
-- - Left of the simple verb: "hez kirin" ("hez" + "kirin"), "li dar xistin" ("li dar" + "xistin"), ...
-- - Right of the simple verb: "kirin der" ("kirin" + "der"), "girtin ser xwe" ("girtin" + "ser xwe"), ...
-- - Compound verbs use the prefix "bi-" (ez ê hez bi-kim , ew ê hez bi-ke )
-- STRUCTURE: preSimpleVerb + spacing + simpleVerb + postSimpleVerb
-- EX. kirin: preSimpleVerb=''; spacing=false; simpleVerb='kirin'; postSimpleVerb=''
-- rakirin: preSimpleVerb='ra'; spacing=false; simpleVerb='kirin'; postSimpleVerb=''
-- hez kirin: preSimpleVerb='hez'; spacing=true; simpleVerb='kirin'; postSimpleVerb=''
-- pev çûn: preSimpleVerb='pev'; spacing=true; simpleVerb='çûn'; postSimpleVerb=''
-- kirin der: preSimpleVerb=''; spacing=false; simpleVerb='kirin'; postSimpleVerb='der'
-- WARNING: Conjugation can vary depending on the type of verb.
-- For example, in the future tense,the prefix "bi" is used for compound verbs,
-- but not for preverbal verbs, see the function that manages it "tenseRules" table.
-- This table does not yet support the mixed case: a verb composed of a noun and a preverb verb.
-- =============================================================================
function export.verbStruct(isCompoundVerb, preSimpleVerb)
local struct
if (preSimpleVerb and preSimpleVerb ~= '' and not isCompoundVerb) then
struct = 'preverbVerb'
elseif isCompoundVerb then
struct = 'compoundVerb'
else
struct = 'simpleVerb'
end
return struct
end
-- ================================================================
-- INFLECTIONAL ENDINGS
-- Assigns verb inflectional endings (suffixes) to all tenses
-- ================================================================
local getEndings = {}
do
-- ───────────────────────────────────────────────────────────────
-- Ending using present stem
-- ───────────────────────────────────────────────────────────────
getEndings['present'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends = {}
if mw.ustring.match(stem, '[aeêiîouû]$') then
ends['std'] = {s1='m', s2='yî', s3='', p1='n', p2='n', p3='n'}
ends['rojhilatî'] = {s1='m', s2='(y)', s3='t', p1='yn', p2='n', p3='n'}
else
ends['std'] = {s1='im', s2='î', s3='e', p1='in', p2='in', p3='in'}
ends['rojhilatî'] = {s1='im', s2='î', s3='<u>it</u>/ît', p1='în', p2='in', p3='in'}
end
return ends
end
-- ───────────────────────────────────────────────────────────────
-- Ind. preterite + ind. imperfect ending
-- ───────────────────────────────────────────────────────────────
getEndings['past'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends
if mw.ustring.match(stem, '[aeêiouû]$') then
ends = {s1='m', s2='yî', s3='', p1='n', p2='n', p3='n'}
elseif mw.ustring.match(stem, 'î$') then
-- if self.name == 'indImperfect' then
-- -- special indicative ind. imperfect rule
-- ends = {s1='yam', s2='yayî', s3='ya', p1='yan', p2='yan', p3='yan'}
-- end
ends = {s1='m', s2='', s3='', p1='n', p2='n', p3='n'}
else
ends = {s1='im', s2='î', s3='', p1='in', p2='in', p3='in'}
end
return ends
end
-- ───────────────────────────────────────────────────────────────
-- Compound endings with auxiliary "bûn"
-- Inflectional endings are created by taking the different forms of the
-- verb "bûn" (with present stem "-b-" and past stem "-bû-") and
-- adding an "i-" prefix before them: "i-b-im", "i-bû-m", "i-bû-me", "i-bû-ma".
-- This "i-" varies according to the final letter of the verb stem.
-- ───────────────────────────────────────────────────────────────
local function normalize_i(stem)
local prfx_i = "i"
if mw.ustring.match(stem, "ya$") or
mw.ustring.match(stem, "[îû]$") then -- cf. karîn (-karî-)
prfx_i = ""
elseif mw.ustring.match(stem, '[aeêiou]$') then
prfx_i = "yi"
end
return prfx_i
end
getEndings['ibim'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bim", p1 = prfx_i .. "bin",
s2 = prfx_i .. "bî", p2 = prfx_i .. "bin",
s3 = prfx_i .. "be", p3 = prfx_i .. "bin"
}
end
getEndings['ibûm'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bûm", p1 = prfx_i .. "bûn",
s2 = prfx_i .. "bûyî", p2 = prfx_i .. "bûn",
s3 = prfx_i .. "bû", p3 = prfx_i .. "bûn"
}
end
getEndings['ibûme'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bûme", p1 = prfx_i .. "bûne",
s2 = prfx_i .. "bûyiye", p2 = prfx_i .. "bûne",
s3 = prfx_i .. "bûye", p3 = prfx_i .. "bûne"
}
end
getEndings['ibûma'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bûma", p1 = prfx_i .. "bûna",
s2 = prfx_i .. "bûyayî", p2 = prfx_i .. "bûna",
s3 = prfx_i .. "bûya", p3 = prfx_i .. "bûna"
}
end
-- ───────────────────────────────────────────────────────────────
-- Ind. perfect ending.
-- ───────────────────────────────────────────────────────────────
getEndings['ime'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends
if mw.ustring.match(stem, '[aeêiîouû]$') then
ends = {s1="me", s2="yî", s3="ye", p1="ne", p2="ne", p3="ne"}
else
ends = {s1="ime", s2="iyî", s3="iye", p1="ine", p2="ine", p3="ine"}
end
return ends
end
-- ───────────────────────────────────────────────────────────────
-- Subj. Imperfect ending.
-- ───────────────────────────────────────────────────────────────
getEndings['ama'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends
-- The doublet in "-iyan" of verbs in -"în" (gerîn/-geriya-, kenîn/-keniya-, ...),
-- in the conditional and subjunctive moods, a doublet "yaya" appears; it's removed.
-- -yayayî → -yayî; -yaya → -ya
if mw.ustring.match(stem, '(ya)$') then
ends = {s1="ma", s2="yî", s3="", p1="na", p2="na", p3="na"}
elseif mw.ustring.match(stem, '[aeêiîouû]$') then
ends = {s1="ma", s2="yayî", s3="ya", p1="na", p2="na", p3="na"}
else
ends = {s1="ama", s2="ayî", s3="a", p1="ana", p2="ana", p3="ana"}
end
return ends
end
end
-- =============================================================================
-- RULES FOR PREVERBS: "bi-" and "di-"
-- There are two preverbs: "bi-" and "di-". These preverbs can change form
-- depending on the first letters of the verb’s present stem or past stem.
-- =============================================================================
local getPreverb = {}
do
getPreverb['bi'] = function (self, opts)
opts = opts or {}
local stem = opts.stem
local verbStruct = opts.verbStruct
local overridePreverb = opts.overridePreverb
local accent = opts.accent
-- Devoka rojhilatî:
-- @Ferhengvan: Dema bêt bi lêkera alîkar "ê / dê" û bi rehê lêkerê yê
-- dema niha û pêşgirên kesî tê çêkirin. Pêşgira "bi-" li destpêka lêkera
-- serekî nîne: - ez ê / dê xw-im (standard: ez ê/dê bi-xw-im).
if (self.name == 'indFuture' and accent == 'rojhilatî') then
return ''
end
-- Preverb verbs don't use the preverb "bi-": ra-kirin (ez ê rakim), ve-xwarin (ez ê vexwim) , ...
-- But compound verb and simple verbs use it: hez kirin (ez ê hez bi-kim), lê bigirin (ez ê lê bi-girim), ...
if (verbStruct == 'preverbVerb') then
return ''
end
-- If the preverb "bi" is provided.
if (self.stem == 'present' and overridePreverb.presentBi) then
return overridePreverb.presentBi
elseif (self.stem == 'past' and overridePreverb.pastBi) then
return overridePreverb.pastBi
elseif overridePreverb.sameBi then
return overridePreverb.sameBi
end
-- Modification of the preverbe "bi-" according to the last letter of the stem.
if mw.ustring.match(stem, '^[aeêiîouû]') then
return 'b'
end
return 'bi'
end
getPreverb['di'] = function (self, opts)
opts = opts or {}
local stem = opts.stem
local overridePreverb = opts.overridePreverb
-- If the preverb "di" is provided.
if (self.stem == 'present' and overridePreverb.presentDi) then
return overridePreverb.presentDi
elseif (self.stem == 'past' and overridePreverb.pastDi) then
return overridePreverb.pastDi
elseif overridePreverb.sameDi then
return overridePreverb.sameDi
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 (self, opts)
-- self: reserved for future use
local _ = self -- delete the warning (unused argument)
opts = opts or {}
local stem = opts.stem
local overrideNa = opts.overrideNegPrefix.presentNa
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 (self, opts)
opts = opts or {}
local stem = opts.stem
local tenseName = self.name
local impNegForm = opts.impNegForm -- form "1" or "2" of imp.
local overrideNegPrefix = opts.overrideNegPrefix
-- If the neg. prefix "di" is provided.
if (self.stem == 'present' and overrideNegPrefix.presentNe) then
return '<b>' .. overrideNegPrefix.presentNe .. '</b>'
elseif (self.stem == 'past' and overrideNegPrefix.pastNe) then
return '<b>' .. overrideNegPrefix.pastNe .. '</b>'
elseif overrideNegPrefix.sameNe then
return '<b>' .. overrideNegPrefix.sameNe .. '</b>'
end
local negPrefix = 'ne'
-- Bo neyînî: pêşgira "di-" tenê di nav dema "indImperfect" de tê bikaranîn.
-- ji ber vê yekê 'negPrefix' hertim (?) 'ne' ye ji ber ku dikeve pêş
-- pêşgira "di-": wê/wî ne-di-elimand (elimandin)
if (tenseName == 'indImperfect') then
return '<b>' .. negPrefix .. '</b>'
end
-- 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 overridePreverb = {
-- Preverbs (bi-, di)
presentBi = opts.presentBi or nil,
presentDi = opts.presentDi or nil,
pastBi = opts.pastBi or nil,
pastDi = opts.pastDi or nil,
-- Same preverbs ("past" and "present" stem)
sameBi = opts.sameBi or nil,
sameDi = opts.sameDi or nil,
}
local overrideNegPrefix = {
-- Neg. prefix (na-, ne-)
presentNa = opts.presentNa or nil,
presentNe = opts.presentNe or nil,
pastNe = opts.pastNe or nil,
-- same neg. prefix (for past and present stem)
sameNe = opts.sameNe or nil,
}
-- By default, the negation of the imperative is constructed from the prefix "me-"".
-- To obtain the second variant, the prefix with "ne-", you must specify "impNegForm=2".
local impNegForm = opts.impNegForm or nil
-- Accent/ Devok
local accent = opts.accent or 'std'
-- If "tags='na'", remove links/tags
local tags = opts.tags or 'erê'
-- If addPreverbParticles='na', remove preverb particles (ê/dê) before
-- the conjugated verbs.
local addPreverbParticles = opts.addPreverbParticles or 'erê'
-- We add a space to the left of the "postSimpleVerb" because it shouldn't be attached
-- to the simple verb.
if (postSimpleVerb ~= '' and postSimpleVerb ~=nil) then
postSimpleVerb = ' ' .. postSimpleVerb
end
-- Access to the classification table and retrieval of verb tense parameters
local infoTense = deepCopy(export.tenseRules[tense], 'copy') or false
-- We check that this tense is indeed in table "tenseRules".
if (not infoTense) then
return '<span style="color:red">Unknown tense: ' .. tense ..'</span>'
end
-- We check that one of the two parameters of the stem is given
if (infoTense.stem == 'present' and not presentStem) then
return '<span style="color:red">presentStem parameter required</span>'
elseif (infoTense.stem == 'past' and not pastStem) then
return '<span style="color:red">pasttStem parameter required</span>'
end
-- Choice between the present stem or past stem
local stem = (infoTense.stem == 'present') and presentStem or pastStem
--────────────────────────────
-- Conjugation construction --
-- ───────────────────────────
local preverb = ''
local negPrefix = ''
-- Ruturns the verb type: "simpleVerb" or "preverbVerb" or "compoundVerb"
local verbStruct = export.verbStruct(isCompoundVerb, preSimpleVerb)
if isNegative then
negPrefix = infoTense:negPrefix{stem=stem,
impNegForm=impNegForm,
overrideNegPrefix=overrideNegPrefix}
if infoTense.negPreverb then
preverb = infoTense:negPreverb{stem=stem, verbStruct=verbStruct,
overridePreverb=overridePreverb}
end
else
if infoTense.preverb then
preverb = infoTense:preverb{stem=stem, verbStruct=verbStruct,
overridePreverb=overridePreverb,
accent=accent}
end
end
infoTense.conj = {}
local spacing = isCompoundVerb and ' ' or ''
local endings = infoTense:endings(stem)
-- 'rojhilatî' accent (devok) for present stem
if (infoTense.stem == 'present') then
if (accent == 'rojhilatî') then
endings = endings['rojhilatî']
else
endings = endings['std']
end
end
local preverbParticles = export.getPreverbParticules(infoTense.preverbParticle, infoTense.stem, isTransitive)
local isErgative = isTransitive and (infoTense.stem == 'past')
-- Creating the conjugation table for a given tense
for _, pers in ipairs(export.order) do
local ending
local conjSimbleVerb
local conjVerb
if isErgative then
ending = endings.s3
else
ending = endings[pers]
end
-- Adding space after the preverbal particle, and
-- if "addPreverbParticles='na'": remove preverb particles (ê/dê).
local preverbParticle = ''
if infoTense.preverbParticle and addPreverbParticles ~= 'na' then
preverbParticle = preverbParticles[pers] .. ' '
end
conjSimbleVerb = negPrefix .. preverb .. stem .. ending
-- Adding prefixe and suffixe
conjVerb = preSimpleVerb .. spacing .. conjSimbleVerb .. postSimpleVerb
-- Spelling correction(îy -> iy)
conjVerb = mw.ustring.gsub(conjVerb, 'îy', 'iy')
-- Add a link / if tags='na' no links
if tags ~= 'na' then
conjVerb = link{term=conjVerb, lang=langKu}
end
-- Addition of the preverbal particle
infoTense.conj[pers] = preverbParticle .. conjVerb
end
-- Imperative
if (infoTense.name == 'impPresent') then
infoTense.conj.s1 = nil
infoTense.conj.s2 = infoTense.conj.s3
infoTense.conj.s3 = nil
infoTense.conj.p1 = nil
-- infoTense.conj.p2 = infoTense.conj.p2
infoTense.conj.p3 = nil
end
return infoTense
end
-- =============================================================================
-- END
-- =============================================================================
-- Some useful tools
-- =============================================================================
-- Returns the list of verb tenses
export.tensesList = function()
local list = {}
for _, tense in pairs(export.tenseRules) do
table.insert(list, tense.name)
end
return list
end
-- Concatenation of pronouns and conjugated verbs
-- (for a given conjugate tense in all persons of that tense)
function export.concatPronomsVerbs(pronoms, conjVerbs)
local concatTab = {}
for _, pers in ipairs(export.order) do
concatTab[pers] = pronoms[pers] .. ' ' .. conjVerbs[pers]
end
return concatTab
end
-- =============================================================================
-- ADDITIONAL STEM OF THE PAST AND PRESENT (pastStem2, ... and presentStem2, ...)
-- This function does nothing more than add additional parameters for verb stems
-- in the past and present tenses.
-- Conjugations for the different stems will be separated by "/"
-- =============================================================================
function export.conjugateLong(baseOpts, tense, presentStems, pastStems)
local opts = baseOpts or {}
opts.tense = tense or nil
presentStems = presentStems or {}
pastStems = pastStems or {}
local infoTense = deepCopy(export.tenseRules[tense], 'copy') or false
-- We check that this tense is indeed in table "tenseRules".
if not infoTense then
return '<span style="color:red">Unknown tense: ' .. tense ..'</span>'
end
local stems = (infoTense.stem == 'present') and presentStems or pastStems
-- For each verb stem, its conjugation table is calculated and stored in conjTabs.
local conjTabs = {}
for i = 1, #stems do
if stems[i] then
if (infoTense.stem == 'past') then opts.pastStem = stems[i] end
if (infoTense.stem == 'present') then opts.presentStem = stems[i] end
local conj = export.conjugate(opts).conj
table.insert(conjTabs, conj)
end
end
-- We concatenate each row of the conjugation tables.
local concatConjTabs = {}
for _, pers in ipairs(export.order) do
local frag = {}
for i = 1, #conjTabs do
local val = conjTabs[i][pers]
if val then table.insert(frag, tostring(val)) end
end
concatConjTabs[pers] = table.concat(frag, " / ")
end
infoTense.conj = concatConjTabs
return infoTense
end
-- ====================================================================================
-- VERB CONUGATION IN ALL TENSES WITH OR WITHOUT PRONOUMS
-- ====================================================================================
function export.conjugateAllTenses(baseOpts, presentStems, pastStems, negation, concatPrs)
-- "concatPrs=false" table without pronouns
local opts = baseOpts or {}
if negation == 'negative' then opts.isNegative = true end
-- Concatenation of pronouns and conjugated verbs
local concatPronomsVerbs = export.concatPronomsVerbs
-- Tenses list
local tensesList = export.tensesList()
-- Conjugation in all tenses
local conjTab = {}
for _, tense in ipairs(tensesList) do
local infoTense = deepCopy(export.tenseRules[tense], 'copy')
-- We create the conjugation table without the pronouns.
conjTab[tense] = deepCopy(export.conjugateLong(opts, tense, presentStems, pastStems), 'copy')
-- We concatenate the pronouns and the verbs if "concatPrs" is different of "false"
-- No pronouns for the imperative mood
if (tense ~= 'impPresent' and concatPrs ~= false) then
local pronoms = deepCopy(export.conjPronouns(infoTense.stem, infoTense.mode, opts.isTransitive))
conjTab[tense].conj = concatPronomsVerbs(pronoms, conjTab[tense].conj)
end
end
return conjTab
end
-- ====================================================================================
-- Allows you to obtain a given conjugation from a model.
-- Ex. {{#invoke:ku-tewandin|tew|dem=indPresent|kes=s1}}
-- See {{ku-tewîn-lk-niha}}
-- ====================================================================================
function export.tew(frame)
local args = frame:getParent().args
local baseOpts = {
isNegative = frame.args['neyînî'] or false,
isTransitive = args['form'],
isCompoundVerb = args['valahî'] or false,
preSimpleVerb = args['pêşgir'] or nil,
postSimpleVerb = args['paşgir'] or nil,
accent = args['devok'] or 'std',
tags = args['lînk'] or 'erê',
overrideBi = args['bi'] or nil,
overrideDi = args['di'] or nil,
overrideNa = args['na'] or nil,
overrideNe = args['ne'] or nil,
impNegForm = nil
}
local tense = frame.args['dem'] or nil
local pers = frame.args['kes'] or nil
local presentStems = {args['niha'], args['niha2'], args['niha3']}
local pastStems = {args['borî'], args['borî2'], args['borî3']}
-- A few checks
if (baseOpts.isTransitive == 'gerguhêz') then
baseOpts.isTransitive = true
elseif (baseOpts.isTransitive == 'negerguhêz') then
baseOpts.isTransitive = false
else
return '<span style="color:red">form = gerguhêz / negerguhêz</span>'
end
if (baseOpts.isCompoundVerb == 'erê') then
baseOpts.isCompoundVerb = true
else
baseOpts.isCompoundVerb = false
end
if (baseOpts.isNegative == 'erê') then
baseOpts.isNegative = true
end
local tabConj = export.conjugateLong(baseOpts, tense, presentStems, pastStems).conj
return tabConj[pers]
end
-- ====================================================================================
-- GET COMMMA SEPARED FORMS
-- Bnr. [[MediaWiki:Gadget-QQ.js]]
-- Ex. {{#invoke:ku-tewandin|get_comma_separated_forms|niha=kev|borî=ket}}
-- ====================================================================================
function export.get_comma_separated_forms(frame)
local opts = {
presentStem = frame.args['niha'],
pastStem = frame.args['borî'],
isTransitive = false,
isNegative = false,
isCompoundVerb = frame['valahî'] or false,
preSimpleVerb = frame['pêşgir'] or '',
postSimpleVerb = frame['paşgir'] or '',
-- overridePreverb:
presentBi = frame['nihaBi'] or nil,
presentDi = frame['nihaDi'] or nil,
pastBi = frame['borîBi'] or nil,
pastDi = frame['borîDi'] or nil,
sameBi = frame['bi'] or nil,
sameDi = frame['di'] or nil,
-- overrideNegPrefix:
presentNa = frame['na'] or nil,
presentNe = frame['nihaNe'] or nil,
pastNe = frame['borîNe'] or nil,
sameNe = 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
92y5m7otgotfpaarkuuttl75dr9mm6z
6237488
6237486
2026-06-12T00:59:14Z
Ghybu
1393
6237488
Scribunto
text/plain
-- Modula tewandina lêkerên kurmancî
local export = {}
-- Load irregular forms table
-- local irreg = require('Module:ku-tewandin/nestandard')
local langKu = require("Modul:languages").getByCode("ku")
local link = require('Module:links').language_link
local shallowCopy = require("Module:table/shallowCopy")
local deepCopy = require("Module:table/deepCopy")
-- =============================================================================
-- Pronouns in Kurmanji
-- =============================================================================
export.order = {"s1", "s2", "s3", "p1", "p2", "p3"}
export.pronouns = {
s1 = "ez", p1 = "em",
s2 = "tu", p2 = "hûn",
s3 = "ew", p3 = "ew"
}
export.obliquePronouns = {
s1 = "min", p1 = "me",
s2 = "te", p2 = "we",
s3 = "wê/wî", p3 = "wan"
}
export.agents = {
s1 = "te, wî, wê, we, wan", p1 = "te, wî, wê, we, wan",
s2 = "min, wî, wê, me, wan", p2 = "min, wî, wê, me, wan",
s3 = "min, te, wî, wê, me, we, wan", p3 = "min, te, wî, wê, me, we, wan"
}
-- Oblique pronoun (green)
export.obliquePronounsGreen = {
s1 = '<span style="color:green">min</span>',
s2 = '<span style="color:green">te</span>',
s3 = '<span style="color:green">wê/wî</span>',
p1 = '<span style="color:green">me</span>',
p2 = '<span style="color:green">we</span>',
p3 = '<span style="color:green">wan</span>'
}
-- ─────────────────────────────────────────────────────────────────────────────
-- 1) This function returns correct subject/agent pronoun, ergativity rule:
-- - Transitive verbs in past tenses → oblique pronoun (green) = agent
-- - All other cases → direct pronoun (no color) = subject
-- 2) Also add the subjunctive prefix "(bila)"
-- ─────────────────────────────────────────────────────────────────────────────
function export.conjPronouns(stemType, mode, isTransitive)
local pronouns = shallowCopy(export.pronouns)
-- Ergativity in kurdish: transitive verbs that are conjugated with the past tense stem are
-- conjugated according to the object, not the subject.
-- Therefore, to have an ergative construction,
-- the verb must be transitive and its stem must be the stem of the past tense.
local isErgative = isTransitive and (stemType == 'past')
-- If it's ergative, we use oblique pronouns: "min", "te", ...
-- If it's not ergative, we use normal pronouns: "ez", "tu", ...
if isErgative then
pronouns = shallowCopy(export.obliquePronounsGreen)
end
-- For the subjunctive mood, we add "(bila)" at the beginning.
if mode == 'subjunctive' then
local subjPrefix = '<span style="color:gray">(bila)</span>'
for _, pers in ipairs(export.order) do
pronouns[pers] = subjPrefix .. ' ' .. pronouns[pers]
end
end
return pronouns
end
-- =============================================================================
-- VERBAL STRUCTURE IN THE INFINITIVE:
-- Verbs in the infinitive appear in three main forms:
-- 1) Simple verb (indivisible light verb):
-- - ex.: "kirin", "çûn", "xwarin", ...
-- 2) Verbs with preverbs (preverb + simple verb):
-- - ex.: "rakirin" (ra- + kirin), "çêkirin" (çê- + kirin), "vexwarin" (ve- + xwarin), ...
-- - Preverb verbs don't use the prefix "bi-" (ez ê rakim , ew ê rake , ...)
-- 3) Compound verbs, construction with non-verbal element (the noun is not attached to the verb):
-- - Left of the simple verb: "hez kirin" ("hez" + "kirin"), "li dar xistin" ("li dar" + "xistin"), ...
-- - Right of the simple verb: "kirin der" ("kirin" + "der"), "girtin ser xwe" ("girtin" + "ser xwe"), ...
-- - Compound verbs use the prefix "bi-" (ez ê hez bi-kim , ew ê hez bi-ke )
-- STRUCTURE: preSimpleVerb + spacing + simpleVerb + postSimpleVerb
-- EX. kirin: preSimpleVerb=''; spacing=false; simpleVerb='kirin'; postSimpleVerb=''
-- rakirin: preSimpleVerb='ra'; spacing=false; simpleVerb='kirin'; postSimpleVerb=''
-- hez kirin: preSimpleVerb='hez'; spacing=true; simpleVerb='kirin'; postSimpleVerb=''
-- pev çûn: preSimpleVerb='pev'; spacing=true; simpleVerb='çûn'; postSimpleVerb=''
-- kirin der: preSimpleVerb=''; spacing=false; simpleVerb='kirin'; postSimpleVerb='der'
-- WARNING: Conjugation can vary depending on the type of verb.
-- For example, in the future tense,the prefix "bi" is used for compound verbs,
-- but not for preverbal verbs, see the function that manages it "tenseRules" table.
-- This table does not yet support the mixed case: a verb composed of a noun and a preverb verb.
-- =============================================================================
function export.verbStruct(isCompoundVerb, preSimpleVerb)
local struct
if (preSimpleVerb and preSimpleVerb ~= '' and not isCompoundVerb) then
struct = 'preverbVerb'
elseif isCompoundVerb then
struct = 'compoundVerb'
else
struct = 'simpleVerb'
end
return struct
end
-- ================================================================
-- INFLECTIONAL ENDINGS
-- Assigns verb inflectional endings (suffixes) to all tenses
-- ================================================================
local getEndings = {}
do
-- ───────────────────────────────────────────────────────────────
-- Ending using present stem
-- ───────────────────────────────────────────────────────────────
getEndings['present'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends = {}
if mw.ustring.match(stem, '[aeêiîouû]$') then
ends['std'] = {s1='m', s2='yî', s3='', p1='n', p2='n', p3='n'}
ends['rojhilatî'] = {s1='m', s2='(y)', s3='t', p1='yn', p2='n', p3='n'}
else
ends['std'] = {s1='im', s2='î', s3='e', p1='in', p2='in', p3='in'}
ends['rojhilatî'] = {s1='im', s2='î', s3='<u>it</u>/ît', p1='în', p2='in', p3='in'}
end
return ends
end
-- ───────────────────────────────────────────────────────────────
-- Ind. preterite + ind. imperfect ending
-- ───────────────────────────────────────────────────────────────
getEndings['past'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends
if mw.ustring.match(stem, '[aeêiouû]$') then
ends = {s1='m', s2='yî', s3='', p1='n', p2='n', p3='n'}
elseif mw.ustring.match(stem, 'î$') then
-- if self.name == 'indImperfect' then
-- -- special indicative ind. imperfect rule
-- ends = {s1='yam', s2='yayî', s3='ya', p1='yan', p2='yan', p3='yan'}
-- end
ends = {s1='m', s2='', s3='', p1='n', p2='n', p3='n'}
else
ends = {s1='im', s2='î', s3='', p1='in', p2='in', p3='in'}
end
return ends
end
-- ───────────────────────────────────────────────────────────────
-- Compound endings with auxiliary "bûn"
-- Inflectional endings are created by taking the different forms of the
-- verb "bûn" (with present stem "-b-" and past stem "-bû-") and
-- adding an "i-" prefix before them: "i-b-im", "i-bû-m", "i-bû-me", "i-bû-ma".
-- This "i-" varies according to the final letter of the verb stem.
-- ───────────────────────────────────────────────────────────────
local function normalize_i(stem)
local prfx_i = "i"
if mw.ustring.match(stem, "ya$") or
mw.ustring.match(stem, "[îû]$") then -- cf. karîn (-karî-)
prfx_i = ""
elseif mw.ustring.match(stem, '[aeêiou]$') then
prfx_i = "yi"
end
return prfx_i
end
getEndings['ibim'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bim", p1 = prfx_i .. "bin",
s2 = prfx_i .. "bî", p2 = prfx_i .. "bin",
s3 = prfx_i .. "be", p3 = prfx_i .. "bin"
}
end
getEndings['ibûm'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bûm", p1 = prfx_i .. "bûn",
s2 = prfx_i .. "bûyî", p2 = prfx_i .. "bûn",
s3 = prfx_i .. "bû", p3 = prfx_i .. "bûn"
}
end
getEndings['ibûme'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bûme", p1 = prfx_i .. "bûne",
s2 = prfx_i .. "bûyiye", p2 = prfx_i .. "bûne",
s3 = prfx_i .. "bûye", p3 = prfx_i .. "bûne"
}
end
getEndings['ibûma'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bûma", p1 = prfx_i .. "bûna",
s2 = prfx_i .. "bûyayî", p2 = prfx_i .. "bûna",
s3 = prfx_i .. "bûya", p3 = prfx_i .. "bûna"
}
end
-- ───────────────────────────────────────────────────────────────
-- Ind. perfect ending.
-- ───────────────────────────────────────────────────────────────
getEndings['ime'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends
if mw.ustring.match(stem, '[aeêiîouû]$') then
ends = {s1="me", s2="yî", s3="ye", p1="ne", p2="ne", p3="ne"}
else
ends = {s1="ime", s2="iyî", s3="iye", p1="ine", p2="ine", p3="ine"}
end
return ends
end
-- ───────────────────────────────────────────────────────────────
-- Subj. Imperfect ending.
-- ───────────────────────────────────────────────────────────────
getEndings['ama'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends
-- The doublet in "-iyan" of verbs in -"în" (gerîn/-geriya-, kenîn/-keniya-, ...),
-- in the conditional and subjunctive moods, a doublet "yaya" appears; it's removed.
-- -yayayî → -yayî; -yaya → -ya
if mw.ustring.match(stem, '(ya)$') then
ends = {s1="ma", s2="yî", s3="", p1="na", p2="na", p3="na"}
elseif mw.ustring.match(stem, '[aeêiîouû]$') then
ends = {s1="ma", s2="yayî", s3="ya", p1="na", p2="na", p3="na"}
else
ends = {s1="ama", s2="ayî", s3="a", p1="ana", p2="ana", p3="ana"}
end
return ends
end
end
-- =============================================================================
-- RULES FOR PREVERBS: "bi-" and "di-"
-- There are two preverbs: "bi-" and "di-". These preverbs can change form
-- depending on the first letters of the verb’s present stem or past stem.
-- =============================================================================
local getPreverb = {}
do
getPreverb['bi'] = function (self, opts)
opts = opts or {}
local stem = opts.stem
local verbStruct = opts.verbStruct
local overridePreverb = opts.overridePreverb
local accent = opts.accent
-- Devoka rojhilatî:
-- @Ferhengvan: Dema bêt bi lêkera alîkar "ê / dê" û bi rehê lêkerê yê
-- dema niha û pêşgirên kesî tê çêkirin. Pêşgira "bi-" li destpêka lêkera
-- serekî nîne: - ez ê / dê xw-im (standard: ez ê/dê bi-xw-im).
if (self.name == 'indFuture' and accent == 'rojhilatî') then
return ''
end
-- Preverb verbs don't use the preverb "bi-": ra-kirin (ez ê rakim), ve-xwarin (ez ê vexwim) , ...
-- But compound verb and simple verbs use it: hez kirin (ez ê hez bi-kim), lê bigirin (ez ê lê bi-girim), ...
if (verbStruct == 'preverbVerb') then
return ''
end
-- If the preverb "bi-" is provided.
if (self.stem == 'present' and overridePreverb.presentBi) then
return overridePreverb.presentBi
elseif (self.stem == 'past' and overridePreverb.pastBi) then
return overridePreverb.pastBi
elseif overridePreverb.sameBi then
return overridePreverb.sameBi
end
-- Modification of the preverbe "bi-" according to the last letter of the stem.
if mw.ustring.match(stem, '^[aeêiîouû]') then
return 'b'
end
return 'bi'
end
getPreverb['di'] = function (self, opts)
opts = opts or {}
local stem = opts.stem
local overridePreverb = opts.overridePreverb
-- If the preverb "di" is provided.
if (self.stem == 'present' and overridePreverb.presentDi) then
return overridePreverb.presentDi
elseif (self.stem == 'past' and overridePreverb.pastDi) then
return overridePreverb.pastDi
elseif overridePreverb.sameDi then
return overridePreverb.sameDi
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 (self, opts)
-- self: reserved for future use
local _ = self -- delete the warning (unused argument)
opts = opts or {}
local stem = opts.stem
local overrideNa = opts.overrideNegPrefix.presentNa
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 (self, opts)
opts = opts or {}
local stem = opts.stem
local tenseName = self.name
local impNegForm = opts.impNegForm -- form "1" or "2" of imp.
local overrideNegPrefix = opts.overrideNegPrefix
local negPrefix = 'ne'
-- Override
if (overrideNegPrefix.impMe or overrideNegPrefix.presentNe) then
-- Ovverride imp.
if (tenseName == 'impPresent') then
if (impNegForm == 1 and overrideNegPrefix.impMe) then
return '<b>' .. overrideNegPrefix.impMe .. '</b>'
elseif (impNegForm == 2 and overrideNegPrefix.presentNe) then
return '<b>' .. overrideNegPrefix.presentNe .. '</b>'
elseif (impNegForm == 2 and overrideNegPrefix.sameNe) then
return '<b>' .. overrideNegPrefix.sameNe .. '</b>'
end
end
-- For other tenses besides the imperative
if (self.stem == 'present' and overrideNegPrefix.presentNe) then
return '<b>' .. overrideNegPrefix.presentNe .. '</b>'
elseif (self.stem == 'past' and overrideNegPrefix.pastNe) then
return '<b>' .. overrideNegPrefix.pastNe .. '</b>'
elseif overrideNegPrefix.sameNe then
return '<b>' .. overrideNegPrefix.sameNe .. '</b>'
end
end
-- Bo neyînî: pêşgira "di-" tenê di nav dema "indImperfect" de tê bikaranîn.
-- ji ber vê yekê 'negPrefix' hertim (?) 'ne' ye ji ber ku dikeve pêş
-- pêşgira "di-": wê/wî ne-di-elimand (elimandin)
if (tenseName == 'indImperfect') then
return '<b>' .. negPrefix .. '</b>'
end
-- There are two forms of construction of the imperative,
-- one with the prefix "me-" (1) and the other (2) 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 overridePreverb = {
-- Preverbs (bi-, di)
presentBi = opts.presentBi or nil,
presentDi = opts.presentDi or nil,
pastBi = opts.pastBi or nil,
pastDi = opts.pastDi or nil,
-- Same preverbs ("past" and "present" stem)
sameBi = opts.sameBi or nil,
sameDi = opts.sameDi or nil,
}
local overrideNegPrefix = {
-- Neg. prefix (na-, ne-)
presentNa = opts.presentNa or nil,
presentNe = opts.presentNe or nil,
pastNe = opts.pastNe or nil,
-- same neg. prefix (for past and present stem)
sameNe = opts.sameNe or nil,
impMe = opts.impMe 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 1
-- Accent/ Devok
local accent = opts.accent or 'std'
-- If "tags='na'", remove links/tags
local tags = opts.tags or 'erê'
-- If addPreverbParticles='na', remove preverb particles (ê/dê) before
-- the conjugated verbs.
local addPreverbParticles = opts.addPreverbParticles or 'erê'
-- We add a space to the left of the "postSimpleVerb" because it shouldn't be attached
-- to the simple verb.
if (postSimpleVerb ~= '' and postSimpleVerb ~=nil) then
postSimpleVerb = ' ' .. postSimpleVerb
end
-- Access to the classification table and retrieval of verb tense parameters
local infoTense = deepCopy(export.tenseRules[tense], 'copy') or false
-- We check that this tense is indeed in table "tenseRules".
if (not infoTense) then
return '<span style="color:red">Unknown tense: ' .. tense ..'</span>'
end
-- We check that one of the two parameters of the stem is given
if (infoTense.stem == 'present' and not presentStem) then
return '<span style="color:red">presentStem parameter required</span>'
elseif (infoTense.stem == 'past' and not pastStem) then
return '<span style="color:red">pasttStem parameter required</span>'
end
-- Choice between the present stem or past stem
local stem = (infoTense.stem == 'present') and presentStem or pastStem
--────────────────────────────
-- Conjugation construction --
-- ───────────────────────────
local preverb = ''
local negPrefix = ''
-- Ruturns the verb type: "simpleVerb" or "preverbVerb" or "compoundVerb"
local verbStruct = export.verbStruct(isCompoundVerb, preSimpleVerb)
if isNegative then
negPrefix = infoTense:negPrefix{stem=stem,
impNegForm=impNegForm,
overrideNegPrefix=overrideNegPrefix}
if infoTense.negPreverb then
preverb = infoTense:negPreverb{stem=stem, verbStruct=verbStruct,
overridePreverb=overridePreverb}
end
else
if infoTense.preverb then
preverb = infoTense:preverb{stem=stem, verbStruct=verbStruct,
overridePreverb=overridePreverb,
accent=accent}
end
end
infoTense.conj = {}
local spacing = isCompoundVerb and ' ' or ''
local endings = infoTense:endings(stem)
-- 'rojhilatî' accent (devok) for present stem
if (infoTense.stem == 'present') then
if (accent == 'rojhilatî') then
endings = endings['rojhilatî']
else
endings = endings['std']
end
end
local preverbParticles = export.getPreverbParticules(infoTense.preverbParticle, infoTense.stem, isTransitive)
local isErgative = isTransitive and (infoTense.stem == 'past')
-- Creating the conjugation table for a given tense
for _, pers in ipairs(export.order) do
local ending
local conjSimbleVerb
local conjVerb
if isErgative then
ending = endings.s3
else
ending = endings[pers]
end
-- Adding space after the preverbal particle, and
-- if "addPreverbParticles='na'": remove preverb particles (ê/dê).
local preverbParticle = ''
if infoTense.preverbParticle and addPreverbParticles ~= 'na' then
preverbParticle = preverbParticles[pers] .. ' '
end
conjSimbleVerb = negPrefix .. preverb .. stem .. ending
-- Adding prefixe and suffixe
conjVerb = preSimpleVerb .. spacing .. conjSimbleVerb .. postSimpleVerb
-- Spelling correction(îy -> iy)
conjVerb = mw.ustring.gsub(conjVerb, 'îy', 'iy')
-- Add a link / if tags='na' no links
if tags ~= 'na' then
conjVerb = link{term=conjVerb, lang=langKu}
end
-- Addition of the preverbal particle
infoTense.conj[pers] = preverbParticle .. conjVerb
end
-- Imperative
if (infoTense.name == 'impPresent') then
infoTense.conj.s1 = nil
infoTense.conj.s2 = infoTense.conj.s3
infoTense.conj.s3 = nil
infoTense.conj.p1 = nil
-- infoTense.conj.p2 = infoTense.conj.p2
infoTense.conj.p3 = nil
end
return infoTense
end
-- =============================================================================
-- END
-- =============================================================================
-- Some useful tools
-- =============================================================================
-- Returns the list of verb tenses
export.tensesList = function()
local list = {}
for _, tense in pairs(export.tenseRules) do
table.insert(list, tense.name)
end
return list
end
-- Concatenation of pronouns and conjugated verbs
-- (for a given conjugate tense in all persons of that tense)
function export.concatPronomsVerbs(pronoms, conjVerbs)
local concatTab = {}
for _, pers in ipairs(export.order) do
concatTab[pers] = pronoms[pers] .. ' ' .. conjVerbs[pers]
end
return concatTab
end
-- =============================================================================
-- ADDITIONAL STEM OF THE PAST AND PRESENT (pastStem2, ... and presentStem2, ...)
-- This function does nothing more than add additional parameters for verb stems
-- in the past and present tenses.
-- Conjugations for the different stems will be separated by "/"
-- =============================================================================
function export.conjugateLong(baseOpts, tense, presentStems, pastStems)
local opts = baseOpts or {}
opts.tense = tense or nil
presentStems = presentStems or {}
pastStems = pastStems or {}
local infoTense = deepCopy(export.tenseRules[tense], 'copy') or false
-- We check that this tense is indeed in table "tenseRules".
if not infoTense then
return '<span style="color:red">Unknown tense: ' .. tense ..'</span>'
end
local stems = (infoTense.stem == 'present') and presentStems or pastStems
-- For each verb stem, its conjugation table is calculated and stored in conjTabs.
local conjTabs = {}
for i = 1, #stems do
if stems[i] then
if (infoTense.stem == 'past') then opts.pastStem = stems[i] end
if (infoTense.stem == 'present') then opts.presentStem = stems[i] end
local conj = export.conjugate(opts).conj
table.insert(conjTabs, conj)
end
end
-- We concatenate each row of the conjugation tables.
local concatConjTabs = {}
for _, pers in ipairs(export.order) do
local frag = {}
for i = 1, #conjTabs do
local val = conjTabs[i][pers]
if val then table.insert(frag, tostring(val)) end
end
concatConjTabs[pers] = table.concat(frag, " / ")
end
infoTense.conj = concatConjTabs
return infoTense
end
-- ====================================================================================
-- VERB CONUGATION IN ALL TENSES WITH OR WITHOUT PRONOUMS
-- ====================================================================================
function export.conjugateAllTenses(baseOpts, presentStems, pastStems, negation, concatPrs)
-- "concatPrs=false" table without pronouns
local opts = baseOpts or {}
if negation == 'negative' then opts.isNegative = true end
-- Concatenation of pronouns and conjugated verbs
local concatPronomsVerbs = export.concatPronomsVerbs
-- Tenses list
local tensesList = export.tensesList()
-- Conjugation in all tenses
local conjTab = {}
for _, tense in ipairs(tensesList) do
local infoTense = deepCopy(export.tenseRules[tense], 'copy')
-- We create the conjugation table without the pronouns.
conjTab[tense] = deepCopy(export.conjugateLong(opts, tense, presentStems, pastStems), 'copy')
-- We concatenate the pronouns and the verbs if "concatPrs" is different of "false"
-- No pronouns for the imperative mood
if (tense ~= 'impPresent' and concatPrs ~= false) then
local pronoms = deepCopy(export.conjPronouns(infoTense.stem, infoTense.mode, opts.isTransitive))
conjTab[tense].conj = concatPronomsVerbs(pronoms, conjTab[tense].conj)
end
end
return conjTab
end
-- ====================================================================================
-- Allows you to obtain a given conjugation from a model.
-- Ex. {{#invoke:ku-tewandin|tew|dem=indPresent|kes=s1}}
-- See {{ku-tewîn-lk-niha}}
-- ====================================================================================
function export.tew(frame)
local args = frame:getParent().args
local baseOpts = {
isNegative = frame.args['neyînî'] or false,
isTransitive = args['form'],
isCompoundVerb = args['valahî'] or false,
preSimpleVerb = args['pêşgir'] or nil,
postSimpleVerb = args['paşgir'] or nil,
-- overridePreverb:
presentBi = frame['nihaBi'] or nil,
presentDi = frame['nihaDi'] or nil,
pastBi = frame['borîBi'] or nil,
pastDi = frame['borîDi'] or nil,
sameBi = frame['bi'] or nil,
sameDi = frame['di'] or nil,
-- overrideNegPrefix:
presentNa = frame['na'] or nil,
presentNe = frame['nihaNe'] or nil,
pastNe = frame['borîNe'] or nil,
sameNe = frame['ne'] or nil,
impMe = frame['me'] or nil,
impNegForm = 1,
tags = args['lînk'] or 'erê',
accent = args['devok'] or 'std',
}
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 '',
-- overridePreverb:
presentBi = frame['nihaBi'] or nil,
presentDi = frame['nihaDi'] or nil,
pastBi = frame['borîBi'] or nil,
pastDi = frame['borîDi'] or nil,
sameBi = frame['bi'] or nil,
sameDi = frame['di'] or nil,
-- overrideNegPrefix:
presentNa = frame['na'] or nil,
presentNe = frame['nihaNe'] or nil,
pastNe = frame['borîNe'] or nil,
sameNe = frame['ne'] or nil,
impMe = frame['me'] or nil,
impNegForm = 1,
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
ldszz8z6ie40sgb7dy4l15878e2d05t
6237489
6237488
2026-06-12T01:15:08Z
Ghybu
1393
6237489
Scribunto
text/plain
-- Modula tewandina lêkerên kurmancî
local export = {}
-- Load irregular forms table
-- local irreg = require('Module:ku-tewandin/nestandard')
local langKu = require("Modul:languages").getByCode("ku")
local link = require('Module:links').language_link
local shallowCopy = require("Module:table/shallowCopy")
local deepCopy = require("Module:table/deepCopy")
-- =============================================================================
-- Pronouns in Kurmanji
-- =============================================================================
export.order = {"s1", "s2", "s3", "p1", "p2", "p3"}
export.pronouns = {
s1 = "ez", p1 = "em",
s2 = "tu", p2 = "hûn",
s3 = "ew", p3 = "ew"
}
export.obliquePronouns = {
s1 = "min", p1 = "me",
s2 = "te", p2 = "we",
s3 = "wê/wî", p3 = "wan"
}
export.agents = {
s1 = "te, wî, wê, we, wan", p1 = "te, wî, wê, we, wan",
s2 = "min, wî, wê, me, wan", p2 = "min, wî, wê, me, wan",
s3 = "min, te, wî, wê, me, we, wan", p3 = "min, te, wî, wê, me, we, wan"
}
-- Oblique pronoun (green)
export.obliquePronounsGreen = {
s1 = '<span style="color:green">min</span>',
s2 = '<span style="color:green">te</span>',
s3 = '<span style="color:green">wê/wî</span>',
p1 = '<span style="color:green">me</span>',
p2 = '<span style="color:green">we</span>',
p3 = '<span style="color:green">wan</span>'
}
-- ─────────────────────────────────────────────────────────────────────────────
-- 1) This function returns correct subject/agent pronoun, ergativity rule:
-- - Transitive verbs in past tenses → oblique pronoun (green) = agent
-- - All other cases → direct pronoun (no color) = subject
-- 2) Also add the subjunctive prefix "(bila)"
-- ─────────────────────────────────────────────────────────────────────────────
function export.conjPronouns(stemType, mode, isTransitive)
local pronouns = shallowCopy(export.pronouns)
-- Ergativity in kurdish: transitive verbs that are conjugated with the past tense stem are
-- conjugated according to the object, not the subject.
-- Therefore, to have an ergative construction,
-- the verb must be transitive and its stem must be the stem of the past tense.
local isErgative = isTransitive and (stemType == 'past')
-- If it's ergative, we use oblique pronouns: "min", "te", ...
-- If it's not ergative, we use normal pronouns: "ez", "tu", ...
if isErgative then
pronouns = shallowCopy(export.obliquePronounsGreen)
end
-- For the subjunctive mood, we add "(bila)" at the beginning.
if mode == 'subjunctive' then
local subjPrefix = '<span style="color:gray">(bila)</span>'
for _, pers in ipairs(export.order) do
pronouns[pers] = subjPrefix .. ' ' .. pronouns[pers]
end
end
return pronouns
end
-- =============================================================================
-- VERBAL STRUCTURE IN THE INFINITIVE:
-- Verbs in the infinitive appear in three main forms:
-- 1) Simple verb (indivisible light verb):
-- - ex.: "kirin", "çûn", "xwarin", ...
-- 2) Verbs with preverbs (preverb + simple verb):
-- - ex.: "rakirin" (ra- + kirin), "çêkirin" (çê- + kirin), "vexwarin" (ve- + xwarin), ...
-- - Preverb verbs don't use the prefix "bi-" (ez ê rakim , ew ê rake , ...)
-- 3) Compound verbs, construction with non-verbal element (the noun is not attached to the verb):
-- - Left of the simple verb: "hez kirin" ("hez" + "kirin"), "li dar xistin" ("li dar" + "xistin"), ...
-- - Right of the simple verb: "kirin der" ("kirin" + "der"), "girtin ser xwe" ("girtin" + "ser xwe"), ...
-- - Compound verbs use the prefix "bi-" (ez ê hez bi-kim , ew ê hez bi-ke )
-- STRUCTURE: preSimpleVerb + spacing + simpleVerb + postSimpleVerb
-- EX. kirin: preSimpleVerb=''; spacing=false; simpleVerb='kirin'; postSimpleVerb=''
-- rakirin: preSimpleVerb='ra'; spacing=false; simpleVerb='kirin'; postSimpleVerb=''
-- hez kirin: preSimpleVerb='hez'; spacing=true; simpleVerb='kirin'; postSimpleVerb=''
-- pev çûn: preSimpleVerb='pev'; spacing=true; simpleVerb='çûn'; postSimpleVerb=''
-- kirin der: preSimpleVerb=''; spacing=false; simpleVerb='kirin'; postSimpleVerb='der'
-- WARNING: Conjugation can vary depending on the type of verb.
-- For example, in the future tense,the prefix "bi" is used for compound verbs,
-- but not for preverbal verbs, see the function that manages it "tenseRules" table.
-- This table does not yet support the mixed case: a verb composed of a noun and a preverb verb.
-- =============================================================================
function export.verbStruct(isCompoundVerb, preSimpleVerb)
local struct
if (preSimpleVerb and preSimpleVerb ~= '' and not isCompoundVerb) then
struct = 'preverbVerb'
elseif isCompoundVerb then
struct = 'compoundVerb'
else
struct = 'simpleVerb'
end
return struct
end
-- ================================================================
-- INFLECTIONAL ENDINGS
-- Assigns verb inflectional endings (suffixes) to all tenses
-- ================================================================
local getEndings = {}
do
-- ───────────────────────────────────────────────────────────────
-- Ending using present stem
-- ───────────────────────────────────────────────────────────────
getEndings['present'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends = {}
if mw.ustring.match(stem, '[aeêiîouû]$') then
ends['std'] = {s1='m', s2='yî', s3='', p1='n', p2='n', p3='n'}
ends['rojhilatî'] = {s1='m', s2='(y)', s3='t', p1='yn', p2='n', p3='n'}
else
ends['std'] = {s1='im', s2='î', s3='e', p1='in', p2='in', p3='in'}
ends['rojhilatî'] = {s1='im', s2='î', s3='<u>it</u>/ît', p1='în', p2='in', p3='in'}
end
return ends
end
-- ───────────────────────────────────────────────────────────────
-- Ind. preterite + ind. imperfect ending
-- ───────────────────────────────────────────────────────────────
getEndings['past'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends
if mw.ustring.match(stem, '[aeêiouû]$') then
ends = {s1='m', s2='yî', s3='', p1='n', p2='n', p3='n'}
elseif mw.ustring.match(stem, 'î$') then
-- if self.name == 'indImperfect' then
-- -- special indicative ind. imperfect rule
-- ends = {s1='yam', s2='yayî', s3='ya', p1='yan', p2='yan', p3='yan'}
-- end
ends = {s1='m', s2='', s3='', p1='n', p2='n', p3='n'}
else
ends = {s1='im', s2='î', s3='', p1='in', p2='in', p3='in'}
end
return ends
end
-- ───────────────────────────────────────────────────────────────
-- Compound endings with auxiliary "bûn"
-- Inflectional endings are created by taking the different forms of the
-- verb "bûn" (with present stem "-b-" and past stem "-bû-") and
-- adding an "i-" prefix before them: "i-b-im", "i-bû-m", "i-bû-me", "i-bû-ma".
-- This "i-" varies according to the final letter of the verb stem.
-- ───────────────────────────────────────────────────────────────
local function normalize_i(stem)
local prfx_i = "i"
if mw.ustring.match(stem, "ya$") or
mw.ustring.match(stem, "[îû]$") then -- cf. karîn (-karî-)
prfx_i = ""
elseif mw.ustring.match(stem, '[aeêiou]$') then
prfx_i = "yi"
end
return prfx_i
end
getEndings['ibim'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bim", p1 = prfx_i .. "bin",
s2 = prfx_i .. "bî", p2 = prfx_i .. "bin",
s3 = prfx_i .. "be", p3 = prfx_i .. "bin"
}
end
getEndings['ibûm'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bûm", p1 = prfx_i .. "bûn",
s2 = prfx_i .. "bûyî", p2 = prfx_i .. "bûn",
s3 = prfx_i .. "bû", p3 = prfx_i .. "bûn"
}
end
getEndings['ibûme'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bûme", p1 = prfx_i .. "bûne",
s2 = prfx_i .. "bûyiye", p2 = prfx_i .. "bûne",
s3 = prfx_i .. "bûye", p3 = prfx_i .. "bûne"
}
end
getEndings['ibûma'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bûma", p1 = prfx_i .. "bûna",
s2 = prfx_i .. "bûyayî", p2 = prfx_i .. "bûna",
s3 = prfx_i .. "bûya", p3 = prfx_i .. "bûna"
}
end
-- ───────────────────────────────────────────────────────────────
-- Ind. perfect ending.
-- ───────────────────────────────────────────────────────────────
getEndings['ime'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends
if mw.ustring.match(stem, '[aeêiîouû]$') then
ends = {s1="me", s2="yî", s3="ye", p1="ne", p2="ne", p3="ne"}
else
ends = {s1="ime", s2="iyî", s3="iye", p1="ine", p2="ine", p3="ine"}
end
return ends
end
-- ───────────────────────────────────────────────────────────────
-- Subj. Imperfect ending.
-- ───────────────────────────────────────────────────────────────
getEndings['ama'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends
-- The doublet in "-iyan" of verbs in -"în" (gerîn/-geriya-, kenîn/-keniya-, ...),
-- in the conditional and subjunctive moods, a doublet "yaya" appears; it's removed.
-- -yayayî → -yayî; -yaya → -ya
if mw.ustring.match(stem, '(ya)$') then
ends = {s1="ma", s2="yî", s3="", p1="na", p2="na", p3="na"}
elseif mw.ustring.match(stem, '[aeêiîouû]$') then
ends = {s1="ma", s2="yayî", s3="ya", p1="na", p2="na", p3="na"}
else
ends = {s1="ama", s2="ayî", s3="a", p1="ana", p2="ana", p3="ana"}
end
return ends
end
end
-- =============================================================================
-- RULES FOR PREVERBS: "bi-" and "di-"
-- There are two preverbs: "bi-" and "di-". These preverbs can change form
-- depending on the first letters of the verb’s present stem or past stem.
-- =============================================================================
local getPreverb = {}
do
getPreverb['bi'] = function (self, opts)
opts = opts or {}
local stem = opts.stem
local verbStruct = opts.verbStruct
local overridePreverb = opts.overridePreverb
local accent = opts.accent
-- Devoka rojhilatî:
-- @Ferhengvan: Dema bêt bi lêkera alîkar "ê / dê" û bi rehê lêkerê yê
-- dema niha û pêşgirên kesî tê çêkirin. Pêşgira "bi-" li destpêka lêkera
-- serekî nîne: - ez ê / dê xw-im (standard: ez ê/dê bi-xw-im).
if (self.name == 'indFuture' and accent == 'rojhilatî') then
return ''
end
-- Preverb verbs don't use the preverb "bi-": ra-kirin (ez ê rakim), ve-xwarin (ez ê vexwim) , ...
-- But compound verb and simple verbs use it: hez kirin (ez ê hez bi-kim), lê bigirin (ez ê lê bi-girim), ...
if (verbStruct == 'preverbVerb') then
return ''
end
-- If the preverb "bi-" is provided.
if (self.stem == 'present' and overridePreverb.presentBi) then
return overridePreverb.presentBi
elseif (self.stem == 'past' and overridePreverb.pastBi) then
return overridePreverb.pastBi
elseif overridePreverb.sameBi then
return overridePreverb.sameBi
end
-- Modification of the preverbe "bi-" according to the last letter of the stem.
if mw.ustring.match(stem, '^[aeêiîouû]') then
return 'b'
end
return 'bi'
end
getPreverb['di'] = function (self, opts)
opts = opts or {}
local stem = opts.stem
local overridePreverb = opts.overridePreverb
-- If the preverb "di" is provided.
if (self.stem == 'present' and overridePreverb.presentDi) then
return overridePreverb.presentDi
elseif (self.stem == 'past' and overridePreverb.pastDi) then
return overridePreverb.pastDi
elseif overridePreverb.sameDi then
return overridePreverb.sameDi
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 (self, opts)
-- self: reserved for future use
local _ = self -- delete the warning (unused argument)
opts = opts or {}
local stem = opts.stem
local overrideNa = opts.overrideNegPrefix.presentNa
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 (self, opts)
opts = opts or {}
local stem = opts.stem
local tenseName = self.name
local impNegForm = opts.impNegForm -- form "1" or "2" of imp.
local overrideNegPrefix = opts.overrideNegPrefix
local negPrefix = 'ne'
-- Override
if (overrideNegPrefix.impMe or overrideNegPrefix.presentNe
or overrideNegPrefix.sameNe) then
-- Ovverride imp.
if (tenseName == 'impPresent') then
if (impNegForm == 1 and overrideNegPrefix.impMe) then
return '<b>' .. overrideNegPrefix.impMe .. '</b>'
elseif (impNegForm == 2 and overrideNegPrefix.presentNe) then
return '<b>' .. overrideNegPrefix.presentNe .. '</b>'
elseif (impNegForm == 2 and overrideNegPrefix.sameNe) then
return '<b>' .. overrideNegPrefix.sameNe .. '</b>'
end
else
-- For other tenses besides the imperative
if (self.stem == 'present' and overrideNegPrefix.presentNe) then
return '<b>' .. overrideNegPrefix.presentNe .. '</b>'
elseif (self.stem == 'past' and overrideNegPrefix.pastNe) then
return '<b>' .. overrideNegPrefix.pastNe .. '</b>'
elseif overrideNegPrefix.sameNe then
return '<b>' .. overrideNegPrefix.sameNe .. '</b>'
end
end
end
-- Bo neyînî: pêşgira "di-" tenê di nav dema "indImperfect" de tê bikaranîn.
-- ji ber vê yekê 'negPrefix' hertim (?) 'ne' ye ji ber ku dikeve pêş
-- pêşgira "di-": wê/wî ne-di-elimand (elimandin)
if (tenseName == 'indImperfect') then
return '<b>' .. negPrefix .. '</b>'
end
-- There are two forms of construction of the imperative,
-- one with the prefix "me-" (1) and the other (2) 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 overridePreverb = {
-- Preverbs (bi-, di)
presentBi = opts.presentBi or nil,
presentDi = opts.presentDi or nil,
pastBi = opts.pastBi or nil,
pastDi = opts.pastDi or nil,
-- Same preverbs ("past" and "present" stem)
sameBi = opts.sameBi or nil,
sameDi = opts.sameDi or nil,
}
local overrideNegPrefix = {
-- Neg. prefix (na-, ne-)
presentNa = opts.presentNa or nil,
presentNe = opts.presentNe or nil,
pastNe = opts.pastNe or nil,
-- same neg. prefix (for past and present stem)
sameNe = opts.sameNe or nil,
impMe = opts.impMe 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 1
-- Accent/ Devok
local accent = opts.accent or 'std'
-- If "tags='na'", remove links/tags
local tags = opts.tags or 'erê'
-- If addPreverbParticles='na', remove preverb particles (ê/dê) before
-- the conjugated verbs.
local addPreverbParticles = opts.addPreverbParticles or 'erê'
-- We add a space to the left of the "postSimpleVerb" because it shouldn't be attached
-- to the simple verb.
if (postSimpleVerb ~= '' and postSimpleVerb ~=nil) then
postSimpleVerb = ' ' .. postSimpleVerb
end
-- Access to the classification table and retrieval of verb tense parameters
local infoTense = deepCopy(export.tenseRules[tense], 'copy') or false
-- We check that this tense is indeed in table "tenseRules".
if (not infoTense) then
return '<span style="color:red">Unknown tense: ' .. tense ..'</span>'
end
-- We check that one of the two parameters of the stem is given
if (infoTense.stem == 'present' and not presentStem) then
return '<span style="color:red">presentStem parameter required</span>'
elseif (infoTense.stem == 'past' and not pastStem) then
return '<span style="color:red">pasttStem parameter required</span>'
end
-- Choice between the present stem or past stem
local stem = (infoTense.stem == 'present') and presentStem or pastStem
--────────────────────────────
-- Conjugation construction --
-- ───────────────────────────
local preverb = ''
local negPrefix = ''
-- Ruturns the verb type: "simpleVerb" or "preverbVerb" or "compoundVerb"
local verbStruct = export.verbStruct(isCompoundVerb, preSimpleVerb)
if isNegative then
negPrefix = infoTense:negPrefix{stem=stem,
impNegForm=impNegForm,
overrideNegPrefix=overrideNegPrefix}
if infoTense.negPreverb then
preverb = infoTense:negPreverb{stem=stem, verbStruct=verbStruct,
overridePreverb=overridePreverb}
end
else
if infoTense.preverb then
preverb = infoTense:preverb{stem=stem, verbStruct=verbStruct,
overridePreverb=overridePreverb,
accent=accent}
end
end
infoTense.conj = {}
local spacing = isCompoundVerb and ' ' or ''
local endings = infoTense:endings(stem)
-- 'rojhilatî' accent (devok) for present stem
if (infoTense.stem == 'present') then
if (accent == 'rojhilatî') then
endings = endings['rojhilatî']
else
endings = endings['std']
end
end
local preverbParticles = export.getPreverbParticules(infoTense.preverbParticle, infoTense.stem, isTransitive)
local isErgative = isTransitive and (infoTense.stem == 'past')
-- Creating the conjugation table for a given tense
for _, pers in ipairs(export.order) do
local ending
local conjSimbleVerb
local conjVerb
if isErgative then
ending = endings.s3
else
ending = endings[pers]
end
-- Adding space after the preverbal particle, and
-- if "addPreverbParticles='na'": remove preverb particles (ê/dê).
local preverbParticle = ''
if infoTense.preverbParticle and addPreverbParticles ~= 'na' then
preverbParticle = preverbParticles[pers] .. ' '
end
conjSimbleVerb = negPrefix .. preverb .. stem .. ending
-- Adding prefixe and suffixe
conjVerb = preSimpleVerb .. spacing .. conjSimbleVerb .. postSimpleVerb
-- Spelling correction(îy -> iy)
conjVerb = mw.ustring.gsub(conjVerb, 'îy', 'iy')
-- Add a link / if tags='na' no links
if tags ~= 'na' then
conjVerb = link{term=conjVerb, lang=langKu}
end
-- Addition of the preverbal particle
infoTense.conj[pers] = preverbParticle .. conjVerb
end
-- Imperative
if (infoTense.name == 'impPresent') then
infoTense.conj.s1 = nil
infoTense.conj.s2 = infoTense.conj.s3
infoTense.conj.s3 = nil
infoTense.conj.p1 = nil
-- infoTense.conj.p2 = infoTense.conj.p2
infoTense.conj.p3 = nil
end
return infoTense
end
-- =============================================================================
-- END
-- =============================================================================
-- Some useful tools
-- =============================================================================
-- Returns the list of verb tenses
export.tensesList = function()
local list = {}
for _, tense in pairs(export.tenseRules) do
table.insert(list, tense.name)
end
return list
end
-- Concatenation of pronouns and conjugated verbs
-- (for a given conjugate tense in all persons of that tense)
function export.concatPronomsVerbs(pronoms, conjVerbs)
local concatTab = {}
for _, pers in ipairs(export.order) do
concatTab[pers] = pronoms[pers] .. ' ' .. conjVerbs[pers]
end
return concatTab
end
-- =============================================================================
-- ADDITIONAL STEM OF THE PAST AND PRESENT (pastStem2, ... and presentStem2, ...)
-- This function does nothing more than add additional parameters for verb stems
-- in the past and present tenses.
-- Conjugations for the different stems will be separated by "/"
-- =============================================================================
function export.conjugateLong(baseOpts, tense, presentStems, pastStems)
local opts = baseOpts or {}
opts.tense = tense or nil
presentStems = presentStems or {}
pastStems = pastStems or {}
local infoTense = deepCopy(export.tenseRules[tense], 'copy') or false
-- We check that this tense is indeed in table "tenseRules".
if not infoTense then
return '<span style="color:red">Unknown tense: ' .. tense ..'</span>'
end
local stems = (infoTense.stem == 'present') and presentStems or pastStems
-- For each verb stem, its conjugation table is calculated and stored in conjTabs.
local conjTabs = {}
for i = 1, #stems do
if stems[i] then
if (infoTense.stem == 'past') then opts.pastStem = stems[i] end
if (infoTense.stem == 'present') then opts.presentStem = stems[i] end
local conj = export.conjugate(opts).conj
table.insert(conjTabs, conj)
end
end
-- We concatenate each row of the conjugation tables.
local concatConjTabs = {}
for _, pers in ipairs(export.order) do
local frag = {}
for i = 1, #conjTabs do
local val = conjTabs[i][pers]
if val then table.insert(frag, tostring(val)) end
end
concatConjTabs[pers] = table.concat(frag, " / ")
end
infoTense.conj = concatConjTabs
return infoTense
end
-- ====================================================================================
-- VERB CONUGATION IN ALL TENSES WITH OR WITHOUT PRONOUMS
-- ====================================================================================
function export.conjugateAllTenses(baseOpts, presentStems, pastStems, negation, concatPrs)
-- "concatPrs=false" table without pronouns
local opts = baseOpts or {}
if negation == 'negative' then opts.isNegative = true end
-- Concatenation of pronouns and conjugated verbs
local concatPronomsVerbs = export.concatPronomsVerbs
-- Tenses list
local tensesList = export.tensesList()
-- Conjugation in all tenses
local conjTab = {}
for _, tense in ipairs(tensesList) do
local infoTense = deepCopy(export.tenseRules[tense], 'copy')
-- We create the conjugation table without the pronouns.
conjTab[tense] = deepCopy(export.conjugateLong(opts, tense, presentStems, pastStems), 'copy')
-- We concatenate the pronouns and the verbs if "concatPrs" is different of "false"
-- No pronouns for the imperative mood
if (tense ~= 'impPresent' and concatPrs ~= false) then
local pronoms = deepCopy(export.conjPronouns(infoTense.stem, infoTense.mode, opts.isTransitive))
conjTab[tense].conj = concatPronomsVerbs(pronoms, conjTab[tense].conj)
end
end
return conjTab
end
-- ====================================================================================
-- Allows you to obtain a given conjugation from a model.
-- Ex. {{#invoke:ku-tewandin|tew|dem=indPresent|kes=s1}}
-- See {{ku-tewîn-lk-niha}}
-- ====================================================================================
function export.tew(frame)
local args = frame:getParent().args
local baseOpts = {
isNegative = frame.args['neyînî'] or false,
isTransitive = args['form'],
isCompoundVerb = args['valahî'] or false,
preSimpleVerb = args['pêşgir'] or nil,
postSimpleVerb = args['paşgir'] or nil,
-- overridePreverb:
presentBi = frame['nihaBi'] or nil,
presentDi = frame['nihaDi'] or nil,
pastBi = frame['borîBi'] or nil,
pastDi = frame['borîDi'] or nil,
sameBi = frame['bi'] or nil,
sameDi = frame['di'] or nil,
-- overrideNegPrefix:
presentNa = frame['na'] or nil,
presentNe = frame['nihaNe'] or nil,
pastNe = frame['borîNe'] or nil,
sameNe = frame['ne'] or nil,
impMe = frame['me'] or nil,
impNegForm = 1,
tags = args['lînk'] or 'erê',
accent = args['devok'] or 'std',
}
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 '',
-- overridePreverb:
presentBi = frame['nihaBi'] or nil,
presentDi = frame['nihaDi'] or nil,
pastBi = frame['borîBi'] or nil,
pastDi = frame['borîDi'] or nil,
sameBi = frame['bi'] or nil,
sameDi = frame['di'] or nil,
-- overrideNegPrefix:
presentNa = frame['na'] or nil,
presentNe = frame['nihaNe'] or nil,
pastNe = frame['borîNe'] or nil,
sameNe = frame['ne'] or nil,
impMe = frame['me'] or nil,
impNegForm = 1,
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
oteh1pt6uk65qgemqzwqemok4eipte0
6237491
6237489
2026-06-12T01:45:18Z
Ghybu
1393
6237491
Scribunto
text/plain
-- Modula tewandina lêkerên kurmancî
local export = {}
-- Load irregular forms table
-- local irreg = require('Module:ku-tewandin/nestandard')
local langKu = require("Modul:languages").getByCode("ku")
local link = require('Module:links').language_link
local shallowCopy = require("Module:table/shallowCopy")
local deepCopy = require("Module:table/deepCopy")
local gsub = mw.ustring.gsub
local find = mw.ustring.find
-- =============================================================================
-- Pronouns in Kurmanji
-- =============================================================================
export.order = {"s1", "s2", "s3", "p1", "p2", "p3"}
export.pronouns = {
s1 = "ez", p1 = "em",
s2 = "tu", p2 = "hûn",
s3 = "ew", p3 = "ew"
}
export.obliquePronouns = {
s1 = "min", p1 = "me",
s2 = "te", p2 = "we",
s3 = "wê/wî", p3 = "wan"
}
export.agents = {
s1 = "te, wî, wê, we, wan", p1 = "te, wî, wê, we, wan",
s2 = "min, wî, wê, me, wan", p2 = "min, wî, wê, me, wan",
s3 = "min, te, wî, wê, me, we, wan", p3 = "min, te, wî, wê, me, we, wan"
}
-- Oblique pronoun (green)
export.obliquePronounsGreen = {
s1 = '<span style="color:green">min</span>',
s2 = '<span style="color:green">te</span>',
s3 = '<span style="color:green">wê/wî</span>',
p1 = '<span style="color:green">me</span>',
p2 = '<span style="color:green">we</span>',
p3 = '<span style="color:green">wan</span>'
}
-- ─────────────────────────────────────────────────────────────────────────────
-- 1) This function returns correct subject/agent pronoun, ergativity rule:
-- - Transitive verbs in past tenses → oblique pronoun (green) = agent
-- - All other cases → direct pronoun (no color) = subject
-- 2) Also add the subjunctive prefix "(bila)"
-- ─────────────────────────────────────────────────────────────────────────────
function export.conjPronouns(stemType, mode, isTransitive)
local pronouns = shallowCopy(export.pronouns)
-- Ergativity in kurdish: transitive verbs that are conjugated with the past tense stem are
-- conjugated according to the object, not the subject.
-- Therefore, to have an ergative construction,
-- the verb must be transitive and its stem must be the stem of the past tense.
local isErgative = isTransitive and (stemType == 'past')
-- If it's ergative, we use oblique pronouns: "min", "te", ...
-- If it's not ergative, we use normal pronouns: "ez", "tu", ...
if isErgative then
pronouns = shallowCopy(export.obliquePronounsGreen)
end
-- For the subjunctive mood, we add "(bila)" at the beginning.
if mode == 'subjunctive' then
local subjPrefix = '<span style="color:gray">(bila)</span>'
for _, pers in ipairs(export.order) do
pronouns[pers] = subjPrefix .. ' ' .. pronouns[pers]
end
end
return pronouns
end
-- =============================================================================
-- VERBAL STRUCTURE IN THE INFINITIVE:
-- Verbs in the infinitive appear in three main forms:
-- 1) Simple verb (indivisible light verb):
-- - ex.: "kirin", "çûn", "xwarin", ...
-- 2) Verbs with preverbs (preverb + simple verb):
-- - ex.: "rakirin" (ra- + kirin), "çêkirin" (çê- + kirin), "vexwarin" (ve- + xwarin), ...
-- - Preverb verbs don't use the prefix "bi-" (ez ê rakim , ew ê rake , ...)
-- 3) Compound verbs, construction with non-verbal element (the noun is not attached to the verb):
-- - Left of the simple verb: "hez kirin" ("hez" + "kirin"), "li dar xistin" ("li dar" + "xistin"), ...
-- - Right of the simple verb: "kirin der" ("kirin" + "der"), "girtin ser xwe" ("girtin" + "ser xwe"), ...
-- - Compound verbs use the prefix "bi-" (ez ê hez bi-kim , ew ê hez bi-ke )
-- STRUCTURE: preSimpleVerb + spacing + simpleVerb + postSimpleVerb
-- EX. kirin: preSimpleVerb=''; spacing=false; simpleVerb='kirin'; postSimpleVerb=''
-- rakirin: preSimpleVerb='ra'; spacing=false; simpleVerb='kirin'; postSimpleVerb=''
-- hez kirin: preSimpleVerb='hez'; spacing=true; simpleVerb='kirin'; postSimpleVerb=''
-- pev çûn: preSimpleVerb='pev'; spacing=true; simpleVerb='çûn'; postSimpleVerb=''
-- kirin der: preSimpleVerb=''; spacing=false; simpleVerb='kirin'; postSimpleVerb='der'
-- WARNING: Conjugation can vary depending on the type of verb.
-- For example, in the future tense,the prefix "bi" is used for compound verbs,
-- but not for preverbal verbs, see the function that manages it "tenseRules" table.
-- This table does not yet support the mixed case: a verb composed of a noun and a preverb verb.
-- =============================================================================
function export.verbStruct(isCompoundVerb, preSimpleVerb)
local struct
if (preSimpleVerb and preSimpleVerb ~= '' and not isCompoundVerb) then
struct = 'preverbVerb'
elseif isCompoundVerb then
struct = 'compoundVerb'
else
struct = 'simpleVerb'
end
return struct
end
-- ================================================================
-- INFLECTIONAL ENDINGS
-- Assigns verb inflectional endings (suffixes) to all tenses
-- ================================================================
local getEndings = {}
do
-- ───────────────────────────────────────────────────────────────
-- Ending using present stem
-- ───────────────────────────────────────────────────────────────
getEndings['present'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends = {}
if mw.ustring.match(stem, '[aeêiîouû]$') then
ends['std'] = {s1='m', s2='yî', s3='', p1='n', p2='n', p3='n'}
ends['rojhilatî'] = {s1='m', s2='(y)', s3='t', p1='yn', p2='n', p3='n'}
else
ends['std'] = {s1='im', s2='î', s3='e', p1='in', p2='in', p3='in'}
ends['rojhilatî'] = {s1='im', s2='î', s3='<u>it</u>/ît', p1='în', p2='in', p3='in'}
end
return ends
end
-- ───────────────────────────────────────────────────────────────
-- Ind. preterite + ind. imperfect ending
-- ───────────────────────────────────────────────────────────────
getEndings['past'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends
if mw.ustring.match(stem, '[aeêiouû]$') then
ends = {s1='m', s2='yî', s3='', p1='n', p2='n', p3='n'}
elseif mw.ustring.match(stem, 'î$') then
-- if self.name == 'indImperfect' then
-- -- special indicative ind. imperfect rule
-- ends = {s1='yam', s2='yayî', s3='ya', p1='yan', p2='yan', p3='yan'}
-- end
ends = {s1='m', s2='', s3='', p1='n', p2='n', p3='n'}
else
ends = {s1='im', s2='î', s3='', p1='in', p2='in', p3='in'}
end
return ends
end
-- ───────────────────────────────────────────────────────────────
-- Compound endings with auxiliary "bûn"
-- Inflectional endings are created by taking the different forms of the
-- verb "bûn" (with present stem "-b-" and past stem "-bû-") and
-- adding an "i-" prefix before them: "i-b-im", "i-bû-m", "i-bû-me", "i-bû-ma".
-- This "i-" varies according to the final letter of the verb stem.
-- ───────────────────────────────────────────────────────────────
local function normalize_i(stem)
local prfx_i = "i"
if mw.ustring.match(stem, "ya$") or
mw.ustring.match(stem, "[îû]$") then -- cf. karîn (-karî-)
prfx_i = ""
elseif mw.ustring.match(stem, '[aeêiou]$') then
prfx_i = "yi"
end
return prfx_i
end
getEndings['ibim'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bim", p1 = prfx_i .. "bin",
s2 = prfx_i .. "bî", p2 = prfx_i .. "bin",
s3 = prfx_i .. "be", p3 = prfx_i .. "bin"
}
end
getEndings['ibûm'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bûm", p1 = prfx_i .. "bûn",
s2 = prfx_i .. "bûyî", p2 = prfx_i .. "bûn",
s3 = prfx_i .. "bû", p3 = prfx_i .. "bûn"
}
end
getEndings['ibûme'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bûme", p1 = prfx_i .. "bûne",
s2 = prfx_i .. "bûyiye", p2 = prfx_i .. "bûne",
s3 = prfx_i .. "bûye", p3 = prfx_i .. "bûne"
}
end
getEndings['ibûma'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bûma", p1 = prfx_i .. "bûna",
s2 = prfx_i .. "bûyayî", p2 = prfx_i .. "bûna",
s3 = prfx_i .. "bûya", p3 = prfx_i .. "bûna"
}
end
-- ───────────────────────────────────────────────────────────────
-- Ind. perfect ending.
-- ───────────────────────────────────────────────────────────────
getEndings['ime'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends
if mw.ustring.match(stem, '[aeêiîouû]$') then
ends = {s1="me", s2="yî", s3="ye", p1="ne", p2="ne", p3="ne"}
else
ends = {s1="ime", s2="iyî", s3="iye", p1="ine", p2="ine", p3="ine"}
end
return ends
end
-- ───────────────────────────────────────────────────────────────
-- Subj. Imperfect ending.
-- ───────────────────────────────────────────────────────────────
getEndings['ama'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends
-- The doublet in "-iyan" of verbs in -"în" (gerîn/-geriya-, kenîn/-keniya-, ...),
-- in the conditional and subjunctive moods, a doublet "yaya" appears; it's removed.
-- -yayayî → -yayî; -yaya → -ya
if mw.ustring.match(stem, '(ya)$') then
ends = {s1="ma", s2="yî", s3="", p1="na", p2="na", p3="na"}
elseif mw.ustring.match(stem, '[aeêiîouû]$') then
ends = {s1="ma", s2="yayî", s3="ya", p1="na", p2="na", p3="na"}
else
ends = {s1="ama", s2="ayî", s3="a", p1="ana", p2="ana", p3="ana"}
end
return ends
end
end
-- =============================================================================
-- RULES FOR PREVERBS: "bi-" and "di-"
-- There are two preverbs: "bi-" and "di-". These preverbs can change form
-- depending on the first letters of the verb’s present stem or past stem.
-- =============================================================================
local getPreverb = {}
do
getPreverb['bi'] = function (self, opts)
opts = opts or {}
local stem = opts.stem
local verbStruct = opts.verbStruct
local overridePreverb = opts.overridePreverb
local accent = opts.accent
-- Devoka rojhilatî:
-- @Ferhengvan: Dema bêt bi lêkera alîkar "ê / dê" û bi rehê lêkerê yê
-- dema niha û pêşgirên kesî tê çêkirin. Pêşgira "bi-" li destpêka lêkera
-- serekî nîne: - ez ê / dê xw-im (standard: ez ê/dê bi-xw-im).
if (self.name == 'indFuture' and accent == 'rojhilatî') then
return ''
end
-- Preverb verbs don't use the preverb "bi-": ra-kirin (ez ê rakim), ve-xwarin (ez ê vexwim) , ...
-- But compound verb and simple verbs use it: hez kirin (ez ê hez bi-kim), lê bigirin (ez ê lê bi-girim), ...
if (verbStruct == 'preverbVerb') then
return ''
end
-- If the preverb "bi-" is provided.
if (self.stem == 'present' and overridePreverb.presentBi) then
return overridePreverb.presentBi
elseif (self.stem == 'past' and overridePreverb.pastBi) then
return overridePreverb.pastBi
elseif overridePreverb.sameBi then
return overridePreverb.sameBi
end
-- Modification of the preverbe "bi-" according to the last letter of the stem.
if mw.ustring.match(stem, '^[aeêiîouû]') then
return 'b'
end
return 'bi'
end
getPreverb['di'] = function (self, opts)
opts = opts or {}
local stem = opts.stem
local overridePreverb = opts.overridePreverb
-- If the preverb "di" is provided.
if (self.stem == 'present' and overridePreverb.presentDi) then
return overridePreverb.presentDi
elseif (self.stem == 'past' and overridePreverb.pastDi) then
return overridePreverb.pastDi
elseif overridePreverb.sameDi then
return overridePreverb.sameDi
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 (self, opts)
-- self: reserved for future use
local _ = self -- delete the warning (unused argument)
opts = opts or {}
local stem = opts.stem
local overrideNa = opts.overrideNegPrefix.presentNa
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 (self, opts)
opts = opts or {}
local stem = opts.stem
local tenseName = self.name
local impNegForm = opts.impNegForm -- form "1" or "2" of imp.
local overrideNegPrefix = opts.overrideNegPrefix
local negPrefix = 'ne'
-- Override
if (overrideNegPrefix.impMe or overrideNegPrefix.presentNe
or overrideNegPrefix.sameNe) then
-- Ovverride imp.
if (tenseName == 'impPresent') then
if (impNegForm == 1 and overrideNegPrefix.impMe) then
return '<b>' .. overrideNegPrefix.impMe .. '</b>'
elseif (impNegForm == 1 and overrideNegPrefix.presentNe and
find(overrideNegPrefix.presentNe, '^n')) then
--For the "me-" form, we replace the "n" with an "m".
return '<b>' .. gsub(overrideNegPrefix.presentNe, '^(.)', 'm') .. '</b>'
elseif (impNegForm == 1 and overrideNegPrefix.sameNe and
find(overrideNegPrefix.sameNe, '^n')) then
--For the "me-" form, we replace the "n" with an "m".
return '<b>' .. gsub(overrideNegPrefix.sameNe, '^(.)', 'm') .. '</b>'
elseif (impNegForm == 2 and overrideNegPrefix.presentNe) then
return '<b>' .. overrideNegPrefix.presentNe .. '</b>'
elseif (impNegForm == 2 and overrideNegPrefix.sameNe) then
return '<b>' .. overrideNegPrefix.sameNe .. '</b>'
end
else
-- For other tenses besides the imperative
if (self.stem == 'present' and overrideNegPrefix.presentNe) then
return '<b>' .. overrideNegPrefix.presentNe .. '</b>'
elseif (self.stem == 'past' and overrideNegPrefix.pastNe) then
return '<b>' .. overrideNegPrefix.pastNe .. '</b>'
elseif overrideNegPrefix.sameNe then
return '<b>' .. overrideNegPrefix.sameNe .. '</b>'
end
end
end
-- Bo neyînî: pêşgira "di-" tenê di nav dema "indImperfect" de tê bikaranîn.
-- ji ber vê yekê 'negPrefix' hertim (?) 'ne' ye ji ber ku dikeve pêş
-- pêşgira "di-": wê/wî ne-di-elimand (elimandin)
if (tenseName == 'indImperfect') then
return '<b>' .. negPrefix .. '</b>'
end
-- There are two forms of construction of the imperative,
-- one with the prefix "me-" (1) and the other (2) 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 overridePreverb = {
-- Preverbs (bi-, di)
presentBi = opts.presentBi or nil,
presentDi = opts.presentDi or nil,
pastBi = opts.pastBi or nil,
pastDi = opts.pastDi or nil,
-- Same preverbs ("past" and "present" stem)
sameBi = opts.sameBi or nil,
sameDi = opts.sameDi or nil,
}
local overrideNegPrefix = {
-- Neg. prefix (na-, ne-)
presentNa = opts.presentNa or nil,
presentNe = opts.presentNe or nil,
pastNe = opts.pastNe or nil,
-- same neg. prefix (for past and present stem)
sameNe = opts.sameNe or nil,
impMe = opts.impMe 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 1
-- Accent/ Devok
local accent = opts.accent or 'std'
-- If "tags='na'", remove links/tags
local tags = opts.tags or 'erê'
-- If addPreverbParticles='na', remove preverb particles (ê/dê) before
-- the conjugated verbs.
local addPreverbParticles = opts.addPreverbParticles or 'erê'
-- We add a space to the left of the "postSimpleVerb" because it shouldn't be attached
-- to the simple verb.
if (postSimpleVerb ~= '' and postSimpleVerb ~=nil) then
postSimpleVerb = ' ' .. postSimpleVerb
end
-- Access to the classification table and retrieval of verb tense parameters
local infoTense = deepCopy(export.tenseRules[tense], 'copy') or false
-- We check that this tense is indeed in table "tenseRules".
if (not infoTense) then
return '<span style="color:red">Unknown tense: ' .. tense ..'</span>'
end
-- We check that one of the two parameters of the stem is given
if (infoTense.stem == 'present' and not presentStem) then
return '<span style="color:red">presentStem parameter required</span>'
elseif (infoTense.stem == 'past' and not pastStem) then
return '<span style="color:red">pasttStem parameter required</span>'
end
-- Choice between the present stem or past stem
local stem = (infoTense.stem == 'present') and presentStem or pastStem
--────────────────────────────
-- Conjugation construction --
-- ───────────────────────────
local preverb = ''
local negPrefix = ''
-- Ruturns the verb type: "simpleVerb" or "preverbVerb" or "compoundVerb"
local verbStruct = export.verbStruct(isCompoundVerb, preSimpleVerb)
if isNegative then
negPrefix = infoTense:negPrefix{stem=stem,
impNegForm=impNegForm,
overrideNegPrefix=overrideNegPrefix}
if infoTense.negPreverb then
preverb = infoTense:negPreverb{stem=stem, verbStruct=verbStruct,
overridePreverb=overridePreverb}
end
else
if infoTense.preverb then
preverb = infoTense:preverb{stem=stem, verbStruct=verbStruct,
overridePreverb=overridePreverb,
accent=accent}
end
end
infoTense.conj = {}
local spacing = isCompoundVerb and ' ' or ''
local endings = infoTense:endings(stem)
-- 'rojhilatî' accent (devok) for present stem
if (infoTense.stem == 'present') then
if (accent == 'rojhilatî') then
endings = endings['rojhilatî']
else
endings = endings['std']
end
end
local preverbParticles = export.getPreverbParticules(infoTense.preverbParticle, infoTense.stem, isTransitive)
local isErgative = isTransitive and (infoTense.stem == 'past')
-- Creating the conjugation table for a given tense
for _, pers in ipairs(export.order) do
local ending
local conjSimbleVerb
local conjVerb
if isErgative then
ending = endings.s3
else
ending = endings[pers]
end
-- Adding space after the preverbal particle, and
-- if "addPreverbParticles='na'": remove preverb particles (ê/dê).
local preverbParticle = ''
if infoTense.preverbParticle and addPreverbParticles ~= 'na' then
preverbParticle = preverbParticles[pers] .. ' '
end
conjSimbleVerb = negPrefix .. preverb .. stem .. ending
-- Adding prefixe and suffixe
conjVerb = preSimpleVerb .. spacing .. conjSimbleVerb .. postSimpleVerb
-- Spelling correction(îy -> iy)
conjVerb = 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,
-- overridePreverb:
presentBi = frame['nihaBi'] or nil,
presentDi = frame['nihaDi'] or nil,
pastBi = frame['borîBi'] or nil,
pastDi = frame['borîDi'] or nil,
sameBi = frame['bi'] or nil,
sameDi = frame['di'] or nil,
-- overrideNegPrefix:
presentNa = frame['na'] or nil,
presentNe = frame['nihaNe'] or nil,
pastNe = frame['borîNe'] or nil,
sameNe = frame['ne'] or nil,
impMe = frame['me'] or nil,
impNegForm = 1,
tags = args['lînk'] or 'erê',
accent = args['devok'] or 'std',
}
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 '',
-- overridePreverb:
presentBi = frame['nihaBi'] or nil,
presentDi = frame['nihaDi'] or nil,
pastBi = frame['borîBi'] or nil,
pastDi = frame['borîDi'] or nil,
sameBi = frame['bi'] or nil,
sameDi = frame['di'] or nil,
-- overrideNegPrefix:
presentNa = frame['na'] or nil,
presentNe = frame['nihaNe'] or nil,
pastNe = frame['borîNe'] or nil,
sameNe = frame['ne'] or nil,
impMe = frame['me'] or nil,
impNegForm = 1,
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
0bg3vj2ho2bx121f28j1kmorzm9jzyg
6237497
6237491
2026-06-12T02:11:47Z
Ghybu
1393
6237497
Scribunto
text/plain
-- Modula tewandina lêkerên kurmancî
local export = {}
-- Load irregular forms table
-- local irreg = require('Module:ku-tewandin/nestandard')
local langKu = require("Modul:languages").getByCode("ku")
local link = require('Module:links').language_link
local shallowCopy = require("Module:table/shallowCopy")
local deepCopy = require("Module:table/deepCopy")
local gsub = mw.ustring.gsub
local find = mw.ustring.find
-- =============================================================================
-- Pronouns in Kurmanji
-- =============================================================================
export.order = {"s1", "s2", "s3", "p1", "p2", "p3"}
export.pronouns = {
s1 = "ez", p1 = "em",
s2 = "tu", p2 = "hûn",
s3 = "ew", p3 = "ew"
}
export.obliquePronouns = {
s1 = "min", p1 = "me",
s2 = "te", p2 = "we",
s3 = "wê/wî", p3 = "wan"
}
export.agents = {
s1 = "te, wî, wê, we, wan", p1 = "te, wî, wê, we, wan",
s2 = "min, wî, wê, me, wan", p2 = "min, wî, wê, me, wan",
s3 = "min, te, wî, wê, me, we, wan", p3 = "min, te, wî, wê, me, we, wan"
}
-- Oblique pronoun (green)
export.obliquePronounsGreen = {
s1 = '<span style="color:green">min</span>',
s2 = '<span style="color:green">te</span>',
s3 = '<span style="color:green">wê/wî</span>',
p1 = '<span style="color:green">me</span>',
p2 = '<span style="color:green">we</span>',
p3 = '<span style="color:green">wan</span>'
}
-- ─────────────────────────────────────────────────────────────────────────────
-- 1) This function returns correct subject/agent pronoun, ergativity rule:
-- - Transitive verbs in past tenses → oblique pronoun (green) = agent
-- - All other cases → direct pronoun (no color) = subject
-- 2) Also add the subjunctive prefix "(bila)"
-- ─────────────────────────────────────────────────────────────────────────────
function export.conjPronouns(stemType, mode, isTransitive)
local pronouns = shallowCopy(export.pronouns)
-- Ergativity in kurdish: transitive verbs that are conjugated with the past tense stem are
-- conjugated according to the object, not the subject.
-- Therefore, to have an ergative construction,
-- the verb must be transitive and its stem must be the stem of the past tense.
local isErgative = isTransitive and (stemType == 'past')
-- If it's ergative, we use oblique pronouns: "min", "te", ...
-- If it's not ergative, we use normal pronouns: "ez", "tu", ...
if isErgative then
pronouns = shallowCopy(export.obliquePronounsGreen)
end
-- For the subjunctive mood, we add "(bila)" at the beginning.
if mode == 'subjunctive' then
local subjPrefix = '<span style="color:gray">(bila)</span>'
for _, pers in ipairs(export.order) do
pronouns[pers] = subjPrefix .. ' ' .. pronouns[pers]
end
end
return pronouns
end
-- =============================================================================
-- VERBAL STRUCTURE IN THE INFINITIVE:
-- Verbs in the infinitive appear in three main forms:
-- 1) Simple verb (indivisible light verb):
-- - ex.: "kirin", "çûn", "xwarin", ...
-- 2) Verbs with preverbs (preverb + simple verb):
-- - ex.: "rakirin" (ra- + kirin), "çêkirin" (çê- + kirin), "vexwarin" (ve- + xwarin), ...
-- - Preverb verbs don't use the prefix "bi-" (ez ê rakim , ew ê rake , ...)
-- 3) Compound verbs, construction with non-verbal element (the noun is not attached to the verb):
-- - Left of the simple verb: "hez kirin" ("hez" + "kirin"), "li dar xistin" ("li dar" + "xistin"), ...
-- - Right of the simple verb: "kirin der" ("kirin" + "der"), "girtin ser xwe" ("girtin" + "ser xwe"), ...
-- - Compound verbs use the prefix "bi-" (ez ê hez bi-kim , ew ê hez bi-ke )
-- STRUCTURE: preSimpleVerb + spacing + simpleVerb + postSimpleVerb
-- EX. kirin: preSimpleVerb=''; spacing=false; simpleVerb='kirin'; postSimpleVerb=''
-- rakirin: preSimpleVerb='ra'; spacing=false; simpleVerb='kirin'; postSimpleVerb=''
-- hez kirin: preSimpleVerb='hez'; spacing=true; simpleVerb='kirin'; postSimpleVerb=''
-- pev çûn: preSimpleVerb='pev'; spacing=true; simpleVerb='çûn'; postSimpleVerb=''
-- kirin der: preSimpleVerb=''; spacing=false; simpleVerb='kirin'; postSimpleVerb='der'
-- WARNING: Conjugation can vary depending on the type of verb.
-- For example, in the future tense,the prefix "bi" is used for compound verbs,
-- but not for preverbal verbs, see the function that manages it "tenseRules" table.
-- This table does not yet support the mixed case: a verb composed of a noun and a preverb verb.
-- =============================================================================
function export.verbStruct(isCompoundVerb, preSimpleVerb)
local struct
if (preSimpleVerb and preSimpleVerb ~= '' and not isCompoundVerb) then
struct = 'preverbVerb'
elseif isCompoundVerb then
struct = 'compoundVerb'
else
struct = 'simpleVerb'
end
return struct
end
-- ================================================================
-- INFLECTIONAL ENDINGS
-- Assigns verb inflectional endings (suffixes) to all tenses
-- ================================================================
local getEndings = {}
do
-- ───────────────────────────────────────────────────────────────
-- Ending using present stem
-- ───────────────────────────────────────────────────────────────
getEndings['present'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends = {}
if mw.ustring.match(stem, '[aeêiîouû]$') then
ends['std'] = {s1='m', s2='yî', s3='', p1='n', p2='n', p3='n'}
ends['rojhilatî'] = {s1='m', s2='(y)', s3='t', p1='yn', p2='n', p3='n'}
else
ends['std'] = {s1='im', s2='î', s3='e', p1='in', p2='in', p3='in'}
ends['rojhilatî'] = {s1='im', s2='î', s3='<u>it</u>/ît', p1='în', p2='in', p3='in'}
end
return ends
end
-- ───────────────────────────────────────────────────────────────
-- Ind. preterite + ind. imperfect ending
-- ───────────────────────────────────────────────────────────────
getEndings['past'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends
if mw.ustring.match(stem, '[aeêiouû]$') then
ends = {s1='m', s2='yî', s3='', p1='n', p2='n', p3='n'}
elseif mw.ustring.match(stem, 'î$') then
-- if self.name == 'indImperfect' then
-- -- special indicative ind. imperfect rule
-- ends = {s1='yam', s2='yayî', s3='ya', p1='yan', p2='yan', p3='yan'}
-- end
ends = {s1='m', s2='', s3='', p1='n', p2='n', p3='n'}
else
ends = {s1='im', s2='î', s3='', p1='in', p2='in', p3='in'}
end
return ends
end
-- ───────────────────────────────────────────────────────────────
-- Compound endings with auxiliary "bûn"
-- Inflectional endings are created by taking the different forms of the
-- verb "bûn" (with present stem "-b-" and past stem "-bû-") and
-- adding an "i-" prefix before them: "i-b-im", "i-bû-m", "i-bû-me", "i-bû-ma".
-- This "i-" varies according to the final letter of the verb stem.
-- ───────────────────────────────────────────────────────────────
local function normalize_i(stem)
local prfx_i = "i"
if mw.ustring.match(stem, "ya$") or
mw.ustring.match(stem, "[îû]$") then -- cf. karîn (-karî-)
prfx_i = ""
elseif mw.ustring.match(stem, '[aeêiou]$') then
prfx_i = "yi"
end
return prfx_i
end
getEndings['ibim'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bim", p1 = prfx_i .. "bin",
s2 = prfx_i .. "bî", p2 = prfx_i .. "bin",
s3 = prfx_i .. "be", p3 = prfx_i .. "bin"
}
end
getEndings['ibûm'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bûm", p1 = prfx_i .. "bûn",
s2 = prfx_i .. "bûyî", p2 = prfx_i .. "bûn",
s3 = prfx_i .. "bû", p3 = prfx_i .. "bûn"
}
end
getEndings['ibûme'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bûme", p1 = prfx_i .. "bûne",
s2 = prfx_i .. "bûyiye", p2 = prfx_i .. "bûne",
s3 = prfx_i .. "bûye", p3 = prfx_i .. "bûne"
}
end
getEndings['ibûma'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bûma", p1 = prfx_i .. "bûna",
s2 = prfx_i .. "bûyayî", p2 = prfx_i .. "bûna",
s3 = prfx_i .. "bûya", p3 = prfx_i .. "bûna"
}
end
-- ───────────────────────────────────────────────────────────────
-- Ind. perfect ending.
-- ───────────────────────────────────────────────────────────────
getEndings['ime'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends
if mw.ustring.match(stem, '[aeêiîouû]$') then
ends = {s1="me", s2="yî", s3="ye", p1="ne", p2="ne", p3="ne"}
else
ends = {s1="ime", s2="iyî", s3="iye", p1="ine", p2="ine", p3="ine"}
end
return ends
end
-- ───────────────────────────────────────────────────────────────
-- Subj. Imperfect ending.
-- ───────────────────────────────────────────────────────────────
getEndings['ama'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends
-- The doublet in "-iyan" of verbs in -"în" (gerîn/-geriya-, kenîn/-keniya-, ...),
-- in the conditional and subjunctive moods, a doublet "yaya" appears; it's removed.
-- -yayayî → -yayî; -yaya → -ya
if mw.ustring.match(stem, '(ya)$') then
ends = {s1="ma", s2="yî", s3="", p1="na", p2="na", p3="na"}
elseif mw.ustring.match(stem, '[aeêiîouû]$') then
ends = {s1="ma", s2="yayî", s3="ya", p1="na", p2="na", p3="na"}
else
ends = {s1="ama", s2="ayî", s3="a", p1="ana", p2="ana", p3="ana"}
end
return ends
end
end
-- =============================================================================
-- RULES FOR PREVERBS: "bi-" and "di-"
-- There are two preverbs: "bi-" and "di-". These preverbs can change form
-- depending on the first letters of the verb’s present stem or past stem.
-- =============================================================================
local getPreverb = {}
do
getPreverb['bi'] = function (self, opts)
opts = opts or {}
local stem = opts.stem
local verbStruct = opts.verbStruct
local overridePreverb = opts.overridePreverb
local accent = opts.accent
-- Devoka rojhilatî:
-- @Ferhengvan: Dema bêt bi lêkera alîkar "ê / dê" û bi rehê lêkerê yê
-- dema niha û pêşgirên kesî tê çêkirin. Pêşgira "bi-" li destpêka lêkera
-- serekî nîne: - ez ê / dê xw-im (standard: ez ê/dê bi-xw-im).
if (self.name == 'indFuture' and accent == 'rojhilatî') then
return ''
end
-- Preverb verbs don't use the preverb "bi-": ra-kirin (ez ê rakim), ve-xwarin (ez ê vexwim) , ...
-- But compound verb and simple verbs use it: hez kirin (ez ê hez bi-kim), lê bigirin (ez ê lê bi-girim), ...
if (verbStruct == 'preverbVerb') then
return ''
end
-- If the preverb "bi-" is provided.
if (self.stem == 'present' and overridePreverb.presentBi) then
return overridePreverb.presentBi
elseif (self.stem == 'past' and overridePreverb.pastBi) then
return overridePreverb.pastBi
elseif overridePreverb.sameBi then
return overridePreverb.sameBi
end
-- Modification of the preverbe "bi-" according to the last letter of the stem.
if mw.ustring.match(stem, '^[aeêiîouû]') then
return 'b'
end
return 'bi'
end
getPreverb['di'] = function (self, opts)
opts = opts or {}
local stem = opts.stem
local overridePreverb = opts.overridePreverb
-- If the preverb "di" is provided.
if (self.stem == 'present' and overridePreverb.presentDi) then
return overridePreverb.presentDi
elseif (self.stem == 'past' and overridePreverb.pastDi) then
return overridePreverb.pastDi
elseif overridePreverb.sameDi then
return overridePreverb.sameDi
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 (self, opts)
-- self: reserved for future use
local _ = self -- delete the warning (unused argument)
opts = opts or {}
local stem = opts.stem
local overrideNa = opts.overrideNegPrefix.presentNa
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 (self, opts)
opts = opts or {}
local stem = opts.stem
local tenseName = self.name
local impNegForm = opts.impNegForm -- form "1" or "2" of imp.
local overrideNegPrefix = opts.overrideNegPrefix
local negPrefix = 'ne'
-- Bo neyînî: pêşgira "di-" tenê di nav dema "indImperfect" de tê bikaranîn.
-- ji ber vê yekê 'negPrefix' hertim (?) 'ne' ye ji ber ku dikeve pêş
-- pêşgira "di-": wê/wî ne-di-elimand (elimandin)
if (tenseName == 'indImperfect') then
return '<b>' .. negPrefix .. '</b>'
end
-- Override
if (overrideNegPrefix.impMe or overrideNegPrefix.presentNe
or overrideNegPrefix.sameNe) then
-- Ovverride imp.
if (tenseName == 'impPresent') then
if (impNegForm == 1 and overrideNegPrefix.impMe) then
return '<b>' .. overrideNegPrefix.impMe .. '</b>'
elseif (impNegForm == 1 and overrideNegPrefix.presentNe and
find(overrideNegPrefix.presentNe, '^n')) then
--For the "me-" form, we replace the "n" with an "m".
return '<b>' .. gsub(overrideNegPrefix.presentNe, '^(.)', 'm') .. '</b>'
elseif (impNegForm == 1 and overrideNegPrefix.sameNe and
find(overrideNegPrefix.sameNe, '^n')) then
--For the "me-" form, we replace the "n" with an "m".
return '<b>' .. gsub(overrideNegPrefix.sameNe, '^(.)', 'm') .. '</b>'
elseif (impNegForm == 2 and overrideNegPrefix.presentNe) then
return '<b>' .. overrideNegPrefix.presentNe .. '</b>'
elseif (impNegForm == 2 and overrideNegPrefix.sameNe) then
return '<b>' .. overrideNegPrefix.sameNe .. '</b>'
end
else
-- For other tenses besides the imperative
if (self.stem == 'present' and overrideNegPrefix.presentNe) then
return '<b>' .. overrideNegPrefix.presentNe .. '</b>'
elseif (self.stem == 'past' and overrideNegPrefix.pastNe) then
return '<b>' .. overrideNegPrefix.pastNe .. '</b>'
elseif overrideNegPrefix.sameNe then
return '<b>' .. overrideNegPrefix.sameNe .. '</b>'
end
end
end
-- There are two forms of construction of the imperative,
-- one with the prefix "me-" (1) and the other (2) 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 overridePreverb = {
-- Preverbs (bi-, di)
presentBi = opts.presentBi or nil,
presentDi = opts.presentDi or nil,
pastBi = opts.pastBi or nil,
pastDi = opts.pastDi or nil,
-- Same preverbs ("past" and "present" stem)
sameBi = opts.sameBi or nil,
sameDi = opts.sameDi or nil,
}
local overrideNegPrefix = {
-- Neg. prefix (na-, ne-)
presentNa = opts.presentNa or nil,
presentNe = opts.presentNe or nil,
pastNe = opts.pastNe or nil,
-- same neg. prefix (for past and present stem)
sameNe = opts.sameNe or nil,
impMe = opts.impMe 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 1
-- Accent/ Devok
local accent = opts.accent or 'std'
-- If "tags='na'", remove links/tags
local tags = opts.tags or 'erê'
-- If addPreverbParticles='na', remove preverb particles (ê/dê) before
-- the conjugated verbs.
local addPreverbParticles = opts.addPreverbParticles or 'erê'
-- We add a space to the left of the "postSimpleVerb" because it shouldn't be attached
-- to the simple verb.
if (postSimpleVerb ~= '' and postSimpleVerb ~=nil) then
postSimpleVerb = ' ' .. postSimpleVerb
end
-- Access to the classification table and retrieval of verb tense parameters
local infoTense = deepCopy(export.tenseRules[tense], 'copy') or false
-- We check that this tense is indeed in table "tenseRules".
if (not infoTense) then
return '<span style="color:red">Unknown tense: ' .. tense ..'</span>'
end
-- We check that one of the two parameters of the stem is given
if (infoTense.stem == 'present' and not presentStem) then
return '<span style="color:red">presentStem parameter required</span>'
elseif (infoTense.stem == 'past' and not pastStem) then
return '<span style="color:red">pasttStem parameter required</span>'
end
-- Choice between the present stem or past stem
local stem = (infoTense.stem == 'present') and presentStem or pastStem
--────────────────────────────
-- Conjugation construction --
-- ───────────────────────────
local preverb = ''
local negPrefix = ''
-- Ruturns the verb type: "simpleVerb" or "preverbVerb" or "compoundVerb"
local verbStruct = export.verbStruct(isCompoundVerb, preSimpleVerb)
if isNegative then
negPrefix = infoTense:negPrefix{stem=stem,
impNegForm=impNegForm,
overrideNegPrefix=overrideNegPrefix}
if infoTense.negPreverb then
preverb = infoTense:negPreverb{stem=stem, verbStruct=verbStruct,
overridePreverb=overridePreverb}
end
else
if infoTense.preverb then
preverb = infoTense:preverb{stem=stem, verbStruct=verbStruct,
overridePreverb=overridePreverb,
accent=accent}
end
end
infoTense.conj = {}
local spacing = isCompoundVerb and ' ' or ''
local endings = infoTense:endings(stem)
-- 'rojhilatî' accent (devok) for present stem
if (infoTense.stem == 'present') then
if (accent == 'rojhilatî') then
endings = endings['rojhilatî']
else
endings = endings['std']
end
end
local preverbParticles = export.getPreverbParticules(infoTense.preverbParticle, infoTense.stem, isTransitive)
local isErgative = isTransitive and (infoTense.stem == 'past')
-- Creating the conjugation table for a given tense
for _, pers in ipairs(export.order) do
local ending
local conjSimbleVerb
local conjVerb
if isErgative then
ending = endings.s3
else
ending = endings[pers]
end
-- Adding space after the preverbal particle, and
-- if "addPreverbParticles='na'": remove preverb particles (ê/dê).
local preverbParticle = ''
if infoTense.preverbParticle and addPreverbParticles ~= 'na' then
preverbParticle = preverbParticles[pers] .. ' '
end
conjSimbleVerb = negPrefix .. preverb .. stem .. ending
-- Adding prefixe and suffixe
conjVerb = preSimpleVerb .. spacing .. conjSimbleVerb .. postSimpleVerb
-- Spelling correction(îy -> iy)
conjVerb = 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,
-- overridePreverb:
presentBi = frame['nihaBi'] or nil,
presentDi = frame['nihaDi'] or nil,
pastBi = frame['borîBi'] or nil,
pastDi = frame['borîDi'] or nil,
sameBi = frame['bi'] or nil,
sameDi = frame['di'] or nil,
-- overrideNegPrefix:
presentNa = frame['na'] or nil,
presentNe = frame['nihaNe'] or nil,
pastNe = frame['borîNe'] or nil,
sameNe = frame['ne'] or nil,
impMe = frame['me'] or nil,
impNegForm = 1,
tags = args['lînk'] or 'erê',
accent = args['devok'] or 'std',
}
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 '',
-- overridePreverb:
presentBi = frame['nihaBi'] or nil,
presentDi = frame['nihaDi'] or nil,
pastBi = frame['borîBi'] or nil,
pastDi = frame['borîDi'] or nil,
sameBi = frame['bi'] or nil,
sameDi = frame['di'] or nil,
-- overrideNegPrefix:
presentNa = frame['na'] or nil,
presentNe = frame['nihaNe'] or nil,
pastNe = frame['borîNe'] or nil,
sameNe = frame['ne'] or nil,
impMe = frame['me'] or nil,
impNegForm = 1,
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
23b90v8qeyj2lrdamwz6c6c7dv607i2
6237498
6237497
2026-06-12T02:35:40Z
Ghybu
1393
6237498
Scribunto
text/plain
-- Modula tewandina lêkerên kurmancî
local export = {}
-- Load irregular forms table
-- local irreg = require('Module:ku-tewandin/nestandard')
local langKu = require("Modul:languages").getByCode("ku")
local link = require('Module:links').language_link
local shallowCopy = require("Module:table/shallowCopy")
local deepCopy = require("Module:table/deepCopy")
local gsub = mw.ustring.gsub
local find = mw.ustring.find
-- =============================================================================
-- Pronouns in Kurmanji
-- =============================================================================
export.order = {"s1", "s2", "s3", "p1", "p2", "p3"}
export.pronouns = {
s1 = "ez", p1 = "em",
s2 = "tu", p2 = "hûn",
s3 = "ew", p3 = "ew"
}
export.obliquePronouns = {
s1 = "min", p1 = "me",
s2 = "te", p2 = "we",
s3 = "wê/wî", p3 = "wan"
}
export.agents = {
s1 = "te, wî, wê, we, wan", p1 = "te, wî, wê, we, wan",
s2 = "min, wî, wê, me, wan", p2 = "min, wî, wê, me, wan",
s3 = "min, te, wî, wê, me, we, wan", p3 = "min, te, wî, wê, me, we, wan"
}
-- Oblique pronoun (green)
export.obliquePronounsGreen = {
s1 = '<span style="color:green">min</span>',
s2 = '<span style="color:green">te</span>',
s3 = '<span style="color:green">wê/wî</span>',
p1 = '<span style="color:green">me</span>',
p2 = '<span style="color:green">we</span>',
p3 = '<span style="color:green">wan</span>'
}
-- ─────────────────────────────────────────────────────────────────────────────
-- 1) This function returns correct subject/agent pronoun, ergativity rule:
-- - Transitive verbs in past tenses → oblique pronoun (green) = agent
-- - All other cases → direct pronoun (no color) = subject
-- 2) Also add the subjunctive prefix "(bila)"
-- ─────────────────────────────────────────────────────────────────────────────
function export.conjPronouns(stemType, mode, isTransitive)
local pronouns = shallowCopy(export.pronouns)
-- Ergativity in kurdish: transitive verbs that are conjugated with the past tense stem are
-- conjugated according to the object, not the subject.
-- Therefore, to have an ergative construction,
-- the verb must be transitive and its stem must be the stem of the past tense.
local isErgative = isTransitive and (stemType == 'past')
-- If it's ergative, we use oblique pronouns: "min", "te", ...
-- If it's not ergative, we use normal pronouns: "ez", "tu", ...
if isErgative then
pronouns = shallowCopy(export.obliquePronounsGreen)
end
-- For the subjunctive mood, we add "(bila)" at the beginning.
if mode == 'subjunctive' then
local subjPrefix = '<span style="color:gray">(bila)</span>'
for _, pers in ipairs(export.order) do
pronouns[pers] = subjPrefix .. ' ' .. pronouns[pers]
end
end
return pronouns
end
-- =============================================================================
-- VERBAL STRUCTURE IN THE INFINITIVE:
-- Verbs in the infinitive appear in three main forms:
-- 1) Simple verb (indivisible light verb):
-- - ex.: "kirin", "çûn", "xwarin", ...
-- 2) Verbs with preverbs (preverb + simple verb):
-- - ex.: "rakirin" (ra- + kirin), "çêkirin" (çê- + kirin), "vexwarin" (ve- + xwarin), ...
-- - Preverb verbs don't use the prefix "bi-" (ez ê rakim , ew ê rake , ...)
-- 3) Compound verbs, construction with non-verbal element (the noun is not attached to the verb):
-- - Left of the simple verb: "hez kirin" ("hez" + "kirin"), "li dar xistin" ("li dar" + "xistin"), ...
-- - Right of the simple verb: "kirin der" ("kirin" + "der"), "girtin ser xwe" ("girtin" + "ser xwe"), ...
-- - Compound verbs use the prefix "bi-" (ez ê hez bi-kim , ew ê hez bi-ke )
-- STRUCTURE: preSimpleVerb + spacing + simpleVerb + postSimpleVerb
-- EX. kirin: preSimpleVerb=''; spacing=false; simpleVerb='kirin'; postSimpleVerb=''
-- rakirin: preSimpleVerb='ra'; spacing=false; simpleVerb='kirin'; postSimpleVerb=''
-- hez kirin: preSimpleVerb='hez'; spacing=true; simpleVerb='kirin'; postSimpleVerb=''
-- pev çûn: preSimpleVerb='pev'; spacing=true; simpleVerb='çûn'; postSimpleVerb=''
-- kirin der: preSimpleVerb=''; spacing=false; simpleVerb='kirin'; postSimpleVerb='der'
-- WARNING: Conjugation can vary depending on the type of verb.
-- For example, in the future tense,the prefix "bi" is used for compound verbs,
-- but not for preverbal verbs, see the function that manages it "tenseRules" table.
-- This table does not yet support the mixed case: a verb composed of a noun and a preverb verb.
-- =============================================================================
function export.verbStruct(isCompoundVerb, preSimpleVerb)
local struct
if (preSimpleVerb and preSimpleVerb ~= '' and not isCompoundVerb) then
struct = 'preverbVerb'
elseif isCompoundVerb then
struct = 'compoundVerb'
else
struct = 'simpleVerb'
end
return struct
end
-- ================================================================
-- INFLECTIONAL ENDINGS
-- Assigns verb inflectional endings (suffixes) to all tenses
-- ================================================================
local getEndings = {}
do
-- ───────────────────────────────────────────────────────────────
-- Ending using present stem
-- ───────────────────────────────────────────────────────────────
getEndings['present'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends = {}
if mw.ustring.match(stem, '[aeêiîouû]$') then
ends['std'] = {s1='m', s2='yî', s3='', p1='n', p2='n', p3='n'}
ends['rojhilatî'] = {s1='m', s2='(y)', s3='t', p1='yn', p2='n', p3='n'}
else
ends['std'] = {s1='im', s2='î', s3='e', p1='in', p2='in', p3='in'}
ends['rojhilatî'] = {s1='im', s2='î', s3='<u>it</u>/ît', p1='în', p2='in', p3='in'}
end
return ends
end
-- ───────────────────────────────────────────────────────────────
-- Ind. preterite + ind. imperfect ending
-- ───────────────────────────────────────────────────────────────
getEndings['past'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends
if mw.ustring.match(stem, '[aeêiouû]$') then
ends = {s1='m', s2='yî', s3='', p1='n', p2='n', p3='n'}
elseif mw.ustring.match(stem, 'î$') then
-- if self.name == 'indImperfect' then
-- -- special indicative ind. imperfect rule
-- ends = {s1='yam', s2='yayî', s3='ya', p1='yan', p2='yan', p3='yan'}
-- end
ends = {s1='m', s2='', s3='', p1='n', p2='n', p3='n'}
else
ends = {s1='im', s2='î', s3='', p1='in', p2='in', p3='in'}
end
return ends
end
-- ───────────────────────────────────────────────────────────────
-- Compound endings with auxiliary "bûn"
-- Inflectional endings are created by taking the different forms of the
-- verb "bûn" (with present stem "-b-" and past stem "-bû-") and
-- adding an "i-" prefix before them: "i-b-im", "i-bû-m", "i-bû-me", "i-bû-ma".
-- This "i-" varies according to the final letter of the verb stem.
-- ───────────────────────────────────────────────────────────────
local function normalize_i(stem)
local prfx_i = "i"
if mw.ustring.match(stem, "ya$") or
mw.ustring.match(stem, "[îû]$") then -- cf. karîn (-karî-)
prfx_i = ""
elseif mw.ustring.match(stem, '[aeêiou]$') then
prfx_i = "yi"
end
return prfx_i
end
getEndings['ibim'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bim", p1 = prfx_i .. "bin",
s2 = prfx_i .. "bî", p2 = prfx_i .. "bin",
s3 = prfx_i .. "be", p3 = prfx_i .. "bin"
}
end
getEndings['ibûm'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bûm", p1 = prfx_i .. "bûn",
s2 = prfx_i .. "bûyî", p2 = prfx_i .. "bûn",
s3 = prfx_i .. "bû", p3 = prfx_i .. "bûn"
}
end
getEndings['ibûme'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bûme", p1 = prfx_i .. "bûne",
s2 = prfx_i .. "bûyiye", p2 = prfx_i .. "bûne",
s3 = prfx_i .. "bûye", p3 = prfx_i .. "bûne"
}
end
getEndings['ibûma'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bûma", p1 = prfx_i .. "bûna",
s2 = prfx_i .. "bûyayî", p2 = prfx_i .. "bûna",
s3 = prfx_i .. "bûya", p3 = prfx_i .. "bûna"
}
end
-- ───────────────────────────────────────────────────────────────
-- Ind. perfect ending.
-- ───────────────────────────────────────────────────────────────
getEndings['ime'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends
if mw.ustring.match(stem, '[aeêiîouû]$') then
ends = {s1="me", s2="yî", s3="ye", p1="ne", p2="ne", p3="ne"}
else
ends = {s1="ime", s2="iyî", s3="iye", p1="ine", p2="ine", p3="ine"}
end
return ends
end
-- ───────────────────────────────────────────────────────────────
-- Subj. Imperfect ending.
-- ───────────────────────────────────────────────────────────────
getEndings['ama'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends
-- The doublet in "-iyan" of verbs in -"în" (gerîn/-geriya-, kenîn/-keniya-, ...),
-- in the conditional and subjunctive moods, a doublet "yaya" appears; it's removed.
-- -yayayî → -yayî; -yaya → -ya
if mw.ustring.match(stem, '(ya)$') then
ends = {s1="ma", s2="yî", s3="", p1="na", p2="na", p3="na"}
elseif mw.ustring.match(stem, '[aeêiîouû]$') then
ends = {s1="ma", s2="yayî", s3="ya", p1="na", p2="na", p3="na"}
else
ends = {s1="ama", s2="ayî", s3="a", p1="ana", p2="ana", p3="ana"}
end
return ends
end
end
-- =============================================================================
-- RULES FOR PREVERBS: "bi-" and "di-"
-- There are two preverbs: "bi-" and "di-". These preverbs can change form
-- depending on the first letters of the verb’s present stem or past stem.
-- =============================================================================
local getPreverb = {}
do
getPreverb['bi'] = function (self, opts)
opts = opts or {}
local stem = opts.stem
local verbStruct = opts.verbStruct
local overridePreverb = opts.overridePreverb
local accent = opts.accent
-- Devoka rojhilatî:
-- @Ferhengvan: Dema bêt bi lêkera alîkar "ê / dê" û bi rehê lêkerê yê
-- dema niha û pêşgirên kesî tê çêkirin. Pêşgira "bi-" li destpêka lêkera
-- serekî nîne: - ez ê / dê xw-im (standard: ez ê/dê bi-xw-im).
if (self.name == 'indFuture' and accent == 'rojhilatî') then
return ''
end
-- Preverb verbs don't use the preverb "bi-": ra-kirin (ez ê rakim), ve-xwarin (ez ê vexwim) , ...
-- But compound verb and simple verbs use it: hez kirin (ez ê hez bi-kim), lê bigirin (ez ê lê bi-girim), ...
if (verbStruct == 'preverbVerb') then
return ''
end
-- If the preverb "bi-" is provided.
if (self.stem == 'present' and overridePreverb.presentBi) then
return overridePreverb.presentBi
elseif (self.stem == 'past' and overridePreverb.pastBi) then
return overridePreverb.pastBi
elseif overridePreverb.sameBi then
return overridePreverb.sameBi
end
-- Modification of the preverbe "bi-" according to the last letter of the stem.
if mw.ustring.match(stem, '^[aeêiîouû]') then
return 'b'
end
return 'bi'
end
getPreverb['di'] = function (self, opts)
opts = opts or {}
local stem = opts.stem
local overridePreverb = opts.overridePreverb
-- If the preverb "di" is provided.
if (self.stem == 'present' and overridePreverb.presentDi) then
return overridePreverb.presentDi
elseif (self.stem == 'past' and overridePreverb.pastDi) then
return overridePreverb.pastDi
elseif overridePreverb.sameDi then
return overridePreverb.sameDi
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 (self, opts)
-- self: reserved for future use
local _ = self -- delete the warning (unused argument)
opts = opts or {}
local stem = opts.stem
local overrideNa = opts.overrideNegPrefix.presentNa
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 (self, opts)
opts = opts or {}
local stem = opts.stem
local tenseName = self.name
local impNegForm = opts.impNegForm -- form "1" or "2" of imp.
local overrideNegPrefix = opts.overrideNegPrefix
local negPrefix = 'ne'
-- Bo neyînî: pêşgira "di-" tenê di nav dema "indImperfect" de tê bikaranîn.
-- ji ber vê yekê 'negPrefix' hertim (?) 'ne' ye ji ber ku dikeve pêş
-- pêşgira "di-": wê/wî ne-di-elimand (elimandin)
if (tenseName == 'indImperfect') then
return '<b>' .. negPrefix .. '</b>'
end
-- Override
if (overrideNegPrefix.impMe or overrideNegPrefix.presentNe
or overrideNegPrefix.pastNe
or overrideNegPrefix.sameNe) then
-- Ovverride imp.
if (tenseName == 'impPresent') then
if (impNegForm == 1 and overrideNegPrefix.impMe) then
return '<b>' .. overrideNegPrefix.impMe .. '</b>'
elseif (impNegForm == 1 and overrideNegPrefix.presentNe and
find(overrideNegPrefix.presentNe, '^n')) then
--For the "me-" form, we replace the "n" with an "m".
return '<b>' .. gsub(overrideNegPrefix.presentNe, '^(.)', 'm') .. '</b>'
elseif (impNegForm == 1 and overrideNegPrefix.sameNe and
find(overrideNegPrefix.sameNe, '^n')) then
--For the "me-" form, we replace the "n" with an "m".
return '<b>' .. gsub(overrideNegPrefix.sameNe, '^(.)', 'm') .. '</b>'
elseif (impNegForm == 2 and overrideNegPrefix.presentNe) then
return '<b>' .. overrideNegPrefix.presentNe .. '</b>'
elseif (impNegForm == 2 and overrideNegPrefix.sameNe) then
return '<b>' .. overrideNegPrefix.sameNe .. '</b>'
end
else
-- For other tenses besides the imperative
if (self.stem == 'present' and overrideNegPrefix.presentNe) then
return '<b>' .. overrideNegPrefix.presentNe .. '</b>'
elseif (self.stem == 'past' and overrideNegPrefix.pastNe) then
return '<b>' .. overrideNegPrefix.pastNe .. '</b>'
elseif overrideNegPrefix.sameNe then
return '<b>' .. overrideNegPrefix.sameNe .. '</b>'
end
end
end
-- There are two forms of construction of the imperative,
-- one with the prefix "me-" (1) and the other (2) 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 overridePreverb = {
-- Preverbs (bi-, di)
presentBi = opts.presentBi or nil,
presentDi = opts.presentDi or nil,
pastBi = opts.pastBi or nil,
pastDi = opts.pastDi or nil,
-- Same preverbs ("past" and "present" stem)
sameBi = opts.sameBi or nil,
sameDi = opts.sameDi or nil,
}
local overrideNegPrefix = {
-- Neg. prefix (na-, ne-)
presentNa = opts.presentNa or nil,
presentNe = opts.presentNe or nil,
pastNe = opts.pastNe or nil,
-- same neg. prefix (for past and present stem)
sameNe = opts.sameNe or nil,
impMe = opts.impMe 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 1
-- Accent/ Devok
local accent = opts.accent or 'std'
-- If "tags='na'", remove links/tags
local tags = opts.tags or 'erê'
-- If addPreverbParticles='na', remove preverb particles (ê/dê) before
-- the conjugated verbs.
local addPreverbParticles = opts.addPreverbParticles or 'erê'
-- We add a space to the left of the "postSimpleVerb" because it shouldn't be attached
-- to the simple verb.
if (postSimpleVerb ~= '' and postSimpleVerb ~=nil) then
postSimpleVerb = ' ' .. postSimpleVerb
end
-- Access to the classification table and retrieval of verb tense parameters
local infoTense = deepCopy(export.tenseRules[tense], 'copy') or false
-- We check that this tense is indeed in table "tenseRules".
if (not infoTense) then
return '<span style="color:red">Unknown tense: ' .. tense ..'</span>'
end
-- We check that one of the two parameters of the stem is given
if (infoTense.stem == 'present' and not presentStem) then
return '<span style="color:red">presentStem parameter required</span>'
elseif (infoTense.stem == 'past' and not pastStem) then
return '<span style="color:red">pasttStem parameter required</span>'
end
-- Choice between the present stem or past stem
local stem = (infoTense.stem == 'present') and presentStem or pastStem
--────────────────────────────
-- Conjugation construction --
-- ───────────────────────────
local preverb = ''
local negPrefix = ''
-- Ruturns the verb type: "simpleVerb" or "preverbVerb" or "compoundVerb"
local verbStruct = export.verbStruct(isCompoundVerb, preSimpleVerb)
if isNegative then
negPrefix = infoTense:negPrefix{stem=stem,
impNegForm=impNegForm,
overrideNegPrefix=overrideNegPrefix}
if infoTense.negPreverb then
preverb = infoTense:negPreverb{stem=stem, verbStruct=verbStruct,
overridePreverb=overridePreverb}
end
else
if infoTense.preverb then
preverb = infoTense:preverb{stem=stem, verbStruct=verbStruct,
overridePreverb=overridePreverb,
accent=accent}
end
end
infoTense.conj = {}
local spacing = isCompoundVerb and ' ' or ''
local endings = infoTense:endings(stem)
-- 'rojhilatî' accent (devok) for present stem
if (infoTense.stem == 'present') then
if (accent == 'rojhilatî') then
endings = endings['rojhilatî']
else
endings = endings['std']
end
end
local preverbParticles = export.getPreverbParticules(infoTense.preverbParticle, infoTense.stem, isTransitive)
local isErgative = isTransitive and (infoTense.stem == 'past')
-- Creating the conjugation table for a given tense
for _, pers in ipairs(export.order) do
local ending
local conjSimbleVerb
local conjVerb
if isErgative then
ending = endings.s3
else
ending = endings[pers]
end
-- Adding space after the preverbal particle, and
-- if "addPreverbParticles='na'": remove preverb particles (ê/dê).
local preverbParticle = ''
if infoTense.preverbParticle and addPreverbParticles ~= 'na' then
preverbParticle = preverbParticles[pers] .. ' '
end
conjSimbleVerb = negPrefix .. preverb .. stem .. ending
-- Adding prefixe and suffixe
conjVerb = preSimpleVerb .. spacing .. conjSimbleVerb .. postSimpleVerb
-- Spelling correction(îy -> iy)
conjVerb = 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,
-- overridePreverb:
presentBi = frame['nihaBi'] or nil,
presentDi = frame['nihaDi'] or nil,
pastBi = frame['borîBi'] or nil,
pastDi = frame['borîDi'] or nil,
sameBi = frame['bi'] or nil,
sameDi = frame['di'] or nil,
-- overrideNegPrefix:
presentNa = frame['na'] or nil,
presentNe = frame['nihaNe'] or nil,
pastNe = frame['borîNe'] or nil,
sameNe = frame['ne'] or nil,
impMe = frame['me'] or nil,
impNegForm = 1,
tags = args['lînk'] or 'erê',
accent = args['devok'] or 'std',
}
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 '',
-- overridePreverb:
presentBi = frame['nihaBi'] or nil,
presentDi = frame['nihaDi'] or nil,
pastBi = frame['borîBi'] or nil,
pastDi = frame['borîDi'] or nil,
sameBi = frame['bi'] or nil,
sameDi = frame['di'] or nil,
-- overrideNegPrefix:
presentNa = frame['na'] or nil,
presentNe = frame['nihaNe'] or nil,
pastNe = frame['borîNe'] or nil,
sameNe = frame['ne'] or nil,
impMe = frame['me'] or nil,
impNegForm = 1,
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
41e6dsdzgpli8b2xxuwp2l6paa69bcn
6237503
6237498
2026-06-12T03:00:33Z
Ghybu
1393
6237503
Scribunto
text/plain
-- Modula tewandina lêkerên kurmancî
local export = {}
-- Load irregular forms table
-- local irreg = require('Module:ku-tewandin/nestandard')
local langKu = require("Modul:languages").getByCode("ku")
local link = require('Module:links').language_link
local shallowCopy = require("Module:table/shallowCopy")
local deepCopy = require("Module:table/deepCopy")
local gsub = mw.ustring.gsub
local find = mw.ustring.find
-- =============================================================================
-- Pronouns in Kurmanji
-- =============================================================================
export.order = {"s1", "s2", "s3", "p1", "p2", "p3"}
export.pronouns = {
s1 = "ez", p1 = "em",
s2 = "tu", p2 = "hûn",
s3 = "ew", p3 = "ew"
}
export.obliquePronouns = {
s1 = "min", p1 = "me",
s2 = "te", p2 = "we",
s3 = "wê/wî", p3 = "wan"
}
export.agents = {
s1 = "te, wî, wê, we, wan", p1 = "te, wî, wê, we, wan",
s2 = "min, wî, wê, me, wan", p2 = "min, wî, wê, me, wan",
s3 = "min, te, wî, wê, me, we, wan", p3 = "min, te, wî, wê, me, we, wan"
}
-- Oblique pronoun (green)
export.obliquePronounsGreen = {
s1 = '<span style="color:green">min</span>',
s2 = '<span style="color:green">te</span>',
s3 = '<span style="color:green">wê/wî</span>',
p1 = '<span style="color:green">me</span>',
p2 = '<span style="color:green">we</span>',
p3 = '<span style="color:green">wan</span>'
}
-- ─────────────────────────────────────────────────────────────────────────────
-- 1) This function returns correct subject/agent pronoun, ergativity rule:
-- - Transitive verbs in past tenses → oblique pronoun (green) = agent
-- - All other cases → direct pronoun (no color) = subject
-- 2) Also add the subjunctive prefix "(bila)"
-- ─────────────────────────────────────────────────────────────────────────────
function export.conjPronouns(stemType, mode, isTransitive)
local pronouns = shallowCopy(export.pronouns)
-- Ergativity in kurdish: transitive verbs that are conjugated with the past tense stem are
-- conjugated according to the object, not the subject.
-- Therefore, to have an ergative construction,
-- the verb must be transitive and its stem must be the stem of the past tense.
local isErgative = isTransitive and (stemType == 'past')
-- If it's ergative, we use oblique pronouns: "min", "te", ...
-- If it's not ergative, we use normal pronouns: "ez", "tu", ...
if isErgative then
pronouns = shallowCopy(export.obliquePronounsGreen)
end
-- For the subjunctive mood, we add "(bila)" at the beginning.
if mode == 'subjunctive' then
local subjPrefix = '<span style="color:gray">(bila)</span>'
for _, pers in ipairs(export.order) do
pronouns[pers] = subjPrefix .. ' ' .. pronouns[pers]
end
end
return pronouns
end
-- =============================================================================
-- VERBAL STRUCTURE IN THE INFINITIVE:
-- Verbs in the infinitive appear in three main forms:
-- 1) Simple verb (indivisible light verb):
-- - ex.: "kirin", "çûn", "xwarin", ...
-- 2) Verbs with preverbs (preverb + simple verb):
-- - ex.: "rakirin" (ra- + kirin), "çêkirin" (çê- + kirin), "vexwarin" (ve- + xwarin), ...
-- - Preverb verbs don't use the prefix "bi-" (ez ê rakim , ew ê rake , ...)
-- 3) Compound verbs, construction with non-verbal element (the noun is not attached to the verb):
-- - Left of the simple verb: "hez kirin" ("hez" + "kirin"), "li dar xistin" ("li dar" + "xistin"), ...
-- - Right of the simple verb: "kirin der" ("kirin" + "der"), "girtin ser xwe" ("girtin" + "ser xwe"), ...
-- - Compound verbs use the prefix "bi-" (ez ê hez bi-kim , ew ê hez bi-ke )
-- STRUCTURE: preSimpleVerb + spacing + simpleVerb + postSimpleVerb
-- EX. kirin: preSimpleVerb=''; spacing=false; simpleVerb='kirin'; postSimpleVerb=''
-- rakirin: preSimpleVerb='ra'; spacing=false; simpleVerb='kirin'; postSimpleVerb=''
-- hez kirin: preSimpleVerb='hez'; spacing=true; simpleVerb='kirin'; postSimpleVerb=''
-- pev çûn: preSimpleVerb='pev'; spacing=true; simpleVerb='çûn'; postSimpleVerb=''
-- kirin der: preSimpleVerb=''; spacing=false; simpleVerb='kirin'; postSimpleVerb='der'
-- WARNING: Conjugation can vary depending on the type of verb.
-- For example, in the future tense,the prefix "bi" is used for compound verbs,
-- but not for preverbal verbs, see the function that manages it "tenseRules" table.
-- This table does not yet support the mixed case: a verb composed of a noun and a preverb verb.
-- =============================================================================
function export.verbStruct(isCompoundVerb, preSimpleVerb)
local struct
if (preSimpleVerb and preSimpleVerb ~= '' and not isCompoundVerb) then
struct = 'preverbVerb'
elseif isCompoundVerb then
struct = 'compoundVerb'
else
struct = 'simpleVerb'
end
return struct
end
-- ================================================================
-- INFLECTIONAL ENDINGS
-- Assigns verb inflectional endings (suffixes) to all tenses
-- ================================================================
local getEndings = {}
do
-- ───────────────────────────────────────────────────────────────
-- Ending using present stem
-- ───────────────────────────────────────────────────────────────
getEndings['present'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends = {}
if mw.ustring.match(stem, '[aeêiîouû]$') then
ends['std'] = {s1='m', s2='yî', s3='', p1='n', p2='n', p3='n'}
ends['rojhilatî'] = {s1='m', s2='(y)', s3='t', p1='yn', p2='n', p3='n'}
else
ends['std'] = {s1='im', s2='î', s3='e', p1='in', p2='in', p3='in'}
ends['rojhilatî'] = {s1='im', s2='î', s3='<u>it</u>/ît', p1='în', p2='in', p3='in'}
end
return ends
end
-- ───────────────────────────────────────────────────────────────
-- Ind. preterite + ind. imperfect ending
-- ───────────────────────────────────────────────────────────────
getEndings['past'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends
if mw.ustring.match(stem, '[aeêiouû]$') then
ends = {s1='m', s2='yî', s3='', p1='n', p2='n', p3='n'}
elseif mw.ustring.match(stem, 'î$') then
-- if self.name == 'indImperfect' then
-- -- special indicative ind. imperfect rule
-- ends = {s1='yam', s2='yayî', s3='ya', p1='yan', p2='yan', p3='yan'}
-- end
ends = {s1='m', s2='', s3='', p1='n', p2='n', p3='n'}
else
ends = {s1='im', s2='î', s3='', p1='in', p2='in', p3='in'}
end
return ends
end
-- ───────────────────────────────────────────────────────────────
-- Compound endings with auxiliary "bûn"
-- Inflectional endings are created by taking the different forms of the
-- verb "bûn" (with present stem "-b-" and past stem "-bû-") and
-- adding an "i-" prefix before them: "i-b-im", "i-bû-m", "i-bû-me", "i-bû-ma".
-- This "i-" varies according to the final letter of the verb stem.
-- ───────────────────────────────────────────────────────────────
local function normalize_i(stem)
local prfx_i = "i"
if mw.ustring.match(stem, "ya$") or
mw.ustring.match(stem, "[îû]$") then -- cf. karîn (-karî-)
prfx_i = ""
elseif mw.ustring.match(stem, '[aeêiou]$') then
prfx_i = "yi"
end
return prfx_i
end
getEndings['ibim'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bim", p1 = prfx_i .. "bin",
s2 = prfx_i .. "bî", p2 = prfx_i .. "bin",
s3 = prfx_i .. "be", p3 = prfx_i .. "bin"
}
end
getEndings['ibûm'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bûm", p1 = prfx_i .. "bûn",
s2 = prfx_i .. "bûyî", p2 = prfx_i .. "bûn",
s3 = prfx_i .. "bû", p3 = prfx_i .. "bûn"
}
end
getEndings['ibûme'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bûme", p1 = prfx_i .. "bûne",
s2 = prfx_i .. "bûyiye", p2 = prfx_i .. "bûne",
s3 = prfx_i .. "bûye", p3 = prfx_i .. "bûne"
}
end
getEndings['ibûma'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local prfx_i = normalize_i(stem)
return {
s1 = prfx_i .. "bûma", p1 = prfx_i .. "bûna",
s2 = prfx_i .. "bûyayî", p2 = prfx_i .. "bûna",
s3 = prfx_i .. "bûya", p3 = prfx_i .. "bûna"
}
end
-- ───────────────────────────────────────────────────────────────
-- Ind. perfect ending.
-- ───────────────────────────────────────────────────────────────
getEndings['ime'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends
if mw.ustring.match(stem, '[aeêiîouû]$') then
ends = {s1="me", s2="yî", s3="ye", p1="ne", p2="ne", p3="ne"}
else
ends = {s1="ime", s2="iyî", s3="iye", p1="ine", p2="ine", p3="ine"}
end
return ends
end
-- ───────────────────────────────────────────────────────────────
-- Subj. Imperfect ending.
-- ───────────────────────────────────────────────────────────────
getEndings['ama'] = function(self, stem)
-- self: reserved for future use (was used before, might be needed again)
local _ = self -- delete the warning (unused argument)
local ends
-- The doublet in "-iyan" of verbs in -"în" (gerîn/-geriya-, kenîn/-keniya-, ...),
-- in the conditional and subjunctive moods, a doublet "yaya" appears; it's removed.
-- -yayayî → -yayî; -yaya → -ya
if mw.ustring.match(stem, '(ya)$') then
ends = {s1="ma", s2="yî", s3="", p1="na", p2="na", p3="na"}
elseif mw.ustring.match(stem, '[aeêiîouû]$') then
ends = {s1="ma", s2="yayî", s3="ya", p1="na", p2="na", p3="na"}
else
ends = {s1="ama", s2="ayî", s3="a", p1="ana", p2="ana", p3="ana"}
end
return ends
end
end
-- =============================================================================
-- RULES FOR PREVERBS: "bi-" and "di-"
-- There are two preverbs: "bi-" and "di-". These preverbs can change form
-- depending on the first letters of the verb’s present stem or past stem.
-- =============================================================================
local getPreverb = {}
do
getPreverb['bi'] = function (self, opts)
opts = opts or {}
local stem = opts.stem
local verbStruct = opts.verbStruct
local overridePreverb = opts.overridePreverb
local accent = opts.accent
-- Devoka rojhilatî:
-- @Ferhengvan: Dema bêt bi lêkera alîkar "ê / dê" û bi rehê lêkerê yê
-- dema niha û pêşgirên kesî tê çêkirin. Pêşgira "bi-" li destpêka lêkera
-- serekî nîne: - ez ê / dê xw-im (standard: ez ê/dê bi-xw-im).
if (self.name == 'indFuture' and accent == 'rojhilatî') then
return ''
end
-- Preverb verbs don't use the preverb "bi-": ra-kirin (ez ê rakim), ve-xwarin (ez ê vexwim) , ...
-- But compound verb and simple verbs use it: hez kirin (ez ê hez bi-kim), lê bigirin (ez ê lê bi-girim), ...
if (verbStruct == 'preverbVerb') then
return ''
end
-- If the preverb "bi-" is provided.
if (self.stem == 'present' and overridePreverb.presentBi) then
return overridePreverb.presentBi
elseif (self.stem == 'past' and overridePreverb.pastBi) then
return overridePreverb.pastBi
elseif overridePreverb.sameBi then
return overridePreverb.sameBi
end
-- Modification of the preverbe "bi-" according to the last letter of the stem.
if mw.ustring.match(stem, '^[aeêiîouû]') then
return 'b'
end
return 'bi'
end
getPreverb['di'] = function (self, opts)
opts = opts or {}
local stem = opts.stem
local overridePreverb = opts.overridePreverb
-- If the preverb "di" is provided.
if (self.stem == 'present' and overridePreverb.presentDi) then
return overridePreverb.presentDi
elseif (self.stem == 'past' and overridePreverb.pastDi) then
return overridePreverb.pastDi
elseif overridePreverb.sameDi then
return overridePreverb.sameDi
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 (self, opts)
-- self: reserved for future use
local _ = self -- delete the warning (unused argument)
opts = opts or {}
local stem = opts.stem
local overrideNa = opts.overrideNegPrefix.presentNa
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 (self, opts)
opts = opts or {}
local stem = opts.stem
local tenseName = self.name
local impNegForm = opts.impNegForm -- form "1" or "2" of imp.
local overrideNegPrefix = opts.overrideNegPrefix
local negPrefix = 'ne'
-- Bo neyînî: pêşgira "di-" tenê di nav dema "indImperfect" de tê bikaranîn.
-- ji ber vê yekê 'negPrefix' hertim (?) 'ne' ye ji ber ku dikeve pêş
-- pêşgira "di-": wê/wî ne-di-elimand (elimandin)
if (tenseName == 'indImperfect') then
return '<b>' .. negPrefix .. '</b>'
end
-- Override
if (overrideNegPrefix.impMe or overrideNegPrefix.presentNe
or overrideNegPrefix.pastNe
or overrideNegPrefix.sameNe) then
-- Ovverride imp.
if (tenseName == 'impPresent') then
if (impNegForm == 1 and overrideNegPrefix.impMe) then
return '<b>' .. overrideNegPrefix.impMe .. '</b>'
elseif (impNegForm == 1 and overrideNegPrefix.presentNe and
find(overrideNegPrefix.presentNe, '^n')) then
--For the "me-" form, we replace the "n" with an "m".
return '<b>' .. gsub(overrideNegPrefix.presentNe, '^(.)', 'm') .. '</b>'
elseif (impNegForm == 1 and overrideNegPrefix.sameNe and
find(overrideNegPrefix.sameNe, '^n')) then
--For the "me-" form, we replace the "n" with an "m".
return '<b>' .. gsub(overrideNegPrefix.sameNe, '^(.)', 'm') .. '</b>'
elseif (impNegForm == 2 and overrideNegPrefix.presentNe) then
return '<b>' .. overrideNegPrefix.presentNe .. '</b>'
elseif (impNegForm == 2 and overrideNegPrefix.sameNe) then
return '<b>' .. overrideNegPrefix.sameNe .. '</b>'
end
else
-- For other tenses besides the imperative
if (self.stem == 'present' and overrideNegPrefix.presentNe) then
return '<b>' .. overrideNegPrefix.presentNe .. '</b>'
elseif (self.stem == 'past' and overrideNegPrefix.pastNe) then
return '<b>' .. overrideNegPrefix.pastNe .. '</b>'
elseif overrideNegPrefix.sameNe then
return '<b>' .. overrideNegPrefix.sameNe .. '</b>'
end
end
end
-- There are two forms of construction of the imperative,
-- one with the prefix "me-" (1) and the other (2) 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 overridePreverb = {
-- Preverbs (bi-, di)
presentBi = opts.presentBi or nil,
presentDi = opts.presentDi or nil,
pastBi = opts.pastBi or nil,
pastDi = opts.pastDi or nil,
-- Same preverbs ("past" and "present" stem)
sameBi = opts.sameBi or nil,
sameDi = opts.sameDi or nil,
}
local overrideNegPrefix = {
-- Neg. prefix (na-, ne-)
presentNa = opts.presentNa or nil,
presentNe = opts.presentNe or nil,
pastNe = opts.pastNe or nil,
-- same neg. prefix (for past and present stem)
sameNe = opts.sameNe or nil,
impMe = opts.impMe 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 1
-- Accent/ Devok
local accent = opts.accent or 'std'
-- If "tags='na'", remove links/tags
local tags = opts.tags or 'erê'
-- If addPreverbParticles='na', remove preverb particles (ê/dê) before
-- the conjugated verbs.
local addPreverbParticles = opts.addPreverbParticles or 'erê'
-- We add a space to the left of the "postSimpleVerb" because it shouldn't be attached
-- to the simple verb.
if (postSimpleVerb ~= '' and postSimpleVerb ~=nil) then
postSimpleVerb = ' ' .. postSimpleVerb
end
-- Access to the classification table and retrieval of verb tense parameters
local infoTense = deepCopy(export.tenseRules[tense], 'copy') or false
-- We check that this tense is indeed in table "tenseRules".
if (not infoTense) then
return '<span style="color:red">Unknown tense: ' .. tense ..'</span>'
end
-- We check that one of the two parameters of the stem is given
if (infoTense.stem == 'present' and not presentStem) then
return '<span style="color:red">presentStem parameter required</span>'
elseif (infoTense.stem == 'past' and not pastStem) then
return '<span style="color:red">pasttStem parameter required</span>'
end
-- Choice between the present stem or past stem
local stem = (infoTense.stem == 'present') and presentStem or pastStem
--────────────────────────────
-- Conjugation construction --
-- ───────────────────────────
local preverb = ''
local negPrefix = ''
-- Ruturns the verb type: "simpleVerb" or "preverbVerb" or "compoundVerb"
local verbStruct = export.verbStruct(isCompoundVerb, preSimpleVerb)
if isNegative then
negPrefix = infoTense:negPrefix{stem=stem,
impNegForm=impNegForm,
overrideNegPrefix=overrideNegPrefix}
if infoTense.negPreverb then
preverb = infoTense:negPreverb{stem=stem, verbStruct=verbStruct,
overridePreverb=overridePreverb}
end
else
if infoTense.preverb then
preverb = infoTense:preverb{stem=stem, verbStruct=verbStruct,
overridePreverb=overridePreverb,
accent=accent}
end
end
--────────────────────────────
-- Lêkerin nestandard --
-- ───────────────────────────
-- çûn
if stem == 'ç' then
if tense == 'indPresent' then
if isNegative then
stem = 'r'
else
stem = 'er'
preverb = 't'
end
elseif ({impPresent=true, indFuture=true, subjPresent=true})[tense] then
preverb = ''
if isNegative then
stem = 'r'
else
stem = 'her'
end
end
end
-- hatin
if stem == 'ê' then
if ({impPresent=true, indFuture=true, subjPresent=true})[tense] then
if isNegative then
stem = 'ê'
else
preverb = ''
stem = 'wer'
end
end
end
-- ─────────────────────────────────────────────────────────────────────────
infoTense.conj = {}
local spacing = isCompoundVerb and ' ' or ''
local endings = infoTense:endings(stem)
-- 'rojhilatî' accent (devok) for present stem
if (infoTense.stem == 'present') then
if (accent == 'rojhilatî') then
endings = endings['rojhilatî']
else
endings = endings['std']
end
end
local preverbParticles = export.getPreverbParticules(infoTense.preverbParticle, infoTense.stem, isTransitive)
local isErgative = isTransitive and (infoTense.stem == 'past')
-- Creating the conjugation table for a given tense
for _, pers in ipairs(export.order) do
local ending
local conjSimbleVerb
local conjVerb
if isErgative then
ending = endings.s3
else
ending = endings[pers]
end
-- Adding space after the preverbal particle, and
-- if "addPreverbParticles='na'": remove preverb particles (ê/dê).
local preverbParticle = ''
if infoTense.preverbParticle and addPreverbParticles ~= 'na' then
preverbParticle = preverbParticles[pers] .. ' '
end
conjSimbleVerb = negPrefix .. preverb .. stem .. ending
-- Adding prefixe and suffixe
conjVerb = preSimpleVerb .. spacing .. conjSimbleVerb .. postSimpleVerb
-- Spelling correction(îy -> iy)
conjVerb = 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,
-- overridePreverb:
presentBi = frame['nihaBi'] or nil,
presentDi = frame['nihaDi'] or nil,
pastBi = frame['borîBi'] or nil,
pastDi = frame['borîDi'] or nil,
sameBi = frame['bi'] or nil,
sameDi = frame['di'] or nil,
-- overrideNegPrefix:
presentNa = frame['na'] or nil,
presentNe = frame['nihaNe'] or nil,
pastNe = frame['borîNe'] or nil,
sameNe = frame['ne'] or nil,
impMe = frame['me'] or nil,
impNegForm = 1,
tags = args['lînk'] or 'erê',
accent = args['devok'] or 'std',
}
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 '',
-- overridePreverb:
presentBi = frame['nihaBi'] or nil,
presentDi = frame['nihaDi'] or nil,
pastBi = frame['borîBi'] or nil,
pastDi = frame['borîDi'] or nil,
sameBi = frame['bi'] or nil,
sameDi = frame['di'] or nil,
-- overrideNegPrefix:
presentNa = frame['na'] or nil,
presentNe = frame['nihaNe'] or nil,
pastNe = frame['borîNe'] or nil,
sameNe = frame['ne'] or nil,
impMe = frame['me'] or nil,
impNegForm = 1,
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
dv8ad0mq4y7ozsk9caa2mk8savbvrn1
Modul:ku-tewandin/tabloGotar
828
1357097
6237500
6237264
2026-06-12T02:50:51Z
Ghybu
1393
6237500
Scribunto
text/plain
-- ====================================================================================
-- Modula tabloya gotaran, bikaranîn: {{ku-tewîn-lk}}
-- Ji bo tabloya mezin, bnr. [[Modul:ku-tewandin/tablo]]
-- Ji bo stîla vê tabloyê, bnr. {{ku-tewîn-nav/style.css}}
-- ====================================================================================
local export = {}
local conj = require('Modul:ku-tewandin')
function export.tew(frame)
local args = frame:getParent().args
local baseOpts = {
isTransitive = args['form'],
isNegative = false,
isCompoundVerb = args['valahî'] or false,
preSimpleVerb = args['pêşgir'] or nil,
postSimpleVerb = args['paşgir'] or nil,
accent = args['devok'] or 'std',
impNegForm = 1,
-- overridePreverb:
presentBi = args['nihaBi'] or nil,
presentDi = args['nihaDi'] or nil,
pastBi = args['borîBi'] or nil,
pastDi = args['borîDi'] or nil,
sameBi = args['bi'] or nil,
sameDi = args['di'] or nil,
-- overrideNegPrefix:
presentNa = args['na'] or nil,
presentNe = args['nihaNe'] or nil,
pastNe = args['borîNe'] or nil,
sameNe = args['ne'] or nil,
impMe = args['me'] or 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
2qpagj88xowdlejvo63j1vcs97rreet
alımlı olmak
0
1357315
6237417
2026-06-11T13:21:18Z
Rewiye tine
7120
([[Mediawiki:Gadget-start.js|WF:Nû]]) +tr:lêker:# {{mane?|tr}}#* {{bêmînak|tr}}
6237417
wikitext
text/x-wiki
== {{ziman|tr}} ==
=== Lêker ===
{{lêker|tr}}
# [[dilkêş bûn]], [[kişînok bûn]], [[cazîbedar bûn]]
#* {{bêmînak|tr}}
tidvp0hd72i9swiczn0rd6j9lell2pd
be confident
0
1357316
6237420
2026-06-11T13:39:52Z
Rewiye tine
7120
([[Mediawiki:Gadget-start.js|WF:Nû]]) +en:lêker:# {{mane?|en}}#* {{bêmînak|en}}
6237420
wikitext
text/x-wiki
== {{ziman|en}} ==
=== Lêker ===
{{lêker|en}}
# [[ji xwe bawer bûn]]
#* {{bêmînak|en}}
gsaq32onv36qa79g3v9fiz9doeg837j
6237474
6237420
2026-06-11T16:51:14Z
Bikarhêner
3719
[[User:Rewiye tine|Rewiye tine]] Ev ne madeyeke muteber e. Em jê bibin.
6237474
wikitext
text/x-wiki
{{jêbirin|Ev ne madeyeke muteber e (ji bo îngilîzî).}}
== {{ziman|en}} ==
=== Lêker ===
{{lêker|en}}
# [[ji xwe bawer bûn]]
#* {{bêmînak|en}}
3dbpqxo90hz6lda5keyqsr0yssnnvc8
ji xwe bawer bûn
0
1357317
6237421
2026-06-11T13:44:11Z
Rewiye tine
7120
([[Mediawiki:Gadget-start.js|WF:Nû]]) +ku:lêker/ngh:# {{mane?|ku}}#* {{bêmînak|ku}}
6237421
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-IPA}}
* {{ku-kîte}}
=== Lêker ===
{{lêker|ku|c=ngh}}
# Kesek ji xwe bawer bibe kar û berpirsyariyên xwe bi bawerî pêk tîne, dikare biryaran bide û li hember zehmetiyan bi hêvî û aramî raweste.
#* {{bêmînak|ku}}
==== Etîmolojî ====
ji {{pêk|ku|ji|xwe|bawer|bûn}}
==== Werger ====
{{werger-ser}}
{{werger-bin}}
8x9sgtcv5nzdujdnnindv2uouxab1m0
6237422
6237421
2026-06-11T13:46:55Z
Rewiye tine
7120
Werger: +îngilîzî : [[be confident]]; +îngilîzî : [[feel confident]]; +îngilîzî : [[be sure oneself]]; +tirkî : [[kendine güvenmek]] (bi alîkarî)
6237422
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-IPA}}
* {{ku-kîte}}
=== Lêker ===
{{lêker|ku|c=ngh}}
# Kesek ji xwe bawer bibe kar û berpirsyariyên xwe bi bawerî pêk tîne, dikare biryaran bide û li hember zehmetiyan bi hêvî û aramî raweste.
#* {{bêmînak|ku}}
==== Etîmolojî ====
ji {{pêk|ku|ji|xwe|bawer|bûn}}
==== Werger ====
{{werger-ser}}
* {{Z|en}}: {{W-|en|be confident}}, {{W-|en|feel confident}}, {{W-|en|be sure oneself}}
* {{Z|tr}}: {{W-|tr|kendine güvenmek}}
{{werger-bin}}
haqy1czh5ame66cqe9dmfn9x6xtf6fu
kendine güvenmek
0
1357318
6237423
2026-06-11T13:47:48Z
Rewiye tine
7120
([[Mediawiki:Gadget-start.js|WF:Nû]]) +tr:lêker:# {{mane?|tr}}#* {{bêmînak|tr}}
6237423
wikitext
text/x-wiki
== {{ziman|tr}} ==
=== Lêker ===
{{lêker|tr}}
# [[ji xwe bawer bûn]]
#* {{bêmînak|tr}}
1yxd2od140r9qn1ep6625ukaoihfnpf
6237475
6237423
2026-06-11T16:51:22Z
Bikarhêner
3719
[[User:Rewiye tine|Rewiye tine]] Ev ne madeyeke muteber e. Em jê bibin.
6237475
wikitext
text/x-wiki
{{jêbirin|Ev ne madeyeke muteber e (ji bo tirkî).}}
== {{ziman|tr}} ==
=== Lêker ===
{{lêker|tr}}
# [[ji xwe bawer bûn]]
#* {{bêmînak|tr}}
7e03xj4ltb01ml3nk31upvgehstfb3l
edited
0
1357319
6237429
2026-06-11T14:41:19Z
Ghybu
1393
Rûpel bi "== {{ziman|en}} == === Bilêvkirin === * {{IPA|en|/ˈɛdɪtɪd/}} * {{audio|en|LL-Q1860 (eng)-Vealhurl-edited.wav|Başûrê Îngilistanê}} === Lêker === {{lêker|en}} # {{en-dema-borî-sade|edit}} # {{partîsîpa borî|en|edit}}" hat çêkirin
6237429
wikitext
text/x-wiki
== {{ziman|en}} ==
=== Bilêvkirin ===
* {{IPA|en|/ˈɛdɪtɪd/}}
* {{audio|en|LL-Q1860 (eng)-Vealhurl-edited.wav|Başûrê Îngilistanê}}
=== Lêker ===
{{lêker|en}}
# {{en-dema-borî-sade|edit}}
# {{partîsîpa borî|en|edit}}
78cr2h9zfe83ecac7oyta3w0auptpm9
6237431
6237429
2026-06-11T14:43:02Z
Ghybu
1393
/* {{ziman|en}} */
6237431
wikitext
text/x-wiki
== {{ziman|en}} ==
=== Bilêvkirin ===
* {{IPA|en|/ˈɛdɪtɪd/}}
* {{audio|en|LL-Q1860 (eng)-Vealhurl-edited.wav|Başûrê Îngilistanê}}
=== Formeke lêkerê ===
{{lêker|en|form=erê}}
# {{en-dema-borî-sade|edit}}
# {{partîsîpa borî|en|edit}}
sg3llrkcxxf4vng85yxxl0i9ep55t2l
6237459
6237431
2026-06-11T16:03:32Z
Ghybu
1393
/* Bilêvkirin */
6237459
wikitext
text/x-wiki
== {{ziman|en}} ==
=== Bilêvkirin ===
* {{IPA|en|/ˈɛdɪtɪd/}}
* {{audio|en|LL-Q1860 (eng)-Vealhurl-edited.wav|dever=Başûrê Îngilistanê}}
=== Formeke lêkerê ===
{{lêker|en|form=erê}}
# {{en-dema-borî-sade|edit}}
# {{partîsîpa borî|en|edit}}
ngdpu4ngdpydgoq9b6zt6ddapsfw51c
watching
0
1357320
6237437
2026-06-11T15:01:39Z
Ghybu
1393
Rûpel bi "== {{ziman|en}} == === Bilêvkirin === * {{IPA|en|ˈwɑt͡ʃɪŋ}} * {{deng|en|en-us-watching.ogg|dever=DYA}} === Formeke lêkerê === {{lêker|en|form=erê}} # {{partîsîpa niha|en|watch}}" hat çêkirin
6237437
wikitext
text/x-wiki
== {{ziman|en}} ==
=== Bilêvkirin ===
* {{IPA|en|ˈwɑt͡ʃɪŋ}}
* {{deng|en|en-us-watching.ogg|dever=DYA}}
=== Formeke lêkerê ===
{{lêker|en|form=erê}}
# {{partîsîpa niha|en|watch}}
5zjpxf6uhgva3rwj4g1tmbxmrdortt6
6237438
6237437
2026-06-11T15:02:55Z
Ghybu
1393
/* Formeke lêkerê */
6237438
wikitext
text/x-wiki
== {{ziman|en}} ==
=== Bilêvkirin ===
* {{IPA|en|ˈwɑt͡ʃɪŋ}}
* {{deng|en|en-us-watching.ogg|dever=DYA}}
=== Formeke lêkerê ===
{{lêker|en|form=erê}}
# {{partîsîpa niha|en|watch}}
=== Navdêr ===
{{en-navdêr}}
# {{bêmane|ku}}
k1h0n9v2s0cc6sfdyxqcggp5cd127u2
Şablon:ku-tewîn/style.js
10
1357321
6237506
2026-06-12T03:32:08Z
Ghybu
1393
Ghybu created the page [[Şablon:ku-tewîn/style.js]] using a non-default content model "JavaScript"
6237506
javascript
text/javascript
phoiac9h4m842xq45sp7s6u21eteeq1
6237507
6237506
2026-06-12T03:44:31Z
Ghybu
1393
6237507
javascript
text/javascript
{{jêbirin}}
mn31mov4vi76vjbr02oei11l4fghv1n