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