ဝိက်ရှေန်နရဳ mnwwiktionary https://mnw.wiktionary.org/wiki/%E1%80%9D%E1%80%AD%E1%80%80%E1%80%BA%E1%80%9B%E1%80%BE%E1%80%B1%E1%80%94%E1%80%BA%E1%80%94%E1%80%9B%E1%80%B3:%E1%80%99%E1%80%AF%E1%80%80%E1%80%BA%E1%80%9C%E1%80%AD%E1%80%80%E1%80%BA%E1%80%90%E1%80%99%E1%80%BA MediaWiki 1.47.0-wmf.9 case-sensitive မဳဒဳယာ တၟေင် ဓရီုကျာ ညးလွပ် ညးလွပ် ဓရီုကျာ ဝိက်ရှေန်နရဳ ဝိက်ရှေန်နရဳ ဓရီုကျာ ဝှာင် ဝှာင် ဓရီုကျာ မဳဒဳယာဝဳကဳ မဳဒဳယာဝဳကဳ ဓရီုကျာ ထာမ်ပလိက် ထာမ်ပလိက် ဓရီုကျာ ရီု ရီု ဓရီုကျာ ကဏ္ဍ ကဏ္ဍ ဓရီုကျာ အဆက်လက္ကရဴ အဆက်လက္ကရဴ ဓရီုကျာ ကာရန် ကာရန် ဓရီုကျာ အဘိဓာန် အဘိဓာန် ဓရီုကျာ ဗီုပြၚ်သိုၚ်တၟိ ဗီုပြၚ်သိုၚ်တၟိ ဓရီုကျာ TimedText TimedText talk မဝ်ဂျူ မဝ်ဂျူ ဓရီုကျာ Event Event talk က 0 104 397743 397730 2026-07-02T00:46:37Z 咽頭べさ 33 397743 wikitext text/x-wiki {{also/auto}} {{character info|image=Ka Mon and Burmese.gif}} =={{=mnw=}}== ===နိရုတ်=== {{inh+|mnw|mkh-mmn|က}}၊ နကဵုအဆက်နူ {{inh|mnw|omx|က}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|mnw|/kaʔ/}} * {{audio|mnw|က Ka -mnw.ogg}} ===အက္ခရ်=== {{head|mnw|အက္ခရ်}} # ဗျန်မန်မရနုက်မွဲ၊ ပၞောဝ်ကဵုဗျန်မန်မၞုံတဴပိစှော်သုန်။ ===နာမ်=== {{mnw-noun}} # သတ်မဒီုဒက်ပ္ဍဲဍာ်မွဲဂကူ၊ ယီုကဵုခၟာ်၊ ဍေံတံဒှ်သတ်မၞုံကဵုဆီဂကူၜိုဟ်ၜိုဟ်၊ ဗွဲမဂၠိုၚ်ဍေံတံမၞုံကဵုခစှ်ေ၊ မၞုံကဵုနၚ် သၞေၚ် ပၠာဗ္တသွက်သ္ဂောံတ္ၜိၚ်အာကၠုၚ်ပ္ဍဲဍာ် ညံၚ်ရဴဇိုၚ်တဲ၊ ကမၞုံဂၠိုၚ်ကဵုဂကူ၊ ဒှ်စၞသွက်အမာဲသွမၞိဟ်။ ===နာမ် ၂ === {{mnw-noun}} # ကဝ၊ လေံထံက်၊ ဂၠဴ၊ လေံဂါန်၊ မဒှ်မထံက်လဝ်နကဵုဂၠဴ။ # အခု၊ အခိုံ၊ ဇွောံခု၊ ဂွဳ၊ ဒၞဳ။ ===နာမ် ၃ === {{mnw-noun}} # ကစိၚ်၊ ဒိန်ဒြၚ်၊ ဒေန်ဒြၚ်၊ သရေၚ်၊ သရေၚ်စိၚ်။ # ကချေံ၊ ဇုက်လဟက်ချေံ၊ ဇုက်လဟက်လဝ်သွက်သ္ဂောံကချေံ၊ ဖုန်ချေံ။ ===နာမ် ၄ === {{mnw-noun}} # {{alt form|mnw|ကအရံၚ်}} ===ကြိယာ=== {{mnw-verb}} # (ကြိယာအဆက်ဗွဲကြဴ) ဟွံ၊ ဟွံက၊ ဟွံကမွဲ၊ ဟွံကမွဲပြကာ။ #: {{ux|mnw|ရုံဟွံကပဵုသှာတ်အာဣရ။|}} ===ကြိယာ ၂ === {{mnw-verb}} # ကစိၚ် ကချေံသွက်သ္ဂောံဍိုက်တိတ်အာတရဴမွဲမွဲ ဟွံသေၚ်မ္ဂး သွက်သ္ဂောံပ္ဍိုက်ကပေါတ်မွဲမွဲ။ ==မန်လဒေါဝ်== ===နိရုတ်=== {{inh+|mkh-mmn|omx|က}} ===အက္ခရ်=== {{head|mkh-mmn|အက္ခရ်}} # ဗျန်မန်လဒေါဝ်မရနုက်မွဲ၊ ပၞောဝ်ကဵုဗျန်မန်လဒေါဝ်မၞုံတဴပိစှော်သုန်။ ===နာမ်=== {{head|mkh-mmn|နာမ်}} # [[က#မန်|က]]။ ===ကြိယာ=== {{head|mkh-mmn|ကြိယာ}} # ကစိၚ် ကချေံသွက်သ္ဂောံဍိုက်တိတ်အာတရဴမွဲမွဲ ဟွံသေၚ်မ္ဂး သွက်သ္ဂောံပ္ဍိုက်ကပေါတ်မွဲမွဲ။ ===မဒုၚ်လွဳစ=== * {{desc|mnw|က}} ==မန်တြေံ== ===နိရုတ်=== {{inh+|omx|mkh-pro|*kaʔ}} ===အက္ခရ်=== {{head|omx|အက္ခရ်}} # ဗျန်မန်တြေံမရနုက်မွဲ၊ ပၞောဝ်ကဵုဗျန်မန်တြေံမၞုံတဴပိစှော်သုန်။ ===နာမ်=== {{head|omx|နာမ်}} # [[က#မန်|က]]။ # ကသောဲသောဲမွဲဂကူ။ ===နာမ် ၂ === {{head|omx|နာမ်}} # ကစိၚ်၊ ကချေံ၊ လဟက်ချေံ။ ===ကြိယာ=== {{head|omx|ကြိယာ}} # သကဵုဖျီုလဟက်ကဵုချေံ။ ===ကြိယာ ၂ === {{head|omx|ကြိယာ}} # ဟွံက၊ ဟွံဒှ်။ ==ပါဠိမန်== ===နာမ်=== {{head|mnw-pi|နာမ်}} # ဍာ်။ ==ပါဠိ== ===ပွံၚ်အက္ခရ်နဲတၞဟ်=== {{pi-alt|Latn=ka}} ===သဗ္ဗနာမ်=== {{pi-pronoun|m}} # {{pi-sc||ka}} ====လဟုတ်စှ်ေ==== {{pi-decl-noun|g=m|novoc=yes |dats_mod=replace|dats=ကဿ|dats2=ကိဿ |abls_mod=replace|abls=ကသ္မာ|abls2=ကိသ္မာ |gens=ကိဿ |locs_mod=replace|locs=ကသ္မိံ|locs2=ကမှိ|locs3=ကိသ္မိံ|locs4=ကိမှိ |nomp_mod=replace|nomp=ကေ |datp_mod=replace|datp=ကေသံ|datp2=ကေသာနံ |genp_mod=replace|genp=ကေသံ|genp2=ကေသာနံ }} ===သဗ္ဗနာမ် ၂ === {{pi-pronoun|n}} # {{pi-sc||ka}} ====လဟုတ်စှ်ေ==== {{pi-decl-noun|g=n|novoc=yes |noms_mod=replace|noms=ကိံ |accs_mod=replace|accs=ကိံ |dats_mod=replace|dats=ကဿ|dats2=ကိဿ |abls_mod=replace|abls=ကသ္မာ|abls2=ကိသ္မာ |gens=ကိဿ |locs_mod=replace|locs=ကသ္မိံ|locs2=ကမှိ|locs3=ကိသ္မိံ|locs4=ကိမှိ |datp_mod=replace|datp=ကေသံ|datp2=ကေသာနံ |genp_mod=replace|genp=ကေသံ|genp2=ကေသာနံ }} ==မအရေဝ်ပံၚ်ကောံ== ===အက္ခရ်=== {{mul-letter|sc=Mymr}} # ဗျန်အက္ခရ် ''က'' ဆေၚ်စပ်ကဵု[[w:en:Mon–Burmese script|အက္ခရ်မန်–ဗၟာ]]။ ==ဗၟာ== ===ဗွဟ်ရမ္သာၚ်=== * {{my-IPA|က|+က}} * {{audio|my|My-က.oga}} ===အက္ခရ်=== {{head|my|အက္ခရ်}} # ဗျန်ဗၟာမရနုက်မွဲ၊ ပၞောဝ်ကဵုဗျန်ဗၟာမၞုံတဴပိစှော်ပိ၊ မကော်ခဴ {{l|my|ကကြီး}} အပ္ဍဲဘာသာဗၟာ။ ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|my|tbq-lob-pro|*ga³ ~ ʔga²}}၊ နကဵုအဆက်နူ {{inh|my|sit-pro|*ga}} ===ကြိယာ=== {{my-verb}} {{my-word-set|က|အက}} # သကဵုလှ်ေ။ ===နာမ်=== {{my-noun}} # ယူထလာ်မွဲသာ်။ ===ကြိယာ ၂ === {{my-verb}} # သကဵုဗ္ဂန်ချေံမွဲ ဝါ တိရစ္ဆာန်လ္ၚဵုမွဲလ္ၚာ်သွက်ကမၠောန်။ ===နာမ် ၂ === {{my-noun}} # ကစိၚ်၊ သၞာစးချေံ။ ====ကၞာတ်အမှိက်==== {{my-particle}} # ဂှ်။ #: {{ux|my|သူ'''က''' ဒီလို ပြောခဲ့တယ်|ဍေံ'''ဂှ်'''ဟီုလဝ်သာ်ဏံရ။}} ====ကဆံၚ်အကာဲအရာ==== {{my-postp}} # ပ္ဍဲ၊ လ္တူ။ # ဗီုပြၚ်။ ====သမ္ဗန္ဓ==== {{my-con}} # ယဝ်ရ။ #: {{ux|my|မိုး'''က'''ရွာရင်|'''ယဝ်ရ'''ဗြဴဂှ်ဂူတှ်ေ|inline=1}} ===နိရုတ်=== {{bor+|my|mnw|က}} ===နာမ် ၃ === {{my-noun}} # [[က#မန်|က]]။ ===ကြိယာ ၃ === {{my-verb}} # ဟွံက။ ==ရခေၚ်== ===အက္ခရ်=== {{head|rki|အက္ခရ်}} # ဗျန်ရခေၚ်မရနုက်မွဲ၊ ပၞောဝ်ကဵုဗျန်ရခေၚ်မၞုံတဴပိစှော်ပိ၊ မကော်ခဴ {{l|rki|ကကြီး}} အပ္ဍဲဘာသာရခေၚ်။ ===ဝိဘတ်=== {{head|rki|ဝိဘတ်}} # ဂှ်။ # ပ္ဍဲ။ # နကဵု။ # တှ်ေ။ # ယဝ်ရ။ ===ကြိယာ=== {{head|rki|ကြိယာ}} # ကုတ်၊ ကုတ်ဒန်။ ===ကြိယာ ၂ === {{head|rki|ကြိယာ}} # သကဵုလှ်ေ။ ===နာမ်=== {{head|rki|နာမ်}} # ကစိၚ်၊ သၞာစးချေံ။ ===ကြိယာ ၃=== {{head|rki|ကြိယာ}} # သကဵုဗ္ဂန်ချေံမွဲ ဝါ တိရစ္ဆာန်လ္ၚဵုမွဲလ္ၚာ်သွက်ကမၠောန်။ ==ကရၚ်ပဝ်လ္ပာ်ပလိုတ်== ===ဗွဟ်ရမ္သာၚ်=== *{{IPA|pwo|/kaʔ/}} ====အက္ခရ်==== {{head|pwo|အက္ခရ်}} # ဗျန်ကရၚ်ပဝ်လ္ပာ်ပလိုတ်မရနုက်မွဲ၊ ပၞောဝ်ကဵု[[w: en:Western Pwo alphabet|ဗျန်ကရၚ်ပဝ်လ္ပာ်ပလိုတ်မၞုံတဴၜါစှော်တရဴ]]၊ မကော်ခဴ {{l|pwo|ကၭ}} အပ္ဍဲဘာသာကရၚ်ပဝ်လ္ပာ်ပလိုတ်။ ===ဗွဟ်ရမ္သာၚ် ၂ === *{{IPA|pwo|/kə/}} ====ကၞာတ်အမှိက်==== {{head|pwo|particle}} # ဏောၚ်။ #: {{ux|pwo|[[ယ]]'''က'''[[လ့ၩ]].|အဲအာ'''ဏောၚ်'''။}} ===ပွံၚ်နဲတၞဟ်=== * {{l|pwo|လၧၫ့}} ===ဗွဟ်ရမ္သာၚ် ၃ === *{{IPA|pwo|/kə/}} ====ဂၞန်သၚ်္ချာ==== {{head|pwo|numeral}} # မွဲ။ #: {{ux|pwo|[[ၦၡၩ]]'''က'''[[ဂၩ]]|မၞိဟ်'''မွဲ'''။}} ==ကရေၚ်ပဝ်လ္ပာ်ဗၟံက်== ===အက္ခရ်=== {{head|kjp|အက္ခရ်}} # ဗျန်ကရေၚ်ပဝ်လ္ပာ်ဗၟံက်မရနုက်မွဲ၊ ပၞောဝ်ကဵုဗျန်ကရေၚ်ပဝ်လ္ပာ်ဗၟံက်မၞုံတဴပိစှော်တရဴ။ tgn85y6wzutg8hk5j6wl8hrbfkr0inb 397746 397743 2026-07-02T00:53:20Z 咽頭べさ 33 397746 wikitext text/x-wiki {{also/auto}} {{character info|image=Ka Mon and Burmese.gif}} =={{=mnw=}}== ===နိရုတ်=== {{inh+|mnw|mkh-mmn|က}}၊ နကဵုအဆက်နူ {{inh|mnw|omx|က}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|mnw|/kaʔ/}} * {{audio|mnw|က Ka -mnw.ogg}} ===အက္ခရ်=== {{head|mnw|အက္ခရ်}} # ဗျန်မန်မရနုက်မွဲ၊ ပၞောဝ်ကဵုဗျန်မန်မၞုံတဴပိစှော်သုန်။ ===နာမ်=== {{mnw-noun}} # သတ်မဒီုဒက်ပ္ဍဲဍာ်မွဲဂကူ၊ ယီုကဵုခၟာ်၊ ဍေံတံဒှ်သတ်မၞုံကဵုဆီဂကူၜိုဟ်ၜိုဟ်၊ ဗွဲမဂၠိုၚ်ဍေံတံမၞုံကဵုခစှ်ေ၊ မၞုံကဵုနၚ် သၞေၚ် ပၠာဗ္တသွက်သ္ဂောံတ္ၜိၚ်အာကၠုၚ်ပ္ဍဲဍာ် ညံၚ်ရဴဇိုၚ်တဲ၊ ကမၞုံဂၠိုၚ်ကဵုဂကူ၊ ဒှ်စၞသွက်အမာဲသွမၞိဟ်။ ===နာမ် ၂ === {{mnw-noun}} # ကဝ၊ လေံထံက်၊ ဂၠဴ၊ လေံဂါန်၊ မဒှ်မထံက်လဝ်နကဵုဂၠဴ။ # အခု၊ အခိုံ၊ ဇွောံခု၊ ဂွဳ၊ ဒၞဳ။ ===နာမ် ၃ === {{mnw-noun}} # ကစိၚ်၊ ဒိန်ဒြၚ်၊ ဒေန်ဒြၚ်၊ သရေၚ်၊ သရေၚ်စိၚ်။ # ကချေံ၊ ဇုက်လဟက်ချေံ၊ ဇုက်လဟက်လဝ်သွက်သ္ဂောံကချေံ၊ ဖုန်ချေံ။ ===နာမ် ၄ === {{mnw-noun}} # {{alt form|mnw|ကအရံၚ်}} ===ကြိယာ=== {{mnw-verb}} # (ကြိယာအဆက်ဗွဲကြဴ) ဟွံ၊ ဟွံက၊ ဟွံကမွဲ၊ ဟွံကမွဲပြကာ။ #: {{ux|mnw|ရုံဟွံကပဵုသှာတ်အာဣရ။|}} ===ကြိယာ ၂ === {{mnw-verb}} # ကစိၚ် ကချေံသွက်သ္ဂောံဍိုက်တိတ်အာတရဴမွဲမွဲ ဟွံသေၚ်မ္ဂး သွက်သ္ဂောံပ္ဍိုက်ကပေါတ်မွဲမွဲ။ ==မန်လဒေါဝ်== ===နိရုတ်=== {{inh+|mkh-mmn|omx|က}} ===အက္ခရ်=== {{head|mkh-mmn|အက္ခရ်}} # ဗျန်မန်လဒေါဝ်မရနုက်မွဲ၊ ပၞောဝ်ကဵုဗျန်မန်လဒေါဝ်မၞုံတဴပိစှော်သုန်။ ===နာမ်=== {{head|mkh-mmn|နာမ်}} # [[က#မန်|က]]။ ===ကြိယာ=== {{head|mkh-mmn|ကြိယာ}} # ကစိၚ် ကချေံသွက်သ္ဂောံဍိုက်တိတ်အာတရဴမွဲမွဲ ဟွံသေၚ်မ္ဂး သွက်သ္ဂောံပ္ဍိုက်ကပေါတ်မွဲမွဲ။ ===မဒုၚ်လွဳစ=== * {{desc|mnw|က}} ==မန်တြေံ== ===နိရုတ်=== {{inh+|omx|mkh-pro|*kaʔ}} ===အက္ခရ်=== {{head|omx|အက္ခရ်}} # ဗျန်မန်တြေံမရနုက်မွဲ၊ ပၞောဝ်ကဵုဗျန်မန်တြေံမၞုံတဴပိစှော်သုန်။ ===နာမ်=== {{head|omx|နာမ်}} # [[က#မန်|က]]။ # ကသောဲသောဲမွဲဂကူ။ ===နာမ် ၂ === {{head|omx|နာမ်}} # ကစိၚ်၊ ကချေံ၊ လဟက်ချေံ။ ===ကြိယာ=== {{head|omx|ကြိယာ}} # သကဵုဖျီုလဟက်ကဵုချေံ။ ===ကြိယာ ၂ === {{head|omx|ကြိယာ}} # ဟွံက၊ ဟွံဒှ်။ ===မဒုၚ်လွဳစ=== * {{desctree|mkh-mmn|က}} ==ပါဠိမန်== ===နာမ်=== {{head|mnw-pi|နာမ်}} # ဍာ်။ ==ပါဠိ== ===ပွံၚ်အက္ခရ်နဲတၞဟ်=== {{pi-alt|Latn=ka}} ===သဗ္ဗနာမ်=== {{pi-pronoun|m}} # {{pi-sc||ka}} ====လဟုတ်စှ်ေ==== {{pi-decl-noun|g=m|novoc=yes |dats_mod=replace|dats=ကဿ|dats2=ကိဿ |abls_mod=replace|abls=ကသ္မာ|abls2=ကိသ္မာ |gens=ကိဿ |locs_mod=replace|locs=ကသ္မိံ|locs2=ကမှိ|locs3=ကိသ္မိံ|locs4=ကိမှိ |nomp_mod=replace|nomp=ကေ |datp_mod=replace|datp=ကေသံ|datp2=ကေသာနံ |genp_mod=replace|genp=ကေသံ|genp2=ကေသာနံ }} ===သဗ္ဗနာမ် ၂ === {{pi-pronoun|n}} # {{pi-sc||ka}} ====လဟုတ်စှ်ေ==== {{pi-decl-noun|g=n|novoc=yes |noms_mod=replace|noms=ကိံ |accs_mod=replace|accs=ကိံ |dats_mod=replace|dats=ကဿ|dats2=ကိဿ |abls_mod=replace|abls=ကသ္မာ|abls2=ကိသ္မာ |gens=ကိဿ |locs_mod=replace|locs=ကသ္မိံ|locs2=ကမှိ|locs3=ကိသ္မိံ|locs4=ကိမှိ |datp_mod=replace|datp=ကေသံ|datp2=ကေသာနံ |genp_mod=replace|genp=ကေသံ|genp2=ကေသာနံ }} ==မအရေဝ်ပံၚ်ကောံ== ===အက္ခရ်=== {{mul-letter|sc=Mymr}} # ဗျန်အက္ခရ် ''က'' ဆေၚ်စပ်ကဵု[[w:en:Mon–Burmese script|အက္ခရ်မန်–ဗၟာ]]။ ==ဗၟာ== ===ဗွဟ်ရမ္သာၚ်=== * {{my-IPA|က|+က}} * {{audio|my|My-က.oga}} ===အက္ခရ်=== {{head|my|အက္ခရ်}} # ဗျန်ဗၟာမရနုက်မွဲ၊ ပၞောဝ်ကဵုဗျန်ဗၟာမၞုံတဴပိစှော်ပိ၊ မကော်ခဴ {{l|my|ကကြီး}} အပ္ဍဲဘာသာဗၟာ။ ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|my|tbq-lob-pro|*ga³ ~ ʔga²}}၊ နကဵုအဆက်နူ {{inh|my|sit-pro|*ga}} ===ကြိယာ=== {{my-verb}} {{my-word-set|က|အက}} # သကဵုလှ်ေ။ ===နာမ်=== {{my-noun}} # ယူထလာ်မွဲသာ်။ ===ကြိယာ ၂ === {{my-verb}} # သကဵုဗ္ဂန်ချေံမွဲ ဝါ တိရစ္ဆာန်လ္ၚဵုမွဲလ္ၚာ်သွက်ကမၠောန်။ ===နာမ် ၂ === {{my-noun}} # ကစိၚ်၊ သၞာစးချေံ။ ====ကၞာတ်အမှိက်==== {{my-particle}} # ဂှ်။ #: {{ux|my|သူ'''က''' ဒီလို ပြောခဲ့တယ်|ဍေံ'''ဂှ်'''ဟီုလဝ်သာ်ဏံရ။}} ====ကဆံၚ်အကာဲအရာ==== {{my-postp}} # ပ္ဍဲ၊ လ္တူ။ # ဗီုပြၚ်။ ====သမ္ဗန္ဓ==== {{my-con}} # ယဝ်ရ။ #: {{ux|my|မိုး'''က'''ရွာရင်|'''ယဝ်ရ'''ဗြဴဂှ်ဂူတှ်ေ|inline=1}} ===နိရုတ်=== {{bor+|my|mnw|က}} ===နာမ် ၃ === {{my-noun}} # [[က#မန်|က]]။ ===ကြိယာ ၃ === {{my-verb}} # ဟွံက။ ==ရခေၚ်== ===အက္ခရ်=== {{head|rki|အက္ခရ်}} # ဗျန်ရခေၚ်မရနုက်မွဲ၊ ပၞောဝ်ကဵုဗျန်ရခေၚ်မၞုံတဴပိစှော်ပိ၊ မကော်ခဴ {{l|rki|ကကြီး}} အပ္ဍဲဘာသာရခေၚ်။ ===ဝိဘတ်=== {{head|rki|ဝိဘတ်}} # ဂှ်။ # ပ္ဍဲ။ # နကဵု။ # တှ်ေ။ # ယဝ်ရ။ ===ကြိယာ=== {{head|rki|ကြိယာ}} # ကုတ်၊ ကုတ်ဒန်။ ===ကြိယာ ၂ === {{head|rki|ကြိယာ}} # သကဵုလှ်ေ။ ===နာမ်=== {{head|rki|နာမ်}} # ကစိၚ်၊ သၞာစးချေံ။ ===ကြိယာ ၃=== {{head|rki|ကြိယာ}} # သကဵုဗ္ဂန်ချေံမွဲ ဝါ တိရစ္ဆာန်လ္ၚဵုမွဲလ္ၚာ်သွက်ကမၠောန်။ ==ကရၚ်ပဝ်လ္ပာ်ပလိုတ်== ===ဗွဟ်ရမ္သာၚ်=== *{{IPA|pwo|/kaʔ/}} ====အက္ခရ်==== {{head|pwo|အက္ခရ်}} # ဗျန်ကရၚ်ပဝ်လ္ပာ်ပလိုတ်မရနုက်မွဲ၊ ပၞောဝ်ကဵု[[w: en:Western Pwo alphabet|ဗျန်ကရၚ်ပဝ်လ္ပာ်ပလိုတ်မၞုံတဴၜါစှော်တရဴ]]၊ မကော်ခဴ {{l|pwo|ကၭ}} အပ္ဍဲဘာသာကရၚ်ပဝ်လ္ပာ်ပလိုတ်။ ===ဗွဟ်ရမ္သာၚ် ၂ === *{{IPA|pwo|/kə/}} ====ကၞာတ်အမှိက်==== {{head|pwo|particle}} # ဏောၚ်။ #: {{ux|pwo|[[ယ]]'''က'''[[လ့ၩ]].|အဲအာ'''ဏောၚ်'''။}} ===ပွံၚ်နဲတၞဟ်=== * {{l|pwo|လၧၫ့}} ===ဗွဟ်ရမ္သာၚ် ၃ === *{{IPA|pwo|/kə/}} ====ဂၞန်သၚ်္ချာ==== {{head|pwo|numeral}} # မွဲ။ #: {{ux|pwo|[[ၦၡၩ]]'''က'''[[ဂၩ]]|မၞိဟ်'''မွဲ'''။}} ==ကရေၚ်ပဝ်လ္ပာ်ဗၟံက်== ===အက္ခရ်=== {{head|kjp|အက္ခရ်}} # ဗျန်ကရေၚ်ပဝ်လ္ပာ်ဗၟံက်မရနုက်မွဲ၊ ပၞောဝ်ကဵုဗျန်ကရေၚ်ပဝ်လ္ပာ်ဗၟံက်မၞုံတဴပိစှော်တရဴ။ gg1roo7472umt0xooxoi9ztvg5lzlto ကဏ္ဍ:နာမ်ရခေၚ်ဂမၠိုၚ် 14 2225 397742 166524 2026-07-01T16:08:48Z 咽頭べさ 33 咽頭べさ ပြံင်ပဆုဲလဝ် မုက်လိက် [[ကဏ္ဍ:နာမ် ရခေၚ်]] ဇရေင် [[ကဏ္ဍ:နာမ်ရခေၚ်ဂမၠိုၚ်]] သီုကဵု ဟွံဂွံ ဂိုင်စွံလဝ် မကလေင်ပညုင် 163520 wikitext text/x-wiki [[ကဏ္ဍ:ဘာသာရခေၚ်]] so59o4h3koox6g89rni3jkznp6ud87p ကဏ္ဍ:ဝေါဟာအဓိကရခေၚ်ဂမၠိုၚ် 14 2229 397741 275062 2026-07-01T16:08:15Z 咽頭べさ 33 咽頭べさ ပြံင်ပဆုဲလဝ် မုက်လိက် [[ကဏ္ဍ:ဝေါဟာရခေၚ်နွံပ္ဍဲအဘိဓာန်ဂမၠိုၚ်]] ဇရေင် [[ကဏ္ဍ:ဝေါဟာအဓိကရခေၚ်ဂမၠိုၚ်]] သီုကဵု ဟွံဂွံ ဂိုင်စွံလဝ် မကလေင်ပညုင် 275062 wikitext text/x-wiki [[ကဏ္ဍ:ဘာသာရခေၚ်]] so59o4h3koox6g89rni3jkznp6ud87p ကဏ္ဍ:ယူနဳကုဒ် မန်ဗၟာ 14 4279 397749 273829 2026-07-02T00:57:26Z 咽頭べさ 33 咽頭べさ ပြံင်ပဆုဲလဝ် မုက်လိက် [[ကဏ္ဍ:ယူနဳကုဒ် ဍုၚ်ဗၟာ]] ဇရေင် [[ကဏ္ဍ:ယူနဳကုဒ် မန်ဗၟာ]] သီုကဵု ဟွံဂွံ ဂိုင်စွံလဝ် မကလေင်ပညုင် 273829 wikitext text/x-wiki [[ကဏ္ဍ:ဒၞာဲအခဝ်ယူနဳကုဒ်ဂမၠိုၚ်]] ak38aisd37thdp65kqkgyaqadjtvgs8 ကဏ္ဍ:မအရေဝ်ဘာသာကရၚ်ပဝ်လ္ပာ်ပလိုတ်သုၚ်စောဲလဝ်ဝေါဟာထ္ၜးဥပမာဂမၠိုၚ် 14 9239 397754 276516 2026-07-02T01:01:57Z 咽頭べさ 33 咽頭べさ ပြံင်ပဆုဲလဝ် မုက်လိက် [[ကဏ္ဍ:သုၚ်စောဲဝေါဟာကရၚ်ပဝ်လပါက်ပၠိုတ်ထ္ၜးဥပမာဂမၠိုၚ်]] ဇရေင် [[ကဏ္ဍ:မအရေဝ်ဘာသာကရၚ်ပဝ်လ္ပာ်ပလိုတ်သုၚ်စောဲလဝ်ဝေါဟာထ္ၜးဥပမာဂမၠိုၚ်]] သီုကဵု ဟွံဂွံ ဂိုင်စွံလဝ် မကလေင်ပညုင် 276516 wikitext text/x-wiki [[ကဏ္ဍ:ဘာသာကရၚ်ပဝ်လ္ပာ်ပလိုတ်]] e9fiqptpuhm9u1fpe38vihbt6tce3aq ထဝ် 0 19798 397737 397732 2026-07-01T14:59:00Z 咽頭べさ 33 397737 wikitext text/x-wiki =={{=mnw=}}== ===နိရုတ်=== {{inh+|mnw|mkh-mmn|ထဝ်}}၊ နကဵုအဆက်နူ {{inh|mnw|omx|ထရ်}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|mnw|/tʰɔ/|a=Myanmar}} * {{IPA|mnw|/tʰɔː/|a=Thailand}} * {{audio|mnw|LL-Q13349 (mnw)-咽頭べさ-ထဝ်.wav}} ===နာမ်=== {{mnw-noun}} # ဖ္ကောဝ်မၞုံကဵုအရံၚ်သာ်ဍာ်မိတ်မွဲဂကူ၊ မၞုံကဵုၚုဟ်မး၊ ညးမရပ်စပ်စကာဍေံပ္ဍဲဒၞာဲမကၠောန်ပ္တိတ်တၚ်္ကာ၊ ပ္ဍဲကဵုမကၠောန်ကပေါတ်ကယျိုၚ်ကယျဝ်၊ ပ္ဍဲကဵုကပေါတ်မစြံက်စုတ်လဝ်မတ်မၞုံကဵုၚုဟ်မးနာနာသာ်၊ ဟေမ၊ ဇာတရုပ်၊ ဇမ္မူနတ်၊ သုဝဏ္ဏာ။ ==={{Translate}}=== {{VN |my=[[ရွှေ]] |en=[[gold]] |ko=[[금]] |th=[[ทอง]] |ar= [[مُذَهَّب‎]] |km=[[មាស]] |lo=[[ທອງ]] |shn=[[ၶမ်း]] }} ==မန်လဒေါဝ်== ===နိရုတ်=== {{inh+|mkh-mmn|omx|ထရ်}} ===နာမ်=== {{head|mkh-mmn|နာမ်}} # [[ထဝ်#မန်|ထဝ်]]။ ===မဒုၚ်လွဳစ=== * {{desc|mnw|ထဝ်}} i30euiv4igexnon2zwb62xuvr8kkl16 397738 397737 2026-07-01T15:05:11Z 咽頭べさ 33 397738 wikitext text/x-wiki =={{=mnw=}}== ===နိရုတ်=== {{inh+|mnw|mkh-mmn|ထဝ်}}၊ နကဵုအဆက်နူ {{inh|mnw|omx|ထရ်}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|mnw|/tʰɔ/|a=Myanmar}} * {{IPA|mnw|/tʰɔː/|a=Thailand}} * {{audio|mnw|LL-Q13349 (mnw)-咽頭べさ-ထဝ်.wav}} ===နာမ်=== {{mnw-noun}} # ဖ္ကောဝ်မၞုံကဵုအရံၚ်သာ်ဍာ်မိတ်မွဲဂကူ၊ မၞုံကဵုၚုဟ်မး၊ ညးမရပ်စပ်စကာဍေံပ္ဍဲဒၞာဲမကၠောန်ပ္တိတ်တၚ်္ကာ၊ ပ္ဍဲကဵုမကၠောန်ကပေါတ်ကယျိုၚ်ကယျဝ်၊ ပ္ဍဲကဵုကပေါတ်မစြံက်စုတ်လဝ်မတ်မၞုံကဵုၚုဟ်မးနာနာသာ်၊ ဟေမ၊ ဇာတရုပ်၊ ဇမ္မူနတ်၊ သုဝဏ္ဏာ။ ==={{Translate}}=== {{VN |my=[[ရွှေ]] |en=[[gold]] |ko=[[금]] |th=[[ทอง]] |ar= [[مُذَهَّب‎]] |km=[[មាស]] |lo=[[ທອງ]] |shn=[[ၶမ်း]] }} ==မန်လဒေါဝ်== ===နိရုတ်=== {{inh+|mkh-mmn|omx|ထရ်}} ===နာမ်=== {{head|mkh-mmn|နာမ်}} # [[ထဝ်#မန်|ထဝ်]]။ ===မဒုၚ်လွဳစ=== * {{desc|mnw|ထဝ်}} =={{=shn=}}== ===ဗွဟ်ရမ္သာၚ်=== {{shn-pron|ထဝ်}} ====နာမ်==== {{shn-noun}} # ရမျာၚ်မဂၠိၚ်။ # လာၚ်သွဵုမ။ 9kkii62nbrh6au2ofl44mo7b2fckr7x မဝ်ဂျူ:es-verb 828 28544 397771 397713 2026-07-02T11:49:16Z 咽頭べさ 33 397771 Scribunto text/plain local export = {} --[=[ Authorship: Ben Wing <benwing2> ]=] --[=[ TERMINOLOGY: -- "slot" = A particular combination of tense/mood/person/number/etc. Example slot names for verbs are "pres_1s" (present indicative first-person singular), "pres_sub_2sv" (present subjunctive second-person singular voseo form) "impf_sub_ra_3p" (imperfect subjunctive -ra form third-person plural), "imp_1p_comb_lo" (imperative first-person plural combined with clitic [[lo]]). Each slot is filled with zero or more forms. -- "form" = The conjugated Spanish form representing the value of a given slot. -- "lemma" = The dictionary form of a given Spanish term. For Spanish, always the infinitive. ]=] --[=[ FIXME: 1. Implement no_pres_stressed for aterir, garantir. (NOTE: Per RAE, garantir used in all forms in Argentina/Uruguay.) [DONE] 2. Support concluyo. [DONE] 3. Fixes for veo -> ve vs. preveo -> prevé. [DONE] 4. Various more irregular verbs, e.g. predecir, redecir, bendecir, maldecir. [DONE] 5. Raising of e -> i, o -> u before -iendo, -ió, etc. occurs only in -ir verbs. [DONE] 6. Raising of e -> i, o -> u happens before subjunctive -amos, -áis in -ir verbs. [DONE] 7. Implement reflexive verbs. [DONE] 8. Implement categories. [DONE] 9. Implement show_forms. [DONE] 10. Reconcile stems.vowel_alt from irregular verbs with vowel_alt from indicators. May require moving the irregular-verb handling code in construct_stems() into detect_indicator_spec(). [DONE] 11. Implement make_table. [DONE] 12. Vowel alternation should show u-ue (jugar), i-ie (adquirir), e-í (reír) alternations specially. [DONE] 13. Handle linking of multiword forms as is done in [[Module:es-headword]]. [DONE] 14. Implement comparison against previous module. [DONE] 15. Implement categorization of irregularities for individual tenses. 16. Support nocomb=1. [DONE] 17. (Possibly) display irregular forms in a different color, as with the old module. 18. (Possibly) display a "rule" description indicating the types of alternations. 19. Implement replace_reflexive_indicators(). [NOT DONE; SUPPORT REMOVED] 20. Implement verbs with attached clitics e.g. [[pasarlo]], [[corrérsela]]. [DONE] 21. When footnote + tú/vos notation, add a space before tú/vos. 22. Fix [[erguir]] so ie-i vowel alternation produces ye- at beginning of word, similarly for errar. Also allow multiple vowel alternation specs in irregular verbs, for errar. Finally, ie should show as e-ye for errar and as e-ye-i for erguir. [DONE] 23. Figure out why red links in combined forms show up as black not red. 24. Consider including alternative superseded forms of verbs like [[ciar]] (e.g. pret_3s = cio, ció with footnote). 25. Allow conjugation of suffixes e.g. -ir, -ecer; need to fix in [[Module:inflection utilities]]. [DONE] 26. Allow specification of stems esp. so that footnotes can be hung off them; use + for the default. 27. Don't remove monosyllabic accents when conjugating suffixes. [DONE] 28. If multiword expression with no <>, add <> after first word, as with [[Module:es-headword]]. [DONE] 29. (Possibly) link the parts of a reflexive or cliticized infinitive, as done in [[Module:es-headword]]. [DONE] 30. Final fixes to allow [[Module:es-headword]] to use this module. [DONE] --]=] local lang = require("Module:languages").getByCode("es") local m_string_utilities = require("Module:string utilities") local m_links = require("Module:links") local m_table = require("Module:table") local iut = require("Module:inflection utilities") local put = require("Module:parse utilities") local com = require("Module:es-common") local force_cat = false -- set to true for debugging local check_for_red_links = false -- set to false for debugging local rfind = mw.ustring.find local rmatch = mw.ustring.match local rsplit = mw.text.split local rsub = com.rsub local unpack = unpack or table.unpack -- Lua 5.2 compatibility local function link_term(term) return m_links.full_link({ lang = lang, term = term }, "term") end local V = com.V -- vowel regex class local AV = com.AV -- accented vowel regex class local C = com.C -- consonant regex class local tuteo_link = link_term("tuteo") local voseo_link = link_term("voseo") local fut_sub_note = "[rare; now chiefly used in legal language]" local pres_sub_voseo_note = "[Argentine and Uruguayan " .. voseo_link .. " prefers the " .. tuteo_link .. "-form for the present subjunctive]" local vowel_alternants = m_table.listToSet({"ie", "ie-i", "ye", "ye-i", "ue", "ue-u", "hue", "i", "í", "ú", "+"}) local vowel_alternant_to_desc = { ["ie"] = "e-ie", ["ie-i"] = "e-ie-i", ["ye"] = "e-ye", ["ye-i"] = "e-ye-i", ["ue"] = "o-ue", ["ue-u"] = "o-ue-u", ["hue"] = "o-hue", ["i"] = "e-i", ["í"] = "i-í", ["ú"] = "u-ú", } local raise_vowel = {["e"] = "i", ["o"] = "u"} local all_persons_numbers = { ["1s"] = "1|s", ["2s"] = "2|s", ["2sv"] = "2|s|voseo", ["3s"] = "3|s", ["1p"] = "1|p", ["2p"] = "2|p", ["3p"] = "3|p", } local person_number_list_basic = {"1s", "2s", "3s", "1p", "2p", "3p"} local person_number_list_voseo = {"1s", "2s", "2sv", "3s", "1p", "2p", "3p"} local imp_person_number_list = {"2s", "2sv", "3s", "1p", "2p", "3p"} local neg_imp_person_number_list = {"2s", "3s", "1p", "2p", "3p"} person_number_to_reflexive_pronoun = { ["1s"] = "me", ["2s"] = "te", ["2sv"] = "te", ["3s"] = "se", ["1p"] = "nos", ["2p"] = "os", ["3p"] = "se", } local indicator_flags = m_table.listToSet { "no_pres_stressed", "no_pres1_and_sub", "only3s", "only3sp", "only3p", "no_built_in", } -- Initialize all the slots for which we generate forms. The particular slots may depend on whether we're generating -- combined slots (`not alternant_multiword_spec.nocomb`, which is always false if we're dealing with a verb with an -- attached clitic, such as [[hincarla]], or a reflexive or partly-reflexive verb, where a partly-reflexive verb is -- a conjoined term made up of two or more verbs, where some but not all are reflexive). It may also depend on whether -- we're being requested to generate some double-combined forms, such as [[llevándoselo]]; see the comment below for -- `verb_slot_double_combined_rows`. local function add_slots(alternant_multiword_spec) -- "Basic" slots: All slots that go into the regular table (not the combined-form table). alternant_multiword_spec.verb_slots_basic = { {"infinitive", "inf"}, {"infinitive_linked", "inf"}, {"gerund", "ger"}, {"pp_ms", "m|s|past|part"}, {"pp_fs", "f|s|past|part"}, {"pp_mp", "m|p|past|part"}, {"pp_fp", "f|p|past|part"}, } -- Slots that go into the combined-form table, along with double-combined slots (e.g. [[llevándoselo]]) that are -- requested for use with {{es-verb form of}}. alternant_multiword_spec.verb_slots_combined = {} -- Special slots used to handle non-reflexive parts of reflexive verbs in {{es-verb form of}}. -- For example, for a reflexive-only verb like [[jambarse]], we want to be able to use {{es-verb form of}} on -- [[jambe]] (which should mention that it is a part of 'me jambe', first-person singular present subjunctive, and -- 'se jambe', third-person singular present subjunctive) or on [[jambamos]] (which should mention that it is a -- part of 'nos jambamos', first-person plural present indicative or preterite). Similarly, we want to use -- {{es-verb form of}} on [[jambando]] (which should mention that it is a part of 'se ... jambando', syntactic -- variant of [[jambándose]], which is the gerund of [[jambarse]]). To do this, we need to be able to map -- non-reflexive parts like [[jambe]], [[jambamos]], [[jambando]], etc. to their reflexive equivalent(s), to the -- tag(s) of the equivalent(s), and, in the case of forms like [[jambando]], [[jambar]] and imperatives, to the -- separated syntactic variant of the verb+clitic combination. We do this by creating slots for the non-reflexive -- part equivalent of each basic reflexive slot, and for the separated syntactic-variant equivalent of each basic -- reflexive slot that is formed of verb+clitic. We use slots in this way to deal with multiword lemmas. Note that -- we run into difficulties mapping between reflexive verbs, non-reflexive part equivalents, and separated syntactic -- variants if a slot contains more than one form. To handle this, if there are the same number of forms in two -- slots we're trying to match up, we assume the forms match one-to-one; otherwise we don't match up the two slots -- (which means {{es-verb form of}} won't work in this case, but such a case is extremely rare and not worth -- worrying about). Alternatives that handle this "properly" are significantly more complicated and require -- non-trivial modifications to [[Module:inflection utilities]]. local need_special_verb_form_of_slots = alternant_multiword_spec.source_template == "es-verb form of" and alternant_multiword_spec.refl if need_special_verb_form_of_slots then alternant_multiword_spec.verb_slots_reflexive_verb_form_of = { {"infinitive_non_reflexive", "-"}, {"infinitive_variant", "-"}, {"gerund_non_reflexive", "-"}, {"gerund_variant", "-"}, } else alternant_multiword_spec.verb_slots_reflexive_verb_form_of = {} end -- For generating combined forms, i.e. combinations of a basic form (specifically, infinitive, gerund or an -- imperative form) with a clitic (or in some cases, two clitics). This is a list of lists of the form -- {BASIC_SLOT, CLITICS} where BASIC_SLOT is the slot to add the clitic pronouns to (e.g. "gerund" or "imp_2s") -- and CLITICS is a list of the clitic pronouns to add. alternant_multiword_spec.verb_slot_combined_rows = {} -- For generating double combined forms (e.g. [[llevándoselo]] or [[dámela]]). This is used by {{es-verb form of}} -- when it detects that it is being requested to find the inflection tags for a double-combined form. The number of -- double-combined forms is relatively large, so to optimize this, [[Module:es-inflections]] (which implements -- {{es-verb form of}}) detects which two clitics are involved, and we only generate double-combined forms -- involving those two clitics; this is specified using `double_combined_forms_to_include`, passed into -- do_generate_forms(). The value of this field is a list of lists of the form {SINGLE_COMB_SLOT, CLITICS} where -- SINGLE_COMB_SLOT is the single-combined slot to add the object clitic pronouns to (e.g. "gerund_comb_se" or -- "imp_2s_comb_me") and CLITICS is a list of the clitic pronouns to add. CLITICS will normally be a length-one -- list whose value is one of {"lo", "la", "le", "los", "las", "les"}. alternant_multiword_spec.verb_slot_double_combined_rows = {} -- Add entries for a slot with person/number variants. -- `verb_slots` is the table to add to. -- `slot_prefix` is the prefix of the slot, typically specifying the tense/aspect. -- `tag_suffix` is a string listing the set of inflection tags to add after the person/number tags. -- `person_number_list` is a list of the person/number slot suffixes to add to `slot_prefix`. local function add_personal_slot(verb_slots, slot_prefix, tag_suffix, person_number_list) for _, persnum in ipairs(person_number_list) do local persnum_tag = all_persons_numbers[persnum] local slot = slot_prefix .. "_" .. persnum local accel = persnum_tag .. "|" .. tag_suffix table.insert(verb_slots, {slot, accel}) end end -- Add a personal slot (i.e. a slot with person/number variants) to `verb_slots_basic`. local function add_basic_personal_slot(slot_prefix, tag_suffix, person_number_list, no_special_verb_form_of_slot, need_variant_slot) add_personal_slot(alternant_multiword_spec.verb_slots_basic, slot_prefix, tag_suffix, person_number_list) -- Add special slots for handling non-reflexive parts of reflexive verbs in {{es-verb form of}}. -- See comment above in `need_special_verb_form_of_slots`. if need_special_verb_form_of_slots and not no_special_verb_form_of_slot then for _, persnum in ipairs(person_number_list) do local persnum_tag = all_persons_numbers[persnum] local basic_slot = slot_prefix .. "_" .. persnum local accel = persnum_tag .. "|" .. tag_suffix table.insert(alternant_multiword_spec.verb_slots_reflexive_verb_form_of, {basic_slot .. "_non_reflexive", "-"}) if need_variant_slot then table.insert(alternant_multiword_spec.verb_slots_reflexive_verb_form_of, {basic_slot .. "_variant", "-"}) end end end end add_basic_personal_slot("pres", "pres|ind", person_number_list_voseo) add_basic_personal_slot("impf", "impf|ind", person_number_list_basic) add_basic_personal_slot("pret", "pret|ind", person_number_list_basic) add_basic_personal_slot("fut", "fut|ind", person_number_list_basic) add_basic_personal_slot("cond", "cond", person_number_list_basic) add_basic_personal_slot("pres_sub", "pres|sub", person_number_list_voseo) add_basic_personal_slot("impf_sub_ra", "impf|sub", person_number_list_basic) add_basic_personal_slot("impf_sub_se", "impf|sub", person_number_list_basic) add_basic_personal_slot("fut_sub", "fut|sub", person_number_list_basic) -- Need variant slots because the imperative clitics are suffixed. add_basic_personal_slot("imp", "imp", imp_person_number_list, nil, "need variant slot") -- Don't need special non-reflexive-part slots because the negative imperative is multiword, of which the -- individual words are 'no' + subjunctive. add_basic_personal_slot("neg_imp", "neg|imp", neg_imp_person_number_list, "no special verb form of") -- Don't need special non-reflexive-part slots because we don't want [[jambando]] mapping to [[jambándome]] -- (only [[jambándose]]) or [[jambar]] mapping to [[jambarme]] (only [[jambarse]]). add_basic_personal_slot("infinitive", "inf", person_number_list_basic, "no special verb form of") add_basic_personal_slot("gerund", "ger", person_number_list_basic, "no special verb form of") local third_person_object_clitics = {"lo", "la", "le", "los", "las", "les"} -- Add combined-form slots. if not alternant_multiword_spec.nocomb then -- Add a row of slots representing the combination of a basic slot with a clitic. `basic_slot` is the basic slot -- descriptor, `tag_prefix` is a string describing the inflection tags of the basic slot, and `personal_clitics` -- is a list of the personal clitics ("me", "te", "se", "nos" or "os") to add to the basic slot. local function add_combined_slot_row(basic_slot, tag_prefix, personal_clitics) -- First, add each individual combined slot to `verb_slots_combined`. local clitics_with_object = m_table.append(personal_clitics, third_person_object_clitics) for _, clitic in ipairs(clitics_with_object) do local slot = basic_slot .. "_comb_" .. clitic -- You have to pass this through full_link() to get a Spanish-specific link local accel = tag_prefix .. "|combined with [[" .. clitic .. "]]" table.insert(alternant_multiword_spec.verb_slots_combined, {slot, accel}) end -- Also, add the row to `verb_slot_combined_rows`. table.insert(alternant_multiword_spec.verb_slot_combined_rows, {basic_slot, clitics_with_object}) -- Also do double-combined forms for a specific set of clitics, if requested. See the comment above -- `verb_slot_double_combined_rows` above. if alternant_multiword_spec.double_combined_forms_to_include then -- Add a special "lxx" clitic for le/les when transformed into se in double-combined forms. local personal_clitics_with_lxx = {unpack(personal_clitics)} table.insert(personal_clitics_with_lxx, "lxx") for _, personal_clitic in ipairs(personal_clitics_with_lxx) do for _, object_clitic in ipairs(third_person_object_clitics) do for _, form_to_include in ipairs(alternant_multiword_spec.double_combined_forms_to_include) do local to_include_personal_clitic, to_include_object_clitic = unpack(form_to_include) if personal_clitic == to_include_personal_clitic and object_clitic == to_include_object_clitic then local single_comb_slot = basic_slot .. "_comb_" .. personal_clitic local slot = single_comb_slot .. "_" .. object_clitic accel_clitic = personal_clitic == "lxx" and "[[le]]/[[les]]" or "[[" .. personal_clitic .. "]]" local accel = tag_prefix .. "|combined with indirect object " .. accel_clitic .. " and direct object [[" .. object_clitic .. "]]" table.insert(alternant_multiword_spec.verb_slots_combined, {slot, accel}) table.insert(alternant_multiword_spec.verb_slot_double_combined_rows, {single_comb_slot, {object_clitic}}) break end end end end end end add_combined_slot_row("infinitive", "inf", {"me", "te", "se", "nos", "os"}) add_combined_slot_row("gerund", "gerund", {"me", "te", "se", "nos", "os"}) local function add_combined_imp_slot_row(persnum, personal_clitics) add_combined_slot_row("imp_" .. persnum, all_persons_numbers[persnum] .. "|imp", personal_clitics) end add_combined_imp_slot_row("2s", {"me", "te", "nos"}) add_combined_imp_slot_row("2sv", {"me", "te", "nos"}) add_combined_imp_slot_row("3s", {"me", "se", "nos"}) add_combined_imp_slot_row("1p", {"te", "nos", "os"}) add_combined_imp_slot_row("2p", {"me", "nos", "os"}) add_combined_imp_slot_row("3p", {"me", "se", "nos"}) end -- Generate the list of all slots. alternant_multiword_spec.all_verb_slots = {} for _, slot_and_accel in ipairs(alternant_multiword_spec.verb_slots_basic) do table.insert(alternant_multiword_spec.all_verb_slots, slot_and_accel) end for _, slot_and_accel in ipairs(alternant_multiword_spec.verb_slots_combined) do table.insert(alternant_multiword_spec.all_verb_slots, slot_and_accel) end for _, slot_and_accel in ipairs(alternant_multiword_spec.verb_slots_reflexive_verb_form_of) do table.insert(alternant_multiword_spec.all_verb_slots, slot_and_accel) end alternant_multiword_spec.verb_slots_basic_map = {} for _, slotaccel in ipairs(alternant_multiword_spec.verb_slots_basic) do local slot, accel = unpack(slotaccel) alternant_multiword_spec.verb_slots_basic_map[slot] = accel end alternant_multiword_spec.verb_slots_combined_map = {} for _, slotaccel in ipairs(alternant_multiword_spec.verb_slots_combined) do local slot, accel = unpack(slotaccel) alternant_multiword_spec.verb_slots_combined_map[slot] = accel end end -- Return true if `form` is accented and is likely monosyllabic. Used in remove_monosyllabic_accents(); if true, we -- run the syllabification algorithm to determine the syllable count, and if monosyllabic, remove the accent. Also used -- in conjunction with user-specified form overrides to add an asterisk to prevent accents from being removed. local function may_need_monosyllabic_accent_removed(form) return not rfind(form, "^%-") and rfind(form, AV) and not rfind(form, V .. C .. V) end local overridable_stems = {} -- If `add_monosyllabic_asterisk` is given, add a * to accented forms that may be monosyllabic to prevent the accent -- from being removed in remove_monosyllabic_accents(). local function allow_multiple_values_for_override(separated_groups, data, add_monosyllabic_asterisk) local retvals = {} for _, separated_group in ipairs(separated_groups) do local footnotes = data.fetch_footnotes(separated_group) local form = separated_group[1] if add_monosyllabic_asterisk and may_need_monosyllabic_accent_removed(form) then form = form .. "*" end -- Add suppress_prefix to prevent the built-in verb prefix from being added to the override. local retval = {form = form, footnotes = footnotes, suppress_prefix = true} table.insert(retvals, retval) end return retvals end local function simple_choice(choices) return function(separated_groups, data) if #separated_groups > 1 then data.parse_err("For spec '" .. data.prefix .. ":', only one value currently allowed") end if #separated_groups[1] > 1 then data.parse_err("For spec '" .. data.prefix .. ":', no footnotes currently allowed") end local choice = separated_groups[1][1] if not m_table.contains(choices, choice) then data.parse_err("For spec '" .. data.prefix .. ":', saw value '" .. choice .. "' but expected one of '" .. table.concat(choices, ",") .. "'") end return choice end end for _, overridable_stem in ipairs { "pres_unstressed", "pres_stressed", "pres1_and_sub", -- Don't include pres1; use pres_1s if you need to override just that form "impf", "full_impf", "pret", {"pret_conj", simple_choice({"irreg", "ar", "er", "ir"}) }, "fut", "cond", "pres_sub_stressed", "pres_sub_unstressed", "impf_sub_ra", "impf_sub_se", "fut_sub", "pp", } do if type(overridable_stem) == "string" then overridable_stems[overridable_stem] = allow_multiple_values_for_override else local stem, validator = unpack(overridable_stem) overridable_stems[stem] = validator end end local function match_against_verbs(ref_verb, prefixes) return function(verb) for _, prefix in ipairs(prefixes) do if verb == prefix .. ref_verb then return prefix, ref_verb end end return nil end end --[=[ Special cases for verbs: diluviar, atardecer: impersonal; all finite non-3s forms are nonexistent or hypothetical. Handle using '.only3s'. empecer, atañer, concernir: all finite non-third-person forms are nonexistent or hypothetical. Handle using '.only3sp'. desnacer: Former module claimed an irregular past participle 'desnato'. Verb is not in RAE at all and barely exists; unlikely to have irregular past participle. desposeer: Former module claimed an irregular past participle 'desposeso'. Not per RAE. valer: Former module claimed an irregular imperative 'val'. Not per RAE. manumitir: Former module claimed an irregular past participle 'manumiso'. Not per RAE. raer: Former module claimed a pres 1sg rao. Not per RAE. rehuir: Handle using +ú. sustituir: Former module claimed an irregular past participle 'sustituto'. Not per RAE. venir: Former module claimed an irregular clitic combination ven + nos -> venos. Not per native speakers. --------- Verbs to check: rehuir (+ú), prohibir (+í), reunir (+ú) --------- -ir verbs: There are several types of vowel alternations: 1. No alternation. Includes some verbs in -e- and -o-, e.g. aterir(se) (no_pres_stressed), tra(n)sgredir (pres_stressed forms rare), abolir (pres_stressed forms rare), colorir (no_pres_stressed), sumergir, divergir, convergir, arrecir (no_pres_stressed), rostir, polir (obsolete), condir (obsolete), possibly ascondir (obsolete), atordir (obsolete), sacodir (obsolete), sobrevendir (possible misspelling), empedernir (no_pres_stressed), decebir (obsolete; possibly actually like concebir, i.e. decibo not decebo), premir (obsolete), expremir (obsolete), exir (obsolete), escreuir (obsolete; fix conjugation), escrebir (obsolete), agredir; sometimes the stressed forms are rare or disused. (Also embaír, desvaír are no_pres_stressed.) 2a. ie: Infinitive has -e-, changing to -ie- when stressed. No raising before i+V. Only hendir, cernir, discernir, concernir (only3sp); discernir -> discierno, discerniendo, discernió, discernamos. 2b. ye: Infinitive has -e-, changing to -ye- when stressed. No raising before i+V. Does not occur (cf. errar). 3a. ie-i: Infinitive has -e- or -i-, changing to -ie- when stressed. Raising before i+V and 1p/2p pres subjunctive: sentir -> siento, sintiendo, sintió, sintamos. adquirir -> adquiero, adquiriendo, adquirió, adquiramos. 3b. ye-i: Infinitive has -e-, changing to -ye- when stressed. Raising before i+V and 1p/2p pres subjunctive. Only erguir: erguir -> yergo, irguiendo, irguió, irgamos. 4. i: Infinitive has -e-, changing to -i- when stressed. Raising before i+V and 1p/2p pres subjunctive: vestir -> visto, vistiendo, vistió, vistamos. Variant: ceñir -> ciño, ciñendo, ciñó, ciñamos. NOTE: preterir (no_pres_stressed). 5. ue-u: Infinitive has -o-, changing to -ue- when stressed. Raising before i+V and 1p/2p pres subjunctive: Only dormir, morir and compounds. dormir -> duermo, durmiendo, durmió, durmamos. 6. ue: This type would be parallel to 'ie' but doesn't appear to exist. --------- Verbs to fix (extra forms need to be excised or deleted): The above verbs under type (1) -ir vowel alternations; [[neviscar]] (impersonal), [[acaecer]] (third-person only), [[acontecer]] (third-person only), [[cellisquear]] (impersonal), [[pintear]] (impersonal? other meaning "to play hookey" given, not in RAE), [[diluviar]] (impersonal). [[desabrir]] (not like abrir, rare in pres_stressed/sub forms), [[jabrir]] (not like abrir). Verbs with existing errors: * [[abeldar]]: (missing <ie>) [FORMS TO DELETE] * [[acaecer]]: (used only in 3rd person) [DELETE ALL FIRST AND SECOND PERSON FORMS] * [[acontecer]]: (used only in 3rd person) [DELETE ALL FIRST AND SECOND PERSON FORMS] * [[anticuar]] (conjugated without ú) [FORMS TO DELETE] * [[antojar]]: (used only in 3rd person) [DELETE ALL FIRST AND SECOND PERSON FORMS] * [[aerografiar]]: (conjugated without í) [FORMS TO DELETE] * [[afiliar]]: (conjugated with í/+ should be only +) [FORMS TO DELETE] * [[agraviar]]: (wrongly has í) [FORMS TO DELETE] * [[arrecir]]: (not given as no_pres_stressed) [FORMS TO DELETE] * [[aserrar]]: (missing <ie>) [FORMS TO DELETE] * [[aspaventar]]: (missing <ie>) [OK] * [[atesar]]: (wrongly has ie) [FORMS TO DELETE] * [[avalentar]]: (wrongly has ie) [FORMS TO DELETE] * [[autorregularse]] (conjugated as non-reflexive) [OK] * [[auxiliar]]: (conjugated with í/+ should be only +) [FORMS TO DELETE] * [[balbucir]] (pres1_and_sub nonexistent) [DELETE PRES1_AND_SUB FORMS] * [[caçar]] (conjugated as -zar) [OK] * [[calefacer]] (extra form caleface) [FIX] * [[cellisquear]]: (used only in 3rd person singular) [DELETE ALL FIRST AND SECOND PERSON FORMS, ALL 3RD PLURAL FORMS AND ALL PP NON-MS FORMS] * [[chilenizar]] (conjugated with no cons alternation) [OK] * [[colorir]]: (not given as no_pres_stressed) [FORMS TO DELETE] * [[comisariar]] (conjugated without í) [FORMS TO DELETE] * [[complacer]] (missing complega in imperative 3s) [OK] * [[comprehender]] (conjugated as comprender) [OK] * [[decebir]] (was conjugated without <i>) [FORMS TO DELETE] * [[desafiliar]]: (conjugated with í/+ should be only +) [FORMS TO DELETE] * [[desagregar]] (conjugated with no cons alternation) [FORMS TO DELETE] * [[desairar]]: (conjugated with í should be only +) [FORMS TO DELETE] * [[descordar]]: (missing <ue>) [FORMS TO DELETE] * [[deseleccionar]] (conjugated as desseleccionar) [OK] * [[desestacionalizar]] (conjugated with no cons alternation) [FORMS TO DELETE] * [[desgonzar]] (conjugated with no cons alternation) [FORMS TO DELETE] * [[desguinzar]] (conjugated with no cons alternation) [FORMS TO DELETE] * [[deshacer]] (extra form deshace, desháceme etc.) [OK] * [[desnacer]] (extra form desnato etc.) [DELETE PP FORMS] * [[desposeer]] (extra form desposeso etc.) [DELETE PP FORMS] * [[dezmar]]: (wrongly has ie) [FORMS TO DELETE] * [[diluviar]]: (used only in 3rd person singular) [DELETE ALL FIRST AND SECOND PERSON FORMS, ALL 3RD PLURAL FORMS AND ALL PP NON-MS FORMS] * [[draftear]] (extraneous param lang=es) [REMOVE PARAM] * [[ejemplarizar]] (extraneous param compound=1) [compound -> combined] * [[ejercitar]] (extraneous param compound=1) [compound -> combined] * [[empecer]] (empezca has imperatives, 1s in its verb form entry) [FIX] * [[encentar]]: (wrongly has ie) [OK] * [[encubertar]]: (wrongly has ie) [FORMS TO DELETE] * [[entrechocar]] (conjugated with no cons alternation) [FORMS TO DELETE] * [[entredecir]] (imp_2s has entredice should be entredí; extra future/cond forms entredeciré etc.) [FORMS TO DELETE/FIX] * [[escenografiar]]: (conjugated without í) [FORMS TO DELETE] * [[estar]] (incorrect combined forms, e.g. éstela instead of estela) [OK] * [[extasiar]]: (conjugated with í/+ should be only í) [FORMS TO DELETE] * [[facer]] (extra form face, fáceme, etc.) [FIX] * [[ferrar]]: (missing <ie>) [FORMS TO DELETE] * [[gloriar]]: (conjugated with í/+ should be only í) [FORMS TO DELETE] * [[hacer]] (extra form hace, háceme, etc.) [DELETE hácete] * [[homogeneizar]] (extra form homogeneízo) [DELETE homogeneízo, homogeneízas, homogeneíza, homogeneízan, homogeneícen, homogeneícemos] * [[incensar]]: (missing <ie>) [FORMS TO DELETE] * [[ir]] (extraneous param aux=ser) [REMOVE PARAM] * [[jacer]] (extra form jace, jáceme, etc.) [FIX] * [[jarrear]] (extraneous param impersonal=yes) * [[litografiar]]: (conjugated without í) [FORMS TO DELETE] * [[manumitir]] (extra form manumiso, etc.) [FIX; is an adjective] * [[mecanografiar]]: (conjugated without í) [FORMS TO DELETE] * [[mordiscar]] (conjugated with no cons alternation) [FORMS TO DELETE] * [[neviscar]]: (used only in 3rd person singular) [DELETE ALL FIRST AND SECOND PERSON FORMS, ALL 3RD PLURAL FORMS AND ALL PP NON-MS FORMS] * [[obsipar]] (conjugated as obispar) [DELETE VERB] * [[obstar]]: (used only in 3rd person) [DELETE ALL FIRST AND SECOND PERSON FORMS] * [[orificar]] (conjugated as orificiar) [OK] * [[complacer]], [[placer]] (missing plega in imperative 3s, etc.) [OK] * [[prevaler]] (extra form preval, incorrect form prévalme etc.) [DELETE preval] * [[preterir]]: (not given as no_pres_stressed) [FORMS TO DELETE] * [[raer]] (extra form rao) [DELETE rao] * [[rebordar]] (extraneous param lang=es) [REMOVE PARAM] * [[redecir]] (incorrect imp_2s redice instead of redí) [FIX] * [[reinstitucionalizar]] (conjugated with no cons alternation) [FORMS TO DELETE] * [[reirse]] [DELETE] * [[serigrafiar]]: (conjugated without í) [FORMS TO DELETE] * [[sobresalir]] (incorrect combined forms e.g. sobrésalme) [OK] * [[superpoblar]] (missing <ue>) [FORMS TO DELETE] * [[sustituir]] (extra form sustituto, etc.) [OK] * [[usucapir]]: (used only in inf and pp) [DELETE ALL FORMS BUT PP] * [[valefacer]] (extra form valeface) [FIX] * [[valer]] (extra form val, etc.) [OK] * LOTS OF COMBINED FORMS OF VERBS IN -iar, -uar, -ai-, -au-, -ei-, -eu-, etc. Example: afeitar (afeítate, afeítese, afeítense). Need a script to find them. * [[acostar]]: normally <ue> but in meaning "arrive at the coast", <> * [[adecuar]]: <+,ú> * [[aerografiar]]: <í> * [[aferrar]]: <+,ie[obsolete]> * [[afiliar]]: <> * [[aforar]]: in meaning "to gauge, to measure": <>; in meaning "otorgar fuero": <ue> * [[arrecir]]: <no_pres_stressed> * [[agraviar]]: <> * [[agriar]]: <í,+> * [[aserrar]]: <ie> * [[asolar]]: in meaning "destroy": <ue,+>; in meaning "to dry up": <> * [[aspaventar]]: <ie> * [[atentar]]: in meaning "to commit a crime" does not have vowel alt * [[atesar]]: <>; possibly <ie> in obsolete meaning "atiesar" * [[atestar]]: in meaning "to pack": <ie,+>; in meaning "testify": <> * [[autoevacuarse]]: <+,ú> * [[auxiliar]]: <> * [[avalentar]]: <> * [[cimentar]]: <ie,+> * [[colar]]: most meanings <ue> but "canonically confer (an ecclesiastical benefit)" <> * [[colorir]]: <no_pres_stressed> * [[comisariar]]: <í> * [[desafiliar]]: <> * [[desaforar]]: "to deprive of fuero": <ue,+[less common]> * [[desairar]]: <> * [[desolar]]: <ue,+> * [[desmembrar]]: <ie,+> * [[dezmar]]: <> * [[ejecutoriar]]: <í,+> * [[emparentar]]: <ie,+> * [[encentar]]: <> * [[encubertar]]: <> * [[engrosar]]: <ue,+> * [[escenografiar]]: <í> * [[evacuar]]: <+,ú> * [[expatriar]]: <í,+> * [[extasiar]]: <í> * [[ferrar]]: <ie> * [[follar]]: <ue> * [[gloriar]]: <í> * [[hibernar]]: no vowel alt or e-ie; e-ie not in RAE, ask about it * [[historiar]]: <í,+> * [[incensar]]: <ie> * [[invernar]]: <ie,+> * [[licuar]]: <+,ú> * [[litografiar]]: <í> * [[mecanografiar]]: <í> * [[paliar]]: <í,+> * [[preterir]]: <i.no_pres_stressed> * [[promiscuar]]: <+,ú> * [[readecuar]]: <+,ú> * [[repatriar]]: <í,+> * [[retrocar]]: <ue,+> * [[serigrafiar]]: <í> * [[soterrar]]: <ie,+> * [[superpoblar]]: <ue> * [[templar]]: <+,ie[in some parts of Latin America]> * [[vidriar]]: <í,+> Second round of verbs to fix: * [[apropriar]]: forms point to reflexive [FORMS TO FIX] * [[autogobernarse]]: (missing <ie>) [FORMS TO DELETE] * [[autorreproducirse]]: (wrongly had regular preterite and impf/fut sub) [FORMS TO DELETE] * [[aventarse]]: (missing <ie>) [FORMS TO DELETE] * [[aventar]]: forms point to reflexive [FORMS TO FIX] * [[culiar]]: yo culio or culío? [VERIFY] * [[desnacer]]: delete [[dasnatos]] * [[poseer]]: delete [[posesa]], [[posesos]], [[posesas]] * [[reproducir]]: (wrongly had regular preterite and impf/fut sub) [FORMS TO DELETE] * [[trasgredir]]: (wrongly had <i>) [FORMS TO DELETE] --------- Irregular conjugations. Each entry is processed in turn and consists of an object with two fields: 1. match=: Specifies the irregular verbs that match this object. 2. forms=: Specifies the irregular stems and forms for these verbs. The value of match= is either a string beginning with "^" (match only the specified verb), a string not beginning with "^" (match any verb ending in that string), or a function that is passed in the verb and should return the prefix of the verb if it matches, otherwise nil. The function match_against_verbs() is provided to facilitate matching a set of verbs with a common ending and specific prefixes (e.g. [[andar]] and [[desandar]] but not [[mandar]], etc.). The value of forms= is a table specifying stems and individual override forms. Each key of the table names either a stem (e.g. `pres_stressed`), a stem property (e.g. `vowel_alt`) or an individual override form (e.g. `pres_1s`). Each value of a stem can either be a string (a single stem), a list of strings, or a list of objects of the form {form = STEM, footnotes = {FOONOTES}}. Each value of an individual override should be of exactly the same form except that the strings specify full forms rather than stems. The values of a stem property depend on the specific property but are generally strings or booleans. In order to understand how the stem specifications work, it's important to understand the phonetic modifications done by combine_stem_ending(). In general, the complexities of predictable stem and ending modifications are all handled in this function. In particular: 1. Spelling-based modifications (c/z, g/gu, gu/gü, g/j) occur automatically as appropriate for the ending. 2. Raising of e -> i, o -> u in -ir verbs before an ending beginning with i + vowel, as well as in the 1p/2p forms of the present subjunctive (dormir -> durmiendo, durmió, durmamos), are handled here. Raising happens only for -ir verbs and only when the stem setting `raising_conj` is true (which is normally set to true when vowel alternations `ie-i`, `ye-i`, `ue-u`, `i`, `í` or `ú` are specified). 3. Numerous modifications are automatically made before an ending beginning with i + vowel. These include: a. final -i of stem absorbed: sonreír -> sonrió, sonriera, sonriendo; b. in the preterite of irregular verbs (likewise for other tenses derived from the preterite stem, i.e. imperfect and and future subjunctive), initial i absorbed after j and u (dijeron not #dijieron, likewise for condujeron, trajeron; also fueron not #fuyeron). This happens only when stem setting `pret_conj` == "irreg"; this must be set explicitly by irregular verbs. Does not apply everywhere because of cases like regular [[tejer]] (tejieron not #tejeron), regular [[concluir]] (concluyeron not #conclueron). c. initial i of ending -> y after vowel and word-initially: poseer -> poseyó, poseyera, poseyendo; ir -> yendo; d. initial i of ending -> y after gü, which becomes gu: argüir -> arguyó, arguyera, arguyendo; e. initial i of ending absorbed after ñ, ll, y: tañer -> tañó, tañera, tañendo; bullir -> bulló, bullera, bullendo 4. If the ending begins with (h)i, it gets an accent after a/e/i/o to prevent the two merging into a diphthong: caer -> caíste, caímos; reír -> reíste, reímos (pres and pret). This does not apply after u, e.g. concluir -> concluiste, concluimos. 5. In -uir verbs (i.e. -ir verbs with stem ending in -u), a y is added before endings beginning with a/e/o: concluir -> concluyo, concluyen, concluya, concluyamos. Note that preterite concluyó, gerund concluyendo, etc. are handled by a different rule above (3b). The following stems are recognized: -- pres_unstressed: The present indicative unstressed stem (2s voseo, 1p, 2p). Also controls the imperative 2p and gerund. Defaults to the infinitive stem. -- pres_stressed: The present indicative stressed stem (1s, 2s, 3s, 3p). Also controls the imperative 2s. Default is empty if indicator `no_pres_stressed`, else a vowel alternation if such an indicator is given (e.g. `ue`, `ì`), else the infinitive stem. -- pres1_and_sub: Overriding stem for 1s present indicative and the entire subjunctive. Only set by irregular verbs and by the indicator `no_pres_stressed` (since verbs of this sort, e.g. [[aterir]], are missing the entire subjunctive as well as the forms with stressed root). Used by many irregular verbs, e.g. [[caer]], [[roer]], [[salir]], [[tener]], [[valer]], [[venir]], etc. Some verbs set this and then supply an override for the pres_1sg if it's irregular, e.g. [[saber]], with irregular subjunctive stem "sep-" and special 1s present indicative "sé*" (the * indicates that the monosyllabic accent should not be removed). -- pres1: Special stem for 1s present indicative. Normally, do not set this explicitly. If you need to specify an irregular 1s present indicative, use the form override pres_1s= to specify the entire form. Defaults to pres1_and_sub if given, else pres_stressed. -- pres_sub_unstressed: The present subjunctive unstressed stem (1p, 2p, also 2s voseo for -ar verbs). Defaults to pres1_and_sub if given, else the infinitive stem. -- pres_sub_stressed: The present subjunctive stressed stem (1s, 2s, 3s, 1p, also 2s voseo for -er/-ir verbs). Defaults to pres1. -- impf: The imperfect stem. Defaults to the infinitive stem. -- pret: The preterite stem. Defaults to the infinitive stem. -- pret_conj: Determines the set of endings used in the preterite. Should be one of "ar", "er", "ir" or "irreg". Defaults to the conjugation as determined from the infinitive. -- fut: The future stem. Defaults to the infinitive stem. -- cond: The conditional stem. Defaults to fut. -- impf_sub_ra: The imperfect subjunctive -ra stem. Defaults to the preterite stem. -- impf_sub_se: The imperfect subjunctive -se stem. Defaults to the preterite stem. -- fut_sub: The future subjunctive stem. Defaults to the preterite stem. -- pp: The past participle stem. Default is based on the verb conjugation: infinitive stem + "ad" for -ar verbs, otherwise infinitive stem + "id". ]=] local built_in_conjugations = { { -- andar, desandar -- we don't want to match e.g. mandar. match = match_against_verbs("andar", {"", "des"}), forms = {pret = "anduv", pret_conj = "irreg"} }, { -- asir, desasir match = "asir", -- use 'asgu' because we're in a front environment; if we use 'asg', we'll get '#asjo' forms = {pres1_and_sub = "asgu"} }, { -- abrir, cubrir and compounds match = function(verb) local prefix, base_verb = rmatch(verb, "^(.*)(brir)$") -- Only match abrir, cubrir and compounds, and don't match desabrir/jabrir if not prefix then return nil elseif not prefix:find("a$") and not prefix:find("cu$") then return nil elseif prefix == "desa" or prefix == "ja" then return nil else return prefix, base_verb end end, forms = {pp = "biert"} }, { match = "caber", forms = {pres1_and_sub = "quep", pret = "cup", pret_conj = "irreg", fut = "cabr"} }, { -- caer, decaer, descaer, recaer match = "caer", -- use 'caigu' because we're in a front environment; if we use 'caig', we'll get '#caijo' forms = {pres1_and_sub = "caigu"} }, { -- cocer, escocer, precocer, etc. match = "cocer", -- override cons_alt, otherwise the verb would be categorized as a c-zc alternating verb forms = {vowel_alt = "ue", pres1 = "cuez", pres_sub_unstressed = "coz", cons_alt = "c-z"}, -- not cozco, as would normally be generated }, { -- dar, desdar match = match_against_verbs("dar", {"", "des"}), forms = { -- we need to override various present indicative forms and add an accent for the compounds; -- not needed for the simplex and in fact the accents will be removed in that case pres_1s = "doy", pres_2s = "dás", pres_3s = "dá", pres_2p = "dáis", pres_3p = "dán", pret = "d", pret_conj = "er", pres_sub_1s = "dé*", -- * signals that the monosyllabic accent must remain pres_sub_2s = "dés", pres_sub_3s = "dé*", pres_sub_2p = "déis", pres_sub_3p = "dén", imp_2s = "dá", } }, { -- decir, redecir, entredecir match = match_against_verbs("decir", {"", "re", "entre"}), forms = { -- for this and variant verbs in -decir, we set cons_alt to false because we don't want the -- verb categorized as a c-zc alternating verb, which would happen by default -- use 'digu' because we're in a front environment; if we use 'dig', we'll get '#dijo' pres1_and_sub = "digu", vowel_alt = "i", cons_alt = false, pret = "dij", pret_conj = "irreg", pp = "dich", fut = "dir", imp_2s = "dí" -- need the accent for the compounds; it will be removed in the simplex } }, { -- antedecir, interdecir match = match_against_verbs("decir", {"ante", "inter"}), forms = { pres1_and_sub = "digu", vowel_alt = "i", cons_alt = false, pret = "dij", pret_conj = "irreg", pp = "dich", fut = "dir" -- imp_2s regular } }, { -- bendecir, maldecir match = match_against_verbs("decir", {"ben", "mal"}), forms = { pres1_and_sub = "digu", vowel_alt = "i", cons_alt = false, pret = "dij", pret_conj = "irreg", pp = {"decid", "dit"} -- imp_2s regular, fut regular } }, { -- condecir, contradecir, desdecir, predecir, others? match = "decir", forms = { pres1_and_sub = "digu", vowel_alt = "i", cons_alt = false, pret = "dij", pret_conj = "irreg", pp = "dich", fut = {"decir", "dir"} -- imp_2s regular } }, { match = "^desvaír", forms = { pres_2s = "desvaes", pres_3s = "desvae", pres_3p = "desvaen", imp_2s = "desvae" } }, { -- conducir, producir, reducir, traducir, etc. match = "ducir", forms = {pret = "duj", pret_conj = "irreg"} }, { -- elegir, reelegir; not preelegir, per RAE match = match_against_verbs("elegir", {"", "re"}), forms = {vowel_alt = "i", pp = {"elegid", "elect"}} }, { -- erguir match = "^erguir", forms = { vowel_alt = {"i", "ye-i"}, -- We would not need to make this verb irregular except for the alternative unstressed present subjunctive forms -- in yerg-. We can't use pres_sub_unstressed = {"irgu", "yergu"} because the "i" and "ye-i" vowel alternations -- are e->i raising in the unstressed present subjunctive and we wrongly get irgamos/yirgamos etc. pres_sub_2sv = {"irgás", "yergás"}, pres_sub_1p = {"irgamos", "yergamos"}, pres_sub_2p = {"irgáis", "yergáis"}, }, }, { match = "^estar", forms = { pres_1s = "estoy", pres_2s = "estás", pres_2sv = "estás", pres_3s = "está", pres_3p = "están", pret = "estuv", pret_conj = "irreg", pres_sub_1s = "esté", pres_sub_2s = "estés", pres_sub_2sv = "estés", pres_sub_3s = "esté", pres_sub_3p = "estén", imp_2s = "está", imp_2sv = "está", } }, { -- freír, refreír match = "freír", forms = {vowel_alt = "í", pp = {"freíd", "frit"}} }, { match = "garantir", forms = { pres_stressed = {{form = "garant", footnotes = {"[only used in Argentina and Uruguay]"}}}, pres1_and_sub = {{form = "garant", footnotes = {"[only used in Argentina and Uruguay]"}}}, } }, { match = "^haber", forms = { pres_1s = "he", pres_2s = "has", pres_2sv = "has", pres_3s = {"ha", {form = "hay", footnotes = {"[used impersonally]"}}}, pres_1p = "hemos", pres_3p = "han", pres1_and_sub = "hay", -- only for subjunctive as we override pres_1s pret = "hub", pret_conj = "irreg", imp_2s = {"habe", "he"}, imp_2sv = {"habe", "he"}, fut = "habr", } }, { match = "satisfacer", forms = { -- see below for cons_alt setting and pres1_and_sub setting pres1_and_sub = "satisfagu", cons_alt = false, pret = "satisfic", pret_conj = "irreg", pp = "satisfech", fut = "satisfar", imp_2s = {"satisface", "satisfaz"} } }, { match = match_against_verbs("hacer", {"contra", "re"}), -- contrahacer/rehacer require an extra accent in the preterite (rehíce, rehízo). forms = { -- see below for cons_alt setting and pres1_and_sub setting pres1_and_sub = "hagu", cons_alt = false, pret = "hic", pret_1s = "híce", pret_3s = "hízo", pret_conj = "irreg", pp = "hech", fut = "har", imp_2s = "haz" } }, { -- hacer, deshacer, contrahacer, rehacer, facer, desfacer, jacer match = function(verb) return rmatch(verb, "^(.*[hjf])(acer)$") end, forms = { -- for these verbs, we set cons_alt to false because we don't want the verb categorized as a -- c-zc alternating verb, which would happen by default -- use 'agu' because we're in a front environment; if we use 'ag', we'll get '#hajo' pres1_and_sub = "agu", cons_alt = false, pret = "ic", pret_conj = "irreg", pp = "ech", fut = "ar", imp_2s = "az" } }, { -- imprimir, reimprimir match = "imprimir", forms = {pp = {"imprimid", "impres"}} }, { -- infecir match = "infecir", -- override cons_alt, otherwise the verb would be categorized as a c-zc alternating verb forms = {vowel_alt = "i", pres1 = "infiz", pres_sub_unstressed = "infez", cons_alt = "c-z"}, -- not infizco, as would normally be generated }, { match = "infecir", -- override cons_alt, otherwise the verb would be categorized as a c-zc alternating verb forms = {pres1_and_sub = "infez", cons_alt = "c-z"}, -- not mezco, as would normally be generated }, { match = "^ir", forms = { pres_1s = "voy", pres_2s = "vas", pres_2sv = "vas", pres_3s = "va", pres_1p = "vamos", pres_2p = "vais", pres_3p = "van", pres1_and_sub = "vay", -- only for subjunctive as we override pres_1s full_impf = "ib", impf_1p = "íbamos", pret = "fu", pret_conj = "irreg", -- this signals that fu + -ieron -> fueron not fuyeron pret_1s = "fui", pret_3s = "fue", imp_2s = "ve", imp_2sv = "andá", imp_1p = {"vamos", "vayamos"}, refl_imp_2p = {"idos", "iros"}, imp_2p_comb_os = {"idos", "iros"}, } }, { -- mecer, remecer -- we don't want to match e.g. adormecer, estremecer match = match_against_verbs("mecer", {"re", ""}), -- override cons_alt, otherwise the verb would be categorized as a c-zc alternating verb forms = {pres1_and_sub = "mez", cons_alt = "c-z"}, -- not mezco, as would normally be generated }, { -- morir, desmorir, premorir match = "morir", forms = {vowel_alt = "ue-u", pp = "muert"}, }, { -- oír, desoír, entreoír, trasoír match = "oír", -- use 'oigu' because we're in a front environment; if we use 'oig', we'll get '#oijo' forms = {pres1_and_sub = "oigu"} }, { match = "olver", -- solver, volver, bolver and derivatives forms = {vowel_alt = "ue", pp = "uelt"} }, { match = "pagar", forms = {pp = {"pagad", {form = "pag", footnotes = {"[Uruguay]"}}}} }, { -- placer, desplacer match = "placer", forms = { pret_3s = {"plació", {form = "plugo", footnotes = {"[archaic]"}}}, pret_3p = {"placieron", {form = "pluguieron", footnotes = {"[archaic]"}}}, pres_sub_3s = {"plazca", {form = "plega", footnotes = {"[archaic]"}}, {form = "plegue", footnotes = {"[archaic]"}}}, impf_sub_ra_3s = {"placiera", {form = "pluguiera", footnotes = {"[archaic]"}}}, impf_sub_ra_3p = {"placieran", {form = "pluguieran", footnotes = {"[archaic]"}}}, impf_sub_se_3s = {"placiese", {form = "pluguiese", footnotes = {"[archaic]"}}}, impf_sub_se_3p = {"placiesen", {form = "pluguiesen", footnotes = {"[archaic]"}}}, fut_sub_3s = {"placiere", {form = "pluguiere", footnotes = {"[archaic]"}}}, fut_sub_3p = {"placieren", {form = "pluguieren", footnotes = {"[archaic]"}}}, } }, { match = "poder", forms = {vowel_alt = "ue", pret = "pud", pret_conj = "irreg", fut = "podr", gerund = "pudiendo"} }, { -- poner, componer, deponer, imponer, oponer, suponer, many others match = "poner", forms = { -- use 'pongu' because we're in a front environment; if we use 'pong', we'll get '#ponjo' pres1_and_sub = "pongu", pret = "pus", pret_conj = "irreg", fut = "pondr", pp = "puest", imp_2s = "pón" -- need the accent for the compounds; it will be removed in the simplex } }, { -- proveer, desproveer match = "proveer", forms = {pp = {"provist", "proveíd"}}, }, { match = "pudrir", forms = {pp = "podrid"} }, { -- querer, desquerer, malquerer match = "querer", forms = {vowel_alt = "ie", pret = "quis", pret_conj = "irreg", fut = "querr"} }, { match = "^raer", -- use 'raigu' because we're in a front environment; if we use 'raig', we'll get '#raijo' forms = {pres1_and_sub = {"raigu", "ray"}} }, { -- roer, corroer match = "roer", -- use 'roigu' because we're in a front environment; if we use 'roig', we'll get '#roijo' forms = {pres1_and_sub = {"ro", "roigu", "roy"}} }, { -- romper, entrerromper, arromper, derromper; not corromper; FIXME: not sure about interromper (obsolete) match = function(verb) local prefix, base_verb = rmatch(verb, "^(.*)(romper)$") -- Don't match corromper if prefix == "cor" then return nil else return prefix, base_verb end end, forms = {pp = "rot"} }, { -- saber, resaber match = "saber", forms = { pres_1s = "sé*", -- * signals that the monosyllabic accent must remain pres1_and_sub = "sep", -- only for subjunctive as we override pres_1s pret = "sup", pret_conj = "irreg", fut = "sabr", } }, { match = "salir", forms = { -- use 'salgu' because we're in a front environment; if we use 'salg', we'll get '#saljo' pres1_and_sub = "salgu", fut = "saldr", imp_2s = "sal", -- These don't exist per the RAE. imp_2s_comb_lo = {}, imp_2s_comb_los = {}, imp_2s_comb_la = {}, imp_2s_comb_las = {}, imp_2s_comb_le = {}, imp_2s_comb_les = {}, }, }, { match = "scribir", -- escribir, describir, proscribir, etc. forms = {pp = {"scrit", {form = "script", footnotes = {"[Argentina and Uruguay]"}}}} }, { match = "^ser", forms = { pres_1s = "soy", pres_2s = "eres", pres_2sv = "sos", pres_3s = "es", pres_1p = "somos", pres_2p = "sois", pres_3p = "son", pres1_and_sub = "se", -- only for subjunctive as we override pres_1s full_impf = "er", impf_1p = "éramos", pret = "fu", pret_conj = "irreg", -- this signals that fu + -ieron -> fueron not fuyeron pret_1s = "fui", pret_3s = "fue", fut = "ser", imp_2s = "sé*", -- * signals that the monosyllabic accent must remain imp_2sv = "sé*", } }, { match = "^soler", forms = { vowel_alt = "ue", fut = {{form = "soler", footnotes = {"[rare but acceptable]"}}}, fut_sub = {{form = "sol", footnotes = {"[rare but acceptable]"}}}, pp = {{form = "solid", footnotes = {"[rare but acceptable]"}}}, } }, { -- tener, abstener, contener, detener, obtener, sostener, and many others match = "tener", forms = { -- use 'tengu' because we're in a front environment; if we use 'teng', we'll get '#tenjo' pres1_and_sub = "tengu", vowel_alt = "ie", pret = "tuv", pret_conj = "irreg", fut = "tendr", imp_2s = "tén" -- need the accent for the compounds; it will be removed in the simplex } }, { -- traer, atraer, detraer, distraer, extraer, sustraer, and many others match = "traer", -- use 'traigu' because we're in a front environment; if we use 'traig', we'll get '#traijo' forms = {pres1_and_sub = "traigu", pret = "traj", pret_conj = "irreg"} }, { -- valer, equivaler, prevaler match = "valer", -- use 'valgu' because we're in a front environment; if we use 'valg', we'll get '#valjo' forms = {pres1_and_sub = "valgu", fut = "valdr"} }, { match = "venir", forms = { -- use 'vengu' because we're in a front environment; if we use 'veng', we'll get '#venjo' pres1_and_sub = "vengu", vowel_alt = "ie-i", pret = "vin", pret_conj = "irreg", -- uniquely for this verb, pres sub 2sv/1p/2p do not raise the vowel even though we are an -- e-ie-i verb (contrast sentir -> sintamos/sintáis) pres_sub_2sv = "vengás", pres_sub_1p = "vengamos", pres_sub_2p = "vengáis", fut = "vendr", imp_2s = "vén" -- need the accent for the compounds; it will be removed in the simplex } }, { -- We want to match antever etc. but not atrever etc. No way to avoid listing each verb. match = match_against_verbs("ver", {"ante", "entre", "pre", "re", "tras", ""}), forms = { -- we need to override various present indicative forms and add an accent for the compounds; -- not needed for the simplex and in fact the accents will be removed in that case pres_2s = "vés", pres_2sv = "vés", pres_3s = "vé", pres_2p = "véis", pres_3p = "vén", pres1_and_sub = "ve", impf = "ve", pp = "vist", imp_2s = "vé" -- need the accent for the compounds; it will be removed in the simplex } }, { -- yacer, adyacer, subyacer match = "yacer", -- use 'yazqu/yazgu/yagu' because we're in a front environment; see 'decir' above forms = {pres1_and_sub = {"yazqu", "yazgu", "yagu"}, imp_2s = {"yace", "yaz"}} }, } local reflexive_masc_forms = { ["su"] = {"mi", "tu", "su", "nuestro", "vuestro", "su"}, ["sus"] = {"mis", "tus", "sus", "nuestros", "vuestros", "sus"}, ["sí"] = {"mí", "ti", "sí", "nosotros", "vosotros", "sí"}, ["consigo"] = {"conmigo", "contigo", "consigo", "con nosotros", "con vosotros", "consigo"}, } local reflexive_fem_forms = { ["su"] = {"mi", "tu", "su", "nuestra", "vuestra", "su"}, ["sus"] = {"mis", "tus", "sus", "nuestras", "vuestras", "sus"}, ["sí"] = {"mí", "ti", "sí", "nosotras", "vosotras", "sí"}, ["consigo"] = {"conmigo", "contigo", "consigo", "con nosotras", "con vosotras", "consigo"}, } local reflexive_forms = { ["se"] = {"me", "te", "se", "nos", "os", "se"}, ["suyo"] = {"mío", "tuyo", "suyo", "nuestro", "vuestro", "suyo"}, ["suya"] = {"mía", "tuya", "suya", "nuestra", "vuestra", "suya"}, ["suyos"] = {"míos", "tuyos", "suyos", "nuestros", "vuestros", "suyos"}, ["suyas"] = {"mías", "tuyas", "suyas", "nuestras", "vuestras", "suyas"}, } local function skip_slot(base, slot, allow_overrides) if not allow_overrides and (base.basic_overrides[slot] or base.combined_overrides[slot] or base.refl and base.basic_reflexive_only_overrides[slot]) then -- Skip any slots for which there are overrides. return true end if base.only3s and (slot:find("^pp_f") or slot:find("^pp_mp")) then -- diluviar, atardecer, neviscar; impersonal verbs have only masc sing pp return true end if not slot:find("[123]") then -- Don't skip non-personal slots. return false end if base.nofinite then return true end if (base.only3s or base.only3sp or base.only3p) and (slot:find("^imp_") or slot:find("^neg_imp_")) then return true end if base.only3s and not slot:find("3s") then -- diluviar, atardecer, neviscar return true end if base.only3sp and not slot:find("3[sp]") then -- atañer, concernir return true end if base.only3p and not slot:find("3p") then -- [[caer cuatro gotas]], [[caer chuzos de punta]], [[entrarle los siete males]] return true end return false end -- Add the `stem` to the `ending` for the given `slot` and apply any phonetic modifications. -- `is_combining_ending` is true if `ending` is actually the ending (this function is also -- called to combine prefix + stem). WARNING: This function is written very carefully; changes -- to it can easily have unintended consequences. local function combine_stem_ending(base, slot, stem, ending, is_combining_ending) if not is_combining_ending then return stem .. ending end if base.stems.raising_conj and (rfind(ending, "^i" .. V) or slot == "pres_sub_1p" or slot == "pres_sub_2p" or slot == "pres_sub_2sv") then -- need to raise e -> i, o -> u: dormir -> durmió, durmiera, durmiendo, durmamos stem = rsub(stem, "([eo])(" .. C .. "*)$", function(vowel, rest) return raise_vowel[vowel] .. rest end) -- also with stem ending in -gu or -qu (e.g. erguir -> irguió, irguiera, irguiendo, irgamos) stem = rsub(stem, "([eo])(" .. C .. "*[gq]u)$", function(vowel, rest) return raise_vowel[vowel] .. rest end) end -- Lots of sound changes involving endings beginning with i + vowel if rfind(ending, "^i" .. V) then -- (1) final -i of stem absorbed: sonreír -> sonrió, sonriera, sonriendo; note that this rule may be fed -- by the preceding one (stem sonre- raised to sonri-, then final i absorbed) stem = stem:gsub("i$", "") -- (2) In the preterite of irregular verbs (likewise for other tenses derived from the preterite stem, i.e. -- imperfect and future subjunctive), initial i absorbed after j (dijeron not #dijieron, likewise for -- condujeron, trajeron) and u (fueron not #fuyeron). Does not apply in regular verb tejer (tejieron not -- #tejeron) and concluir (concluyeron not #conclueron). if base.stems.pret_conj == "irreg" and rfind(stem, "[ju]$") then ending = ending:gsub("^i", "") end -- (3) initial i -> y after vowel and word-initially: poseer -> poseyó, poseyera, poseyendo; -- concluir -> concluyó, concluyera, concluyendo; ir -> yendo; but not conseguir/delinquir if stem == "" or (rfind(stem, V .. "$") and not rfind(stem, "[gq]u$")) then ending = ending:gsub("^i", "y") end -- (4) -gü + ie- -> -guye-: argüir -> arguyó, arguyera, arguyendo if stem:find("gü$") then -- transfer the y to the stem to avoid gü -> gu below in front/back conversions stem = stem:gsub("ü$", "uy") ending = ending:gsub("^i", "") end -- (5) initial i absorbed after ñ, ll, y: tañer -> tañó, tañera, tañendo; bullir -> bulló, bullera, bullendo if rfind(stem, "[ñy]$") or rfind(stem, "ll$") then ending = ending:gsub("^i", "") end end -- If ending begins with i, it must get an accent after a/e/i/o to prevent the two merging into a diphthong: -- caer -> caíste, caímos; reír -> reíste, reímos (pres and pret). This does not apply after u, e.g. -- concluir -> concluiste, concluimos. if ending:find("^i") and stem:find("[aeio]$") then ending = ending:gsub("^i", "í") end -- If -oír/-uir (i.e. -ir with stem ending in -o/u, e.g. oír, concluir), a y must be added before endings -- beginning with a/e/o. Check for base.stems.pret_conj == "irreg" to exclude stem fu- of [[ir]]. if base.conj == "ir" and rfind(ending, "^[aeoáéó]") and base.stems.pret_conj ~= "irreg" then if rfind(stem, "[aoú]$") then -- oír -> oye, rehuir -> rehúyo/rehúye (with indicator 'ú') stem = stem .. "y" elseif rfind(stem, "[^gq]u$") then -- concluir, but not conseguir or delinquir stem = stem .. "y" elseif stem:find("ü$") then -- argüir -> arguyendo stem = stem:gsub("ü$", "uy") end end -- Spelling changes in the stem; it depends on whether the stem given is the pre-front-vowel or -- pre-back-vowel variant, as indicated by `frontback`. We want these front-back spelling changes to happen -- between stem and ending, not between prefix and stem; the prefix may not have the same "front/backness" -- as the stem. local is_front = rfind(ending, "^[eiéí]") if base.frontback == "front" and not is_front then -- parecer -> parezco, conducir -> conduzco; use zqu to avoid triggering the following gsub(); -- the third line will replace zqu -> zc if slot ~= "pret_3s" then -- exclude hice -> hizo (not #hizco) stem = rsub(stem, "(" .. V .. ")c$", "%1zqu") end stem = stem:gsub("sc$", "squ") -- evanescer -> evanesco, fosforescer -> fosforesco stem = stem:gsub("c$", "z") -- ejercer -> ejerzo, uncir -> unzo stem = stem:gsub("qu$", "c") -- delinquir -> delinco, parecer -> parezqu- -> parezco stem = stem:gsub("g$", "j") -- coger -> cojo, afligir -> aflijo stem = stem:gsub("gu$", "g") -- distinguir -> distingo stem = stem:gsub("gü$", "gu") -- may not occur; argüir -> arguyo handled above elseif base.frontback == "back" and is_front then stem = stem:gsub("gu$", "gü") -- averiguar -> averigüé stem = stem:gsub("g$", "gu") -- cargar -> cargué stem = stem:gsub("c$", "qu") -- marcar -> marqué stem = rsub(stem, "[çz]$", "c") -- aderezar/adereçar -> aderecé end return stem .. ending end local function check_stems_for_suppress_prefix(slot, stems) -- Check whether any or all stems have `suppress_prefix`. local any_suppress_prefix = false local any_not_suppress_prefix = false if type(stems) == "table" then if stems.suppress_prefix then -- A single form object. any_suppress_prefix = true else for _, stem in ipairs(stems) do if type(stem) == "table" and stem.suppress_prefix then any_suppress_prefix = true else any_not_suppress_prefix = true end end end else any_not_suppress_prefix = true end if any_suppress_prefix and any_not_suppress_prefix then -- This should never happen because suppress_prefix is set on user-specified stem and individual form -- overrides, which should completely replace built-in overrides (which don't have suppress_prefix). error("Internal error: For slot '" .. slot .. ", saw a mixture of suppress-prefix and non-suppress-prefix stems, and can't handle") else return any_suppress_prefix end end local function add(base, slot, stems, endings, is_combining_ending, allow_overrides) if skip_slot(base, slot, allow_overrides) then return end local function do_combine_stem_ending(stem, ending) return combine_stem_ending(base, slot, stem, ending, is_combining_ending) end iut.add_forms(base.forms, slot, stems, endings, do_combine_stem_ending, nil, nil, base.all_footnotes) end local function add3(base, slot, stems, endings, allow_overrides) local suppress_prefix = base.prefix == "" or check_stems_for_suppress_prefix(slot, stems) if suppress_prefix then return add(base, slot, stems, endings, "is combining ending", allow_overrides) end if skip_slot(base, slot, allow_overrides) then return end local is_combining_ending = false local function do_combine_stem_ending(stem, ending) return combine_stem_ending(base, slot, stem, ending, is_combining_ending) end -- Have to reimplement add_multiple_forms() ourselves due to the is_combining_ending -- flag, which needs to be different when adding prefix to stems vs. stems to ending. -- Otherwise we get e.g. #reímpreso instead of reimpreso. local tempdest = {} iut.add_forms(tempdest, slot, base.prefix, stems, do_combine_stem_ending) is_combining_ending = true iut.add_forms(base.forms, slot, tempdest[slot], endings, do_combine_stem_ending) end local function insert_form(base, slot, form) if not skip_slot(base, slot) then iut.insert_form(base.forms, slot, form) end end local function insert_forms(base, slot, forms) if not skip_slot(base, slot) then iut.insert_forms(base.forms, slot, forms) end end local function add_single_stem_tense(base, slot_pref, stems, s1, s2, s3, p1, p2, p3) local function addit(slot, ending) add3(base, slot_pref .. "_" .. slot, stems, ending) end addit("1s", s1) addit("2s", s2) addit("3s", s3) addit("1p", p1) addit("2p", p2) addit("3p", p3) end local function add_present_indic(base) local function addit(slot, stems, ending) add3(base, "pres_" .. slot, stems, ending) end local s2, s2v, s3, p1, p2, p3 if base.conj == "ar" then s2, s2v, s3, p1, p2, p3 = "as", "ás", "a", "amos", "áis", "an" elseif base.conj == "er" then s2, s2v, s3, p1, p2, p3 = "es", "és", "e", "emos", "éis", "en" elseif base.conj == "ir" then s2, s2v, s3, p1, p2, p3 = "es", "ís", "e", "imos", "ís", "en" else error("Internal error: Unrecognized conjugation " .. base.conj) end addit("1s", base.stems.pres1, "o") addit("2s", base.stems.pres_stressed, s2) addit("2sv", base.stems.pres_unstressed, s2v) addit("3s", base.stems.pres_stressed, s3) addit("1p", base.stems.pres_unstressed, p1) addit("2p", base.stems.pres_unstressed, p2) addit("3p", base.stems.pres_stressed, p3) end local function add_present_subj(base) local function addit(slot, stems, ending) add3(base, "pres_sub_" .. slot, stems, ending) end local s1, s2, s2v, s3, p1, p2, p3, voseo_stem if base.conj == "ar" then s1, s2, s2v, s3, p1, p2, p3 = "e", "es", "és", "e", "emos", "éis", "en" else s1, s2, s2v, s3, p1, p2, p3 = "a", "as", "ás", "a", "amos", "áis", "an" end addit("1s", base.stems.pres_sub_stressed, s1) addit("2s", base.stems.pres_sub_stressed, s2) addit("2sv", base.stems.pres_sub_unstressed, s2v) addit("3s", base.stems.pres_sub_stressed, s3) addit("1p", base.stems.pres_sub_unstressed, p1) addit("2p", base.stems.pres_sub_unstressed, p2) addit("3p", base.stems.pres_sub_stressed, p3) end local function add_imper(base) local function addit(slot, stems, ending) add3(base, "imp_" .. slot, stems, ending) end if base.conj == "ar" then addit("2s", base.stems.pres_stressed, "a") addit("2sv", base.stems.pres_unstressed, "á") addit("2p", base.stems.pres_unstressed, "ad") elseif base.conj == "er" then addit("2s", base.stems.pres_stressed, "e") addit("2sv", base.stems.pres_unstressed, "é") addit("2p", base.stems.pres_unstressed, "ed") elseif base.conj == "ir" then addit("2s", base.stems.pres_stressed, "e") addit("2sv", base.stems.pres_unstressed, "í") addit("2p", base.stems.pres_unstressed, "id") else error("Internal error: Unrecognized conjugation " .. base.conj) end end local function add_finite_non_present(base) local function add_tense(slot, stem, s1, s2, s3, p1, p2, p3) add_single_stem_tense(base, slot, stem, s1, s2, s3, p1, p2, p3) end local stems = base.stems if stems.full_impf then -- An override needs to be supplied for the impf_1p due to the accent on the stem. add_tense("impf", stems.full_impf, "a", "as", "a", {}, "ais", "an") elseif base.conj == "ar" then add_tense("impf", stems.impf, "aba", "abas", "aba", "ábamos", "abais", "aban") else add_tense("impf", stems.impf, "ía", "ías", "ía", "íamos", "íais", "ían") end if stems.pret_conj == "irreg" then add_tense("pret", stems.pret, "e", "iste", "o", "imos", "isteis", "ieron") elseif stems.pret_conj == "ar" then add_tense("pret", stems.pret, "é", "aste", "ó", "amos", "asteis", "aron") else add_tense("pret", stems.pret, "í", "iste", "ió", "imos", "isteis", "ieron") end if stems.pret_conj == "ar" then add_tense("impf_sub_ra", stems.impf_sub_ra, "ara", "aras", "ara", "áramos", "arais", "aran") add_tense("impf_sub_se", stems.impf_sub_se, "ase", "ases", "ase", "ásemos", "aseis", "asen") add_tense("fut_sub", stems.fut_sub, "are", "ares", "are", "áremos", "areis", "aren") else add_tense("impf_sub_ra", stems.impf_sub_ra, "iera", "ieras", "iera", "iéramos", "ierais", "ieran") add_tense("impf_sub_se", stems.impf_sub_se, "iese", "ieses", "iese", "iésemos", "ieseis", "iesen") add_tense("fut_sub", stems.fut_sub, "iere", "ieres", "iere", "iéremos", "iereis", "ieren") end add_tense("fut", stems.fut, "é", "ás", "á", "emos", "éis", "án") add_tense("cond", stems.cond, "ía", "ías", "ía", "íamos", "íais", "ían") end local function add_non_finite_forms(base) local stems = base.stems local function addit(slot, stems, ending) add3(base, slot, stems, ending) end insert_form(base, "infinitive", {form = base.verb}) -- Also insert "infinitive + reflexive pronoun" combinations if we're handling a reflexive verb. See comment below for -- "gerund + reflexive pronoun" combinations. if base.refl then for _, persnum in ipairs(person_number_list_basic) do insert_form(base, "infinitive_" .. persnum, {form = base.verb}) end end local ger_ending = base.conj == "ar" and "ando" or "iendo" addit("gerund", stems.pres_unstressed, ger_ending) -- Also insert "gerund + reflexive pronoun" combinations if we're handling a reflexive verb. We insert exactly the same -- form as for the bare gerund; later on in add_reflexive_or_fixed_clitic_to_forms(), we add the appropriate clitic -- pronouns. It's important not to do this for non-reflexive verbs, because in that case, the clitic pronouns won't be -- added, and {{es-verb form of}} will wrongly consider all these combinations as possible inflections of the bare -- gerund. Thanks to [[User:JeffDoozan]] for this bug fix. if base.refl then for _, persnum in ipairs(person_number_list_basic) do addit("gerund_" .. persnum, stems.pres_unstressed, ger_ending) end end addit("pp_ms", stems.pp, "o") addit("pp_fs", stems.pp, "a") addit("pp_mp", stems.pp, "os") addit("pp_fp", stems.pp, "as") end local function copy_subjunctives_to_imperatives(base) -- Copy subjunctives to imperatives, unless there's an override for the given slot (as with the imp_1p of [[ir]]). for _, persnum in ipairs({"3s", "1p", "3p"}) do local from = "pres_sub_" .. persnum local to = "imp_" .. persnum insert_forms(base, to, iut.map_forms(base.forms[from], function(form) return form end)) end end -- Remove monosyllabic accents (e.g. the 3sg preterite of fiar is fio not #fió). Note that there are a -- few monosyllabic verb forms that intentionally have an accent, to distinguish them from other words -- with the same pronunciation. These are as follows: -- (1) [[sé]] 1sg present indicative of [[saber]]; -- (2) [[sé]] 2sg imperative of [[ser]]; -- (3) [[dé]] 1sg and 3sg present subjunctive of [[dar]]. -- For these, a * is added, which indicates that the accent needs to remain. If we see such a *, we remove -- it but otherwise leave the form alone. local function remove_monosyllabic_accents(base) for _, slotaccel in ipairs(base.alternant_multiword_spec.verb_slots_basic) do local slot, accel = unpack(slotaccel) if base.forms[slot] then for _, form in ipairs(base.forms[slot]) do if form.form:find("%*") then -- * means leave alone any accented vowel form.form = form.form:gsub("%*", "") elseif may_need_monosyllabic_accent_removed(form.form) then -- Has an accented vowel and no VCV sequence and not a suffix; may be monosyllabic, in which -- case we need to remove the accent. Check # of syllables and remove accent if only 1. Note -- that the checks for accented vowel and VCV sequence are not strictly needed, but are -- optimizations to avoid running the whole syllabification algorithm on every verb form. local syllables = com.syllabify(form.form) if #syllables == 1 then form.form = com.remove_accent_from_syllable(syllables[1]) end end end end end end -- Add the appropriate clitic pronouns in `clitics` to the forms in `base_slot`. `store_cliticized_form` is a function -- of three arguments (clitic, formobj, cliticized_form) and should store the cliticized form for the specified clitic -- and form object. local function add_forms_with_clitic(base, base_slot, clitics, store_cliticized_form) -- the special slot lxx is for le/les clitics that become "se" in double clitics if base_slot:match("_comb_lxx$") then base_slot = base_slot:gsub("_comb_lxx$", "_comb_le") end if not base.forms[base_slot] then mw.log("unhandled base_slot " .. base_slot) -- This can happen, e.g. in only3s/only3sp/only3p verbs. return end for _, formobj in ipairs(base.forms[base_slot]) do -- Figure out the correct accenting of the verb when a clitic pronoun is attached to it. We may need to -- add or remove an accent mark: -- (1) No accent mark currently, none needed: infinitive sentar -> sentarlo; imperative singular ten -> tenlo; -- (2) Accent mark currently, still needed: infinitive oír -> oírlo; -- (3) No accent mark currently, accent needed: imperative singular siente -> siéntelo; -- (4) Accent mark currently, not needed: imperative singular está -> estalo, sé -> selo. local syllables = com.syllabify(formobj.form) local sylno = com.stressed_syllable(syllables) table.insert(syllables, "lo") local needs_accent = com.accent_needed(syllables, sylno) if needs_accent then syllables[sylno] = com.add_accent_to_syllable(syllables[sylno]) else syllables[sylno] = com.remove_accent_from_syllable(syllables[sylno]) end table.remove(syllables) -- remove added clitic pronoun local reaccented_form = table.concat(syllables) for _, clitic in ipairs(clitics) do local cliticized_form -- Some further special cases. if base_slot == "imp_1p" and (clitic == "nos" or clitic == "os") then -- Final -s disappears: sintamos + nos -> sintámonos, sintamos + os -> sintámoos cliticized_form = reaccented_form:gsub("s$", "") .. clitic elseif base_slot == "imp_2p" and clitic == "os" then -- Final -d disappears, which may cause an accent to be required: -- haced + os -> haceos, sentid + os -> sentíos if reaccented_form:find("id$") then cliticized_form = reaccented_form:gsub("id$", "íos") else cliticized_form = reaccented_form:gsub("d$", "os") end else cliticized_form = reaccented_form .. clitic end store_cliticized_form(clitic, formobj, cliticized_form) end end end -- Generate the combinations of verb form (infinitive, gerund or various imperatives) + clitic pronoun. local function add_combined_forms(base) for _, base_slot_and_clitics in ipairs(base.alternant_multiword_spec.verb_slot_combined_rows) do local base_slot, clitics = unpack(base_slot_and_clitics) add_forms_with_clitic(base, base_slot, clitics, function(clitic, formobj, cliticized_form) insert_form(base, base_slot .. "_comb_" .. clitic, {form = cliticized_form, footnotes = formobj.footnotes}) end ) end for _, single_comb_slot_and_clitics in ipairs(base.alternant_multiword_spec.verb_slot_double_combined_rows) do local single_comb_slot, clitics = unpack(single_comb_slot_and_clitics) -- Handle le -> se transformation for double clitics if single_comb_slot:match("_comb_lxx$") then add_forms_with_clitic(base, single_comb_slot, clitics, function(clitic, formobj, cliticized_form) -- Only add se version for accusative clitics (lo/la/los/las) if clitic:match("^l[aeo]") then cliticized_form = cliticized_form:gsub("le" .. clitic .. "$", "se" .. clitic) insert_form(base, single_comb_slot .. "_" .. clitic, {form = cliticized_form, footnotes = formobj.footnotes}) end end ) end add_forms_with_clitic(base, single_comb_slot, clitics, function(clitic, formobj, cliticized_form) insert_form(base, single_comb_slot .. "_" .. clitic, {form = cliticized_form, footnotes = formobj.footnotes}) end ) end end local function process_slot_overrides(base, do_basic, reflexive_only) local overrides = reflexive_only and base.basic_reflexive_only_overrides or do_basic and base.basic_overrides or base.combined_overrides for slot, forms in pairs(overrides) do local suppress_prefix = base.prefix == "" or check_stems_for_suppress_prefix(slot, forms) add(base, slot, suppress_prefix and "" or base.prefix, forms, false, "allow overrides") end end -- Prefix `form` with `clitic`, adding fixed text `between` between them. Add links as appropriate unless the user -- requested no links. Check whether form already has brackets (as will be the case if the form has a fixed clitic). local function add_clitic_to_form(base, clitic, between, form) if base.alternant_multiword_spec.args.noautolinkverb then return clitic .. between .. form else local clitic_pref = "[[" .. clitic .. "]]" .. between if form:find("%[%[") then return clitic_pref .. form else return clitic_pref .. "[[" .. form .. "]]" end end end -- Add a reflexive pronoun or fixed clitic, e.g. [[lo]], as appropriate to the base form that were generated. -- `do_joined` means to do only the forms where the pronoun is joined to the end of the form; otherwise, do only the -- forms where it is not joined and precedes the form. local function add_reflexive_or_fixed_clitic_to_forms(base, do_reflexive, do_joined) for _, slotaccel in ipairs(base.alternant_multiword_spec.verb_slots_basic) do local slot, accel = unpack(slotaccel) local clitic if not do_reflexive then clitic = base.clitic elseif slot:find("[123]") then local persnum = slot:match("^.*_(.-)$") clitic = person_number_to_reflexive_pronoun[persnum] else clitic = "se" end if base.forms[slot] then if do_reflexive and slot:find("^pp_") or slot == "infinitive_linked" then -- do nothing with reflexive past participles or with infinitive linked (handled at the end) elseif slot:find("^neg_imp_") then error("Internal error: Should not have forms set for negative imperative at this stage") else local slot_has_suffixed_clitic = slot:find("infinitive") or slot:find("gerund") or slot:find("^imp_") -- Maybe generate non-reflexive parts and separated syntactic variants for use in {{es-verb form of}}. -- See comment in add_slots() above `need_special_verb_form_of_slots`. Check for do_joined so we only -- run this code once. if do_reflexive and do_joined and base.alternant_multiword_spec.source_template == "es-verb form of" and -- Skip personal variants of infinitives and gerunds so we don't think [[jambando]] is a -- non-reflexive equivalent of [[jambándome]]. not slot:find("infinitive_") and not slot:find("gerund_") then -- Clone the forms because we will be destructively modifying them just below, adding the reflexive -- pronoun. insert_forms(base, slot .. "_non_reflexive", mw.clone(base.forms[slot])) if slot_has_suffixed_clitic then insert_forms(base, slot .. "_variant", iut.map_forms(base.forms[slot], function(form) return add_clitic_to_form(base, clitic, " ... ", form) end)) end end if slot_has_suffixed_clitic then if do_joined then add_forms_with_clitic(base, slot, {clitic}, function(clitic, formobj, cliticized_form) formobj.form = cliticized_form end ) end elseif not do_joined then -- Add clitic as separate word before all other forms. for _, form in ipairs(base.forms[slot]) do form.form = add_clitic_to_form(base, clitic, " ", form.form) end end end end end end local function handle_infinitive_linked(base) -- Compute linked versions of potential lemma slots, for use in {{es-verb}}. -- We substitute the original lemma (before removing links) for forms that -- are the same as the lemma, if the original lemma has links. for _, slot in ipairs({"infinitive"}) do insert_forms(base, slot .. "_linked", iut.map_forms(base.forms[slot], function(form) if form == base.lemma and rfind(base.linked_lemma, "%[%[") then return base.linked_lemma else return form end end)) end end local function generate_negative_imperatives(base) -- Copy subjunctives to negative imperatives, preceded by "no". for _, persnum in ipairs(neg_imp_person_number_list) do local from = "pres_sub_" .. persnum local to = "neg_imp_" .. persnum insert_forms(base, to, iut.map_forms(base.forms[from], function(form) if base.alternant_multiword_spec.args.noautolinkverb then return "no " .. form elseif form:find("%[%[") then -- already linked, e.g. when reflexive return "[[no]] " .. form else return "[[no]] [[" .. form .. "]]" end end)) end end -- Process specs given by the user using 'addnote[SLOTSPEC][FOOTNOTE][FOOTNOTE][...]'. local function process_addnote_specs(base) for _, spec in ipairs(base.addnote_specs) do for _, slot_spec in ipairs(spec.slot_specs) do slot_spec = "^" .. slot_spec .. "$" for slot, forms in pairs(base.forms) do if rfind(slot, slot_spec) then -- To save on memory, side-effect the existing forms. for _, form in ipairs(forms) do form.footnotes = iut.combine_footnotes(form.footnotes, spec.footnotes) end end end end end end local function add_missing_links_to_forms(base) -- Any forms without links should get them now. Redundant ones will be stripped later. for slot, forms in pairs(base.forms) do for _, form in ipairs(forms) do if not form.form:find("%[%[") then form.form = "[[" .. form.form .. "]]" end end end end local function conjugate_verb(base) add_present_indic(base) add_present_subj(base) add_imper(base) add_finite_non_present(base) add_non_finite_forms(base) -- This should happen before add_combined_forms() so overrides of basic forms end up part of the combined forms. process_slot_overrides(base, "do basic") -- do basic slot overrides -- This should happen after process_slot_overrides() in case a derived slot is based on an override (as with the -- imp_3s of [[dar]], [[estar]]). copy_subjunctives_to_imperatives(base) -- This should happen after process_slot_overrides() because overrides may have accents in them that need to be -- removed. (This happens e.g. for most present indicative forms of [[ver]], which have accents in them for the -- prefixed derived verbs, but the accents shouldn't be present in the base verb.) remove_monosyllabic_accents(base) if not base.nocomb then add_combined_forms(base) end -- We need to add joined reflexives, then joined and non-joined clitics, then non-joined reflexives, so we get -- [[házmelo]] but [[no]] [[me]] [[lo]] [[haga]]. if base.refl then -- This should happen after remove_monosyllabic_accents() so the * marking the preservation of monosyllabic -- accents doesn't end up in the middle of a word. add_reflexive_or_fixed_clitic_to_forms(base, "do reflexive", "do joined") process_slot_overrides(base, "do basic", "do reflexive") -- do reflexive-only basic slot overrides end if base.clitic then -- This should happen after reflexives are added. add_reflexive_or_fixed_clitic_to_forms(base, false, "do joined") add_reflexive_or_fixed_clitic_to_forms(base, false, false) end if base.refl then add_reflexive_or_fixed_clitic_to_forms(base, "do reflexive", false) end -- This should happen after add_reflexive_or_fixed_clitic_to_forms() so negative imperatives get the reflexive pronoun -- and clitic in them. generate_negative_imperatives(base) if not base.nocomb then process_slot_overrides(base, false) -- do combined slot overrides end -- This should happen before add_missing_links_to_forms() so that the comparison `form == base.lemma` -- in handle_infinitive_linked() works correctly and compares unlinked forms to unlinked forms. handle_infinitive_linked(base) process_addnote_specs(base) if not base.alternant_multiword_spec.args.noautolinkverb then add_missing_links_to_forms(base) end end local function parse_indicator_spec(angle_bracket_spec) -- Store the original angle bracket spec so we can reconstruct the overall conj spec with the lemma(s) in them. local base = { angle_bracket_spec = angle_bracket_spec, user_basic_overrides = {}, user_stems = {}, addnote_specs = {}, } local function parse_err(msg) error(msg .. ": " .. angle_bracket_spec) end local function fetch_footnotes(separated_group) local footnotes for j = 2, #separated_group - 1, 2 do if separated_group[j + 1] ~= "" then parse_err("Extraneous text after bracketed footnotes: '" .. table.concat(separated_group) .. "'") end if not footnotes then footnotes = {} end table.insert(footnotes, separated_group[j]) end return footnotes end local inside = angle_bracket_spec:match("^<(.*)>$") assert(inside) if inside == "" then return base end local segments = put.parse_balanced_segment_run(inside, "[", "]") local dot_separated_groups = put.split_alternating_runs(segments, "%.") for i, dot_separated_group in ipairs(dot_separated_groups) do local first_element = dot_separated_group[1] if first_element == "addnote" then local spec_and_footnotes = fetch_footnotes(dot_separated_group) if #spec_and_footnotes < 2 then parse_err("Spec with 'addnote' should be of the form 'addnote[SLOTSPEC][FOOTNOTE][FOOTNOTE][...]'") end local slot_spec = table.remove(spec_and_footnotes, 1) local slot_spec_inside = rmatch(slot_spec, "^%[(.*)%]$") if not slot_spec_inside then parse_err("Internal error: slot_spec " .. slot_spec .. " should be surrounded with brackets") end local slot_specs = rsplit(slot_spec_inside, ",") -- FIXME: Here, [[Module:it-verb]] called strip_spaces(). Generally we don't do this. Should we? table.insert(base.addnote_specs, {slot_specs = slot_specs, footnotes = spec_and_footnotes}) elseif indicator_flags[first_element] then if #dot_separated_group > 1 then parse_err("No footnotes allowed with '" .. first_element .. "' spec") end if base[first_element] then parse_err("Spec '" .. first_element .. "' specified twice") end base[first_element] = true elseif rfind(first_element, ":") then local colon_separated_groups = put.split_alternating_runs(dot_separated_group, "%s*:%s*") local first_element = colon_separated_groups[1][1] if #colon_separated_groups[1] > 1 then parse_err("Can't attach footnotes directly to '" .. first_element .. "' spec; attach them to the " .. "colon-separated values following the initial colon") end if overridable_stems[first_element] then if base.user_stems[first_element] then parse_err("Overridable stem '" .. first_element .. "' specified twice") end table.remove(colon_separated_groups, 1) base.user_stems[first_element] = overridable_stems[first_element](colon_separated_groups, {prefix = first_element, base = base, parse_err = parse_err, fetch_footnotes = fetch_footnotes}) else -- assume a basic override; we validate further later when the possible slots are available if base.user_basic_overrides[first_element] then parse_err("Basic override '" .. first_element .. "' specified twice") end table.remove(colon_separated_groups, 1) base.user_basic_overrides[first_element] = allow_multiple_values_for_override( colon_separated_groups, {prefix = first_element, base = base, parse_err = parse_err, fetch_footnotes = fetch_footnotes}, "add monosyllabic asterisk" ) end else local comma_separated_groups = put.split_alternating_runs(dot_separated_group, "%s*,%s*") for j = 1, #comma_separated_groups do local alt = comma_separated_groups[j][1] if not vowel_alternants[alt] then if #comma_separated_groups == 1 then parse_err("Unrecognized spec or vowel alternant '" .. alt .. "'") else parse_err("Unrecognized vowel alternant '" .. alt .. "'") end end if base.vowel_alt then for _, existing_alt in ipairs(base.vowel_alt) do if existing_alt.form == alt then parse_err("Vowel alternant '" .. alt .. "' specified twice") end end else base.vowel_alt = {} end table.insert(base.vowel_alt, {form = alt, footnotes = fetch_footnotes(comma_separated_groups[j])}) end end end return base end -- Normalize all lemmas, substituting the pagename for blank lemmas and adding links to multiword lemmas. local function normalize_all_lemmas(alternant_multiword_spec, pagename) -- (1) Add links to all before and after text. Remember the original text so we can reconstruct the verb spec later. if not alternant_multiword_spec.args.noautolinktext then iut.add_links_to_before_and_after_text(alternant_multiword_spec, "remember original") end -- (2) Remove any links from the lemma, but remember the original form -- so we can use it below in the 'lemma_linked' form. iut.map_word_specs(alternant_multiword_spec, function(base) if base.lemma == "" then base.lemma = pagename end base.user_specified_lemma = base.lemma base.lemma = m_links.remove_links(base.lemma) local refl_verb, clitic = rmatch(base.lemma, "^(.-)(l[aeo]s?)$") if not refl_verb then refl_verb, clitic = base.lemma, nil end local verb, refl = rmatch(refl_verb, "^(.-)(se)$") if not verb then verb, refl = refl_verb, nil end base.user_specified_verb = verb base.refl = refl base.clitic = clitic if base.refl and base.clitic then -- We have to parse the verb suffix to see how to construct the base verb; e.g. -- abrírsela -> abrir but oírsela -> oír. We parse the verb suffix again in all cases -- in detect_indicator_spec(), after splitting off the prefix of irrregular verbs. local actual_verb local inf_stem, suffix = rmatch(base.user_specified_verb, "^(.*)([aáeéií]r)$") if not inf_stem then error("Unrecognized infinitive: " .. base.user_specified_verb) end if suffix == "ír" and inf_stem:find("[aeo]$") then -- accent on suffix should remain base.verb = base.user_specified_verb else base.verb = inf_stem .. com.remove_accent_from_syllable(suffix) end else base.verb = base.user_specified_verb end local linked_lemma if alternant_multiword_spec.args.noautolinkverb or base.user_specified_lemma:find("%[%[") then linked_lemma = base.user_specified_lemma elseif base.refl or base.clitic then -- Reconstruct the linked lemma with separate links around base verb, reflexive pronoun and clitic. linked_lemma = base.user_specified_verb == base.verb and "[[" .. base.user_specified_verb .. "]]" or "[[" .. base.verb .. "|" .. base.user_specified_verb .. "]]" linked_lemma = linked_lemma .. (refl and "[[" .. refl .. "]]" or "") .. (clitic and "[[" .. clitic .. "]]" or "") else -- Add links to the lemma so the user doesn't specifically need to, since we preserve -- links in multiword lemmas and include links in non-lemma forms rather than allowing -- the entire form to be a link. linked_lemma = iut.add_links(base.user_specified_lemma) end base.linked_lemma = linked_lemma end) end local function construct_stems(base) local stems = base.stems stems.pres_unstressed = stems.pres_unstressed or base.inf_stem stems.pres_stressed = stems.pres_stressed or -- If no_pres_stressed given, pres_stressed stem should be empty so no forms are generated. base.no_pres_stressed and {} or base.vowel_alt or base.inf_stem stems.pres1_and_sub = stems.pres1_and_sub or -- If no_pres_stressed given, the entire subjunctive is missing. base.no_pres_stressed and {} or -- If no_pres1_and_sub given, pres1 and entire subjunctive are missing. base.no_pres1_and_sub and {} or nil stems.pres1 = stems.pres1 or stems.pres1_and_sub or stems.pres_stressed stems.impf = stems.impf or base.inf_stem stems.pret = stems.pret or base.inf_stem stems.pret_conj = stems.pret_conj or base.conj stems.fut = stems.fut or base.inf_stem .. base.conj stems.cond = stems.cond or stems.fut stems.pres_sub_stressed = stems.pres_sub_stressed or stems.pres1 stems.pres_sub_unstressed = stems.pres_sub_unstressed or stems.pres1_and_sub or stems.pres_unstressed stems.impf_sub_ra = stems.impf_sub_ra or stems.pret stems.impf_sub_se = stems.impf_sub_se or stems.pret stems.fut_sub = stems.fut_sub or stems.pret stems.pp = stems.pp or base.conj == "ar" and combine_stem_ending(base, "pp_ms", base.inf_stem, "ad", "is combining ending") or -- use combine_stem_ending esp. so we get reído, caído, etc. combine_stem_ending(base, "pp_ms", base.inf_stem, "id", "is combining ending") end -- Make a list of the slots given in `list1` and optionally `list2`, with `prefix` added to the beginning of each slot -- name. The elements of each list are of the form {SLOT, ACCEL}. Used for error messages. local function construct_possible_slots(list1, list2, prefix) list2 = list2 or {} prefix = prefix or "" local slots = {} local function insert_list_slots(list) for _, slotaccel in ipairs(list) do local slot, accel = unpack(slotaccel) table.insert(slots, prefix .. slot) end end insert_list_slots(list1) insert_list_slots(list2) return m_table.serialCommaJoin(slots) end local function detect_indicator_spec(base) base.forms = {} base.non_reflexive_forms = {} base.stems = {} if (base.only3s and 1 or 0) + (base.only3sp and 1 or 0) + (base.only3p and 1 or 0) > 1 then error("Only one of 'only3s', 'only3sp' and 'only3p' can be specified") end base.basic_overrides = {} base.basic_reflexive_only_overrides = {} base.combined_overrides = {} if not base.no_built_in then for _, built_in_conj in ipairs(built_in_conjugations) do if type(built_in_conj.match) == "function" then base.prefix, base.non_prefixed_verb = built_in_conj.match(base.verb) elseif built_in_conj.match:find("^%^") and rsub(built_in_conj.match, "^%^", "") == base.verb then -- begins with ^, for exact match, and matches base.prefix, base.non_prefixed_verb = "", base.verb else base.prefix, base.non_prefixed_verb = rmatch(base.verb, "^(.*)(" .. built_in_conj.match .. ")$") end if base.prefix then -- we found a built-in verb base.irreg_verb = true for stem, forms in pairs(built_in_conj.forms) do if stem:find("^refl_") then stem = stem:gsub("^refl_", "") if not base.alternant_multiword_spec.verb_slots_basic_map[stem] then error("Internal error: setting for 'refl_" .. stem .. "' does not refer to a basic verb slot") end base.basic_reflexive_only_overrides[stem] = forms elseif base.alternant_multiword_spec.verb_slots_basic_map[stem] then -- an individual form override of a basic form base.basic_overrides[stem] = forms elseif base.alternant_multiword_spec.verb_slots_combined_map[stem] then -- an individual form override of a combined form base.combined_overrides[stem] = forms else base.stems[stem] = forms end end break end end end -- Override built-in-verb stems and overrides with user-specified ones. for stem, values in pairs(base.user_stems) do base.stems[stem] = values end for override, values in pairs(base.user_basic_overrides) do if override:find("^refl_") then if not base.refl then error("Can't set reflexive-only override '" .. override .. "' on a non-reflexive verb") end override = override:gsub("^refl_", "") if not base.alternant_multiword_spec.verb_slots_basic_map[override] then error("Unrecognized reflexive-only override 'refl_" .. override .. "': possible slots are " .. construct_possible_slots(base.alternant_multiword_spec.verb_slots_basic, nil, "refl_")) end base.basic_reflexive_only_overrides[override] = values elseif base.alternant_multiword_spec.verb_slots_basic_map[override] then base.basic_overrides[override] = values elseif base.alternant_multiword_spec.verb_slots_combined_map[override] then base.combined_overrides[override] = values else error("Unrecognized override '" .. override .. "': possible slots are " .. construct_possible_slots(base.alternant_multiword_spec.verb_slots_basic, base.alternant_multiword_spec.verb_slots_combined)) end end base.prefix = base.prefix or "" base.non_prefixed_verb = base.non_prefixed_verb or base.verb local inf_stem, suffix = rmatch(base.non_prefixed_verb, "^(.*)([aeií]r)$") if not inf_stem then error("Unrecognized infinitive: " .. base.verb) end base.inf_stem = inf_stem suffix = suffix == "ír" and "ir" or suffix base.conj = suffix base.frontback = suffix == "ar" and "back" or "front" if base.stems.vowel_alt then -- built-in verb with specified vowel alternation if base.vowel_alt then error(base.verb .. " is a recognized built-in verb, and should not have vowel alternations specified with it") end base.vowel_alt = iut.convert_to_general_list_form(base.stems.vowel_alt) end -- Propagate built-in-verb indicator flags to `base` and combine with user-specified flags. for indicator_flag, _ in pairs(indicator_flags) do base[indicator_flag] = base[indicator_flag] or base.stems[indicator_flag] end -- Convert vowel alternation indicators into stems. if base.vowel_alt then for _, altform in ipairs(base.vowel_alt) do altform.alt = altform.form -- save original indicator local alt = altform.alt if base.conj == "ir" then local raising = ( alt == "ie-i" or alt == "ye-i" or alt == "ue-u" or alt == "i" or alt == "í" or alt == "ú" ) if base.stems.raising_conj == nil then base.stems.raising_conj = raising elseif base.stems.raising_conj ~= raising then error("Can't currently support a mixture of raising (e.g. 'ie-i') and non-raising (e.g. 'ie') vowel alternations in -ir verbs") end end if alt == "+" then altform.form = base.inf_stem else local normalized_alt = alt if alt == "ie-i" or alt == "ye-i" or alt == "ue-u" then if base.conj ~= "ir" then error("Vowel alternation '" .. alt .. "' only supported with -ir verbs") end -- ie-i is like i except for the vowel raising before i+V, similarly for ye-i, ue-u, -- so convert appropriately. normalized_alt = alt == "ie-i" and "ie" or alt == "ye-i" and "ye" or "ue" end local ret = com.apply_vowel_alternation(base.inf_stem, normalized_alt) if ret.err then error("To use '" .. alt .. "', present stem '" .. base.inf_stem .. "' " .. ret.err) end altform.form = ret.ret end end end end local function detect_all_indicator_specs(alternant_multiword_spec) -- Propagate some settings up; some are used internally, others by [[Module:es-headword]]. iut.map_word_specs(alternant_multiword_spec, function(base) -- Internal indicator flags. Do these before calling detect_indicator_spec() because add_slots() uses them. for _, prop in ipairs { "refl", "clitic" } do if base[prop] then alternant_multiword_spec[prop] = true end end base.alternant_multiword_spec = alternant_multiword_spec -- If reflexive or fixed clitic, don't include combined forms. alternant_multiword_spec.nocomb = alternant_multiword_spec.nocomb or base.clitic or base.refl end) add_slots(alternant_multiword_spec) iut.map_word_specs(alternant_multiword_spec, function(base) base.nocomb = alternant_multiword_spec.args.nocomb detect_indicator_spec(base) -- User-specified indicator flags. Do these after calling detect_indicator_spec() because the latter may set these -- indicators for built-in verbs. for prop, _ in pairs(indicator_flags) do if base[prop] then alternant_multiword_spec[prop] = true end end construct_stems(base) end) end local function add_categories_and_annotation(alternant_multiword_spec, base, multiword_lemma) local function insert_ann(anntype, value) m_table.insertIfNot(alternant_multiword_spec.annotation[anntype], value) end local function insert_cat(cat, also_when_multiword) -- Don't place multiword terms in categories like 'Spanish verbs ending in -ar' to avoid spamming the -- categories with such terms. if also_when_multiword or not multiword_lemma then -- m_table.insertIfNot(alternant_multiword_spec.categories, "Spanish " .. cat) end end if check_for_red_links and alternant_multiword_spec.source_template == "es-conj" and multiword_lemma then for _, slot_and_accel in ipairs(alternant_multiword_spec.all_verb_slots) do local slot = slot_and_accel[1] local forms = base.forms[slot] local must_break = false if forms then for _, form in ipairs(forms) do if not form.form:find("%[%[") then local title = mw.title.new(form.form) if title and not title.exists then -- insert_cat("verbs with red links in their inflection tables") must_break = true break end end end end if must_break then break end end end insert_cat("verbs ending in -" .. base.conj) if base.irreg_verb then insert_ann("irreg", "irregular") -- insert_cat("irregular verbs") else insert_ann("irreg", "regular") end if base.only3s then insert_ann("defective", "impersonal") -- insert_cat("impersonal verbs") elseif base.only3sp then insert_ann("defective", "third-person only") -- insert_cat("third-person-only verbs") elseif base.only3p then insert_ann("defective", "third-person plural only") -- insert_cat("third-person-plural-only verbs") elseif base.no_pres_stressed or base.no_pres1_and_sub then insert_ann("defective", "defective") -- insert_cat("defective verbs") else insert_ann("defective", "regular") end if base.clitic then -- insert_cat("verbs with lexical clitics") end if base.refl then -- insert_cat("reflexive verbs") end if not base.vowel_alt then insert_ann("vowel_alt", "non-alternating") else local inf_stem = base.inf_stem:gsub("[gq]u$", "x") for _, alt in ipairs(base.vowel_alt) do if alt.alt == "+" then insert_ann("vowel_alt", "non-alternating") else local desc if alt.alt == "ue" and rfind(inf_stem, "u" .. C .. "*$") then desc = "u-ue alternation" -- jugar elseif alt.alt == "ie" and rfind(inf_stem, "i" .. C .. "*$") then desc = "i-ie alternation" -- adquirir elseif alt.alt == "í" and rfind(inf_stem, "e" .. C .. "*$") then desc = "e-í alternation" -- reír, freír, etc. else desc = vowel_alternant_to_desc[alt.alt] .. " alternation" end insert_ann("vowel_alt", desc) -- insert_cat("verbs with " .. desc) end end end local cons_alt = base.stems.cons_alt if cons_alt == nil then if base.conj == "ar" then if base.inf_stem:find("z$") then cons_alt = "c-z" elseif base.inf_stem:find("ç$") then cons_alt = "c-ç" elseif base.inf_stem:find("c$") then cons_alt = "c-qu" elseif base.inf_stem:find("g$") then cons_alt = "g-gu" elseif base.inf_stem:find("gu$") then cons_alt = "gu-gü" end else if base.no_pres_stressed or base.no_pres1_and_sub then cons_alt = nil -- no c-zc alternation in balbucir or arrecir elseif rfind(base.inf_stem, V .. "c$") then cons_alt = "c-zc" elseif base.inf_stem:find("sc$") then cons_alt = "hard-soft" elseif base.inf_stem:find("c$") then cons_alt = "c-z" elseif base.inf_stem:find("qu$") then cons_alt = "c-qu" elseif base.inf_stem:find("g$") then cons_alt = "g-j" elseif base.inf_stem:find("gu$") then cons_alt = "g-gu" elseif base.inf_stem:find("gü$") then cons_alt = "gu-gü" end end end if cons_alt then local desc = cons_alt .. " alternation" insert_ann("cons_alt", desc) insert_cat("verbs with " .. desc) else insert_ann("cons_alt", "non-alternating") end end -- Compute the categories to add the verb to, as well as the annotation to display in the -- conjugation title bar. We combine the code to do these functions as both categories and -- title bar contain similar information. local function compute_categories_and_annotation(alternant_multiword_spec) alternant_multiword_spec.categories = {} local ann = {} alternant_multiword_spec.annotation = ann ann.irreg = {} ann.defective = {} ann.vowel_alt = {} ann.cons_alt = {} local multiword_lemma = false for _, form in ipairs(alternant_multiword_spec.forms.infinitive) do if form.form:find(" ") then multiword_lemma = true break end end iut.map_word_specs(alternant_multiword_spec, function(base) add_categories_and_annotation(alternant_multiword_spec, base, multiword_lemma) end) local ann_parts = {} local irreg = table.concat(ann.irreg, " or ") if irreg ~= "" and irreg ~= "regular" then table.insert(ann_parts, irreg) end local defective = table.concat(ann.defective, " or ") if defective ~= "" and defective ~= "regular" then table.insert(ann_parts, defective) end local vowel_alt = table.concat(ann.vowel_alt, " or ") if vowel_alt ~= "" and vowel_alt ~= "non-alternating" then table.insert(ann_parts, vowel_alt) end local cons_alt = table.concat(ann.cons_alt, " or ") if cons_alt ~= "" and cons_alt ~= "non-alternating" then table.insert(ann_parts, cons_alt) end alternant_multiword_spec.annotation = table.concat(ann_parts, "; ") end local function show_forms(alternant_multiword_spec) local lemmas = alternant_multiword_spec.forms.infinitive alternant_multiword_spec.lemmas = lemmas -- save for later use in make_table() local reconstructed_verb_spec = iut.reconstruct_original_spec(alternant_multiword_spec) -- Initialize the footnotes with those for the future subjunctive and maybe the pres subjunctive -- voseo usage. In the latter case, we only do it if there is a distinct pres subjunctive voseo form. local function create_footnote_obj() local obj = iut.create_footnote_obj() iut.get_footnote_text({fut_sub_note}, obj) -- Compute whether the tuteo and voseo variants are different, for each voseo variant. -- We use this later in make_table(). for _, slot in ipairs({"pres_2s", "pres_sub_2s", "imp_2s"}) do alternant_multiword_spec["separate_" .. slot .. "v"] = false iut.map_word_specs(alternant_multiword_spec, function(base) if not m_table.deepEquals(base.forms[slot], base.forms[slot .. "v"]) then alternant_multiword_spec["separate_" .. slot .. "v"] = true end end) end if alternant_multiword_spec.separate_pres_sub_2sv then iut.get_footnote_text({pres_sub_voseo_note}, obj) end return obj end local function transform_accel_obj(slot, formobj, accel_obj) -- No accelerators for negative imperatives, which are always multiword and derived directly from the -- present subjunctive. if slot:find("^neg_imp") then return nil end if accel_obj then if slot:find("^pp_") then accel_obj.form = slot elseif slot == "gerund" then accel_obj.form = "gerund-" .. reconstructed_verb_spec else accel_obj.form = "verb-form-" .. reconstructed_verb_spec end end return accel_obj end local props = { lang = lang, lemmas = lemmas, create_footnote_obj = create_footnote_obj, transform_accel_obj = transform_accel_obj, } props.slot_list = alternant_multiword_spec.verb_slots_basic iut.show_forms(alternant_multiword_spec.forms, props) alternant_multiword_spec.footnote_basic = alternant_multiword_spec.forms.footnote props.create_footnote_obj = nil props.slot_list = alternant_multiword_spec.verb_slots_combined iut.show_forms(alternant_multiword_spec.forms, props) alternant_multiword_spec.footnote_combined = alternant_multiword_spec.forms.footnote end local notes_template = [=[ <div class="roa-footnote-outer-div" style="width:100%;"> <div class="roa-footnote-inner-div"> {footnote} </div></div> ]=] local pres_2sv_template = '<sup><sup>tú</sup></sup><br />{pres_2sv}<sup><sup>vos</sup></sup>' local pres_sub_2sv_template = '<sup><sup>tú</sup></sup><br />{pres_sub_2sv}<sup><sup>vos<sup class="roa-red-superscript">2</sup></sup></sup>' local imp_2sv_template = '<sup><sup>tú</sup></sup><br />{imp_2sv}<sup><sup>vos</sup></sup>' local basic_table = [=[ {description}<div class="NavFrame"> <div class="NavHead" align=center>&nbsp; &nbsp; သမ္ဗန္ဓဆေၚ်စပ်ကဵု {title} (ဗဵုရံၚ် [[အဆက်လက္ကရဴ:ကြိယာသပုၚ်ဂမၠိုၚ်]])</div> <div class="NavContent"> {\op}| class="roa-inflection-table" |- ! colspan="3" class="roa-nonfinite-header" | <span title="infinitivo">ကြိယာဟွံကၠောံ</span> | colspan="5" | {infinitive} |- ! colspan="3" class="roa-nonfinite-header" | <span title="gerundio">ကြိယာစၞးနာမ်</span> | colspan="5" | {gerund} |- ! rowspan="3" colspan="2" class="roa-nonfinite-header" | <span title="participio (pasado)">လုပ်ကၠောန်စွံလဝ်နကဵုအတိက်</span> | colspan="2" class="roa-nonfinite-header" | ! colspan="2" class="roa-nonfinite-header" | <span title="masculino">ပုလ္လိၚ်</span> ! colspan="2" class="roa-nonfinite-header" | <span title="femenino">ဣတ္တိလိၚ်</span> |- ! colspan="2" class="roa-nonfinite-header" | ကိုန်ဨကဝုစ် | colspan="2" | {pp_ms} | colspan="2" | {pp_fs} |- ! colspan="2" class="roa-nonfinite-header" | ကိုန်ဗဟုဝစ် | colspan="2" | {pp_mp} | colspan="2" | {pp_fp} |- ! colspan="2" rowspan="2" class="roa-person-number-header" | ! colspan="3" class="roa-person-number-header" | ကိုန်ဨကဝုစ် ! colspan="3" class="roa-person-number-header" | ကိုန်ဗဟုဝစ် |- ! class="roa-person-number-header" | ပူဂဵုမရနုက်ကဵု ၁ ! class="roa-person-number-header" | ပူဂဵုမရနုက်ကဵု ၂ ! class="roa-person-number-header" | ပူဂဵုမရနုက်ကဵု ၃ ! class="roa-person-number-header" | ပူဂဵုမရနုက်ကဵု ၁ ! class="roa-person-number-header" | ပူဂဵုမရနုက်ကဵု ၂ ! class="roa-person-number-header" | ပူဂဵုမရနုက်ကဵု ၃ |-{reflexive_non_finite_clause} ! rowspan="6" class="roa-indicative-left-rail" | <span title="indicativo">ပရေၚ်စၞောန်ထ္ၜး</span> ! class="roa-native-person-number-header" | ! class="roa-native-person-number-header" | yo ! class="roa-native-person-number-header" | tú<br />vos ! class="roa-native-person-number-header" | él/ella/ello<br />usted ! class="roa-native-person-number-header" | nosotros<br />nosotras ! class="roa-native-person-number-header" | vosotros<br />vosotras ! class="roa-native-person-number-header" | ellos/ellas<br />ustedes |- ! class="roa-finite-header" | <span title="presente de indicativo">ပစ္စုပ္ပန်</span> | {pres_1s} | {pres_2s}{pres_2sv_text} | {pres_3s} | {pres_1p} | {pres_2p} | {pres_3p} |- ! class="roa-finite-header" | <span title="pretérito imperfecto (copréterito)">ဟွံဍိုက်ပေၚ်</span> | {impf_1s} | {impf_2s} | {impf_3s} | {impf_1p} | {impf_2p} | {impf_3p} |- ! class="roa-finite-header" | <span title="pretérito perfecto simple (pretérito indefinido)">ပစ္စုပ္ပန်</span> | {pret_1s} | {pret_2s} | {pret_3s} | {pret_1p} | {pret_2p} | {pret_3p} |- ! class="roa-finite-header" | <span title="futuro simple (futuro imperfecto)">အနာဂတ်</span> | {fut_1s} | {fut_2s} | {fut_3s} | {fut_1p} | {fut_2p} | {fut_3p} |- ! class="roa-finite-header" | <span title="condicional simple (pospretérito de modo indicativo)">တၚ်မကၞာတ်လဝ်စေဝ်ပၞောန်</span> | {cond_1s} | {cond_2s} | {cond_3s} | {cond_1p} | {cond_2p} | {cond_3p} |- ! class="roa-person-number-header" style="height:.75em" colspan="8" | |- ! rowspan="5" class="roa-subjunctive-left-rail" | <span title="subjuntivo">အရေဝ်နိဒါန်</span> ! class="roa-native-person-number-header" | ! class="roa-native-person-number-header" | yo ! class="roa-native-person-number-header" | tú<br />vos ! class="roa-native-person-number-header" | él/ella/ello<br />usted ! class="roa-native-person-number-header" | nosotros<br />nosotras ! class="roa-native-person-number-header" | vosotros<br />vosotras ! class="roa-native-person-number-header" | ellos/ellas<br />ustedes |- ! class="roa-finite-header" | <span title="presente de subjuntivo">ပစ္စုပ္ပန်</span> | {pres_sub_1s} | {pres_sub_2s}{pres_sub_2sv_text} | {pres_sub_3s} | {pres_sub_1p} | {pres_sub_2p} | {pres_sub_3p} |- ! class="roa-finite-header" | <span title="pretérito imperfecto de subjuntivo">ဟွံဍိုက်ပေၚ်</span><br />(ra) | {impf_sub_ra_1s} | {impf_sub_ra_2s} | {impf_sub_ra_3s} | {impf_sub_ra_1p} | {impf_sub_ra_2p} | {impf_sub_ra_3p} |- ! class="roa-finite-header" | <span title="pretérito imperfecto de subjuntivo">ဟွံဍိုက်ပေၚ်</span><br />(se) | {impf_sub_se_1s} | {impf_sub_se_2s} | {impf_sub_se_3s} | {impf_sub_se_1p} | {impf_sub_se_2p} | {impf_sub_se_3p} |- ! class="roa-finite-header" | <span title="futuro simple de subjuntivo (futuro de subjuntivo)">အနာဂတ်</span><sup class="roa-red-superscript">၁</sup> | {fut_sub_1s} | {fut_sub_2s} | {fut_sub_3s} | {fut_sub_1p} | {fut_sub_2p} | {fut_sub_3p} |- ! class="roa-person-number-header" style="height:.75em" colspan="8" | |- ! rowspan="6" class="roa-imperative-left-rail" | <span title="imperativo">ပါဲဗလေတ်ဟွံဗၠး</span> ! class="roa-native-person-number-header" | ! class="roa-native-person-number-header" | — ! class="roa-native-person-number-header" | tú<br />vos ! class="roa-native-person-number-header" | usted ! class="roa-native-person-number-header" | nosotros<br />nosotras ! class="roa-native-person-number-header" | vosotros<br />vosotras ! class="roa-native-person-number-header" | ustedes |- ! class="roa-finite-header" | <span title="imperativo afirmativo">သွဟ်ကဵုဍာံ</span> | | {imp_2s}{imp_2sv_text} | {imp_3s} | {imp_1p} | {imp_2p} | {imp_3p} |- ! class="roa-finite-header" | <span title="imperativo negativo">ကယျာန်ပါဲ</span> | | {neg_imp_2s} | {neg_imp_3s} | {neg_imp_1p} | {neg_imp_2p} | {neg_imp_3p} |{\cl}{notes_clause}</div></div> ]=] local reflexive_non_finite_template = [=[ ! rowspan="3" class="roa-nonfinite-header" | ပူဂဵုကၠောံမာန်ဟွံသေၚ် ! class="roa-native-person-number-header" | ! class="roa-native-person-number-header" | yo ! class="roa-native-person-number-header" | tú<br />vos ! class="roa-native-person-number-header" | él/ella/ello<br />ရပ်စပ်လဝ် ! class="roa-native-person-number-header" | nosotros<br />မဒုၚ်သၟူလဝ် ! class="roa-native-person-number-header" | vosotros<br />မအရေဝ်မပံၚ်လဝ် ! class="roa-native-person-number-header" | ellos/ellas<br />ရပ်စပ်လဝ် |- ! class="roa-finite-header" | <span title="infinitivo">ကြိယာဟွံကၠောံ</span> | {infinitive_1s} | {infinitive_2s} | {infinitive_3s} | {infinitive_1p} | {infinitive_2p} | {infinitive_3p} |- ! class="roa-finite-header" | <span title="gerundio">ကြိယာစၞးနာမ်</span> | {gerund_1s} | {gerund_2s} | {gerund_3s} | {gerund_1p} | {gerund_2p} | {gerund_3p} |- ! class="roa-person-number-header" style="height:.75em" colspan="8" | |-]=] local combined_form_combined_tu_vos_template = [=[ ! class="roa-person-number-header" style="height:.35em" colspan="8" | |- ! rowspan="2" class="roa-combined-with-imperative" | မၞုံကဵုပူဂဵုဒုတိယကိုန်ဨကဝုစ် {tuteo}<i>/</i>{voseo} ပါဲဗလေတ်ဟွံဗၠး {imp_2s} ! class="roa-finite-header" | ပြကမ္မကာရက | {imp_2s_comb_me} | {imp_2s_comb_te} | {imp_2s_comb_le} | {imp_2s_comb_nos} | ''not used'' | {imp_2s_comb_les} |- ! class="roa-finite-header" | ကမ္မကာရက | {imp_2s_comb_me} | {imp_2s_comb_te} | {imp_2s_comb_lo}, {imp_2s_comb_la} | {imp_2s_comb_nos} | ''not used'' | {imp_2s_comb_los}, {imp_2s_comb_las} |-]=] local combined_form_separate_tu_vos_template = [=[ ! class="roa-person-number-header" style="height:.35em" colspan="8" | |- ! rowspan="2" class="roa-combined-with-imperative" | မၞုံကဵုပူဂဵုဒုတိယကိုန်ဨကဝုစ် {tuteo} ပါဲဗလေတ်ဟွံဗၠး {imp_2s} ! class="roa-finite-header" | ပြကမ္မကာရက | {imp_2s_comb_me} | {imp_2s_comb_te} | {imp_2s_comb_le} | {imp_2s_comb_nos} | ''not used'' | {imp_2s_comb_les} |- ! class="roa-finite-header" | ကမ္မကာရက | {imp_2s_comb_me} | {imp_2s_comb_te} | {imp_2s_comb_lo}, {imp_2s_comb_la} | {imp_2s_comb_nos} | ''not used'' | {imp_2s_comb_los}, {imp_2s_comb_las} |- ! class="roa-person-number-header" style="height:.35em" colspan="8" | |- ! rowspan="2" class="roa-combined-with-imperative" | မၞုံကဵုပူဂဵုဒုတိယကိုန်ဨကဝုစ် {voseo} ပါဲဗလေတ်ဟွံဗၠး {imp_2sv} ! class="roa-finite-header" | ပြကမ္မကာရက | {imp_2sv_comb_me} | {imp_2sv_comb_te} | {imp_2sv_comb_le} | {imp_2sv_comb_nos} | ''not used'' | {imp_2sv_comb_les} |- ! class="roa-finite-header" | ကမ္မကာရက | {imp_2sv_comb_me} | {imp_2sv_comb_te} | {imp_2sv_comb_lo}, {imp_2sv_comb_la} | {imp_2sv_comb_nos} | ''not used'' | {imp_2sv_comb_los}, {imp_2sv_comb_las} |-]=] local combined_form_table = [=[ {description}<div class="NavFrame"> <div class="NavHead" align=center>&nbsp; &nbsp; ရုဲစှ်ကေတ်လဝ်ဗီုပြၚ်ပံၚ်စပ်လဝ်ဆေၚ်စပ်ကဵု {title}</div> <div class="NavContent"> These forms are generated automatically and may not actually be used. Pronoun usage varies by region. {\op}| class="inflection-table es-inflection-table" |- ! colspan="2" rowspan="2" class="roa-person-number-header" | ! colspan="3" class="roa-person-number-header" | ကိုန်ဨကဝုစ် ! colspan="3" class="roa-person-number-header" | ကိုန်ဗဟုဝစ် |- ! class="roa-person-number-header" | ပူဂဵုမရနုက်ကဵု ၁ ! class="roa-person-number-header" | ပူဂဵုမရနုက်ကဵု ၂ ! class="roa-person-number-header" | ပူဂဵုမရနုက်ကဵု ၃ ! class="roa-person-number-header" | ပူဂဵုမရနုက်ကဵု ၁ ! class="roa-person-number-header" | ပူဂဵုမရနုက်ကဵု ၂ ! class="roa-person-number-header" | ပူဂဵုမရနုက်ကဵု ၃ |- ! rowspan="2" class="roa-combined-with-infinitive" | မၞုံကဵုကြိယာဟွံကၠောံ {infinitive} ! class="roa-finite-header" | ပြကမ္မကာရက | {infinitive_comb_me} | {infinitive_comb_te} | {infinitive_comb_le}, {infinitive_comb_se} | {infinitive_comb_nos} | {infinitive_comb_os} | {infinitive_comb_les}, {infinitive_comb_se} |- ! class="roa-finite-header" | ကမ္မကာရက | {infinitive_comb_me} | {infinitive_comb_te} | {infinitive_comb_lo}, {infinitive_comb_la}, {infinitive_comb_se} | {infinitive_comb_nos} | {infinitive_comb_os} | {infinitive_comb_los}, {infinitive_comb_las}, {infinitive_comb_se} |- ! class="roa-person-number-header" style="height:.35em" colspan="8" | |- ! rowspan="2" class="roa-combined-with-gerund" | မၞုံကဵုကြိယာစၞးနာမ် {gerund} ! class="roa-finite-header" | ပြကမ္မကာရက | {gerund_comb_me} | {gerund_comb_te} | {gerund_comb_le}, {gerund_comb_se} | {gerund_comb_nos} | {gerund_comb_os} | {gerund_comb_les}, {gerund_comb_se} |- ! class="roa-finite-header" | ကမ္မကာရက | {gerund_comb_me} | {gerund_comb_te} | {gerund_comb_lo}, {gerund_comb_la}, {gerund_comb_se} | {gerund_comb_nos} | {gerund_comb_os} | {gerund_comb_los}, {gerund_comb_las}, {gerund_comb_se} |-{tu_vos_clause} ! class="roa-person-number-header" style="height:.35em" colspan="8" | |- ! rowspan="2" class="roa-combined-with-imperative" | မၞုံကဵုပူဂဵုဒုတိယကိုန်ဨကဝုစ်ပါဲဗလေတ်ဟွံဗၠး {imp_3s} ! class="roa-finite-header" | ပြကမ္မကာရက | {imp_3s_comb_me} | ''not used'' | {imp_3s_comb_le}, {imp_3s_comb_se} | {imp_3s_comb_nos} | ''not used'' | {imp_3s_comb_les} |- ! class="roa-finite-header" | ကမ္မကာရက | {imp_3s_comb_me} | ''not used'' | {imp_3s_comb_lo}, {imp_3s_comb_la}, {imp_3s_comb_se} | {imp_3s_comb_nos} | ''not used'' | {imp_3s_comb_los}, {imp_3s_comb_las} |- ! class="roa-person-number-header" style="height:.35em" colspan="8" | |- ! rowspan="2" class="roa-combined-with-imperative" | မၞုံကဵုပူဂဵုပထမကိုန်ဗဟုဝစ်ပါဲဗလေတ်ဟွံဗၠး {imp_1p} ! class="roa-finite-header" | ပြကမ္မကာရက | ''not used'' | {imp_1p_comb_te} | {imp_1p_comb_le} | {imp_1p_comb_nos} | {imp_1p_comb_os} | {imp_1p_comb_les} |- ! class="roa-finite-header" | ကမ္မကာရက | ''not used'' | {imp_1p_comb_te} | {imp_1p_comb_lo}, {imp_1p_comb_la} | {imp_1p_comb_nos} | {imp_1p_comb_os} | {imp_1p_comb_los}, {imp_1p_comb_las} |- ! class="roa-person-number-header" style="height:.35em" colspan="8" | |- ! rowspan="2" class="roa-combined-with-imperative" | မၞုံကဵုပူဂဵုဒုတိယကိုန်ဗဟုဝစ်ပါဲဗလေတ်ဟွံဗၠး {imp_2p} ! class="roa-finite-header" | ပြကမ္မကာရက | {imp_2p_comb_me} | ''not used'' | {imp_2p_comb_le} | {imp_2p_comb_nos} | {imp_2p_comb_os} | {imp_2p_comb_les} |- ! class="roa-finite-header" | ကမ္မကာရက | {imp_2p_comb_me} | ''not used'' | {imp_2p_comb_lo}, {imp_2p_comb_la} | {imp_2p_comb_nos} | {imp_2p_comb_os} | {imp_2p_comb_los}, {imp_2p_comb_las} |- ! class="roa-person-number-header" style="height:.35em" colspan="8" | |- ! rowspan="2" class="roa-combined-with-imperative" | မၞုံကဵုပူဂဵုဒုတိယကိုန်ဗဟုဝစ်ပါဲဗလေတ်ဟွံဗၠး {imp_3p} ! class="roa-finite-header" | ပြကမ္မကာရက | {imp_3p_comb_me} | ''not used'' | {imp_3p_comb_le} | {imp_3p_comb_nos} | ''not used'' | {imp_3p_comb_les}, {imp_3p_comb_se} |- ! class="roa-finite-header" | ကမ္မကာရက | {imp_3p_comb_me} | ''not used'' | {imp_3p_comb_lo}, {imp_3p_comb_la} | {imp_3p_comb_nos} | ''not used'' | {imp_3p_comb_los}, {imp_3p_comb_las}, {imp_3p_comb_se} |{\cl}{notes_clause}</div></div> ]=] local function make_table(alternant_multiword_spec) local forms = alternant_multiword_spec.forms forms.title = link_term(alternant_multiword_spec.lemmas[1].form) if alternant_multiword_spec.annotation ~= "" then forms.title = forms.title .. " (" .. alternant_multiword_spec.annotation .. ")" end forms.description = "" -- Format the basic table. forms.tuteo = tuteo_link forms.voseo = voseo_link forms.footnote = alternant_multiword_spec.footnote_basic forms.reflexive_non_finite_clause = alternant_multiword_spec.refl and m_string_utilities.format(reflexive_non_finite_template, forms) or "" forms.notes_clause = forms.footnote ~= "" and m_string_utilities.format(notes_template, forms) or "" -- The separate_* values are computed in show_forms(). forms.pres_2sv_text = alternant_multiword_spec.separate_pres_2sv and m_string_utilities.format(pres_2sv_template, forms) or "" forms.pres_sub_2sv_text = alternant_multiword_spec.separate_pres_sub_2sv and m_string_utilities.format(pres_sub_2sv_template, forms) or "" forms.imp_2sv_text = alternant_multiword_spec.separate_imp_2sv and m_string_utilities.format(imp_2sv_template, forms) or "" local formatted_basic_table = m_string_utilities.format(basic_table, forms) -- Format the combined table. local formatted_combined_table if alternant_multiword_spec.refl or alternant_multiword_spec.args.nocomb or alternant_multiword_spec.clitic then formatted_combined_table = "" else forms.footnote = alternant_multiword_spec.footnote_combined forms.notes_clause = forms.footnote ~= "" and m_string_utilities.format(notes_template, forms) or "" -- separate_imp_2sv is computed in show_forms(). local tu_vos_template = alternant_multiword_spec.separate_imp_2sv and combined_form_separate_tu_vos_template or combined_form_combined_tu_vos_template forms.tu_vos_clause = m_string_utilities.format(tu_vos_template, forms) formatted_combined_table = m_string_utilities.format(combined_form_table, forms) end -- Paste them together. return require("Module:TemplateStyles")("Module:roa-verb/style.css") .. formatted_basic_table .. formatted_combined_table end -- Externally callable function to parse and conjugate a verb given user-specified arguments. -- Return value is WORD_SPEC, an object where the conjugated forms are in `WORD_SPEC.forms` -- for each slot. If there are no values for a slot, the slot key will be missing. The value -- for a given slot is a list of objects {form=FORM, footnotes=FOOTNOTES}. function export.do_generate_forms(args, source_template, headword_head, double_combined_forms_to_include) local PAGENAME = mw.loadData("Module:headword/data").pagename local function in_template_space() return mw.title.getCurrentTitle().nsText == "ထာမ်ပလိက်" end -- Determine the verb spec we're being asked to generate the conjugation of. This may be taken from the -- current page title or the value of |pagename=; but not when called from {{es-verb form of}}, where the -- page title is a non-lemma form. Note that the verb spec may omit the infinitive; e.g. it may be "<ue>". -- For this reason, we use the value of `pagename` computed here down below, when calling normalize_all_lemmas(). local pagename = source_template ~= "es-verb form of" and args.pagename or PAGENAME local head = headword_head or pagename local arg1 = args[1] if not arg1 then if (pagename == "es-conj" or pagename == "es-verb") and in_template_space() then arg1 = "licuar<+,ú>" elseif pagename == "es-verb form of" and in_template_space() then arg1 = "amar" else arg1 = "<>" end end -- When called from {{es-verb form of}}, determine the non-lemma form whose inflections we're being asked to -- determine. This normally comes from the page title or the value of |pagename=. local verb_form_of_form if source_template == "es-verb form of" then verb_form_of_form = args.pagename if not verb_form_of_form then if PAGENAME == "es-verb form of" and in_template_space() then verb_form_of_form = "ame" else verb_form_of_form = PAGENAME end end end local incorporated_headword_head_into_lemma = false if arg1:find("^<.*>$") then -- missing lemma if head:find(" ") then -- If multiword lemma, try to add arg spec after the first word. -- Try to preserve the brackets in the part after the verb, but don't do it -- if there aren't the same number of left and right brackets in the verb -- (which means the verb was linked as part of a larger expression). local refl_clitic_verb, post = rmatch(head, "^(.-)( .*)$") local left_brackets = rsub(refl_clitic_verb, "[^%[]", "") local right_brackets = rsub(refl_clitic_verb, "[^%]]", "") if #left_brackets == #right_brackets then arg1 = iut.remove_redundant_links(refl_clitic_verb) .. arg1 .. post incorporated_headword_head_into_lemma = true else -- Try again using the form without links. local linkless_head = m_links.remove_links(head) if linkless_head:find(" ") then refl_clitic_verb, post = rmatch(linkless_head, "^(.-)( .*)$") arg1 = refl_clitic_verb .. arg1 .. post else error("Unable to incorporate <...> spec into explicit head due to a multiword linked verb or " .. "unbalanced brackets; please include <> explicitly: " .. arg1) end end else -- Will be incorporated through `head` below in the call to normalize_all_lemmas(). incorporated_headword_head_into_lemma = true end end local parse_props = { parse_indicator_spec = parse_indicator_spec, allow_default_indicator = true, allow_blank_lemma = true, } local alternant_multiword_spec = iut.parse_inflected_text(arg1, parse_props) alternant_multiword_spec.pos = pos or "ကြိယာ" alternant_multiword_spec.args = args alternant_multiword_spec.source_template = source_template alternant_multiword_spec.verb_form_of_form = verb_form_of_form alternant_multiword_spec.incorporated_headword_head_into_lemma = incorporated_headword_head_into_lemma -- Now determine if we need to generate any double-combined forms, and if so, which clitics are involved. -- See the comment above the initialization of `verb_slot_double_combined_rows` above in add_slots(). if verb_form_of_form and rfind(verb_form_of_form, AV) then -- All double-clitic forms have an explicit accent, so we check for this. In addition, all double-clitic forms -- are of the form "(me|te|se|nos|os)(lo|la|le)s$". We have no alternations in Lua patterns, but we can exploit -- the similarity of the clitics in question. local single_comb_form, object_clitic = rmatch(verb_form_of_form, "^(.*)(l[aeo]s?)$") if single_comb_form then local personal_clitic = rmatch(single_comb_form, "^.*([mts]e)$") if not personal_clitic then personal_clitic = rmatch(single_comb_form, "^.-(n?os)$") end if personal_clitic then if personal_clitic == "nos" then -- "os" is a substring of "nos"; conceivably we could have a form ending in -n + os, and we don't -- know whether to interpret as -n + os or - + nos. alternant_multiword_spec.double_combined_forms_to_include = {{"nos", object_clitic}, {"os", object_clitic}} else if personal_clitic == "se" then -- Use the special "lxx" clitic for le/les when transformed into se in double-combined forms. personal_clitic = "lxx" end alternant_multiword_spec.double_combined_forms_to_include = {{personal_clitic, object_clitic}} end end end end normalize_all_lemmas(alternant_multiword_spec, pagename) detect_all_indicator_specs(alternant_multiword_spec) local inflect_props = { slot_list = alternant_multiword_spec.all_verb_slots, inflect_word_spec = conjugate_verb, -- We add links around the generated verbal forms rather than allow the entire multiword -- expression to be a link, so ensure that user-specified links get included as well. include_user_specified_links = true, } iut.inflect_multiword_or_alternant_multiword_spec(alternant_multiword_spec, inflect_props) -- Remove redundant brackets around entire forms. for slot, forms in pairs(alternant_multiword_spec.forms) do for _, form in ipairs(forms) do form.form = iut.remove_redundant_links(form.form) end end compute_categories_and_annotation(alternant_multiword_spec) if args.json and not from_headword and not from_verb_form_of then -- There is a circular reference in `base.alternant_multiword_spec`, which points back to top level. iut.map_word_specs(alternant_multiword_spec, function(base) base.alternant_multiword_spec = nil end) return require("Module:JSON").toJSON(alternant_multiword_spec) end return alternant_multiword_spec end -- Entry point for {{es-conj}}. Template-callable function to parse and conjugate a verb given -- user-specified arguments and generate a displayable table of the conjugated forms. function export.show(frame) local parent_args = frame:getParent().args local params = { [1] = {}, ["nocomb"] = {type = "boolean"}, ["noautolinktext"] = {type = "boolean"}, ["noautolinkverb"] = {type = "boolean"}, ["pagename"] = {}, -- for testing/documentation pages ["json"] = {type = "boolean"}, -- for bot use } local args = require("Module:parameters").process(parent_args, params) local alternant_multiword_spec = export.do_generate_forms(args, "es-conj") if type(alternant_multiword_spec) == "string" then -- JSON return value return alternant_multiword_spec end show_forms(alternant_multiword_spec) return make_table(alternant_multiword_spec) .. require("Module:utilities").format_categories(alternant_multiword_spec.categories, lang, nil, nil, force_cat) end return export r0vsi3ov82ix8mlhrzooxz7jufqe5te မဝ်ဂျူ:pt-verb 828 43536 397766 394502 2026-07-02T11:16:18Z 咽頭べさ 33 397766 Scribunto text/plain local export = {} --[=[ Authorship: Ben Wing <benwing2> ]=] --[=[ TERMINOLOGY: -- "slot" = A particular combination of tense/mood/person/number/etc. Example slot names for verbs are "pres_1s" (present indicative first-person singular), "pres_sub_2s" (present subjunctive second-person singular) "impf_sub_3p" (imperfect subjunctive third-person plural). Each slot is filled with zero or more forms. -- "form" = The conjugated Portuguese form representing the value of a given slot. -- "lemma" = The dictionary form of a given Portuguese term. For Portuguese, always the infinitive. ]=] --[=[ FIXME: --"i-e" alternation doesn't work properly when the stem comes with a hiatus in it. --]=] local force_cat = false -- set to true for debugging local check_for_red_links = false -- set to false for debugging local lang = require("Module:languages").getByCode("pt") local m_str_utils = require("Module:string utilities") local m_links = require("Module:links") local m_table = require("Module:table") local iut = require("Module:inflection utilities") local put = require("Module:parse utilities") local com = require("Module:pt-common") local format = m_str_utils.format local remove_final_accent = com.remove_final_accent local rfind = m_str_utils.find local rmatch = m_str_utils.match local rsplit = m_str_utils.split local rsub = com.rsub local u = m_str_utils.char local unpack = unpack or table.unpack -- Lua 5.2 compatibility local function link_term(term) return m_links.full_link({ lang = lang, term = term }, "term") end local V = com.V -- vowel regex class local AV = com.AV -- accented vowel regex class local C = com.C -- consonant regex class local AC = u(0x0301) -- acute = ́ local TEMPC1 = u(0xFFF1) -- temporary character used for consonant substitutions local TEMP_MESOCLITIC_INSERTION_POINT = u(0xFFF2) -- temporary character used to mark the mesoclitic insertion point local VAR_BR = u(0xFFF3) -- variant code for Brazil local VAR_PT = u(0xFFF4) -- variant code for Portugal local VAR_SUPERSEDED = u(0xFFF5) -- variant code for superseded forms local VAR_NORMAL = u(0xFFF6) -- variant code for non-superseded forms local all_var_codes = VAR_BR .. VAR_PT .. VAR_SUPERSEDED .. VAR_NORMAL local var_codes_no_superseded = VAR_BR .. VAR_PT .. VAR_NORMAL local var_code_c = "[" .. all_var_codes .. "]" local var_code_no_superseded_c = "[" .. var_codes_no_superseded .. "]" local not_var_code_c = "[^" .. all_var_codes .. "]" -- Export variant codes for use in [[Module:pt-inflections]]. export.VAR_BR = VAR_BR export.VAR_PT = VAR_PT export.VAR_SUPERSEDED = VAR_SUPERSEDED export.VAR_NORMAL = VAR_NORMAL local short_pp_footnote = "[usually used with auxiliary verbs " .. link_term("ser") .. " and " .. link_term("estar") .. "]" local long_pp_footnote = "[usually used with auxiliary verbs " .. link_term("haver") .. " and " .. link_term("ter") .. "]" --[=[ Vowel alternations: <i-e>: 'i' in pres1s and the whole present subjunctive; 'e' elsewhere when stressed. Generally 'e' otherwise when unstressed. E.g. [[sentir]], [[conseguir]] (the latter additionally with 'gu-g' alternation). <u-o>: 'u' in pres1s and the whole present subjunctive; 'o' elsewhere when stressed. Either 'o' or 'u' otherwise when unstressed. E.g. [[dormir]], [[subir]]. <i>: 'i' whenever stressed (in the present singular and third plural) and throughout the whole present subjunctive. Otherwise 'e'. E.g. [[progredir]], also [[premir]] per Priberam. <u>: 'u' whenever stressed (in the present singular and third plural) and throughout the whole present subjunctive. Otherwise 'o'. E.g. [[polir]], [[extorquir]] (the latter also <u-o>). <í>: The last 'i' of the stem (excluding stem-final 'i') becomes 'í' when stressed. E.g.: * [[proibir]] ('proíbo, proíbe(s), proíbem, proíba(s), proíbam') * [[faiscar]] ('faísco, faísca(s), faíscam, faísque(s), faísquem' also with 'c-qu' alternation) * [[homogeneizar]] ('homogeneízo', etc.) * [[mobiliar]] ('mobílio', etc.; note here the final -i is ignored when determining which vowel to stress) * [[tuitar]] ('tuíto', etc.) <ú>: The last 'u' of the stem (excluding stem-final 'u') becomes 'ú' when stressed. E.g.: * [[reunir]] ('reúno, reúne(s), reúnem, reúna(s), reúnam') * [[esmiuçar]] ('esmiúço, esmiúça(s), esmiúça, esmiúce(s), esmiúcem' also with 'ç-c' alternation) * [[reusar]] ('reúso, reúsa(s), reúsa, reúse(s), reúsem') * [[saudar]] ('saúdo, saúda(s), saúda, saúde(s), saúdem') ]=] local vowel_alternants = m_table.listToSet({"i-e", "i", "í", "u-o", "u", "ú", "ei", "+"}) local vowel_alternant_to_desc = { ["i-e"] = "''i-e'' alternation in present singular", ["i"] = "''e'' becomes ''i'' when stressed", ["í"] = "''i'' becomes ''í'' when stressed", ["u-o"] = "''u-o'' alternation in present singular", ["u"] = "''o'' becomes ''u'' when stressed", ["ú"] = "''u'' becomes ''ú'' when stressed", ["ei"] = "''i'' becomes ''ei'' when stressed", } local vowel_alternant_to_cat = { ["i-e"] = "i-e alternation in present singular", ["i"] = "e becoming i when stressed", ["í"] = "i becoming í when stressed", ["u-o"] = "u-o alternation in present singular", ["u"] = "o becoming u when stressed", ["ú"] = "u becoming ú when stressed", ["ei"] = "i becoming ei when stressed", } local all_persons_numbers = { ["1s"] = "1|s", ["2s"] = "2|s", ["3s"] = "3|s", ["1p"] = "1|p", ["2p"] = "2|p", ["3p"] = "3|p", } local person_number_list = {"1s", "2s", "3s", "1p", "2p", "3p"} local imp_person_number_list = {"2s", "3s", "1p", "2p", "3p"} local neg_imp_person_number_list = {"2s", "3s", "1p", "2p", "3p"} person_number_to_reflexive_pronoun = { ["1s"] = "me", ["2s"] = "te", ["3s"] = "se", ["1p"] = "nos", ["2p"] = "vos", ["3p"] = "se", } local indicator_flags = m_table.listToSet { "no_pres_stressed", "no_pres1_and_sub", "only3s", "only3sp", "only3p", "pp_inv", "irreg", "no_built_in", "e_ei_cat", } -- Remove any variant codes e.g. VAR_BR, VAR_PT, VAR_SUPERSEDED. Needs to be called from [[Module:pt-headword]] on the -- output of do_generate_forms(). `keep_superseded` leaves VAR_SUPERSEDED; used in the `canonicalize` function of -- show_forms() because we then process and remove it in `generate_forms`. FIXME: Use metadata for this once it's -- supported in [[Module:inflection utilities]]. function export.remove_variant_codes(form, keep_superseded) return rsub(form, keep_superseded and var_code_no_superseded_c or var_code_c, "") end -- Initialize all the slots for which we generate forms. local function add_slots(alternant_multiword_spec) -- "Basic" slots: All slots that go into the regular table (not the reflexive form-of table). alternant_multiword_spec.verb_slots_basic = { {"infinitive", "inf"}, {"infinitive_linked", "inf"}, {"gerund", "ger"}, {"short_pp_ms", "short|m|s|past|part"}, {"short_pp_fs", "short|f|s|past|part"}, {"short_pp_mp", "short|m|p|past|part"}, {"short_pp_fp", "short|f|p|past|part"}, {"pp_ms", "m|s|past|part"}, {"pp_fs", "f|s|past|part"}, {"pp_mp", "m|p|past|part"}, {"pp_fp", "f|p|past|part"}, } -- Special slots used to handle non-reflexive parts of reflexive verbs in {{pt-verb form of}}. -- For example, for a reflexive-only verb like [[esbaldar-se]], we want to be able to use {{pt-verb form of}} on -- [[esbalde]] (which should mention that it is a part of 'me esbalde', first-person singular present subjunctive, -- and 'se esbalde', third-person singular present subjunctive) or on [[esbaldamos]] (which should mention that it -- is a part of 'esbaldamo-nos', first-person plural present indicative or preterite). Similarly, we want to use -- {{pt-verb form of}} on [[esbaldando]] (which should mention that it is a part of 'se ... esbaldando', syntactic -- variant of [[esbaldando-se]], which is the gerund of [[esbaldar-se]]). To do this, we need to be able to map -- non-reflexive parts like [[esbalde]], [[esbaldamos]], [[esbaldando]], etc. to their reflexive equivalent(s), to -- the tag(s) of the equivalent(s), and, in the case of forms like [[esbaldando]], [[esbaldar]] and imperatives, to -- the separated syntactic variant of the verb+clitic combination. We do this by creating slots for the -- non-reflexive part equivalent of each basic reflexive slot, and for the separated syntactic-variant equivalent -- of each basic reflexive slot that is formed of verb+clitic. We use slots in this way to deal with multiword -- lemmas. Note that we run into difficulties mapping between reflexive verbs, non-reflexive part equivalents, and -- separated syntactic variants if a slot contains more than one form. To handle this, if there are the same number -- of forms in two slots we're trying to match up, we assume the forms match one-to-one; otherwise we don't match up -- the two slots (which means {{pt-verb form of}} won't work in this case, but such a case is extremely rare and not -- worth worrying about). Alternatives that handle this "properly" are significantly more complicated and require -- non-trivial modifications to [[Module:inflection utilities]]. local need_special_verb_form_of_slots = alternant_multiword_spec.source_template == "pt-verb form of" and alternant_multiword_spec.refl if need_special_verb_form_of_slots then alternant_multiword_spec.verb_slots_reflexive_verb_form_of = { {"infinitive_non_reflexive", "-"}, {"infinitive_variant", "-"}, {"gerund_non_reflexive", "-"}, {"gerund_variant", "-"}, } else alternant_multiword_spec.verb_slots_reflexive_verb_form_of = {} end -- Add entries for a slot with person/number variants. -- `verb_slots` is the table to add to. -- `slot_prefix` is the prefix of the slot, typically specifying the tense/aspect. -- `tag_suffix` is a string listing the set of inflection tags to add after the person/number tags. -- `person_number_list` is a list of the person/number slot suffixes to add to `slot_prefix`. local function add_personal_slot(verb_slots, slot_prefix, tag_suffix, person_number_list) for _, persnum in ipairs(person_number_list) do local persnum_tag = all_persons_numbers[persnum] local slot = slot_prefix .. "_" .. persnum local accel = persnum_tag .. "|" .. tag_suffix table.insert(verb_slots, {slot, accel}) end end -- Add a personal slot (i.e. a slot with person/number variants) to `verb_slots_basic`. local function add_basic_personal_slot(slot_prefix, tag_suffix, person_number_list, no_special_verb_form_of_slot) add_personal_slot(alternant_multiword_spec.verb_slots_basic, slot_prefix, tag_suffix, person_number_list) -- Add special slots for handling non-reflexive parts of reflexive verbs in {{pt-verb form of}}. -- See comment above in `need_special_verb_form_of_slots`. if need_special_verb_form_of_slots and not no_special_verb_form_of_slot then for _, persnum in ipairs(person_number_list) do local persnum_tag = all_persons_numbers[persnum] local basic_slot = slot_prefix .. "_" .. persnum local accel = persnum_tag .. "|" .. tag_suffix table.insert(alternant_multiword_spec.verb_slots_reflexive_verb_form_of, {basic_slot .. "_non_reflexive", "-"}) end end end add_basic_personal_slot("pres", "pres|ind", person_number_list) add_basic_personal_slot("impf", "impf|ind", person_number_list) add_basic_personal_slot("pret", "pret|ind", person_number_list) add_basic_personal_slot("plup", "plup|ind", person_number_list) add_basic_personal_slot("fut", "fut|ind", person_number_list) add_basic_personal_slot("cond", "cond", person_number_list) add_basic_personal_slot("pres_sub", "pres|sub", person_number_list) add_basic_personal_slot("impf_sub", "impf|sub", person_number_list) add_basic_personal_slot("fut_sub", "fut|sub", person_number_list) add_basic_personal_slot("imp", "imp", imp_person_number_list) add_basic_personal_slot("pers_inf", "pers|inf", person_number_list) -- Don't need special non-reflexive-part slots because the negative imperative is multiword, of which the -- individual words are 'não' + subjunctive. add_basic_personal_slot("neg_imp", "neg|imp", neg_imp_person_number_list, "no special verb form of") -- Don't need special non-reflexive-part slots because we don't want [[esbaldando]] mapping to [[esbaldando-me]] -- (only [[esbaldando-se]]) or [[esbaldar]] mapping to [[esbaldar-me]] (only [[esbaldar-se]]). add_basic_personal_slot("infinitive", "inf", person_number_list, "no special verb form of") add_basic_personal_slot("gerund", "ger", person_number_list, "no special verb form of") -- Generate the list of all slots. alternant_multiword_spec.all_verb_slots = {} for _, slot_and_accel in ipairs(alternant_multiword_spec.verb_slots_basic) do table.insert(alternant_multiword_spec.all_verb_slots, slot_and_accel) end for _, slot_and_accel in ipairs(alternant_multiword_spec.verb_slots_reflexive_verb_form_of) do table.insert(alternant_multiword_spec.all_verb_slots, slot_and_accel) end alternant_multiword_spec.verb_slots_basic_map = {} for _, slotaccel in ipairs(alternant_multiword_spec.verb_slots_basic) do local slot, accel = unpack(slotaccel) alternant_multiword_spec.verb_slots_basic_map[slot] = accel end end local overridable_stems = {} local function allow_multiple_values(separated_groups, data) local retvals = {} for _, separated_group in ipairs(separated_groups) do local footnotes = data.fetch_footnotes(separated_group) local retval = {form = separated_group[1], footnotes = footnotes} table.insert(retvals, retval) end return retvals end local function simple_choice(choices) return function(separated_groups, data) if #separated_groups > 1 then data.parse_err("For spec '" .. data.prefix .. ":', only one value currently allowed") end if #separated_groups[1] > 1 then data.parse_err("For spec '" .. data.prefix .. ":', no footnotes currently allowed") end local choice = separated_groups[1][1] if not m_table.contains(choices, choice) then data.parse_err("For spec '" .. data.prefix .. ":', saw value '" .. choice .. "' but expected one of '" .. table.concat(choices, ",") .. "'") end return choice end end for _, overridable_stem in ipairs { "pres_unstressed", "pres_stressed", "pres1_and_sub", -- Don't include pres1; use pres_1s if you need to override just that form "impf", "full_impf", "pret_base", "pret", {"pret_conj", simple_choice({"irreg", "ar", "er", "ir"}) }, "fut", "cond", "pres_sub_stressed", "pres_sub_unstressed", {"sub_conj", simple_choice({"ar", "er"}) }, "plup", "impf_sub", "fut_sub", "pers_inf", "pp", "short_pp", } do if type(overridable_stem) == "string" then overridable_stems[overridable_stem] = allow_multiple_values else local stem, validator = unpack(overridable_stem) overridable_stems[stem] = validator end end -- Useful as the value of the `match` property of a built-in verb. `main_verb_spec` is a Lua pattern that should match -- the non-prefixed part of a verb, and `prefix_specs` is a list of Lua patterns that should match the prefixed part of -- a verb. If a prefix spec is preceded by ^, it must match exactly at the beginning of the verb; otherwise, additional -- prefixes (e.g. re-, des-) may precede. Return the prefix and main verb. local function match_against_verbs(main_verb_spec, prefix_specs) return function(verb) for _, prefix_spec in ipairs(prefix_specs) do if prefix_spec:find("^%^") then -- must match exactly prefix_spec = prefix_spec:gsub("^%^", "") if prefix_spec == "" then -- We can't use the second branch of the if-else statement because an empty () returns the current position -- in rmatch(). local main_verb = rmatch(verb, "^(" .. main_verb_spec .. ")$") if main_verb then return "", main_verb end else local prefix, main_verb = rmatch(verb, "^(" .. prefix_spec .. ")(" .. main_verb_spec .. ")$") if prefix then return prefix, main_verb end end else local prefix, main_verb = rmatch(verb, "^(.*" .. prefix_spec .. ")(" .. main_verb_spec .. ")$") if prefix then return prefix, main_verb end end end return nil end end --[=[ Built-in (usually irregular) conjugations. Each entry is processed in turn and consists of an object with two fields: 1. match=: Specifies the built-in verbs that match this object. 2. forms=: Specifies the built-in stems and forms for these verbs. The value of match= is either a string beginning with "^" (match only the specified verb), a string not beginning with "^" (match any verb ending in that string), or a function that is passed in the verb and should return the prefix of the verb if it matches, otherwise nil. The function match_against_verbs() is provided to facilitate matching a set of verbs with a common ending and specific prefixes (e.g. [[ter]] and [[ater]] but not [[abater]], etc.). The value of forms= is a table specifying stems and individual override forms. Each key of the table names either a stem (e.g. `pres_stressed`), a stem property (e.g. `vowel_alt`) or an individual override form (e.g. `pres_1s`). Each value of a stem can either be a string (a single stem), a list of strings, or a list of objects of the form {form = STEM, footnotes = {FOONOTES}}. Each value of an individual override should be of exactly the same form except that the strings specify full forms rather than stems. The values of a stem property depend on the specific property but are generally strings or booleans. In order to understand how the stem specifications work, it's important to understand the phonetic modifications done by combine_stem_ending(). In general, the complexities of predictable prefix, stem and ending modifications are all handled in this function. In particular: 1. Spelling-based modifications (c/z, g/gu, gu/gü, g/j) occur automatically as appropriate for the ending. 2. If the stem begins with an acute accent, the accent is moved onto the last vowel of the prefix (for handling verbs in -uar such as [[minguar]], pres_3s 'míngua'). 3. If the ending begins with a double asterisk, this is a signal to conditionally delete the accent on the last letter of the stem. "Conditionally" means we don't do it if the last two letters would form a diphthong without the accent on the second one (e.g. in [[sair]], with stem 'saí'); but as an exception, we do delete the accent in stems ending in -guí, -quí (e.g. in [[conseguir]]) because in this case the ui isn't a diphthong. 4. If the ending begins with an asterisk, this is a signal to delete the accent on the last letter of the stem, e.g. fizé -> fizermos. Unlike for **, this removal is unconditional, so we get e.g. 'sairmos' not #'saírmos'. 5. If ending begins with i, it must get an accent after an unstressed vowel (in some but not all cases) to prevent the two merging into a diphthong. See combine_stem_ending() for specifics. The following stems are recognized: -- pres_unstressed: The present indicative unstressed stem (1p, 2p). Also controls the imperative 2p and gerund. Defaults to the infinitive stem (minus the ending -ar/-er/-ir/-or). -- pres_stressed: The present indicative stressed stem (1s, 2s, 3s, 3p). Also controls the imperative 2s. Default is empty if indicator `no_pres_stressed`, else a vowel alternation if such an indicator is given (e.g. `ue`, `ì`), else the infinitive stem. -- pres1_and_sub: Overriding stem for 1s present indicative and the entire subjunctive. Only set by irregular verbs and by the indicators `no_pres_stressed` (e.g. [[precaver]]) and `no_pres1_and_sub` (since verbs of this sort, e.g. [[puir]], are missing the entire subjunctive as well as the 1s present indicative). Used by many irregular verbs, e.g. [[caber]], verbs in '-air', [[dizer]], [[ter]], [[valer]], etc. Some verbs set this and then supply an override for the pres_1sg if it's irregular, e.g. [[saber]], with irregular subjunctive stem "saib-" and special 1s present indicative "sei". -- pres1: Special stem for 1s present indicative. Normally, do not set this explicitly. If you need to specify an irregular 1s present indicative, use the form override pres_1s= to specify the entire form. Defaults to pres1_and_sub if given, else pres_stressed. -- pres_sub_unstressed: The present subjunctive unstressed stem (1p, 2p). Defaults to pres1_and_sub if given, else the infinitive stem. -- pres_sub_stressed: The present subjunctive stressed stem (1s, 2s, 3s, 1p). Defaults to pres1. -- sub_conj: Determines the set of endings used in the subjunctive. Should be one of "ar" or "er". -- impf: The imperfect stem (not including the -av-/-i- stem suffix, which is determined by the conjugation). Defaults to the infinitive stem. -- full_impf: The full imperfect stem missing only the endings (-a, -as, -am, etc.). Used for verbs with irregular imperfects such as [[ser]], [[ter]], [[vir]] and [[pôr]]. Overrides must be supplied for the impf_1p and impf_2p due to these forms having an accent on the stem. -- pret_base: The preterite stem (not including the -a-/-e-/-i- stem suffix). Defaults to the infinitive stem. -- pret: The full preterite stem missing only the endings (-ste, -mos, etc.). Used for verbs with irregular preterites (pret_conj == "irreg") such as [[fazer]], [[poder]], [[trazer]], etc. Overrides must be supplied for the pret_1s and pret_3s. Defaults to `pret_base` + the accented conjugation vowel. -- pret_conj: Determines the set of endings used in the preterite. Should be one of "ar", "er", "ir" or "irreg". Defaults to the conjugation as determined from the infinitive. When pret_conj == "irreg", stem `pret` is used, otherwise `pret_base`. -- fut: The future stem. Defaults to the infinitive stem + the unaccented conjugation vowel. -- cond: The conditional stem. Defaults to `fut`. -- impf_sub: The imperfect subjunctive stem. Defaults to `pret`. -- fut_sub: The future subjunctive stem. Defaults to `pret`. -- plup: The pluperfect stem. Defaults to `pret`. -- pers_inf: The personal infinitive stem. Defaults to the infinitive stem + the accented conjugation vowel. -- pp: The masculine singular past participle. Default is based on the verb conjugation: infinitive stem + "ado" for -ar verbs, otherwise infinitive stem + "ido". -- short_pp: The short masculine singular past participle, for verbs with such a form. No default. -- pp_inv: True if the past participle exists only in the masculine singular. ]=] local built_in_conjugations = { -------------------------------------------------------------------------------------------- -- -ar -- -------------------------------------------------------------------------------------------- -- Verbs not needing entries here: -- -- (1) Verbs with short past participles: need to specify the short pp explicitly. -- -- aceitar: use <short_pp:aceito[Brazil],aceite[Portugal]> -- anexar, completar, expressar, expulsar, findar, fritar, ganhar, gastar, limpar, pagar, pasmar, pegar, soltar: -- use <short_pp:anexo> etc. -- assentar: use <short_pp:assente> -- entregar: use <short_pp:entregue> -- enxugar: use <short_pp:enxuto> -- matar: use <short_pp:morto> -- -- (2) Verbs with orthographic consonant alternations: handled automatically. -- -- -car (brincar, buscar, pecar, trancar, etc.): automatically handled in combine_stem_ending() -- -çar (alcançar, começar, laçar): automatically handled in combine_stem_ending() -- -gar (apagar, cegar, esmagar, largar, navegar, resmungar, sugar, etc.): automatically handled in combine_stem_ending() -- -- (3) Verbs with vowel alternations: need to specify the alternation explicitly unless it always happens, in -- which case it's handled automatically through an entry below. -- -- esmiuçar changing to esmiúço: use <ú> -- faiscar changing to faísco: use <í> -- -iar changing to -eio (ansiar, incendiar, mediar, odiar, remediar, etc.): use <ei> -- -izar changing to -ízo (ajuizar, enraizar, homogeneizar, plebeizar, etc.): use <í> -- mobiliar changing to mobílio: use <í> -- reusar changing to reúso: use <ú> -- saudar changing to saúdo: use <ú> -- tuitar/retuitar changing to (re)tuíto: use <í> { -- dar, desdar match = match_against_verbs("dar", {"^", "^des", "^re"}), forms = { pres_1s = "dou", pres_2s = "dás", pres_3s = "dá", -- damos, dais regular pres_3p = "dão", pret = "dé", pret_conj = "irreg", pret_1s = "dei", pret_3s = "deu", pres_sub_1s = "dê", pres_sub_2s = "dês", pres_sub_3s = "dê", pres_sub_1p = {"demos", "dêmos"}, -- deis regular pres_sub_3p = {"deem", VAR_SUPERSEDED .. "dêem"}, irreg = true, } }, { -- -ear (frear, nomear, semear, etc.) match = "ear", forms = { pres_stressed = "ei", e_ei_cat = true, } }, { -- estar match = match_against_verbs("estar", {"^", "sob", "sobr"}), forms = { pres_1s = "estou", pres_2s = "estás", pres_3s = "está", -- FIXME, estámos is claimed as an alternative pres_1p in the old conjugation data, but I believe this is garbage pres_3p = "estão", pres1_and_sub = "estej", -- only for subjunctive as we override pres_1s sub_conj = "er", pret = "estivé", pret_conj = "irreg", pret_1s = "estive", pret_3s = "esteve", -- [[sobestar]], [[sobrestar]] are transitive so they have fully inflected past participles pp_inv = function(base, prefix) return prefix == "" end, irreg = true, } }, { -- tar (clipping of estar) match = "^tar", forms = { pres_1s = "tou", pres_2s = "tás", pres_3s = "tá", pres_3p = "tão", pres1_and_sub = "tej", -- only for subjunctive as we override pres_1s sub_conj = "er", pret = "tivé", pret_conj = "irreg", pret_1s = "tive", pret_3s = "teve", --FIXME: Needs support for forms that are just "tar" to become "tá" instead in Brazil. pp_inv = true, irreg = true, } }, { -- It appears that only [[resfolegar]] has proparoxytone forms, not [[folegar]] or [[tresfolegar]]. match = "^resfolegar", forms = { pres_stressed = {"resfóleg", "resfoleg"}, irreg = true, } }, { -- aguar/desaguar/enxaguar, ambiguar/apaziguar/averiguar, minguar, cheguar?? (obsolete variant of [[chegar]]) match = "guar", forms = { -- combine_stem_ending() will move the acute accent backwards so it sits after the last vowel in [[minguar]] pres_stressed = {{form = AC .. "gu", footnotes = {"[Brazilian Portuguese]"}}, {form = "gu", footnotes = {"[European Portuguese]"}}}, pres_sub_stressed = { {form = AC .. "gu", footnotes = {"[Brazilian Portuguese]"}}, {form = "gu", footnotes = {"[European Portuguese]"}}, {form = AC .. VAR_SUPERSEDED .. "gü", footnotes = {"[Brazilian Portuguese]"}}, {form = VAR_SUPERSEDED .. "gú", footnotes = {"[European Portuguese]"}}, }, pres_sub_unstressed = {"gu", {form = VAR_SUPERSEDED .. "gü", footnotes = {"[Brazilian Portuguese]"}}}, pret_1s = {"guei", {form = VAR_SUPERSEDED .. "güei", footnotes = {"[Brazilian Portuguese]"}}}, } }, { -- adequar/readequar, antiquar/obliquar, apropinquar match = "quar", forms = { -- combine_stem_ending() will move the acute accent backwards so it sits after the last vowel in [[apropinquar]] pres_stressed = {{form = AC .. "qu", footnotes = {"[Brazilian Portuguese]"}}, {form = "qu", footnotes = {"[European Portuguese]"}}}, pres_sub_stressed = { {form = AC .. "qu", footnotes = {"[Brazilian Portuguese]"}}, {form = "qu", footnotes = {"[European Portuguese]"}}, {form = AC .. VAR_SUPERSEDED .. "qü", footnotes = {"[Brazilian Portuguese]"}}, {form = VAR_SUPERSEDED .. "qú", footnotes = {"[European Portuguese]"}}, }, pres_sub_unstressed = {"qu", {form = VAR_SUPERSEDED .. "qü", footnotes = {"[Brazilian Portuguese]"}}}, pret_1s = {"quei", {form = VAR_SUPERSEDED .. "qüei", footnotes = {"[Brazilian Portuguese]"}}}, } }, { -- coar match = "^coar", forms = { pres_1s = {"coo", {form = VAR_SUPERSEDED .. "côo", footnotes = {"[Brazilian Portuguese]"}}}, pres_2s = {"coas", VAR_SUPERSEDED .. "côas"}, pres_3s = {"coa", VAR_SUPERSEDED .. "côa"}, } }, { -- maquiar match = "maquiar", forms = { pres_stressed = {"maqui", {form = "maquei", footnotes = {"[informal, proscribed]"}}}, } }, { -- -oar (abençoar, coroar, enjoar, perdoar, etc.) match = "oar", forms = { pres_1s = {"oo", {form = VAR_SUPERSEDED .. "ôo", footnotes = {"[Brazilian Portuguese]"}}}, } }, { -- -oiar (apoiar, boiar) match = "oiar", forms = { pres_stressed = {"oi", {form = VAR_SUPERSEDED .. "ói", footnotes = {"[Brazilian Portuguese]"}}}, } }, { -- parar match = "^parar", forms = { pres_3s = {"para", VAR_SUPERSEDED .. "pára"}, } }, { -- pelar match = "^pelar", forms = { pres_1s = {"pelo", VAR_SUPERSEDED .. "pélo"}, pres_2s = {"pelas", VAR_SUPERSEDED .. "pélas"}, pres_3s = {"pela", VAR_SUPERSEDED .. "péla"}, } }, -------------------------------------------------------------------------------------------- -- -er -- -------------------------------------------------------------------------------------------- -- Verbs not needing entries here: -- -- precaver: use <no_pres_stressed> -- -cer (verbs in -ecer, descer, vencer, etc.): automatically handled in combine_stem_ending() -- -ger (proteger, reger, etc.): automatically handled in combine_stem_ending() -- -guer (erguer/reerguer/soerguer): automatically handled in combine_stem_ending() { -- benzer match = "benzer", forms = {short_pp = "bento"} }, { -- caber match = "caber", forms = { pres1_and_sub = "caib", pret = "coubé", pret_1s = "coube", pret_3s = "coube", pret_conj = "irreg", irreg = true, } }, { -- crer, descrer match = "crer", forms = { pres_2s = "crês", pres_3s = "crê", pres_2p = "credes", pres_3p = {"creem", VAR_SUPERSEDED .. "crêem"}, pres1_and_sub = "crei", irreg = true, } }, { -- dizer, bendizer, condizer, contradizer, desdizer, maldizer, predizer, etc. match = "dizer", forms = { -- use 'digu' because we're in a front environment; if we use 'dig', we'll get '#dijo' pres1_and_sub = "digu", pres_3s = "diz", pret = "dissé", pret_conj = "irreg", pret_1s = "disse", pret_3s = "disse", pp = "dito", fut = "dir", imp_2s = {"diz", "dize"}, -- per Infopédia irreg = true, } }, { -- eleger, reeleger match = "eleger", forms = {short_pp = "eleito"} }, { -- acender, prender; not desprender, etc. match = match_against_verbs("ender", {"^ac", "^pr"}), forms = {short_pp = "eso"} }, { -- fazer, afazer, contrafazer, desfazer, liquefazer, perfazer, putrefazer, rarefazer, refazer, satisfazer, tumefazer match = "fazer", forms = { pres1_and_sub = "faç", pres_3s = "faz", pret = "fizé", pret_conj = "irreg", pret_1s = "fiz", pret_3s = "fez", pp = "feito", fut = "far", imp_2s = {"faz", {form = "faze", footnotes = {"[Brazil only]"}}}, -- per Priberam irreg = true, } }, { match = "^haver", forms = { pres_1s = "hei", pres_2s = "hás", pres_3s = "há", pres_1p = {"havemos", "hemos"}, pres_2p = {"haveis", "heis"}, pres_3p = "hão", pres1_and_sub = "haj", -- only for subjunctive as we override pres_1s pret = "houvé", pret_conj = "irreg", pret_1s = "houve", pret_3s = "houve", imp_2p = "havei", irreg = true, } }, -- reaver below under r- { -- jazer, adjazer match = "jazer", forms = { pres_3s = "jaz", imp_2s = {"jaz", "jaze"}, -- per Infopédia irreg = true, } }, { -- ler, reler, tresler; not excel(l)er, valer, etc. match = match_against_verbs("ler", {"^", "^re", "tres"}), forms = { pres_2s = "lês", pres_3s = "lê", pres_2p = "ledes", pres_3p = {"leem", VAR_SUPERSEDED .. "lêem"}, pres1_and_sub = "lei", irreg = true, } }, { -- morrer, desmorrer match = "morrer", forms = {short_pp = "morto"} }, { -- doer, moer/remoer, roer/corroer, soer match = "oer", forms = { pres_1s = function(base, prefix) return prefix ~= "s" and {"oo", VAR_SUPERSEDED .. "ôo"} or nil end, pres_2s = "óis", pres_3s = "ói", -- impf -ía etc., pret_1s -oí and pp -oído handled automatically in combine_stem_ending() only3sp = function(base, prefix) return prefix == "d" end, no_pres1_and_sub = function(base, prefix) return prefix == "s" end, irreg = true, } }, { -- perder match = "perder", forms = { -- use 'perqu' because we're in a front environment; if we use 'perc', we'll get '#perço' pres1_and_sub = "perqu", irreg = true, } }, { -- poder match = "poder", forms = { pres1_and_sub = "poss", pret = "pudé", pret_1s = "pude", pret_3s = "pôde", pret_conj = "irreg", irreg = true, } }, { -- prazer, aprazer, comprazer, desprazer match = "prazer", forms = { pres_3s = "praz", pret = "prouvé", pret_1s = "prouve", pret_3s = "prouve", pret_conj = "irreg", only3sp = function(base, prefix) return not prefix:find("com$") end, irreg = true, } }, -- prover below, just below ver { -- requerer; must precede querer match = "requerer", forms = { -- old module claims alt pres_3s 'requere'; not in Priberam, Infopédia or conjugacao.com.br pres_3s = "requer", pres1_and_sub = "requeir", imp_2s = {{form = "requere", footnotes = {"[Brazil only]"}}, "requer"}, -- per Priberam -- regular preterite, unlike [[querer]] irreg = true, } }, { -- querer, desquerer, malquerer match = "querer", forms = { -- old module claims alt pres_3s 'quere'; not in Priberam, Infopédia or conjugacao.com.br pres_1s = "quero", pres_3s = "quer", pres1_and_sub = "queir", -- only for subjunctive as we override pres_1s pret = "quisé", pret_1s = "quis", pret_3s = "quis", pret_conj = "irreg", imp_2s = {{form = "quere", footnotes = {"[Brazil only]"}}, {form = "quer", footnotes = {"[Brazil only]"}}}, -- per Priberam irreg = true, } }, { match = "reaver", forms = { no_pres_stressed = true, pret = "reouvé", pret_conj = "irreg", pret_1s = "reouve", pret_3s = "reouve", irreg = true, } }, { -- saber, ressaber match = "saber", forms = { pres_1s = "sei", pres1_and_sub = "saib", -- only for subjunctive as we override pres_1s pret = "soubé", pret_1s = "soube", pret_3s = "soube", pret_conj = "irreg", irreg = true, } }, { -- escrever/reescrever, circunscrever, descrever/redescrever, inscrever, prescrever, proscrever, subscrever, -- transcrever, others? match = "screver", forms = { pp = "scrito", irreg = true, } }, { -- suspender match = "suspender", forms = {short_pp = "suspenso"} }, { match = "^ser", forms = { pres_1s = "sou", pres_2s = "és", pres_3s = "é", pres_1p = "somos", pres_2p = "sois", pres_3p = "são", pres1_and_sub = "sej", -- only for subjunctive as we override pres_1s full_impf = "er", impf_1p = "éramos", impf_2p = "éreis", pret = "fô", pret_1s = "fui", pret_3s = "foi", pret_conj = "irreg", imp_2s = "sê", imp_2p = "sede", pp_inv = true, irreg = true, } }, { -- We want to match abster, conter, deter, etc. but not abater, cometer, etc. No way to avoid listing each verb. match = match_against_verbs("ter", {"abs", "^a", "con", "de", "entre", "man", "ob", "^re", "sus", "^"}), forms = { pres_2s = function(base, prefix) return prefix == "" and "tens" or "téns" end, pres_3s = function(base, prefix) return prefix == "" and "tem" or "tém" end, pres_2p = "tendes", pres_3p = "têm", pres1_and_sub = "tenh", full_impf = "tinh", impf_1p = "tínhamos", impf_2p = "tínheis", pret = "tivé", pret_1s = "tive", pret_3s = "teve", pret_conj = "irreg", irreg = true, } }, { match = "trazer", forms = { -- use 'tragu' because we're in a front environment; if we use 'trag', we'll get '#trajo' pres1_and_sub = "tragu", pres_3s = "traz", pret = "trouxé", pret_1s = "trouxe", pret_3s = "trouxe", pret_conj = "irreg", fut = "trar", irreg = true, } }, { -- valer, desvaler, equivaler match = "valer", forms = { pres1_and_sub = "valh", irreg = true, } }, { -- coerir, incoerir --FIXME: This should be a part of the <i-e> section. It's an "i-e", but with accents to prevent a diphthong when it gets stressed. match = "coerir", forms = { vowel_alt = "i-e", pres1_and_sub = "coír", pres_sub_unstressed = "coir", } }, { -- We want to match antever etc. but not absolver, atrever etc. No way to avoid listing each verb. match = match_against_verbs("ver", {"ante", "des", "entre", "pre", "^re", "^"}), forms = { pres_2s = "vês", pres_3s = "vê", pres_2p = "vedes", pres_3p = {"veem", VAR_SUPERSEDED .. "vêem"}, pres1_and_sub = "vej", pret = "ví", pret_1s = "vi", pret_3s = "viu", pret_conj = "irreg", pp = "visto", irreg = true, } }, { -- [[prover]] and [[desprover]] have regular preterite and past participle match = "prover", forms = { pres_2s = "provês", pres_3s = "provê", pres_2p = "provedes", pres_3p = {"proveem", VAR_SUPERSEDED .. "provêem"}, pres1_and_sub = "provej", irreg = true, } }, { -- Only envolver, revolver. Not volver, desenvolver, devolver, evolver, etc. match = match_against_verbs("volver", {"^en", "^re"}), forms = {short_pp = "volto"}, }, -------------------------------------------------------------------------------------------- -- -ir -- -------------------------------------------------------------------------------------------- -- Verbs not needing entries here: -- -- abolir: per Priberam: <no_pres1_and_sub> for Brazil, use <u-o> for Portugal -- barrir: use <only3sp> -- carpir, colorir, demolir: use <no_pres1_and_sub> -- descolorir: per Priberam: <no_pres_stressed> for Brazil, use <no_pres1_and_sub> for Portugal -- delir, espavorir, falir, florir, remir, renhir: use <no_pres_stressed> -- empedernir: per Priberam: <no_pres_stressed> for Brazil, use <i-e> for Portugal -- transir: per Priberam: <no_pres_stressed> for Brazil, regular for Portugal -- aspergir, despir, flectir/deflectir/genuflectir/genufletir/reflectir/refletir, mentir/desmentir, -- sentir/assentir/consentir/dissentir/pressentir/ressentir, convergir/divergir, aderir/adherir, -- ferir/auferir/conferir/deferir/desferir/diferir/differir/inferir/interferir/preferir/proferir/referir/transferir, -- gerir/digerir/ingerir/sugerir, preterir, competir/repetir, servir, advertir/animadvertir/divertir, -- vestir/investir/revestir/travestir, seguir/conseguir/desconseguir/desseguir/perseguir/prosseguir: use <i-e> -- inerir: use <i-e> (per Infopédia, and per Priberam for Brazil), use <i-e.only3sp> (per Priberam for Portugal) -- compelir/expelir/impelir/repelir: per Priberam: use <i-e> for Brazil, <no_pres1_and_sub> for Portugal (Infopédia -- says <i-e>); NOTE: old module claims short_pp 'repulso' but none of Priberam, Infopédia and conjugacao.com.br agree -- dormir, engolir, tossir, subir, acudir/sacudir, fugir, sumir/consumir (NOT assumir/presumir/resumir): use <u-o> -- polir/repolir (claimed in old module to have no pres stressed, but Priberam disagrees for both Brazil and -- Portugal; Infopédia lists repolir as completely regular and not like polir, but I think that's an error): use -- <u> -- premir: per Priberam: use <no_pres1_and_sub> for Brazil, <i> for Portugal (for Portugal, Priberam says -- primo/primes/prime, while Infopédia says primo/premes/preme; Priberam is probably more reliable) -- extorquir/retorquir use <no_pres1_and_sub> for Brazil, <u-o,u> for Portugal -- agredir/progredir/regredir/transgredir: use <i> -- denegrir, prevenir: use <i> -- eclodir: per Priberam: regular in Brazil, <u-o.only3sp> in Portugal (Infopédia says regular) -- cerzir: per Priberam: use <i> for Brazil, use <i-e> for Portugal (Infopédia says <i-e,i>) -- cergir: per Priberam: use <i-e> for Brazil, no conjugation given for Portugal (Infopédia says <i-e>) -- proibir/coibir: use <í> -- reunir: use <ú> -- -- -cir alternations (aducir, ressarcir): automatically handled in combine_stem_ending() -- -gir alternations (agir, dirigir, exigir): automatically handled in combine_stem_ending() -- -guir alternations (e.g. conseguir): automatically handled in combine_stem_ending() -- -quir alternations (e.g. extorquir): automatically handled in combine_stem_ending() { -- verbs in -air (cair, sair, trair and derivatives: decair/descair/recair, sobres(s)air, -- abstrair/atrair/contrair/distrair/extrair/protrair/retrair/subtrair) match = "air", forms = { pres1_and_sub = "ai", pres_2s = "ais", pres_3s = "ai", -- all occurrences of accented í in endings handled in combine_stem_ending() irreg = true, } }, { -- abrir/desabrir/reabrir match = "abrir", forms = {pp = "aberto"} }, { -- cobrir/descobrir/encobrir/recobrir/redescobrir match = "cobrir", forms = {vowel_alt = "u-o", pp = "coberto"} }, { -- conduzir, produzir, reduzir, traduzir, etc.; luzir, reluzir, tremeluzir match = "uzir", forms = { pres_3s = "uz", imp_2s = {"uz", "uze"}, -- per Infopédia irreg = true, } }, { -- parir match = "parir", forms = { pres1_and_sub = {{form = "pair", footnotes = {"[archaic, now rare, sometimes proscribed]"}}}, -- per Houaiss irreg = true, } }, { -- pedir, desimpedir, despedir, espedir, expedir, impedir -- medir -- comedir (per Priberam, no_pres_stressed in Brazil) match = match_against_verbs("edir", {"m", "p"}), forms = { pres1_and_sub = "eç", irreg = true, } }, { -- explodir, implodir match = "plodir", forms = { vowel_alt = {{form = "+", footnotes = {"[Brazil]"}}, {form = "u-o", footnotes = {"[Portugal]"}}}, } }, { -- frigir match = "frigir", forms = {vowel_alt = "i-e", short_pp = "frito"}, }, { -- inserir match = "inserir", forms = {vowel_alt = "i-e", short_pp = {form = "inserto", footnotes = {"[European Portuguese only]"}}}, }, { -- ir match = "^ir", forms = { pres_1s = "vou", pres_2s = "vais", pres_3s = "vai", pres_1p = "vamos", pres_2p = "ides", pres_3p = "vão", pres_sub_1s = "vá", pres_sub_2s = "vás", pres_sub_3s = "vá", pres_sub_1p = "vamos", pres_sub_2p = "vades", pres_sub_3p = "vão", pret = "fô", pret_1s = "fui", pret_3s = "foi", pret_conj = "irreg", irreg = true, } }, { -- emergir, imergir, submergir match = "mergir", forms = {vowel_alt = {"i-e", "+"}, short_pp = "merso"}, }, { match = "ouvir", forms = { pres1_and_sub = {"ouç", "oiç"}, irreg = true, } }, { -- exprimir, imprimir, comprimir (but not descomprimir per Priberam), deprimir, oprimir/opprimir (but not reprimir, -- suprimir/supprimir per Priberam) match = match_against_verbs("primir", {"^com", "ex", "im", "de", "^o", "op"}), forms = {short_pp = "presso"} }, { -- rir, sorrir match = match_against_verbs("rir", {"^", "sor"}), forms = { pres_2s = "ris", pres_3s = "ri", pres_2p = "rides", pres_3p = "riem", pres1_and_sub = "ri", irreg = true, } }, { -- distinguir, extinguir match = "tinguir", forms = { short_pp = "tinto", -- gu/g alternations handled in combine_stem_ending() } }, { -- delinquir, arguir/redarguir -- NOTE: The following is based on delinquir, with arguir/redarguir by parallelism. -- In Priberam, delinquir and arguir are exactly parallel, but in Infopédia they aren't; only delinquir has -- alternatives like 'delínques'. I assume this is because forms like 'delínques' are Brazilian and -- Infopédia is from Portugal, so their coverage of Brazilian forms may be inconsistent. match = match_against_verbs("uir", {"delinq", "arg"}), forms = { -- use 'ü' because we're in a front environment; if we use 'u', we'll get '#delinco', '#argo' pres1_and_sub = {{form = AC .. "ü", footnotes = {"[Brazilian Portuguese]"}}, {form = "ü", footnotes = {"[European Portuguese]"}}}, -- FIXME: verify. This is by partial parallelism with the present subjunctive of verbs in -quar (also a -- front environment). Infopédia has 'delinquis ou delínques' and Priberam has 'delinqúis'. pres_2s = { {form = AC .. "ues", footnotes = {"[Brazilian Portuguese]"}}, {form = "uis", footnotes = {"[European Portuguese]"}}, -- This form should occur only with an infinitive 'delinqüir' etc. -- {form = AC .. VAR_SUPERSEDED .. "ües", footnotes = {"[Brazilian Portuguese]"}}, {form = VAR_SUPERSEDED .. "úis", footnotes = {"[European Portuguese]"}}, }, -- Same as previous. pres_3s = { {form = AC .. "ue", footnotes = {"[Brazilian Portuguese]"}}, {form = "ui", footnotes = {"[European Portuguese]"}}, -- This form should occur only with an infinitive 'delinqüir' etc. -- {form = AC .. VAR_SUPERSEDED .. "üe", footnotes = {"[Brazilian Portuguese]"}}, {form = VAR_SUPERSEDED .. "úi", footnotes = {"[European Portuguese]"}}, }, -- Infopédia has 'delinquem ou delínquem' and Priberam has 'delinqúem'. pres_3p = { {form = AC .. "uem", footnotes = {"[Brazilian Portuguese]"}}, {form = "uem", footnotes = {"[European Portuguese]"}}, -- This form should occur only with an infinitive 'delinqüir' etc. -- {form = AC .. VAR_SUPERSEDED .. "üem", footnotes = {"[Brazilian Portuguese]"}}, {form = VAR_SUPERSEDED .. "úem", footnotes = {"[European Portuguese]"}}, }, -- FIXME: The old module also had several other alternative forms (given as [123]_alt, not identified as -- obsolete): -- impf: delinquia/delinquía, delinquias/delinquías, delinquia/delinquía, delinquíamos, delinquíeis, delinquiam/delinquíam -- plup: delinquira/delinquíra, delinquiras/delinquíras, delinquira/delinquíra, delinquíramos, delinquíreis, delinquiram/delinquíram -- pres_1p = delinquimos/delinquímos, pres_2p = delinquis/delinquís -- pret = delinqui/delinquí, delinquiste/delinquíste, delinquiu, delinquimos/delinquímos, delinquistes/delinquístes, delinquiram/delinquíram -- pers_inf = delinquir, delinquires, delinquir, delinquirmos, delinquirdes, delinquirem/delinquírem -- fut_sub = delinquir, delinquires, delinquir, delinquirmos, delinquirdes, delinquirem/delinquírem -- -- None of these alternative forms can be found in the Infopédia, Priberam, Collins or Reverso conjugation -- tables, so their status is unclear, and I have omitted them. } }, { -- verbs in -truir (construir, destruir, reconstruir) but not obstruir/desobstruir, instruir, which are handled -- by the default -uir handler below match = match_against_verbs("struir", {"con", "de"}), forms = { pres_2s = {"stróis", "struis"}, pres_3s = {"strói", "strui"}, pres_3p = {"stroem", "struem"}, -- all occurrences of accented í in endings handled in combine_stem_ending() irreg = true, } }, { -- verbs in -cluir (concluir, excluir, incluir): like -uir but has short_pp concluso etc. in Brazil match = "cluir", forms = { pres_2s = "cluis", pres_3s = "clui", -- all occurrences of accented í in endings handled in combine_stem_ending() short_pp = {form = "cluso", footnotes = {"[Brazil only]"}}, } }, { -- puir, ruir: like -uir but defective in pres_1s, all pres sub match = match_against_verbs("uir", {"^p", "^r"}), forms = { pres_2s = "uis", pres_3s = "ui", -- all occurrences of accented í in endings handled in combine_stem_ending() no_pres1_and_sub = true, irreg = true, } }, { -- remaining verbs in -uir (concluir/excluir/incluir/concruir/concruyr, abluir/diluir, afluir/fluir/influir, -- aluir, anuir, atribuir/contribuir/distribuir/redistribuir/retribuir/substituir, coevoluir/evoluir, -- constituir/destituir/instituir/reconstituir/restituir, derruir, diminuir, estatuir, fruir/usufruir, imbuir, -- imiscuir, poluir, possuir, pruir -- FIXME: old module lists short pp incluso for incluir that can't be verified, ask about this -- FIXME: handle -uyr verbs? match = function(verb) -- Don't match -guir verbs (e.g. [[seguir]], [[conseguir]]) or -quir verbs (e.g. [[extorquir]]) if verb:find("guir$") or verb:find("quir$") then return nil else return match_against_verbs("uir", {""})(verb) end end, forms = { pres_2s = "uis", pres_3s = "ui", -- all occurrences of accented í in endings handled in combine_stem_ending() irreg = true, } }, { -- We want to match advir, convir, devir, etc. but not ouvir, servir, etc. No way to avoid listing each verb. match = match_against_verbs("vir", {"ad", "^a", "con", "contra", "de", "^desa", "inter", "pro", "^re", "sobre", "^"}), forms = { pres_2s = function(base, prefix) return prefix == "" and "vens" or "véns" end, pres_3s = function(base, prefix) return prefix == "" and "vem" or "vém" end, pres_2p = "vindes", pres_3p = "vêm", pres1_and_sub = "venh", full_impf = "vinh", impf_1p = "vínhamos", impf_2p = "vínheis", pret = "vié", pret_1s = "vim", pret_3s = "veio", pret_conj = "irreg", pp = "vindo", irreg = true, } }, -------------------------------------------------------------------------------------------- -- misc -- -------------------------------------------------------------------------------------------- { -- pôr, antepor, apor, compor/decompor/descompor, contrapor, depor, dispor, expor, impor, interpor, justapor, -- opor, pospor, propor, repor, sobrepor, supor/pressupor, transpor, superseded forms like [[decompôr]], others? match = "p[oô]r", forms = { pres1_and_sub = "ponh", pres_2s = "pões", pres_3s = "põe", pres_1p = "pomos", pres_2p = "pondes", pres_3p = "põem", full_impf = "punh", impf_1p = "púnhamos", impf_2p = "púnheis", pret = "pusé", pret_1s = "pus", pret_3s = "pôs", pret_conj = "irreg", pers_inf = "po", gerund = "pondo", pp = "posto", irreg = true, } }, } local function skip_slot(base, slot, allow_overrides) if not allow_overrides and (base.basic_overrides[slot] or base.refl and base.basic_reflexive_only_overrides[slot]) then -- Skip any slots for which there are overrides. return true end if base.only3s and (slot:find("^pp_f") or slot:find("^pp_mp")) then -- diluviar, atardecer, neviscar; impersonal verbs have only masc sing pp return true end if not slot:find("[123]") then -- Don't skip non-personal slots. return false end if base.nofinite then return true end if (base.only3s or base.only3sp or base.only3p) and (slot:find("^imp_") or slot:find("^neg_imp_")) then return true end if base.only3s and not slot:find("3s") then -- diluviar, atardecer, neviscar return true end if base.only3sp and not slot:find("3[sp]") then -- atañer, concernir return true end if base.only3p and not slot:find("3p") then -- [[caer cuatro gotas]], [[caer chuzos de punta]], [[entrarle los siete males]] return true end return false end -- Apply vowel alternations to stem. local function apply_vowel_alternations(stem, alternations) local alternation_stems = {} local saw_pres1_and_sub = false local saw_pres_stressed = false -- Process alternations other than +. for _, altobj in ipairs(alternations) do local alt = altobj.form local pres1_and_sub, pres_stressed, err -- Treat final -gu, -qu as a consonant, so the previous vowel can alternate (e.g. conseguir -> consigo). -- This means a verb in -guar can't have a u-ú alternation but I don't think there are any verbs like that. stem = rsub(stem, "([gq])u$", "%1" .. TEMPC1) if alt == "+" then -- do nothing yet elseif alt == "ei" then local before_last_vowel = rmatch(stem, "^(.*)i$") if not before_last_vowel then err = "stem should end in -i" else pres1_and_sub = nil pres_stressed = before_last_vowel .. "ei" end else local before_last_vowel, last_vowel, after_last_vowel = rmatch(stem, "^(.*)(" .. V .. ")(.-[ui])$") if not before_last_vowel then before_last_vowel, last_vowel, after_last_vowel = rmatch(stem, "^(.*)(" .. V .. ")(.-)$") end if alt == "i-e" then if last_vowel == "e" or last_vowel == "i" then pres1_and_sub = before_last_vowel .. "i" .. after_last_vowel if last_vowel == "i" then pres_stressed = before_last_vowel .. "e" .. after_last_vowel end else err = "should have -e- or -i- as the last vowel" end elseif alt == "i" then if last_vowel == "e" then pres1_and_sub = before_last_vowel .. "i" .. after_last_vowel pres_stressed = pres1_and_sub else err = "should have -e- as the last vowel" end elseif alt == "u-o" then if last_vowel == "o" or last_vowel == "u" then pres1_and_sub = before_last_vowel .. "u" .. after_last_vowel if last_vowel == "u" then pres_stressed = before_last_vowel .. "o" .. after_last_vowel end else err = "should have -o- or -u- as the last vowel" end elseif alt == "u" then if last_vowel == "o" then pres1_and_sub = before_last_vowel .. "u" .. after_last_vowel pres_stressed = pres1_and_sub else err = "should have -o- as the last vowel" end elseif alt == "í" then if last_vowel == "i" then pres_stressed = before_last_vowel .. "í" .. after_last_vowel else err = "should have -i- as the last vowel" end elseif alt == "ú" then if last_vowel == "u" then pres_stressed = before_last_vowel .. "ú" .. after_last_vowel else err = "should have -u- as the last vowel" end else error("Internal error: Unrecognized vowel alternation '" .. alt .. "'") end end if pres1_and_sub then pres1_and_sub = {form = pres1_and_sub:gsub(TEMPC1, "u"), footnotes = altobj.footnotes} saw_pres1_and_sub = true end if pres_stressed then pres_stressed = {form = pres_stressed:gsub(TEMPC1, "u"), footnotes = altobj.footnotes} saw_pres_stressed = true end table.insert(alternation_stems, { altobj = altobj, pres1_and_sub = pres1_and_sub, pres_stressed = pres_stressed, err = err }) end -- Now do +. We check to see which stems are used by other alternations and specify those so any footnotes are -- properly attached. for _, alternation_stem in ipairs(alternation_stems) do if alternation_stem.altobj.form == "+" then local stemobj = {form = stem, footnotes = alternation_stem.altobj.footnotes} alternation_stem.pres1_and_sub = saw_pres1_and_sub and stemobj or nil alternation_stem.pres_stressed = saw_pres_stressed and stemobj or nil end end return alternation_stems end -- Add the `stem` to the `ending` for the given `slot` and apply any phonetic modifications. -- WARNING: This function is written very carefully; changes to it can easily have unintended consequences. local function combine_stem_ending(base, slot, prefix, stem, ending, dont_include_prefix) -- If the stem begins with an acute accent, this is a signal to move the accent onto the last vowel of the prefix. -- Cf. míngua of minguar. if stem:find("^" .. AC) then stem = rsub(stem, "^" .. AC, "") if dont_include_prefix then error("Internal error: Can't handle acute accent at beginning of stem if dont_include_prefix is given") end prefix = rsub(prefix, "([aeiouyAEIOUY])([^aeiouyAEIOUY]*)$", "%1" .. AC .. "%2") end -- Use the full stem for checking for -gui ending and such, because 'stem' is just 'u' for [[arguir]], -- [[delinquir]]. local full_stem = prefix .. stem -- Include the prefix in the stem unless dont_include_prefix is given (used for the past participle stem). if not dont_include_prefix then stem = prefix .. stem end -- If the ending begins with a double asterisk, this is a signal to conditionally delete the accent on the last letter -- of the stem. "Conditionally" means we don't do it if the last two letters would form a diphthong without the accent -- on the second one (e.g. in [[sair]], with stem 'saí'); but as an exception, we do delete the accent in stems -- ending in -guí, -quí (e.g. in [[conseguir]]) because in this case the ui isn't a diphthong. if ending:find("^%*%*") then ending = rsub(ending, "^%*%*", "") if rfind(full_stem, "[gq]uí$") or not rfind(full_stem, V .. "[íú]$") then stem = remove_final_accent(stem) end end -- If the ending begins with an asterisk, this is a signal to delete the accent on the last letter of the stem. -- E.g. fizé -> fizermos. Unlike for **, this removal is unconditional, so we get e.g. 'sairmos' not #'saírmos'. if ending:find("^%*") then ending = rsub(ending, "^%*", "") stem = remove_final_accent(stem) end -- If ending begins with i, it must get an accent after an unstressed vowel (in some but not all cases) to prevent -- the two merging into a diphthong: -- * cair -> -- * pres: caímos, caís; -- * impf: all forms (caí-); -- * pret: caí, caíste (but not caiu), caímos, caístes, caíram; -- * plup: all forms (caír-); -- * impf_sub: all forms (caíss-); -- * fut_sub: caíres, caírem (but not cair, cairmos, cairdes) -- * pp: caído (but not gerund caindo) -- * atribuir, other verbs in -uir -> same pattern as for cair etc. -- * roer -> -- * pret: roí -- * impf: all forms (roí-) -- * pp: roído if ending:find("^i") and full_stem:find("[aeiou]$") and not full_stem:find("[gq]u$") and ending ~= "ir" and ending ~= "iu" and ending ~= "indo" and not ending:find("^ir[md]") then ending = ending:gsub("^i", "í") end -- Spelling changes in the stem; it depends on whether the stem given is the pre-front-vowel or -- pre-back-vowel variant, as indicated by `frontback`. We want these front-back spelling changes to happen -- between stem and ending, not between prefix and stem; the prefix may not have the same "front/backness" -- as the stem. local is_front = rfind(ending, "^[eiéíê]") if base.frontback == "front" and not is_front then stem = stem:gsub("c$", "ç") -- conhecer -> conheço, vencer -> venço, descer -> desço stem = stem:gsub("g$", "j") -- proteger -> protejo, fugir -> fujo stem = stem:gsub("gu$", "g") -- distinguir -> distingo, conseguir -> consigo stem = stem:gsub("qu$", "c") -- extorquir -> exturco stem = stem:gsub("([gq])ü$", "%1u") -- argüir (superseded) -> arguo, delinqüir (superseded) -> delinquo elseif base.frontback == "back" and is_front then -- The following changes are all superseded so we don't do them: -- averiguar -> averigüei, minguar -> mingüei; antiquar -> antiqüei, apropinquar -> apropinqüei -- stem = stem:gsub("([gq])u$", "%1ü") stem = stem:gsub("g$", "gu") -- cargar -> carguei, apagar -> apaguei stem = stem:gsub("c$", "qu") -- marcar -> marquei stem = stem:gsub("ç$", "c") -- começar -> comecei -- j does not go to g here; desejar -> deseje not #desege end return stem .. ending end local function add3(base, slot, stems, endings, footnotes, allow_overrides) if skip_slot(base, slot, allow_overrides) then return end local function do_combine_stem_ending(stem, ending) return combine_stem_ending(base, slot, base.prefix, stem, ending) end iut.add_forms(base.forms, slot, stems, endings, do_combine_stem_ending, nil, nil, footnotes) end local function insert_form(base, slot, form) if not skip_slot(base, slot) then iut.insert_form(base.forms, slot, form) end end local function insert_forms(base, slot, forms) if not skip_slot(base, slot) then iut.insert_forms(base.forms, slot, forms) end end local function add_single_stem_tense(base, slot_pref, stems, s1, s2, s3, p1, p2, p3) local function addit(slot, ending) add3(base, slot_pref .. "_" .. slot, stems, ending) end addit("1s", s1) addit("2s", s2) addit("3s", s3) addit("1p", p1) addit("2p", p2) addit("3p", p3) end local function construct_stems(base, vowel_alt) local stems = {} stems.pres_unstressed = base.stems.pres_unstressed or base.inf_stem stems.pres_stressed = -- If no_pres_stressed given, pres_stressed stem should be empty so no forms are generated. base.no_pres_stressed and {} or base.stems.pres_stressed or vowel_alt.pres_stressed or base.inf_stem stems.pres1_and_sub = -- If no_pres_stressed given, the entire subjunctive is missing. base.no_pres_stressed and {} or -- If no_pres1_and_sub given, pres1 and entire subjunctive are missing. base.no_pres1_and_sub and {} or base.stems.pres1_and_sub or vowel_alt.pres1_and_sub or nil stems.pres1 = base.stems.pres1 or stems.pres1_and_sub or stems.pres_stressed stems.impf = base.stems.impf or base.inf_stem stems.full_impf = base.stems.full_impf stems.pret_base = base.stems.pret_base or base.inf_stem stems.pret = base.stems.pret or iut.map_forms(iut.convert_to_general_list_form(stems.pret_base), function(form) return form .. base.conj_vowel end) stems.pret_conj = base.stems.pret_conj or base.conj stems.fut = base.stems.fut or base.inf_stem .. base.conj stems.cond = base.stems.cond or stems.fut stems.pres_sub_stressed = base.stems.pres_sub_stressed or stems.pres1 stems.pres_sub_unstressed = base.stems.pres_sub_unstressed or stems.pres1_and_sub or stems.pres_unstressed stems.sub_conj = base.stems.sub_conj or base.conj stems.plup = base.stems.plup or stems.pret stems.impf_sub = base.stems.impf_sub or stems.pret stems.fut_sub = base.stems.fut_sub or stems.pret stems.pers_inf = base.stems.pers_inf or base.inf_stem .. base.conj_vowel stems.pp = base.stems.pp or base.conj == "ar" and combine_stem_ending(base, "pp_ms", base.prefix, base.inf_stem, "ado", "dont include prefix") or -- use combine_stem_ending esp. so we get roído, caído, etc. combine_stem_ending(base, "pp_ms", base.prefix, base.inf_stem, "ido", "dont include prefix") stems.pp_ms = stems.pp local function masc_to_fem(form) if rfind(form, "o$") then return rsub(form, "o$", "a") else return form end end stems.pp_fs = iut.map_forms(iut.convert_to_general_list_form(stems.pp_ms), masc_to_fem) if base.stems.short_pp then stems.short_pp_ms = base.stems.short_pp stems.short_pp_fs = iut.map_forms(iut.convert_to_general_list_form(stems.short_pp_ms), masc_to_fem) end base.this_stems = stems end local function add_present_indic(base) local stems = base.this_stems local function addit(slot, stems, ending) add3(base, "pres_" .. slot, stems, ending) end local s2, s3, p1, p2, p3 if base.conj == "ar" then s2, s3, p1, p2, p3 = "as", "a", "amos", "ais", "am" elseif base.conj == "er" or base.conj == "or" then -- verbs in -por have the present overridden s2, s3, p1, p2, p3 = "es", "e", "emos", "eis", "em" elseif base.conj == "ir" then s2, s3, p1, p2, p3 = "es", "e", "imos", "is", "em" else error("Internal error: Unrecognized conjugation " .. base.conj) end addit("1s", stems.pres1, "o") addit("2s", stems.pres_stressed, s2) addit("3s", stems.pres_stressed, s3) addit("1p", stems.pres_unstressed, p1) addit("2p", stems.pres_unstressed, p2) addit("3p", stems.pres_stressed, p3) end local function add_present_subj(base) local stems = base.this_stems local function addit(slot, stems, ending) add3(base, "pres_sub_" .. slot, stems, ending) end local s1, s2, s3, p1, p2, p3 if stems.sub_conj == "ar" then s1, s2, s3, p1, p2, p3 = "e", "es", "e", "emos", "eis", "em" else s1, s2, s3, p1, p2, p3 = "a", "as", "a", "amos", "ais", "am" end addit("1s", stems.pres_sub_stressed, s1) addit("2s", stems.pres_sub_stressed, s2) addit("3s", stems.pres_sub_stressed, s3) addit("1p", stems.pres_sub_unstressed, p1) addit("2p", stems.pres_sub_unstressed, p2) addit("3p", stems.pres_sub_stressed, p3) end local function add_finite_non_present(base) local stems = base.this_stems local function add_tense(slot, stem, s1, s2, s3, p1, p2, p3) add_single_stem_tense(base, slot, stem, s1, s2, s3, p1, p2, p3) end if stems.full_impf then -- An override needs to be supplied for the impf_1p and impf_2p due to the written accent on the stem. add_tense("impf", stems.full_impf, "a", "as", "a", {}, {}, "am") elseif base.conj == "ar" then add_tense("impf", stems.impf, "ava", "avas", "ava", "ávamos", "áveis", "avam") else add_tense("impf", stems.impf, "ia", "ias", "ia", "íamos", "íeis", "iam") end -- * at the beginning of the ending means to remove a final accent from the preterite stem. if stems.pret_conj == "irreg" then add_tense("pret", stems.pret, {}, "*ste", {}, "*mos", "*stes", "*ram") elseif stems.pret_conj == "ar" then add_tense("pret", stems.pret_base, "ei", "aste", "ou", {{form = VAR_BR .. "amos", footnotes = {"[Brazilian Portuguese]"}}, {form = VAR_PT .. "ámos", footnotes = {"[European Portuguese]"}}}, "astes", "aram") elseif stems.pret_conj == "er" then add_tense("pret", stems.pret_base, "i", "este", "eu", "emos", "estes", "eram") else add_tense("pret", stems.pret_base, "i", "iste", "iu", "imos", "istes", "iram") end -- * at the beginning of the ending means to remove a final accent from the stem. -- ** is similar but is "conditional" on a consonant preceding the final vowel. add_tense("plup", stems.plup, "**ra", "**ras", "**ra", "ramos", "reis", "**ram") add_tense("impf_sub", stems.impf_sub, "**sse", "**sses", "**sse", "ssemos", "sseis", "**ssem") add_tense("fut_sub", stems.fut_sub, "*r", "**res", "*r", "*rmos", "*rdes", "**rem") local mark = TEMP_MESOCLITIC_INSERTION_POINT add_tense("fut", stems.fut, mark .. "ei", mark .. "ás", mark .. "á", mark .. "emos", mark .. "eis", mark .. "ão") add_tense("cond", stems.cond, mark .. "ia", mark .. "ias", mark .. "ia", mark .. "íamos", mark .. "íeis", mark .. "iam") -- Different stems for different parts of the personal infinitive to correctly handle forms of [[sair]] and [[pôr]]. add_tense("pers_inf", base.non_prefixed_verb, "", {}, "", {}, {}, {}) add_tense("pers_inf", stems.pers_inf, {}, "**res", {}, "*rmos", "*rdes", "**rem") end local function add_non_finite_forms(base) local stems = base.this_stems local function addit(slot, stems, ending, footnotes) add3(base, slot, stems, ending, footnotes) end insert_form(base, "infinitive", {form = base.verb}) -- Also insert "infinitive + reflexive pronoun" combinations if we're handling a reflexive verb. See comment below for -- "gerund + reflexive pronoun" combinations. if base.refl then for _, persnum in ipairs(person_number_list) do insert_form(base, "infinitive_" .. persnum, {form = base.verb}) end end -- verbs in -por have the gerund overridden local ger_ending = base.conj == "ar" and "ando" or base.conj == "er" and "endo" or "indo" addit("gerund", stems.pres_unstressed, ger_ending) -- Also insert "gerund + reflexive pronoun" combinations if we're handling a reflexive verb. We insert exactly the same -- form as for the bare gerund; later on in add_reflexive_or_fixed_clitic_to_forms(), we add the appropriate clitic -- pronouns. It's important not to do this for non-reflexive verbs, because in that case, the clitic pronouns won't be -- added, and {{pt-verb form of}} will wrongly consider all these combinations as possible inflections of the bare -- gerund. Thanks to [[User:JeffDoozan]] for this bug fix. if base.refl then for _, persnum in ipairs(person_number_list) do addit("gerund_" .. persnum, stems.pres_unstressed, ger_ending) end end -- Skip the long/short past participle footnotes if called from {{pt-verb}} so they don't show in the headword. local long_pp_footnotes = stems.short_pp_ms and base.alternant_multiword_spec.source_template ~= "pt-verb" and {long_pp_footnote} or nil addit("pp_ms", stems.pp_ms, "", long_pp_footnotes) if not base.pp_inv then addit("pp_fs", stems.pp_fs, "", long_pp_footnotes) addit("pp_mp", stems.pp_ms, "s", long_pp_footnotes) addit("pp_fp", stems.pp_fs, "s", long_pp_footnotes) end if stems.short_pp_ms then local short_pp_footnotes = stems.short_pp_ms and base.alternant_multiword_spec.source_template ~= "pt-verb" and {short_pp_footnote} or nil addit("short_pp_ms", stems.short_pp_ms, "", short_pp_footnotes) if not base.pp_inv then addit("short_pp_fs", stems.short_pp_fs, "", short_pp_footnotes) addit("short_pp_mp", stems.short_pp_ms, "s", short_pp_footnotes) addit("short_pp_fp", stems.short_pp_fs, "s", short_pp_footnotes) end end end local function copy_forms_to_imperatives(base) -- Copy pres3s to imperative since they are almost always the same. insert_forms(base, "imp_2s", iut.map_forms(base.forms.pres_3s, function(form) return form end)) if not skip_slot(base, "imp_2p") then -- Copy pres2p to imperative 2p minus -s since they are almost always the same. -- But not if there's an override, to avoid possibly throwing an error. insert_forms(base, "imp_2p", iut.map_forms(base.forms.pres_2p, function(form) if not form:find("s$") then error("Can't derive second-person plural imperative from second-person plural present indicative " .. "because form '" .. form .. "' doesn't end in -s") end return rsub(form, "s$", "") end)) end -- Copy subjunctives to imperatives, unless there's an override for the given slot (as with the imp_1p of [[ir]]). for _, persnum in ipairs({"3s", "1p", "3p"}) do local from = "pres_sub_" .. persnum local to = "imp_" .. persnum insert_forms(base, to, iut.map_forms(base.forms[from], function(form) return form end)) end end local function process_slot_overrides(base, filter_slot, reflexive_only) local overrides = reflexive_only and base.basic_reflexive_only_overrides or base.basic_overrides for slot, forms in pairs(overrides) do if not filter_slot or filter_slot(slot) then add3(base, slot, forms, "", nil, "allow overrides") end end end -- Prefix `form` with `clitic`, adding fixed text `between` between them. Add links as appropriate unless the user -- requested no links. Check whether form already has brackets (as will be the case if the form has a fixed clitic). local function prefix_clitic_to_form(base, clitic, between, form) if base.alternant_multiword_spec.args.noautolinkverb then return clitic .. between .. form else local clitic_pref = "[[" .. clitic .. "]]" .. between if form:find("%[%[") then return clitic_pref .. form else return clitic_pref .. "[[" .. form .. "]]" end end end -- Add the appropriate clitic pronouns in `clitics` to the forms in `base_slot`. `store_cliticized_form` is a function -- of three arguments (clitic, formobj, cliticized_form) and should store the cliticized form for the specified clitic -- and form object. local function suffix_clitic_to_forms(base, base_slot, clitics, store_cliticized_form) if not base.forms[base_slot] then -- This can happen, e.g. in only3s/only3sp/only3p verbs. return end local autolink = not base.alternant_multiword_spec.args.noautolinkverb for _, formobj in ipairs(base.forms[base_slot]) do for _, clitic in ipairs(clitics) do local cliticized_form if formobj.form:find(TEMP_MESOCLITIC_INSERTION_POINT) then -- mesoclisis in future and conditional local infinitive, suffix = rmatch(formobj.form, "^(.*)" .. TEMP_MESOCLITIC_INSERTION_POINT .. "(.*)$") if not infinitive then error("Internal error: Can't find mesoclitic insertion point in slot '" .. base_slot .. "', form '" .. formobj.form .. "'") end local full_form = infinitive .. suffix if autolink and not infinitive:find("%[%[") then infinitive = "[[" .. infinitive .. "]]" end cliticized_form = autolink and infinitive .. "-[[" .. clitic .. "]]-[[" .. full_form .. "|" .. suffix .. "]]" or infinitive .. "-" .. clitic .. "-" .. suffix else local clitic_suffix = autolink and "-[[" .. clitic .. "]]" or "-" .. clitic local form_needs_link = autolink and not formobj.form:find("%[%[") if base_slot:find("1p$") then -- Final -s disappears: esbaldávamos + nos -> esbaldávamo-nos, etc. cliticized_form = formobj.form:gsub("s$", "") if form_needs_link then cliticized_form = "[[" .. formobj.form .. "|" .. cliticized_form .. "]]" end else cliticized_form = formobj.form if form_needs_link then cliticized_form = "[[" .. cliticized_form .. "]]" end end cliticized_form = cliticized_form .. clitic_suffix end store_cliticized_form(clitic, formobj, cliticized_form) end end end -- Add a reflexive pronoun or fixed clitic (FIXME: not working), as appropriate to the base forms that were generated. -- `do_joined` means to do only the forms where the pronoun is joined to the end of the form; otherwise, do only the -- forms where it is not joined and precedes the form. local function add_reflexive_or_fixed_clitic_to_forms(base, do_reflexive, do_joined) for _, slotaccel in ipairs(base.alternant_multiword_spec.verb_slots_basic) do local slot, accel = unpack(slotaccel) local clitic if not do_reflexive then clitic = base.clitic elseif slot:find("[123]") then local persnum = slot:match("^.*_(.-)$") clitic = person_number_to_reflexive_pronoun[persnum] else clitic = "se" end if base.forms[slot] then if do_reflexive and slot:find("^pp_") or slot == "infinitive_linked" then -- do nothing with reflexive past participles or with infinitive linked (handled at the end) elseif slot:find("^neg_imp_") then error("Internal error: Should not have forms set for negative imperative at this stage") else local slot_has_suffixed_clitic = not slot:find("_sub") -- Maybe generate non-reflexive parts and separated syntactic variants for use in {{pt-verb form of}}. -- See comment in add_slots() above `need_special_verb_form_of_slots`. Check for do_joined so we only -- run this code once. if do_reflexive and do_joined and base.alternant_multiword_spec.source_template == "pt-verb form of" and -- Skip personal variants of infinitives and gerunds so we don't think [[esbaldando]] is a -- non-reflexive equivalent of [[esbaldando-me]]. not slot:find("infinitive_") and not slot:find("gerund_") then -- Clone the forms because we will be destructively modifying them just below, adding the reflexive -- pronoun. insert_forms(base, slot .. "_non_reflexive", mw.clone(base.forms[slot])) if slot_has_suffixed_clitic then insert_forms(base, slot .. "_variant", iut.map_forms(base.forms[slot], function(form) return prefix_clitic_to_form(base, clitic, " ... ", form) end)) end end if slot_has_suffixed_clitic then if do_joined then suffix_clitic_to_forms(base, slot, {clitic}, function(clitic, formobj, cliticized_form) formobj.form = cliticized_form end ) end elseif not do_joined then -- Add clitic as separate word before all other forms. for _, form in ipairs(base.forms[slot]) do form.form = prefix_clitic_to_form(base, clitic, " ", form.form) end end end end end end local function handle_infinitive_linked(base) -- Compute linked versions of potential lemma slots, for use in {{pt-verb}}. -- We substitute the original lemma (before removing links) for forms that -- are the same as the lemma, if the original lemma has links. for _, slot in ipairs({"infinitive"}) do insert_forms(base, slot .. "_linked", iut.map_forms(base.forms[slot], function(form) if form == base.lemma and rfind(base.linked_lemma, "%[%[") then return base.linked_lemma else return form end end)) end end local function generate_negative_imperatives(base) -- Copy subjunctives to negative imperatives, preceded by "não". for _, persnum in ipairs(neg_imp_person_number_list) do local from = "pres_sub_" .. persnum local to = "neg_imp_" .. persnum insert_forms(base, to, iut.map_forms(base.forms[from], function(form) if base.alternant_multiword_spec.args.noautolinkverb then return "não " .. form elseif form:find("%[%[") then -- already linked, e.g. when reflexive return "[[não]] " .. form else return "[[não]] [[" .. form .. "]]" end end)) end end -- Process specs given by the user using 'addnote[SLOTSPEC][FOOTNOTE][FOOTNOTE][...]'. local function process_addnote_specs(base) for _, spec in ipairs(base.addnote_specs) do for _, slot_spec in ipairs(spec.slot_specs) do slot_spec = "^" .. slot_spec .. "$" for slot, forms in pairs(base.forms) do if rfind(slot, slot_spec) then -- To save on memory, side-effect the existing forms. for _, form in ipairs(forms) do form.footnotes = iut.combine_footnotes(form.footnotes, spec.footnotes) end end end end end end local function add_missing_links_to_forms(base) -- Any forms without links should get them now. Redundant ones will be stripped later. for slot, forms in pairs(base.forms) do for _, form in ipairs(forms) do if not form.form:find("%[%[") then form.form = "[[" .. form.form .. "]]" end end end end -- Remove special characters added to future and conditional forms to indicate mesoclitic insertion points. local function remove_mesoclitic_insertion_points(base) for slot, forms in pairs(base.forms) do if slot:find("^fut_") or slot:find("^cond_") then for _, form in ipairs(forms) do form.form = form.form:gsub(TEMP_MESOCLITIC_INSERTION_POINT, "") end end end end -- If called from {{pt-verb}}, remove superseded forms; otherwise add a footnote indicating they are superseded. local function process_superseded_forms(base) if base.alternant_multiword_spec.source_template == "pt-verb" then for slot, forms in pairs(base.forms) do -- As an optimization, check if there are any superseded forms and don't do anything if not. local saw_superseded = false for _, form in ipairs(forms) do if form.form:find(VAR_SUPERSEDED) then saw_superseded = true break end end if saw_superseded then base.forms[slot] = iut.flatmap_forms(base.forms[slot], function(form) if form:find(VAR_SUPERSEDED) then return {} else return {form} end end) end end else for slot, forms in pairs(base.forms) do for _, form in ipairs(forms) do if form.form:find(VAR_SUPERSEDED) then form.footnotes = iut.combine_footnotes(form.footnotes, {"[superseded]"}) end end end end end local function conjugate_verb(base) for _, vowel_alt in ipairs(base.vowel_alt_stems) do construct_stems(base, vowel_alt) add_present_indic(base) add_present_subj(base) end add_finite_non_present(base) add_non_finite_forms(base) -- do non-reflexive non-imperative slot overrides process_slot_overrides(base, function(slot) return not slot:find("^imp_") and not slot:find("^neg_imp_") end) -- This should happen after process_slot_overrides() in case a derived slot is based on an override -- (as with the imp_3s of [[dar]], [[estar]]). copy_forms_to_imperatives(base) -- do non-reflexive positive imperative slot overrides process_slot_overrides(base, function(slot) return slot:find("^imp_") end) -- We need to add joined reflexives, then joined and non-joined clitics, then non-joined reflexives, so we get -- [[esbalda-te]] but [[não]] [[te]] [[esbalde]]. if base.refl then -- This should happen after remove_monosyllabic_accents() so the * marking the preservation of monosyllabic -- accents doesn't end up in the middle of a word. add_reflexive_or_fixed_clitic_to_forms(base, "do reflexive", "do joined") process_slot_overrides(base, nil, "do reflexive") -- do reflexive-only slot overrides add_reflexive_or_fixed_clitic_to_forms(base, "do reflexive", false) end -- This should happen after add_reflexive_or_fixed_clitic_to_forms() so negative imperatives get the reflexive pronoun -- and clitic in them. generate_negative_imperatives(base) -- do non-reflexive negative imperative slot overrides -- FIXME: What about reflexive negative imperatives? process_slot_overrides(base, function(slot) return slot:find("^neg_imp_") end) -- This should happen before add_missing_links_to_forms() so that the comparison `form == base.lemma` -- in handle_infinitive_linked() works correctly and compares unlinked forms to unlinked forms. handle_infinitive_linked(base) process_addnote_specs(base) if not base.alternant_multiword_spec.args.noautolinkverb then add_missing_links_to_forms(base) end remove_mesoclitic_insertion_points(base) process_superseded_forms(base) end local function parse_indicator_spec(angle_bracket_spec) -- Store the original angle bracket spec so we can reconstruct the overall conj spec with the lemma(s) in them. local base = { angle_bracket_spec = angle_bracket_spec, user_basic_overrides = {}, user_stems = {}, addnote_specs = {}, } local function parse_err(msg) error(msg .. ": " .. angle_bracket_spec) end local function fetch_footnotes(separated_group) local footnotes for j = 2, #separated_group - 1, 2 do if separated_group[j + 1] ~= "" then parse_err("Extraneous text after bracketed footnotes: '" .. table.concat(separated_group) .. "'") end if not footnotes then footnotes = {} end table.insert(footnotes, separated_group[j]) end return footnotes end local inside = angle_bracket_spec:match("^<(.*)>$") assert(inside) if inside == "" then return base end local segments = put.parse_balanced_segment_run(inside, "[", "]") local dot_separated_groups = put.split_alternating_runs(segments, "%.") for i, dot_separated_group in ipairs(dot_separated_groups) do local first_element = dot_separated_group[1] if first_element == "addnote" then local spec_and_footnotes = fetch_footnotes(dot_separated_group) if #spec_and_footnotes < 2 then parse_err("Spec with 'addnote' should be of the form 'addnote[SLOTSPEC][FOOTNOTE][FOOTNOTE][...]'") end local slot_spec = table.remove(spec_and_footnotes, 1) local slot_spec_inside = rmatch(slot_spec, "^%[(.*)%]$") if not slot_spec_inside then parse_err("Internal error: slot_spec " .. slot_spec .. " should be surrounded with brackets") end local slot_specs = rsplit(slot_spec_inside, ",") -- FIXME: Here, [[Module:it-verb]] called strip_spaces(). Generally we don't do this. Should we? table.insert(base.addnote_specs, {slot_specs = slot_specs, footnotes = spec_and_footnotes}) elseif indicator_flags[first_element] then if #dot_separated_group > 1 then parse_err("No footnotes allowed with '" .. first_element .. "' spec") end if base[first_element] then parse_err("Spec '" .. first_element .. "' specified twice") end base[first_element] = true elseif rfind(first_element, ":") then local colon_separated_groups = put.split_alternating_runs(dot_separated_group, "%s*:%s*") local first_element = colon_separated_groups[1][1] if #colon_separated_groups[1] > 1 then parse_err("Can't attach footnotes directly to '" .. first_element .. "' spec; attach them to the " .. "colon-separated values following the initial colon") end if overridable_stems[first_element] then if base.user_stems[first_element] then parse_err("Overridable stem '" .. first_element .. "' specified twice") end table.remove(colon_separated_groups, 1) base.user_stems[first_element] = overridable_stems[first_element](colon_separated_groups, {prefix = first_element, base = base, parse_err = parse_err, fetch_footnotes = fetch_footnotes}) else -- assume a basic override; we validate further later when the possible slots are available if base.user_basic_overrides[first_element] then parse_err("Basic override '" .. first_element .. "' specified twice") end table.remove(colon_separated_groups, 1) base.user_basic_overrides[first_element] = allow_multiple_values(colon_separated_groups, {prefix = first_element, base = base, parse_err = parse_err, fetch_footnotes = fetch_footnotes}) end else local comma_separated_groups = put.split_alternating_runs(dot_separated_group, "%s*,%s*") for j = 1, #comma_separated_groups do local alt = comma_separated_groups[j][1] if not vowel_alternants[alt] then if #comma_separated_groups == 1 then parse_err("Unrecognized spec or vowel alternant '" .. alt .. "'") else parse_err("Unrecognized vowel alternant '" .. alt .. "'") end end if base.vowel_alt then for _, existing_alt in ipairs(base.vowel_alt) do if existing_alt.form == alt then parse_err("Vowel alternant '" .. alt .. "' specified twice") end end else base.vowel_alt = {} end table.insert(base.vowel_alt, {form = alt, footnotes = fetch_footnotes(comma_separated_groups[j])}) end end end return base end -- Normalize all lemmas, substituting the pagename for blank lemmas and adding links to multiword lemmas. local function normalize_all_lemmas(alternant_multiword_spec, head) -- (1) Add links to all before and after text. Remember the original text so we can reconstruct the verb spec later. if not alternant_multiword_spec.args.noautolinktext then iut.add_links_to_before_and_after_text(alternant_multiword_spec, "remember original") end -- (2) Remove any links from the lemma, but remember the original form -- so we can use it below in the 'lemma_linked' form. iut.map_word_specs(alternant_multiword_spec, function(base) if base.lemma == "" then base.lemma = head end base.user_specified_lemma = base.lemma base.lemma = m_links.remove_links(base.lemma) local refl_verb = base.lemma local verb, refl = rmatch(refl_verb, "^(.-)%-(se)$") if not verb then verb, refl = refl_verb, nil end base.user_specified_verb = verb base.refl = refl base.verb = base.user_specified_verb local linked_lemma if alternant_multiword_spec.args.noautolinkverb or base.user_specified_lemma:find("%[%[") then linked_lemma = base.user_specified_lemma elseif base.refl then -- Reconstruct the linked lemma with separate links around base verb and reflexive pronoun. linked_lemma = base.user_specified_verb == base.verb and "[[" .. base.user_specified_verb .. "]]" or "[[" .. base.verb .. "|" .. base.user_specified_verb .. "]]" linked_lemma = linked_lemma .. (refl and "-[[" .. refl .. "]]" or "") else -- Add links to the lemma so the user doesn't specifically need to, since we preserve -- links in multiword lemmas and include links in non-lemma forms rather than allowing -- the entire form to be a link. linked_lemma = iut.add_links(base.user_specified_lemma) end base.linked_lemma = linked_lemma end) end local function detect_indicator_spec(base) if (base.only3s and 1 or 0) + (base.only3sp and 1 or 0) + (base.only3p and 1 or 0) > 1 then error("Only one of 'only3s', 'only3sp' and 'only3p' can be specified") end base.forms = {} base.stems = {} base.basic_overrides = {} base.basic_reflexive_only_overrides = {} if not base.no_built_in then for _, built_in_conj in ipairs(built_in_conjugations) do if type(built_in_conj.match) == "function" then base.prefix, base.non_prefixed_verb = built_in_conj.match(base.verb) elseif built_in_conj.match:find("^%^") and rsub(built_in_conj.match, "^%^", "") == base.verb then -- begins with ^, for exact match, and matches base.prefix, base.non_prefixed_verb = "", base.verb else base.prefix, base.non_prefixed_verb = rmatch(base.verb, "^(.*)(" .. built_in_conj.match .. ")$") end if base.prefix then -- we found a built-in verb for stem, forms in pairs(built_in_conj.forms) do if type(forms) == "function" then forms = forms(base, base.prefix) end if stem:find("^refl_") then stem = stem:gsub("^refl_", "") if not base.alternant_multiword_spec.verb_slots_basic_map[stem] then error("Internal error: setting for 'refl_" .. stem .. "' does not refer to a basic verb slot") end base.basic_reflexive_only_overrides[stem] = forms elseif base.alternant_multiword_spec.verb_slots_basic_map[stem] then -- an individual form override of a basic form base.basic_overrides[stem] = forms else base.stems[stem] = forms end end break end end end -- Override built-in-verb stems and overrides with user-specified ones. for stem, values in pairs(base.user_stems) do base.stems[stem] = values end for override, values in pairs(base.user_basic_overrides) do if not base.alternant_multiword_spec.verb_slots_basic_map[override] then error("Unrecognized override '" .. override .. "': " .. base.angle_bracket_spec) end base.basic_overrides[override] = values end base.prefix = base.prefix or "" base.non_prefixed_verb = base.non_prefixed_verb or base.verb local inf_stem, suffix = rmatch(base.non_prefixed_verb, "^(.*)([aeioô]r)$") if not inf_stem then error("Unrecognized infinitive: " .. base.verb) end base.inf_stem = inf_stem suffix = suffix == "ôr" and "or" or suffix base.conj = suffix base.conj_vowel = suffix == "ar" and "á" or suffix == "ir" and "í" or "ê" base.frontback = suffix == "ar" and "back" or "front" if base.stems.vowel_alt then -- built-in verb with specified vowel alternation if base.vowel_alt then error(base.verb .. " is a recognized built-in verb, and should not have vowel alternations specified with it") end base.vowel_alt = iut.convert_to_general_list_form(base.stems.vowel_alt) end -- Propagate built-in-verb indicator flags to `base` and combine with user-specified flags. for indicator_flag, _ in pairs(indicator_flags) do base[indicator_flag] = base[indicator_flag] or base.stems[indicator_flag] end -- Convert vowel alternation indicators into stems. local vowel_alt = base.vowel_alt or {{form = "+"}} base.vowel_alt_stems = apply_vowel_alternations(base.inf_stem, vowel_alt) for _, vowel_alt_stems in ipairs(base.vowel_alt_stems) do if vowel_alt_stems.err then error("To use '" .. vowel_alt_stems.altobj.form .. "', present stem '" .. base.prefix .. base.inf_stem .. "' " .. vowel_alt_stems.err) end end end local function detect_all_indicator_specs(alternant_multiword_spec) -- Propagate some settings up; some are used internally, others by [[Module:pt-headword]]. iut.map_word_specs(alternant_multiword_spec, function(base) -- Internal indicator flags. Do these before calling detect_indicator_spec() because add_slots() uses them. for _, prop in ipairs { "refl", "clitic" } do if base[prop] then alternant_multiword_spec[prop] = true end end base.alternant_multiword_spec = alternant_multiword_spec end) add_slots(alternant_multiword_spec) alternant_multiword_spec.vowel_alt = {} iut.map_word_specs(alternant_multiword_spec, function(base) detect_indicator_spec(base) -- User-specified indicator flags. Do these after calling detect_indicator_spec() because the latter may set these -- indicators for built-in verbs. for prop, _ in pairs(indicator_flags) do if base[prop] then alternant_multiword_spec[prop] = true end end -- Vowel alternants. Do these after calling detect_indicator_spec() because the latter sets base.vowel_alt for -- built-in verbs. if base.vowel_alt then for _, altobj in ipairs(base.vowel_alt) do m_table.insertIfNot(alternant_multiword_spec.vowel_alt, altobj.form) end end end) end local function add_categories_and_annotation(alternant_multiword_spec, base, multiword_lemma) local function insert_ann(anntype, value) m_table.insertIfNot(alternant_multiword_spec.annotation[anntype], value) end local function insert_cat(cat, also_when_multiword) -- Don't place multiword terms in categories like 'Portuguese verbs ending in -ar' to avoid spamming the -- categories with such terms. if also_when_multiword or not multiword_lemma then -- m_table.insertIfNot(alternant_multiword_spec.categories, "Portuguese " .. cat) end end if check_for_red_links and alternant_multiword_spec.source_template == "pt-conj" and multiword_lemma then for _, slot_and_accel in ipairs(alternant_multiword_spec.all_verb_slots) do local slot = slot_and_accel[1] local forms = base.forms[slot] local must_break = false if forms then for _, form in ipairs(forms) do if not form.form:find("%[%[") then local title = mw.title.new(form.form) if title and not title.exists then -- insert_cat("verbs with red links in their inflection tables") must_break = true break end end end end if must_break then break end end end -- insert_cat("verbs ending in -" .. base.conj) if base.irreg then insert_ann("irreg", "irregular") -- insert_cat("irregular verbs") else insert_ann("irreg", "regular") end if base.only3s then insert_ann("defective", "impersonal") -- insert_cat("impersonal verbs") elseif base.only3sp then insert_ann("defective", "third-person only") -- insert_cat("third-person-only verbs") elseif base.only3p then insert_ann("defective", "third-person plural only") -- insert_cat("third-person-plural-only verbs") elseif base.no_pres_stressed or base.no_pres1_and_sub then insert_ann("defective", "defective") -- insert_cat("defective verbs") else insert_ann("defective", "regular") end if base.stems.short_pp then insert_ann("short_pp", "irregular short past participle") -- insert_cat("verbs with irregular short past participle") else insert_ann("short_pp", "regular") end if base.clitic then -- insert_cat("verbs with lexical clitics") end if base.refl then -- insert_cat("reflexive verbs") end if base.e_ei_cat then insert_ann("vowel_alt", "''e'' becomes ''ei'' when stressed") insert_cat("verbs with e becoming ei when stressed") elseif not base.vowel_alt then insert_ann("vowel_alt", "non-alternating") else for _, alt in ipairs(base.vowel_alt) do if alt.form == "+" then insert_ann("vowel_alt", "non-alternating") else insert_ann("vowel_alt", vowel_alternant_to_desc[alt.form]) insert_cat("verbs with " .. vowel_alternant_to_cat[alt.form]) end end end local cons_alt = base.stems.cons_alt if cons_alt == nil then if base.conj == "ar" then if base.inf_stem:find("ç$") then cons_alt = "c-ç" elseif base.inf_stem:find("c$") then cons_alt = "c-qu" elseif base.inf_stem:find("g$") then cons_alt = "g-gu" end else if base.no_pres_stressed or base.no_pres1_and_sub then cons_alt = nil -- no e.g. c-ç alternation in this case elseif base.inf_stem:find("c$") then cons_alt = "c-ç" elseif base.inf_stem:find("qu$") then cons_alt = "c-qu" elseif base.inf_stem:find("g$") then cons_alt = "g-j" elseif base.inf_stem:find("gu$") then cons_alt = "g-gu" end end end if cons_alt then local desc = cons_alt .. " alternation" insert_ann("cons_alt", desc) insert_cat("verbs with " .. desc) else insert_ann("cons_alt", "non-alternating") end end -- Compute the categories to add the verb to, as well as the annotation to display in the -- conjugation title bar. We combine the code to do these functions as both categories and -- title bar contain similar information. local function compute_categories_and_annotation(alternant_multiword_spec) alternant_multiword_spec.categories = {} local ann = {} alternant_multiword_spec.annotation = ann ann.irreg = {} ann.short_pp = {} ann.defective = {} ann.vowel_alt = {} ann.cons_alt = {} local multiword_lemma = false for _, form in ipairs(alternant_multiword_spec.forms.infinitive) do if form.form:find(" ") then multiword_lemma = true break end end iut.map_word_specs(alternant_multiword_spec, function(base) add_categories_and_annotation(alternant_multiword_spec, base, multiword_lemma) end) local ann_parts = {} local irreg = table.concat(ann.irreg, " or ") if irreg ~= "" and irreg ~= "regular" then table.insert(ann_parts, irreg) end local short_pp = table.concat(ann.short_pp, " or ") if short_pp ~= "" and short_pp ~= "regular" then table.insert(ann_parts, short_pp) end local defective = table.concat(ann.defective, " or ") if defective ~= "" and defective ~= "regular" then table.insert(ann_parts, defective) end local vowel_alt = table.concat(ann.vowel_alt, " or ") if vowel_alt ~= "" and vowel_alt ~= "non-alternating" then table.insert(ann_parts, vowel_alt) end local cons_alt = table.concat(ann.cons_alt, " or ") if cons_alt ~= "" and cons_alt ~= "non-alternating" then table.insert(ann_parts, cons_alt) end alternant_multiword_spec.annotation = table.concat(ann_parts, "; ") end local function show_forms(alternant_multiword_spec) local lemmas = alternant_multiword_spec.forms.infinitive alternant_multiword_spec.lemmas = lemmas -- save for later use in make_table() if alternant_multiword_spec.forms.short_pp_ms then alternant_multiword_spec.has_short_pp = true end local reconstructed_verb_spec = iut.reconstruct_original_spec(alternant_multiword_spec) local function transform_accel_obj(slot, formobj, accel_obj) -- No accelerators for negative imperatives, which are always multiword and derived directly from the -- present subjunctive. if slot:find("^neg_imp") then return nil end if accel_obj then if slot:find("^pp_") then accel_obj.form = slot elseif slot == "gerund" then accel_obj.form = "gerund-" .. reconstructed_verb_spec else accel_obj.form = "verb-form-" .. reconstructed_verb_spec end end return accel_obj end -- Italicize superseded forms. local function generate_link(data) local formval_for_link = data.form.formval_for_link if formval_for_link:find(VAR_SUPERSEDED) then formval_for_link = formval_for_link:gsub(VAR_SUPERSEDED, "") return m_links.full_link({lang = lang, term = formval_for_link, tr = "-", accel = data.form.accel_obj}, "term") .. iut.get_footnote_text(data.form.footnotes, data.footnote_obj) end end local props = { lang = lang, lemmas = lemmas, transform_accel_obj = transform_accel_obj, canonicalize = function(form) return export.remove_variant_codes(form, "keep superseded") end, generate_link = generate_link, slot_list = alternant_multiword_spec.verb_slots_basic, } iut.show_forms(alternant_multiword_spec.forms, props) alternant_multiword_spec.footnote_basic = alternant_multiword_spec.forms.footnote end local notes_template = [=[ <div class="roa-footnote-outer-div" style="width:100%;"> <div class="roa-footnote-inner-div"> {footnote} </div></div> ]=] local basic_table = [=[ {description}<div class="NavFrame"> <div class="NavHead" align="center">&nbsp; &nbsp; သမ္ဗန္ဓဆေၚ်စပ်ကဵု {title} (ဗဵုရံၚ် [[အဆက်လက္ကရဴ:ကြိယာပဝ်တူဂြဳဂမၠိုၚ်]])</div> <div class="NavContent" align="left"> {\op}| class="roa-inflection-table" data-toggle-category="inflection" |- ! class="roa-person-number-header" rowspan="2" | ! class="roa-person-number-header" colspan="3" | ကိုန်ဨကဝုစ် ! class="roa-person-number-header" colspan="3" | ကိုန်ဗဟုဝစ် |- ! class="roa-person-number-header" style="width:12.5%" | ပူဂဵု-ပထမ<br />(<<eu>>) ! class="roa-person-number-header" style="width:12.5%" | ပူဂဵု-ဒုတိယ<br />(<<tu>>) ! class="roa-person-number-header" style="width:12.5%" | ပူဂဵု-တတိယ<br />(<<ele>> / <<ela>> / <<você>>) ! class="roa-person-number-header" style="width:12.5%" | ပူဂဵု-ပထမ<br />(<<nós>>) ! class="roa-person-number-header" style="width:12.5%" | ပူဂဵု-ဒုတိယ<br />(<<vós>>) ! class="roa-person-number-header" style="width:12.5%" | ပူဂဵု-တတိယ<br />(<<eles>> / <<elas>> / <<vocês>>) |- ! class="roa-nonfinite-header" colspan="7" | ''<span title="infinitivo">ကြိယာဟွံကၠောံ</span>'' |- ! class="roa-nonfinite-header" | '''<span title="infinitivo impessoal">ဆေၚ်စပ်ကဵုပူဂဵုဟွံသေၚ်</span>''' | colspan="6" | {infinitive} |- ! class="roa-nonfinite-header" | '''<span title="infinitivo pessoal">ဆေၚ်စပ်ကဵုပူဂဵု</span>''' | {pers_inf_1s} | {pers_inf_2s} | {pers_inf_3s} | {pers_inf_1p} | {pers_inf_2p} | {pers_inf_3p} |- ! class="roa-nonfinite-header" colspan="7" | ''<span title="gerúndio">ကြိယာစၞးနာမ်</span>'' |- | class="roa-nonfinite-header" | | colspan="6" | {gerund} |-{pp_clause} ! class="roa-indicative-left-rail" colspan="7" | ''<span title="indicativo">မစၞောန်ရန်</span>'' |- ! class="roa-indicative-left-rail" | <span title="presente">ပစ္စုပ္ပန်</span> | {pres_1s} | {pres_2s} | {pres_3s} | {pres_1p} | {pres_2p} | {pres_3p} |- ! class="roa-indicative-left-rail" | <span title="pretérito imperfeito">ဟွံဍိုက်ပေၚ်</span> | {impf_1s} | {impf_2s} | {impf_3s} | {impf_1p} | {impf_2p} | {impf_3p} |- ! class="roa-indicative-left-rail" | <span title="pretérito perfeito">အတိက်တမၠာတေံ</span> | {pret_1s} | {pret_2s} | {pret_3s} | {pret_1p} | {pret_2p} | {pret_3p} |- ! class="roa-indicative-left-rail" | <span title="pretérito mais-que-perfeito simples">ဗီုပြၚ်မဍိုက်ပေၚ်</span> | {plup_1s} | {plup_2s} | {plup_3s} | {plup_1p} | {plup_2p} | {plup_3p} |- ! class="roa-indicative-left-rail" | <span title="futuro do presente">အနာဂတ်</span> | {fut_1s} | {fut_2s} | {fut_3s} | {fut_1p} | {fut_2p} | {fut_3p} |- ! class="roa-indicative-left-rail" | <span title="condicional / futuro do pretérito">တၚ်မကၞာတ်လဝ်စေဝ်ပၞောန်</span> | {cond_1s} | {cond_2s} | {cond_3s} | {cond_1p} | {cond_2p} | {cond_3p} |- ! class="roa-subjunctive-left-rail" colspan="7" | ''<span title="conjuntivo (pt) / subjuntivo (br)">အရေဝ်နိဒါန်</span>'' |- ! class="roa-subjunctive-left-rail" | <span title=" presente do conjuntivo (pt) / subjuntivo (br)">ပစ္စုပ္ပန်</span> | {pres_sub_1s} | {pres_sub_2s} | {pres_sub_3s} | {pres_sub_1p} | {pres_sub_2p} | {pres_sub_3p} |- ! class="roa-subjunctive-left-rail" | <span title="pretérito imperfeito do conjuntivo (pt) / subjuntivo (br)">ဟွံဍိုက်ပေၚ်</span> | {impf_sub_1s} | {impf_sub_2s} | {impf_sub_3s} | {impf_sub_1p} | {impf_sub_2p} | {impf_sub_3p} |- ! class="roa-subjunctive-left-rail" | <span title="futuro do conjuntivo (pt) / subjuntivo (br)">အနာဂတ်</span> | {fut_sub_1s} | {fut_sub_2s} | {fut_sub_3s} | {fut_sub_1p} | {fut_sub_2p} | {fut_sub_3p} |- ! class="roa-imperative-left-rail" colspan="7" | ''<span title="imperativo">ပါဲဗလေတ်ဟွံဗၠး</span>'' |- ! class="roa-imperative-left-rail" | <span title="imperativo afirmativo">တၚ်ဂလာန်ဗိုန်ဗတ်</span> | rowspan="2" | | {imp_2s} | {imp_3s} | {imp_1p} | {imp_2p} | {imp_3p} |- ! class="roa-imperative-left-rail" | <span title="imperativo negativo">ကယျာန်ပါဲ</span> (<<não>>) | {neg_imp_2s} | {neg_imp_3s} | {neg_imp_1p} | {neg_imp_2p} | {neg_imp_3p} |{\cl}{notes_clause}</div></div>]=] local double_pp_template = [=[ ! class="roa-nonfinite-header" colspan="7" | ''<span title="particípio irregular">လုပ်ကၠောန်စွံလဝ်နကဵုအတိက်ဓမၠေံ</span>'' |- ! class="roa-nonfinite-header" | ပုလ္လိၚ် | colspan="3" | {short_pp_ms} | colspan="3" | {short_pp_mp} |- ! class="roa-nonfinite-header" | ဣတ္တိလိၚ် | colspan="3" | {short_pp_fs} | colspan="3" | {short_pp_fp} |- ! class="roa-nonfinite-header" colspan="7" | ''<span title="particípio regular">လုပ်ကၠောန်စွံလဝ်နကဵုအတိက်မဂၠိၚ်</span>'' |- ! class="roa-nonfinite-header" | ပုလ္လိၚ် | colspan="3" | {pp_ms} | colspan="3" | {pp_mp} |- ! class="roa-nonfinite-header" | ဣတ္တိလိၚ် | colspan="3" | {pp_fs} | colspan="3" | {pp_fp} |-]=] local single_pp_template = [=[ ! class="roa-nonfinite-header" colspan="7" | ''<span title="particípio passado">လုပ်ကၠောန်စွံလဝ်နကဵုအတိက်</span>'' |- ! class="roa-nonfinite-header" | ပုလ္လိၚ် | colspan="3" | {pp_ms} | colspan="3" | {pp_mp} |- ! class="roa-nonfinite-header" | ဣတ္တိလိၚ် | colspan="3" | {pp_fs} | colspan="3" | {pp_fp} |-]=] local function make_table(alternant_multiword_spec) local forms = alternant_multiword_spec.forms forms.title = link_term(alternant_multiword_spec.lemmas[1].form) if alternant_multiword_spec.annotation ~= "" then forms.title = forms.title .. " (" .. alternant_multiword_spec.annotation .. ")" end forms.description = "" -- Format the table. forms.footnote = alternant_multiword_spec.footnote_basic forms.notes_clause = forms.footnote ~= "" and format(notes_template, forms) or "" -- has_short_pp is computed in show_forms(). local pp_template = alternant_multiword_spec.has_short_pp and double_pp_template or single_pp_template forms.pp_clause = format(pp_template, forms) local table_with_pronouns = rsub(basic_table, "<<(.-)>>", link_term) return require("Module:TemplateStyles")("Module:roa-verb/style.css") .. format(table_with_pronouns, forms) end -- Externally callable function to parse and conjugate a verb given user-specified arguments. -- Return value is WORD_SPEC, an object where the conjugated forms are in `WORD_SPEC.forms` -- for each slot. If there are no values for a slot, the slot key will be missing. The value -- for a given slot is a list of objects {form=FORM, footnotes=FOOTNOTES}. function export.do_generate_forms(args, source_template, headword_head) local PAGENAME = mw.loadData("Module:headword/data").pagename local function in_template_space() return mw.title.getCurrentTitle().nsText == "ထာမ်ပလိက်" end -- Determine the verb spec we're being asked to generate the conjugation of. This may be taken from the -- current page title or the value of |pagename=; but not when called from {{pt-verb form of}}, where the -- page title is a non-lemma form. Note that the verb spec may omit the infinitive; e.g. it may be "<i-e>". -- For this reason, we use the value of `pagename` computed here down below, when calling normalize_all_lemmas(). local pagename = source_template ~= "pt-verb form of" and args.pagename or PAGENAME local head = headword_head or pagename local arg1 = args[1] if not arg1 then if (pagename == "pt-conj" or pagename == "pt-verb") and in_template_space() then arg1 = "cergir<i-e,i>" elseif pagename == "pt-verb form of" and in_template_space() then arg1 = "amar" else arg1 = "<>" end end -- When called from {{pt-verb form of}}, determine the non-lemma form whose inflections we're being asked to -- determine. This normally comes from the page title or the value of |pagename=. local verb_form_of_form if source_template == "pt-verb form of" then verb_form_of_form = args.pagename if not verb_form_of_form then if PAGENAME == "pt-verb form of" and in_template_space() then verb_form_of_form = "ame" else verb_form_of_form = PAGENAME end end end local incorporated_headword_head_into_lemma = false if arg1:find("^<.*>$") then -- missing lemma if head:find(" ") then -- If multiword lemma, try to add arg spec after the first word. -- Try to preserve the brackets in the part after the verb, but don't do it -- if there aren't the same number of left and right brackets in the verb -- (which means the verb was linked as part of a larger expression). local refl_clitic_verb, post = rmatch(head, "^(.-)( .*)$") local left_brackets = rsub(refl_clitic_verb, "[^%[]", "") local right_brackets = rsub(refl_clitic_verb, "[^%]]", "") if #left_brackets == #right_brackets then arg1 = iut.remove_redundant_links(refl_clitic_verb) .. arg1 .. post incorporated_headword_head_into_lemma = true else -- Try again using the form without links. local linkless_head = m_links.remove_links(head) if linkless_head:find(" ") then refl_clitic_verb, post = rmatch(linkless_head, "^(.-)( .*)$") arg1 = refl_clitic_verb .. arg1 .. post else error("Unable to incorporate <...> spec into explicit head due to a multiword linked verb or " .. "unbalanced brackets; please include <> explicitly: " .. arg1) end end else -- Will be incorporated through `head` below in the call to normalize_all_lemmas(). incorporated_headword_head_into_lemma = true end end local function split_bracketed_runs_into_words(bracketed_runs) return put.split_alternating_runs(bracketed_runs, " ", "preserve splitchar") end local parse_props = { parse_indicator_spec = parse_indicator_spec, -- Split words only on spaces, not on hyphens, because that messes up reflexive verb parsing. split_bracketed_runs_into_words = split_bracketed_runs_into_words, allow_default_indicator = true, allow_blank_lemma = true, } local alternant_multiword_spec = iut.parse_inflected_text(arg1, parse_props) alternant_multiword_spec.pos = pos or "ကြိယာ" alternant_multiword_spec.args = args alternant_multiword_spec.source_template = source_template alternant_multiword_spec.verb_form_of_form = verb_form_of_form alternant_multiword_spec.incorporated_headword_head_into_lemma = incorporated_headword_head_into_lemma normalize_all_lemmas(alternant_multiword_spec, head) detect_all_indicator_specs(alternant_multiword_spec) local inflect_props = { slot_list = alternant_multiword_spec.all_verb_slots, inflect_word_spec = conjugate_verb, get_variants = function(form) return rsub(form, not_var_code_c, "") end, -- We add links around the generated verbal forms rather than allow the entire multiword -- expression to be a link, so ensure that user-specified links get included as well. include_user_specified_links = true, } iut.inflect_multiword_or_alternant_multiword_spec(alternant_multiword_spec, inflect_props) -- Remove redundant brackets around entire forms. for slot, forms in pairs(alternant_multiword_spec.forms) do for _, form in ipairs(forms) do form.form = iut.remove_redundant_links(form.form) end end compute_categories_and_annotation(alternant_multiword_spec) if args.json and source_template == "pt-conj" then -- Remove variant codes to avoid causing problems with bots. for slot, forms in pairs(alternant_multiword_spec.forms) do for _, form in ipairs(forms) do form.form = export.remove_variant_codes(form.form) end end return require("Module:JSON").toJSON(alternant_multiword_spec.forms) end return alternant_multiword_spec end -- Entry point for {{pt-conj}}. Template-callable function to parse and conjugate a verb given -- user-specified arguments and generate a displayable table of the conjugated forms. function export.show(frame) local parent_args = frame:getParent().args local params = { [1] = {}, ["noautolinktext"] = {type = "boolean"}, ["noautolinkverb"] = {type = "boolean"}, ["pagename"] = {}, -- for testing/documentation pages ["json"] = {type = "boolean"}, -- for bot use } local args = require("Module:parameters").process(parent_args, params) local alternant_multiword_spec = export.do_generate_forms(args, "pt-conj") if type(alternant_multiword_spec) == "string" then -- JSON return value return alternant_multiword_spec end show_forms(alternant_multiword_spec) return make_table(alternant_multiword_spec) .. require("Module:utilities").format_categories(alternant_multiword_spec.categories, lang, nil, nil, force_cat) end return export n4y5mczqe0ux2wd9fkc3jgumt2wlhf4 ကညာၚ် 0 51077 397760 397729 2026-07-02T01:21:57Z 咽頭べさ 33 397760 wikitext text/x-wiki =={{=mnw=}}== ===ပွံၚ်နဲတၞဟ်=== {{der3|mnw|က္ညာၚ်}} ===ဗွဟ်ရမ္သာၚ်=== {{IPA|mnw|/kaɲaɪn/}} * {{audio|mnw|LL-Q13349 (mnw)-咽頭べさ-ကညာၚ်.wav}} ===နာမ်=== {{mnw-noun}} # ပရေၚ်မကရေဲကညာၚ်နကဵုရမျာၚ်ထတ်ထတ်၊ ပရေၚ်မဂဟတ်ထောံလဝ်နကဵုရမျာၚ်။ ===ကြိယာ=== {{mnw-verb}} # ကရေဲ၊ ဂတေဝ်၊ ကုဟ်၊ ဂဟတ်။ ====တြာဲ==== {{VN|my=[[အော်]]|en=[[shout]]|da=[[råbe]]|th=[[ตะโกน]]|km=[[ស្រែក]]}} [[ကဏ္ဍ:အေန်သတဳကျုတ်ဘာသာမန်]] 2c3y7p5gtemwrq8ps6kgkdwalv0k4sz ကဏ္ဍ:နာမဝိသေသနရခေၚ်ဂမၠိုၚ် 14 51111 397740 166210 2026-07-01T16:07:36Z 咽頭べさ 33 咽頭べさ ပြံင်ပဆုဲလဝ် မုက်လိက် [[ကဏ္ဍ:နာမဝိသေသန ရခေၚ်]] ဇရေင် [[ကဏ္ဍ:နာမဝိသေသနရခေၚ်ဂမၠိုၚ်]] သီုကဵု ဟွံဂွံ ဂိုင်စွံလဝ် မကလေင်ပညုင် 163193 wikitext text/x-wiki [[ကဏ္ဍ:ဘာသာရခေၚ်]] so59o4h3koox6g89rni3jkznp6ud87p ကဏ္ဍ:ကြိယာရခေၚ်ဂမၠိုၚ် 14 51114 397739 164637 2026-07-01T16:07:09Z 咽頭べさ 33 咽頭べさ ပြံင်ပဆုဲလဝ် မုက်လိက် [[ကဏ္ဍ:ကြိယာ ရခေၚ်]] ဇရေင် [[ကဏ္ဍ:ကြိယာရခေၚ်ဂမၠိုၚ်]] သီုကဵု ဟွံဂွံ ဂိုင်စွံလဝ် မကလေင်ပညုင် 162220 wikitext text/x-wiki [[ကဏ္ဍ:ဘာသာရခေၚ်]] so59o4h3koox6g89rni3jkznp6ud87p ကဏ္ဍ:ဝေါဟာပဝ်တူဂြဳကၠုၚ်နူဝေါဟာဘာသာဂျာမာန်နေတ်ဂမၠိုၚ် 14 53846 397772 171709 2026-07-02T11:54:32Z 咽頭べさ 33 咽頭べさ ပြံင်ပဆုဲလဝ် မုက်လိက် [[ကဏ္ဍ:ဝေါဟာပဝ်တူဂြဳကၠုၚ်နူဝေါဟာဂျာမာန်နေတ်ဂမၠိုၚ်]] ဇရေင် [[ကဏ္ဍ:ဝေါဟာပဝ်တူဂြဳကၠုၚ်နူဝေါဟာဘာသာဂျာမာန်နေတ်ဂမၠိုၚ်]] သီုကဵု ဟွံဂွံ ဂိုင်စွံလဝ် မကလေင်ပညုင် 70370 wikitext text/x-wiki [[Category:ဘာသာပဝ်တူဂြဳ]] okmd5ky208tq9ikfncppzh6bwx77ucw ကဏ္ဍ:ဝေါဟာကာတ်တလာန်မလွဳလဝ်ဗီုပြၚ်လ္ၚတ်ကေတ်နူဝေါဟာလပ်တေန်ဂမၠိုၚ် 14 58196 397773 383448 2026-07-02T11:55:27Z 咽頭べさ 33 咽頭べさ ပြံင်ပဆုဲလဝ် မုက်လိက် [[ကဏ္ဍ:ဝေါဟာကာတ်တလာန်လွဳလဝ်မဍိုက်ပေၚ်ကဵုလညာတ်ဆဵုဂဗနူဝေါဟာ လပ်တေန်ဂမၠိုၚ်]] ဇရေင် [[ကဏ္ဍ:ဝေါဟာကာတ်တလာန်မလွဳလဝ်ဗီုပြၚ်လ္ၚတ်ကေတ်နူဝေါဟာလပ်တေန်ဂမၠိုၚ်]] သီုကဵု ဟွံဂွံ ဂိုင်စွံလဝ် မကလေင်ပညုင် 383336 wikitext text/x-wiki [[ကဏ္ဍ:ဘာသာကာတ်တလာန်]] 8mpvf378vzzxe8n3797kr7p08acaky3 ထာမ်ပလိက်:ia-conj 10 296353 397733 2026-07-01T14:25:29Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "{{inflection-table-top|title=&nbsp; &nbsp; သမ္ဗန္ဓဆေၚ်စပ်ကဵု ''{{pagename}}''|palette=custom|tall=yes}} |- class="inflection-table-yellow" ! colspan="2" | ကြိယာဟွံကၠောံ | colspan="2" | '''{{pagename}}''' |- class="inflection-table-yellow" ! rowspan="2" colspan="2" | လုပ်ကၠောန်စွံလဝ် ! ပစ္စုပ္ပန် ! ဍို..." 397733 wikitext text/x-wiki {{inflection-table-top|title=&nbsp; &nbsp; သမ္ဗန္ဓဆေၚ်စပ်ကဵု ''{{pagename}}''|palette=custom|tall=yes}} |- class="inflection-table-yellow" ! colspan="2" | ကြိယာဟွံကၠောံ | colspan="2" | '''{{pagename}}''' |- class="inflection-table-yellow" ! rowspan="2" colspan="2" | လုပ်ကၠောန်စွံလဝ် ! ပစ္စုပ္ပန် ! ဍိုက်ပေၚ် |- class="inflection-table-blue" | {{l|ia|{{{1}}}{{#ifeq:{{{2|}}}|ar|ante|{{#ifeq:{{{2|}}}|er|ente|{{#ifeq:{{{2|}}}|ir|iente}}}}}}}}{{#if:{{{prespart2|}}}|&#44;&nbsp;{{l|ia|{{{prespart2|}}}}}}} | {{l|ia|{{{1}}}{{#ifeq:{{{2|}}}|ar|ate|{{#ifeq:{{{2|}}}|er|ite|{{#ifeq:{{{2|}}}|ir|ite}}}}}}}}{{#if:{{{perfpart2|}}}|&#44;&nbsp;{{l|ia|{{{perfpart2|}}}}}}} |- | class="separator" colspan="999" | |- class="inflection-table-blue" ! rowspan="6" | မစိုပ်တရဴ ! ! ဓမ္မတာ ! ဍိုက်ပေၚ် |- class="inflection-table-blue" ! ပစ္စုပ္ပန် | {{l|ia|{{{1}}}{{#ifeq:{{{2|}}}|ar|a|{{#ifeq:{{{2|}}}|er|e|{{#ifeq:{{{2|}}}|ir|i}}}}}}}}{{#if:{{{se|}}}|&nbsp;{{l|ia|se}}}}{{#if:{{{pres2|}}}|&#44;&nbsp;{{l|ia|{{{pres2|}}}}}{{#if:{{{se|}}}|&nbsp;{{l|ia|se}}}}}}{{#if:{{{pres3|}}}|&#44;&nbsp;{{l|ia|{{{pres3|}}}}}{{#if:{{{se|}}}|&nbsp;{{l|ia|se}}}}}} | {{l|ia|ha}} {{{1}}}{{#ifeq:{{{2|}}}|ar|ate|{{#ifeq:{{{2|}}}|er|ite|{{#ifeq:{{{2|}}}|ir|ite}}}}}}{{#if:{{{se|}}}|&nbsp;{{l|ia|se}}}} |- class="inflection-table-blue" ! အတိက် | {{l|ia|{{{1}}}{{#ifeq:{{{2|}}}|ar|ava|{{#ifeq:{{{2|}}}|er|eva|{{#ifeq:{{{2|}}}|ir|iva}}}}}}}}{{#if:{{{se|}}}|&nbsp;{{l|ia|se}}}}{{#if:{{{past2|}}}|&#44;&nbsp;{{l|ia|{{{past2|}}}}}{{#if:{{{se|}}}|&nbsp;{{l|ia|se}}}}}} | {{l|ia|habeva}} {{{1}}}{{#ifeq:{{{2|}}}|ar|ate|{{#ifeq:{{{2|}}}|er|ite|{{#ifeq:{{{2|}}}|ir|ite}}}}}}{{#if:{{{se|}}}|&nbsp;{{l|ia|se}}}} |- class="inflection-table-blue" ! အနာဂတ် | {{l|ia|{{{1}}}{{#ifeq:{{{2|}}}|ar|ara|{{#ifeq:{{{2|}}}|er|era|{{#ifeq:{{{2|}}}|ir|ira}}}}}}}}{{#if:{{{se|}}}|&nbsp;{{l|ia|se}}}}{{#if:{{{fut2|}}}|&#44;&nbsp;{{l|ia|{{{fut2|}}}}}{{#if:{{{se|}}}|&nbsp;{{l|ia|se}}}}}} | {{l|ia|habera}} {{{1}}}{{#ifeq:{{{2|}}}|ar|ate|{{#ifeq:{{{2|}}}|er|ite|{{#ifeq:{{{2|}}}|ir|ite}}}}}}{{#if:{{{se|}}}|&nbsp;{{l|ia|se}}}} |- class="inflection-table-blue" ! တၚ်မကၞာတ်လဝ်စေဝ်ပၞောန် | {{l|ia|{{{1}}}{{#ifeq:{{{2|}}}|ar|area|{{#ifeq:{{{2|}}}|er|erea|{{#ifeq:{{{2|}}}|ir|irea}}}}}}}}{{#if:{{{se|}}}|&nbsp;{{l|ia|se}}}}{{#if:{{{cond2|}}}|&#44;&nbsp;{{l|ia|{{{cond2|}}}}}{{#if:{{{se|}}}|&nbsp;{{l|ia|se}}}}}} | {{l|ia|haberea}} {{{1}}}{{#ifeq:{{{2|}}}|ar|ate|{{#ifeq:{{{2|}}}|er|ite|{{#ifeq:{{{2|}}}|ir|ite}}}}}}{{#if:{{{se|}}}|&nbsp;{{l|ia|se}}}} |- class="inflection-table-blue" ! ပါဲဗလေတ်ဟွံဗၠး | {{l|ia|{{{1}}}{{#ifeq:{{{2|}}}|ar|a|{{#ifeq:{{{2|}}}|er|e|{{#ifeq:{{{2|}}}|ir|i}}}}}}}}{{#if:{{{se|}}}|&nbsp;{{l|ia|se}}}}{{#if:{{{imp2|}}}|&#44;&nbsp;{{l|ia|{{{imp2|}}}}}{{#if:{{{se|}}}|&nbsp;{{l|ia|se}}}}}} | &mdash; |- | class="separator" colspan="999" | |- class="inflection-table-green" {{#if:{{{intr|}}}{{{se|}}}||! rowspan="6" {{!}} passive}} {{#if:{{{intr|}}}{{{se|}}}||! {{!}} }} {{#if:{{{intr|}}}{{{se|}}}||! {{!}} ဓမ္မတာ}} {{#if:{{{intr|}}}{{{se|}}}||! {{!}} ဍိုက်ပေၚ်}} |- class="inflection-table-green" {{#if:{{{intr|}}}{{{se|}}}||! {{!}} ပစ္စုပ္ပန်}} {{#if:{{{intr|}}}{{{se|}}}||{{! }} {{!}} {{l|ia|es}} {{{1}}}{{#ifeq:{{{2|}}}|ar|ate|{{#ifeq:{{{2|}}}|er|ite|{{#ifeq:{{{2|}}}|ir|ite}}}}}}{{#if:{{{se|}}}|&nbsp;{{l|ia|se}}}}}} {{#if:{{{intr|}}}{{{se|}}}||{{! }} {{!}} {{l|ia|ha}} {{l|ia|essite}} {{{1}}}{{#ifeq:{{{2|}}}|ar|ate|{{#ifeq:{{{2|}}}|er|ite|{{#ifeq:{{{2|}}}|ir|ite}}}}}}{{#if:{{{se|}}}|&nbsp;{{l|ia|se}}}}}} |- class="inflection-table-green" {{#if:{{{intr|}}}{{{se|}}}||! {{!}} အတိက်}} {{#if:{{{intr|}}}{{{se|}}}||{{! }} {{l|ia|esseva}} {{{1}}}{{#ifeq:{{{2|}}}|ar|ate|{{#ifeq:{{{2|}}}|er|ite|{{#ifeq:{{{2|}}}|ir|ite}}}}}}{{#if:{{{se|}}}|&nbsp;{{l|ia|se}}}}}} {{#if:{{{intr|}}}{{{se|}}}||{{! }} {{l|ia|habeva}} {{l|ia|essite}} {{{1}}}{{#ifeq:{{{2|}}}|ar|ate|{{#ifeq:{{{2|}}}|er|ite|{{#ifeq:{{{2|}}}|ir|ite}}}}}}{{#if:{{{se|}}}|&nbsp;{{l|ia|se}}}}}} |- class="inflection-table-green" {{#if:{{{intr|}}}{{{se|}}}||! {{!}} အနာဂတ်}} {{#if:{{{intr|}}}{{{se|}}}||{{! }} {{l|ia|essera}} {{{1}}}{{#ifeq:{{{2|}}}|ar|ate|{{#ifeq:{{{2|}}}|er|ite|{{#ifeq:{{{2|}}}|ir|ite}}}}}}{{#if:{{{se|}}}|&nbsp;{{l|ia|se}}}}}} {{#if:{{{intr|}}}{{{se|}}}||{{! }} {{l|ia|habera}} {{l|ia|essite}} {{{1}}}{{#ifeq:{{{2|}}}|ar|ate|{{#ifeq:{{{2|}}}|er|ite|{{#ifeq:{{{2|}}}|ir|ite}}}}}}{{#if:{{{se|}}}|&nbsp;{{l|ia|se}}}}}} |- class="inflection-table-green" {{#if:{{{intr|}}}{{{se|}}}||! {{!}} တၚ်မကၞာတ်လဝ်စေဝ်ပၞောန်}} {{#if:{{{intr|}}}{{{se|}}}||{{! }} {{l|ia|esserea}} {{{1}}}{{#ifeq:{{{2|}}}|ar|ate|{{#ifeq:{{{2|}}}|er|ite|{{#ifeq:{{{2|}}}|ir|ite}}}}}}{{#if:{{{se|}}}|&nbsp;{{l|ia|se}}}}}} {{#if:{{{intr|}}}{{{se|}}}||{{! }} {{l|ia|haberea}} {{l|ia|essite}} {{{1}}}{{#ifeq:{{{2|}}}|ar|ate|{{#ifeq:{{{2|}}}|er|ite|{{#ifeq:{{{2|}}}|ir|ite}}}}}}{{#if:{{{se|}}}|&nbsp;{{l|ia|se}}}}}} |- class="inflection-table-green" {{#if:{{{intr|}}}{{{se|}}}||! {{!}} ပါဲဗလေတ်ဟွံဗၠး}} {{#if:{{{intr|}}}{{{se|}}}||{{! }} {{l|ia|sia}} {{{1}}}{{#ifeq:{{{2|}}}|ar|ate|{{#ifeq:{{{2|}}}|er|ite|{{#ifeq:{{{2|}}}|ir|ite}}}}}}{{#if:{{{se|}}}|&nbsp;{{l|ia|se}}}}}} {{#if:{{{intr|}}}{{{se|}}}||{{! }} &mdash;}} {{inflection-table-bottom}}<noinclude>{{documentation}}</noinclude> bpktgqj55ht90o2z08w5abpihsoc52y 397734 397733 2026-07-01T14:27:21Z 咽頭べさ 33 397734 wikitext text/x-wiki {{inflection-table-top|title=&nbsp; &nbsp; သမ္ဗန္ဓဆေၚ်စပ်ကဵု ''{{pagename}}''|palette=custom|tall=yes}} |- class="inflection-table-yellow" ! colspan="2" | ကြိယာဟွံကၠောံ | colspan="2" | '''{{pagename}}''' |- class="inflection-table-yellow" ! rowspan="2" colspan="2" | လုပ်ကၠောန်စွံလဝ် ! ပစ္စုပ္ပန် ! ဍိုက်ပေၚ် |- class="inflection-table-blue" | {{l|ia|{{{1}}}{{#ifeq:{{{2|}}}|ar|ante|{{#ifeq:{{{2|}}}|er|ente|{{#ifeq:{{{2|}}}|ir|iente}}}}}}}}{{#if:{{{prespart2|}}}|&#44;&nbsp;{{l|ia|{{{prespart2|}}}}}}} | {{l|ia|{{{1}}}{{#ifeq:{{{2|}}}|ar|ate|{{#ifeq:{{{2|}}}|er|ite|{{#ifeq:{{{2|}}}|ir|ite}}}}}}}}{{#if:{{{perfpart2|}}}|&#44;&nbsp;{{l|ia|{{{perfpart2|}}}}}}} |- | class="separator" colspan="999" | |- class="inflection-table-blue" ! rowspan="6" | မစိုပ်တရဴ ! ! ဓမ္မတာ ! ဍိုက်ပေၚ် |- class="inflection-table-blue" ! ပစ္စုပ္ပန် | {{l|ia|{{{1}}}{{#ifeq:{{{2|}}}|ar|a|{{#ifeq:{{{2|}}}|er|e|{{#ifeq:{{{2|}}}|ir|i}}}}}}}}{{#if:{{{se|}}}|&nbsp;{{l|ia|se}}}}{{#if:{{{pres2|}}}|&#44;&nbsp;{{l|ia|{{{pres2|}}}}}{{#if:{{{se|}}}|&nbsp;{{l|ia|se}}}}}}{{#if:{{{pres3|}}}|&#44;&nbsp;{{l|ia|{{{pres3|}}}}}{{#if:{{{se|}}}|&nbsp;{{l|ia|se}}}}}} | {{l|ia|ha}} {{{1}}}{{#ifeq:{{{2|}}}|ar|ate|{{#ifeq:{{{2|}}}|er|ite|{{#ifeq:{{{2|}}}|ir|ite}}}}}}{{#if:{{{se|}}}|&nbsp;{{l|ia|se}}}} |- class="inflection-table-blue" ! အတိက် | {{l|ia|{{{1}}}{{#ifeq:{{{2|}}}|ar|ava|{{#ifeq:{{{2|}}}|er|eva|{{#ifeq:{{{2|}}}|ir|iva}}}}}}}}{{#if:{{{se|}}}|&nbsp;{{l|ia|se}}}}{{#if:{{{past2|}}}|&#44;&nbsp;{{l|ia|{{{past2|}}}}}{{#if:{{{se|}}}|&nbsp;{{l|ia|se}}}}}} | {{l|ia|habeva}} {{{1}}}{{#ifeq:{{{2|}}}|ar|ate|{{#ifeq:{{{2|}}}|er|ite|{{#ifeq:{{{2|}}}|ir|ite}}}}}}{{#if:{{{se|}}}|&nbsp;{{l|ia|se}}}} |- class="inflection-table-blue" ! အနာဂတ် | {{l|ia|{{{1}}}{{#ifeq:{{{2|}}}|ar|ara|{{#ifeq:{{{2|}}}|er|era|{{#ifeq:{{{2|}}}|ir|ira}}}}}}}}{{#if:{{{se|}}}|&nbsp;{{l|ia|se}}}}{{#if:{{{fut2|}}}|&#44;&nbsp;{{l|ia|{{{fut2|}}}}}{{#if:{{{se|}}}|&nbsp;{{l|ia|se}}}}}} | {{l|ia|habera}} {{{1}}}{{#ifeq:{{{2|}}}|ar|ate|{{#ifeq:{{{2|}}}|er|ite|{{#ifeq:{{{2|}}}|ir|ite}}}}}}{{#if:{{{se|}}}|&nbsp;{{l|ia|se}}}} |- class="inflection-table-blue" ! တၚ်မကၞာတ်လဝ်စေဝ်ပၞောန် | {{l|ia|{{{1}}}{{#ifeq:{{{2|}}}|ar|area|{{#ifeq:{{{2|}}}|er|erea|{{#ifeq:{{{2|}}}|ir|irea}}}}}}}}{{#if:{{{se|}}}|&nbsp;{{l|ia|se}}}}{{#if:{{{cond2|}}}|&#44;&nbsp;{{l|ia|{{{cond2|}}}}}{{#if:{{{se|}}}|&nbsp;{{l|ia|se}}}}}} | {{l|ia|haberea}} {{{1}}}{{#ifeq:{{{2|}}}|ar|ate|{{#ifeq:{{{2|}}}|er|ite|{{#ifeq:{{{2|}}}|ir|ite}}}}}}{{#if:{{{se|}}}|&nbsp;{{l|ia|se}}}} |- class="inflection-table-blue" ! ပါဲဗလေတ်ဟွံဗၠး | {{l|ia|{{{1}}}{{#ifeq:{{{2|}}}|ar|a|{{#ifeq:{{{2|}}}|er|e|{{#ifeq:{{{2|}}}|ir|i}}}}}}}}{{#if:{{{se|}}}|&nbsp;{{l|ia|se}}}}{{#if:{{{imp2|}}}|&#44;&nbsp;{{l|ia|{{{imp2|}}}}}{{#if:{{{se|}}}|&nbsp;{{l|ia|se}}}}}} | &mdash; |- | class="separator" colspan="999" | |- class="inflection-table-green" {{#if:{{{intr|}}}{{{se|}}}||! rowspan="6" {{!}} ဟွံတဝ်စၞေဟ်}} {{#if:{{{intr|}}}{{{se|}}}||! {{!}} }} {{#if:{{{intr|}}}{{{se|}}}||! {{!}} ဓမ္မတာ}} {{#if:{{{intr|}}}{{{se|}}}||! {{!}} ဍိုက်ပေၚ်}} |- class="inflection-table-green" {{#if:{{{intr|}}}{{{se|}}}||! {{!}} ပစ္စုပ္ပန်}} {{#if:{{{intr|}}}{{{se|}}}||{{! }} {{!}} {{l|ia|es}} {{{1}}}{{#ifeq:{{{2|}}}|ar|ate|{{#ifeq:{{{2|}}}|er|ite|{{#ifeq:{{{2|}}}|ir|ite}}}}}}{{#if:{{{se|}}}|&nbsp;{{l|ia|se}}}}}} {{#if:{{{intr|}}}{{{se|}}}||{{! }} {{!}} {{l|ia|ha}} {{l|ia|essite}} {{{1}}}{{#ifeq:{{{2|}}}|ar|ate|{{#ifeq:{{{2|}}}|er|ite|{{#ifeq:{{{2|}}}|ir|ite}}}}}}{{#if:{{{se|}}}|&nbsp;{{l|ia|se}}}}}} |- class="inflection-table-green" {{#if:{{{intr|}}}{{{se|}}}||! {{!}} အတိက်}} {{#if:{{{intr|}}}{{{se|}}}||{{! }} {{l|ia|esseva}} {{{1}}}{{#ifeq:{{{2|}}}|ar|ate|{{#ifeq:{{{2|}}}|er|ite|{{#ifeq:{{{2|}}}|ir|ite}}}}}}{{#if:{{{se|}}}|&nbsp;{{l|ia|se}}}}}} {{#if:{{{intr|}}}{{{se|}}}||{{! }} {{l|ia|habeva}} {{l|ia|essite}} {{{1}}}{{#ifeq:{{{2|}}}|ar|ate|{{#ifeq:{{{2|}}}|er|ite|{{#ifeq:{{{2|}}}|ir|ite}}}}}}{{#if:{{{se|}}}|&nbsp;{{l|ia|se}}}}}} |- class="inflection-table-green" {{#if:{{{intr|}}}{{{se|}}}||! {{!}} အနာဂတ်}} {{#if:{{{intr|}}}{{{se|}}}||{{! }} {{l|ia|essera}} {{{1}}}{{#ifeq:{{{2|}}}|ar|ate|{{#ifeq:{{{2|}}}|er|ite|{{#ifeq:{{{2|}}}|ir|ite}}}}}}{{#if:{{{se|}}}|&nbsp;{{l|ia|se}}}}}} {{#if:{{{intr|}}}{{{se|}}}||{{! }} {{l|ia|habera}} {{l|ia|essite}} {{{1}}}{{#ifeq:{{{2|}}}|ar|ate|{{#ifeq:{{{2|}}}|er|ite|{{#ifeq:{{{2|}}}|ir|ite}}}}}}{{#if:{{{se|}}}|&nbsp;{{l|ia|se}}}}}} |- class="inflection-table-green" {{#if:{{{intr|}}}{{{se|}}}||! {{!}} တၚ်မကၞာတ်လဝ်စေဝ်ပၞောန်}} {{#if:{{{intr|}}}{{{se|}}}||{{! }} {{l|ia|esserea}} {{{1}}}{{#ifeq:{{{2|}}}|ar|ate|{{#ifeq:{{{2|}}}|er|ite|{{#ifeq:{{{2|}}}|ir|ite}}}}}}{{#if:{{{se|}}}|&nbsp;{{l|ia|se}}}}}} {{#if:{{{intr|}}}{{{se|}}}||{{! }} {{l|ia|haberea}} {{l|ia|essite}} {{{1}}}{{#ifeq:{{{2|}}}|ar|ate|{{#ifeq:{{{2|}}}|er|ite|{{#ifeq:{{{2|}}}|ir|ite}}}}}}{{#if:{{{se|}}}|&nbsp;{{l|ia|se}}}}}} |- class="inflection-table-green" {{#if:{{{intr|}}}{{{se|}}}||! {{!}} ပါဲဗလေတ်ဟွံဗၠး}} {{#if:{{{intr|}}}{{{se|}}}||{{! }} {{l|ia|sia}} {{{1}}}{{#ifeq:{{{2|}}}|ar|ate|{{#ifeq:{{{2|}}}|er|ite|{{#ifeq:{{{2|}}}|ir|ite}}}}}}{{#if:{{{se|}}}|&nbsp;{{l|ia|se}}}}}} {{#if:{{{intr|}}}{{{se|}}}||{{! }} &mdash;}} {{inflection-table-bottom}}<noinclude>{{documentation}}</noinclude> l75dzxhixh8ay0jrcl4uewtxknknp6n ထာမ်ပလိက်:ia-conj/documentation 10 296354 397735 2026-07-01T14:29:46Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "{{documentation subpage|ia-conj}} This template generates conjugation tables for Interlingua verbs. ==Parameters (''required'')== * <tt>1</tt> = Verb stem. * <tt>2</tt> = Infinitive ending (''ar, er'' or ''ir''). ==Parameters (''optional'')== * <tt>intr</tt> = Set this to "<tt>yes</tt>" in order to bypass generation of passive terms. ''Note:'' <tt>intr</tt> stands for "intransitive" but can also be useful for copul..." 397735 wikitext text/x-wiki {{documentation subpage|ia-conj}} This template generates conjugation tables for Interlingua verbs. ==Parameters (''required'')== * <tt>1</tt> = Verb stem. * <tt>2</tt> = Infinitive ending (''ar, er'' or ''ir''). ==Parameters (''optional'')== * <tt>intr</tt> = Set this to "<tt>yes</tt>" in order to bypass generation of passive terms. ''Note:'' <tt>intr</tt> stands for "intransitive" but can also be useful for copulative verbs (like [[parer]]). <includeonly> [[ကဏ္ဍ:ထာမ်ပလိက်အေန်တာလိၚ်္ဂဝ်အပြံၚ်အလှာဲပ္တဝ်ထ္ၜးပမာဏကြိယာဂမၠိုၚ်]] </includeonly> i61txmcfh9e4c4u1icegvczagwsi6iv ကဏ္ဍ:ထာမ်ပလိက်အေန်တာလိၚ်္ဂဝ်အပြံၚ်အလှာဲပ္တဝ်ထ္ၜးပမာဏကြိယာဂမၠိုၚ် 14 296355 397736 2026-07-01T14:33:16Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "[[ကဏ္ဍ:ထာမ်ပလိက်အေန်တာလိၚ်္ဂဝ်အပြံၚ်အလှာဲပ္တဝ်ထ္ၜးပမာဏဂမၠိုၚ်]][[ကဏ္ဍ:ထာမ်ပလိက်အပြံၚ်အလှာဲပ္တဝ်ထ္ၜးပမာဏကြိယာဗက်အလိုက်အရေဝ်ဘာသာဂမၠိုၚ်|အ]]" 397736 wikitext text/x-wiki [[ကဏ္ဍ:ထာမ်ပလိက်အေန်တာလိၚ်္ဂဝ်အပြံၚ်အလှာဲပ္တဝ်ထ္ၜးပမာဏဂမၠိုၚ်]][[ကဏ္ဍ:ထာမ်ပလိက်အပြံၚ်အလှာဲပ္တဝ်ထ္ၜးပမာဏကြိယာဗက်အလိုက်အရေဝ်ဘာသာဂမၠိုၚ်|အ]] tsv9ogeqwa9u0s0yx4v24xvcya5ikhv ထာမ်ပလိက်:my-word-set 10 296356 397744 2026-07-02T00:50:37Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "{| class="floatright wikitable" style="text-align:center;" |+ မစွံဝေါဟာဗၟာ ! ကြိယာ | {{l-self|my|{{{1}}}}} |- {{#if:{{{2|}}} |<tr><th>နာမ်</th><td>{{l-self|my|{{{2}}}}}</td></tr>}} |}<noinclude>{{documentation}}</noinclude>" 397744 wikitext text/x-wiki {| class="floatright wikitable" style="text-align:center;" |+ မစွံဝေါဟာဗၟာ ! ကြိယာ | {{l-self|my|{{{1}}}}} |- {{#if:{{{2|}}} |<tr><th>နာမ်</th><td>{{l-self|my|{{{2}}}}}</td></tr>}} |}<noinclude>{{documentation}}</noinclude> d4y3ar618m5b92ghfacyrl6sj83v5xl ထာမ်ပလိက်:my-word-set/documentation 10 296357 397745 2026-07-02T00:51:58Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "{{documentation subpage}} {{documentation needed}}<!-- Replace this with a short description of the purpose of the template, and how to use it. --> <includeonly> [[ကဏ္ဍ:ထာမ်ပလိက်ဗၟာဂမၠိုၚ်]] </includeonly>" 397745 wikitext text/x-wiki {{documentation subpage}} {{documentation needed}}<!-- Replace this with a short description of the purpose of the template, and how to use it. --> <includeonly> [[ကဏ္ဍ:ထာမ်ပလိက်ဗၟာဂမၠိုၚ်]] </includeonly> h7o6svh0538hn4120yd75yotlbgwkv8 ထာမ်ပလိက်:my-con 10 296358 397747 2026-07-02T00:55:02Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "<includeonly>{{#invoke:my-headword|show|သမ္ဗန္ဓ}}</includeonly><noinclude>{{documentation}}</noinclude>" 397747 wikitext text/x-wiki <includeonly>{{#invoke:my-headword|show|သမ္ဗန္ဓ}}</includeonly><noinclude>{{documentation}}</noinclude> kkppktsjag60xvg72fo7bvfq47q72px ထာမ်ပလိက်:my-con/documentation 10 296359 397748 2026-07-02T00:55:48Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "{{documentation subpage}} {{documentation needed}}<!-- Replace this with a short description of the purpose of the template, and how to use it. --> {{hwcat}}" 397748 wikitext text/x-wiki {{documentation subpage}} {{documentation needed}}<!-- Replace this with a short description of the purpose of the template, and how to use it. --> {{hwcat}} f8u1ebax0fek1lf9jgky9pqli0yk03y ကဏ္ဍ:ဗျဉ်အက္ခရ်မန်-ဗၟာဂမၠိုၚ် 14 296360 397750 2026-07-02T00:58:29Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "[[ကဏ္ဍ:ဒၞာဲအခဝ်ယူနဳကုဒ်ဂမၠိုၚ်]][[ကဏ္ဍ:အက္ခရ်မန်-ဗၟာဂမၠိုၚ်]]" 397750 wikitext text/x-wiki [[ကဏ္ဍ:ဒၞာဲအခဝ်ယူနဳကုဒ်ဂမၠိုၚ်]][[ကဏ္ဍ:အက္ခရ်မန်-ဗၟာဂမၠိုၚ်]] k2vt8qm818cru8bk15s0ae5zzqxvqjw ကဏ္ဍ:သဗ္ဗနာမ်ပါဠိပ္ဍဲအက္ခရ်မန်-ဗၟာဂမၠိုၚ် 14 296361 397751 2026-07-02T00:59:57Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "[[ကဏ္ဍ:ဘာသာပါဠိ]]" 397751 wikitext text/x-wiki [[ကဏ္ဍ:ဘာသာပါဠိ]] ob4j1f5bzkmlkh2qd06ah3xm2dcl2z1 ကဏ္ဍ:အက္ခရ်ရခေၚ်ဂမၠိုၚ် 14 296362 397752 2026-07-02T01:00:55Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "[[ကဏ္ဍ:ဘာသာရခေၚ်]]" 397752 wikitext text/x-wiki [[ကဏ္ဍ:ဘာသာရခေၚ်]] so59o4h3koox6g89rni3jkznp6ud87p ကဏ္ဍ:ဝိဘတ်ရခေၚ်ဂမၠိုၚ် 14 296363 397753 2026-07-02T01:01:11Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "[[ကဏ္ဍ:ဘာသာရခေၚ်]]" 397753 wikitext text/x-wiki [[ကဏ္ဍ:ဘာသာရခေၚ်]] so59o4h3koox6g89rni3jkznp6ud87p ကဏ္ဍ:အက္ခရ်ကရေၚ်ပဝ်လ္ပာ်ဗၟံက်ဂမၠိုၚ် 14 296364 397755 2026-07-02T01:03:00Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "[[ကဏ္ဍ:ဘာသာကရေၚ်ပဝ်လ္ပာ်ဗၟံက်]]" 397755 wikitext text/x-wiki [[ကဏ္ဍ:ဘာသာကရေၚ်ပဝ်လ္ပာ်ဗၟံက်]] 9slwnbe3k1ore7lk2lr593lg29c0ax1 ဗီုပြၚ်သိုၚ်တၟိ:လဝ်လဝ်ဗၟာ-အခိုက်ကၞာ/ga³ ~ ʔga² 118 296365 397756 2026-07-02T01:05:47Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "{{reconstruction}} ==လဝ်လဝ်ဗၟာ-အခိုက်ကၞာ== ===ကြိယာ=== {{head|tbq-lob-pro|ကြိယာ}} # သကဵုဂယှ်ေ၊ လှ်ေ၊ ဝေၚ်။" 397756 wikitext text/x-wiki {{reconstruction}} ==လဝ်လဝ်ဗၟာ-အခိုက်ကၞာ== ===ကြိယာ=== {{head|tbq-lob-pro|ကြိယာ}} # သကဵုဂယှ်ေ၊ လှ်ေ၊ ဝေၚ်။ p364r6heexct8sc37f2ra748651hig1 ဗီုပြၚ်သိုၚ်တၟိ:ကြုက်-တိဗိတ်-အခိုက်ကၞာ/ga 118 296366 397757 2026-07-02T01:08:12Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "{{reconstruction}} ==ကြုက်-တိဗိတ်-အခိုက်ကၞာ== ===ကြိယာ=== {{head|sit-pro|ကြိယာ}} # သကဵုလှ်ေ၊ ထလာ်၊ လှ်ေလဂါံဇိုၚ်သိၚ်သိၚ်။" 397757 wikitext text/x-wiki {{reconstruction}} ==ကြုက်-တိဗိတ်-အခိုက်ကၞာ== ===ကြိယာ=== {{head|sit-pro|ကြိယာ}} # သကဵုလှ်ေ၊ ထလာ်၊ လှ်ေလဂါံဇိုၚ်သိၚ်သိၚ်။ 4ginx51x8tmiw72iqgyusfte5szqs4a ကကြီး 0 296367 397758 2026-07-02T01:11:14Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "==ဗၟာ== ===ဗွဟ်ရမ္သာၚ်=== * {{my-IPA|က+ကြီး}} ===နာမ်=== {{my-noun|head=[[က]][[ကြီး]]}} # ယၟုမလိက်အက္ခရ်ဗျန် က မရပ်စပ်ကော်ခဴအပ္ဍဲဘာသာဗၟာ။" 397758 wikitext text/x-wiki ==ဗၟာ== ===ဗွဟ်ရမ္သာၚ်=== * {{my-IPA|က+ကြီး}} ===နာမ်=== {{my-noun|head=[[က]][[ကြီး]]}} # ယၟုမလိက်အက္ခရ်ဗျန် က မရပ်စပ်ကော်ခဴအပ္ဍဲဘာသာဗၟာ။ b3omst7ueli42um4j2pd13i8a6mk4a2 လၧၫ့ 0 296368 397759 2026-07-02T01:15:19Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "==ကရၚ်ပဝ်လ္ပာ်ပလိုတ်== {{cardinalbox|pwo|၀|၁|၂||နံၫ}} ===ဗွဟ်ရမ္သာၚ်=== *{{IPA|pwo|/lə̀/}} ====ဂၞန်သၚ်္ချာ==== {{head|pwo|numeral}} # မွဲ။ ===နာမဝိသေသန=== {{head|pwo|verb}} # သကဵုဒှ်။" 397759 wikitext text/x-wiki ==ကရၚ်ပဝ်လ္ပာ်ပလိုတ်== {{cardinalbox|pwo|၀|၁|၂||နံၫ}} ===ဗွဟ်ရမ္သာၚ်=== *{{IPA|pwo|/lə̀/}} ====ဂၞန်သၚ်္ချာ==== {{head|pwo|numeral}} # မွဲ။ ===နာမဝိသေသန=== {{head|pwo|verb}} # သကဵုဒှ်။ pxwhh9zw8vqqr1pslay6b1j4d46zrje က္ညာၚ် 0 296369 397761 2026-07-02T01:23:10Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "=={{=mnw=}}== ===ပွံၚ်နဲတၞဟ်=== {{der3|mnw|က္ညာၚ်}} ===ဗွဟ်ရမ္သာၚ်=== {{IPA|mnw|/kaɲaɪn/}} * {{audio|mnw|LL-Q13349 (mnw)-咽頭べさ-ကညာၚ်.wav}} ===နာမ်=== {{mnw-noun}} # {{alt form|mnw|ကညာၚ်}} ===ကြိယာ=== {{mnw-verb}} # {{alt form|mnw|ကညာၚ်}}" 397761 wikitext text/x-wiki =={{=mnw=}}== ===ပွံၚ်နဲတၞဟ်=== {{der3|mnw|က္ညာၚ်}} ===ဗွဟ်ရမ္သာၚ်=== {{IPA|mnw|/kaɲaɪn/}} * {{audio|mnw|LL-Q13349 (mnw)-咽頭べさ-ကညာၚ်.wav}} ===နာမ်=== {{mnw-noun}} # {{alt form|mnw|ကညာၚ်}} ===ကြိယာ=== {{mnw-verb}} # {{alt form|mnw|ကညာၚ်}} df4nmy9cgyxwdea0u7z34emo4hcebsg ကဏ္ဍ:ထာမ်ပလိက်အေန်တာလိၚ်္ဂဝ်အပြံၚ်အလှာဲပ္တဝ်ထ္ၜးပမာဏဂမၠိုၚ် 14 296370 397762 2026-07-02T01:25:35Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "[[ကဏ္ဍ:ထာမ်ပလိက်အေန်တာလိၚ်္ဂဝ်ဂမၠိုၚ်]][[ကဏ္ဍ:ထာမ်ပလိက်အပြံၚ်အလှာဲပ္တဝ်ထ္ၜးပမာဏဗက်အလိုက်အရေဝ်ဘာသာဂမၠိုၚ်|အ]]" 397762 wikitext text/x-wiki [[ကဏ္ဍ:ထာမ်ပလိက်အေန်တာလိၚ်္ဂဝ်ဂမၠိုၚ်]][[ကဏ္ဍ:ထာမ်ပလိက်အပြံၚ်အလှာဲပ္တဝ်ထ္ၜးပမာဏဗက်အလိုက်အရေဝ်ဘာသာဂမၠိုၚ်|အ]] tjyiu3nwhqn8rjgu3u7wipfe99byd97 ထာမ်ပလိက်:pt-conj 10 296371 397763 2026-07-02T01:27:25Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "{{#invoke:pt-verb|show}}<!-- --><noinclude>{{documentation}}</noinclude>" 397763 wikitext text/x-wiki {{#invoke:pt-verb|show}}<!-- --><noinclude>{{documentation}}</noinclude> hm3030e0u4c9fooo1pjfdt1iqv4toij ထာမ်ပလိက်:pt-conj/documentation 10 296372 397764 2026-07-02T10:24:55Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "{{documentation subpage}} This template generates a navigation box for [[:Category:Portuguese verbs|Portuguese verb]] conjugation entries. The actual work is done by [[Module:pt-verb]]. ==Usage== This template should be added to all Portuguese verb entries. The template should be placed within the Portuguese language section, immediately following the '''Conjugation''' L4 language header. As with other Wiktionary n..." 397764 wikitext text/x-wiki {{documentation subpage}} This template generates a navigation box for [[:Category:Portuguese verbs|Portuguese verb]] conjugation entries. The actual work is done by [[Module:pt-verb]]. ==Usage== This template should be added to all Portuguese verb entries. The template should be placed within the Portuguese language section, immediately following the '''Conjugation''' L4 language header. As with other Wiktionary navigation box templates, '''please do not use <code>subst:</code>'''. ===Parameters=== The template uses one unnamed parameter to specify any information not automatically inferrable from the infinitive form. ==Examples== '''( 1 )''' {{m|pt|cantar||to sing}} :<code><nowiki>{{pt-conj}}</nowiki></code> {{pt-conj|pagename=cantar}} '''NOTE:''' For most verbs, no parameters are needed. ---- '''( 2 )''' {{m|pt|ser||to be}} :<code><nowiki>{{pt-conj}}</nowiki></code> {{pt-conj|pagename=ser}} '''NOTE:''' The module knows how to handle all irregular verbs automatically, including prefixed derivatives such as {{m|pt|desdar}} (from {{m|pt|dar}}) and {{m|pt|abster}} (from {{m|pt|ter}}). ---- '''( 3 )''' {{m|pt|desfazer||to undo}} :<code><nowiki>{{pt-conj}}</nowiki></code> {{pt-conj|pagename=desfazer}} '''NOTE:''' Example of a prefixed verb handled automatically. ---- '''( 4 )''' {{m|pt|semear||to sow}} :<code><nowiki>{{pt-conj}}</nowiki></code> {{pt-conj|pagename=semear}} '''NOTE:''' The alternation between ''-ear'' and stressed ''-eio'' is predictable, hence automatic. ---- '''( 5 )''' {{m|pt|conseguir||to get, to manage}} :<code><nowiki>{{pt-conj|<i-e>}}</nowiki></code> {{pt-conj|<i-e>|pagename=conseguir}} '''NOTE:''' The vowel alternation between ''conseguir'', ''consigo'' and ''consegue'' is unpredictable, hence a vowel alternation indicator <code><i-e></code> must be given. In general, indicators are contained between angle brackets, and if more than one must be given, they are separated by periods/full stops (a <code>.</code> symbol). Note however that the consonant alternation between ''-g-'' and ''-gu-'' is predictable, hence automatic. ---- '''( 6 )''' {{m|pt|renhir||to fight, to argue}} :<code><nowiki>{{pt-conj|<no_pres_stressed>}}</nowiki></code> {{pt-conj|<no_pres_stressed>|pagename=renhir}} '''NOTE:''' This verb is defective, missing all stem-stressed forms in the present indicative and imperative (as well as the entire present subjunctive). This is specified using the indicator <code><no_pres_stressed></code>. ---- '''( 7 )''' {{m|pt|demolir||to demolish, to knock down}} :<code><nowiki>{{pt-conj|<no_pres1_and_sub>}}</nowiki></code> {{pt-conj|<no_pres1_and_sub>|pagename=demolir}} '''NOTE:''' This verb is defective in a different way than {{m|pt|renhir}}, missing the first-singular present indicative and the entire present subjunctive. This is specified using the indicator <code><no_pres1_and_sub></code>. ---- '''( 8 )''' {{m|pt|chover a cântaros||to [[rain cats and dogs]]}} :<code><nowiki>{{pt-conj|chover<only3s> [[a]] [[cântaro]]s}}</nowiki></code> {{pt-conj|chover<only3s> [[a]] [[cântaro]]s}} '''NOTE:''' Full support is available for multiword expressions. Put the angle-bracket spec after the verb or verbs needing to be conjugated. Remaining text is passed through unaltered, and can include links, as shown. Here, the indicator <code>only3s</code> specifies an impersonal ("only third-singular") verb. ---- '''( 9 )''' {{m|pt|dar nome aos bois||to [[name names]]|lit=to name the cows}} :<code><nowiki>{{pt-conj|dar<> [[nome]] [[aos]] [[boi]]s}}</nowiki></code> {{pt-conj|dar<> [[nome]] [[aos]] [[boi]]s}} '''NOTE:''' In a multiword expression where no indicators are needed, place empty angle brackets after the verb or verbs needing to be conjugated. ---- '''( 10 )''' {{m|pt|beijar de língua||to [[French kiss]]}} :<code><nowiki>{{pt-conj}}</nowiki></code> {{pt-conj|pagename=beijar de língua}} '''NOTE:''' In a multiword expression where no indicators are needed and all words can be linked directly, {{para|1}} can be omitted. This is equivalent to placing <code><></code> after the first word, and all remaining words are automatically linked. ---- '''( 11 )''' {{m|pt|chuviscar||to [[drizzle]]}} :<code><nowiki>{{pt-conj|<only3s>}}</nowiki></code> {{pt-conj|<only3s>|pagename=chuviscar}} '''NOTE:''' This verb is impersonal and includes only third-person singular forms. For third-person only verbs, use <code><only3sp></code>, and for third-plural-only verbs, use <code><only3p></code>. ---- '''( 23 )''' {{m|pt|pecar||to [[sin]]}} :<code><nowiki>{{pt-conj|<pp_inv>}}</nowiki></code> {{pt-conj|<pp_inv>|pagename=pecar}} <includeonly> [[ကဏ္ဍ:ထာမ်ပလိက်ပဝ်တူဂြဳအပြံၚ်အလှာဲပ္တဝ်ထ္ၜးပမာဏကြိယာဂမၠိုၚ်|*]] </includeonly> fot7z9mmnboaahh30dfoa9esut4sgbc 397765 397764 2026-07-02T10:26:07Z 咽頭べさ 33 397765 wikitext text/x-wiki {{documentation subpage}} This template generates a navigation box for [[:ကဏ္ဍ:ကြိယာပဝ်တူဂြဳဂမၠိုၚ်|Portuguese verb]] conjugation entries. The actual work is done by [[Module:pt-verb]]. ==Usage== This template should be added to all Portuguese verb entries. The template should be placed within the Portuguese language section, immediately following the '''Conjugation''' L4 language header. As with other Wiktionary navigation box templates, '''please do not use <code>subst:</code>'''. ===Parameters=== The template uses one unnamed parameter to specify any information not automatically inferrable from the infinitive form. ==Examples== '''( 1 )''' {{m|pt|cantar||to sing}} :<code><nowiki>{{pt-conj}}</nowiki></code> {{pt-conj|pagename=cantar}} '''NOTE:''' For most verbs, no parameters are needed. ---- '''( 2 )''' {{m|pt|ser||to be}} :<code><nowiki>{{pt-conj}}</nowiki></code> {{pt-conj|pagename=ser}} '''NOTE:''' The module knows how to handle all irregular verbs automatically, including prefixed derivatives such as {{m|pt|desdar}} (from {{m|pt|dar}}) and {{m|pt|abster}} (from {{m|pt|ter}}). ---- '''( 3 )''' {{m|pt|desfazer||to undo}} :<code><nowiki>{{pt-conj}}</nowiki></code> {{pt-conj|pagename=desfazer}} '''NOTE:''' Example of a prefixed verb handled automatically. ---- '''( 4 )''' {{m|pt|semear||to sow}} :<code><nowiki>{{pt-conj}}</nowiki></code> {{pt-conj|pagename=semear}} '''NOTE:''' The alternation between ''-ear'' and stressed ''-eio'' is predictable, hence automatic. ---- '''( 5 )''' {{m|pt|conseguir||to get, to manage}} :<code><nowiki>{{pt-conj|<i-e>}}</nowiki></code> {{pt-conj|<i-e>|pagename=conseguir}} '''NOTE:''' The vowel alternation between ''conseguir'', ''consigo'' and ''consegue'' is unpredictable, hence a vowel alternation indicator <code><i-e></code> must be given. In general, indicators are contained between angle brackets, and if more than one must be given, they are separated by periods/full stops (a <code>.</code> symbol). Note however that the consonant alternation between ''-g-'' and ''-gu-'' is predictable, hence automatic. ---- '''( 6 )''' {{m|pt|renhir||to fight, to argue}} :<code><nowiki>{{pt-conj|<no_pres_stressed>}}</nowiki></code> {{pt-conj|<no_pres_stressed>|pagename=renhir}} '''NOTE:''' This verb is defective, missing all stem-stressed forms in the present indicative and imperative (as well as the entire present subjunctive). This is specified using the indicator <code><no_pres_stressed></code>. ---- '''( 7 )''' {{m|pt|demolir||to demolish, to knock down}} :<code><nowiki>{{pt-conj|<no_pres1_and_sub>}}</nowiki></code> {{pt-conj|<no_pres1_and_sub>|pagename=demolir}} '''NOTE:''' This verb is defective in a different way than {{m|pt|renhir}}, missing the first-singular present indicative and the entire present subjunctive. This is specified using the indicator <code><no_pres1_and_sub></code>. ---- '''( 8 )''' {{m|pt|chover a cântaros||to [[rain cats and dogs]]}} :<code><nowiki>{{pt-conj|chover<only3s> [[a]] [[cântaro]]s}}</nowiki></code> {{pt-conj|chover<only3s> [[a]] [[cântaro]]s}} '''NOTE:''' Full support is available for multiword expressions. Put the angle-bracket spec after the verb or verbs needing to be conjugated. Remaining text is passed through unaltered, and can include links, as shown. Here, the indicator <code>only3s</code> specifies an impersonal ("only third-singular") verb. ---- '''( 9 )''' {{m|pt|dar nome aos bois||to [[name names]]|lit=to name the cows}} :<code><nowiki>{{pt-conj|dar<> [[nome]] [[aos]] [[boi]]s}}</nowiki></code> {{pt-conj|dar<> [[nome]] [[aos]] [[boi]]s}} '''NOTE:''' In a multiword expression where no indicators are needed, place empty angle brackets after the verb or verbs needing to be conjugated. ---- '''( 10 )''' {{m|pt|beijar de língua||to [[French kiss]]}} :<code><nowiki>{{pt-conj}}</nowiki></code> {{pt-conj|pagename=beijar de língua}} '''NOTE:''' In a multiword expression where no indicators are needed and all words can be linked directly, {{para|1}} can be omitted. This is equivalent to placing <code><></code> after the first word, and all remaining words are automatically linked. ---- '''( 11 )''' {{m|pt|chuviscar||to [[drizzle]]}} :<code><nowiki>{{pt-conj|<only3s>}}</nowiki></code> {{pt-conj|<only3s>|pagename=chuviscar}} '''NOTE:''' This verb is impersonal and includes only third-person singular forms. For third-person only verbs, use <code><only3sp></code>, and for third-plural-only verbs, use <code><only3p></code>. ---- '''( 23 )''' {{m|pt|pecar||to [[sin]]}} :<code><nowiki>{{pt-conj|<pp_inv>}}</nowiki></code> {{pt-conj|<pp_inv>|pagename=pecar}} <includeonly> [[ကဏ္ဍ:ထာမ်ပလိက်ပဝ်တူဂြဳအပြံၚ်အလှာဲပ္တဝ်ထ္ၜးပမာဏကြိယာဂမၠိုၚ်|*]] </includeonly> cng8eimy6kef6c34tdxzg1et1qr1egl မဝ်ဂျူ:pt-verb/doc 828 296373 397767 2026-07-02T11:17:34Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "{{documentation needed}}<!-- Replace this with a short description of the purpose of the module, and how to use it. --> <includeonly> {{module cat|pt}} </includeonly>" 397767 wikitext text/x-wiki {{documentation needed}}<!-- Replace this with a short description of the purpose of the module, and how to use it. --> <includeonly> {{module cat|pt}} </includeonly> b2g2nu9bbb0zlh7946plckogexzh12v ကဏ္ဍ:မဝ်ဂျူပွမပြံၚ်လှာဲပဝ်တူဂြဳဂမၠိုၚ် 14 296374 397768 2026-07-02T11:20:03Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "[[ကဏ္ဍ:မဝ်ဂျူပဝ်တူဂြဳဂမၠိုၚ်]][[ကဏ္ဍ:ထာမ်ပလိက်ပဝ်တူဂြဳအပြံၚ်အလှာဲပ္တဝ်ထ္ၜးပမာဏဂမၠိုၚ်]][[ကဏ္ဍ:မဝ်ဂျူဗီုအပြံၚ်အလှာဲဝေါဟာဗက်အလိုက်အရေဝ်ဘာသာဂမၠိုၚ်|ပ]]" 397768 wikitext text/x-wiki [[ကဏ္ဍ:မဝ်ဂျူပဝ်တူဂြဳဂမၠိုၚ်]][[ကဏ္ဍ:ထာမ်ပလိက်ပဝ်တူဂြဳအပြံၚ်အလှာဲပ္တဝ်ထ္ၜးပမာဏဂမၠိုၚ်]][[ကဏ္ဍ:မဝ်ဂျူဗီုအပြံၚ်အလှာဲဝေါဟာဗက်အလိုက်အရေဝ်ဘာသာဂမၠိုၚ်|ပ]] 2pdsiq3jotvusy6hokv68cecfw5g6vm ကဏ္ဍ:ထာမ်ပလိက်ပဝ်တူဂြဳအပြံၚ်အလှာဲပ္တဝ်ထ္ၜးပမာဏကြိယာဂမၠိုၚ် 14 296375 397769 2026-07-02T11:23:44Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "[[ကဏ္ဍ:ထာမ်ပလိက်ပဝ်တူဂြဳအပြံၚ်အလှာဲပ္တဝ်ထ္ၜးပမာဏဂမၠိုၚ်]][[ကဏ္ဍ:ထာမ်ပလိက်အပြံၚ်အလှာဲပ္တဝ်ထ္ၜးပမာဏကြိယာဗက်အလိုက်အရေဝ်ဘာသာဂမၠိုၚ်|ပ]]" 397769 wikitext text/x-wiki [[ကဏ္ဍ:ထာမ်ပလိက်ပဝ်တူဂြဳအပြံၚ်အလှာဲပ္တဝ်ထ္ၜးပမာဏဂမၠိုၚ်]][[ကဏ္ဍ:ထာမ်ပလိက်အပြံၚ်အလှာဲပ္တဝ်ထ္ၜးပမာဏကြိယာဗက်အလိုက်အရေဝ်ဘာသာဂမၠိုၚ်|ပ]] 6h99czmxwzqk2j6pvtaw2mroghc3ekt ကဏ္ဍ:ထာမ်ပလိက်ပဝ်တူဂြဳအပြံၚ်အလှာဲပ္တဝ်ထ္ၜးပမာဏဂမၠိုၚ် 14 296376 397770 2026-07-02T11:25:39Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "[[ကဏ္ဍ:ထာမ်ပလိက်ပဝ်တူဂြဳဂမၠိုၚ်]][[ကဏ္ဍ:ထာမ်ပလိက်အပြံၚ်အလှာဲပ္တဝ်ထ္ၜးပမာဏဗက်အလိုက်အရေဝ်ဘာသာဂမၠိုၚ်|ပ]]" 397770 wikitext text/x-wiki [[ကဏ္ဍ:ထာမ်ပလိက်ပဝ်တူဂြဳဂမၠိုၚ်]][[ကဏ္ဍ:ထာမ်ပလိက်အပြံၚ်အလှာဲပ္တဝ်ထ္ၜးပမာဏဗက်အလိုက်အရေဝ်ဘာသာဂမၠိုၚ်|ပ]] chkfzt40acjb13jkpyq2dsyuixw0fgp graví 0 296377 397774 2026-07-02T11:58:17Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "{{also|gravi|gravi-}} ==ကာတ်တလာန်== ===ကြိယာ=== {{head|ca|verb form}} # {{ca-verb form of|gravar}}" 397774 wikitext text/x-wiki {{also|gravi|gravi-}} ==ကာတ်တလာန်== ===ကြိယာ=== {{head|ca|verb form}} # {{ca-verb form of|gravar}} qluksd0jq5cpzx724dveh13egd9vf9y