ဝိစ်သိဉ်နရီ blkwiktionary https://blk.wiktionary.org/wiki/%E1%80%A1%E1%80%93%E1%80%AD%E1%80%80%E1%80%9C%E1%80%AD%E1%80%90%E1%80%BA%E1%80%99%E1%80%B2%E1%80%B7%E1%80%84%E1%80%AB MediaWiki 1.45.0-wmf.6 case-sensitive မီဒီယာ တဲးဝါး အိုင်ကိုမ်ဒေါ့ꩻရီ ကေားသုင်ꩻသား ကေားသုင်ꩻသား အိုင်ကိုမ်ဒေါ့ꩻရီ ဝိစ်သိဉ်နရီ ဝိစ်သိဉ်နရီ အိုင်ကိုမ်ဒေါ့ꩻရီ ဖုဲင် ဖုဲင် အိုင်ကိုမ်ဒေါ့ꩻရီ မီဒီယာဝီခီ မီဒီယာဝီခီ အိုင်ကိုမ်ဒေါ့ꩻရီ တမ်းပလေက် တမ်းပလေက် အိုင်ကိုမ်ဒေါ့ꩻရီ စွဲးကမ်းကို စွဲးကမ်းကို အိုင်ကိုမ်ဒေါ့ꩻရီ ကဏ္ဍ ကဏ္ဍ အိုင်ကိုမ်ဒေါ့ꩻရီ သွုပ်ဆုဲင်ꩻ သွုပ်ဆုဲင်ꩻ အိုင်ကိုမ်ဒေါ့ꩻရီ TimedText TimedText talk မော်ဂျူး မော်ဂျူး ဆွေးနွေးချက် ကဏ္ဍ:မန်းကြိယာႏဖုံႏ 14 135 12083 8804 2025-06-24T02:43:06Z 咽頭べさ 11 [[ကဏ္ဍ:မန်း ကြိယာႏ]] စာမျက်နှာကို [[ကဏ္ဍ:မန်းကြိယာႏဖုံႏ]] သို့ 咽頭べさက ရွှေ့ခဲ့သည် 8804 wikitext text/x-wiki [[ကဏ္ဍ:မန်းဘာႏသာႏငဝ်းငွါ]] htmm46ik9yji7ly27ketlu9lmo2n8mc ကဏ္ဍ:မန်းကြိယာႏဝိသေသနဖုံႏ 14 136 12127 8805 2025-06-24T03:08:44Z 咽頭べさ 11 [[ကဏ္ဍ:မန်း ကြိယာႏဝိသေသန]] စာမျက်နှာကို [[ကဏ္ဍ:မန်းကြိယာႏဝိသေသနဖုံႏ]] သို့ 咽頭べさက ရွှေ့ခဲ့သည် 8805 wikitext text/x-wiki [[ကဏ္ဍ:မန်းဘာႏသာႏငဝ်းငွါ]] htmm46ik9yji7ly27ketlu9lmo2n8mc ကဏ္ဍ:မန်းဂဏန်ꩻဖုံႏ 14 137 12086 8806 2025-06-24T02:44:37Z 咽頭べさ 11 [[ကဏ္ဍ:မန်း ဂဏန်ꩻ]] စာမျက်နှာကို [[ကဏ္ဍ:မန်းဂဏန်ꩻဖုံႏ]] သို့ 咽頭べさက ရွှေ့ခဲ့သည် 8806 wikitext text/x-wiki [[ကဏ္ဍ:မန်းဘာႏသာႏငဝ်းငွါ]] htmm46ik9yji7ly27ketlu9lmo2n8mc ကဏ္ဍ:မန်းနာမဝိသေသနဖုံႏ 14 138 12109 8802 2025-06-24T03:00:10Z 咽頭べさ 11 [[ကဏ္ဍ:မန်း နာမဝိသေသန]] စာမျက်နှာကို [[ကဏ္ဍ:မန်းနာမဝိသေသနဖုံႏ]] သို့ 咽頭べさက ရွှေ့ခဲ့သည် 8802 wikitext text/x-wiki [[ကဏ္ဍ:မန်းဘာႏသာႏငဝ်းငွါ]] htmm46ik9yji7ly27ketlu9lmo2n8mc ကဏ္ဍ:မန်းနာမ်ႏဆဲင်ႏတဖြာꩻဖုံႏ 14 140 12141 8803 2025-06-24T03:15:35Z 咽頭べさ 11 [[ကဏ္ဍ:မန်း နာမ်ႏဆဲင်ႏတဖြာꩻ]] စာမျက်နှာကို [[ကဏ္ဍ:မန်းနာမ်ႏဆဲင်ႏတဖြာꩻဖုံႏ]] သို့ 咽頭べさက ရွှေ့ခဲ့သည် 8803 wikitext text/x-wiki [[ကဏ္ဍ:မန်းဘာႏသာႏငဝ်းငွါ]] htmm46ik9yji7ly27ketlu9lmo2n8mc ကဏ္ဍ:မန်းနာမ်ႏတင်ဖုံႏ 14 141 12136 8801 2025-06-24T03:12:27Z 咽頭べさ 11 [[ကဏ္ဍ:မန်း နာမ်ႏတင်]] စာမျက်နှာကို [[ကဏ္ဍ:မန်းနာမ်ႏတင်ဖုံႏ]] သို့ 咽頭べさက ရွှေ့ခဲ့သည် 8801 wikitext text/x-wiki [[ကဏ္ဍ:မန်းဘာႏသာႏငဝ်းငွါ]] htmm46ik9yji7ly27ketlu9lmo2n8mc ကဏ္ဍ:မန်းဝိဘတ်ဖုံႏ 14 142 12114 8800 2025-06-24T03:02:58Z 咽頭べさ 11 [[ကဏ္ဍ:မန်း ဝိဘတ်]] စာမျက်နှာကို [[ကဏ္ဍ:မန်းဝိဘတ်ဖုံႏ]] သို့ 咽頭べさက ရွှေ့ခဲ့သည် 8800 wikitext text/x-wiki [[ကဏ္ဍ:မန်းဘာႏသာႏငဝ်းငွါ]] htmm46ik9yji7ly27ketlu9lmo2n8mc မော်ဂျူး:my-headword 828 212 12068 11558 2025-06-24T02:34:00Z 咽頭べさ 11 12068 Scribunto text/plain local export = {} local pos_functions = {} local lang = require("Module:languages").getByCode("my") local script = require("Module:scripts").getByCode("Mymr") local PAGENAME = mw.title.getCurrentTitle().text function export.show(frame) local args = frame:getParent().args local poscat = frame.args[1] or error("Part of speech has not been specified. Please pass parameter 1 to the module invocation.") local head = args["head"] local tr = args["tr"] local data = { lang = lang, pos_category = poscat, categories = {}, heads = {head}, translits = {tr}, inflections = {} } if args["cat2"] then -- table.insert(data.categories, "Burmese " .. args["cat2"]) end if args["cat3"] then -- table.insert(data.categories, "Burmese " .. args["cat3"]) end if pos_functions[poscat] then pos_functions[poscat](args, data) end local content = mw.title.new(PAGENAME):getContent() local code = mw.ustring.match(content, "{{my%-IPA[^}]*}}") if not code then -- table.insert(data.categories, "Burmese terms without my-IPA template") end return require("Module:headword").full_headword(data) end pos_functions["နာမ်ႏ"] = function(args, data) local classifiers = {label = "classifier"} if args[1] then for _,par in ipairs(args) do if par == "*" then table.insert(classifiers, PAGENAME) -- shorthand -- table.insert(data.categories, "Burmese classifiers") -- table.insert(data.categories, "Burmese nouns classified by " .. PAGENAME) else table.insert(classifiers, par) -- table.insert(data.categories, "Burmese nouns classified by " .. par) end end table.insert(data.inflections, classifiers) end end return export gz5ngxkj46pxp0kwzfpx6jn7xybaiit မော်ဂျူး:utilities/format categories 828 253 11979 8149 2025-06-23T14:15:08Z 咽頭べさ 11 အကြောင်းအရာ "return require("Module:utilities").format_categories" ဖြင့် အစားထိုးခဲ့သည် 11979 Scribunto text/plain return require("Module:utilities").format_categories 91amarljo9n8ic0hwuv8s8o9zevr2dm ကင်းလွတ် 0 547 11988 1594 2025-06-23T15:04:28Z 咽頭べさ 11 11988 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏ=== {{my-verb}} * [[ကင်ꩻလွောတ်]] * [[ကင်ꩻလွစ်]] ===ဘာႏသာႏပြန်ႏ=== * အဲင်းကလေတ် : be detached or freed of; be devoid of; be exempt. te6b6s13yuuin9jan7kyzqim9u6oalu ကစား 0 552 11989 1614 2025-06-23T15:05:20Z 咽頭べさ 11 11989 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏ=== {{my-verb}} * က(v)+စား(v) # [[ခွုမ်ဆိုး]] (ခွုမ်ဆိုးထာꩻ၊ ခွုမ်ဆိုးဗော်လုံး)။ ===ဘာႏသာႏပြန်ႏ=== * အဲင်းကလေတ် : [[play]]; take part in games (football, volleyball, etc). ==မန်း== '''ကစား''' ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏ=== {{my-verb}} # [[တောႏ]] (တောႏဖုဲင်း၊ တောႏဆဲး)၊ [[လောင်ꩻ]] (လောင်ꩻဆျာ၊ တောꩻလောင်ꩻထာꩻ)။ ===ဘာႏသာႏပြန်ႏ=== * အဲင်းကလေတ် : [[gamble]] (in game of chance). qg8vgrbccu52o7hlx1vvbf8sxr1uowk ကိစ္စငြိမ်း 0 636 11990 1953 2025-06-23T15:05:56Z 咽頭べさ 11 11990 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * Pali-ကိစ္စ+Myan-ငြိမ်း ===ကြိယာႏ=== {{my-verb}} * compound verb * [[ကိစ္စငိမ်ꩻ]] * [[ထွူသွတ်ꩻ]] ===ဘာႏသာႏပြန်ႏ=== * အိန်းကလေတ် : (of some undertaking) be brought to a close; be rid of some problem f1fnelpkn76skqaizo11v0mnt0a9o2r ကုတ် 0 648 12008 2000 2025-06-23T15:25:53Z 咽頭べさ 11 12008 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===ကြိယာႏ=== {{my-verb}} * [[ခြဝ်ႏ]] * [[တဗွော့ꩻ]] * [[မွတ်ꩻ]]၊ [[ဟွတ်ꩻ]] ====ဘာႏသာႏပြန်ႏ==== * မန်း : လက်သည်းခြေသည်းတို့ဖြင့် ခြစ်သည်။ * အဲင်းကလေတ် : [[scratch]]; [[claw]]. ===နာမ်ႏ=== {{my-noun}} * [[ခွဉ်း]]ကသုင်ꩻအီဒါႏ ကေားအီ၊ ဝွော့အီထာꩻ။ ====ဘာသာပြန်==== * မန်း : ကော်မရာတွင် သုံးသောတုတ်။ * အဲင်းကလေတ် : [[lever]]. ===အရွီးခိုႏ=== * Eng-coat ====နာမ်ႏ==== {{my-noun}} * ခမ်းတွို့ꩻသား ဆဲင်ꩻလိုꩻခို၊ ဆဲင်ꩻတန် တမျိုꩻ၊ ဆဲင်ꩻကုတ်။ =====ဘာႏသာႏပြန်ႏ===== * မန်း : ကုတ်အင်္ကျီ။ * အိန်းကလေတ် : [[coat]]. ==မဲင်ꩻ== ===ကြိယာႏ=== {{head|mnw|ကြိယာႏ}} # [[သွို့ꩻ]]၊ [[သွယ်ꩻ]] # [[တဒွေါ့ꩻ]]၊ [[ဖဲ့]] # [[ဗက်ꩻ]]၊ [[ဗက်ꩻထဲ့]] ====ဘာႏသာႏပြန်ႏ==== * မန်း : [[လှီး]]သည်။ [[ခုတ်]]သည်။ [[ဖြတ်]]သည်။ * အိန်းကလေတ် : to [[cut]] oozejoqh2i3hrfm0dmioqt0jfa80j4y 12009 12008 2025-06-23T15:28:35Z 咽頭べさ 11 12009 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===ကြိယာႏ=== {{my-verb}} * [[ခြဝ်ႏ]] * [[တဗွော့ꩻ]] * [[မွတ်ꩻ]]၊ [[ဟွတ်ꩻ]] ====ဘာႏသာႏပြန်ႏ==== * မန်း : လက်သည်းခြေသည်းတို့ဖြင့် ခြစ်သည်။ * အဲင်းကလေတ် : [[scratch]]; [[claw]]. ===နာမ်ႏ=== {{my-noun}} * [[ခွဉ်း]]ကသုင်ꩻအီဒါႏ ကေားအီ၊ ဝွော့အီထာꩻ။ ====ဘာသာပြန်==== * မန်း : ကော်မရာတွင် သုံးသောတုတ်။ * အဲင်းကလေတ် : [[lever]]. ===အရွီးခိုႏ=== * Eng-coat ====နာမ်ႏ==== {{my-noun}} * ခမ်းတွို့ꩻသား ဆဲင်ꩻလိုꩻခို၊ ဆဲင်ꩻတန် တမျိုꩻ၊ ဆဲင်ꩻကုတ်။ =====ဘာႏသာႏပြန်ႏ===== * မန်း : ကုတ်အင်္ကျီ။ * အိန်းကလေတ် : [[coat]]. ==မဲင်ꩻ== ===အငဝ်းထန်ႏ=== * {{audio|mnw|LL-Q13349 (mnw)-Intobesa (咽頭べさ)-{{PAGENAME}}.wav}} ===ကြိယာႏ=== {{head|mnw|ကြိယာႏ}} # [[သွို့ꩻ]]၊ [[သွယ်ꩻ]] # [[တဒွေါ့ꩻ]]၊ [[ဖဲ့]] # [[ဗက်ꩻ]]၊ [[ဗက်ꩻထဲ့]] ====ဘာႏသာႏပြန်ႏ==== * မန်း : [[လှီး]]သည်။ [[ခုတ်]]သည်။ [[ဖြတ်]]သည်။ * အိန်းကလေတ် : to [[cut]] ffzijj3y31432a2icae9epoi81smutv ကောင်ထဝ 0 663 11927 2055 2025-06-23T12:16:15Z 咽頭べさ 11 11927 wikitext text/x-wiki ==ပအိုဝ်ႏ== ===အငဝ်းထန်ႏ=== ===နာမ်ႏ=== {{blk-noun}} * ကောင်ထဝ # ကောင်နာ တောမ်ႏ ကောင်ခင်ႏထျꩻအခါႏ ကအဝ်ႏဒါႏ ကောင်ဖုဲင်းကောင်ဖဲင် ကောင်လဲင်အရပ်။ ====နပ်တွက်==== * ဗာႏ၊ ဖြုံႏ ====အခရာႏပီ လိတ်ဖြုံႏကွာႏ==== * [[ကောင်ထာႏဝ]]၊ [[ကောင်ဒေင်]] ====ဘာႏသာႏလင်==== * မန်း : [[တောင်ခါးပန်း]]၊ တောင်ခလယ်။ * အိန်းကလေတ် : [[bank]] of a [[mountain]]; side of a mountain. nb28fn8ooex9hv33wlqahu83ljllzl8 ကံခေ 0 680 11991 2114 2025-06-23T15:06:30Z 咽頭べさ 11 11991 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * Pali-ကမ္မ+Myan-ခေ ===ကြိယာႏ=== {{my-verb}} * [[ကံႏညမ်း]] * [[ကံႏပေႏ]] * [[ကံႏဟဝ်တဝ်း]] ===ဘာႏသာႏပြန်ႏ=== * အိန်းကလေတ် : be unfortunate. makh7d0azxywve6pkcwh59buc98zwoo ကံဆိုး 0 682 11992 2120 2025-06-23T15:07:08Z 咽頭べさ 11 11992 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * Pali-ကမ္မ+Myan-ဆိုး ===ကြိယာႏ=== {{my-verb}} * [[ကံႏညမ်း]] * [[ကံႏဟဝ်တဝ်း]] ===ဘာႏသာႏပြန်ႏ=== * အိန်းကလေတ် : be unfortunate. 95jigwz0zmunwb9rprxlefcnpskfocy ကံႏကျောင်ꩻလီꩻ 0 688 11910 7895 2025-06-23T11:59:02Z 咽頭べさ 11 11910 wikitext text/x-wiki ==ပအိုဝ်ႏ== ===နာမ်ႏ=== {{blk-noun}} * ကံႏကျောင်ꩻလီꩻ # တဖြာꩻတောမ်ႏတဖြာꩻ သဲင်ꩻမော့ꩻခွဲးဝင်ꩻတာႏ ဖဝကရီးခါ ကမာꩻခါꩻဒါႏ ကုသိုလ်ႏဟဝ်အကျိုꩻသွုပ်။ ===ဘာႏသာႏပြန်ႏ=== * မန်း : [[ရေစက်]]၊ တစ်ဦးနှင့်တစ်ဦးဆုံစည်းရန် ရှေးကပြုခဲ့ဖူးသော ကောင်းမှုအကျိုးဆက်။ * အိန်းကလေတ် : past deed of merit done together resulting in the present or future encounter. 8yd71fhbq9n9volocxwg4qwoaneyjpp ကျိုႏခေတ် 0 705 11911 7890 2025-06-23T11:59:19Z 咽頭べさ 11 11911 wikitext text/x-wiki ==ပအိုဝ်ႏ== ===နာမ်ႏ=== {{blk-noun}} * ခေတ်ကျိုႏ # တစွိုးစွိုး တမျိုꩻမျိုꩻ စတဲင် ခလားကထွာ အခိန်ႏကာႏလ။ ===ဘာႏသာႏပြန်ႏ=== *မန်း : [[ခေတ်ကြို]] 0imc9w5804bih790x0fjljmqy10ceik ကျောင်ꩻ 0 708 11912 2223 2025-06-23T11:59:48Z 咽頭べさ 11 11912 wikitext text/x-wiki ==ပအိုဝ်ႏ== ===နာမ်ႏ=== {{blk-noun}} * [[ဗွေႏဗွန်ကျောင်ꩻ]] * [[ဗွေႏဗိုန်ကျောင်ꩻ]] # ဗွေႏရဟန်ꩻသင်ႏဃာႏသီး ကအဝ်ႏသတင်ꩻသုင်ꩻ၊ ကအဝ်ႏအုံသော့ꩻဒါႏ အနမ်းအခြုံ ဗွေႏဗွန်ကျောင်ꩻ။ ====ဘာႏသာႏပြန်ႏ==== * မန်း : [[ဘုန်းကြီးကျောင်း]] * အိန်းကလေတ် : [[monastery]] ===နာမ်ႏ=== {{blk-noun}} * [[သွဉ်တန်ꩻကျောင်ꩻ]] # သွဉ်ထူႏလွူꩻထွား လွူးနမ်းမွေးသက် စတဲင် ထာꩻဒါႏပညာႏခင်ႏလမ်းဌာႏန သွဉ်တန်ꩻကျောင်ꩻ။ ====ဘာႏသာႏပြန်ႏ==== * မန်း : သင်တန်းကျောင်း ===နာမ်ႏ=== {{blk-noun}} * [[အိန်ကျောင်း]] # သွဉ်ထူႏလွူꩻထွား ပညာႏခင်ႏလမ်းဌာႏန သွဉ်လိတ်ကျောင်ꩻ၊ အိန်ကျောင်း။ ====ဘာႏသာႏပြန်ႏ==== * မန်း : [[စာသင်ကျောင်း]] * အိန်းကလေတ် : [[school]]. cdfnw31ujaruy9exra5tb3q8rmgdxre ကျောင်ꩻကန်ႏ 0 709 11913 2227 2025-06-23T12:00:11Z 咽頭べさ 11 11913 wikitext text/x-wiki ==ပအိုဝ်ႏ== ===နာမ်ႏ=== {{blk-noun}} * သာႏသနာႏရေꩻဆဲင်ႏရာꩻ ကျောင်ꩻ၊ တရောပ်၊ ထီနောင် စတဲင်ဖုံႏယို ကဟဲ့ꩻငီꩻဒါႏလို့ဝင်ꩻ အမိဉ်ꩻ။ ===ဘာႏသာႏပြန်ႏ=== *မန်း : [[ကျောင်းကန်]] 559ohskh3cvnpk1gm2e3obvl4837mq5 ကျောင်ꩻနင်းပုဂ္ဂိုလ်ႏ 0 711 11914 2234 2025-06-23T12:00:41Z 咽頭べさ 11 11914 wikitext text/x-wiki ==ပအိုဝ်ႏ== ===နာမ်ႏ=== {{blk-noun}} * ကျောင်ꩻနင်းဆရာႏတောႏ # ကမာꩻဖေႏဒါႏ အတန်ꩻအကဲႏကျောင်ꩻကိုတဲင် ကအဝ်ႏအုံသတင်ꩻသုင်ꩻဒါႏ ပုဂ္ဂိုလ်ႏ၊ ဗွေႏဗွန်။ ===ဘာႏသာႏပြန်ႏ=== *မန်း : [[ကျောင်းထိုင်ဆရာတော်]] *အိန်းကလေတ် : [[abbot]], presiding monk at a monastery. 4yd8iu8732xep79el2famqsnlpgnnf3 ကျံႏတကုဲင် 0 719 11915 2263 2025-06-23T12:01:03Z 咽頭べさ 11 11915 wikitext text/x-wiki ==ပအိုဝ်ႏ== ===အငဝ်းထန်ႏ=== ===နာမ်ႏ=== {{blk-noun}} * [[ကျံႏတကုဲင်]]ဝင်ꩻ * [[ကျံႏတꩻကဲင်ႏ]] # ဝင်ꩻဖေႏကကုဲင် ဖေႏကမော့ꩻ ထာꩻယပ်ꩻထာꩻဒုက္ခတဲင် ကျံႏမာꩻဝင်ꩻ။ ===ဘာႏသာႏပြန်ႏ=== *မန်း : [[အကောက်ကြံ]] sa17yxcrbr2f2j54i95f3k6sdbwmuw8 ကျံႏတꩻကဲင်ႏ 0 721 11916 2273 2025-06-23T12:01:28Z 咽頭べさ 11 11916 wikitext text/x-wiki ==ပအိုဝ်ႏ== ===အငဝ်းထန်ႏ=== ===နာမ်ႏ=== {{blk-noun}} * ကျံႏတꩻကဲင်ႏ * [[ကျံႏတကုဲင်]]ဝင်ꩻ။ # ဝင်ꩻဖေႏကကုဲင် ဖေႏကမော့ꩻထာꩻယပ်ꩻထာꩻဒုက္ခတဲင် ကျံႏမာꩻဝင်ꩻ။ ===ဘာႏသာႏပြန်ႏ=== *မန်း : [[အကောက်ကြံ]] sagi057ryql71ifnnlj7hok1vlsbomf ကျံႏအအွာ 0 724 11917 2285 2025-06-23T12:02:14Z 咽頭べさ 11 11917 wikitext text/x-wiki ==ပအိုဝ်ႏ== ===နာမ်ႏ=== {{blk-noun}} ===ဘာႏသာႏပြန်ႏ=== *မန်း : အကော်ကြံ gkrhr081nc4jf5uaup23k37h7id2202 ကြားခင် 0 742 11918 2345 2025-06-23T12:02:38Z 咽頭べさ 11 11918 wikitext text/x-wiki ==ပအိုဝ်ႏ== ===အငဝ်းထန်ႏ=== ===နာမ်ႏ=== {{blk-noun}} * ကြားခင် # ကရုဲင်ခါꩻဒါႏကြား ထာꩻမွူးထာꩻခြွီပေႏ ခင်ႏလမ်းအခင်။ ===ဘာႏသာႏပြန်ႏ=== *မန်း : [[ပျိုးခင်း]] 3pzd1jua7gxra5mpkskddttoz4xro5v ကြိပ်ꩻ 0 744 11919 2352 2025-06-23T12:03:02Z 咽頭べさ 11 11919 wikitext text/x-wiki ==ပအိုဝ်ႏ== ===နာမ်ႏ=== {{blk-noun}} * ကနပ်တွက်အီဒါႏ အကြိပ်ႏ(ကြိပ်ꩻ) ငဝ်းငွါလိတ်ဖြုံႏ။ #: [[ဖက်ꩻခေါ်]]'''ကြိပ်ႏ''' ===ဘာႏသာႏပြန်ႏ=== *မန်း : [[မြွှာ]] * အဲင်းကလေတ် : numerical classifier for counting segments of garlic. 66r2rhmyivdqprdtf0pqd947c2bvwj0 ကြိုက် 0 745 11993 2354 2025-06-23T15:07:37Z 咽頭べさ 11 11993 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏ=== {{my-verb}} * [[ကျွိုက်]] * [[ရက်]] ===ဘာႏသာႏပြန်ႏ=== * အိန်းကလေတ် : [[like]]; be pleased with. sgevagg0fpr42detlro9l80rztqnms4 ကြိုက်နှစ်သက် 0 746 11994 2357 2025-06-23T15:08:35Z 咽頭べさ 11 11994 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏ=== {{my-verb}} * [[ကျွိုက်တွိုႏသꩻ]] ====ဘာႏသာႏလင်==== * အိန်းကလေတ် : be fond of ; like. lbkg99byuezlywq6751pza2a26cydcl ကြေ့ႏကꩻတူႏ 0 753 11920 7885 2025-06-23T12:03:53Z 咽頭べさ 11 11920 wikitext text/x-wiki ==ပအိုဝ်ႏ== ===အငဝ်းထန်ႏ=== ===နာမ်ႏ=== {{blk-noun}} * ကြေ့ႏကတူႏ # ထာꩻသား အုံလꩻ ထီကို ကောင်သဲင်လောင်း သတ္တဝါႏတမျိုꩻ ကတူႏ။ ===ဘာႏသာႏပြန်ႏ=== *မန်း : [[လိပ်]]ခေါင်း(လိပ်၏ဦးခေါင်း) *အိန်းကလေတ် : [[tortoise]] head; [[turtle]] head. qe5g81h4d1hd9jmcxn081nhs25mkrcg ကြံစည် 0 758 11995 2397 2025-06-23T15:09:08Z 咽頭べさ 11 11995 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏ=== {{my-verb}} * [[ကျမ်ႏစဲႏ]] * ယူႏခွုမ်မာꩻ ===ဘာႏသာႏပြန်ႏ=== * အိန်းကလေတ် : think; plan; formulate. ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏ=== {{my-verb}} * [[ကျမ်ႏ]] * [[ကျမ်ႏပေါင်ꩻ]] # ခွုမ်မာꩻညီꩻ။ ===ဘာႏသာႏပြန်ႏ=== * အိန်းကလေတ် : [[plot]]; conspire. ovvr1so87cuc1k34d591pea3v5hgzzs ကြံဆ 0 759 11996 2399 2025-06-23T15:09:41Z 咽頭べさ 11 11996 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏ=== {{my-verb}} * [[ကျံႏယူႏ]] ====ဘာႏသာႏလင်==== * အိန်းကလေတ် : weigh pros and cons. sgucfdt6c9glenij7you4koqhgg7b6q ကြံဖန် 0 760 11997 2401 2025-06-23T15:11:54Z 咽頭べさ 11 11997 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏ=== {{my-verb}} * [[ကျမ်ႏ]] * [[ကျမ်ႏစဲႏ]] ====ဘာႏသာႏပြန်ႏ==== * အိန်းကလေတ် : devise; improvise. contrive. 8perxd18t8mlx65scger6usukc7uv9j ကြွ 0 761 11998 2403 2025-06-23T15:12:44Z 咽頭べさ 11 11998 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏ=== {{my-verb}} * stative verb * [[ပူႏ]] * [[ယော့ꩻ]] * [[ပွံ]] ====ဘာႏသာႏလင်==== * အိန်းကလေတ် : rise up. ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏ=== {{my-verb}} * causative verb * [[ကျွꩻ]] ====ဘာႏသာႏလင်==== * အိန်းကလေတ် : (holy or respectable persons) come or go; invite or bid farewell politely. rn10r398mmu95gicg28jwj56dlzcczk ကြွချီ 0 763 11999 2409 2025-06-23T15:20:14Z 咽頭べさ 11 11999 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏ=== {{my-verb}} * causative verb * [[ကျွꩻကာ]] * [[ကျွꩻလွေꩻ]] ====ဘာႏသာႏလင်==== * အိန်းကလေတ် : (holy or respectable persons) come or go; invite or bid farewell politely myalz9irk31kpa1ypj48rh9bjse0n7n ကြွန်ထီခိုႏ 0 765 11921 2416 2025-06-23T12:04:24Z 咽頭べさ 11 11921 wikitext text/x-wiki ==ပအိုဝ်ႏ== ===နာမ်ႏ=== {{blk-noun}} * ကြွန်ထီခိုႏ # ဟံႏထာꩻအီႏ အပွုမ်ႏအဗူႏ ကအဝ်ႏပေါ်ဒါႏထီခိုႏလောင်း။ ====နပ်တွက်ဗျာႏ==== * ဗာႏ ===ဘာႏသာႏပြန်ႏ=== *မန်း : [[ကျွန်းမျော]] * အိန်းကလေတ် : floating [[island]]. 7ffets0rrix5o6einiljwv5gbxlbzkd ကြွမြန်း 0 766 12000 2418 2025-06-23T15:20:42Z 咽頭べさ 11 12000 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏ=== {{my-verb}} * causative ver * [[ကျွꩻကာ]] * [[ကျွꩻလွေꩻ]] ====ဘာႏသာႏလင်==== * အိန်းကလေတ် : (holy or respectable persons) come or go; invite or bid farewell politely. rhawlbwrz1h5v2ybhcu6tcc4dgseib6 ကြွာႏ 0 767 11922 2421 2025-06-23T12:09:24Z 咽頭べさ 11 11922 wikitext text/x-wiki ==ပအိုဝ်ႏ== ===နာမ်ႏ=== {{blk-noun}} ===Translate=== *မြန်မာ:မျက်စိဖွင့် roog9dg5ar3moiv74tcozsyn03dtcmg ကြွဲဒီႏ 0 771 11923 2435 2025-06-23T12:09:41Z 咽頭べさ 11 11923 wikitext text/x-wiki ==ပအိုဝ်ႏ== ===အငဝ်းထန်ႏ=== ===နာမ်ႏ=== {{blk-noun}} * ကြွဲဒီႏ # အဒီႏအံႏလꩻ၊ အမွူးသွီႏမျိုꩻ [[ကြွဲ]]အဒီႏ။ ===ဘာႏသာႏလင်=== *မန်း : [[ဥမွှန်း]]ဥ၊ [[ကျွေးဖြူ]]ဥ * အိန်းကလေတ် : creeper, the root of which is edible. Pueraria tuberosa. fb2xdk928u0rre2ivhd5nare3hti5to ကွန်ႏယုင်ႏ 0 778 11924 2462 2025-06-23T12:10:20Z 咽頭べさ 11 11924 wikitext text/x-wiki ==ပအိုဝ်ႏ== ===အငဝ်းထန်ႏ=== ===နာမ်ႏ=== {{blk-noun}} * ကွန်ႏယုင်ႏ # လမ်းပါႏအနမ်းအခြုံ ကသော့ꩻအီဒါႏ ကွန်ႏတခြိုꩻ၊ သိုမ်း၊ [[ဂိုဒေါင်]]။ ====နပ်တွက်ဗျာႏ==== * ယုင်ႏ၊ ဖြုံႏ ===အငဝ်းပီလိတ်ဖြုံႏကွာႏအခရာႏဗွိုန်=== * [[ကွန်ႏယုံႏ]]၊ [[ကွန်ႏယွုံႏ]]၊ [[ကွန်ႏသိုမ်း]] ===ဘာႏသာႏပြန်ႏ=== *မန်း : [[ကုန်ရုံ]] *အိန်းကလေတ် : [[warehouse]] szw8mzpxuma6dotwiiu6qjtv86x56bv ကွန်ႏယွုံႏ 0 780 11925 2468 2025-06-23T12:10:43Z 咽頭べさ 11 11925 wikitext text/x-wiki ==ပအိုဝ်ႏ== ===အငဝ်းထန်ႏ=== ===နာမ်ႏ=== {{blk-noun}} * ကွန်ႏယွုံႏ # လမ်းပါႏအနမ်းအခြုံ ကသော့ꩻအီဒါႏ ကွန်ႏတခြိုꩻ၊ သိုမ်း၊ [[ဂိုဒေါင်]]။ ===အငဝ်းပီလိတ်ဖြုံႏကွာႏအခရာႏဗွိုန်=== * [[ကွန်ႏယုံႏ]]၊ [[ကွန်ႏယုင်ႏ]]၊ [[ကွန်ႏသိုမ်း]] ===ဘာႏသာႏပြန်ႏ=== *မန်း : [[ကုန်ရုံ]] *အိန်းကလေတ် : [[warehouse]] eobfj00r573ai1uhuwkbjgmtdrroikl ကွန်ႏသယ်ႏ 0 781 11928 2471 2025-06-23T12:39:45Z 咽頭べさ 11 11928 wikitext text/x-wiki ==ပအိုဝ်ႏ== ===အငဝ်းထန်ႏ=== ===နာမ်ႏ=== {{blk-noun}} * ကုံႏသဲႏ * [[ကုင်ႏသယ်ႏ]]၊ ကွန်ႏသယ်ႏ * [[ကားထာꩻသား]] # လွူးနမ်းမွေးသက် တောမ်ႏအဖြေꩻအစာ ကူꩻကားကွန်ႏတခြိုꩻသား။ ===ဘာႏသာႏပြန်ႏ=== *မန်း : [[ကုန်သည်]] *အိန်းကလေတ် : [[merchant]] 6f0uc6gz6elunoy2wb6edpnm1ie68b7 ကွန်ႏသိုမ်း 0 782 11929 2474 2025-06-23T12:40:04Z 咽頭べさ 11 11929 wikitext text/x-wiki ==ပအိုဝ်ႏ== ===အငဝ်းထန်ႏ=== ===နာမ်ႏ=== {{blk-noun}} * ကွန်ႏသိုမ်း # လမ်းပါႏအနမ်းအခြုံ ကသော့ꩻအီဒါႏ ကွန်ႏတခြိုꩻ၊ သိုမ်း၊ [[ဂိုဒေါင်]]။ # သိမ်ꩻသော့ꩻအွဉ်ႏသော့ꩻအီ ကွန်ႏတခြိုꩻ ခင်ႏလမ်း အနမ်းအခြုံ၊ သိုမ်း။ ====နပ်တွက်ဗျာႏ==== * သိုမ်း၊ ဖြုံႏ ===အငဝ်းပီလိတ်ဖြုံႏကွာႏအခရာႏဗွိုန်=== * [[ကွန်ႏယုံႏ]]၊ [[ကွန်ႏယွုံႏ]]၊ [[ကွန်ႏယုင်ႏ]] ===ဘာႏသာႏပြန်ႏ=== *မန်း : [[ကုန်ရုံ]] *အိန်းကလေတ် : [[warehouse]] 1xe0gsp4832rhxqv4huvaml6ku5my2z ကွန်ႏသေꩻ 0 783 11930 2477 2025-06-23T12:40:26Z 咽頭べさ 11 11930 wikitext text/x-wiki ==ပအိုဝ်ႏ== ===နာမ်ႏ=== {{blk-noun}} ===Translate=== *မြန်မာ:ကုန်သေး tjg2bc00411giisc0r3oltlt7fu72nc ကွယ်လွန် 0 789 12001 2491 2025-06-23T15:21:17Z 咽頭べさ 11 12001 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏ=== {{my-verb}} * [[သီမား]] ===ဘာႏသာႏပြန်ႏ=== * အိန်းကလေတ် : [[die]]; pass away; expire. 6r8jjo28hxnxq11ke1ceuohz9omd9or ကွို့ႏကꩻလွောန်ꩻ 0 793 11931 2503 2025-06-23T12:40:47Z 咽頭べさ 11 11931 wikitext text/x-wiki ==ပအိုဝ်ႏ== ===နာမ်ႏ=== {{blk-noun}} ===Translate=== *မြန်မာ:အိုးတိုးအင့်တင့် 8veios6gfw3xn0w9vvblc6id1o58gxp ကွီစူခူꩻ 0 794 11932 2506 2025-06-23T12:41:19Z 咽頭べさ 11 11932 wikitext text/x-wiki ==ပအိုဝ်ႏ== ===နာမ်ႏ=== {{blk-noun}} ===Translate=== *မြန်မာ:တင်တောင်း c17jb2izogudlmgqn4mpzdv44my9613 ကွီႏ 0 797 11933 2523 2025-06-23T12:42:32Z 咽頭べさ 11 11933 wikitext text/x-wiki <div style="text-align: center;">[[ဖုဲင်:ကွီႏ.jpg|left|200 px|တကွီႏအဝ်ႏအုံဗွို့ꩻသေင်ႏ]]</div> ==ပအိုဝ်ႏဘာႏသာႏ== * ကွီႏ။ * တကွီႏ။ ===နာမ်ႏ=== {{blk-noun}} * ကွီႏ။ * တကွီႏ။ # တိရစ္ဆာန်ႏတမျိုꩻ။ ====နပ်တွက်ဗျာႏ==== * ဗာႏ။ ====အခရာႏပီ လိတ်ဖြုံႏကွာႏ==== * [[လိန်ႏညောင်ႏ]] ==ဘာႏသာႏလင်== * မန်း: [[ပုတ်သင်ညို]]။ * အိန်းကလေတ်: [[chameleon]]. * ခယ်ႏ: [[变色龙]]。 [[避役]]。 1987hciphv63rugpnh21s65sedoe3og ကꩻရောင်း 0 808 11934 2556 2025-06-23T12:43:29Z 咽頭べさ 11 11934 wikitext text/x-wiki ==ပအိုဝ်ႏ== ===နာမ်ႏ=== {{blk-noun}} ===Translate=== *မြန်မာ:နှုတ်ဆက်စကား d8verm0ckiy8kfw6gac0ca9eg3984w7 ခင်ႏပုဲက်ꩻ 0 814 11935 2571 2025-06-23T12:44:50Z 咽頭べさ 11 11935 wikitext text/x-wiki ==ပအိုဝ်ႏ== ===အငဝ်းထန်ႏ=== ===နာမ်ႏ=== {{blk-noun}} * [[ခင်ႏပုဲက်ꩻ]] # ခင်ႏစွို့ꩻတဝ်းဝင်ꩻ၊ ခင်ႏလွေꩻထာꩻ ထွာဗောက်ထဲ့၊ ===ဘာႏသာႏပြန်ႏ=== *မန်း : [[တုတ်]](ခြေထောက်တရွတ်ဆွဲ) mwatsdswfqjkg8knm2gumw5z00851uk ခင်ႏဖာ 0 816 12021 2579 2025-06-24T00:41:30Z 咽頭べさ 11 12021 wikitext text/x-wiki ==ပအိုဝ်ႏ== ===နာမ်ႏ=== {{blk-noun}} * ခင်ႏဖာ # [[အခေႏခံႏ]] ===ဘာႏသာႏလင်=== *မန်း : [[အခြေခံ]] * အိန်းကလေတ် : [[basis]] ; [[foundation]]. 95yl9oyx7squ43gsgxld6isvkuxbb5g ခင်ႏရာႏစူရာႏ 0 818 12022 2595 2025-06-24T01:42:49Z 咽頭べさ 11 12022 wikitext text/x-wiki ==ပအိုဝ်ႏ== ===နာမ်ႏ=== {{blk-noun}} * ခင်ႏရာႏစူရာႏ * [[ဝါးမဲ့]] # စူခင်ႏလောင်း ယာႏလွိုအပူႏပုင်ႏစံႏ ကပေါႏလွဉ်ဒါႏ ယာႏပူႏတလွုံꩻပေႏ။ ====ဘာႏသာႏလင်==== *မန်း : [[ကြွက်နို့]] *အိန်းကလေတ် : [[wart]] devri1mmkhw39vvm5g0fd7b3eyijqn9 ခင်ႏလမ်းဗေင်ႏ 0 820 12023 2606 2025-06-24T01:43:08Z 咽頭べさ 11 12023 wikitext text/x-wiki ==ပအိုဝ်ႏ== ===နာမ်ႏ=== {{blk-noun}} * ခင်ႏလမ်းဗေင်ႏ # ဗေင်ႏသော့ꩻအီတာႏ ကမာꩻခါꩻဒါႏ အခင်ႏလမ်း၊ အဒျာအပြင်ႏ။ ===ဘာႏသာႏပြန်ႏ=== *မန်း : [[အိပ်ရာ]] *အိန်းကလေတ် : [[bed]] me6altunxcyjntvo7pj76l3xrxim1re ခင်ႏလမ်းလီး 0 821 12024 7897 2025-06-24T01:43:26Z 咽頭べさ 11 12024 wikitext text/x-wiki ==ပအိုဝ်ႏ== ===အငဝ်းထန်ႏ=== ===နာမ်ႏ=== {{blk-noun}} * ခင်ႏလမ်းလီး * [[ဝဋ်လီꩻ]] ===ဘာႏသာႏပြန်ႏ=== *မန်း : [[ဝဋ်ကြွေး]]၊ [[အတုံ့အလှည့်]] dkh228lrxxndwh05ejwuvjm22jxswdx ခတ်ႏငင်းဒေင် 0 822 12025 8018 2025-06-24T01:43:53Z 咽頭べさ 11 12025 wikitext text/x-wiki ==ပအိုဝ်ႏ== ===နာမ်ႏ=== {{blk-noun}} ====ဘာႏသာႏပြန်ႏ==== *မန်း : ခါးပိုက်ဆောင် o7odec02uawdculjoyxpwn3cpve46jh ခမ်းရာႏ 0 824 12026 2627 2025-06-24T01:44:15Z 咽頭べさ 11 12026 wikitext text/x-wiki ==ပအိုဝ်ႏ== ===အငဝ်းထန်ႏ=== ===နာမ်ႏ=== {{blk-noun}} * ခမ်းရာႏ # အွိုးထာꩻခြေင်မို့ꩻလောင်းကီ ထာꩻခွꩻလွဉ်ꩻငါႏထာꩻတဲင် ခမ်းထီဆွော့ꩻခဲꩻထွူ ကထဲ့ဟူႏလင်ꩻဒါႏ ခမ်းအထီခြုံး ခမ်းအထီလွုံꩻ၊ [[သီႏမွူးရာႏ]]။ ===ဘာႏသာႏလင်=== * မန်း : [[မိုးသီး]] * အိန်းကလေတ် : [[hailstone]]. msh1tzifzoazy7cwprkbb01yxn9hp4v ခယ်ႏ 0 827 12027 10590 2025-06-24T01:44:46Z 咽頭べさ 11 12027 wikitext text/x-wiki ==ပအိုဝ်ႏ== ===အငဝ်းထန်ႏ=== ===နာမ်ႏဆဲင်ႏလိုꩻအာ=== {{blk-noun}} * ခယ်ႏ #: -ခယ်ႏလိုꩻမျိုꩻ။ ခယ်ႏခမ်းထီ။ ====ဘာႏသာႏလင်==== * မန်း : [[တရုတ်]]။ * အိန်းကလေတ် : [[China]]. * ခယ်ႏ : [[中文]]。 7nfi0k69riub4lils5ut9fuj1go5m2u ခိုင်ꩻနက် 0 832 12028 2667 2025-06-24T01:45:23Z 咽頭べさ 11 12028 wikitext text/x-wiki ==ပအိုဝ်ႏ== ===နာမ်ႏ=== {{head|blk|နာမ်ႏ}} ===ဘာႏသာႏပြန်ႏ=== *မန်း : [[စမုန်နက်]] *အိန်းကလေတ် : black [[cumin]]; small fennel; ""Nigella sativa."" 0zu16w6zfygi14a72s52seyax0682dy ခိုးသေန်း 0 847 12029 2682 2025-06-24T01:45:44Z 咽頭べさ 11 12029 wikitext text/x-wiki ==ပအိုဝ်ႏ== ===အငဝ်းထန်ႏ=== ===နာမ်ႏ=== {{blk-noun}} * ခိုးသေန်း * [[ကသေန်း]] # နုတ်ꩻသွူဟူဖွန်ႏတွော့ꩻ ခြောင်နေးတရိုꩻတဝ်း၊ ခြောင်ꩻတဝ်းတဲ့တရိုꩻတဝ်း နျꩻထန်ႏနေးပိဉ်လီးလီး တောမ်ႏအပွိုင်ကိုတဲင် ကလꩻလွဉ်ဒါႏ တခိုးယွို့ပုင်ႏ ပိဉ်လီးလီး နုဲင်းကသွယ်ꩻ။ ====ဘာႏသာႏပြန်ႏ==== *မန်း : [[မုန့်တီ]]၊ [[ကြာဆံ]] * အိန်းကလေတ် : [[vermicelli]], [[rice]] [[noodle]]s. t02wv272u0phnm64z8fpp45fbu4tjzj ချစ် 0 916 12002 2787 2025-06-23T15:21:45Z 咽頭べさ 11 12002 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏ=== {{my-verb}} * [[ရက်]] * [[မေတ္တာႏ]]သꩻအဝ်ႏဝင်ꩻ။ ===ဘာႏသာႏပြန်ႏ=== * အိန်းကလေတ် : [[love]]: have affection hf2kp7fqt1dajq7chuzy924fh8hnl0e ချစ်ကြိုက် 0 918 12003 2789 2025-06-23T15:22:11Z 咽頭べさ 11 12003 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏ=== {{my-verb}} * [[ကျွိုက်ရက်]] ====ဘာႏသာႏလင်==== * အိန်းကလေတ် : [[fall in love]]. 710jncl5jujjis7rdz9yw304iylfvni ချစ်ခင် 0 920 12004 2791 2025-06-23T15:22:34Z 咽頭べさ 11 12004 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏ=== {{my-verb}} * compound verb * [[ရက်ပဲင်ꩻ]] * [[ဟွုန်ရက်]] # နိစ်သက်၊ မေတ္တာႏသꩻရက်အဝ်ႏ။ ====ဘာႏသာႏပြန်ႏ==== * အိန်းကလေတ် : be [[affectionate]]; be fond of; to [[love]]. lhnjrn05fy3dgmri038c8ovfccpanjo ချီးမြှောက် 0 930 12005 2806 2025-06-23T15:22:59Z 咽頭べさ 11 12005 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အထျꩻအထောင်ꩻ=== * ===ကြိယာႏ=== {{my-verb}} * [[အံႏဖြာႏ]] ===ဘာႏသာႏလင်=== * အိန်းကလေတ် : [[honour]]; exalt (with a title, etc),confer (a title, degree) on sb, decorate sb (with orders,medals,etc). pv4hv6wb6gqn0g6ergrvjakakjuwkbe ချီးမွမ်း 0 932 12006 2808 2025-06-23T15:23:26Z 咽頭べさ 11 12006 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အထျꩻအထောင်ꩻ=== * ===ကြိယာႏ=== {{my-verb}} * compound verb * [[အံႏဖြာႏ]] # ထူႏဂုဏ်ႏအံႏဖြာႏဝင်ꩻ။ ====ဘာႏသာႏလင်==== * အိန်းကလေတ် : [[praise]],speak in [[honour]] of, speak well of. aop7vs6l5w9r95vlh2ov8lq1uw599lt ခြင်ထောင် 0 940 12007 2816 2025-06-23T15:25:00Z 咽頭べさ 11 12007 wikitext text/x-wiki ==မန်း== ====အငဝ်းထန်ႏ==== {{my-IPA}} ===နာမ်ႏ=== {{my-noun}} * ချင်ႏထောင်ႏ။ * တခြေ့ရဲ။ ===ကြိယာႏ=== {{my-verb}} * ရဲတခြေ့ ==ဘာႏသာႏပြန်ႏ== *ပအိုဝ်ႏ: ချင်ႏထောင်ႏ။ တခြေ့ရဲ။ ရဲအီတခြေ့။ *အိန်းကလေတ်: [[Mosquito-net]] *ခယ်ႏ: [[蚊帐]] tblhcx2ryk8waw3qslzdmmg5kl6fvo9 ငြင်း 0 1120 12010 3143 2025-06-23T15:29:37Z 咽頭べさ 11 12010 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏ=== {{my-verb}} * simple verb * [[လွိုဆန်]] ===ဘာႏသာႏလင်=== * အိန်းကလေတ် : refuse to [[obey]]. ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏ=== {{my-verb}} * simple verb * [[အုဲင်ႏ]]တဝ်း၊ [[စူꩻ]]တဝ်း * [[ထေင်]] ===ဘာႏသာႏလင်=== * အိန်းကလေတ် : refuse to [[accept]]; [[decline]] (an offer). ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏ=== {{my-verb}} * simple verb * [[တေꩻ]]ဝင်ꩻ၊ [[တနွိုင်]]ဝင်ꩻ * [[ထေင်]]လို့ဝင်ꩻ။ ===ဘာႏသာႏလင်=== * အိန်းကလေတ် : [[argue]]; [[dispute]]. ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===နာမ်ႏ=== {{my-noun}} * simple noun * [[ထီဆေ့]]ရာႏသဲင် စတဲင် အူကလꩻဒါႏနုဲင်းပီႏ ထာꩻအူထာꩻဒုံႏတူရိယာႏတမျိုꩻ။ ===ဘာႏသာႏလင်=== * အိန်းကလေတ် : kind of [[wind]] [[instrument]]. 3rp57z9sxtl9t7jqunpmqghjft7qv5b ငြင်းခုံ 0 1121 12011 3140 2025-06-23T15:30:08Z 咽頭べさ 11 12011 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏ=== {{my-verb}} * simple verb * [[ထေင်]]လို့ဝင်ꩻ * [[တနွိုင်]]လို့ဝင်ꩻ ===ဘာႏသာႏလင်=== * အိန်းကလေတ် : [[argue]]; [[dispute]]. 8bqy3q4h99n9fp1dug7pld7nom4df6j ငြင်းဆန် 0 1122 12012 3142 2025-06-23T15:30:45Z 咽頭べさ 11 12012 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏ=== {{my-verb}} * compound verb * [[လွိုဆန်]] * [[ထေင်]]ချာ #: လွိုဆန်ချာ မွိုးဖါ။ ===ဘာႏသာႏလင်=== * အိန်းကလေတ် : refuse to [[obey]]. ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏ=== {{my-verb}} * compound verb * [[ထေင်]]ချာ * [[စူꩻ]]တဝ်း၊ [[လက်ခံႏ]]တဝ်း #: လက်ခံႏတဝ်း ကဖေႏအပ်ခါꩻဒါႏ ထာꩻမာꩻတာႏဝွန်ႏ။ ===ဘာႏသာႏလင်=== * အိန်းကလေတ် : [[refuse]] to [[accept]]. 88ks0suefk8s5rpyf0d1g2sbo5lj4rs ငြင်းဆို 0 1123 12013 3147 2025-06-23T15:31:20Z 咽頭べさ 11 12013 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏ=== {{my-verb}} * compound verb * [[ထေင်]]ချာ၊ [[ဒေါ့ꩻ]]ချာ ===ဘာႏသာႏလင်=== * အိန်းကလေတ် : [[refute]]. ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏ=== {{my-verb}} * compound verb * [[ဒေါ့ꩻ]]ချာ # မာꩻနွောင်ꩻတဝ်း ထာꩻမာꩻအခိင်ႏလွိုအကျောင်ꩻ ဒေါ့ꩻလဝ်းချာ။ ===ဘာႏသာႏလင်=== * အိန်းကလေတ် : refuse to [[obey]]. ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏ=== {{my-verb}} * compound verb * [[လက်ခံႏ]]တဝ်း * [[ထူႏ]]တဝ်း၊ [[နေး]]တဝ်း။ #: လက်ခံႏနွောင်ꩻတဝ်း တခြိုꩻလက်ဆောင်ႏအကျောင်ꩻဝွေꩻဒေါ့ꩻလဝ်းချာ။ ===ဘာႏသာႏလင်=== * အိန်းကလေတ် : refuse to [[accept]]; [[decline]](an offer). aiu77h1gxzm44ahyd5u7dlzj1i6j3rt စင်ကြယ် 0 1156 12014 3201 2025-06-23T15:31:48Z 咽頭べさ 11 12014 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏ=== {{my-verb}} * compound verb * [[ကြောင်းစင်]] * [[ဗွာစင်]] ===ဘာႏသာႏလင်=== * အိန်းကလေတ် : be free from; be [[clean]]; be [[pure]]. nwjr2pvgmn6ci2yw665y6nfdcg5kr4m စပါးလှေ့ 0 1160 12015 3205 2025-06-23T15:32:15Z 咽頭べさ 11 12015 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * Sans-ယဝ+Myan-လှေ့ ===ကြိယာႏ=== {{my-verb}} * compound verb * [[လာဗွူ]] # မာစင်ꩻ မာꩻကွင်ႏထိုꩻ ထာꩻအီႏထာꩻစျꩻ ဗွူကို။ ====ဘာႏသာႏလင်==== * အိန်းကလေတ် : [[winnow]](paddy). carwsl79xdl4s8qzwifsaxjgb13t162 စွန့်ပစ် 0 1232 12016 3324 2025-06-23T15:33:27Z 咽頭べさ 11 12016 wikitext text/x-wiki ==မန်း== ===အငေါဝ်းထန်ႏ=== {{my-IPA}} ===ကြိယာႏ=== {{my-verb}} * [[နုဲင်ႏဝေါင်း]] * [[နုဲင်းခန်း]] ===ထေခွဲꩻလိတ်ဖြုံႏ=== * [[စွန့်]] : (ကြိ) [[စွဉ်ꩻ]]။ [[ပယ်ႏ]]။ ===ငေါဝ်းရာႏ=== * [[စွန့်ပစ်ပစ္စည်း]] : ကနုဲင်းခန်းထိုꩻဒါႏတခြိုꩻ ===ဝါကျ=== * ဒီပစ္စည်းက မကောင်းတော့ဘူး စွန့်ပစ်လိုက်တော့။ : တခြိုꩻယိုနဝ်ꩻ တယံတဝ်းဒွုမ် နုဲင်ႏခန်းထိုꩻခန်းနဝ်ꩻ။ ====နပ်တွက်ဗျာႏ==== * လဲင်ႏ ==ဘာႏသာႏလင်== *ပအိုဝ်ႏ: [[နုဲင်ႏခန်း]]။ [[ဝေါင်းခန်း]]။ 8apvdbulb5p1he8lhel6t7qrzwccz6i ညို 0 1291 12090 3449 2025-06-24T02:48:43Z 咽頭べさ 11 12090 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== ===နာမဝိသေသန=== {{my-adj}} * attributive adjective * အရောင်ႏ[[အွူႏ]] ကအဝ်ႏဒါႏ။ ====ဘာႏသာႏလင်==== * အိန်းကလေတ် : [[brown]]. dvx2johpo7qjievoj14brsluy9yqmnm တစ်ဆယ် 0 1340 12085 3533 2025-06-24T02:44:10Z 咽頭べさ 11 12085 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== * {{my-IPA|တစ်'+ဆယ်}} ===ဂဏန်ꩻ=== {{head|my|ဂဏန်ꩻ}} * [[တဆီ]](အနပ်တွက်ဂဏန်ꩻ) # {{alternative form of|တဆယ်|lang=my}} ===ဘာႏသာႏပြန်ႏ=== * အဲင်းကလေတ် : [[ten]]. * ဂျပန် : [[じゅう]]、[[十]]。 kvnngd5l5v2y68slkgm3t1p06sniucf တပြေးညီ 0 1385 12116 3606 2025-06-24T03:04:02Z 咽頭べさ 11 12116 wikitext text/x-wiki ==မန်း== ===ကြိယာႏဝိသေသန=== {{my-adv}} *တငီႏချင်ႏ။ *တတွောင်းချင်ႏ။ *တခြိုက်ချင်ႏ။ *အဒုံး။ [-ဒိုင်း-] *တလဲင်ႏချင်ꩻ။ *ငီႏတရျား။ *တသွုန်တွောင်း။ [-သိုန်-] ===CHARS=== *[[တ]] :(ကြိ) ကော့ꩻမောင်ꩻ *[[ပြေး]] :(ကြိ) ဖင်း။ လွင်း။ ဒါ။ *[[ညီ]] :(နဝိ) ငီႏ။ တရျား။ (န) ဖူး။ ဖူးပေႏ။ ===WORDS=== *တပြေးညီလိုက်သည်။ :ထွေလွဉ်ꩻတလဲင်ႏချင်ꩻ။ *တပြေးညီထား။ :အွဉ်ႏတသွိုန်သွိုန်။ ===SENTS=== * : ==ဘာႏသာႏပြန်ႏ== *အိန်းကလေတ်: promptly *ပအိုဝ်ႏ: တငီႏချင်ႏ။ တတွောင်းချင်ႏ။ တခြိုက်ချင်ႏ။ *ခယ်ႏ: 立刻 64y5gmhk55qvkciw9g6c3g8oaymfew1 တား 0 1437 12017 3706 2025-06-23T15:33:52Z 咽頭べさ 11 12017 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏ=== {{my-verb}} * causative verb * [[ရဲး]] ===ဘာႏသာႏလင်=== * အိန်းကလေတ် : [[forbid]]; [[stop]]; bar; [[check]]; [[prevent]]; [[prohibit]]: rk23342s5fa1hpfcaf9jkl86ej4g0m3 တားဆီး 0 1439 12030 3708 2025-06-24T01:46:50Z 咽頭べさ 11 12030 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏ=== {{my-verb}} * compound verb * [[ရဲးပေ့ꩻ]]၊ [[ရဲး]] ===ဘာႏသာႏလင်=== * အိန်းကလေတ် : [[obstruct]]; [[block]]; [[prevent]]. 43iehjzf8sh4bywnhkr9bnjn7x2szni တားမြစ် 0 1441 12031 3710 2025-06-24T01:47:13Z 咽頭べさ 11 12031 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏ=== {{my-verb}} * compound verb * [[ရဲးပေ့ꩻ]]၊ [[ရဲး]] ===ဘာႏသာႏလင်=== * အိန်းကလေတ် : [[forbid]]; [[prohibit]]. b6jvvgydl5wf6c94p7sziavj6uu9d6u ထီး 0 1626 12032 4086 2025-06-24T01:48:25Z 咽頭べさ 11 12032 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== * {{my-IPA}} ===နာမ်ႏ=== [[ဖုဲင်:Mingun-Myanmar-04-Umbrellas.jpg|thumb|{{lang|my|ထီး}}]] {{my-noun}} * common noun # [[ထီꩻ]] ====ဘာႏသာႏပြန်ႏ==== * အင်္ဂလိပ်: [[umbrella]] *ဂျပန်: かさ。 ===ကြိယာႏ=== {{my-verb}} * simple verb * ထီး * ထီး(v) * * current # ထွာ တဖြာꩻဒျာႏ။ တဗာႏဒျာႏ။ ====ဘာႏသာႏပြန်ႏ==== * မန်း : တစ်ဦးတည်းဖြစ်သည်။ တစ်ခုတည်းဖြစ်သည်။ * အင်္ဂလိပ်: be an isolated instance. ===ဝါစင်္ဂ=== {{head|my|ဝါစင်္ဂ}} * indicating masculine gender * ထီး * အထီး>ထီး(part) * * current # ထွာအထီးအကျောင်ꩻ ကအွောန်ႏနယ်ဒါႏ ငဝ်းငွါ။ #: [[ညဝ်ႏထီး]], [[ဖိုးထီး]] ===ဘာႏသာႏပြန်ႏ=== * မန်း : # အထီးဖြစ်ကြောင်းပြသောစကားလုံး။ #: ကြောင်ထီး,ငါးထီး MED။ ၁၉၆။ * အင်္ဂလိပ်: particle suffixed to some animals and fishes to denote maleness. ===အာႏကွိုꩻ=== * {{R:my:BO}} ==ဖြဝ်ꩻ== ===အရွီးခိုႏ=== ထူႏလွူး {{bor|shn|my|ထီး}} ။ ===အငဝ်းထန်ႏ=== {{shn-pron}} ===နာမ်ႏ=== {{shn-noun}} # [[umbrella]] (common or religious/royal used) ennvz69us4fmwliybv9al320useb6f1 ထူ 0 1644 12074 11538 2025-06-24T02:38:47Z 咽頭べさ 11 12074 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===ကြိယာႏ=== {{my-verb}} * [[ကွီး]] * [[ဆွို့]][[ယွိုင်ႏ]](အလံႏ) ====ဘာႏသာႏပြန်ႏ==== * မန်း : ထူသည်။ (အလံ)စိုက်ထူသည်။ * အဲင်းကလေတ် : help a person up. [[raise]] (a flag). ===နာမဝိသေသန=== {{my-adj}} * [[ဒွုန်]] ====ဘာႏသာႏပြန်ႏ==== * မန်း : ထူသော။ * အဲင်းကလေတ် : [[thick]]. ===နာမဝိသေသန=== {{my-adj}} * [[ဉာဏ်ႏ]][[ထွိုင်ꩻ]] ====ဘာႏသာႏပြန်ႏ==== * မန်း : (ဉာဏ်)ထိုင်းသော။ * အဲင်းကလေတ် : [[dull]]; [[stupid]]. ====အာႏကွိုꩻ==== ==ဖြဝ်ꩻ== ===အငဝ်းထန်ႏ=== {{shn-pron}} ===ကြိယာႏ=== {{head|shn|ကြိယာႏ}} # [[ပွစ်]]၊ [[ပွောတ်]] # [[တွစ်]]၊ [[တွောတ်]] ====ဘာႏသာႏပြန်ႏ==== * မန်း : [[ပွတ်#ကြိယာ|ပွတ်]]သည်။ [[တိုက်#ကြိယာ|တိုက်]]သည်။ *အဲင်းကလေတ် : to [[rub]] ==စောက်ꩻ(သကော)== ===အရွီးခိုႏ=== ဝေါဟာရအရွီးခိုႏ ဗွိုန်တောမ်ႏ {{cog|pwo|ထီၫ့}}, {{cog|kyu|ꤓꤢꤧ꤭}} ယိုဖုံႏ။ ===နာမ်ႏ=== {{head|ksw|နာမ်ႏ}} # [[ခံꩻ]] ====ဘာႏသာႏပြန်ႏ==== * မန်း : [[ရွှေ]] *အဲင်းကလေတ် : [[gold]] p0ilwbpv9o1wmr524yxq3kutzpimzu8 ထောင်နှုတ်ခမ်းနင်း 0 1652 12038 4138 2025-06-24T02:08:21Z 咽頭べさ 11 12038 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏ=== {{my-verb}} * causative verb * [[ခင်ႏယမ်းထောင်ႏတပင်]] # ခွုမ်မာꩻ အပဲစ်ကထွာနွောင်ꩻဒါႏ ထာꩻမာꩻတစွိုးစွိုး။ ===ဘာသာပြန်ႏ=== * အိန်းကလေတ် : do sth which might result in being sent to jail. gurteu29mq4ufrn5gp9odafttavd0rl ထဲ 0 1656 12111 4166 2025-06-24T03:00:47Z 咽頭べさ 11 12111 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ဝိဘတ်=== {{my-prep}} * [[ကို]] # [[ကောင်းကို]] # [[အကို]] ===ဘာႏသာႏပြန်ႏ=== * အိန်းကလေတ် : postpositional marker suffixed to a noun to indicate location (equivalent in usage to prepostions '[[inside]]','[[in]]'. 5x8gsqunbym38a3ued5udl3veq1cawk ထွန် 0 1668 12039 4190 2025-06-24T02:09:19Z 咽頭べさ 11 12039 wikitext text/x-wiki ==ပအိုဝ်ႏ== ===အငဝ်းထန်ႏ=== ===နာမ်ႏ=== {{blk-noun}} * ထွန် # ဖို့ꩻလုံးထွန်တွော့ꩻ ကလꩻလွဉ်ဒါႏ အရောင်ႏဗွာ ထာꩻရာꩻတမျိုꩻ။ ====ဘာႏသာႏလင်==== * မန်း : [[ထုံး]] * အိန်းကလေတ် : lime (slaked or unslaked.) ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏ=== {{my-verb}} * causative verb * [[ထုဲင်]] # ထုဲင်ဟံႏလောင်ႏ။ ===ဘာႏသာႏလင်=== * အိန်းကလေတ် : [[harrow]], [[till]]. ===မန်း=== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===နာမ်ႏ=== {{my-noun}} * common noun * [[ထုဲင်]] # [[ထုဲင်ထိုး]]၊ [[စက်ထုဲင်]] ===ဘာႏသာႏလင်=== * အိန်းကလေတ် : harrow. azch4kxi1x80f8mohuvcqfflghp49sl ဒီ 0 1698 12129 4287 2025-06-24T03:09:25Z 咽頭べさ 11 12129 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===နာမ်ႏတင်=== {{my-pron}} # [[ယို]] ===ဘာႏသာႏပြန်ႏ=== * အဲင်းကလေတ် : [[this]]. ==အာႏကွိုꩻ== * {{R:my:BO}} p1sm9w0q35jzl9ubw787wi8891itp5y နင် 0 1739 12130 4353 2025-06-24T03:09:50Z 咽頭べさ 11 12130 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===နာမ်ႏတင်=== {{my-pron}} * personal pronoun(second person) * [[နာꩻ]] ====ဘာႏသာႏလင်==== * အိန်းကလေတ် : [[you]](used when addressing an equal or a younger person in an intimate way or to others in a impolite manner). 7suhxn87dhm0rxxgmgp87yfmlkpiubj နုတ် 0 1805 12040 4469 2025-06-24T02:10:18Z 咽頭べさ 11 12040 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏ=== {{my-verb}} * causative verb * [[ဗဲ့ꩻ]] # ကအဝ်ႏဆွို့ꩻခါꩻဒါႏထာꩻယို ငင်ႏထန်ႏ၊ ထူႏထန်ႏ။ ===ဘာႏသာႏလင်=== * 1. အိန်းကလေတ် : pull out; extract. ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏ=== {{my-verb}} * simple verb * [[ဗဲ့ꩻ]] # အဝ်ႏအအာကို ထူႏထန်ႏ နုတ်ထန်ႏထိုꩻ အဆေ့ꩻ။ ===ဘာႏသာႏလင်=== * 2.အိန်းကလေတ် : subtract; take back. ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏ=== {{my-verb}} * causative verb * [[ဗဲ့ꩻ]] # သိမ်ꩻထိုꩻ၊ အွဉ်ႏဆွိုးအုံဆွိုး ထာꩻမာꩻတာႏဝွန်ႏ။ ===ဘာႏသာႏလင်=== * 3.အိန်းကလေတ် : [[remove]]. dagtk3cizthjgzg4rr0nuewz6ftirel နေ 0 1807 12041 4471 2025-06-24T02:12:36Z 咽頭べさ 11 12041 wikitext text/x-wiki ==မန်း== {{wikipedia|lang=my}} ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===နာမ်ႏ=== {{my-noun}} * proper noun * [[မွူး]] # ကဖေႏဒါႏ အလျားဓာတ်တောမ်ႏ အလေရောင်ႏ။ ===ဘာႏသာႏလင်=== * အိန်းကလေတ် : the [[sun]]. ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏ=== {{my-verb}} * causative verb * [[အုံ]]၊ [[အုံအဝ်ႏ]] ===ဘာႏသာႏလင်=== * အိန်းကလေတ် : [[stay]]; [[live]]. ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ဝါစင်္ဂ=== * verbal affix # တစွိုးစွိုး ကမာꩻကျာꩻ အဝ်ႏထွားကျာꩻ ကအွဉ်ႏနယ်ဖေႏဒါႏ ငဝ်းငွါ။ ===ဘာႏသာႏလင်=== * အိန်းကလေတ် : particle suffixed to a verb to denote a continuing process. lwui2tvn6nq4wwktecju88qyfsvly2y နောက်ကျ 0 1830 12042 4495 2025-06-24T02:13:28Z 咽頭べさ 11 12042 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏ=== {{my-verb}} * compound verb * [[ထဲ့ဆုဲင်ꩻ]]၊ [[လဲဉ်းဆုဲင်ꩻ]] * [[တွိုႏလား]]၊ * နောက်ကျ။ ====ဘာႏသာႏလင်==== * အိန်းကလေတ် : be [[late]]. cfh9nz2hhig3o5qsfcsupxup7gafzy9 နှစ် 0 1859 12043 4573 2025-06-24T02:14:12Z 咽頭べさ 11 12043 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===ကြိယာႏ=== {{my-verb}} * [[ခံႏဆာ]] * ခံႏအနစ်နာႏ။ ===ဘာႏသာႏပြန်ႏ=== * မန်း : ဇွတ်မှိတ်လျက်နေသည်။အနစ်နာခံသည် ။ * အဲင်းကလေတ် : [[sacrifice]]. ===မန်း=== ====အငဝ်းထန်ႏ==== {{my-IPA}} ====နာမ်ႏ==== {{my-noun}} * common noun * [[နီ]](ဂဏန်ꩻ-၂)။ =====ဘာႏသာႏပြန်ႏ===== * မန်း : [[တစ်]]နှင့်[[သုံး]]အကြားရှိအရေအတွက်။ * အဲင်းကလေတ် : [[two]]. * ဂျပန် : [[に]] ===မန်း=== ====အငဝ်းထန်ႏ==== {{my-IPA}} ====နာမ်ႏ==== {{my-noun}} * simple noun * [[နေင်ႏ]]။ =====ဘာႏသာႏပြန်ႏ===== * မန်း : ဆယ့်နှစ်လရှိသော ကာလအပိုင်းအခြား။ * အဲင်းကလေတ် : [[year]]. 8lgvcquq6q4il8hnxjov615wo4s1yau နှစ်သက် 0 1867 12044 4575 2025-06-24T02:14:45Z 咽頭べさ 11 12044 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏ=== {{my-verb}} * compound verb * [[နိစ်သက်]] * [[ကျွိုက်]]၊ [[သဖော်ꩻကျ]] ===ဘာႏသာႏပြန်ႏ=== * အိန်းကလေတ် : [[love]] ; be fond; be pleased with; [[like]]. n9tu8y1rbdk4xqrz941cbq6niz1yarp နှမ်း 0 1869 12045 4578 2025-06-24T02:15:23Z 咽頭べさ 11 12045 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏ=== {{my-verb}} * stative verb * [[ဗားကွင်]] * [[ဗားမူ]] * [[ဗားသွီႏ]] * စီႏစွောက်၊ စီးစွိုင် ===ဘာႏသာႏလင်=== * အိန်းကလေတ် : be slightly [[insane]]. ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏ=== {{my-verb}} * attributive verb * အရောင်ႏ[[တမိုꩻ]]။ * သော့ꩻအရောင်ႏဆေ့ꩻဆေ့ꩻ။ ===ဘာႏသာႏလင်=== * အိန်းကလေတ် : be [[tinge]]d. ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===နာမ်ႏ=== {{my-noun}} * simple noun * [[ထေင်]] * [[နမ်]] ===ဘာႏသာႏလင်=== * အိန်းကလေတ် : [[sesame]]. ""Sesanum indicum."" svnxe846w4d8pw0l5t149jfj5bonhct နှောင်း 0 1872 12046 4588 2025-06-24T02:15:49Z 咽頭べさ 11 12046 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏ=== {{my-verb}} * simple verb * [[ထဲ့ဆုဲင်ꩻ]]၊ [[လဲဉ်းဆုဲင်ꩻ]] * [[တွိုႏလား]] ====ဘာႏသာႏလင်==== * အိန်းကလေတ် : be [[late]]. 0v2cfrjxv0izjnp6ijlpf557cvxurn8 နှေး 0 1874 12091 4590 2025-06-24T02:49:06Z 咽頭べさ 11 12091 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===နာမဝိသေသန=== {{my-adj}} * attributive adjective * [[ယွိုက်ꩻ]] # က[[ယွ]]ဒါႏ၊ သွောင်ဖွီတဝ်း၊ တမွိုင်တဝ်း။ ====ဘာႏသာႏလင်==== * အိန်းကလေတ် : [[slow]]. q5wlncpfyqae0e1ralf2cqqob2yfq8w နှေးကွေး 0 1876 12092 4592 2025-06-24T02:49:26Z 咽頭べさ 11 12092 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===နာမဝိသေသန=== {{my-adj}} * attributive adjective * [[ယွိုက်ꩻယုဲင်]] # တလျူတဝ်း၊ ကင်ဖွီတဝ်း။ ====ဘာႏသာႏလင်==== * အိန်းကလေတ် : [[sluggish]]. 4hijl04dhp9p286hdk3n4xa9u1vp5fd ပိတ်ဆို့ 0 1931 12047 4705 2025-06-24T02:16:13Z 咽頭べさ 11 12047 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏ=== {{my-verb}} * compound verb * [[ရဲးပေ့ꩻ]] * [[ပေ့ꩻရဲး]]၊ [[ပေ့ꩻ]] ===ဘာႏသာႏလင်=== * အိန်းကလေတ် : [[barricade]]; [[block]]; [[plug]]. pp8cftlu2thdktsny22yz91y88u1ft0 ပိတ်ပင် 0 1932 12048 4707 2025-06-24T02:16:36Z 咽頭べさ 11 12048 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏ=== {{my-verb}} * causative verb * [[ရဲးပေ့ꩻ]] ===ဘာႏသာႏလင်=== * အိန်းကလေတ် : [[prevent]] ; [[bar]]; [[forbid]]; [[prohibit]]. jcc6x6d9gyt6pxy3soajjliu0867y85 ပေးကမ်း 0 1957 12049 4746 2025-06-24T02:16:59Z 咽頭べさ 11 12049 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏ=== {{my-verb}} * causative verb/ compound verb * [[ဖေႏ]]၊ [[လူႏ]]၊ [[ဖေႏလူႏ]]၊ [[ဖေႏတန်ꩻ]] ===ဘာႏသာႏလင်=== * အိန်းကလေတ် : give away in [[charity]]. l9w184orxr7pd51mmmdfbwdaep5zac6 ပြည့်လျှံ 0 1968 12050 4772 2025-06-24T02:17:23Z 咽頭べさ 11 12050 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏ=== {{my-verb}} * compound verb * [[ဗွေလွန်း]] * [[လွန်း]] # ထီလွန်းထိုꩻလဲဉ်းနောင်။ အဗွေထိုꩻတွော့ꩻ ခွို့၊ ရီႏ၊ လွန်းထိုꩻ။ ===ဘာႏသာႏလင်=== * အိန်းကလေတ် : [[overflow]] ; be flooded. r7lv8ul0du8gtzf9dm43ak3yk5x5nth ပြန့်ကျယ် 0 1970 12093 4780 2025-06-24T02:49:49Z 咽頭べさ 11 12093 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===နာမဝိသေသန=== {{my-adj}} * attributive adjective * [[ဖာꩻ]] * ကလုဲင်းဝေါက်ဒါႏ # အမဲ့ငါခိုႏ လုဲင်းလွဉ်။ သေင်ႏဝါႏလာႏ တန်လုဲင်းလွဉ် ===ဘာႏသာႏပြန်ႏ=== * အိန်းကလေတ် : broad. eep131k7vqef70py3m1lb0e7h1fux72 ဖြည်းဖြည်း 0 2066 12117 4946 2025-06-24T03:04:38Z 咽頭べさ 11 12117 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏဝိသေသန=== {{my-adv}} * adverb incorporating reduplicated * [[ယွယွ]] * [[ယွယွသာႏသာႏ]] ====ဘာႏသာႏလင်==== * အိန်းကလေတ် : [[slowly]]. a29no08w1myouv52lbi9nq5fltu7qr0 ဖြည်းဖြည်းဆေးဆေး 0 2067 12118 4950 2025-06-24T03:04:59Z 咽頭べさ 11 12118 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏဝိသေသန=== {{my-adv}} * adverb incorporating reduplicated * [[ယွယွသာႏသာႏ]] # အမွိုင်တမွေးတဝ်း။ ====ဘာႏသာႏလင်==== * အိန်းကလေတ် : [[unhurriedly]]; [[leisurely]]. 233a7a83l7rhcwce0sfi3g41u3aupiy ဖြည်းဖြည်းနှေးနှေး 0 2068 12119 4952 2025-06-24T03:05:24Z 咽頭べさ 11 12119 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏဝိသေသန=== {{my-adv}} * adverb incorporating reduplicated * [[ယွယွသာႏသာႏ]] # အမွိုင်တမွေးတဝ်း။ ====ဘာႏသာႏလင်==== * အိန်းကလေတ် : [[slowly]]. dkfs9zgh9wpjrgij6i9k22e710kckpn ဖြည်းဖြည်းသာသာ 0 2070 12120 4954 2025-06-24T03:05:45Z 咽頭べさ 11 12120 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏဝိသေသန=== {{my-adv}} * adverb incorporating reduplicated * [[ယွယွသာႏသာႏ]] # အမွိုင်တမွေးတဝ်း။ ====ဘာႏသာႏလင်==== * အိန်းကလေတ် : [[gently]]; [[softly]]. 7w3czups7bic7x5rzk5f9y0gh7nvm23 ဖြူ 0 2072 12094 11130 2025-06-24T02:50:29Z 咽頭べさ 11 12094 wikitext text/x-wiki ==မန်း== [[File:Wroclaw zoo 04 jezozwierz indyjski.jpg|thumb|သွုန်ႏ]] ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===နာမ်ႏ=== {{my-noun}} * simple noun * [[သွုန်ႏ]] # နမ်းလောင်း အဆွဉ်ႏအဆူႏကအဝ်ႏဒါႏ ထာꩻသားပေႏမျိုꩻ။ ====ဘာႏသာႏလင်==== * အိန်းကလေတ် : [[porcupine]]. ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===နာမဝိသေသန=== {{my-adj}} * attributive adjective * [[ဗွာစင်]] ====ဘာႏသာႏလင်==== * အိန်းကလေတ် : [[pure]]. ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===နာမဝိသေသန=== {{my-adj}} * attributive adjective * [[ဗွာ]] ====ဘာႏသာႏလင်==== * အိန်းကလေတ် : [[white]]; [[fair]] . qpic08vv9qyanmk5kkvi2wsewppmvf0 ဗီယက်နမ် 0 2093 12095 5012 2025-06-24T02:51:48Z 咽頭べさ 11 12095 wikitext text/x-wiki ==ပအိုဝ်ႏ== ===အငဝ်းထန်ႏ=== ===နာမ်ႏ=== {{blk-noun}} * ဗီယက်နမ် # အာသျခဝ်တွို့ꩻနဝ်ကို ကအဝ်ႏဒါႏ ခမ်းတခမ်း။ #: ဗီယက်နမ်ခမ်းထီ၊ ဗီယက်နမ်လိုꩻမျိုꩻ၊ ဗီယက်နမ်ခမ်းသား၊ ဗီယက်နမ်ဘာႏသာႏ။ ====ဘာႏသာႏလင်==== * အိန်းကလေတ် : [[Vietnam]], [[Vietnamese]]. ==မန်း== {{wikipedia|lang=my}} ===အငဝ်းထန်ႏ=== {{my-IPA}} ===နာမ်ႏ=== {{my-noun}} * [[ဗီယက်နမ်]] ====ဘာႏသာႏလင်==== * အိန်းကလေတ် : [[Vietnam]], [[Vietnamese]] ===နာမဝိသေသန=== # ကဆဲင်ႏဒါႏတောမ်ႏဗီယက်နမ် ====ဘာႏသာႏလင်==== * မန်း : ဗီယက်နမ်နှင့်ဆိုင်သော။ g43eo86kdtoc2sbrgg0v0wc6bg5ymmm ဘက်လိုက် 0 2126 12051 5087 2025-06-24T02:18:01Z 咽頭べさ 11 12051 wikitext text/x-wiki ==မန်း== ===ကြိယာႏ=== {{my-verb}} * အုံလွောက်ꩻပိဉ်ဖဲ့ꩻထာꩻ ==ဘာႏသာႏလင်== *အိန်းကလေတ်: [[bias]] *ပအိုဝ်ႏ: [[လွောက်ꩻပိဉ်ဖဲ့ꩻထာꩻ]] *ခယ်ႏ: [[偏见]] 2c7g2kmwehmsiaxa2mhdh2phd5gj5oa ဘယ်တုန်းက 0 2127 12131 5091 2025-06-24T03:10:19Z 咽頭べさ 11 12131 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===နာမ်ႏတင်=== {{my-pron}} * interrogative pronoun * * [[မုဲင်ꩻခါ]] # ငဝ်းငွါ ဒေါ့ꩻယီးနယ်လွေꩻ ကထွာထွူလဲဉ်းဒါႏ အခိင်ႏအတိတ်ကာႏလ။ ====ဘာႏသာႏပြန်ႏ==== * အိန်းကလေတ် : [[when]](referring to the past). gkbizjith7zju5uz3frc0uxhvqmxlni ဘယ်တော့ 0 2128 12121 5094 2025-06-24T03:06:13Z 咽頭べさ 11 12121 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏဝိသေသန=== {{my-adv}} * interrogative adverb * [[မုဲင်ꩻခါ]] # ငဝ်းငွါ ဒေါ့ꩻယီးနယ်လွေꩻ အခိင်ႏကာႏလအတိတ်။ ====ဘာႏသာႏပြန်ႏ==== * အိန်းကလေတ် : [[when]]. ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===နာမ်ႏတင်=== {{my-pron}} * interrogative pronoun * [[မုဲင်ꩻခါ]] # အရီငဝ်းငွါ ဒေါ့ꩻယီးနယ်လွေꩻ အခိင်ႏကာႏလအနာႏဂါတ်။ ====ဘာႏသာႏပြန်ႏ==== * အိန်းကလေတ် : [[when]]. 6730c951ippznx1ebm7l2qi6s5l0vsh ဘယ်နံရောအခါ 0 2129 12132 5100 2025-06-24T03:10:44Z 咽頭べさ 11 12132 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===နာမ်ႏတင်=== {{my-pron}} * demonstrative pronoun * [[မုဲင်ꩻခါ]] # ငဝ်းငွါ ဒေါ့ꩻယီးနယ်လွေꩻ အခိင်ႏကာႏလတခိင်ႏခိင်ႏ(အတိတ် တဝ်းလဲ့ အနာႏဂါတ်)။ ===ဘာႏသာႏပြန်ႏ=== * အိန်းကလေတ် : [[when]](referring to the past or future). jqr9l8dlaj6bljqpggfh5yxem2ebd99 ဘယ်သူဘယ်ဝါ 0 2130 12133 5102 2025-06-24T03:11:03Z 咽頭べさ 11 12133 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===နာမ်ႏတင်=== {{my-pron}} * personal pronoun(third person) * [[ပါꩻအဖြာꩻမုဲင်ꩻ]] * [[ပါမုဲင်ꩻ]]၊ [[ပိုမုဲင်ꩻ]] ===ဘာႏသာႏပြန်ႏ=== * အိန်းကလေတ် : [[who]]. 3zrsv68x3eh1961p2ays9vur6sko2pm ဘာ 0 2132 12096 5104 2025-06-24T02:52:25Z 咽頭べさ 11 12096 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===နာမဝိသေသန=== {{my-adj}} * interrogative adjective * [[တမုဲင်ꩻ]] ====ဘာႏသာႏပြန်ႏ==== * အိန်းကလေတ် : [[what]]. ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===နာမ်ႏတင်=== {{my-pron}} * [[တမုဲင်ꩻ]] ===ဘာႏသာႏပြန်ႏ=== * အိန်းကလေတ် : what. rf83slqry4xpkds849u1mwhopt60jxa ဘုန်းကြီး 0 2142 12052 5125 2025-06-24T02:18:37Z 咽頭べさ 11 12052 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * Sans-ဘဂ+Myan-ကြီး ===ကြိယာႏ=== {{my-verb}} * [[ဘွုံꩻတန်]] ===ဘာႏသာႏလင်=== * အိန်းကလေတ် : be very powerful; wield a lot of weight. ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * Sans-ဘဂ+Myan-ကြီး ===နာမ်ႏ=== {{my-noun}} * [[ဗွေႏဗိုန်]] * ရဟန်ႏတောႏ ===ဘာႏသာႏလင်=== * အိန်းကလေတ် : [[monk]]. chk4lprkt4pzx4fls9nevyk87i1qe25 မည်သူ 0 2156 12134 5152 2025-06-24T03:11:23Z 咽頭べさ 11 12134 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===နာမ်ႏတင်=== {{my-pron}} * interrogative pronoun * [[ပါမုဲင်ꩻ]] * [[ပိုမုဲင်ꩻ]]၊ [[တမုဲင်ꩻ]] ===ဘာႏသာႏပြန်ႏ=== * အိန်းကလေတ် : [[who]]. nmyedy6hry1lgawc2eymdnyzl6i26di မည်း 0 2158 12097 5154 2025-06-24T02:52:46Z 咽頭べさ 11 12097 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===နာမဝိသေသန=== {{my-adj}} * attributive adjective * [[ဖြေင်း]] * [[ကဖြေင်း]] # အရောင်ႏအဝ်ႏနုဲင်းဒါႏ မေႏသွာႏ။ ===ဘာႏသာႏလင်=== * အိန်းကလေတ် : [[black]]; [[dark]]. ensa1ufe08lqz8ax3tg64hsgl9o99rw မလွှဲရှောင်သာသော 0 2168 12098 8209 2025-06-24T02:53:16Z 咽頭べさ 11 12098 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== * ===နာမဝိသေသန=== {{my - adjective}} * မလွှဲသာမရှောင်သာသော။ * ရှောင်ရှား-ရှောင်ဖယ်-ရှောင်လွဲ-၍မရနိုင်သော။ * မရှောင်နိုင်သော။ မလွှဲသာသော။ * မလွှဲမရှောင်နိုင်။ {{blk - adjective}} * [[ထိုꩻမလꩻလဲ့ꩻမလွစ်]]။ (Idom) * [[ထိုꩻမပုဲင်း ဖုဲင်းမလွစ်]]။ (idom) * [[လဲ့ꩻသျောင်ႏထိုꩻတလꩻတဝ်း]]။ * [[ထိုꩻဖုဲင်းထိုꩻတလꩻတဝ်း]]။ # မော့ꩻလွဉ် ကိစ္စတစွိုးတမျိုꩻတဲင် လဲ့ꩻဖုဲင်ႏတရွို့ꩻထိုꩻတလꩻတဝ်းအခေႏနေႏ။ ===ကြိယာႏဝိသေသန=== {{my - adverb}} * [[မလွှဲမရှောင်သာ]]။ ====နပ်တွက်ဗျာႏ==== * လဲင်ႏ၊ ခြွိုက်။ ===ဘာႏသာႏလင်=== * ပအိုဝ်ႏ: [[ထိုꩻမလꩻလဲ့ꩻမလွစ်]]။ * အိန်းကလေတ်: [[unavoidable]]. * ခယ်ႏ: [[在所难免]]<br>PY: <b>zài suǒ nán miǎn</b> 4kxsm309f8yp72yw6prh1vgwozczjp1 12099 12098 2025-06-24T02:53:54Z 咽頭べさ 11 12099 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== * ===နာမဝိသေသန=== {{my-adj}} * မလွှဲသာမရှောင်သာသော။ * ရှောင်ရှား-ရှောင်ဖယ်-ရှောင်လွဲ-၍မရနိုင်သော။ * မရှောင်နိုင်သော။ မလွှဲသာသော။ * မလွှဲမရှောင်နိုင်။ {{blk-adjective}} * [[ထိုꩻမလꩻလဲ့ꩻမလွစ်]]။ (Idom) * [[ထိုꩻမပုဲင်း ဖုဲင်းမလွစ်]]။ (idom) * [[လဲ့ꩻသျောင်ႏထိုꩻတလꩻတဝ်း]]။ * [[ထိုꩻဖုဲင်းထိုꩻတလꩻတဝ်း]]။ # မော့ꩻလွဉ် ကိစ္စတစွိုးတမျိုꩻတဲင် လဲ့ꩻဖုဲင်ႏတရွို့ꩻထိုꩻတလꩻတဝ်းအခေႏနေႏ။ ===ကြိယာႏဝိသေသန=== {{my-adverb}} * [[မလွှဲမရှောင်သာ]]။ ====နပ်တွက်ဗျာႏ==== * လဲင်ႏ၊ ခြွိုက်။ ===ဘာႏသာႏလင်=== * ပအိုဝ်ႏ: [[ထိုꩻမလꩻလဲ့ꩻမလွစ်]]။ * အိန်းကလေတ်: [[unavoidable]]. * ခယ်ႏ: [[在所难免]]<br>PY: <b>zài suǒ nán miǎn</b> 4m3h4a044iruuctapvs3t50cclkza51 12102 12099 2025-06-24T02:55:29Z 咽頭べさ 11 12102 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===နာမဝိသေသန=== {{my-adj}} * မလွှဲသာမရှောင်သာသော။ * ရှောင်ရှား-ရှောင်ဖယ်-ရှောင်လွဲ-၍မရနိုင်သော။ * မရှောင်နိုင်သော။ မလွှဲသာသော။ * မလွှဲမရှောင်နိုင်။ {{blk-adjective}} * [[ထိုꩻမလꩻလဲ့ꩻမလွစ်]]။ (Idom) * [[ထိုꩻမပုဲင်း ဖုဲင်းမလွစ်]]။ (idom) * [[လဲ့ꩻသျောင်ႏထိုꩻတလꩻတဝ်း]]။ * [[ထိုꩻဖုဲင်းထိုꩻတလꩻတဝ်း]]။ # မော့ꩻလွဉ် ကိစ္စတစွိုးတမျိုꩻတဲင် လဲ့ꩻဖုဲင်ႏတရွို့ꩻထိုꩻတလꩻတဝ်းအခေႏနေႏ။ ===ကြိယာႏဝိသေသန=== {{my-adverb}} * [[မလွှဲမရှောင်သာ]]။ ====နပ်တွက်ဗျာႏ==== * လဲင်ႏ၊ ခြွိုက်။ ===ဘာႏသာႏလင်=== * ပအိုဝ်ႏ: [[ထိုꩻမလꩻလဲ့ꩻမလွစ်]]။ * အိန်းကလေတ်: [[unavoidable]]. * ခယ်ႏ: [[在所难免]]<br>PY: <b>zài suǒ nán miǎn</b> 2gaaehphpb65397za69xgdc1s5gkwg0 မလွှဲသာမရှောင်သာ 0 2173 12103 8211 2025-06-24T02:56:10Z 咽頭べさ 11 12103 wikitext text/x-wiki ==မန်း== * မလွှဲသာမရှောင်သာသော။ ===အငဝ်းထန်ႏ=== {{my-IPA}} ===နာမဝိသေသန=== {{my-adjective}} * မလွှဲသာမရှောင်သာသော။ * ရှောင်ရှား-ရှောင်ဖယ်-ရှောင်လွဲ-၍မရနိုင်သော။ * မရှောင်နိုင်သော။ မလွှဲသာသော။ * မလွှဲမရှောင်နိုင်။ ** [[ထိုꩻမလꩻလဲ့ꩻမလွစ်]]။ (Idom) ** [[ထိုꩻမပုဲင်း ဖုဲင်းမလွစ်]]။ (idom) ** [[လဲ့ꩻသျောင်ႏထိုꩻတလꩻတဝ်း]]။ ** [[ထိုꩻဖုဲင်းထိုꩻတလꩻတဝ်း]]။ # မော့ꩻလွဉ် ကိစ္စတစွိုးတမျိုꩻတဲင် လဲ့ꩻဖုဲင်ႏတရွို့ꩻထိုꩻတလꩻတဝ်းအခေႏနေႏ။ ---- ===ကြိယာႏဝိသေသန=== {{my-adverb}} * [[မလွှဲမရှောင်သာ]]။ ====နပ်တွက်ဗျာႏ==== * လဲင်ႏ၊ ခြွိုက်။ ===ဘာႏသာႏလင်=== * ပအိုဝ်ႏ: [[ထိုꩻမလꩻလဲ့ꩻမလွစ်]]။ * အိန်းကလေတ်: [[unavoidable]]. * ခယ်ႏ: [[在所难免]]<br>PY: <b>zài suǒ nán miǎn</b> 67pff78ogvibfevj4ur9ypfcb16ws3c မာ 0 2178 12108 5215 2025-06-24T02:59:36Z 咽頭べさ 11 12108 wikitext text/x-wiki ==ပအိုဝ်ႏ== ===အငဝ်းထန်ႏ=== * {{audio|blk|Blk-မာ.wav}} ===နာမ်ႏ=== {{head|blk|နာမ်ႏ}} * မာ * [[မာမူႏ]]၊ [[လမ်းသားမူႏ]]။ # လိုꩻမူႏတွမ်ႏလိုꩻခိုကထွိုင်ႏနေးထူႏတောႏလမ်းဝင်ꩻထွူ လိုꩻမူႏကထွာဖေႏဒါႏ ဝင်ꩻ'''မာ'''၊ ထွာဖေႏလမ်းသားမူႏနဝ်ꩻသွူ။ ====နပ်တွက်==== * ဖြာꩻ ====အခရာႏပီ လိတ်ဖြုံႏကွာႏ==== * [[မာဖြား]]၊ [[လမ်းသား]] ====ချာႏဘာႏသာႏအလင်==== * အေင်ႏကလေတ် : [[wife]] * မန်း : [[မိန်းမ]]၊ [[ဇနီး]]၊ [[မယား]]။ ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===နာမဝိသေသန=== {{my-adj}} * attributive adjective * [[ခြွိုင်ႏသန်ꩻ]] * ထာꩻဆာဝွေႏဒနာႏကင်ꩻ။ ====ဘာႏသာႏလင်==== * အိန်းကလေတ် :[[healthy]]. ---- ===နာမဝိသေသန=== {{my-adj}} * attributive adjective * [[ကဆွော့ꩻ]] # ကဆွော့ꩻကတဲ့ꩻ ခွေါင်မွေးဒါႏ။ ထာꩻပနဲဉ်ႏ တမွေးတဝ်းဒါႏ။ ====ဘာႏသာႏလင်==== * အိန်းကလေတ် :[[hard]]; [[firm]]; [[stiff]]. orzy1uald09ldu0g9xlxoztfn1tu3de မိုးကြိုးပစ် 0 2202 12053 5249 2025-06-24T02:19:13Z 咽頭べさ 11 12053 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===နာမ်ႏ=== {{my-noun}} * compound noun * [[ငဝ်းစိန်ႏစာႏ]]၊ [[ငဝ်းထောမ်]] * [[တျာႏဆေႏ]] ===ဘာႏသာႏပြန်ႏ=== * အိန်းကလေတ် : swear-word meaning may lightning strike me. ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏ=== {{my-verb}} * compound verb * [[တျာႏဆေႏ]]ထာꩻ။ ===ဘာႏသာႏပြန်ႏ=== * အိန်းကလေတ် : (of lightning)strike. oqn9f7nbho95ngyyw3h3dt768la7t93 မိုးရွာ 0 2203 12054 5253 2025-06-24T02:19:50Z 咽頭べさ 11 12054 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏ=== {{my-verb}} * compound verb * [[ခမ်းလော့]] ===ဘာႏသာႏလင်=== * အိန်းကလေတ် : [[rain]]. b1ukc2aomt2k5acqu4im2h3m0ygdfj6 မိုးသောက် 0 2205 12055 5259 2025-06-24T02:20:30Z 咽頭べさ 11 12055 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===နာမ်ႏ=== {{my-noun}} * compound noun * မိုး(n)+သောက်(v) * [[အာႏရုဏ်ႏထန်ႏ]] * မို့ꩻလေဗွာ၊ ထာꩻ[[လေဗွာ]](မွူးရဝ်ꩻခိုႏခိင်ႏ) ===ဘာႏသာႏလင်=== * အိန်းကလေတ် : [[dawn]]; [[daybreak]]. ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏ=== {{my-verb}} * compound verb * မို့ꩻ[[လေဗွာ]](မွူးရဝ်ခိုႏစဝ်း) * [[အာႏရုဏ်ႏထန်ႏ]] ===ဘာႏသာႏလင်=== * အိန်းကလေတ် : [[dawbreaks]]. j6brezhsg5pm85l73dbhh6lkap8wtqu မီ 0 2210 12056 5268 2025-06-24T02:21:05Z 咽頭べさ 11 12056 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===ဝါစင်္ဂ=== * [[ခလား]] #: ခလားကစာ၊ ခလားကအံႏ။ ====ဘာႏသာႏပြန်ႏ==== * မန်း : (မ)နှင့်တွဲ၍အချိန်မတိုင်သေးခင်အနက်ဖြင့်ထောက်ပံ့သောစကားလုံး။ မရောင်းစားမီ။ * အင်္ဂလိပ်: [[before]]; prior to. ===ကြိယာႏ=== {{my-verb}} # [[ထွꩻ]]လꩻ #: ထူႏထွꩻ၊ လွေꩻထွꩻ။ ====ဘာႏသာႏပြန်ႏ==== * မန်း : လှမ်း၍ရောက်နိုင်၊ ထိနိုင်သည်။ * အဲင်းကလေတ် : be within (reach, time, limit). ===အာႏကွိုꩻ=== ==ဖြဝ်ꩻ== ===အရွီးခိုႏ=== အဝ်ႏ {{inh|shn|tai-pro|*ʰmwɯjᴬ|t=bear}} လွဉ်။ ဝေါဟာရအရွီးခိုႏ ဗွိုန်တောမ်ႏ {{cog|th|หมี}}, {{cog|nod|ᩉ᩠ᨾᩦ}}, {{cog|lo|ໝີ}}, {{cog|khb|ᦖᦲ}}, {{cog|blt|ꪢꪲ}}, {{cog|aho|𑜉𑜣}}, {{cog|za|mui}}, {{cog|pcc|moil}} ယိုဖုံႏ။ ===အငဝ်းထန်ႏ=== {{shn-pron}} ===နာမ်ႏ=== {{shn-noun}} [[ထံ]]၊ [[ထမ်]] (ထာꩻသား) ===ဘာႏသာႏပြန်ႏ=== * မန်း : [[ဝက်ဝံ]] * အဲင်းကလေတ် : [[bear]] cmt47fne6mpmvdpds94jstn9cp92d51 မီးဖို 0 2217 12058 5276 2025-06-24T02:23:23Z 咽頭べさ 11 12058 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== ===နာမ်ႏ=== {{my-noun}} # [[မေႏဖာႏ]] ===ဘာႏသာႏပြန်ႏ=== * အဲင်းကလေတ် : [[kitchen]]. ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏ=== {{my-verb}} # [[အူမေႏ]]၊ [[တော့ꩻမေႏ]]။ ===ဘာႏသာႏပြန်ႏ=== * အဲင်းကလေတ် : make or build a fire. svda0ccjewvr1gubfzgk0fjrju42p56 မြန်မာ 0 2305 12138 9807 2025-06-24T03:13:12Z 咽頭べさ 11 12138 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== * {{IPA2|/mjəmà/}} * {{MLCTS|/mjɑːnˈmɑr/}} ===အရွီးခိုႏ=== * အဝ်ႏ {{unc|my}}. {{bor|my|sa|ब्रह्मादेश}} လွဉ် ထွာနွောင်ꩻ။ ပွိုင်းလဲင်ႏခါ တဲမ်းသုင်ꩻဒါႏ လိတ်ဖြုံႏမူဖြယ်ဖုံႏကို {{l|my|မြမ္မာ}} တောမ်ႏ {{l|my|မြံမာ}} ဖုံႏ အဝ်ႏပါနဝ်ꩻသွူ။ ===နာမ်ႏဆဲင်ႏတဖြာꩻ=== {{head|my|နာမ်ႏဆဲင်ႏတဖြာꩻ}} # [[မျန်မာ]]။ ====အခရာႏပီ လိတ်ဖြုံႏကွာႏ==== * [[ဗမာ]] ====ဘာႏသာႏလင်==== * အိန်းကလေတ် : [[Myanmar]] lbcbeik6p9zjt6vkuvstozfodhw3jzw 12139 12138 2025-06-24T03:14:01Z 咽頭べさ 11 12139 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * အဝ်ႏ {{unc|my}}. {{bor|my|sa|ब्रह्मादेश}} လွဉ် ထွာနွောင်ꩻ။ ပွိုင်းလဲင်ႏခါ တဲမ်းသုင်ꩻဒါႏ လိတ်ဖြုံႏမူဖြယ်ဖုံႏကို {{l|my|မြမ္မာ}} တောမ်ႏ {{l|my|မြံမာ}} ဖုံႏ အဝ်ႏပါနဝ်ꩻသွူ။ ===နာမ်ႏဆဲင်ႏတဖြာꩻ=== {{head|my|နာမ်ႏဆဲင်ႏတဖြာꩻ}} # [[မျန်မာ]]။ ====အခရာႏပီ လိတ်ဖြုံႏကွာႏ==== * [[ဗမာ]] ====ဘာႏသာႏလင်==== * အိန်းကလေတ် : [[Myanmar]] ev2b6hl9k0xpij65bitsr5a33m63evo မြှင့်တင် 0 2317 12059 5458 2025-06-24T02:23:46Z 咽頭べさ 11 12059 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏ=== {{my-verb}} * compound verb * [[ပင်ႏထို]]၊ [[မာꩻထို]] * [[ပင်ႏတသွောင်း]] ===ဘာႏသာႏလင်=== * အိန်းကလေတ် : [[raise]]; elevate. gphdtsls6ysc49hf5qdar9m1ztmj221 ရိုးရှင်း 0 2419 12105 5669 2025-06-24T02:57:50Z 咽頭べさ 11 12105 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== * ယိုးဆိဉ်း {{my-IPA}} ===နာမဝိသေသန=== {{my-adj}} * ရိုꩻသာꩻ * သျင်ꩻလျင်ꩻ။ * ဖြွောင်ႏဒွေါင်ႏ။ #သျုတ်တရေင်တဝ်း။ ===CHARS=== * [[ရိုး]] : ရိုꩻရိုꩻ။ အဆွတ်ꩻ။ * [[ရှင်း]]။ : သျင်ꩻ။ ဖျိုး။ ===WORDS=== * ရိုးရှင်းသောဘဝ : ဘဝရိုꩻရိုꩻသာꩻသာꩻ * ရိုးရှင်းသောဝါကျ : ဝါကျရိုꩻရိုꩻသာꩻသာꩻ ===SENTS=== * ဒီကိစ္စက ဒီလောက်ထိမရိုးရှင်းဘူး။ : ကိစ္စယိုနဝ်ꩻ ရိုꩻရိုꩻသာꩻသာꩻတမွေးတဝ်း။ ==ဘာႏသာႏပြန်ႏ== *အိန်းကလေတ်: [[simple]]. *ပအိုဝ်ႏ: ရိုꩻသာꩻ။ ရိုꩻရိုꩻ။ *ခယ်ႏ: 简单〔簡單〕 a7mnd55vyz2hmpthkfm6q7tkens3o8y ရုရှား 0 2422 12140 5685 2025-06-24T03:14:36Z 咽頭べさ 11 12140 wikitext text/x-wiki ==မန်း== ===အရွီးခိုႏ=== ထူႏလွူး {{bor|my|en|Russia}}။ ===အငဝ်းထန်ႏ=== * {{my-IPA|*ရုရှား}} ===နာမ်ႏဆဲင်ႏတဖြာꩻ=== {{head|my|နာမ်ႏဆဲင်ႏတဖြာꩻ}} * [[ရသျား]] * [[ရုသျား]] ====ဘာႏသာႏလင်==== * အိန်းကလေတ် : [[Russia]], [[Russian]]. lltu5hf9gzj7tfnk3j1e4qajo3shl5a ရူး 0 2426 12060 5694 2025-06-24T02:24:21Z 咽頭べさ 11 12060 wikitext text/x-wiki ==ပအိုဝ်ႏ== ===အငဝ်းထန်ႏ=== ===နာမ်ႏ=== {{blk-noun}} * ရူး (n) # စူခင်ႏတပါတဝ်း တသျာꩻ[[လွေꩻ]]အီနေးဒါႏ တောမ်ႏအနမ်း၊ အနမ်းယွေးဆွာꩻ၊ [[အံႏ]]ဒါႏထာꩻသꩻသား [[သတ္တဝါႏ]]တမျိုꩻ။ ===ဘာႏသာႏပြန်ႏ=== * မန်း : [[မြွေ]] * အဲင်းကလေတ် : [[snake]]. ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏ=== {{my-verb}} # [[ဗား]]၊ သꩻဖောက်ပြန်ႏ။ ====ဘာႏသာႏပြန်ႏ==== * အဲင်းကလေတ် : [[mad]]; insane. ====အာႏကွိုꩻ==== {{R:my:BO}} n7ehklcdx8311wzl4n0dqh9s476lg9c ရေချိုး 0 2432 12061 5696 2025-06-24T02:24:46Z 咽頭べさ 11 12061 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏ=== {{my-verb}} * causative verb * [[လူးထီ]] ===ဘာႏသာႏလင်=== * အိန်းကလေတ် : [[bathe]]; [[wash]]. 98urt6s4krt4k69audvcpf27pqdyse1 လက်သည်းထိုး 0 2464 12062 5772 2025-06-24T02:25:12Z 咽頭べさ 11 12062 wikitext text/x-wiki ==မန်း== ===အငေါဝ်းထန်ႏ=== {{my-IPA}} ===ကြိယာႏ=== * ခြဲတ်ꩻစူမီႏ ===CHARS=== * [[လက်]] : (န) စူ * [[သည်း]] : (နဝိ) လော့တန် * [[ထိုး]] : ခြဲတ်ꩻ။ ထိုး။ တိုပ်ꩻ။ ဆဲ့ꩻ။ ==ဘာႏသာႏပြန်ႏ== *အိန်းကလေတ်: [[manicure]] *ပအိုဝ်ႏ: ခြဲတ်ꩻစူမီႏ 0hxwl53jf78xxqyfhus6os20bl2vw5s လာ 0 2483 12063 10426 2025-06-24T02:26:05Z 咽頭べさ 11 12063 wikitext text/x-wiki ==ပအိုဝ်ႏ== ===အငဝ်းထန်ႏ=== ===ကြိယာႏ=== {{blk-noun}} * လာ # မာꩻစင်၊ မာꩻကွင်ႏထိုꩻ ထာꩻအီႏထာꩻစျꩻဖုံႏ ဗွူစတဲင်ဖုံႏအကို တောမ်ႏတလီꩻ။ #: -ဗွူနဝ်ꩻ ပို့ꩻထွူ အဝွေႏငါႏ '''လာ'''ဒွိုန်းကမꩻ ကွဲးသော့ꩻ တခီအိတ်ကိုနေား။ [[လာဗွူ]]။ ====ဘာႏသာႏလင်==== * မန်း : [[လှေ့]]သည် * အိန်းကလေတ် : [[winnow]]. ===အရွီးခိုႏ=== အဝ်ႏ {{inh|blk|kar-pro|*ˀlaᴬ||moon; month}} {{inh|blk|sit-pro|*s/ɡ-la||moon; month}} လွဉ်။ ဝေါဟာရအရွီးခိုႏ ဗွိုန်ပီတောမ်ႏ {{cog|ksw|လါ}}, {{cog|pwo|လၩ}}, {{cog|kjp|လာ}}, {{cog|kyu|ꤜꤢꤧ꤭}}, {{cog|my|လ}} ယိုဖုံႏ။ ===နာမ်ႏ=== {{blk-noun}} * လာ # နေင်ႏတနေင်ႏအကို အခိင်ႏကာႏလ ၁၂ ပွန်း ၁ ပွန်း ကအဝ်ႏဒါႏ အခိင်ႏကာႏလတခူးတခဝ်။ #: - ၁၂ လာ ထွာတနေင်ႏ။ ====နပ်တွက်==== * လာ ====ဘာႏသာႏလင်==== အိန်းကလေတ် : [[month]]. ---- ===နာမ်ႏ=== {{blk-noun}} * လာ # ကအဝ်ႏလေပ်ပတ်ဗဲဉ်ဒါႏ ကမ္ဘာႏဟံႏထွူ ထူႏသွူမွူးရောင်ႏတွော့ꩻ ကအွဉ်ႏခပြန်ႏချာဖေႏဒါႏအရောင်ႏ(ရောင်ပြန်ဟပ်) ကမ္ဘာႏဟံႏအလောင်း သဘာႏဝဂျိုဟ်ႏတန်။ တနင်ꩻလာႏဂျိုဟ်ႏ။ ====နပ်တွက်==== * လာ ====သင်္ကေႏတ==== *[[☽]], [[☾]] ====ဘာႏသာႏလင်==== အိန်းကလေတ် : [[moon]]. ==မန်း== ===အငဝ်းထန်ႏ=== * {{MLCTS|/la/}} ===ဝါစင်္ဂ=== * verbal affix * [[လွဉ်]] ====ဘာႏသာႏလင်==== * အိန်းကလေတ် : Word suffixed to a verb to convey the notion of beginning sth (equivalent in usage to verbs 'begin' 'start', 'etc'). ===ကြိယာႏ=== {{my-verb}} * causative verb * မာꩻနွောင်ꩻထဲင်းက ကထင်းခါꩻ။ ====ဘာႏသာႏလင်==== * အိန်းကလေတ် : come up to more than expected. ===ကြိယာႏ=== {{my-verb}} * causative verb * [[လွဉ်]] * [[လွောန်]] # အဝ်ႏရပ်ခင်ႏလမ်းအလင် တထွောင်းထွောင်းကို မိုးထေ့ရုဲင်ꩻထေ့ နမ်းခင်ႏလမ်းထျꩻ။ ====ဘာႏသာႏလင်==== * အိန်းကလေတ် : [[come]]. * ဂျပန် : [[来る]]. p296kiwj2vhf4jc350u0fl4j6fyh4p2 12066 12063 2025-06-24T02:30:10Z 咽頭べさ 11 12066 wikitext text/x-wiki ==ပအိုဝ်ႏ== ===အငဝ်းထန်ႏ=== ===ကြိယာႏ=== {{blk-noun}} * လာ # မာꩻစင်၊ မာꩻကွင်ႏထိုꩻ ထာꩻအီႏထာꩻစျꩻဖုံႏ ဗွူစတဲင်ဖုံႏအကို တောမ်ႏတလီꩻ။ #: -ဗွူနဝ်ꩻ ပို့ꩻထွူ အဝွေႏငါႏ '''လာ'''ဒွိုန်းကမꩻ ကွဲးသော့ꩻ တခီအိတ်ကိုနေား။ [[လာဗွူ]]။ ====ဘာႏသာႏလင်==== * မန်း : [[လှေ့]]သည် * အိန်းကလေတ် : [[winnow]]. ===အရွီးခိုႏ=== အဝ်ႏ {{inh|blk|kar-pro|*ˀlaᴬ||moon; month}} {{inh|blk|sit-pro|*s/ɡ-la||moon; month}} လွဉ်။ ဝေါဟာရအရွီးခိုႏ ဗွိုန်ပီတောမ်ႏ {{cog|ksw|လါ}}, {{cog|pwo|လၩ}}, {{cog|kjp|လာ}}, {{cog|kyu|ꤜꤢꤧ꤭}}, {{cog|my|လ}} ယိုဖုံႏ။ ===နာမ်ႏ=== {{blk-noun}} * လာ # နေင်ႏတနေင်ႏအကို အခိင်ႏကာႏလ ၁၂ ပွန်း ၁ ပွန်း ကအဝ်ႏဒါႏ အခိင်ႏကာႏလတခူးတခဝ်။ #: - ၁၂ လာ ထွာတနေင်ႏ။ ====နပ်တွက်==== * လာ ====ဘာႏသာႏလင်==== အိန်းကလေတ် : [[month]]. ---- ===နာမ်ႏ=== {{blk-noun}} * လာ # ကအဝ်ႏလေပ်ပတ်ဗဲဉ်ဒါႏ ကမ္ဘာႏဟံႏထွူ ထူႏသွူမွူးရောင်ႏတွော့ꩻ ကအွဉ်ႏခပြန်ႏချာဖေႏဒါႏအရောင်ႏ(ရောင်ပြန်ဟပ်) ကမ္ဘာႏဟံႏအလောင်း သဘာႏဝဂျိုဟ်ႏတန်။ တနင်ꩻလာႏဂျိုဟ်ႏ။ ====နပ်တွက်==== * လာ ====သင်္ကေႏတ==== *[[☽]], [[☾]] ====ဘာႏသာႏလင်==== အိန်းကလေတ် : [[moon]]. ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===ဝါစင်္ဂ=== * verbal affix * [[လွဉ်]] ====ဘာႏသာႏလင်==== * အိန်းကလေတ် : Word suffixed to a verb to convey the notion of beginning sth (equivalent in usage to verbs 'begin' 'start', 'etc'). ===ကြိယာႏ=== {{my-verb}} * causative verb * မာꩻနွောင်ꩻထဲင်းက ကထင်းခါꩻ။ ====ဘာႏသာႏလင်==== * အိန်းကလေတ် : come up to more than expected. ===ကြိယာႏ=== {{my-verb}} * causative verb * [[လွဉ်]] * [[လွောန်]] # အဝ်ႏရပ်ခင်ႏလမ်းအလင် တထွောင်းထွောင်းကို မိုးထေ့ရုဲင်ꩻထေ့ နမ်းခင်ႏလမ်းထျꩻ။ ====ဘာႏသာႏလင်==== * အိန်းကလေတ် : [[come]]. * ဂျပန် : [[来る]]. dbll67n5ssrw0ftac9t0ej4e37hw97z လေ့လာ 0 2572 12067 5950 2025-06-24T02:31:09Z 咽頭べさ 11 12067 wikitext text/x-wiki ==မန်း== ===ကြိယာႏ=== {{my-verb}} * ထောင်ထွား * လွူꩻထွား ==ဘာႏသာႏပြန်ႏ== *မန်း: လေ့လာ :ပအိုဝ်ႏ: [[ထောင်ထွား]]။ [[လွူꩻထွား]] *အိန်းကလေတ်: [[ovserve]] *ခယ်ႏ: [[观察]]〔觀-〕 jrw4kx8gauws6csl9ccfy53j6y58zc5 လှည်း 0 2600 12069 5989 2025-06-24T02:34:57Z 咽頭べさ 11 12069 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏ=== {{my-verb}} * causative verb * [[ဖွစ်ꩻ]]၊ [[ဖွောတ်ꩻ]] # မာꩻထိုꩻမား ထာꩻအီႏထာꩻစျꩻ တောမ်ႏလမ်းဖွစ်ꩻ။ ===ဘာႏသာႏလင်=== * အိန်းကလေတ် : [[sweep]]. ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===နာမ်ႏ=== {{my-noun}} * common noun * [[ဖိုးလေား]] ===ဘာႏသာႏလင်=== * အိန်းကလေတ် : bullock [[cart]]. ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===နာမ်ႏ=== {{my-noun}} * common noun * [[လေား]] ===ဘာႏသာႏလင်=== * အိန်းကလေတ် : cart (animal drawn or manually operated vehicle). pxnvrlodx4b57apxjjn2x6vqtdlkdry လှေ့ 0 2607 12070 5996 2025-06-24T02:35:29Z 咽頭べさ 11 12070 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏ=== {{my-verb}} * causative verb * [[လာ]] # မာꩻစင်၊ မာꩻကွင်ႏထိုꩻ ထာꩻအီႏထာꩻစျꩻ တောမ်ႏတလီꩻ။ ====ဘာႏသာႏလင်==== * အိန်းကလေတ် : [[winnow]]. 20bv4hxmdfjzgfkiyc5046ac0urqluh ဝင်စားသည် 0 2609 12071 6022 2025-06-24T02:36:08Z 咽頭べさ 11 12071 wikitext text/x-wiki ==မန်း== *ဝင်စားသည်။ *ဘဝတစ်ခုဖြစ်တည်ခြင်း။ *ဘဝကူးသည်။ ===အငေါဝ်းထန်ႏ=== *ဝျဉ်သားတီ။ ===ကြိယာႏ=== {{my-verb}} *သဲင်ꩻကွုတ်။ #ထွာလွဉ်စဘဝတဗာႏ။ #ဘဝကူꩻပြောင်ꩻ။ #ဘဝလီꩻအွဉ်ႏကုဲင်ချာ ဘဝငါပြောင်ꩻတော။ ===CHARS=== * [[ဝင်]] :(ကြိ) နွို့။ *[[စား]] :(ကြိ) အံႏ။ *[[သည်]] :(ဝိ) နဝ်ꩻ။ (လိတ်ဖြုံႏအွဉ်ႏသွတ်ꩻအီ ဝါကျတဗာႏ) သွူ။ (တချွုံနဝ်ꩻ။ နဝ်ꩻသွူ။) ===WORDS=== *လူ့ဘဝပြန်ဝင်စားသည်။ :သဲင်ꩻကွုတ်ချာလိုꩻဘဝ။ *ပြန်ဝင်စားသည်။ :သဲင်ꩻကွုတ်ꩻချာ။ ===SENTS=== *အကုသိုလ်လုပ်သောသူများသည် သေသည့်အခါ အပါယ်လေးပါးတွင် ပြန်ဝင်စားရသည်။ :လိုꩻကမာꩻအကုသိုလ်ႏသားနောဝ်ꩻ မီႏသီတနီꩻခါ သဲင်ꩻကွုတ်ချာဗာႏ အပါယ်ႏလစ်ꩻခမ်းကိုသွူ။ ====နပ်တွက်ဗျာႏ==== *မန်း - ခါ။ *ပအိုဝ်ႏ - လဲင်ႏ။ ==ဘာႏသာႏလင်== *ပအိုဝ်ႏ - သဲင်ꩻကွုတ်။ b06e5kzy642g4h3pfujwjxwqlcse1ep ဝန်းကျင် 0 2613 12072 6028 2025-06-24T02:37:14Z 咽頭べさ 11 12072 wikitext text/x-wiki ==မန်း== ===အငေါဝ်းထန်ႏ=== * ===နာမ်ႏ=== {{my-noun}} *အထျꩻ *အသောင်အထျꩻ * သောင်ရင်ꩻ။ #ဝေါးဟာရအွဉ်ႏနယ်အီ အသောင်ရင်ꩻ။ ===နာမဝိသေသန=== {{my-adj}} * ရပ်။ * ရပ်စပ်။ #ဝေါဟာရသွုံꩻအီ အနပ်အတွက်လောင်း။ ===ကြိယာႏ=== {{my-verb}} * ပတ်ဝွုန်ꩻ။ * ===ထေခွဲꩻဝေါဟာရ=== * [[ဝန်း]] : ဝဲင်ꩻ။ * [[ကျင်]] : တဖွတ်ꩻ။ ခြွောင်။ အရျူ။ ===ငေါဝ်းငွါ=== * [[ဝန်းကျင်ဒေသ]]။ * ဒေႏသအသောင်ရင်ꩻ။ * [[တစ်နှစ်ဝန်းကျင်]]။ * [[တနေင်ႏရပ်]]။ * [[ကျောင်းပတ်ဝန်းကျင်]]။ : ကျောင်တလင်ꩻ။ * [[ရွာဝန်းကျင်]]။ : ဒုံသောင်ဒုံထျꩻ။ * [[ပတ်ဝန်းကျင်]]။ : အသောင်အရင်ꩻ။ ===ဝါကျ=== * ရွာဝန်းကျင်တွင် ပိတောက်ပန်းများ ဝေဝေဆာဆာ ပွင့်လန်းနေသည်။ : ဒုံသောင်ထျꩻနဝ်ꩻ ပဒေါက်ကောဝ်ႏဖုံႏ မွံꩻတုဲင်အာမွေးစွဉ်ႏထာꩻသွူ။ * ကျောင်းဝန်းကျင်တွင် အမှိုက်သရိုက်များ လျှောက်မပစ်ကြပါနှင့်။ : ကျောင်ꩻတလင်ꩻကိုနဝ်ꩻ တွမ်ႏနုဲင်းတငီႏတငါမွိုန်း ထာꩻအီႏဖုံႏနော။ * အမေတို့ ပြောင်းခင်းလုပ်တာ အလေးချိန်တစ်သောင်းဝန်းကျင်လောက်ထွက်တယ်။ * နီမွိုးသီးဆို့ꩻရုဲင်ခေါက်ခယ်ႏ အလေꩻခိဉ်ႏထန်ႏတသောင်ႏရပ် ==ဘာႏသာႏလင်== * အိန်းကလေတ်: [[approximate]]; [[ambient]]. * ပအိုဝ်ႏ: ရပ်စပ်။ သောင်ရင်ꩻ။ * ခယ်ႏ: 大概。 ig8jdi3jauunqcmvc0i6smpi3ecvze7 ဝါဆို 0 2617 12073 6033 2025-06-24T02:38:05Z 咽頭べさ 11 12073 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * Sans-ဝၑ်+Myan-ဆို ===နာမ်ႏ=== {{my-noun}} * proper noun * [[ဝါႏဆိုႏ]] ====အခရာႏပီ လိတ်ဖြုံႏကွာႏ==== * [[နွယ်တာ]] ===ဘာႏသာႏလင်=== * အိန်းကလေတ် : Wazo: the fourth month of the year, containing thirty days. ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * Sans-ဝၑ်+Myan-ဆို ===ကြိယာႏ=== {{my-verb}} * compound verb * (ရဟန်ꩻသင်ႏဃာႏ)[[ဆို့ꩻဝါႏ]] * (ရဟန်ꩻသင်ႏဃာႏ)[[ဆိုႏဝါႏ]] ====အခရာႏပီ လိတ်ဖြုံႏကွာႏ==== * [[ဝါကပ်]] ===ဘာႏသာႏလင်=== * အိန်းကလေတ် : (of Buddhist monks)go into monsoon retreat, sojourn during the Buddhist lent (at a designated monastery). egiafxdzv5rdaaoff29monwkngpxas3 သည် 0 2656 12112 6154 2025-06-24T03:01:34Z 咽頭べさ 11 12112 wikitext text/x-wiki == မန်း == ===အငဝ်းထန်ႏ=== * {{my-IPA|ဿီ}} ====ဝိဘတ်==== {{head|my|ဝိဘတ်}} *သား။ *နဝ်ꩻ။ *သွူ။ #[[စျေးသည်]] = စာဆေꩻသား။ #မောင်မောင်သည် = မောင်မောင်နဝ်ꩻ။ #ဖြစ်ပါသည် = နဝ်ꩻသွူ။ #ခွန်ကျော်သည် ရန်ကုန်မြို့တွင် နေထိုင်သည်။ :ခွန်ကျောႏနဝ်ꩻ အုံဒျာႏ ဝေင်ꩻရန်ႏတကုင်ႏကို'''သွူ'''။ ===ဘာႏသာႏပြန်ႏ=== * အဲင်းကလေတ် : [[am]], [[is]], [[are]] ---- ====ဝိဘတ်==== # [[နဝ်ꩻ]] *:ခွန်ကျောႏ'''နဝ်ꩻ''' အုံဒျာႏ ရန်ႏတကုင်ႏကိုသွူ။ ====နာမ်ႏတင်==== {{my-pronoun}} # [[ယို]]၊ #: ထာꩻ'''ယို'''။ ====အငဝ်းဗွိုန်လိတ်ဖြုံႏကွာႏအဓိပ္ပာယ်ႏဗွိုန်==== * [[ဒီ]]၊ [[ဤ]] ====ဘာႏသာႏပြန်ႏ==== * အဲင်းကလေတ် : {{l|en|this}} ===အာႏကွိုꩻ=== * {{R:my:BO}} m9tqgra9btlaru2nwd4bmm06h48neys သန့်ရှင်း 0 2665 12075 6156 2025-06-24T02:39:17Z 咽頭べさ 11 12075 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏ=== {{my-verb}} * compound verb * [[ကြောင်းစင်]] # ကြောင်းထိုꩻ၊ စင်ထိုꩻ။ ===ဘာႏသာႏလင်=== * အိန်းကလေတ် : clean; tidy up. ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===နာမဝိသေသန=== {{my-adj}} * attributive adjective * [[ကြောင်းစင်]] ===ဘာႏသာႏလင်=== * အိန်းကလေတ် clean; pure; free from impurities. ee5t54f2tdxnqxchsdacd0l44zux23y သဘောကျ 0 2684 12076 6184 2025-06-24T02:39:42Z 咽頭べさ 11 12076 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * Pali-သဘာဝ+Myan-ကျ ===ကြိယာႏ=== {{my-verb}} * stative verb * [[သꩻဖော်ꩻကျ]]၊ [[သꩻမဲဉ်လꩻအဝ်ႏ]] * မဲဉ်လꩻနိစ်သက်။ ===ဘာႏသာႏပြန်ႏ=== * အိန်းကလေတ် : [[like]]; [[agree]]; be pleased. cm1uap31ug3ua389nsq4lbgmb8ihye1 သဘောတွေ့ 0 2686 12077 6186 2025-06-24T02:40:15Z 咽頭べさ 11 12077 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * Pali-သဘာဝ+Myan-တွေ့ ===ကြိယာႏ=== {{my-verb}} * [[ကျွိုက်]] * [[သဖော်ꩻလꩻ]] * [[စွယ်ꩻ]] ===ဘာႏသာႏလင်=== * အိန်းကလေတ် : [[like]]; [[favour]]. ihad09p726fay508mfuw295jxwha1bs သီလစောင့် 0 2711 12078 6260 2025-06-24T02:40:37Z 咽頭べさ 11 12078 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * Pali-သီလ+Myan-စောင့် ===ကြိယာႏ=== {{my-verb}} * [[ကံသီႏလ]] * အုံဆောက်တဲႏသီႏလ။ ===ဘာႏသာႏပြန်ႏ=== * အိန်းကလေတ် : keep the precepts. 1ttro3l1mhcijdfr5k8fv971fe6p5qg သုံး 0 2731 12079 6282 2025-06-24T02:41:06Z 咽頭べさ 11 12079 wikitext text/x-wiki ==မန်း== {{number box|my|3}} ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===နာမ်ႏ=== {{my-noun}} * [[သိုမ်]] * [[သွံ]] # ဂဏန်ꩻ([[၃]])။ ===ဘာႏသာႏပြန်ႏ=== * မန်း : [[နှစ်]]နှင့်[[လေး]]အကြားရှိ [[အရေအတွက်]]။ [[၃]]။ * အဲင်းကလေတ် : [[three]] * ဂျပန် : [[さん]]。 ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===ကြိယာႏ=== {{my-verb}} * [[သွုံꩻ]] * [[သုင်ꩻ]] # ထူႏသွုံꩻ/သုင်ꩻ။ နာꩻ'''သွုံꩻ/သုင်ꩻ'''နေ တခြိုꩻယို။ ===ဘာႏသာႏပြန်ႏ=== * မန်း : [[အသုံးပြု]]သည်။ [[အသုံးချ]]သည်။ * အဲင်းကလေတ် : [[use]]; [[spend]]; [[expend]]. f6mivxf2d3ncurznaab590vl9a73w97 သေဆုံး 0 2779 12080 6374 2025-06-24T02:41:29Z 咽頭べさ 11 12080 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏ=== {{my-verb}} * compound verb * [[သီ]]ထိုꩻ၊ [[သီမား]] * [[လို့]]ထိုꩻ။ ===ဘာႏသာႏလင်=== * အိန်းကလေတ် : [[die]]; [[expire]]. 5c7wyddgzhiirrafxv1xn9ux5ku5aze ဟိုဟာ 0 2839 12135 6498 2025-06-24T03:11:55Z 咽頭べさ 11 12135 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===နာမ်ႏတင်=== {{my-pron}} * [[အွိုးသူꩻ]]၊ နဝ်ꩻ(ထာꩻနဝ်ꩻ၊ နဝ်ꩻတဗာႏ)။ #: -အွိုးသူꩻနဝ်ꩻ တမုဲင်ꩻ။ ===ဘာႏသာႏပြန်ႏ=== * အဲင်းကလေတ် : [[that]]; that thing. j72xkpemgkew8z96ubzki21rjfudefd အကုန်အစင် 0 2859 12122 6531 2025-06-24T03:06:35Z 咽頭べさ 11 12122 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏဝိသေသန=== {{my-adv}} * adverb of quantity * [[လို့လို့]], [[လို့လို့စင်စင်]] * [[ကားကအဝ်ႏ]] ====ဘာႏသာႏလင်==== * အိန်းကလေတ် : [[all]]; [[completely]]; [[entirely]]. 149q491xga8tt4tislg0riy7b8lirdq အကောက်ကြံ 0 2861 12081 6534 2025-06-24T02:41:50Z 咽頭べさ 11 12081 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏ=== {{my-verb}} * compound verb * [[ကျံႏတကုဲင်]]၊ [[ကျံႏတꩻကဲင်ႏ]] # ဝင်ꩻဖေႏကကုဲင် ဖေႏကမော့ꩻထာꩻယပ်ꩻထာꩻဒုက္ခတဲင် ကျံႏမာꩻဝင်ꩻ။ ===ဘာႏသာႏပြန်ႏ=== * အိန်းကလေတ် : plot against (someone). kif3bw1cf1y4yke2zdy8ysjs7ldcalk အချင်းချင်း 0 2876 12123 6573 2025-06-24T03:06:59Z 咽頭べさ 11 12123 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏဝိသေသန=== {{my-adv}} * [[အချင်ꩻချင်ꩻ]] ===ဘာႏသာႏလင်=== * အိန်းကလေတ် : [[mutually]]; among one another, between each other. ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===နာမ်ႏတင်=== {{my-pron}} * [[ချင်ꩻ]] # အချင်ꩻချင်ꩻဒျာႏ၊ တဖူးဝေးချင်ꩻ၊ တခမ်းချင်ꩻ။ ===ဘာႏသာႏလင်=== * အိန်းကလေတ် : pronoun referring to presons or things of the same kind, category,etc. jlam6xksmkwab7jc9jzvbqorlbmdnuq အဆတစ်ရာ 0 2896 12124 6642 2025-06-24T03:07:24Z 咽頭べさ 11 12124 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏဝိသေသန=== {{my-adv}} * adverb of degree * [[အပွုမ်ႏတရျာꩻ]] * [[အဆတရျာꩻ]] # အဆပေါင်ꩻအာ။ ===ဘာႏသာႏပြန်ႏ=== * အိန်းကလေတ် : [[infinitely]]. jk4355zasa2fkfclaume5gb35ty9ad4 အပြန်အလှန် 0 2943 12125 6745 2025-06-24T03:07:44Z 咽頭べさ 11 12125 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏဝိသေသန=== {{my-adv}} * adverb incorporating verbs or adjectives interposed between particles * [[အပြန်ႏအလန်ႏ]] * [[ခွုန်ꩻလွေꩻခွုန်ꩻသဲင်ꩻ]] # တဖဲ့ꩻတောမ်ႏတဖဲ့ꩻ တဖြာꩻတောမ်ႏတဖြာꩻ ခွုန်ꩻချာ၊ ပြန်ႏချာဝင်ꩻအနေႏ။ ===ဘာႏသာႏပြန်ႏ=== * အိန်းကလေတ် : [[reciprocally]]; [[mutually]]. dfnnx9jhmctk3koa9nl5op7mz5abc30 အလျှံပယ် 0 2998 12126 6866 2025-06-24T03:08:11Z 咽頭べさ 11 12126 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * ===ကြိယာႏဝိသေသန=== {{my-adv}} * adverb of quantity * အဝ်ႏ[[အလွန်းအလွို]]၊ [[လွန်းလွို]] * [[လွိုင်ႏအာ]] ===ဘာႏသာႏလင်=== * မန်း : [[abundantly]]; plentifully; profusely. skcxei5jkq9jjzg9dtkov5529oxvww5 အာရုဏ်တတ် 0 3014 12082 6884 2025-06-24T02:42:10Z 咽頭べさ 11 12082 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အရွီးခိုႏ=== * Pali-အရုဏ+Myan-တက် ===ကြိယာႏ=== {{my-verb}} * stative verb * [[အာႏရုဏ်ႏထန်ႏ]] ===ဘာႏသာႏလင်=== * အိန်းကလေတ် : (of day) dawn. 85pmj80oxj29va203ek4w2zn5pli6fe အိုး 0 3033 12106 6945 2025-06-24T02:58:18Z 咽頭べさ 11 12106 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အထျꩻထောင်ꩻ=== * ===နာမဝိသေသန=== {{my-adj}} * attributive adjective * [[တလီꩻဖွိုင်ꩻ]] # လိုꩻထာꩻဒေါ့ꩻတန်၊ ဟုတ်ꩻထာꩻ လဲဉ်ထာꩻကျင်ႏ။ ===ဘာႏသာႏလင်=== * အိန်းကလေတ် : (person) conspicuous for some quaint trait in this character. ==မန်း== ===အငဝ်းထန်ႏ=== {{my-IPA}} ===အထျꩻထောင်ꩻ=== * ===နာမ်ႏ=== {{my-noun}} * common noun * [[ဖွိုင်ꩻ]] ===ဘာႏသာႏလင်=== * အိန်းကလေတ် : [[pot]]. gqx5z09k7ijnsxdu3oqdx1g0dg44ni1 0 3052 12107 7002 2025-06-24T02:58:47Z 咽頭べさ 11 12107 wikitext text/x-wiki ==မန်း== ===အငဝ်းထန်ႏ=== * {{MLCTS|/i/}} ===နာမဝိသေသန=== {{my-adj}} * ဤ(adj) # [[ယို]] ====အငဝ်းဗွိုန်လိတ်ဖြုံႏကွာႏအဓိပ္ပာယ်ႏဗွိုန်==== * [[သည်]], [[ဒီ]], (all adjectives) ====ဘာႏသာႏပြန်ႏ==== *အဲင်းကလေတ်: [[this]] ===နာမ်ႏ=== {{my-noun}} * ဤ(n) # လိတ်မန်း[[သရ]] ဖုံႏအကို အဝ်ႏပါသော့ꩻသရတဖြုံႏနေနေ။ ====ဘာသာပြန်==== *အဲင်းကလေတ်: fourth in the set of twelve vowels traditionally taught in the learning of Myanmar language. ===အာႏကွိုꩻ=== * {{R:my:BO}} 0jewz4rlvkd6ws400lsakscb6agg9vj မော်ဂျူး:blk-translit 828 3524 11926 11850 2025-06-23T12:15:29Z 咽頭べさ 11 11926 Scribunto text/plain local export = {} local gsub = mw.ustring.gsub local u = require("Module:string/char") local letter_with_mark = "(.["..u(0x0300).."-"..u(0x036F).."]?)" local pre = { ["ျ"] = "္ယ", ["ြ"] = "္ရ", ["ွ"] = "္ဝ", ["ှ"] = "္ဟ", ["ၞ"] = "္န", ["ၟ"] = "္မ", ["ၠ"] = "္လ", } local tt1 = { ["က"] = "kᵃ", ["ခ"] = "khᵃ", ["ဂ"] = "gᵃ", ["ဃ"] = "ghᵃ", ["င"] = "ṅᵃ", ["စ"] = "cᵃ", ["ဆ"] = "chᵃ", ["ဇ"] = "jᵃ", ["ဈ"] = "jhᵃ", ["ဉ"] = "ñᵃ", ["ည"] = "ññᵃ", -- ññ -> ñ later ["ဋ"] = "ṭᵃ", ["ဌ"] = "ṭhᵃ", ["ဍ"] = "ḍᵃ", ["ဎ"] = "ḍhᵃ", ["ဏ"] = "ṇᵃ", ["ၮ"] = "ṇᵃ", ["တ"] = "tᵃ", ["ထ"] = "thᵃ", ["ဒ"] = "dᵃ", ["ဓ"] = "dhᵃ", ["န"] = "nᵃ", ["ပ"] = "pᵃ", ["ဖ"] = "phᵃ", ["ဗ"] = "bᵃ", ["ဘ"] = "bhᵃ", ["မ"] = "mᵃ", ["ယ"] = "yᵃ", ["ရ"] = "rᵃ", ["လ"] = "lᵃ", ["ဝ"] = "wᵃ", ["သ"] = "śᵃ", ["ဿ"] = "śśᵃ", ["ဟ"] = "hᵃ", ["ဠ"] = "ḷᵃ", ["အ"] = "ʼᵃ", -- independent vowels (1 char) ["ဣ"] = "ʼi", ["ဥ"] = "ʼu", ["ဩ"] = "ʼo", -- dependent vowels and diacritics (1 char) ["ါ"] = "ā", ["ာ"] = "ā", ["ိ"] = "i", ["ီ"] = "ī", ["ု"] = "u ", ["ူ"] = "ū", ["ဲ"] = "ʸ", ["ေ့"] = "e", ["ေ"] = "ē", ["ံ"] = "ṁ", ["း"] = "̌", ["္"] = "¡", ["်"] = "¤", ['့'] = 'e', -- punctuation marks ["၊"] = ",", ["။"] = ".", -- numerals ["၀"] = "0", ["၁"] = "1", ["၂"] = "2", ["၃"] = "3", ["၄"] = "4", ['𑛐'] = '0', ['𑛑'] = '1', ['𑛒'] = '2', ['𑛓'] = '3', ['𑛔'] = '4', ["၅"] = "5", ["၆"] = "6", ["၇"] = "7", ["၈"] = "8", ["၉"] = "9", ['𑛕'] = '5', ['𑛖'] = '6', ['𑛗'] = '7', ['𑛘'] = '8', ['𑛙'] = '9', -- zero-width space (display it if it hides in a word) [u(0x200B)] = "‼", [u(0x200C)] = "‼", [u(0x200D)] = "‼", } -- ⒶⒽⓄⓂ markup for anusvara. local ahom = { ["ံⒶ"] = "အ်", ["ံⒽ"] = "ĥ", ["ံⓄ"] = "ံ", -- default action, at least for now. ["ံⓂ"] = "ံ", -- default action } local tt2 = { ["ံ[ⒶⒽⓄⓂ]"] = ahom, -- CAUTION: ahom is a table. -- vowels (2 chars) ["ဲ့"] = "ea", ["ꩻ"] = "̀", ["ႏ"] = "́", ["ေ့ꩻ"] = "è", ["ုဲင့်"] = "ai", ["ုဲင်"] = "āi", ["ော့"] = "ao", ["ော်"] = "āo", ["ို့"] = "o", ["ို"] = "ō", ["ဲး"] = "ǎ", } function export.tr(text, lang, sc, debug_mode) if type(text) == "table" then -- called directly from a template text = text.args[1] end --Punctuation text = gsub(text, "( +)", u(0xa0, 0xa0).."%1") -- 2 NBSP before spaces to widen them. text = gsub(text, "<wbr/?>", " ") -- Insert spaces between words. text = gsub(text, "([ှ])(ေ?ါ?ာ?)([်])(ေ?)", function(H,b,A,a) return b..a..'h' end) text = gsub(text, ".", pre) text = gsub(text, "ဲါ", "ါဲ") -- fixed ay+aa to aa+ay; it often occurs for k, v in pairs(tt2) do text = gsub(text, k, v) end text = gsub(text, ".", tt1) text = gsub(text, "([aeiuoāīū])ʸ", "%1y") text = gsub(text, "ᵃʸ", "oa") text = gsub(text, "ᵃ([¡¤]+)", "") text = gsub(text, "([aeiuoāīū])¤", "%1k") text = gsub(text, "ᵃ([aeiuoāīū])", "%1") text = gsub(text, "ᵃ", "a") text = gsub(text, "iṁu", "iuṁ") if lang == "blk" then --Pa'O text = gsub(text, "ññ", "ñ") end return text end return export 232q7ivih0k9z8700jr0ksxjtfm6hd2 မော်ဂျူး:etymology 828 3530 11984 11544 2025-06-23T14:41:45Z 咽頭べさ 11 11984 Scribunto text/plain local export = {} -- For testing local force_cat = false local function term_error(terminfo) if terminfo.lang:hasType("family") then if terminfo.term and terminfo.term ~= "-" then require("Module:debug/track")("etymology/family/has-term") end terminfo.term = "-" end return terminfo end local function create_link(terminfo, template_name) local link = "" if terminfo.term == "-" then --[=[ [[Special:WhatLinksHere/Wiktionary:Tracking/cognate/no-term]] [[Special:WhatLinksHere/Wiktionary:Tracking/derived/no-term]] [[Special:WhatLinksHere/Wiktionary:Tracking/borrowed/no-term]] [[Special:WhatLinksHere/Wiktionary:Tracking/calque/no-term]] ]=] require("Module:debug/track")(template_name .. "/no-term") else -- mw.log(terminfo.term) link = require("Module:links").full_link(terminfo, "term") if (link ~= "") then link = " " .. link end end return link end function export.process_and_create_link(terminfo, template_name) terminfo = term_error(terminfo) return create_link(terminfo, template_name or "derived") end function export.get_display_and_cat_name(source, raw) local display, cat_name if source:getCode() == "und" then display = "undetermined" cat_name = "ဘာႏသာႏငဝ်းငွါအလင်ဖုံႏ" elseif source:getCode() == "mul" then display = "[[w:Translingualism|translingual]]" cat_name = "Translingual" elseif source:getCode() == "mul-tax" then display = "ဖြယ်ခွိုꩻပညာႏအမိဉ်ꩻ" or "[[w:en:Biological nomenclature|ဖြယ်ခွိုꩻပညာႏအမိဉ်ꩻဖုံႏ]]" cat_name = "taxonomic names" else display = raw and source:getCanonicalName() or source:makeWikipediaLink() cat_name = source:getDisplayForm() end return display, cat_name end function export.insert_source_cat_get_display(data) local categories, lang, source = data.categories, data.lang, data.source local display, cat_name = export.get_display_and_cat_name(source, data.raw) if lang and not data.nocat then -- Add the category, but only if there is a current language if not categories then categories = {} end local langname = lang:getFullName() -- If `lang` is an etym-only language, we need to check both it and its parent full language against `source`. -- Otherwise if e.g. `lang` is Medieval Latin and `source` is Latin, we'll end up wrongly constructing a -- category 'Latin terms derived from Latin'. if lang:getCode() == source:getCode() or lang:getFullCode() == source:getCode() then table.insert(categories,"အဝ်ႏ" .. langname .. " terms borrowed back into " .. langname .. "ဝေါဟာရဖုံႏ") else table.insert(categories,"အဝ်ႏ" .. langname .. (data.borrowing_type or " ကလင်ꩻ") .. "လွဉ်ဒါႏ " .. cat_name .. "ဝေါဟာရဖုံႏ") end end return display, categories end function export.format_source(data) local lang, sort_key = data.lang, data.sort_key -- [[Special:WhatLinksHere/Wiktionary:Tracking/etymology/sortkey]] if sort_key then require("Module:debug/track")("etymology/sortkey") end local display, categories = export.insert_source_cat_get_display(data) if lang and not data.nocat then -- Format categories, but only if there is a current language; {{cog}} currently gets no categories categories = require("Module:utilities").format_categories(categories, lang, sort_key, nil, data.force_cat or force_cat) else categories = "" end return "<span class=\"etyl\">" .. display .. categories .. "</span>" end -- Internal implementation of {{cognate|...}} template function export.format_cognate(data) return export.format_derived { terminfo = data.terminfo, sort_key = data.sort_key, template_name = "cognate", } end -- Internal implementation of {{derived|...}} template function export.format_derived(data) local lang, terminfo, sort_key, nocat, template_name = data.lang, data.terminfo, data.sort_key, data.nocat, data.template_name return export.format_source { lang = lang, source = terminfo.lang, sort_key = sort_key, nocat = nocat, borrowing_type = data.borrowing_type, force_cat = data.force_cat, } .. export.process_and_create_link(terminfo, template_name) end do -- Generate the non-ancestor error message. local function showLanguage(lang) local retval = ("%s (%s)"):format(lang:makeCategoryLink(), lang:getCode()) if lang:hasType("etymology-only") then retval = retval .. (" (an etymology-only language whose regular parent is %s)"):format( showLanguage(lang:getParent())) end return retval end -- Check that `lang` has `otherlang` (which may be an etymology-only language) as an ancestor. Throw an error if not. function export.check_ancestor(lang, otherlang) -- FIXME: I don't know if this function works correctly with etym-only languages in `lang`. I have fixed up -- the module link code appropriately (June 2024) but the remaining logic is untouched. if lang:hasAncestor(otherlang) or mw.title.getCurrentTitle().nsText == "တမ်းပလေက်" then return end local ancestors, postscript = lang:getAncestors() local etymModuleLink = lang:hasType("etymology-only") and "[[Module:etymology languages/data]] or " or "" local moduleLink = "[[Module:" .. require("Module:languages").getDataModuleName(lang:getFullCode()) .. "]]" if not ancestors[1] then postscript = showLanguage(lang) .. " has no ancestors." else local ancestorList = table.concat( require("Module:fun").map( showLanguage, ancestors), " and ") postscript = ("The ancestor%s of %s %s %s."):format( ancestors[2] and "s" or "", lang:getCanonicalName(), ancestors[2] and "are" or "is", ancestorList) end error(("%s is not set as an ancestor of %s in %s%s. %s") :format(showLanguage(otherlang), showLanguage(lang), etymModuleLink, moduleLink, postscript)) end end -- Internal implementation of {{inherited|...}} template function export.format_inherited(data) local lang, terminfo, sort_key, nocat = data.lang, data.terminfo, data.sort_key, data.nocat local source = terminfo.lang local categories = {} if not nocat then table.insert(categories, "အဝ်ႏ" .. lang:getFullName() .. " ကသွုပ်ခံႏခါꩻဒါႏအမွီႏ " .. source:getCanonicalName() .. "ဝေါဟာရဖုံႏ") end local link = export.process_and_create_link(terminfo, "inherited") export.check_ancestor(lang, source) return export.format_source { lang = lang, source = source, sort_key = sort_key, categories = categories, nocat = nocat, force_cat = data.force_cat, } .. link end function export.insert_borrowed_cat(categories, lang, source) local category -- Do the same check as in insert_source_cat_get_display() (inverted). if not (lang:getCode() == source:getCode() or lang:getFullCode() == source:getCode()) then -- If both are the same, we want e.g. [[:Category:English terms borrowed back into English]] not -- [[:Category:English terms borrowed from English]]; the former is inserted automatically by format_source(). category = " ကထူႏလွူးခါꩻဒါႏ " .. source:getDisplayForm() end if category then table.insert(categories, "အဝ်ႏ" .. lang:getFullName() .. category .. "ဝေါဟာရဖုံႏ") end end -- Internal implementation of {{borrowed|...}} template. function export.format_borrowed(data) local lang, terminfo, sort_key, nocat = data.lang, data.terminfo, data.sort_key, data.nocat local source = terminfo.lang local categories = {} if not nocat then export.insert_borrowed_cat(categories, lang, source) end return export.format_source { lang = lang, source = source, sort_key = sort_key, categories = categories, nocat = nocat, force_cat = data.force_cat, } .. export.process_and_create_link(terminfo, "borrowed") end return export 4ve78ngy06zbbfv2omfexhnyc3vzsot 12033 11984 2025-06-24T01:49:43Z 咽頭べさ 11 12033 Scribunto text/plain local export = {} -- For testing local force_cat = false local debug_track_module = "Module:debug/track" local languages_module = "Module:languages" local links_module = "Module:links" local pron_qualifier_module = "Module:pron qualifier" local table_module = "Module:table" local utilities_module = "Module:utilities" local concat = table.concat local insert = table.insert local new_title = mw.title.new local function debug_track(...) debug_track = require(debug_track_module) return debug_track(...) end local function format_categories(...) format_categories = require(utilities_module).format_categories return format_categories(...) end local function format_qualifiers(...) format_qualifiers = require(pron_qualifier_module).format_qualifiers return format_qualifiers(...) end local function full_link(...) full_link = require(links_module).full_link return full_link(...) end local function get_language_data_module_name(...) get_language_data_module_name = require(languages_module).getDataModuleName return get_language_data_module_name(...) end local function get_link_page(...) get_link_page = require(links_module).get_link_page return get_link_page(...) end local function language_link(...) language_link = require(links_module).language_link return language_link(...) end local function serial_comma_join(...) serial_comma_join = require(table_module).serialCommaJoin return serial_comma_join(...) end local function shallow_copy(...) shallow_copy = require(table_module).shallowCopy return shallow_copy(...) end local function track(page, code) local tracking_page = "etymology/" .. page debug_track(tracking_page) if code then debug_track(tracking_page .. "/" .. code) end end local function join_segs(segs, conj) if not segs[2] then return segs[1] elseif conj == "and" or conj == "or" then return serial_comma_join(segs, {conj = conj}) end local sep if conj == "," or conj == ";" then sep = conj .. " " elseif conj == "/" then sep = "/" elseif conj == "~" then sep = " ~ " elseif conj then error(("Internal error: Unrecognized conjunction \"%s\""):format(conj)) else error(("Internal error: No value supplied for conjunction"):format(conj)) end return concat(segs, sep) end -- Returns true if `lang` is the same as `source`, or a variety of it. local function lang_is_source(lang, source) return lang:getCode() == source:getCode() or lang:hasParent(source) end -- Format one or more links as specified in `termobjs`, a list of term objects of the format accepted by full_link() in -- [[Module:links]], additionally with optional qualifiers, labels and references. `conj` is used to join multiple -- terms and must be specified if there is more than one term. `template_name` is the template name used in debug -- tracking and must be specified. The return value begins with a space if there is anything to display (which is always -- the case unless there is a single term with the value "-"). function export.format_links(termobjs, conj, template_name) for i, termobj in ipairs(termobjs) do local term = termobj.term if termobj.lang:hasType("family") then if term and term ~= "-" then debug_track(template_name .. "/family-with-term") end term = "-" termobj.term = term end template_name = template_name or "derived" if term == "-" then --[=[ [[Special:WhatLinksHere/Wiktionary:Tracking/cognate/no-term]] [[Special:WhatLinksHere/Wiktionary:Tracking/derived/no-term]] [[Special:WhatLinksHere/Wiktionary:Tracking/borrowed/no-term]] [[Special:WhatLinksHere/Wiktionary:Tracking/calque/no-term]] ]=] debug_track(template_name .. "/no-term") termobjs[i] = "" else termobjs[i] = full_link(termobj, "term", nil, "show qualifiers") end end local retval = join_segs(termobjs, conj) if retval ~= "" then retval = " " .. retval end return retval end function export.get_display_and_cat_name(source, raw) local display, cat_name if source:getCode() == "und" then display = "undetermined" cat_name = "ဘာႏသာႏငဝ်းငွါအလင်ဖုံႏ" elseif source:getCode() == "mul" then display = raw and "translingual" or "[[w:Translingualism|translingual]]" cat_name = "Translingual" elseif source:getCode() == "mul-tax" then display = raw and "ဖြယ်ခွိုꩻပညာႏအမိဉ်ꩻ" or "[[w:en:Biological nomenclature|ဖြယ်ခွိုꩻပညာႏအမိဉ်ꩻဖုံႏ]]" cat_name = "taxonomic names" else display = raw and source:getCanonicalName() or source:makeWikipediaLink() cat_name = source:getDisplayForm() end return display, cat_name end function export.insert_source_cat_get_display(data) local categories, lang, source = data.categories, data.lang, data.source local display, cat_name = export.get_display_and_cat_name(source, data.raw) if lang and not data.nocat then -- Add the category, but only if there is a current language if not categories then categories = {} end local langname = lang:getFullName() -- If `lang` is an etym-only language, we need to check both it and its parent full language against `source`. -- Otherwise if e.g. `lang` is Medieval Latin and `source` is Latin, we'll end up wrongly constructing a -- category 'Latin terms derived from Latin'. insert(categories, langname .. ( lang_is_source(lang, source) and " terms borrowed back into " .. cat_name or " " .. (data.borrowing_type or "terms derived") .. " from " .. cat_name )) end return display, categories end function export.format_source(data) local lang, sort_key = data.lang, data.sort_key -- [[Special:WhatLinksHere/Wiktionary:Tracking/etymology/sortkey]] if sort_key then track("sortkey") end local display, categories = export.insert_source_cat_get_display(data) if lang and not data.nocat then -- Format categories, but only if there is a current language; {{cog}} currently gets no categories categories = format_categories(categories, lang, sort_key, nil, data.force_cat or force_cat) else categories = "" end return "<span class=\"etyl\">" .. display .. categories .. "</span>" end --[==[ Format sources for etymology templates such as {{tl|bor}}, {{tl|der}}, {{tl|inh}} and {{tl|cog}}. There may potentially be more than one source language (except currently {{tl|inh}}, which doesn't support it because it doesn't really make sense). In that case, all but the last source language is linked to the first term, but only if there is such a term and this linking makes sense, i.e. either (1) the term page exists after stripping diacritics according to the source language in question, or (2) the result of stripping diacritics according to the source language in question results in a different page from the same process applied with the last source language. For example, {{m|ru|соля́нка}} will link to [[солянка]] but {{m|en|соля́нка}} will link to [[соля́нка]] with an accent, and since they are different pages, the use of English as a non-final source with term 'соля́нка' will link to [[соля́нка]] even though it doesn't exist, on the assumption that it is merely a redlink that might exist. If none of the above criteria apply, a non-final source language will be linked to the Wikipedia entry for the language, just as final source languages always are. `data` contains the following fields: * `lang`: The destination language object into which the terms were borrowed, inherited or otherwise derived. Used for categorization and can be nil, as with {{tl|cog}}. * `sources`: List of source objects. Most commonly there is only one. If there are multiple, the non-final ones are handled specially; see above. * `terms`: List of term objects. Most commonly there is only one. If there are multiple source objects as well as multiple term objects, the non-final source objects link to the first term object. * `sort_key`: Sort key for categories. Usually nil. * `categories`: Categories to add to the page. Additional categories may be added to `categories` based on the source languages ('''in which case `categories` is destructively modified'''). If `lang` is nil, no categories will be added. * `nocat`: Don't add any categories to the page. * `sourceconj`: Conjunction used to separate multiple source languages. Defaults to {"and"}. * `borrowing_type`: Borrowing type used in categories, such as {"learned borrowings"}. Defaults to {"terms derived"}. * `force_cat`: Force category generation on non-mainspace pages. ]==] function export.format_sources(data) local lang, sources, terms, borrowing_type, sort_key, categories, nocat = data.lang, data.sources, data.terms, data.borrowing_type, data.sort_key, data.categories, data.nocat local term1, sources_n, source_segs, final_link_page = terms[1], #sources, {} local term1_term, term1_sc = term1.term, term1.sc if sources_n > 1 and term1_term and term1_term ~= "-" then final_link_page = get_link_page(term1_term, sources[sources_n], term1_sc) end for i, source in ipairs(sources) do local seg, display_term if i < sources_n and term1_term and term1_term ~= "-" then local link_page = get_link_page(term1_term, source, term1_sc) display_term = (link_page ~= final_link_page) or (link_page and new_title(link_page).exists) end -- TODO: if the display forms or transliterations are different, display the terms separately. if display_term then local display, this_cats = export.insert_source_cat_get_display{ lang = lang, source = source, borrowing_type = borrowing_type, raw = true, categories = categories, nocat = nocat, } seg = language_link{ lang = source, term = term1_term, alt = display, tr = "-", } if lang and not nocat then -- Format categories, but only if there is a current language; {{cog}} currently gets no categories this_cats = format_categories(this_cats, lang, sort_key, nil, data.force_cat or force_cat) else this_cats = "" end seg = "<span class=\"etyl\">" .. seg .. this_cats .. "</span>" else seg = export.format_source{ lang = lang, source = source, borrowing_type = borrowing_type, sort_key = sort_key, categories = categories, nocat = nocat, } end insert(source_segs, seg) end return join_segs(source_segs, data.sourceconj or "and") end -- Internal implementation of {{cognate}}/{{cog}} template. function export.format_cognate(data) return export.format_derived{ sources = data.sources, terms = data.terms, sort_key = data.sort_key, sourceconj = data.sourceconj, conj = data.conj, template_name = "cognate", force_cat = data.force_cat, } end -- Internal implementation of {{derived}}/{{der}} template. This is called externally from [[Module:affix]], -- [[Module:affixusex]] and [[Module:see]] and needs to support qualifiers, labels and references on the outside -- of the sources for use by those modules. function export.format_derived(data) local terms = data.terms local result = export.format_sources(data) .. export.format_links(terms, data.conj, data.template_name) local q, qq, l, ll, refs = data.q, data.qq, data.l, data.ll, data.refs if q and q[1] or qq and qq[1] or l and l[1] or ll and ll[1] or refs and refs[1] then result = format_qualifiers{ lang = terms[1].lang, text = result, q = q, qq = qq, l = l, ll = ll, refs = refs, } end return result end function export.insert_borrowed_cat(categories, lang, source) if lang_is_source(lang, source) then return end -- If both are the same, we want e.g. [[:Category:English terms borrowed back into English]] not -- [[:Category:English terms borrowed from English]]; the former is inserted automatically by format_source(). -- The second parameter here doesn't matter as it only affects `display`, which we don't use. insert(categories,"အဝ်ႏ" .. lang:getFullName() .. " ကထူႏလွူးခါꩻဒါႏ " .. select(2, export.get_display_and_cat_name(source, "raw")) .. "ဝေါဟာရဖုံႏ") end -- Internal implementation of {{borrowed}}/{{bor}} template. function export.format_borrowed(data) local categories = {} if not data.nocat then local lang = data.lang for _, source in ipairs(data.sources) do export.insert_borrowed_cat(categories, lang, source) end end data = shallow_copy(data) data.categories = categories return export.format_sources(data) .. export.format_links(data.terms, data.conj, "borrowed") end do -- Generate the non-ancestor error message. local function show_language(lang) local retval = ("%s (%s)"):format(lang:makeCategoryLink(), lang:getCode()) if lang:hasType("etymology-only") then retval = retval .. (" (an etymology-only language whose regular parent is %s)"):format( show_language(lang:getParent())) end return retval end -- Check that `lang` has `otherlang` (which may be an etymology-only language) as an ancestor. Throw an error if -- not. function export.check_ancestor(lang, otherlang) -- FIXME: I don't know if this function works correctly with etym-only languages in `lang`. I have fixed up -- the module link code appropriately (June 2024) but the remaining logic is untouched. if lang:hasAncestor(otherlang) then -- [[Special:WhatLinksHere/Wiktionary:Tracking/etymology/variety]] -- Track inheritance from varieties of Latin that shouldn't have any descendants (everything except Old Latin, Classical Latin and Vulgar Latin). if otherlang:getFullCode() == "la" then otherlang = otherlang:getCode() if not (otherlang == "itc-ola" or otherlang == "la-cla" or otherlang == "la-vul") then track("bad ancestor", otherlang) end end return end local ancestors, postscript = lang:getAncestors() local etym_module_link = lang:hasType("etymology-only") and "[[Module:etymology languages/data]] or " or "" local module_link = "[[" .. get_language_data_module_name(lang:getFullCode()) .. "]]" if not ancestors[1] then postscript = show_language(lang) .. " has no ancestors." else local ancestor_list = {} for _, ancestor in ipairs(ancestors) do insert(ancestor_list, show_language(ancestor)) end postscript = ("The ancestor%s of %s %s %s."):format( ancestors[2] and "s" or "", lang:getCanonicalName(), ancestors[2] and "are" or "is", concat(ancestor_list, " and ")) end error(("%s is not set as an ancestor of %s in %s%s. %s") :format(show_language(otherlang), show_language(lang), etym_module_link, module_link, postscript)) end end -- Internal implementation of {{inherited}}/{{inh}} template. function export.format_inherited(data) local lang, terms, sort_key, nocat = data.lang, data.terms, data.sort_key, data.nocat local source = terms[1].lang local categories = {} if not nocat then insert(categories, "အဝ်ႏ" .. lang:getFullName() .. " ကသွုပ်ခံႏခါꩻဒါႏအမွီႏ " .. source:getCanonicalName() .. "ဝေါဟာရဖုံႏ") end export.check_ancestor(lang, source) return export.format_source{ lang = lang, source = source, sort_key = sort_key, categories = categories, nocat = nocat, force_cat = data.force_cat, } .. export.format_links(terms, data.conj, "inherited") end -- Internal implementation of "misc variant" templates such as {{abbrev}}, {{clipping}}, {{reduplication}} and the like. function export.format_misc_variant(data) local lang, notext, terms, cats, parts = data.lang, data.notext, data.terms, data.cats, {} if not notext then insert(parts, data.text) end if terms[1] then if not notext then insert(parts, " " .. (data.oftext or "of") .. " ") end insert(parts, export.format_links(terms, data.conj, "misc_variant")) end local categories = {} if not data.nocat and cats then for _, cat in ipairs(cats) do insert(categories, cat .. lang:getFullName()) end end if #categories > 0 then insert(parts, format_categories(categories, lang, data.sort_key, nil, data.force_cat or force_cat)) end return concat(parts) end -- Implementation of miscellaneous templates such as {{unknown}} and {{onomatopoeia}} that have no associated terms. function export.format_misc_variant_no_term(data) local parts = {} if not data.notext then insert(parts, data.title) end if not data.nocat and data.cat then local lang, categories = data.lang, {} insert(categories, lang:getFullName() .. " " .. data.cat) insert(parts, format_categories(categories, lang, data.sort_key, nil, data.force_cat or force_cat)) end return concat(parts) end return export 09rfdtrwz6a7cavmvrb2ptvgidxs61o 12034 12033 2025-06-24T01:55:12Z 咽頭べさ 11 12034 Scribunto text/plain local export = {} -- For testing local force_cat = false local debug_track_module = "Module:debug/track" local languages_module = "Module:languages" local links_module = "Module:links" local pron_qualifier_module = "Module:pron qualifier" local table_module = "Module:table" local utilities_module = "Module:utilities" local concat = table.concat local insert = table.insert local new_title = mw.title.new local function debug_track(...) debug_track = require(debug_track_module) return debug_track(...) end local function format_categories(...) format_categories = require(utilities_module).format_categories return format_categories(...) end local function format_qualifiers(...) format_qualifiers = require(pron_qualifier_module).format_qualifiers return format_qualifiers(...) end local function full_link(...) full_link = require(links_module).full_link return full_link(...) end local function get_language_data_module_name(...) get_language_data_module_name = require(languages_module).getDataModuleName return get_language_data_module_name(...) end local function get_link_page(...) get_link_page = require(links_module).get_link_page return get_link_page(...) end local function language_link(...) language_link = require(links_module).language_link return language_link(...) end local function serial_comma_join(...) serial_comma_join = require(table_module).serialCommaJoin return serial_comma_join(...) end local function shallow_copy(...) shallow_copy = require(table_module).shallowCopy return shallow_copy(...) end local function track(page, code) local tracking_page = "etymology/" .. page debug_track(tracking_page) if code then debug_track(tracking_page .. "/" .. code) end end local function join_segs(segs, conj) if not segs[2] then return segs[1] elseif conj == "and" or conj == "or" then return serial_comma_join(segs, {conj = conj}) end local sep if conj == "," or conj == ";" then sep = conj .. " " elseif conj == "/" then sep = "/" elseif conj == "~" then sep = " ~ " elseif conj then error(("Internal error: Unrecognized conjunction \"%s\""):format(conj)) else error(("Internal error: No value supplied for conjunction"):format(conj)) end return concat(segs, sep) end -- Returns true if `lang` is the same as `source`, or a variety of it. local function lang_is_source(lang, source) return lang:getCode() == source:getCode() or lang:hasParent(source) end -- Format one or more links as specified in `termobjs`, a list of term objects of the format accepted by full_link() in -- [[Module:links]], additionally with optional qualifiers, labels and references. `conj` is used to join multiple -- terms and must be specified if there is more than one term. `template_name` is the template name used in debug -- tracking and must be specified. The return value begins with a space if there is anything to display (which is always -- the case unless there is a single term with the value "-"). function export.format_links(termobjs, conj, template_name) for i, termobj in ipairs(termobjs) do local term = termobj.term if termobj.lang:hasType("family") then if term and term ~= "-" then debug_track(template_name .. "/family-with-term") end term = "-" termobj.term = term end template_name = template_name or "derived" if term == "-" then --[=[ [[Special:WhatLinksHere/Wiktionary:Tracking/cognate/no-term]] [[Special:WhatLinksHere/Wiktionary:Tracking/derived/no-term]] [[Special:WhatLinksHere/Wiktionary:Tracking/borrowed/no-term]] [[Special:WhatLinksHere/Wiktionary:Tracking/calque/no-term]] ]=] debug_track(template_name .. "/no-term") termobjs[i] = "" else termobjs[i] = full_link(termobj, "term", nil, "show qualifiers") end end local retval = join_segs(termobjs, conj) if retval ~= "" then retval = " " .. retval end return retval end function export.get_display_and_cat_name(source, raw) local display, cat_name if source:getCode() == "und" then display = "undetermined" cat_name = "ဘာႏသာႏငဝ်းငွါအလင်ဖုံႏ" elseif source:getCode() == "mul" then display = raw and "translingual" or "[[w:Translingualism|translingual]]" cat_name = "Translingual" elseif source:getCode() == "mul-tax" then display = raw and "ဖြယ်ခွိုꩻပညာႏအမိဉ်ꩻ" or "[[w:en:Biological nomenclature|ဖြယ်ခွိုꩻပညာႏအမိဉ်ꩻဖုံႏ]]" cat_name = "taxonomic names" else display = raw and source:getCanonicalName() or source:makeWikipediaLink() cat_name = source:getDisplayForm() end return display, cat_name end function export.insert_source_cat_get_display(data) local categories, lang, source = data.categories, data.lang, data.source local display, cat_name = export.get_display_and_cat_name(source, data.raw) if lang and not data.nocat then -- Add the category, but only if there is a current language if not categories then categories = {} end local langname = lang:getFullName() -- If `lang` is an etym-only language, we need to check both it and its parent full language against `source`. -- Otherwise if e.g. `lang` is Medieval Latin and `source` is Latin, we'll end up wrongly constructing a -- category 'Latin terms derived from Latin'. table.insert(categories,"အဝ်ႏ" .. langname .. " terms borrowed back into " .. langname .. "ဝေါဟာရဖုံႏ") else table.insert(categories,"အဝ်ႏ" .. langname .. (data.borrowing_type or "ကလင်ꩻ") .. "လွဉ်ဒါႏ " .. cat_name .. "ဝေါဟာရဖုံႏ") end return display, categories end function export.format_source(data) local lang, sort_key = data.lang, data.sort_key -- [[Special:WhatLinksHere/Wiktionary:Tracking/etymology/sortkey]] if sort_key then track("sortkey") end local display, categories = export.insert_source_cat_get_display(data) if lang and not data.nocat then -- Format categories, but only if there is a current language; {{cog}} currently gets no categories categories = format_categories(categories, lang, sort_key, nil, data.force_cat or force_cat) else categories = "" end return "<span class=\"etyl\">" .. display .. categories .. "</span>" end --[==[ Format sources for etymology templates such as {{tl|bor}}, {{tl|der}}, {{tl|inh}} and {{tl|cog}}. There may potentially be more than one source language (except currently {{tl|inh}}, which doesn't support it because it doesn't really make sense). In that case, all but the last source language is linked to the first term, but only if there is such a term and this linking makes sense, i.e. either (1) the term page exists after stripping diacritics according to the source language in question, or (2) the result of stripping diacritics according to the source language in question results in a different page from the same process applied with the last source language. For example, {{m|ru|соля́нка}} will link to [[солянка]] but {{m|en|соля́нка}} will link to [[соля́нка]] with an accent, and since they are different pages, the use of English as a non-final source with term 'соля́нка' will link to [[соля́нка]] even though it doesn't exist, on the assumption that it is merely a redlink that might exist. If none of the above criteria apply, a non-final source language will be linked to the Wikipedia entry for the language, just as final source languages always are. `data` contains the following fields: * `lang`: The destination language object into which the terms were borrowed, inherited or otherwise derived. Used for categorization and can be nil, as with {{tl|cog}}. * `sources`: List of source objects. Most commonly there is only one. If there are multiple, the non-final ones are handled specially; see above. * `terms`: List of term objects. Most commonly there is only one. If there are multiple source objects as well as multiple term objects, the non-final source objects link to the first term object. * `sort_key`: Sort key for categories. Usually nil. * `categories`: Categories to add to the page. Additional categories may be added to `categories` based on the source languages ('''in which case `categories` is destructively modified'''). If `lang` is nil, no categories will be added. * `nocat`: Don't add any categories to the page. * `sourceconj`: Conjunction used to separate multiple source languages. Defaults to {"and"}. * `borrowing_type`: Borrowing type used in categories, such as {"learned borrowings"}. Defaults to {"terms derived"}. * `force_cat`: Force category generation on non-mainspace pages. ]==] function export.format_sources(data) local lang, sources, terms, borrowing_type, sort_key, categories, nocat = data.lang, data.sources, data.terms, data.borrowing_type, data.sort_key, data.categories, data.nocat local term1, sources_n, source_segs, final_link_page = terms[1], #sources, {} local term1_term, term1_sc = term1.term, term1.sc if sources_n > 1 and term1_term and term1_term ~= "-" then final_link_page = get_link_page(term1_term, sources[sources_n], term1_sc) end for i, source in ipairs(sources) do local seg, display_term if i < sources_n and term1_term and term1_term ~= "-" then local link_page = get_link_page(term1_term, source, term1_sc) display_term = (link_page ~= final_link_page) or (link_page and new_title(link_page).exists) end -- TODO: if the display forms or transliterations are different, display the terms separately. if display_term then local display, this_cats = export.insert_source_cat_get_display{ lang = lang, source = source, borrowing_type = borrowing_type, raw = true, categories = categories, nocat = nocat, } seg = language_link{ lang = source, term = term1_term, alt = display, tr = "-", } if lang and not nocat then -- Format categories, but only if there is a current language; {{cog}} currently gets no categories this_cats = format_categories(this_cats, lang, sort_key, nil, data.force_cat or force_cat) else this_cats = "" end seg = "<span class=\"etyl\">" .. seg .. this_cats .. "</span>" else seg = export.format_source{ lang = lang, source = source, borrowing_type = borrowing_type, sort_key = sort_key, categories = categories, nocat = nocat, } end insert(source_segs, seg) end return join_segs(source_segs, data.sourceconj or "and") end -- Internal implementation of {{cognate}}/{{cog}} template. function export.format_cognate(data) return export.format_derived{ sources = data.sources, terms = data.terms, sort_key = data.sort_key, sourceconj = data.sourceconj, conj = data.conj, template_name = "cognate", force_cat = data.force_cat, } end -- Internal implementation of {{derived}}/{{der}} template. This is called externally from [[Module:affix]], -- [[Module:affixusex]] and [[Module:see]] and needs to support qualifiers, labels and references on the outside -- of the sources for use by those modules. function export.format_derived(data) local terms = data.terms local result = export.format_sources(data) .. export.format_links(terms, data.conj, data.template_name) local q, qq, l, ll, refs = data.q, data.qq, data.l, data.ll, data.refs if q and q[1] or qq and qq[1] or l and l[1] or ll and ll[1] or refs and refs[1] then result = format_qualifiers{ lang = terms[1].lang, text = result, q = q, qq = qq, l = l, ll = ll, refs = refs, } end return result end function export.insert_borrowed_cat(categories, lang, source) if lang_is_source(lang, source) then return end -- If both are the same, we want e.g. [[:Category:English terms borrowed back into English]] not -- [[:Category:English terms borrowed from English]]; the former is inserted automatically by format_source(). -- The second parameter here doesn't matter as it only affects `display`, which we don't use. insert(categories,"အဝ်ႏ" .. lang:getFullName() .. " ကထူႏလွူးခါꩻဒါႏ " .. select(2, export.get_display_and_cat_name(source, "raw")) .. "ဝေါဟာရဖုံႏ") end -- Internal implementation of {{borrowed}}/{{bor}} template. function export.format_borrowed(data) local categories = {} if not data.nocat then local lang = data.lang for _, source in ipairs(data.sources) do export.insert_borrowed_cat(categories, lang, source) end end data = shallow_copy(data) data.categories = categories return export.format_sources(data) .. export.format_links(data.terms, data.conj, "borrowed") end do -- Generate the non-ancestor error message. local function show_language(lang) local retval = ("%s (%s)"):format(lang:makeCategoryLink(), lang:getCode()) if lang:hasType("etymology-only") then retval = retval .. (" (an etymology-only language whose regular parent is %s)"):format( show_language(lang:getParent())) end return retval end -- Check that `lang` has `otherlang` (which may be an etymology-only language) as an ancestor. Throw an error if -- not. function export.check_ancestor(lang, otherlang) -- FIXME: I don't know if this function works correctly with etym-only languages in `lang`. I have fixed up -- the module link code appropriately (June 2024) but the remaining logic is untouched. if lang:hasAncestor(otherlang) then -- [[Special:WhatLinksHere/Wiktionary:Tracking/etymology/variety]] -- Track inheritance from varieties of Latin that shouldn't have any descendants (everything except Old Latin, Classical Latin and Vulgar Latin). if otherlang:getFullCode() == "la" then otherlang = otherlang:getCode() if not (otherlang == "itc-ola" or otherlang == "la-cla" or otherlang == "la-vul") then track("bad ancestor", otherlang) end end return end local ancestors, postscript = lang:getAncestors() local etym_module_link = lang:hasType("etymology-only") and "[[Module:etymology languages/data]] or " or "" local module_link = "[[" .. get_language_data_module_name(lang:getFullCode()) .. "]]" if not ancestors[1] then postscript = show_language(lang) .. " has no ancestors." else local ancestor_list = {} for _, ancestor in ipairs(ancestors) do insert(ancestor_list, show_language(ancestor)) end postscript = ("The ancestor%s of %s %s %s."):format( ancestors[2] and "s" or "", lang:getCanonicalName(), ancestors[2] and "are" or "is", concat(ancestor_list, " and ")) end error(("%s is not set as an ancestor of %s in %s%s. %s") :format(show_language(otherlang), show_language(lang), etym_module_link, module_link, postscript)) end end -- Internal implementation of {{inherited}}/{{inh}} template. function export.format_inherited(data) local lang, terms, sort_key, nocat = data.lang, data.terms, data.sort_key, data.nocat local source = terms[1].lang local categories = {} if not nocat then insert(categories, "အဝ်ႏ" .. lang:getFullName() .. " ကသွုပ်ခံႏခါꩻဒါႏအမွီႏ " .. source:getCanonicalName() .. "ဝေါဟာရဖုံႏ") end export.check_ancestor(lang, source) return export.format_source{ lang = lang, source = source, sort_key = sort_key, categories = categories, nocat = nocat, force_cat = data.force_cat, } .. export.format_links(terms, data.conj, "inherited") end -- Internal implementation of "misc variant" templates such as {{abbrev}}, {{clipping}}, {{reduplication}} and the like. function export.format_misc_variant(data) local lang, notext, terms, cats, parts = data.lang, data.notext, data.terms, data.cats, {} if not notext then insert(parts, data.text) end if terms[1] then if not notext then insert(parts, " " .. (data.oftext or "of") .. " ") end insert(parts, export.format_links(terms, data.conj, "misc_variant")) end local categories = {} if not data.nocat and cats then for _, cat in ipairs(cats) do insert(categories, cat .. lang:getFullName()) end end if #categories > 0 then insert(parts, format_categories(categories, lang, data.sort_key, nil, data.force_cat or force_cat)) end return concat(parts) end -- Implementation of miscellaneous templates such as {{unknown}} and {{onomatopoeia}} that have no associated terms. function export.format_misc_variant_no_term(data) local parts = {} if not data.notext then insert(parts, data.title) end if not data.nocat and data.cat then local lang, categories = data.lang, {} insert(categories, lang:getFullName() .. " " .. data.cat) insert(parts, format_categories(categories, lang, data.sort_key, nil, data.force_cat or force_cat)) end return concat(parts) end return export ls0j5c2mu1jbck18sadste0oyq8ppmh 12035 12034 2025-06-24T01:57:31Z 咽頭べさ 11 12035 Scribunto text/plain local export = {} -- For testing local force_cat = false local debug_track_module = "Module:debug/track" local languages_module = "Module:languages" local links_module = "Module:links" local pron_qualifier_module = "Module:pron qualifier" local table_module = "Module:table" local utilities_module = "Module:utilities" local concat = table.concat local insert = table.insert local new_title = mw.title.new local function debug_track(...) debug_track = require(debug_track_module) return debug_track(...) end local function format_categories(...) format_categories = require(utilities_module).format_categories return format_categories(...) end local function format_qualifiers(...) format_qualifiers = require(pron_qualifier_module).format_qualifiers return format_qualifiers(...) end local function full_link(...) full_link = require(links_module).full_link return full_link(...) end local function get_language_data_module_name(...) get_language_data_module_name = require(languages_module).getDataModuleName return get_language_data_module_name(...) end local function get_link_page(...) get_link_page = require(links_module).get_link_page return get_link_page(...) end local function language_link(...) language_link = require(links_module).language_link return language_link(...) end local function serial_comma_join(...) serial_comma_join = require(table_module).serialCommaJoin return serial_comma_join(...) end local function shallow_copy(...) shallow_copy = require(table_module).shallowCopy return shallow_copy(...) end local function track(page, code) local tracking_page = "etymology/" .. page debug_track(tracking_page) if code then debug_track(tracking_page .. "/" .. code) end end local function join_segs(segs, conj) if not segs[2] then return segs[1] elseif conj == "and" or conj == "or" then return serial_comma_join(segs, {conj = conj}) end local sep if conj == "," or conj == ";" then sep = conj .. " " elseif conj == "/" then sep = "/" elseif conj == "~" then sep = " ~ " elseif conj then error(("Internal error: Unrecognized conjunction \"%s\""):format(conj)) else error(("Internal error: No value supplied for conjunction"):format(conj)) end return concat(segs, sep) end -- Returns true if `lang` is the same as `source`, or a variety of it. local function lang_is_source(lang, source) return lang:getCode() == source:getCode() or lang:hasParent(source) end -- Format one or more links as specified in `termobjs`, a list of term objects of the format accepted by full_link() in -- [[Module:links]], additionally with optional qualifiers, labels and references. `conj` is used to join multiple -- terms and must be specified if there is more than one term. `template_name` is the template name used in debug -- tracking and must be specified. The return value begins with a space if there is anything to display (which is always -- the case unless there is a single term with the value "-"). function export.format_links(termobjs, conj, template_name) for i, termobj in ipairs(termobjs) do local term = termobj.term if termobj.lang:hasType("family") then if term and term ~= "-" then debug_track(template_name .. "/family-with-term") end term = "-" termobj.term = term end template_name = template_name or "derived" if term == "-" then --[=[ [[Special:WhatLinksHere/Wiktionary:Tracking/cognate/no-term]] [[Special:WhatLinksHere/Wiktionary:Tracking/derived/no-term]] [[Special:WhatLinksHere/Wiktionary:Tracking/borrowed/no-term]] [[Special:WhatLinksHere/Wiktionary:Tracking/calque/no-term]] ]=] debug_track(template_name .. "/no-term") termobjs[i] = "" else termobjs[i] = full_link(termobj, "term", nil, "show qualifiers") end end local retval = join_segs(termobjs, conj) if retval ~= "" then retval = " " .. retval end return retval end function export.get_display_and_cat_name(source, raw) local display, cat_name if source:getCode() == "und" then display = "undetermined" cat_name = "ဘာႏသာႏငဝ်းငွါအလင်ဖုံႏ" elseif source:getCode() == "mul" then display = raw and "translingual" or "[[w:Translingualism|translingual]]" cat_name = "Translingual" elseif source:getCode() == "mul-tax" then display = raw and "ဖြယ်ခွိုꩻပညာႏအမိဉ်ꩻ" or "[[w:en:Biological nomenclature|ဖြယ်ခွိုꩻပညာႏအမိဉ်ꩻဖုံႏ]]" cat_name = "taxonomic names" else display = raw and source:getCanonicalName() or source:makeWikipediaLink() cat_name = source:getDisplayForm() end return display, cat_name end function export.insert_source_cat_get_display(data) local categories, lang, source = data.categories, data.lang, data.source local display, cat_name = export.get_display_and_cat_name(source, data.raw) if lang and not data.nocat then -- Add the category, but only if there is a current language if not categories then categories = {} end local langname = lang:getFullName() -- If `lang` is an etym-only language, we need to check both it and its parent full language against `source`. -- Otherwise if e.g. `lang` is Medieval Latin and `source` is Latin, we'll end up wrongly constructing a -- category 'Latin terms derived from Latin'. table.insert(categories,"အဝ်ႏ" .. langname .. " ကထူႏလွူးခါꩻဒါႏ " .. langname .. "ဝေါဟာရဖုံႏ") else table.insert(categories,"အဝ်ႏ" .. langname .. (data.borrowing_type or "ကလင်ꩻ") .. "လွဉ်ဒါႏ " .. cat_name .. "ဝေါဟာရဖုံႏ") end return display, categories end function export.format_source(data) local lang, sort_key = data.lang, data.sort_key -- [[Special:WhatLinksHere/Wiktionary:Tracking/etymology/sortkey]] if sort_key then track("sortkey") end local display, categories = export.insert_source_cat_get_display(data) if lang and not data.nocat then -- Format categories, but only if there is a current language; {{cog}} currently gets no categories categories = format_categories(categories, lang, sort_key, nil, data.force_cat or force_cat) else categories = "" end return "<span class=\"etyl\">" .. display .. categories .. "</span>" end --[==[ Format sources for etymology templates such as {{tl|bor}}, {{tl|der}}, {{tl|inh}} and {{tl|cog}}. There may potentially be more than one source language (except currently {{tl|inh}}, which doesn't support it because it doesn't really make sense). In that case, all but the last source language is linked to the first term, but only if there is such a term and this linking makes sense, i.e. either (1) the term page exists after stripping diacritics according to the source language in question, or (2) the result of stripping diacritics according to the source language in question results in a different page from the same process applied with the last source language. For example, {{m|ru|соля́нка}} will link to [[солянка]] but {{m|en|соля́нка}} will link to [[соля́нка]] with an accent, and since they are different pages, the use of English as a non-final source with term 'соля́нка' will link to [[соля́нка]] even though it doesn't exist, on the assumption that it is merely a redlink that might exist. If none of the above criteria apply, a non-final source language will be linked to the Wikipedia entry for the language, just as final source languages always are. `data` contains the following fields: * `lang`: The destination language object into which the terms were borrowed, inherited or otherwise derived. Used for categorization and can be nil, as with {{tl|cog}}. * `sources`: List of source objects. Most commonly there is only one. If there are multiple, the non-final ones are handled specially; see above. * `terms`: List of term objects. Most commonly there is only one. If there are multiple source objects as well as multiple term objects, the non-final source objects link to the first term object. * `sort_key`: Sort key for categories. Usually nil. * `categories`: Categories to add to the page. Additional categories may be added to `categories` based on the source languages ('''in which case `categories` is destructively modified'''). If `lang` is nil, no categories will be added. * `nocat`: Don't add any categories to the page. * `sourceconj`: Conjunction used to separate multiple source languages. Defaults to {"and"}. * `borrowing_type`: Borrowing type used in categories, such as {"learned borrowings"}. Defaults to {"terms derived"}. * `force_cat`: Force category generation on non-mainspace pages. ]==] function export.format_sources(data) local lang, sources, terms, borrowing_type, sort_key, categories, nocat = data.lang, data.sources, data.terms, data.borrowing_type, data.sort_key, data.categories, data.nocat local term1, sources_n, source_segs, final_link_page = terms[1], #sources, {} local term1_term, term1_sc = term1.term, term1.sc if sources_n > 1 and term1_term and term1_term ~= "-" then final_link_page = get_link_page(term1_term, sources[sources_n], term1_sc) end for i, source in ipairs(sources) do local seg, display_term if i < sources_n and term1_term and term1_term ~= "-" then local link_page = get_link_page(term1_term, source, term1_sc) display_term = (link_page ~= final_link_page) or (link_page and new_title(link_page).exists) end -- TODO: if the display forms or transliterations are different, display the terms separately. if display_term then local display, this_cats = export.insert_source_cat_get_display{ lang = lang, source = source, borrowing_type = borrowing_type, raw = true, categories = categories, nocat = nocat, } seg = language_link{ lang = source, term = term1_term, alt = display, tr = "-", } if lang and not nocat then -- Format categories, but only if there is a current language; {{cog}} currently gets no categories this_cats = format_categories(this_cats, lang, sort_key, nil, data.force_cat or force_cat) else this_cats = "" end seg = "<span class=\"etyl\">" .. seg .. this_cats .. "</span>" else seg = export.format_source{ lang = lang, source = source, borrowing_type = borrowing_type, sort_key = sort_key, categories = categories, nocat = nocat, } end insert(source_segs, seg) end return join_segs(source_segs, data.sourceconj or "and") end -- Internal implementation of {{cognate}}/{{cog}} template. function export.format_cognate(data) return export.format_derived{ sources = data.sources, terms = data.terms, sort_key = data.sort_key, sourceconj = data.sourceconj, conj = data.conj, template_name = "cognate", force_cat = data.force_cat, } end -- Internal implementation of {{derived}}/{{der}} template. This is called externally from [[Module:affix]], -- [[Module:affixusex]] and [[Module:see]] and needs to support qualifiers, labels and references on the outside -- of the sources for use by those modules. function export.format_derived(data) local terms = data.terms local result = export.format_sources(data) .. export.format_links(terms, data.conj, data.template_name) local q, qq, l, ll, refs = data.q, data.qq, data.l, data.ll, data.refs if q and q[1] or qq and qq[1] or l and l[1] or ll and ll[1] or refs and refs[1] then result = format_qualifiers{ lang = terms[1].lang, text = result, q = q, qq = qq, l = l, ll = ll, refs = refs, } end return result end function export.insert_borrowed_cat(categories, lang, source) if lang_is_source(lang, source) then return end -- If both are the same, we want e.g. [[:Category:English terms borrowed back into English]] not -- [[:Category:English terms borrowed from English]]; the former is inserted automatically by format_source(). -- The second parameter here doesn't matter as it only affects `display`, which we don't use. insert(categories,"အဝ်ႏ" .. lang:getFullName() .. " ကထူႏလွူးခါꩻဒါႏ " .. select(2, export.get_display_and_cat_name(source, "raw")) .. "ဝေါဟာရဖုံႏ") end -- Internal implementation of {{borrowed}}/{{bor}} template. function export.format_borrowed(data) local categories = {} if not data.nocat then local lang = data.lang for _, source in ipairs(data.sources) do export.insert_borrowed_cat(categories, lang, source) end end data = shallow_copy(data) data.categories = categories return export.format_sources(data) .. export.format_links(data.terms, data.conj, "borrowed") end do -- Generate the non-ancestor error message. local function show_language(lang) local retval = ("%s (%s)"):format(lang:makeCategoryLink(), lang:getCode()) if lang:hasType("etymology-only") then retval = retval .. (" (an etymology-only language whose regular parent is %s)"):format( show_language(lang:getParent())) end return retval end -- Check that `lang` has `otherlang` (which may be an etymology-only language) as an ancestor. Throw an error if -- not. function export.check_ancestor(lang, otherlang) -- FIXME: I don't know if this function works correctly with etym-only languages in `lang`. I have fixed up -- the module link code appropriately (June 2024) but the remaining logic is untouched. if lang:hasAncestor(otherlang) then -- [[Special:WhatLinksHere/Wiktionary:Tracking/etymology/variety]] -- Track inheritance from varieties of Latin that shouldn't have any descendants (everything except Old Latin, Classical Latin and Vulgar Latin). if otherlang:getFullCode() == "la" then otherlang = otherlang:getCode() if not (otherlang == "itc-ola" or otherlang == "la-cla" or otherlang == "la-vul") then track("bad ancestor", otherlang) end end return end local ancestors, postscript = lang:getAncestors() local etym_module_link = lang:hasType("etymology-only") and "[[Module:etymology languages/data]] or " or "" local module_link = "[[" .. get_language_data_module_name(lang:getFullCode()) .. "]]" if not ancestors[1] then postscript = show_language(lang) .. " has no ancestors." else local ancestor_list = {} for _, ancestor in ipairs(ancestors) do insert(ancestor_list, show_language(ancestor)) end postscript = ("The ancestor%s of %s %s %s."):format( ancestors[2] and "s" or "", lang:getCanonicalName(), ancestors[2] and "are" or "is", concat(ancestor_list, " and ")) end error(("%s is not set as an ancestor of %s in %s%s. %s") :format(show_language(otherlang), show_language(lang), etym_module_link, module_link, postscript)) end end -- Internal implementation of {{inherited}}/{{inh}} template. function export.format_inherited(data) local lang, terms, sort_key, nocat = data.lang, data.terms, data.sort_key, data.nocat local source = terms[1].lang local categories = {} if not nocat then insert(categories, "အဝ်ႏ" .. lang:getFullName() .. " ကသွုပ်ခံႏခါꩻဒါႏအမွီႏ " .. source:getCanonicalName() .. "ဝေါဟာရဖုံႏ") end export.check_ancestor(lang, source) return export.format_source{ lang = lang, source = source, sort_key = sort_key, categories = categories, nocat = nocat, force_cat = data.force_cat, } .. export.format_links(terms, data.conj, "inherited") end -- Internal implementation of "misc variant" templates such as {{abbrev}}, {{clipping}}, {{reduplication}} and the like. function export.format_misc_variant(data) local lang, notext, terms, cats, parts = data.lang, data.notext, data.terms, data.cats, {} if not notext then insert(parts, data.text) end if terms[1] then if not notext then insert(parts, " " .. (data.oftext or "of") .. " ") end insert(parts, export.format_links(terms, data.conj, "misc_variant")) end local categories = {} if not data.nocat and cats then for _, cat in ipairs(cats) do insert(categories, cat .. lang:getFullName()) end end if #categories > 0 then insert(parts, format_categories(categories, lang, data.sort_key, nil, data.force_cat or force_cat)) end return concat(parts) end -- Implementation of miscellaneous templates such as {{unknown}} and {{onomatopoeia}} that have no associated terms. function export.format_misc_variant_no_term(data) local parts = {} if not data.notext then insert(parts, data.title) end if not data.nocat and data.cat then local lang, categories = data.lang, {} insert(categories, lang:getFullName() .. " " .. data.cat) insert(parts, format_categories(categories, lang, data.sort_key, nil, data.force_cat or force_cat)) end return concat(parts) end return export g048p8n5ffvsark6r8g1z1e08cb0oqv 12036 12035 2025-06-24T02:04:32Z 咽頭べさ 11 12036 Scribunto text/plain local export = {} -- For testing local force_cat = false local debug_track_module = "Module:debug/track" local languages_module = "Module:languages" local links_module = "Module:links" local pron_qualifier_module = "Module:pron qualifier" local table_module = "Module:table" local utilities_module = "Module:utilities" local concat = table.concat local insert = table.insert local new_title = mw.title.new local function debug_track(...) debug_track = require(debug_track_module) return debug_track(...) end local function format_categories(...) format_categories = require(utilities_module).format_categories return format_categories(...) end local function format_qualifiers(...) format_qualifiers = require(pron_qualifier_module).format_qualifiers return format_qualifiers(...) end local function full_link(...) full_link = require(links_module).full_link return full_link(...) end local function get_language_data_module_name(...) get_language_data_module_name = require(languages_module).getDataModuleName return get_language_data_module_name(...) end local function get_link_page(...) get_link_page = require(links_module).get_link_page return get_link_page(...) end local function language_link(...) language_link = require(links_module).language_link return language_link(...) end local function serial_comma_join(...) serial_comma_join = require(table_module).serialCommaJoin return serial_comma_join(...) end local function shallow_copy(...) shallow_copy = require(table_module).shallowCopy return shallow_copy(...) end local function track(page, code) local tracking_page = "etymology/" .. page debug_track(tracking_page) if code then debug_track(tracking_page .. "/" .. code) end end local function join_segs(segs, conj) if not segs[2] then return segs[1] elseif conj == "and" or conj == "or" then return serial_comma_join(segs, {conj = conj}) end local sep if conj == "," or conj == ";" then sep = conj .. " " elseif conj == "/" then sep = "/" elseif conj == "~" then sep = " ~ " elseif conj then error(("Internal error: Unrecognized conjunction \"%s\""):format(conj)) else error(("Internal error: No value supplied for conjunction"):format(conj)) end return concat(segs, sep) end -- Returns true if `lang` is the same as `source`, or a variety of it. local function lang_is_source(lang, source) return lang:getCode() == source:getCode() or lang:hasParent(source) end -- Format one or more links as specified in `termobjs`, a list of term objects of the format accepted by full_link() in -- [[Module:links]], additionally with optional qualifiers, labels and references. `conj` is used to join multiple -- terms and must be specified if there is more than one term. `template_name` is the template name used in debug -- tracking and must be specified. The return value begins with a space if there is anything to display (which is always -- the case unless there is a single term with the value "-"). function export.format_links(termobjs, conj, template_name) for i, termobj in ipairs(termobjs) do local term = termobj.term if termobj.lang:hasType("family") then if term and term ~= "-" then debug_track(template_name .. "/family-with-term") end term = "-" termobj.term = term end template_name = template_name or "derived" if term == "-" then --[=[ [[Special:WhatLinksHere/Wiktionary:Tracking/cognate/no-term]] [[Special:WhatLinksHere/Wiktionary:Tracking/derived/no-term]] [[Special:WhatLinksHere/Wiktionary:Tracking/borrowed/no-term]] [[Special:WhatLinksHere/Wiktionary:Tracking/calque/no-term]] ]=] debug_track(template_name .. "/no-term") termobjs[i] = "" else termobjs[i] = full_link(termobj, "term", nil, "show qualifiers") end end local retval = join_segs(termobjs, conj) if retval ~= "" then retval = " " .. retval end return retval end function export.get_display_and_cat_name(source, raw) local display, cat_name if source:getCode() == "und" then display = "undetermined" cat_name = "ဘာႏသာႏငဝ်းငွါအလင်ဖုံႏ" elseif source:getCode() == "mul" then display = raw and "translingual" or "[[w:Translingualism|translingual]]" cat_name = "Translingual" elseif source:getCode() == "mul-tax" then display = raw and "ဖြယ်ခွိုꩻပညာႏအမိဉ်ꩻ" or "[[w:en:Biological nomenclature|ဖြယ်ခွိုꩻပညာႏအမိဉ်ꩻဖုံႏ]]" cat_name = "taxonomic names" else display = raw and source:getCanonicalName() or source:makeWikipediaLink() cat_name = source:getDisplayForm() end return display, cat_name end function export.insert_source_cat_get_display(data) local categories, lang, source = data.categories, data.lang, data.source local display, cat_name = export.get_display_and_cat_name(source, data.raw) if lang and not data.nocat then -- Add the category, but only if there is a current language if not categories then categories = {} end local langname = lang:getFullName() -- If `lang` is an etym-only language, we need to check both it and its parent full language against `source`. -- Otherwise if e.g. `lang` is Medieval Latin and `source` is Latin, we'll end up wrongly constructing a -- category 'Latin terms derived from Latin'. insert(categories, langname .. ( lang_is_source(lang, source) and " ကထူႏလွူးခါꩻဒါႏ " .. cat_name or " " .. (data.borrowing_type or " ကလင်ꩻလွဉ်ဒါႏ ") .. cat_name ) .. "ဝေါဟာရဖုံႏ") end return display, categories end function export.format_source(data) local lang, sort_key = data.lang, data.sort_key -- [[Special:WhatLinksHere/Wiktionary:Tracking/etymology/sortkey]] if sort_key then track("sortkey") end local display, categories = export.insert_source_cat_get_display(data) if lang and not data.nocat then -- Format categories, but only if there is a current language; {{cog}} currently gets no categories categories = format_categories(categories, lang, sort_key, nil, data.force_cat or force_cat) else categories = "" end return "<span class=\"etyl\">" .. display .. categories .. "</span>" end --[==[ Format sources for etymology templates such as {{tl|bor}}, {{tl|der}}, {{tl|inh}} and {{tl|cog}}. There may potentially be more than one source language (except currently {{tl|inh}}, which doesn't support it because it doesn't really make sense). In that case, all but the last source language is linked to the first term, but only if there is such a term and this linking makes sense, i.e. either (1) the term page exists after stripping diacritics according to the source language in question, or (2) the result of stripping diacritics according to the source language in question results in a different page from the same process applied with the last source language. For example, {{m|ru|соля́нка}} will link to [[солянка]] but {{m|en|соля́нка}} will link to [[соля́нка]] with an accent, and since they are different pages, the use of English as a non-final source with term 'соля́нка' will link to [[соля́нка]] even though it doesn't exist, on the assumption that it is merely a redlink that might exist. If none of the above criteria apply, a non-final source language will be linked to the Wikipedia entry for the language, just as final source languages always are. `data` contains the following fields: * `lang`: The destination language object into which the terms were borrowed, inherited or otherwise derived. Used for categorization and can be nil, as with {{tl|cog}}. * `sources`: List of source objects. Most commonly there is only one. If there are multiple, the non-final ones are handled specially; see above. * `terms`: List of term objects. Most commonly there is only one. If there are multiple source objects as well as multiple term objects, the non-final source objects link to the first term object. * `sort_key`: Sort key for categories. Usually nil. * `categories`: Categories to add to the page. Additional categories may be added to `categories` based on the source languages ('''in which case `categories` is destructively modified'''). If `lang` is nil, no categories will be added. * `nocat`: Don't add any categories to the page. * `sourceconj`: Conjunction used to separate multiple source languages. Defaults to {"and"}. * `borrowing_type`: Borrowing type used in categories, such as {"learned borrowings"}. Defaults to {"terms derived"}. * `force_cat`: Force category generation on non-mainspace pages. ]==] function export.format_sources(data) local lang, sources, terms, borrowing_type, sort_key, categories, nocat = data.lang, data.sources, data.terms, data.borrowing_type, data.sort_key, data.categories, data.nocat local term1, sources_n, source_segs, final_link_page = terms[1], #sources, {} local term1_term, term1_sc = term1.term, term1.sc if sources_n > 1 and term1_term and term1_term ~= "-" then final_link_page = get_link_page(term1_term, sources[sources_n], term1_sc) end for i, source in ipairs(sources) do local seg, display_term if i < sources_n and term1_term and term1_term ~= "-" then local link_page = get_link_page(term1_term, source, term1_sc) display_term = (link_page ~= final_link_page) or (link_page and new_title(link_page).exists) end -- TODO: if the display forms or transliterations are different, display the terms separately. if display_term then local display, this_cats = export.insert_source_cat_get_display{ lang = lang, source = source, borrowing_type = borrowing_type, raw = true, categories = categories, nocat = nocat, } seg = language_link{ lang = source, term = term1_term, alt = display, tr = "-", } if lang and not nocat then -- Format categories, but only if there is a current language; {{cog}} currently gets no categories this_cats = format_categories(this_cats, lang, sort_key, nil, data.force_cat or force_cat) else this_cats = "" end seg = "<span class=\"etyl\">" .. seg .. this_cats .. "</span>" else seg = export.format_source{ lang = lang, source = source, borrowing_type = borrowing_type, sort_key = sort_key, categories = categories, nocat = nocat, } end insert(source_segs, seg) end return join_segs(source_segs, data.sourceconj or "and") end -- Internal implementation of {{cognate}}/{{cog}} template. function export.format_cognate(data) return export.format_derived{ sources = data.sources, terms = data.terms, sort_key = data.sort_key, sourceconj = data.sourceconj, conj = data.conj, template_name = "cognate", force_cat = data.force_cat, } end -- Internal implementation of {{derived}}/{{der}} template. This is called externally from [[Module:affix]], -- [[Module:affixusex]] and [[Module:see]] and needs to support qualifiers, labels and references on the outside -- of the sources for use by those modules. function export.format_derived(data) local terms = data.terms local result = export.format_sources(data) .. export.format_links(terms, data.conj, data.template_name) local q, qq, l, ll, refs = data.q, data.qq, data.l, data.ll, data.refs if q and q[1] or qq and qq[1] or l and l[1] or ll and ll[1] or refs and refs[1] then result = format_qualifiers{ lang = terms[1].lang, text = result, q = q, qq = qq, l = l, ll = ll, refs = refs, } end return result end function export.insert_borrowed_cat(categories, lang, source) if lang_is_source(lang, source) then return end -- If both are the same, we want e.g. [[:Category:English terms borrowed back into English]] not -- [[:Category:English terms borrowed from English]]; the former is inserted automatically by format_source(). -- The second parameter here doesn't matter as it only affects `display`, which we don't use. insert(categories,"အဝ်ႏ" .. lang:getFullName() .. " ကထူႏလွူးခါꩻဒါႏ " .. select(2, export.get_display_and_cat_name(source, "raw")) .. "ဝေါဟာရဖုံႏ") end -- Internal implementation of {{borrowed}}/{{bor}} template. function export.format_borrowed(data) local categories = {} if not data.nocat then local lang = data.lang for _, source in ipairs(data.sources) do export.insert_borrowed_cat(categories, lang, source) end end data = shallow_copy(data) data.categories = categories return export.format_sources(data) .. export.format_links(data.terms, data.conj, "borrowed") end do -- Generate the non-ancestor error message. local function show_language(lang) local retval = ("%s (%s)"):format(lang:makeCategoryLink(), lang:getCode()) if lang:hasType("etymology-only") then retval = retval .. (" (an etymology-only language whose regular parent is %s)"):format( show_language(lang:getParent())) end return retval end -- Check that `lang` has `otherlang` (which may be an etymology-only language) as an ancestor. Throw an error if -- not. function export.check_ancestor(lang, otherlang) -- FIXME: I don't know if this function works correctly with etym-only languages in `lang`. I have fixed up -- the module link code appropriately (June 2024) but the remaining logic is untouched. if lang:hasAncestor(otherlang) then -- [[Special:WhatLinksHere/Wiktionary:Tracking/etymology/variety]] -- Track inheritance from varieties of Latin that shouldn't have any descendants (everything except Old Latin, Classical Latin and Vulgar Latin). if otherlang:getFullCode() == "la" then otherlang = otherlang:getCode() if not (otherlang == "itc-ola" or otherlang == "la-cla" or otherlang == "la-vul") then track("bad ancestor", otherlang) end end return end local ancestors, postscript = lang:getAncestors() local etym_module_link = lang:hasType("etymology-only") and "[[Module:etymology languages/data]] or " or "" local module_link = "[[" .. get_language_data_module_name(lang:getFullCode()) .. "]]" if not ancestors[1] then postscript = show_language(lang) .. " has no ancestors." else local ancestor_list = {} for _, ancestor in ipairs(ancestors) do insert(ancestor_list, show_language(ancestor)) end postscript = ("The ancestor%s of %s %s %s."):format( ancestors[2] and "s" or "", lang:getCanonicalName(), ancestors[2] and "are" or "is", concat(ancestor_list, " and ")) end error(("%s is not set as an ancestor of %s in %s%s. %s") :format(show_language(otherlang), show_language(lang), etym_module_link, module_link, postscript)) end end -- Internal implementation of {{inherited}}/{{inh}} template. function export.format_inherited(data) local lang, terms, sort_key, nocat = data.lang, data.terms, data.sort_key, data.nocat local source = terms[1].lang local categories = {} if not nocat then insert(categories, "အဝ်ႏ" .. lang:getFullName() .. " ကသွုပ်ခံႏခါꩻဒါႏအမွီႏ " .. source:getCanonicalName() .. "ဝေါဟာရဖုံႏ") end export.check_ancestor(lang, source) return export.format_source{ lang = lang, source = source, sort_key = sort_key, categories = categories, nocat = nocat, force_cat = data.force_cat, } .. export.format_links(terms, data.conj, "inherited") end -- Internal implementation of "misc variant" templates such as {{abbrev}}, {{clipping}}, {{reduplication}} and the like. function export.format_misc_variant(data) local lang, notext, terms, cats, parts = data.lang, data.notext, data.terms, data.cats, {} if not notext then insert(parts, data.text) end if terms[1] then if not notext then insert(parts, " " .. (data.oftext or "of") .. " ") end insert(parts, export.format_links(terms, data.conj, "misc_variant")) end local categories = {} if not data.nocat and cats then for _, cat in ipairs(cats) do insert(categories, cat .. lang:getFullName()) end end if #categories > 0 then insert(parts, format_categories(categories, lang, data.sort_key, nil, data.force_cat or force_cat)) end return concat(parts) end -- Implementation of miscellaneous templates such as {{unknown}} and {{onomatopoeia}} that have no associated terms. function export.format_misc_variant_no_term(data) local parts = {} if not data.notext then insert(parts, data.title) end if not data.nocat and data.cat then local lang, categories = data.lang, {} insert(categories, lang:getFullName() .. " " .. data.cat) insert(parts, format_categories(categories, lang, data.sort_key, nil, data.force_cat or force_cat)) end return concat(parts) end return export 334ha45er66fhug8chda1vhdm800z3w 12037 12036 2025-06-24T02:06:30Z 咽頭べさ 11 12037 Scribunto text/plain local export = {} -- For testing local force_cat = false local debug_track_module = "Module:debug/track" local languages_module = "Module:languages" local links_module = "Module:links" local pron_qualifier_module = "Module:pron qualifier" local table_module = "Module:table" local utilities_module = "Module:utilities" local concat = table.concat local insert = table.insert local new_title = mw.title.new local function debug_track(...) debug_track = require(debug_track_module) return debug_track(...) end local function format_categories(...) format_categories = require(utilities_module).format_categories return format_categories(...) end local function format_qualifiers(...) format_qualifiers = require(pron_qualifier_module).format_qualifiers return format_qualifiers(...) end local function full_link(...) full_link = require(links_module).full_link return full_link(...) end local function get_language_data_module_name(...) get_language_data_module_name = require(languages_module).getDataModuleName return get_language_data_module_name(...) end local function get_link_page(...) get_link_page = require(links_module).get_link_page return get_link_page(...) end local function language_link(...) language_link = require(links_module).language_link return language_link(...) end local function serial_comma_join(...) serial_comma_join = require(table_module).serialCommaJoin return serial_comma_join(...) end local function shallow_copy(...) shallow_copy = require(table_module).shallowCopy return shallow_copy(...) end local function track(page, code) local tracking_page = "etymology/" .. page debug_track(tracking_page) if code then debug_track(tracking_page .. "/" .. code) end end local function join_segs(segs, conj) if not segs[2] then return segs[1] elseif conj == "and" or conj == "or" then return serial_comma_join(segs, {conj = conj}) end local sep if conj == "," or conj == ";" then sep = conj .. " " elseif conj == "/" then sep = "/" elseif conj == "~" then sep = " ~ " elseif conj then error(("Internal error: Unrecognized conjunction \"%s\""):format(conj)) else error(("Internal error: No value supplied for conjunction"):format(conj)) end return concat(segs, sep) end -- Returns true if `lang` is the same as `source`, or a variety of it. local function lang_is_source(lang, source) return lang:getCode() == source:getCode() or lang:hasParent(source) end -- Format one or more links as specified in `termobjs`, a list of term objects of the format accepted by full_link() in -- [[Module:links]], additionally with optional qualifiers, labels and references. `conj` is used to join multiple -- terms and must be specified if there is more than one term. `template_name` is the template name used in debug -- tracking and must be specified. The return value begins with a space if there is anything to display (which is always -- the case unless there is a single term with the value "-"). function export.format_links(termobjs, conj, template_name) for i, termobj in ipairs(termobjs) do local term = termobj.term if termobj.lang:hasType("family") then if term and term ~= "-" then debug_track(template_name .. "/family-with-term") end term = "-" termobj.term = term end template_name = template_name or "derived" if term == "-" then --[=[ [[Special:WhatLinksHere/Wiktionary:Tracking/cognate/no-term]] [[Special:WhatLinksHere/Wiktionary:Tracking/derived/no-term]] [[Special:WhatLinksHere/Wiktionary:Tracking/borrowed/no-term]] [[Special:WhatLinksHere/Wiktionary:Tracking/calque/no-term]] ]=] debug_track(template_name .. "/no-term") termobjs[i] = "" else termobjs[i] = full_link(termobj, "term", nil, "show qualifiers") end end local retval = join_segs(termobjs, conj) if retval ~= "" then retval = " " .. retval end return retval end function export.get_display_and_cat_name(source, raw) local display, cat_name if source:getCode() == "und" then display = "undetermined" cat_name = "ဘာႏသာႏငဝ်းငွါအလင်ဖုံႏ" elseif source:getCode() == "mul" then display = raw and "translingual" or "[[w:Translingualism|translingual]]" cat_name = "Translingual" elseif source:getCode() == "mul-tax" then display = raw and "ဖြယ်ခွိုꩻပညာႏအမိဉ်ꩻ" or "[[w:en:Biological nomenclature|ဖြယ်ခွိုꩻပညာႏအမိဉ်ꩻဖုံႏ]]" cat_name = "taxonomic names" else display = raw and source:getCanonicalName() or source:makeWikipediaLink() cat_name = source:getDisplayForm() end return display, cat_name end function export.insert_source_cat_get_display(data) local categories, lang, source = data.categories, data.lang, data.source local display, cat_name = export.get_display_and_cat_name(source, data.raw) if lang and not data.nocat then -- Add the category, but only if there is a current language if not categories then categories = {} end local langname = lang:getFullName() -- If `lang` is an etym-only language, we need to check both it and its parent full language against `source`. -- Otherwise if e.g. `lang` is Medieval Latin and `source` is Latin, we'll end up wrongly constructing a -- category 'Latin terms derived from Latin'. insert(categories,"အဝ်ႏ" .. langname .. ( lang_is_source(lang, source) and " ကထူႏလွူးခါꩻဒါႏ " .. cat_name or " " .. (data.borrowing_type or " ကလင်ꩻလွဉ်ဒါႏ ") .. cat_name ) .. "ဝေါဟာရဖုံႏ") end return display, categories end function export.format_source(data) local lang, sort_key = data.lang, data.sort_key -- [[Special:WhatLinksHere/Wiktionary:Tracking/etymology/sortkey]] if sort_key then track("sortkey") end local display, categories = export.insert_source_cat_get_display(data) if lang and not data.nocat then -- Format categories, but only if there is a current language; {{cog}} currently gets no categories categories = format_categories(categories, lang, sort_key, nil, data.force_cat or force_cat) else categories = "" end return "<span class=\"etyl\">" .. display .. categories .. "</span>" end --[==[ Format sources for etymology templates such as {{tl|bor}}, {{tl|der}}, {{tl|inh}} and {{tl|cog}}. There may potentially be more than one source language (except currently {{tl|inh}}, which doesn't support it because it doesn't really make sense). In that case, all but the last source language is linked to the first term, but only if there is such a term and this linking makes sense, i.e. either (1) the term page exists after stripping diacritics according to the source language in question, or (2) the result of stripping diacritics according to the source language in question results in a different page from the same process applied with the last source language. For example, {{m|ru|соля́нка}} will link to [[солянка]] but {{m|en|соля́нка}} will link to [[соля́нка]] with an accent, and since they are different pages, the use of English as a non-final source with term 'соля́нка' will link to [[соля́нка]] even though it doesn't exist, on the assumption that it is merely a redlink that might exist. If none of the above criteria apply, a non-final source language will be linked to the Wikipedia entry for the language, just as final source languages always are. `data` contains the following fields: * `lang`: The destination language object into which the terms were borrowed, inherited or otherwise derived. Used for categorization and can be nil, as with {{tl|cog}}. * `sources`: List of source objects. Most commonly there is only one. If there are multiple, the non-final ones are handled specially; see above. * `terms`: List of term objects. Most commonly there is only one. If there are multiple source objects as well as multiple term objects, the non-final source objects link to the first term object. * `sort_key`: Sort key for categories. Usually nil. * `categories`: Categories to add to the page. Additional categories may be added to `categories` based on the source languages ('''in which case `categories` is destructively modified'''). If `lang` is nil, no categories will be added. * `nocat`: Don't add any categories to the page. * `sourceconj`: Conjunction used to separate multiple source languages. Defaults to {"and"}. * `borrowing_type`: Borrowing type used in categories, such as {"learned borrowings"}. Defaults to {"terms derived"}. * `force_cat`: Force category generation on non-mainspace pages. ]==] function export.format_sources(data) local lang, sources, terms, borrowing_type, sort_key, categories, nocat = data.lang, data.sources, data.terms, data.borrowing_type, data.sort_key, data.categories, data.nocat local term1, sources_n, source_segs, final_link_page = terms[1], #sources, {} local term1_term, term1_sc = term1.term, term1.sc if sources_n > 1 and term1_term and term1_term ~= "-" then final_link_page = get_link_page(term1_term, sources[sources_n], term1_sc) end for i, source in ipairs(sources) do local seg, display_term if i < sources_n and term1_term and term1_term ~= "-" then local link_page = get_link_page(term1_term, source, term1_sc) display_term = (link_page ~= final_link_page) or (link_page and new_title(link_page).exists) end -- TODO: if the display forms or transliterations are different, display the terms separately. if display_term then local display, this_cats = export.insert_source_cat_get_display{ lang = lang, source = source, borrowing_type = borrowing_type, raw = true, categories = categories, nocat = nocat, } seg = language_link{ lang = source, term = term1_term, alt = display, tr = "-", } if lang and not nocat then -- Format categories, but only if there is a current language; {{cog}} currently gets no categories this_cats = format_categories(this_cats, lang, sort_key, nil, data.force_cat or force_cat) else this_cats = "" end seg = "<span class=\"etyl\">" .. seg .. this_cats .. "</span>" else seg = export.format_source{ lang = lang, source = source, borrowing_type = borrowing_type, sort_key = sort_key, categories = categories, nocat = nocat, } end insert(source_segs, seg) end return join_segs(source_segs, data.sourceconj or "and") end -- Internal implementation of {{cognate}}/{{cog}} template. function export.format_cognate(data) return export.format_derived{ sources = data.sources, terms = data.terms, sort_key = data.sort_key, sourceconj = data.sourceconj, conj = data.conj, template_name = "cognate", force_cat = data.force_cat, } end -- Internal implementation of {{derived}}/{{der}} template. This is called externally from [[Module:affix]], -- [[Module:affixusex]] and [[Module:see]] and needs to support qualifiers, labels and references on the outside -- of the sources for use by those modules. function export.format_derived(data) local terms = data.terms local result = export.format_sources(data) .. export.format_links(terms, data.conj, data.template_name) local q, qq, l, ll, refs = data.q, data.qq, data.l, data.ll, data.refs if q and q[1] or qq and qq[1] or l and l[1] or ll and ll[1] or refs and refs[1] then result = format_qualifiers{ lang = terms[1].lang, text = result, q = q, qq = qq, l = l, ll = ll, refs = refs, } end return result end function export.insert_borrowed_cat(categories, lang, source) if lang_is_source(lang, source) then return end -- If both are the same, we want e.g. [[:Category:English terms borrowed back into English]] not -- [[:Category:English terms borrowed from English]]; the former is inserted automatically by format_source(). -- The second parameter here doesn't matter as it only affects `display`, which we don't use. insert(categories,"အဝ်ႏ" .. lang:getFullName() .. " ကထူႏလွူးခါꩻဒါႏ " .. select(2, export.get_display_and_cat_name(source, "raw")) .. "ဝေါဟာရဖုံႏ") end -- Internal implementation of {{borrowed}}/{{bor}} template. function export.format_borrowed(data) local categories = {} if not data.nocat then local lang = data.lang for _, source in ipairs(data.sources) do export.insert_borrowed_cat(categories, lang, source) end end data = shallow_copy(data) data.categories = categories return export.format_sources(data) .. export.format_links(data.terms, data.conj, "borrowed") end do -- Generate the non-ancestor error message. local function show_language(lang) local retval = ("%s (%s)"):format(lang:makeCategoryLink(), lang:getCode()) if lang:hasType("etymology-only") then retval = retval .. (" (an etymology-only language whose regular parent is %s)"):format( show_language(lang:getParent())) end return retval end -- Check that `lang` has `otherlang` (which may be an etymology-only language) as an ancestor. Throw an error if -- not. function export.check_ancestor(lang, otherlang) -- FIXME: I don't know if this function works correctly with etym-only languages in `lang`. I have fixed up -- the module link code appropriately (June 2024) but the remaining logic is untouched. if lang:hasAncestor(otherlang) then -- [[Special:WhatLinksHere/Wiktionary:Tracking/etymology/variety]] -- Track inheritance from varieties of Latin that shouldn't have any descendants (everything except Old Latin, Classical Latin and Vulgar Latin). if otherlang:getFullCode() == "la" then otherlang = otherlang:getCode() if not (otherlang == "itc-ola" or otherlang == "la-cla" or otherlang == "la-vul") then track("bad ancestor", otherlang) end end return end local ancestors, postscript = lang:getAncestors() local etym_module_link = lang:hasType("etymology-only") and "[[Module:etymology languages/data]] or " or "" local module_link = "[[" .. get_language_data_module_name(lang:getFullCode()) .. "]]" if not ancestors[1] then postscript = show_language(lang) .. " has no ancestors." else local ancestor_list = {} for _, ancestor in ipairs(ancestors) do insert(ancestor_list, show_language(ancestor)) end postscript = ("The ancestor%s of %s %s %s."):format( ancestors[2] and "s" or "", lang:getCanonicalName(), ancestors[2] and "are" or "is", concat(ancestor_list, " and ")) end error(("%s is not set as an ancestor of %s in %s%s. %s") :format(show_language(otherlang), show_language(lang), etym_module_link, module_link, postscript)) end end -- Internal implementation of {{inherited}}/{{inh}} template. function export.format_inherited(data) local lang, terms, sort_key, nocat = data.lang, data.terms, data.sort_key, data.nocat local source = terms[1].lang local categories = {} if not nocat then insert(categories, "အဝ်ႏ" .. lang:getFullName() .. " ကသွုပ်ခံႏခါꩻဒါႏအမွီႏ " .. source:getCanonicalName() .. "ဝေါဟာရဖုံႏ") end export.check_ancestor(lang, source) return export.format_source{ lang = lang, source = source, sort_key = sort_key, categories = categories, nocat = nocat, force_cat = data.force_cat, } .. export.format_links(terms, data.conj, "inherited") end -- Internal implementation of "misc variant" templates such as {{abbrev}}, {{clipping}}, {{reduplication}} and the like. function export.format_misc_variant(data) local lang, notext, terms, cats, parts = data.lang, data.notext, data.terms, data.cats, {} if not notext then insert(parts, data.text) end if terms[1] then if not notext then insert(parts, " " .. (data.oftext or "of") .. " ") end insert(parts, export.format_links(terms, data.conj, "misc_variant")) end local categories = {} if not data.nocat and cats then for _, cat in ipairs(cats) do insert(categories, cat .. lang:getFullName()) end end if #categories > 0 then insert(parts, format_categories(categories, lang, data.sort_key, nil, data.force_cat or force_cat)) end return concat(parts) end -- Implementation of miscellaneous templates such as {{unknown}} and {{onomatopoeia}} that have no associated terms. function export.format_misc_variant_no_term(data) local parts = {} if not data.notext then insert(parts, data.title) end if not data.nocat and data.cat then local lang, categories = data.lang, {} insert(categories, lang:getFullName() .. " " .. data.cat) insert(parts, format_categories(categories, lang, data.sort_key, nil, data.force_cat or force_cat)) end return concat(parts) end return export chwrpjcqzs2orum2r92izz7ariv37zo တမ်းပလေက်:inherited 10 3653 11987 11567 2025-06-23T14:45:36Z 咽頭べさ 11 11987 wikitext text/x-wiki <includeonly>{{#invoke:etymology/templates/inherited|inherited}}</includeonly><!-- --><noinclude>{{inh|und|und|test}}{{documentation}}</noinclude> nvsf8ljb8x5if7xceyeoaackp6zzota 12057 11987 2025-06-24T02:21:51Z 咽頭べさ 11 12057 wikitext text/x-wiki <includeonly>{{#invoke:etymology/templates|inherited}}</includeonly><!-- --><noinclude>{{documentation}}</noinclude> fdh1zxekppo7jmy7vjsur232m8k6wrm မော်ဂျူး:homophones 828 3716 11983 8646 2025-06-23T14:27:39Z 咽頭べさ 11 11983 Scribunto text/plain local export = {} local links_module = "Module:links" local parameter_utilities_module = "Module:parameter utilities" local pron_qualifier_module = "Module:pron qualifier" --[==[ Meant to be called from a module. `data` is a table containing the following fields: * `lang`: language object for the homophones; * `homophones`: a list of homophones, each described by an object which can contain all the fields in the object passed to {full_link()} in [[Module:links]] except for `lang` and `sc` (which are copied from the outer level), and in addition can contain left and right regular and accent qualifier fields: ** `term`: the homophone itself; ** `separator`: {nil} or the string used to separate this homophone from the preceding one when displayed; defaults to the top-level `separator`; ** `alt`: display text for the homophone, as in {{tl|l}}; ** `gloss`: gloss for the homophone, as in {{tl|l}}; ** `tr`: transliteration for the homophone, as in {{tl|l}}; ** `ts`: transcription for the homophone, as in {{tl|l}}; ** `genders`: list of genders for the homophone, as in {{tl|l}}; ** `pos`: part of speech of the homophone, as in {{tl|l}}; ** `lit`: literal meaning of the homophone, as in {{tl|l}}; ** `id`: sense ID for the homophone, as in {{tl|l}}; ** `lang`: optional lang code, overriding the lang code in the top-level `lang` field; ** `sc`: optional script code, overriding the script code in the top-level `sc` field; ** `q`: {nil} or a list of left regular qualifier strings, formatted using {format_qualifier()} in [[Module:qualifier]] and displayed directly before the homophone in question; ** `qq`: {nil} or a list of right regular qualifier strings, displayed directly after the homophone in question; ** `qualifiers`: {nil} or a list of qualifier strings; currently displayed on the right but that may change; for compatibility purposes only, do not use in new code; ** `a`: {nil} or a list of left accent qualifier strings, formatted using {format_qualifiers()} in [[Module:accent qualifier]] and displayed directly before the homophone in question; ** `aa`: {nil} or a list of right accent qualifier strings, displayed directly after the homophone in question; ** `refs`: {nil} or a list of references or reference specs to add after the pronunciation and any posttext and qualifiers; the value of a list item is either a string containing the reference text (typically a call to a citation template such as {{tl|cite-book}}, or a template wrapping such a call), or an object with fields `text` (the reference text), `name` (the name of the reference, as in {{cd|<nowiki><ref name="foo">...</ref></nowiki>}} or {{cd|<nowiki><ref name="foo" /></nowiki>}}) and/or `group` (the group of the reference, as in {{cd|<nowiki><ref name="foo" group="bar">...</ref></nowiki>}} or {{cd|<nowiki><ref name="foo" group="bar"/></nowiki>}}); this uses a parser function to format the reference appropriately and insert a footnote number that hyperlinks to the actual reference, located in the {{cd|<nowiki><references /></nowiki>}} section; * `separator`: {nil} or a string, specifying the separator displayed before all homophones but the first; by default, {", "}; overridable at the individual homophone level; * `q`: {nil} or a list of left regular qualifier strings, formatted using {format_qualifier()} in [[Module:qualifier]] and displayed before the initial caption; * `qq`: {nil} or a list of right regular qualifier strings, displayed after all homophones; * `a`: {nil} or a list of left accent qualifier strings, formatted using {format_qualifiers()} in [[Module:accent qualifier]] and dispalyed before the initial caption; * `aa`: {nil} or a list of right accent qualifier strings, displayed after all homophones; * `sc`: {nil} or script object for the homophones; * `sort`: {nil} or sort key; * `caption`: {nil} or string specifying the caption to use, in place of {"Homophone"} (if there is a single homophone), or {"Homophones"} (otherwise); a colon and space is automatically added after the caption; * `nocaption`: If true, suppress the caption display. * `nocat`: If true, suppress categorization. If both regular and accent qualifiers on the same side and at the same level are specified, the accent qualifiers precede the regular qualifiers on both left and right. '''WARNING''': Destructively modifies the objects inside the `homophones` field. ]==] function export.format_homophones(data) local hmptexts = {} local hmpcats = {} local m_links = require(links_module) local overall_sep = data.separator or ", " for i, hmp in ipairs(data.homophones) do hmp.lang = hmp.lang or data.lang hmp.sc = hmp.sc or data.sc local text = m_links.full_link(hmp) if hmp.q and hmp.q[1] or hmp.qq and hmp.qq[1] or hmp.qualifiers and hmp.qualifiers[1] or hmp.a and hmp.a[1] or hmp.aa and hmp.aa[1] or hmp.refs and hmp.refs[1] then -- FIXME, change handling of `qualifiers` text = require(pron_qualifier_module).format_qualifiers { lang = hmp.lang, text = text, q = hmp.q, qq = hmp.qq, qualifiers = hmp.qualifiers, qualifiers_right = true, a = hmp.a, aa = hmp.aa, refs = hmp.refs, } end table.insert(hmptexts, hmp.separator or i > 1 and overall_sep or "") table.insert(hmptexts, text) end table.insert(hmpcats, data.lang:getFullName() .. " terms with homophones") local text = table.concat(hmptexts) local caption = data.nocaption and "" or ( data.caption or "[[Appendix:Glossary#homophone|အငဝ်းပီ၊ အတဲမ်းကွာႏ၊ အခရာႏကြုဲင်ꩻ ငဝ်းငွါ" .. (#data.homophones > 1 and " " or "ဖုံႏ") .. "]]" ) .. ": " text = caption .. text if data.q and data.q[1] or data.qq and data.qq[1] or data.a and data.a[1] or data.aa and data.aa[1] then text = require(pron_qualifier_module).format_qualifiers { lang = data.lang, text = text, q = data.q, qq = data.qq, a = data.a, aa = data.aa, } end text = "<span class=\"homophones\">" .. text .. "</span>" if not data.nocat then local categories = require("Module:utilities").format_categories(hmpcats, data.lang, data.sort) text = text .. categories end return text end --[==[ Entry point for {{tl|homophones}} template (also written {{tl|homophone}} and {{tl|hmp}}). ]==] function export.show(frame) local parent_args = frame:getParent().args local compat = parent_args.lang local offset = compat and 0 or 1 local lang_arg = compat and "lang" or 1 local params = { [lang_arg] = {required = true, type = "language", default = "en"}, [1 + offset] = {list = true, required = true, allow_holes = true, default = "term"}, ["caption"] = {}, ["nocaption"] = {type = "boolean"}, ["nocat"] = {type = "boolean"}, ["sort"] = {}, } local m_param_utils = require(parameter_utilities_module) local param_mods = m_param_utils.construct_param_mods { {group = {"link", "ref", "a", "q"}}, } local homophones, args = m_param_utils.parse_list_with_inline_modifiers_and_separate_params { params = params, param_mods = param_mods, raw_args = parent_args, process_args_before_parsing = function(args) -- FIXME: temporary. if args.q.default then error("Use of q= in [[Template:homophones]] no longer permitted; use qq1=; in a month or two, q= will return as an overall left qualifier") end if args.q.maxindex > 0 then error("Use of qN= in [[Template:homophones]] no longer permitted; use qqN=; in a month or two, qN= will return as left qualifiers") end end, termarg = 1 + offset, parse_lang_prefix = true, track_module = "homophones", lang = lang_arg, sc = "sc.default", } local data = { lang = args[lang_arg], homophones = homophones, caption = args.caption, nocaption = args.nocaption, nocat = args.nocat, sc = args.sc.default, sort = args.sort, q = args.q.default, qq = args.qq.default, a = args.a.default, aa = args.aa.default, } return export.format_homophones(data) end return export qduh6whrwkm42c4b0txbk7c9mcmjvt4 မော်ဂျူး:form of/templates 828 3780 11960 8777 2025-06-23T13:17:40Z 咽頭べさ 11 11960 Scribunto text/plain local export = {} local debug_track_module = "Module:debug/track" local form_of_module = "Module:form of" local functions_module = "Module:fun" local languages_module = "Module:languages" local load_module = "Module:load" local parameters_module = "Module:parameters" local parameter_utilities_module = "Module:parameter utilities" local parse_interface_module = "Module:parse interface" local string_utilities_module = "Module:string utilities" local table_module = "Module:table" local utilities_module = "Module:utilities" local insert = table.insert local ipairs = ipairs local pairs = pairs local require = require -- FIXME: Finish [[Module:format utilities]]. -- local allowed_conj_set = require(format_utilities_module).allowed_conj_set_for_join_segments local allowed_conj_set = {["and"] = true, ["or"] = true, ["and/or"] = true} --[==[ Loaders for functions in other modules, which overwrite themselves with the target function when called. This ensures modules are only loaded when needed, retains the speed/convenience of locally-declared pre-loaded functions, and has no overhead after the first call, since the target functions are called directly in any subsequent calls.]==] local function debug_track(...) debug_track = require(debug_track_module) return debug_track(...) end local function decode_entities(...) decode_entities = require(string_utilities_module).decode_entities return decode_entities(...) end local function extend(...) extend = require(table_module).extend return extend(...) end local function format_categories(...) format_categories = require(utilities_module).format_categories return format_categories(...) end local function format_form_of(...) format_form_of = require(form_of_module).format_form_of return format_form_of(...) end local function get_lang(...) get_lang = require(languages_module).getByCode return get_lang(...) end local function gsplit(...) gsplit = require(string_utilities_module).gsplit return gsplit(...) end local function is_callable(...) is_callable = require(functions_module).is_callable return is_callable(...) end local function load_data(...) load_data = require(load_module).load_data return load_data(...) end local function parse_inline_modifiers(...) parse_inline_modifiers = require(parse_interface_module).parse_inline_modifiers return parse_inline_modifiers(...) end local function pattern_escape(...) pattern_escape = require(string_utilities_module).pattern_escape return pattern_escape(...) end local function process_params(...) process_params = require(parameters_module).process return process_params(...) end local function safe_load_data(...) safe_load_data = require(load_module).safe_load_data return safe_load_data(...) end local function split(...) split = require(string_utilities_module).split return split(...) end local function split_tag_set(...) split_tag_set = require(form_of_module).split_tag_set return split_tag_set(...) end local function tagged_inflections(...) tagged_inflections = require(form_of_module).tagged_inflections return tagged_inflections(...) end local function trim(...) trim = require(string_utilities_module).trim return trim(...) end local function ucfirst(...) ucfirst = require(string_utilities_module).ucfirst return ucfirst(...) end --[==[ Loaders for objects, which load data (or some other object) into some variable, which can then be accessed as "foo or get_foo()", where the function get_foo sets the object to "foo" and then returns it. This ensures they are only loaded when needed, and avoids the need to check for the existence of the object each time, since once "foo" has been set, "get_foo" will not be called again.]==] local force_cat local function get_force_cat() force_cat, get_force_cat = require(form_of_module).force_cat, nil return force_cat end local m_form_of_pos local function get_m_form_of_pos() m_form_of_pos, get_m_form_of_pos = load_data(require(form_of_module).form_of_pos_module), nil return m_form_of_pos end local module_prefix local function get_module_prefix() module_prefix, get_module_prefix = require(form_of_module).form_of_lang_data_module_prefix, nil return module_prefix end --[==[ intro: This module contains code that directly implements {{tl|form of}}, {{tl|inflection of}}, and the various other [[:Category:Form-of templates|form-of templates]]. It is meant to be called directly from templates. See also [[Module:form of]], which contains the underlying implementing code and is meant to be called from other modules. ]==] -- Add tracking category for PAGE when called from TEMPLATE. The tracking category linked to is -- [[Wiktionary:Tracking/form-of/TEMPLATE/PAGE]]. If TEMPLATE is omitted, the tracking category is of the form -- [[Wiktionary:Tracking/form-of/PAGE]]. local function track(page, template) debug_track("form-of/" .. (template and template .. "/" or "") .. page) end local function get_common_template_params() return { -- Named params not controlling link display ["cat"] = {list = true, sublist = "comma without whitespace", flatten = true}, ["notext"] = {type = "boolean"}, ["sort"] = true, ["enclitic"] = true, -- FIXME! The following should only be available when withcap=1 in invocation args or when withencap=1 and the -- language is "en". Before doing that, need to remove all uses of nocap= in other circumstances. ["nocap"] = {type = "boolean"}, -- FIXME! The following should only be available when withdot=1 in invocation args. Before doing that, need to -- remove all uses of nodot= in other circumstances. ["nodot"] = {type = "boolean"}, ["addl"] = true, -- additional text to display at the end, before the closing </span> ["pagename"] = true, -- for testing, etc. } end -- Split TAGSPECS (inflection tag specifications) on SPLIT_REGEX, which -- may be nil for no splitting. local function split_inflection_tags(tagspecs, split_regex) if not split_regex then return tagspecs end local inflection_tags = {} for _, tagspec in ipairs(tagspecs) do for tag in gsplit(tagspec, split_regex) do insert(inflection_tags, tag) end end return inflection_tags end local function parse_terms_with_inline_modifiers(paramname, val, param_mods, lang) local function generate_obj(term) return {lang = lang, term = decode_entities(term)} end return parse_inline_modifiers(val, { paramname = paramname, param_mods = param_mods, generate_obj = generate_obj, splitchar = ",", outer_container = {}, }) end -- Modify PARAMS in-place by adding parameters that control the link to the -- main entry. TERM_PARAM is the number of the param specifying the main -- entry itself; TERM_PARAM + 1 will be the display text, and TERM_PARAM + 2 -- will be the gloss, unless NO_NUMBERED_GLOSS is given. local function add_link_params(parent_args, params, term_param, no_numbered_gloss) params[term_param + 1] = {alias_of = "alt"} if not no_numbered_gloss then params[term_param + 2] = {alias_of = "t"} end -- Numbered params controlling link display params[term_param] = true end -- Need to do what [[Module:parameters]] does to string arguments from parent_args as we're running this -- before calling [[Module:parameters]] on parent_args. local function ine(arg) if not arg then return nil end arg = trim(arg) return arg ~= "" and arg or nil end local function add_base_lemma_params(parent_args, iargs, params, compat) -- Check the language-specific data for additional base lemma params. But if there's no language-specific data, -- attempt any parent varieties as well (i.e. superordinate varieties). local lang = get_lang(ine(parent_args[compat and "lang" or 1]) or ine(iargs.lang) or "und", nil, true) while lang do local langdata = safe_load_data((module_prefix or get_module_prefix()) .. lang:getCode()) if langdata then local base_lemma_params = langdata.base_lemma_params if base_lemma_params then for _, param in ipairs(base_lemma_params) do params[param.param] = true end return base_lemma_params end end lang = lang:getParent() end end local function add_link_and_base_lemma_params(iargs, parent_args, params, term_param, compat, no_numbered_gloss) local base_lemma_params if not iargs.nolink and not iargs.linktext then add_link_params(parent_args, params, term_param, no_numbered_gloss) base_lemma_params = add_base_lemma_params(parent_args, iargs, params, compat) end return base_lemma_params end local function handle_withdot_withcap(iargs, params) local ignored_tracked_params = {} if iargs.withdot then params.dot = true else ignored_tracked_params.nodot = true end if iargs.withcap and iargs.withencap then error("Internal error: Can specify only one of withcap= and withencap=") end if not iargs.withcap then params.cap = {type = "boolean"} ignored_tracked_params.nocap = true end return ignored_tracked_params end --[=[ Construct and return the full definition line for a form-of-type template invocation. `data` is an object with the following fields: * `template`: Approximate template name, for debug tracking; * `iargs`: processed invocation arguments; * `parent_args`: raw parent args from `frame:getParent().args`; * `params`: partially constructed params structure of the sort passed to `process()` in [[Module:parameters]], but without any link params; * `ignored_tracked_params`: params that are ignored but should be tracked, to be eventually removed; * `term_param`: the parent argument specifying the main entry; * `compat`: true if the language code is found in args.lang instead of args[1]; * `base_lemma_params`: if non-nil, a list of base lemma param objects of the sort stored in the language-specific data; * `do_form_of`: a function of one argument, `lemma_data`, that returns the actual definition-line text and any language-specific categories. See below. This function does several things: # If link parameters are called for (neither `iargs.nolink` nor `iargs.linktext` are given), augment the `params` structure with separate link parameters. # Modify the parent args as appropriate if invocation arguments def= or ignore= are given. # Parse the parent args, both for separate parameter properties and inline modifiers on the term parameter (which may consist of multiple comma-separated terms). # Compute categories to add to the page, including language-specific categories and any categories requested by the invocation or parent args. # Parse enclitic and extra base lemma parameters. # Construct the actual text using `do_form_of`. # Add a terminating period/dot as appropriate, along with the formatted categories. `do_form_of` takes one argument, `lemma_data`, which looks like this: { lang = LANG, args = {ARG = VALUE, ARG = VALUE, ...}, lemmas = {LEMMA_OBJ, LEMMA_OBJ, ...}, enclitics = {ENCLITIC_OBJ, ENCLITIC_OBJ, ...}, base_lemmas = {BASE_LEMMA_OBJ, BASE_LEMMA_OBJ, ...}, categories = {"CATEGORY", "CATEGORY", ...}, posttext = "POSTTEXT" or nil, } where * LANG is the language code; * ARGS is the parsed arguments, based on what the user specified; * LEMMAS is a sequence of objects specifying the main entries/lemmas, as passed to full_link in [[Module:links]]; however, if the invocation argument linktext= is given, it will be a string consisting of that text, and if the invocation argument nolink= is given, it will be nil; * ENCLITICS is nil or a sequence of objects specifying the enclitics, as passed to full_link in [[Module:links]]; * BASE_LEMMA_OBJ is a sequence of objects specifying the base lemma(s), which are used when the lemma is itself a form of another lemma (the base lemma), e.g. a comparative, superlative or participle; each object is of the form { paramobj = PARAM_OBJ, lemmas = {LEMMA_OBJ, LEMMA_OBJ, ...} } where PARAM_OBJ describes the properties of the base lemma parameter (i.e. the relationship between the intermediate and base lemmas) and LEMMA_OBJ is of the same format of ENCLITIC_OBJ, i.e. an object suitable to be passed to full_link in [[Module:links]]; PARAM_OBJ is of the format { param = "PARAM", tags = {"TAG", "TAG", ...} } where PARAM is the name of the parameter to {{inflection of}} etc. that holds the base lemma(s) of the specified relationship and the tags describe the relationship, such as {"comd"} or {"past", "part"}; * CATEGORIES is the categories to add the page to (consisting of any categories specified in the invocation or parent args and any tracking categories, but not any additional lang-specific categories that may be added by {{inflection of}} or similar templates); * POSTTEXT is text to display at the end of the form-of text, before the final </span> (or at the end of the first line, before the colon, in a multiline {{infl of}} call). `do_form_of` should return two arguments: (1) The actual definition-line text, marked up appropriately with <span>...</span> but without any terminating period/dot. (2) Any extra categories to add the page to (other than those that can be derived from parameters specified to the invocation or parent arguments, which will automatically be added to the page). ]=] local function construct_form_of_text(data) local template, iargs, parent_args, params, no_numbered_gloss, do_form_of = data.template, data.iargs, data.parent_args, data.params, data.no_numbered_gloss, data.do_form_of local term_param = iargs.term_param local compat = iargs.lang or parent_args.lang term_param = term_param or compat and 1 or 2 -- Numbered params params[compat and "lang" or 1] = { required = not iargs.lang, type = "language", default = iargs.lang or "und" } local base_lemma_params = add_link_and_base_lemma_params(iargs, parent_args, params, term_param, compat, no_numbered_gloss) local ignored_tracked_params = handle_withdot_withcap(iargs, params) --[=[ Process parent arguments. This is similar to the following: require("Module:parameters").process(parent_args, params) but in addition it does the following: (1) Supplies default values for unspecified parent arguments as specified in DEFAULTS, which consist of specs of the form "ARG=VALUE". These are added to the parent arguments prior to processing, so boolean and number parameters will process the value appropriately. (2) Removes parent arguments specified in IGNORESPECS, which consist either of bare argument names to remove, or list-argument names to remove of the form "ARG:list". (3) Tracks the use of any parent arguments specified in TRACKED_PARAMS, which is a set-type table where the keys are arguments as they exist after processing (hence numeric arguments should be numbers, not strings) and the values should be boolean true. ]=]-- local defaults = iargs.def local ignorespecs = iargs.ignore if defaults[1] or ignorespecs[1] then local new_parent_args = {} for _, default in ipairs(defaults) do local defparam, defval = default:match("^(.-)=(.*)$") if not defparam then error("Bad default spec " .. default) end new_parent_args[defparam] = defval end local params_to_ignore = {} local numbered_list_params_to_ignore = {} local named_list_params_to_ignore = {} for _, ignorespec in ipairs(ignorespecs) do for ignore in gsplit(ignorespec, ",") do local param = ignore:match("^(.*):list$") if param then if param:match("^%d+$") then insert(numbered_list_params_to_ignore, tonumber(param)) else insert(named_list_params_to_ignore, "^" .. pattern_escape(param) .. "%d*$") end else if ignore:match("^%d+$") then ignore = tonumber(ignore) end params_to_ignore[ignore] = true end end end for k, v in pairs(parent_args) do if not params_to_ignore[k] then local ignore_me = false if type(k) == "number" then for _, lparam in ipairs(numbered_list_params_to_ignore) do if k >= lparam then ignore_me = true break end end else for _, lparam in ipairs(named_list_params_to_ignore) do if k:match(lparam) then ignore_me = true break end end end if not ignore_me then new_parent_args[k] = v end end end parent_args = new_parent_args end local m_param_utils, param_mods local function init_param_mods() if not m_param_utils then m_param_utils = require(parameter_utilities_module) param_mods = m_param_utils.construct_param_mods { {group = {"link", "q", "l", "ref"}}, {param = "conj", set = allowed_conj_set, overall = true}, } end end local terms, args if iargs.nolink or iargs.linktext then args = process_params(parent_args, params) else init_param_mods() terms, args = m_param_utils.parse_term_with_inline_modifiers_and_separate_params { params = params, param_mods = param_mods, raw_args = parent_args, termarg = term_param, track_module = "form-of" .. (template and "/" .. template or ""), lang = compat and "lang" or 1, sc = "sc", -- Don't do this, doesn't seem to make sense. -- parse_lang_prefix = true, make_separate_g_into_list = true, process_args_before_parsing = function(args) -- For compatibility with the previous code, we accept a comma-separated list of genders in each of g=, -- g2=, etc. in addition to separate genders in g=/g2=/etc. if args.g and args.g[1] then local genders = {} for _, g in ipairs(args.g) do extend(genders, split(g, ",")) end args.g = genders end end, splitchar = ",", subitem_param_handling = "last", } end -- Tracking for certain user-specified params. This is generally used for -- parameters that we accept but ignore, so that we can eventually remove -- all uses of these params and stop accepting them. if ignored_tracked_params then for ignored_tracked_param, _ in pairs(ignored_tracked_params) do if parent_args[ignored_tracked_param] then track("arg/" .. ignored_tracked_param, template) end end end local lang = args[compat and "lang" or 1] -- Determine categories for the page, including tracking categories local categories = {} if not args.nocat then for _, cat in ipairs(iargs.cat) do insert(categories, lang:getFullName() .. " " .. cat) end end for _, cat in ipairs(args.cat) do insert(categories, lang:getFullName() .. " " .. cat) end -- Format the link, preceding text and categories local function add_term_tracking_categories(term) -- add tracking category if term is same as page title if term and mw.title.getCurrentTitle().text == (lang:makeEntryName(term)) then insert(categories, "Forms linking to themselves") end -- maybe add tracking category if primary entry doesn't exist (this is an -- expensive call so we don't do it by default) if iargs.noprimaryentrycat and term and mw.title.getCurrentTitle().nsText == "" and not mw.title.new(term):getContent() then insert(categories, lang:getFullName() .. " " .. iargs.noprimaryentrycat) end end local lemmas if iargs.nolink then lemmas = nil elseif iargs.linktext then lemmas = iargs.linktext else if not terms.terms[1] then if mw.title.getCurrentTitle().nsText == "Template" then terms.terms[1] = { lang = lang, term = "term" } else error("No linked-to term specified") end end for _, termobj in ipairs(terms.terms) do if termobj.term then add_term_tracking_categories(termobj.term) end -- NOTE: Formerly, template arg sc= overrode inline modifier <sc:...>, which seems backwards, so I've -- changed it. Hopefully nothing depended on the old behavior. end lemmas = terms.terms end local enclitics, enclitic_conj if args.enclitic then init_param_mods() local enclitics_obj = parse_terms_with_inline_modifiers("enclitic", args.enclitic, param_mods, lang) enclitics = enclitics_obj.terms enclitic_conj = enclitics_obj.conj end local base_lemmas = {} if base_lemma_params then for _, base_lemma_param_obj in ipairs(base_lemma_params) do local param = base_lemma_param_obj.param if args[param] then init_param_mods() local base_lemmas_obj = parse_terms_with_inline_modifiers(param, args[param], param_mods, lang) insert(base_lemmas, { paramobj = base_lemma_param_obj, lemmas = base_lemmas_obj.terms, conj = base_lemmas_obj.conj, }) end end end local posttext = iargs.posttext local addl = args.addl if addl then posttext = posttext or "" if addl:find("^[;:]") then posttext = posttext .. addl elseif addl:find("^_") then posttext = posttext .. " " .. addl:sub(2) else posttext = posttext .. ", " .. addl end end local lemma_data = { lang = lang, args = args, lemmas = lemmas, conj = terms and terms.conj or iargs.conj, enclitics = enclitics, enclitic_conj = enclitic_conj, base_lemmas = base_lemmas, categories = categories, posttext = posttext, } local form_of_text, lang_cats = do_form_of(lemma_data) extend(lemma_data.categories, lang_cats) local text = form_of_text .. ( args.nodot and "" or args.dot or iargs.withdot and "." or "" ) if #lemma_data.categories == 0 then return text end return text .. format_categories(lemma_data.categories, lemma_data.lang, args.sort, -- If lemma_is_sort_key is given, supply the first lemma term as the sort base if possible. If sort= is given, -- it will override the base; otherwise, the base will be converted appropriately to a sort key using the -- same algorithm applied to pagenames. iargs.lemma_is_sort_key and type(lemma_data.lemmas) == "table" and lemma_data.lemmas[1].term, -- Supply the first lemma's script for sort key computation. force_cat or get_force_cat(), type(lemma_data.lemmas) == "table" and lemma_data.lemmas[1].sc) end -- Invocation parameters shared between form_of_t(), tagged_form_of_t() and inflection_of_t(). local function get_common_invocation_params() return { ["term_param"] = {type = "number"}, ["lang"] = true, -- To be used as the default code in params. ["sc"] = {type = "script"}, ["cat"] = {list = true, sublist = "comma without whitespace", flatten = true}, ["ignore"] = {list = true}, ["def"] = {list = true}, ["conj"] = {set = allowed_conj_set, default = "and"}, ["withcap"] = {type = "boolean"}, ["withencap"] = {type = "boolean"}, ["withdot"] = {type = "boolean"}, ["nolink"] = {type = "boolean"}, ["linktext"] = true, ["posttext"] = true, ["noprimaryentrycat"] = true, ["lemma_is_sort_key"] = true, } end local function should_ucfirst_text(args, iargs, lang) return args.cap or (iargs.withcap or iargs.withencap and lang:getCode() == "en") and not args.nocap end --[==[ Function that implements {{tl|form of}} and the various more specific form-of templates (but not {{tl|inflection of}} or templates that take tagged inflection parameters). Invocation params: ; {{para|1|req=1}} : Text to display before the link. ; {{para|term_param}} : Numbered param holding the term linked to. Other numbered params come after. Defaults to 1 if invocation or template param {{para|lang}} is present, otherwise 2. ; {{para|lang}} : Default language code for language-specific templates. If specified, no language code needs to be specified, and if specified it needs to be set using {{para|lang}}, not {{para|1}}. ; {{para|sc}} : Default script code for language-specific templates. The script code can still be overridden using template param {{para|sc}}. ; {{para|cat}}, {{para|cat2}}, ...: : Categories to place the page into. The language name will automatically be prepended. Note that there is also a template param {{para|cat}} to specify categories at the template level. Use of {{para|nocat}} disables categorization of categories specified using invocation param {{para|cat}}, but not using template param {{para|cat}}. A single param can specify multiple comma-separated categories if no space follows the comma. ; {{para|ignore}}, {{para|ignore2}}, ...: : One or more template params to silently accept and ignore. Useful e.g. when the template takes additional parameters such as {{para|from}} or {{para|POS}}. Each value is a comma-separated list of either bare parameter names or specifications of the form `PARAM:list` to specify that the parameter is a list parameter. ; {{para|def}}, {{para|def2}}, ...: : One or more default values to supply for template args. For example, specifying {{para|def|2=tr=-}} causes the default for template param {{para|tr}} to be `-`. Actual template params override these defaults. ; {{para|withcap}} : Capitalize the first character of the text preceding the link, unless template param {{para|nocap}} is given. ; {{para|withencap}} : Capitalize the first character of the text preceding the link if the language is English and template param {{para|nocap}} is not given. ; {{para|withdot}} : Add a final period after the link, unless template param {{para|nodot}} is given to suppress the period, or {{para|dot}} is given to specify an alternative punctuation character. ; {{para|nolink}} : Suppress the display of the link. If specified, none of the template params that control the link ({{para|<var>term_param</var>}}, {{para|<var>term_param</var> + 1}}, {{para|<var>term_param</var> + 2}}, {{para|t}}, {{para|gloss}}, {{para|sc}}, {{para|tr}}, {{para|ts}}, {{para|pos}}, {{para|g}}, {{para|id}}, {{para|lit}}) will be available. If the calling template uses any of these parameters, they must be ignored using {{para|ignore}}. {{para|linktext}} : Override the display of the link with the specified text. This is useful if a custom template is available to format the link (e.g. in Hebrew, Chinese and Japanese). If specified, none of the template params that control the link ({{para|<var>term_param</var>}}, {{para|<var>term_param</var> + 1}}, {{para|<var>term_param</var> + 2}}, {{para|t}}, {{para|gloss}}, {{para|sc}}, {{para|tr}}, {{para|ts}}, {{para|pos}}, {{para|g}}, {{para|id}}, {{para|lit}}) will be available. If the calling template uses any of these parameters, they must be ignored using {{para|ignore}}. ; {{para|posttext}} : Additional text to display directly after the formatted link, before any terminating period/dot and inside of `<span class='use-with-mention'>`. ; {{para|noprimaryentrycat}} : Category to add the page to if the primary entry linked to doesn't exist. The language name will automatically be prepended. ; {{para|lemma_is_sort_key}} : If the user didn't specify a sort key, use the lemma as the sort key (instead of the page itself). ]==] function export.form_of_t(frame) local iparams = get_common_invocation_params() iparams[1] = {required = true} local iargs = process_params(frame.args, iparams) local parent_args = frame:getParent().args local params = get_common_template_params() if next(iargs.cat) then params.nocat = {type = "boolean"} end return construct_form_of_text { template = "form-of-t", iargs = iargs, parent_args = parent_args, params = params, do_form_of = function(lemma_data) local args = lemma_data.args local text if args.notext then text = "" else text = iargs[1] if should_ucfirst_text(args, iargs, lemma_data.lang) then text = ucfirst(text) end end return format_form_of { text = text, lemmas = lemma_data.lemmas, conj = lemma_data.conj, enclitics = lemma_data.enclitics, base_lemmas = lemma_data.base_lemmas, lemma_face = "term", posttext = lemma_data.posttext }, {} end } end --[=[ Construct and return the full definition line for a form-of-type template invocation that is based on inflection tags. This is a wrapper around construct_form_of_text() and takes the following arguments: processed invocation arguments IARGS, processed parent arguments ARGS, TERM_PARAM (the parent argument specifying the main entry), COMPAT (true if the language code is found in args.lang instead of args[1]), and TAGS, the list of (non-canonicalized) inflection tags. It returns that actual definition-line text including terminating period/full-stop, formatted categories, etc. and should be directly returned as the template function's return value. ]=] local function construct_tagged_form_of_text(data) local template, iargs, parent_args, params, no_numbered_gloss, tags = data.template, data.iargs, data.parent_args, data.params, data.no_numbered_gloss, data.tags -- Named params not controlling link display -- Always included because lang-specific categories may be added params.nocat = {type = "boolean"} params.p = true params.POS = {alias_of = "p"} return construct_form_of_text { template = template, iargs = iargs, parent_args = parent_args, params = params, no_numbered_gloss = no_numbered_gloss, do_form_of = function(lemma_data) local args = lemma_data.args if is_callable(tags) then tags = tags(args) end -- NOTE: tagged_inflections returns two values, so we do too. return tagged_inflections { lang = lemma_data.lang, tags = tags, lemmas = lemma_data.lemmas, conj = lemma_data.conj, enclitics = lemma_data.enclitics, enclitic_conj = lemma_data.enclitic_conj, base_lemmas = lemma_data.base_lemmas, lemma_face = "term", POS = args.p, pagename = args.pagename, -- Set no_format_categories because we do it ourselves in construct_form_of_text(). no_format_categories = true, nocat = args.nocat, notext = args.notext, capfirst = should_ucfirst_text(args, iargs, lemma_data.lang), posttext = lemma_data.posttext, } end } end --[==[ Function that implements form-of templates that are defined by specific tagged inflections (typically a template referring to a non-lemma inflection, such as {{tl|plural of}}). This works exactly like {form_of_t()} except that the "form of" text displayed before the link is based off of a pre-specified set of inflection tags (which will be appropriately linked to the glossary) instead of arbitrary text. From the user's perspective, there is no difference between templates implemented using {form_of_t()} and {tagged_form_of_t()}; they accept exactly the same parameters and work the same. See also {inflection_of_t()} below, which is intended for templates with user-specified inflection tags. Invocation params: ; {{para|1|req=1}}, {{para|2}}, ... : One or more inflection tags describing the inflection in question. ; {{para|split_tags}} : If specified, character to split specified inflection tags on. This allows multiple tags to be included in a single argument, simplifying template code. ; {{para|term_param}} ; {{para|lang}} ; {{para|sc}} ; {{para|cat}}, {{para|cat2}}, ... ; {{para|ignore}}, {{para|ignore2}}, ... ; {{para|def}}, {{para|def2}}, ... ; {{para|withcap}} ; {{para|withencap}} ; {{para|withdot}} ; {{para|nolink}} ; {{para|linktext}} ; {{para|posttext}} ; {{para|noprimaryentrycat}} ; {{para|lemma_is_sort_key}} : All of these are the same as in {form_of_t()}. ]==] function export.tagged_form_of_t(frame) local iparams = get_common_invocation_params() iparams[1] = {list = true, required = true} iparams.split_tags = true local iargs = process_params(frame.args, iparams) local parent_args = frame:getParent().args local params = get_common_template_params() return construct_tagged_form_of_text { template = "tagged-form-of-t", iargs = iargs, parent_args = parent_args, params = params, tags = split_inflection_tags(iargs[1], iargs.split_tags), } end --[==[ Function that implements {{tl|inflection of}} and certain semi-specific variants, such as {{tl|participle of}} and {{tl|past participle form of}}. This function is intended for templates that allow the user to specify a set of inflection tags. It works similarly to {form_of_t()} and {tagged_form_of_t()} except that the calling convention for the calling template is : { {{TEMPLATE|LANG|MAIN_ENTRY_LINK|MAIN_ENTRY_DISPLAY_TEXT|TAG|TAG|...}}} instead of : { {{TEMPLATE|LANG|MAIN_ENTRY_LINK|MAIN_ENTRY_DISPLAY_TEXT|GLOSS}}} Note that there isn't a numbered parameter for the gloss, but it can still be specified using {{para|t}} or {{para|gloss}}. Invocation params: ; {{para|preinfl}}, {{para|preinfl2}}, ... : Extra inflection tags to automatically prepend to the tags specified by the template. ; {{para|postinfl}}, {{para|postinfl2}}, ... : Extra inflection tags to automatically append to the tags specified by the template. Used for example by {{tl|past participle form of}} to add the tags `of the|past|p` onto the user-specified tags, which indicate which past participle form the page refers to. ; {{para|split_tags}} : If specified, character to split specified inflection tags on. This allows multiple tags to be included in a single argument, simplifying template code. Note that this applies *ONLY* to inflection tags specified in the invocation arguments using {{para|preinfl}} or {{para|postinfl}}, not to user-specified inflection tags. ; {{para|term_param}} ; {{para|lang}} ; {{para|sc}} ; {{para|cat}}, {{para|cat2}}, ... ; {{para|ignore}}, {{para|ignore2}}, ... ; {{para|def}}, {{para|def2}}, ... ; {{para|withcap}} ; {{para|withencap}} ; {{para|withdot}} ; {{para|nolink}} ; {{para|linktext}} ; {{para|posttext}} ; {{para|noprimaryentrycat}} ; {{para|lemma_is_sort_key}} : All of these are the same as in {form_of_t()}. ]==] function export.inflection_of_t(frame) local iparams = get_common_invocation_params() iparams.preinfl = {list = true} iparams.postinfl = {list = true} iparams.split_tags = true local iargs = process_params(frame.args, iparams) local parent_args = frame:getParent().args local params = get_common_template_params() local compat = iargs.lang or parent_args.lang local tagsind = (iargs.term_param or compat and 1 or 2) + 2 params[tagsind] = {list = true, -- at least one inflection tag is required unless preinfl or postinfl tags are given required = #iargs.preinfl == 0 and #iargs.postinfl == 0} return construct_tagged_form_of_text { template = "inflection-of-t", iargs = iargs, parent_args = parent_args, params = params, no_numbered_gloss = true, tags = function(args) local infls if not next(iargs.preinfl) and not next(iargs.postinfl) then -- If no preinfl or postinfl tags, just use the user-specified tags directly. infls = args[tagsind] else -- Otherwise, we need to prepend the preinfl tags and postpend the postinfl tags. If there's only one tag set -- (no semicolon), it's easier. Since this is common, we optimize for it. infls = {} local saw_semicolon = false for _, infl in ipairs(args[tagsind]) do if infl == ";" then saw_semicolon = true break end end local split_preinfl = split_inflection_tags(iargs.preinfl, iargs.split_tags) local split_postinfl = split_inflection_tags(iargs.postinfl, iargs.split_tags) if not saw_semicolon then extend(infls, split_preinfl) extend(infls, args[tagsind]) extend(infls, split_postinfl) else local groups = split_tag_set(args[tagsind]) for _, group in ipairs(groups) do if #infls > 0 then insert(infls, ";") end extend(infls, split_preinfl) extend(infls, group) extend(infls, split_postinfl) end end end return infls end, } end --[==[ Normalize a part-of-speech tag given a possible abbreviation (passed in as {{para|1}} of the invocation args). If the abbreviation isn't recognized, the original POS tag is returned. If no POS tag is passed in, return the value of invocation arg {{para|default}}. ]==] function export.normalize_pos(frame) local iparams = { [1] = true, ["default"] = true, } local iargs = process_params(frame.args, iparams) if not iargs[1] and not iargs.default then error("Either 1= or default= must be given in the invocation args") end if not iargs[1] then return iargs.default end return (m_form_of_pos or get_m_form_of_pos())[iargs[1]] or iargs[1] end return export mxctpw9uapjh0n9gyj9mgemaqcawmi9 11962 11960 2025-06-23T13:23:36Z 咽頭べさ 11 11962 Scribunto text/plain local export = {} local debug_track_module = "Module:debug/track" local form_of_module = "Module:form of" local functions_module = "Module:fun" local languages_module = "Module:languages" local load_module = "Module:load" local parameters_module = "Module:parameters" local parameter_utilities_module = "Module:parameter utilities" local parse_interface_module = "Module:parse interface" local string_utilities_module = "Module:string utilities" local table_module = "Module:table" local utilities_module = "Module:utilities" local insert = table.insert local ipairs = ipairs local pairs = pairs local require = require -- FIXME: Finish [[Module:format utilities]]. -- local allowed_conj_set = require(format_utilities_module).allowed_conj_set_for_join_segments local allowed_conj_set = {["and"] = true, ["or"] = true, ["and/or"] = true} --[==[ Loaders for functions in other modules, which overwrite themselves with the target function when called. This ensures modules are only loaded when needed, retains the speed/convenience of locally-declared pre-loaded functions, and has no overhead after the first call, since the target functions are called directly in any subsequent calls.]==] local function debug_track(...) debug_track = require(debug_track_module) return debug_track(...) end local function decode_entities(...) decode_entities = require(string_utilities_module).decode_entities return decode_entities(...) end local function extend(...) extend = require(table_module).extend return extend(...) end local function format_categories(...) format_categories = require(utilities_module).format_categories return format_categories(...) end local function format_form_of(...) format_form_of = require(form_of_module).format_form_of return format_form_of(...) end local function get_lang(...) get_lang = require(languages_module).getByCode return get_lang(...) end local function gsplit(...) gsplit = require(string_utilities_module).gsplit return gsplit(...) end local function is_callable(...) is_callable = require(functions_module).is_callable return is_callable(...) end local function load_data(...) load_data = require(load_module).load_data return load_data(...) end local function parse_inline_modifiers(...) parse_inline_modifiers = require(parse_interface_module).parse_inline_modifiers return parse_inline_modifiers(...) end local function pattern_escape(...) pattern_escape = require(string_utilities_module).pattern_escape return pattern_escape(...) end local function process_params(...) process_params = require(parameters_module).process return process_params(...) end local function safe_load_data(...) safe_load_data = require(load_module).safe_load_data return safe_load_data(...) end local function split(...) split = require(string_utilities_module).split return split(...) end local function split_tag_set(...) split_tag_set = require(form_of_module).split_tag_set return split_tag_set(...) end local function tagged_inflections(...) tagged_inflections = require(form_of_module).tagged_inflections return tagged_inflections(...) end local function trim(...) trim = require(string_utilities_module).trim return trim(...) end local function ucfirst(...) ucfirst = require(string_utilities_module).ucfirst return ucfirst(...) end --[==[ Loaders for objects, which load data (or some other object) into some variable, which can then be accessed as "foo or get_foo()", where the function get_foo sets the object to "foo" and then returns it. This ensures they are only loaded when needed, and avoids the need to check for the existence of the object each time, since once "foo" has been set, "get_foo" will not be called again.]==] local force_cat local function get_force_cat() force_cat, get_force_cat = require(form_of_module).force_cat, nil return force_cat end local m_form_of_pos local function get_m_form_of_pos() m_form_of_pos, get_m_form_of_pos = load_data(require(form_of_module).form_of_pos_module), nil return m_form_of_pos end local module_prefix local function get_module_prefix() module_prefix, get_module_prefix = require(form_of_module).form_of_lang_data_module_prefix, nil return module_prefix end --[==[ intro: This module contains code that directly implements {{tl|form of}}, {{tl|inflection of}}, and the various other [[:Category:Form-of templates|form-of templates]]. It is meant to be called directly from templates. See also [[Module:form of]], which contains the underlying implementing code and is meant to be called from other modules. ]==] -- Add tracking category for PAGE when called from TEMPLATE. The tracking category linked to is -- [[Wiktionary:Tracking/form-of/TEMPLATE/PAGE]]. If TEMPLATE is omitted, the tracking category is of the form -- [[Wiktionary:Tracking/form-of/PAGE]]. local function track(page, template) debug_track("form-of/" .. (template and template .. "/" or "") .. page) end local function get_common_template_params() return { -- Named params not controlling link display ["cat"] = {list = true, sublist = "comma without whitespace", flatten = true}, ["notext"] = {type = "boolean"}, ["sort"] = true, ["enclitic"] = true, -- FIXME! The following should only be available when withcap=1 in invocation args or when withencap=1 and the -- language is "en". Before doing that, need to remove all uses of nocap= in other circumstances. ["nocap"] = {type = "boolean"}, -- FIXME! The following should only be available when withdot=1 in invocation args. Before doing that, need to -- remove all uses of nodot= in other circumstances. ["nodot"] = {type = "boolean"}, ["addl"] = true, -- additional text to display at the end, before the closing </span> ["pagename"] = true, -- for testing, etc. } end -- Split TAGSPECS (inflection tag specifications) on SPLIT_REGEX, which -- may be nil for no splitting. local function split_inflection_tags(tagspecs, split_regex) if not split_regex then return tagspecs end local inflection_tags = {} for _, tagspec in ipairs(tagspecs) do for tag in gsplit(tagspec, split_regex) do insert(inflection_tags, tag) end end return inflection_tags end local function parse_terms_with_inline_modifiers(paramname, val, param_mods, lang) local function generate_obj(term) return {lang = lang, term = decode_entities(term)} end return parse_inline_modifiers(val, { paramname = paramname, param_mods = param_mods, generate_obj = generate_obj, splitchar = ",", outer_container = {}, }) end -- Modify PARAMS in-place by adding parameters that control the link to the -- main entry. TERM_PARAM is the number of the param specifying the main -- entry itself; TERM_PARAM + 1 will be the display text, and TERM_PARAM + 2 -- will be the gloss, unless NO_NUMBERED_GLOSS is given. local function add_link_params(parent_args, params, term_param, no_numbered_gloss) params[term_param + 1] = {alias_of = "alt"} if not no_numbered_gloss then params[term_param + 2] = {alias_of = "t"} end -- Numbered params controlling link display params[term_param] = true end -- Need to do what [[Module:parameters]] does to string arguments from parent_args as we're running this -- before calling [[Module:parameters]] on parent_args. local function ine(arg) if not arg then return nil end arg = trim(arg) return arg ~= "" and arg or nil end local function add_base_lemma_params(parent_args, iargs, params, compat) -- Check the language-specific data for additional base lemma params. But if there's no language-specific data, -- attempt any parent varieties as well (i.e. superordinate varieties). local lang = get_lang(ine(parent_args[compat and "lang" or 1]) or ine(iargs.lang) or "und", nil, true) while lang do local langdata = safe_load_data((module_prefix or get_module_prefix()) .. lang:getCode()) if langdata then local base_lemma_params = langdata.base_lemma_params if base_lemma_params then for _, param in ipairs(base_lemma_params) do params[param.param] = true end return base_lemma_params end end lang = lang:getParent() end end local function add_link_and_base_lemma_params(iargs, parent_args, params, term_param, compat, no_numbered_gloss) local base_lemma_params if not iargs.nolink and not iargs.linktext then add_link_params(parent_args, params, term_param, no_numbered_gloss) base_lemma_params = add_base_lemma_params(parent_args, iargs, params, compat) end return base_lemma_params end local function handle_withdot_withcap(iargs, params) local ignored_tracked_params = {} if iargs.withdot then params.dot = true else ignored_tracked_params.nodot = true end if iargs.withcap and iargs.withencap then error("Internal error: Can specify only one of withcap= and withencap=") end if not iargs.withcap then params.cap = {type = "boolean"} ignored_tracked_params.nocap = true end return ignored_tracked_params end --[=[ Construct and return the full definition line for a form-of-type template invocation. `data` is an object with the following fields: * `template`: Approximate template name, for debug tracking; * `iargs`: processed invocation arguments; * `parent_args`: raw parent args from `frame:getParent().args`; * `params`: partially constructed params structure of the sort passed to `process()` in [[Module:parameters]], but without any link params; * `ignored_tracked_params`: params that are ignored but should be tracked, to be eventually removed; * `term_param`: the parent argument specifying the main entry; * `compat`: true if the language code is found in args.lang instead of args[1]; * `base_lemma_params`: if non-nil, a list of base lemma param objects of the sort stored in the language-specific data; * `do_form_of`: a function of one argument, `lemma_data`, that returns the actual definition-line text and any language-specific categories. See below. This function does several things: # If link parameters are called for (neither `iargs.nolink` nor `iargs.linktext` are given), augment the `params` structure with separate link parameters. # Modify the parent args as appropriate if invocation arguments def= or ignore= are given. # Parse the parent args, both for separate parameter properties and inline modifiers on the term parameter (which may consist of multiple comma-separated terms). # Compute categories to add to the page, including language-specific categories and any categories requested by the invocation or parent args. # Parse enclitic and extra base lemma parameters. # Construct the actual text using `do_form_of`. # Add a terminating period/dot as appropriate, along with the formatted categories. `do_form_of` takes one argument, `lemma_data`, which looks like this: { lang = LANG, args = {ARG = VALUE, ARG = VALUE, ...}, lemmas = {LEMMA_OBJ, LEMMA_OBJ, ...}, enclitics = {ENCLITIC_OBJ, ENCLITIC_OBJ, ...}, base_lemmas = {BASE_LEMMA_OBJ, BASE_LEMMA_OBJ, ...}, categories = {"CATEGORY", "CATEGORY", ...}, posttext = "POSTTEXT" or nil, } where * LANG is the language code; * ARGS is the parsed arguments, based on what the user specified; * LEMMAS is a sequence of objects specifying the main entries/lemmas, as passed to full_link in [[Module:links]]; however, if the invocation argument linktext= is given, it will be a string consisting of that text, and if the invocation argument nolink= is given, it will be nil; * ENCLITICS is nil or a sequence of objects specifying the enclitics, as passed to full_link in [[Module:links]]; * BASE_LEMMA_OBJ is a sequence of objects specifying the base lemma(s), which are used when the lemma is itself a form of another lemma (the base lemma), e.g. a comparative, superlative or participle; each object is of the form { paramobj = PARAM_OBJ, lemmas = {LEMMA_OBJ, LEMMA_OBJ, ...} } where PARAM_OBJ describes the properties of the base lemma parameter (i.e. the relationship between the intermediate and base lemmas) and LEMMA_OBJ is of the same format of ENCLITIC_OBJ, i.e. an object suitable to be passed to full_link in [[Module:links]]; PARAM_OBJ is of the format { param = "PARAM", tags = {"TAG", "TAG", ...} } where PARAM is the name of the parameter to {{inflection of}} etc. that holds the base lemma(s) of the specified relationship and the tags describe the relationship, such as {"comd"} or {"past", "part"}; * CATEGORIES is the categories to add the page to (consisting of any categories specified in the invocation or parent args and any tracking categories, but not any additional lang-specific categories that may be added by {{inflection of}} or similar templates); * POSTTEXT is text to display at the end of the form-of text, before the final </span> (or at the end of the first line, before the colon, in a multiline {{infl of}} call). `do_form_of` should return two arguments: (1) The actual definition-line text, marked up appropriately with <span>...</span> but without any terminating period/dot. (2) Any extra categories to add the page to (other than those that can be derived from parameters specified to the invocation or parent arguments, which will automatically be added to the page). ]=] local function construct_form_of_text(data) local template, iargs, parent_args, params, no_numbered_gloss, do_form_of = data.template, data.iargs, data.parent_args, data.params, data.no_numbered_gloss, data.do_form_of local term_param = iargs.term_param local compat = iargs.lang or parent_args.lang term_param = term_param or compat and 1 or 2 -- Numbered params params[compat and "lang" or 1] = { required = not iargs.lang, type = "language", default = iargs.lang or "und" } local base_lemma_params = add_link_and_base_lemma_params(iargs, parent_args, params, term_param, compat, no_numbered_gloss) local ignored_tracked_params = handle_withdot_withcap(iargs, params) --[=[ Process parent arguments. This is similar to the following: require("Module:parameters").process(parent_args, params) but in addition it does the following: (1) Supplies default values for unspecified parent arguments as specified in DEFAULTS, which consist of specs of the form "ARG=VALUE". These are added to the parent arguments prior to processing, so boolean and number parameters will process the value appropriately. (2) Removes parent arguments specified in IGNORESPECS, which consist either of bare argument names to remove, or list-argument names to remove of the form "ARG:list". (3) Tracks the use of any parent arguments specified in TRACKED_PARAMS, which is a set-type table where the keys are arguments as they exist after processing (hence numeric arguments should be numbers, not strings) and the values should be boolean true. ]=]-- local defaults = iargs.def local ignorespecs = iargs.ignore if defaults[1] or ignorespecs[1] then local new_parent_args = {} for _, default in ipairs(defaults) do local defparam, defval = default:match("^(.-)=(.*)$") if not defparam then error("Bad default spec " .. default) end new_parent_args[defparam] = defval end local params_to_ignore = {} local numbered_list_params_to_ignore = {} local named_list_params_to_ignore = {} for _, ignorespec in ipairs(ignorespecs) do for ignore in gsplit(ignorespec, ",") do local param = ignore:match("^(.*):list$") if param then if param:match("^%d+$") then insert(numbered_list_params_to_ignore, tonumber(param)) else insert(named_list_params_to_ignore, "^" .. pattern_escape(param) .. "%d*$") end else if ignore:match("^%d+$") then ignore = tonumber(ignore) end params_to_ignore[ignore] = true end end end for k, v in pairs(parent_args) do if not params_to_ignore[k] then local ignore_me = false if type(k) == "number" then for _, lparam in ipairs(numbered_list_params_to_ignore) do if k >= lparam then ignore_me = true break end end else for _, lparam in ipairs(named_list_params_to_ignore) do if k:match(lparam) then ignore_me = true break end end end if not ignore_me then new_parent_args[k] = v end end end parent_args = new_parent_args end local m_param_utils, param_mods local function init_param_mods() if not m_param_utils then m_param_utils = require(parameter_utilities_module) param_mods = m_param_utils.construct_param_mods { {group = {"link", "q", "l", "ref"}}, {param = "conj", set = allowed_conj_set, overall = true}, } end end local terms, args if iargs.nolink or iargs.linktext then args = process_params(parent_args, params) else init_param_mods() terms, args = m_param_utils.parse_term_with_inline_modifiers_and_separate_params { params = params, param_mods = param_mods, raw_args = parent_args, termarg = term_param, track_module = "form-of" .. (template and "/" .. template or ""), lang = compat and "lang" or 1, sc = "sc", -- Don't do this, doesn't seem to make sense. -- parse_lang_prefix = true, make_separate_g_into_list = true, process_args_before_parsing = function(args) -- For compatibility with the previous code, we accept a comma-separated list of genders in each of g=, -- g2=, etc. in addition to separate genders in g=/g2=/etc. if args.g and args.g[1] then local genders = {} for _, g in ipairs(args.g) do extend(genders, split(g, ",")) end args.g = genders end end, splitchar = ",", subitem_param_handling = "last", } end -- Tracking for certain user-specified params. This is generally used for -- parameters that we accept but ignore, so that we can eventually remove -- all uses of these params and stop accepting them. if ignored_tracked_params then for ignored_tracked_param, _ in pairs(ignored_tracked_params) do if parent_args[ignored_tracked_param] then track("arg/" .. ignored_tracked_param, template) end end end local lang = args[compat and "lang" or 1] -- Determine categories for the page, including tracking categories local categories = {} if not args.nocat then for _, cat in ipairs(iargs.cat) do insert(categories, lang:getFullName() .. cat) end end for _, cat in ipairs(args.cat) do insert(categories, lang:getFullName() .. cat) end -- Format the link, preceding text and categories local function add_term_tracking_categories(term) -- add tracking category if term is same as page title if term and mw.title.getCurrentTitle().text == (lang:makeEntryName(term)) then -- insert(categories, "Forms linking to themselves") end -- maybe add tracking category if primary entry doesn't exist (this is an -- expensive call so we don't do it by default) if iargs.noprimaryentrycat and term and mw.title.getCurrentTitle().nsText == "" and not mw.title.new(term):getContent() then -- insert(categories, lang:getFullName() .. " " .. iargs.noprimaryentrycat) end end local lemmas if iargs.nolink then lemmas = nil elseif iargs.linktext then lemmas = iargs.linktext else if not terms.terms[1] then if mw.title.getCurrentTitle().nsText == "တမ်းပလေက်" then terms.terms[1] = { lang = lang, term = "term" } else error("No linked-to term specified") end end for _, termobj in ipairs(terms.terms) do if termobj.term then add_term_tracking_categories(termobj.term) end -- NOTE: Formerly, template arg sc= overrode inline modifier <sc:...>, which seems backwards, so I've -- changed it. Hopefully nothing depended on the old behavior. end lemmas = terms.terms end local enclitics, enclitic_conj if args.enclitic then init_param_mods() local enclitics_obj = parse_terms_with_inline_modifiers("enclitic", args.enclitic, param_mods, lang) enclitics = enclitics_obj.terms enclitic_conj = enclitics_obj.conj end local base_lemmas = {} if base_lemma_params then for _, base_lemma_param_obj in ipairs(base_lemma_params) do local param = base_lemma_param_obj.param if args[param] then init_param_mods() local base_lemmas_obj = parse_terms_with_inline_modifiers(param, args[param], param_mods, lang) insert(base_lemmas, { paramobj = base_lemma_param_obj, lemmas = base_lemmas_obj.terms, conj = base_lemmas_obj.conj, }) end end end local posttext = iargs.posttext local addl = args.addl if addl then posttext = posttext or "" if addl:find("^[;:]") then posttext = posttext .. addl elseif addl:find("^_") then posttext = posttext .. " " .. addl:sub(2) else posttext = posttext .. ", " .. addl end end local lemma_data = { lang = lang, args = args, lemmas = lemmas, conj = terms and terms.conj or iargs.conj, enclitics = enclitics, enclitic_conj = enclitic_conj, base_lemmas = base_lemmas, categories = categories, posttext = posttext, } local form_of_text, lang_cats = do_form_of(lemma_data) extend(lemma_data.categories, lang_cats) local text = form_of_text .. ( args.nodot and "" or args.dot or iargs.withdot and "." or "" ) if #lemma_data.categories == 0 then return text end return text .. format_categories(lemma_data.categories, lemma_data.lang, args.sort, -- If lemma_is_sort_key is given, supply the first lemma term as the sort base if possible. If sort= is given, -- it will override the base; otherwise, the base will be converted appropriately to a sort key using the -- same algorithm applied to pagenames. iargs.lemma_is_sort_key and type(lemma_data.lemmas) == "table" and lemma_data.lemmas[1].term, -- Supply the first lemma's script for sort key computation. force_cat or get_force_cat(), type(lemma_data.lemmas) == "table" and lemma_data.lemmas[1].sc) end -- Invocation parameters shared between form_of_t(), tagged_form_of_t() and inflection_of_t(). local function get_common_invocation_params() return { ["term_param"] = {type = "number"}, ["lang"] = true, -- To be used as the default code in params. ["sc"] = {type = "script"}, ["cat"] = {list = true, sublist = "comma without whitespace", flatten = true}, ["ignore"] = {list = true}, ["def"] = {list = true}, ["conj"] = {set = allowed_conj_set, default = "and"}, ["withcap"] = {type = "boolean"}, ["withencap"] = {type = "boolean"}, ["withdot"] = {type = "boolean"}, ["nolink"] = {type = "boolean"}, ["linktext"] = true, ["posttext"] = true, ["noprimaryentrycat"] = true, ["lemma_is_sort_key"] = true, } end local function should_ucfirst_text(args, iargs, lang) return args.cap or (iargs.withcap or iargs.withencap and lang:getCode() == "en") and not args.nocap end --[==[ Function that implements {{tl|form of}} and the various more specific form-of templates (but not {{tl|inflection of}} or templates that take tagged inflection parameters). Invocation params: ; {{para|1|req=1}} : Text to display before the link. ; {{para|term_param}} : Numbered param holding the term linked to. Other numbered params come after. Defaults to 1 if invocation or template param {{para|lang}} is present, otherwise 2. ; {{para|lang}} : Default language code for language-specific templates. If specified, no language code needs to be specified, and if specified it needs to be set using {{para|lang}}, not {{para|1}}. ; {{para|sc}} : Default script code for language-specific templates. The script code can still be overridden using template param {{para|sc}}. ; {{para|cat}}, {{para|cat2}}, ...: : Categories to place the page into. The language name will automatically be prepended. Note that there is also a template param {{para|cat}} to specify categories at the template level. Use of {{para|nocat}} disables categorization of categories specified using invocation param {{para|cat}}, but not using template param {{para|cat}}. A single param can specify multiple comma-separated categories if no space follows the comma. ; {{para|ignore}}, {{para|ignore2}}, ...: : One or more template params to silently accept and ignore. Useful e.g. when the template takes additional parameters such as {{para|from}} or {{para|POS}}. Each value is a comma-separated list of either bare parameter names or specifications of the form `PARAM:list` to specify that the parameter is a list parameter. ; {{para|def}}, {{para|def2}}, ...: : One or more default values to supply for template args. For example, specifying {{para|def|2=tr=-}} causes the default for template param {{para|tr}} to be `-`. Actual template params override these defaults. ; {{para|withcap}} : Capitalize the first character of the text preceding the link, unless template param {{para|nocap}} is given. ; {{para|withencap}} : Capitalize the first character of the text preceding the link if the language is English and template param {{para|nocap}} is not given. ; {{para|withdot}} : Add a final period after the link, unless template param {{para|nodot}} is given to suppress the period, or {{para|dot}} is given to specify an alternative punctuation character. ; {{para|nolink}} : Suppress the display of the link. If specified, none of the template params that control the link ({{para|<var>term_param</var>}}, {{para|<var>term_param</var> + 1}}, {{para|<var>term_param</var> + 2}}, {{para|t}}, {{para|gloss}}, {{para|sc}}, {{para|tr}}, {{para|ts}}, {{para|pos}}, {{para|g}}, {{para|id}}, {{para|lit}}) will be available. If the calling template uses any of these parameters, they must be ignored using {{para|ignore}}. {{para|linktext}} : Override the display of the link with the specified text. This is useful if a custom template is available to format the link (e.g. in Hebrew, Chinese and Japanese). If specified, none of the template params that control the link ({{para|<var>term_param</var>}}, {{para|<var>term_param</var> + 1}}, {{para|<var>term_param</var> + 2}}, {{para|t}}, {{para|gloss}}, {{para|sc}}, {{para|tr}}, {{para|ts}}, {{para|pos}}, {{para|g}}, {{para|id}}, {{para|lit}}) will be available. If the calling template uses any of these parameters, they must be ignored using {{para|ignore}}. ; {{para|posttext}} : Additional text to display directly after the formatted link, before any terminating period/dot and inside of `<span class='use-with-mention'>`. ; {{para|noprimaryentrycat}} : Category to add the page to if the primary entry linked to doesn't exist. The language name will automatically be prepended. ; {{para|lemma_is_sort_key}} : If the user didn't specify a sort key, use the lemma as the sort key (instead of the page itself). ]==] function export.form_of_t(frame) local iparams = get_common_invocation_params() iparams[1] = {required = true} local iargs = process_params(frame.args, iparams) local parent_args = frame:getParent().args local params = get_common_template_params() if next(iargs.cat) then params.nocat = {type = "boolean"} end return construct_form_of_text { template = "form-of-t", iargs = iargs, parent_args = parent_args, params = params, do_form_of = function(lemma_data) local args = lemma_data.args local text if args.notext then text = "" else text = iargs[1] if should_ucfirst_text(args, iargs, lemma_data.lang) then text = ucfirst(text) end end return format_form_of { text = text, lemmas = lemma_data.lemmas, conj = lemma_data.conj, enclitics = lemma_data.enclitics, base_lemmas = lemma_data.base_lemmas, lemma_face = "term", posttext = lemma_data.posttext }, {} end } end --[=[ Construct and return the full definition line for a form-of-type template invocation that is based on inflection tags. This is a wrapper around construct_form_of_text() and takes the following arguments: processed invocation arguments IARGS, processed parent arguments ARGS, TERM_PARAM (the parent argument specifying the main entry), COMPAT (true if the language code is found in args.lang instead of args[1]), and TAGS, the list of (non-canonicalized) inflection tags. It returns that actual definition-line text including terminating period/full-stop, formatted categories, etc. and should be directly returned as the template function's return value. ]=] local function construct_tagged_form_of_text(data) local template, iargs, parent_args, params, no_numbered_gloss, tags = data.template, data.iargs, data.parent_args, data.params, data.no_numbered_gloss, data.tags -- Named params not controlling link display -- Always included because lang-specific categories may be added params.nocat = {type = "boolean"} params.p = true params.POS = {alias_of = "p"} return construct_form_of_text { template = template, iargs = iargs, parent_args = parent_args, params = params, no_numbered_gloss = no_numbered_gloss, do_form_of = function(lemma_data) local args = lemma_data.args if is_callable(tags) then tags = tags(args) end -- NOTE: tagged_inflections returns two values, so we do too. return tagged_inflections { lang = lemma_data.lang, tags = tags, lemmas = lemma_data.lemmas, conj = lemma_data.conj, enclitics = lemma_data.enclitics, enclitic_conj = lemma_data.enclitic_conj, base_lemmas = lemma_data.base_lemmas, lemma_face = "term", POS = args.p, pagename = args.pagename, -- Set no_format_categories because we do it ourselves in construct_form_of_text(). no_format_categories = true, nocat = args.nocat, notext = args.notext, capfirst = should_ucfirst_text(args, iargs, lemma_data.lang), posttext = lemma_data.posttext, } end } end --[==[ Function that implements form-of templates that are defined by specific tagged inflections (typically a template referring to a non-lemma inflection, such as {{tl|plural of}}). This works exactly like {form_of_t()} except that the "form of" text displayed before the link is based off of a pre-specified set of inflection tags (which will be appropriately linked to the glossary) instead of arbitrary text. From the user's perspective, there is no difference between templates implemented using {form_of_t()} and {tagged_form_of_t()}; they accept exactly the same parameters and work the same. See also {inflection_of_t()} below, which is intended for templates with user-specified inflection tags. Invocation params: ; {{para|1|req=1}}, {{para|2}}, ... : One or more inflection tags describing the inflection in question. ; {{para|split_tags}} : If specified, character to split specified inflection tags on. This allows multiple tags to be included in a single argument, simplifying template code. ; {{para|term_param}} ; {{para|lang}} ; {{para|sc}} ; {{para|cat}}, {{para|cat2}}, ... ; {{para|ignore}}, {{para|ignore2}}, ... ; {{para|def}}, {{para|def2}}, ... ; {{para|withcap}} ; {{para|withencap}} ; {{para|withdot}} ; {{para|nolink}} ; {{para|linktext}} ; {{para|posttext}} ; {{para|noprimaryentrycat}} ; {{para|lemma_is_sort_key}} : All of these are the same as in {form_of_t()}. ]==] function export.tagged_form_of_t(frame) local iparams = get_common_invocation_params() iparams[1] = {list = true, required = true} iparams.split_tags = true local iargs = process_params(frame.args, iparams) local parent_args = frame:getParent().args local params = get_common_template_params() return construct_tagged_form_of_text { template = "tagged-form-of-t", iargs = iargs, parent_args = parent_args, params = params, tags = split_inflection_tags(iargs[1], iargs.split_tags), } end --[==[ Function that implements {{tl|inflection of}} and certain semi-specific variants, such as {{tl|participle of}} and {{tl|past participle form of}}. This function is intended for templates that allow the user to specify a set of inflection tags. It works similarly to {form_of_t()} and {tagged_form_of_t()} except that the calling convention for the calling template is : { {{TEMPLATE|LANG|MAIN_ENTRY_LINK|MAIN_ENTRY_DISPLAY_TEXT|TAG|TAG|...}}} instead of : { {{TEMPLATE|LANG|MAIN_ENTRY_LINK|MAIN_ENTRY_DISPLAY_TEXT|GLOSS}}} Note that there isn't a numbered parameter for the gloss, but it can still be specified using {{para|t}} or {{para|gloss}}. Invocation params: ; {{para|preinfl}}, {{para|preinfl2}}, ... : Extra inflection tags to automatically prepend to the tags specified by the template. ; {{para|postinfl}}, {{para|postinfl2}}, ... : Extra inflection tags to automatically append to the tags specified by the template. Used for example by {{tl|past participle form of}} to add the tags `of the|past|p` onto the user-specified tags, which indicate which past participle form the page refers to. ; {{para|split_tags}} : If specified, character to split specified inflection tags on. This allows multiple tags to be included in a single argument, simplifying template code. Note that this applies *ONLY* to inflection tags specified in the invocation arguments using {{para|preinfl}} or {{para|postinfl}}, not to user-specified inflection tags. ; {{para|term_param}} ; {{para|lang}} ; {{para|sc}} ; {{para|cat}}, {{para|cat2}}, ... ; {{para|ignore}}, {{para|ignore2}}, ... ; {{para|def}}, {{para|def2}}, ... ; {{para|withcap}} ; {{para|withencap}} ; {{para|withdot}} ; {{para|nolink}} ; {{para|linktext}} ; {{para|posttext}} ; {{para|noprimaryentrycat}} ; {{para|lemma_is_sort_key}} : All of these are the same as in {form_of_t()}. ]==] function export.inflection_of_t(frame) local iparams = get_common_invocation_params() iparams.preinfl = {list = true} iparams.postinfl = {list = true} iparams.split_tags = true local iargs = process_params(frame.args, iparams) local parent_args = frame:getParent().args local params = get_common_template_params() local compat = iargs.lang or parent_args.lang local tagsind = (iargs.term_param or compat and 1 or 2) + 2 params[tagsind] = {list = true, -- at least one inflection tag is required unless preinfl or postinfl tags are given required = #iargs.preinfl == 0 and #iargs.postinfl == 0} return construct_tagged_form_of_text { template = "inflection-of-t", iargs = iargs, parent_args = parent_args, params = params, no_numbered_gloss = true, tags = function(args) local infls if not next(iargs.preinfl) and not next(iargs.postinfl) then -- If no preinfl or postinfl tags, just use the user-specified tags directly. infls = args[tagsind] else -- Otherwise, we need to prepend the preinfl tags and postpend the postinfl tags. If there's only one tag set -- (no semicolon), it's easier. Since this is common, we optimize for it. infls = {} local saw_semicolon = false for _, infl in ipairs(args[tagsind]) do if infl == ";" then saw_semicolon = true break end end local split_preinfl = split_inflection_tags(iargs.preinfl, iargs.split_tags) local split_postinfl = split_inflection_tags(iargs.postinfl, iargs.split_tags) if not saw_semicolon then extend(infls, split_preinfl) extend(infls, args[tagsind]) extend(infls, split_postinfl) else local groups = split_tag_set(args[tagsind]) for _, group in ipairs(groups) do if #infls > 0 then insert(infls, ";") end extend(infls, split_preinfl) extend(infls, group) extend(infls, split_postinfl) end end end return infls end, } end --[==[ Normalize a part-of-speech tag given a possible abbreviation (passed in as {{para|1}} of the invocation args). If the abbreviation isn't recognized, the original POS tag is returned. If no POS tag is passed in, return the value of invocation arg {{para|default}}. ]==] function export.normalize_pos(frame) local iparams = { [1] = true, ["default"] = true, } local iargs = process_params(frame.args, iparams) if not iargs[1] and not iargs.default then error("Either 1= or default= must be given in the invocation args") end if not iargs[1] then return iargs.default end return (m_form_of_pos or get_m_form_of_pos())[iargs[1]] or iargs[1] end return export qb6u8ey7rry1hcv2r2xqmx4um12y2yg မော်ဂျူး:form of 828 3781 11961 11037 2025-06-23T13:19:54Z 咽頭べさ 11 11961 Scribunto text/plain local export = {} export.force_cat = false -- for testing; set to true to display categories even on non-mainspace pages local debug_track_module = "Module:debug/track" local form_of_cats_module = "Module:form of/cats" local form_of_data_module = "Module:form of/data" local form_of_data1_module = "Module:form of/data/1" local form_of_data2_module = "Module:form of/data/2" local form_of_functions_module = "Module:form of/functions" local form_of_lang_data_module_prefix = "Module:form of/lang-data/" local form_of_pos_module = "Module:form of/pos" local function_module = "Module:fun" local headword_data_module = "Module:headword/data" local json_module = "Module:JSON" local labels_module = "Module:labels" local links_module = "Module:links" local load_module = "Module:load" local parse_utilities_module = "Module:parse utilities" local string_utilities_module = "Module:string utilities" local table_module = "Module:table" local table_deep_equals_module = "Module:table/deepEquals" local utilities_module = "Module:utilities" local anchor_encode = mw.uri.anchorEncode local concat = table.concat local dump = mw.dumpObject local fetch_categories_and_labels -- Defined below. local format_form_of -- Defined below. local get_tag_display_form -- Defined below. local get_tag_set_display_form -- Defined below. local insert = table.insert local ipairs = ipairs local is_link_or_html -- Defined below. local list_to_text = mw.text.listToText local lookup_shortcut -- Defined below. local lookup_tag -- Defined below. local normalize_tag_set -- Defined below. local parse_tag_set_properties -- Defined below. local require = require local sort = table.sort local split_tag_set -- Defined below. local tagged_inflections -- Defined below. local type = type --[==[ Loaders for functions in other modules, which overwrite themselves with the target function when called. This ensures modules are only loaded when needed, retains the speed/convenience of locally-declared pre-loaded functions, and has no overhead after the first call, since the target functions are called directly in any subsequent calls.]==] local function append(...) append = require(table_module).append return append(...) end local function contains(...) contains = require(table_module).contains return contains(...) end local function debug_track(...) debug_track = require(debug_track_module) return debug_track(...) end local function deep_copy(...) deep_copy = require(table_module).deepCopy return deep_copy(...) end local function deep_equals(...) deep_equals = require(table_deep_equals_module) return deep_equals(...) end local function extend(...) extend = require(table_module).extend return extend(...) end local function format_categories(...) format_categories = require(utilities_module).format_categories return format_categories(...) end local function full_link(...) full_link = require(links_module).full_link return full_link(...) end local function insert_if_not(...) insert_if_not = require(table_module).insertIfNot return insert_if_not(...) end local function is_subset_list(...) is_subset_list = require(table_module).isSubsetList return is_subset_list(...) end local function iterate_from(...) iterate_from = require(function_module).iterateFrom return iterate_from(...) end local function join_multiparts(...) join_multiparts = require(form_of_functions_module).join_multiparts return join_multiparts(...) end local function load_data(...) load_data = require(load_module).load_data return load_data(...) end local function parse_inline_modifiers(...) parse_inline_modifiers = require(parse_utilities_module).parse_inline_modifiers return parse_inline_modifiers(...) end local function safe_load_data(...) safe_load_data = require(load_module).safe_load_data return safe_load_data(...) end local function safe_require(...) safe_require = require(load_module).safe_require return safe_require(...) end local function serial_comma_join(...) serial_comma_join = require(table_module).serialCommaJoin return serial_comma_join(...) end local function shallow_copy(...) shallow_copy = require(table_module).shallowCopy return shallow_copy(...) end local function show_labels(...) show_labels = require(labels_module).show_labels return show_labels(...) end local function slice(...) slice = require(table_module).slice return slice(...) end local function split(...) split = require(string_utilities_module).split return split(...) end local function ucfirst(...) ucfirst = require(string_utilities_module).ucfirst return ucfirst(...) end --[==[ Loaders for objects, which load data (or some other object) into some variable, which can then be accessed as "foo or get_foo()", where the function get_foo sets the object to "foo" and then returns it. This ensures they are only loaded when needed, and avoids the need to check for the existence of the object each time, since once "foo" has been set, "get_foo" will not be called again.]==] local cat_functions local function get_cat_functions() cat_functions, get_cat_functions = require(form_of_functions_module).cat_functions, nil return cat_functions end local default_pagename local function get_default_pagename() default_pagename, get_default_pagename = load_data(headword_data_module).pagename, nil return default_pagename end local display_handlers local function get_display_handlers() display_handlers, get_display_handlers = require(form_of_functions_module).display_handlers, nil return display_handlers end local m_cats_data local function get_m_cats_data() m_cats_data, get_m_cats_data = load_data(form_of_cats_module), nil return m_cats_data end local m_data local function get_m_data() -- Needs require. m_data, get_m_data = require(form_of_data_module), nil return m_data end local m_data1 local function get_m_data1() m_data1, get_m_data1 = load_data(form_of_data1_module), nil return m_data1 end local m_data2 local function get_m_data2() m_data2, get_m_data2 = load_data(form_of_data2_module), nil return m_data2 end local m_pos_data local function get_m_pos_data() m_pos_data, get_m_pos_data = load_data(form_of_pos_module), nil return m_pos_data end --[==[ intro: This module implements the underlying processing of {{tl|form of}}, {{tl|inflection of}} and specific variants such as {{tl|past participle of}} and {{tl|alternative spelling of}}. Most of the logic in this file is to handle tags in {{tl|inflection of}}. Other related files: * [[Module:form of/templates]] contains the majority of the logic that implements the templates themselves. * [[Module:form of/data/1]] is a data-only file containing information on the more common inflection tags, listing the tags, their shortcuts, the category they belong to (tense-aspect, case, gender, voice-valence, etc.), the appropriate glossary link and the wikidata ID. * [[Module:form of/data/2]] is a data-only file containing information on the less common inflection tags, in the same format as [[Module:form of/data/1]]. * [[Module:form of/lang-data/LANGCODE]] is a data-only file containing information on the language-specific inflection tags for the language with code LANGCODE, in the same format as [[Module:form of/data/1]]. Language-specific tags override general tags. * [[Module:form of/cats]] is a data-only file listing the language-specific categories that are added when the appropriate combinations of tags are seen for a given language. * [[Module:form of/pos]] is a data-only file listing the recognized parts of speech and their abbreviations, used for categorization. FIXME: This should be unified with the parts of speech listed in [[Module:links]]. * [[Module:form of/functions]] contains functions for use with [[Module:form of/data/1]] and [[Module:form of/cats]]. They are contained in this module because data-only modules can't contain code. The functions in this file are of two types: *# Display handlers allow for customization of the display of multipart tags (see below). Currently there is only one such handler, for handling multipart person tags such as `1//2//3`. *# Cat functions allow for more complex categorization logic, and are referred to by name in [[Module:form of/cats]]. Currently no such functions exist. The following terminology is used in conjunction with {{tl|inflection of}}: * A ''tag'' is a single grammatical item, as specified in a single numbered parameter of {{tl|inflection of}}. Examples are `masculine`, `nominative`, or `first-person`. Tags may be abbreviated, e.g. `m` for `masculine`, `nom` for `nominative`, or `1` for `first-person`. Such abbreviations are called ''aliases'', and some tags have multiple equivalent aliases (e.g. `p` or `pl` for `plural`). The full, non-abbreviated form of a tag is called its ''canonical form''. * The ''display form'' of a tag is the way it's displayed to the user. Usually the displayed text of the tag is the same as its canonical form, and it normally functions as a link to a glossary entry explaining the tag. Usually the link is to an entry in [[Appendix:Glossary]], but sometimes the tag is linked to an individual dictionary entry or to a Wikipedia entry. Occasionally, the display text differs from the canonical form of the tag. An example is the tag `comparative case`, which has the display text read as simply `comparative`. Normally, tags referring to cases don't have the word "case" in them, but in this case the tag `comparative` was already used as an alias for the tag `comparative degree`, so the tag was named `comparative case` to avoid clashing. A similar situation occurs with `adverbial case` vs. the grammar tag `adverbial` (as in `adverbial participle`). * A ''tag set'' is an ordered list of tags, which together express a single inflection, for example, `1|s|pres|ind`, which can be expanded to canonical-form tags as `first-person|singular|present|indicative`. * A ''conjoined tag set'' is a tag set that consists of multiple individual tag sets separated by a semicolon, e.g. `1|s|pres|ind|;|2|s|imp`, which specifies two tag sets, `1|s|pres|ind` as above and `2|s|imp` (in canonical form, `second-person|singular|imperative`). Multiple tag sets specified in a single call to {{tl|inflection of}} are specified in this fashion. Conjoined tag sets can also occur in list-tag shortcuts. * A ''multipart tag'' is a tag that embeds multiple tags within it, such as `f//n` or `nom//acc//voc`. These are used in the case of [[syncretism]], when the same form applies to multiple inflections. Examples are the Spanish present subjunctive, where the first-person and third-person singular have the same form (e.g. {{m|es|siga}} from {{m|es|seguir|t=to follow}}), or Latin third-declension adjectives, where the dative and ablative plural of all genders have the same form (e.g. {{m|la|omnibus}} from {{m|la|omnis|t=all}}). These would be expressed respectively as `1//3|s|pres|sub` and `dat//abl|m//f//n|p`, where the use of the multipart tag compactly encodes the syncretism and avoids the need to individually list out all of the inflections. Multipart tags currently display as a list separated by a slash, e.g. ''dative/ablative'' or ''masculine/feminine/neuter'' where each individual word is linked appropriately. As a special case, multipart tags involving persons display specially; for example, the multipart tag `1//2//3` displays as ''first-, second- and third-person'', with the word "person" occurring only once. * A ''two-level multipart tag'' is a special type of multipart tag that joins two or more tag sets instead of joining individual tags. The tags within the tag set are joined by a colon, e.g. `1:s//3:p`, which is displayed as ''first-person singular and third-person plural'', e.g. for use with the form {{m|grc|μέλλον}} of the verb {{m|grc|μέλλω|t=to intend}}, which uses the tag set `1:s//3:p|impf|actv|indc|unaugmented` to express the syncretism between the first singular and third plural forms of the imperfect active indicative unaugmented conjugation. Two-level multipart tags should be used sparingly; if in doubt, list out the inflections separately. [FIXME: Make two-level multipart tags obsolete.] * A ''shortcut'' is a tag that expands to any type of tag described above, or to any type of tag set described above. Aliases are a particular type of shortcut whose expansion is a single non-multipart tag. * A ''multipart shortcut'' is a shortcut that expands into a multipart tag, for example `123`, which expands to the multipart tag `1//2//3`. Only the most common such combinations exist as shortcuts. * A ''list shortcut'' is a special type of shortcut that expands to a list of tags instead of a single tag. For example, the shortcut `1s` expands to `1|s` (first-person singular). Only the most common such combinations exist as shortcuts. * A ''conjoined shortcut'' is a special type of list shortcut that consists of a conjoined tag set (multiple logical tag sets). For example, the English language-specific shortcut `ed-form` expands to `spast|;|past|part`, expressing the common syncretism between simple past and past participle in English (and in this case, `spast` is itself a list shortcut that expands to `simple|past`).]==] -- Add tracking category for PAGE when called from {{inflection of}} or -- similar TEMPLATE. The tracking category linked to is -- [[Wiktionary:Tracking/inflection of/PAGE]]. local function track(page) debug_track("inflection of/" .. -- avoid including links in pages (may cause error) page:gsub("%[", "("):gsub("%]", ")"):gsub("|", "!") ) end local function wrap_in_span(text, classes) return ("<span class='%s'>%s</span>"):format(classes, text) end --[==[ Lowest-level implementation of form-of templates, including the general {{tl|form of}} as well as those that deal with inflection tags, such as the general {{tl|inflection of}}, semi-specific variants such as {{tl|participle of}}, and specific variants such as {{tl|past participle of}}. `data` contains all the information controlling the display, with the following fields: * `.text`: Text to insert before the lemmas. Wrapped in the value of `.text_classes`, or its default; see below. * `.lemmas`: List of objects describing the lemma(s) of which the term in question is a non-lemma form. These are passed directly to {full_link()} in [[Module:links]]. Each object should have at minimum a `.lang` field containing the language of the lemma and a `.term` field containing the lemma itself. Each object is formatted using {full_link()} and then if there are more than one, they are joined using {serialCommaJoin()} in [[Module:table]]. Alternatively, `.lemmas` can be a string, which is displayed directly, or omitted, to show no lemma links and omit the connecting text. * `.lemma_face`: "Face" to use when displaying the lemma objects. Usually should be set to {"term"}. * `.conj`: Conjunction or separator to use when joining multiple lemma objects. Defaults to {"and"}. * `.enclitics`: List of enclitics to display after the lemmas, in parens. * `.enclitic_conj`: Conjunction or separator to use when joining multiple enclitics. Defaults to {"and"}. * `.base_lemmas`: List of base lemmas to display after the lemmas, in the case where the lemmas in `.lemmas` are themselves forms of another lemma (the base lemma), e.g. a comparative, superlative or participle. Each object is of the form { { paramobj = PARAM_OBJ, lemmas = {LEMMA_OBJ, LEMMA_OBJ, ...}, conj = "CONJ" }} where PARAM_OBJ describes the properties of the base lemma parameter (i.e. the relationship between the intermediate and base lemmas); LEMMA_OBJ is an object suitable to be passed to {full_link()} in [[Module:links]]; and CONJ is the conjunction to join multiple lemmas with, defaulting to {"and"}. PARAM_OBJ is of the format { { param = "PARAM", tags = {"TAG", "TAG", ...} } where PARAM is the name of the parameter to {{tl|inflection of}} etc. that holds the base lemma(s) of the specified relationship and the tags describe the relationship, such as { {"comd"}} or { {"past", "part"}}. * `.text_classes`: CSS classes used to wrap the tag text and lemma links. Default is {"form-of-definition use-with-mention"}. * `.lemma_classes`: Additional CSS classes used to wrap the lemma links. Default is {"form-of-definition-link"}. * `.posttext`: Additional text to display after the lemma links.]==] function export.format_form_of(data) if type(data) ~= "table" then error("Internal error: First argument must now be a table of arguments") end local text_classes = data.text_classes or "form-of-definition use-with-mention" local lemma_classes = data.lemma_classes or "form-of-definition-link" local parts = {} insert(parts, "<span class='" .. text_classes .. "'>") insert(parts, data.text) if data.text ~= "" and data.lemmas then insert(parts, " ") end if data.lemmas then if type(data.lemmas) == "string" then insert(parts, wrap_in_span(data.lemmas, lemma_classes)) else local formatted_terms = {} for _, lemma in ipairs(data.lemmas) do insert(formatted_terms, wrap_in_span( full_link(lemma, data.lemma_face, nil, "show qualifiers"), lemma_classes )) end insert(parts, serial_comma_join(formatted_terms, {conj = data.conj or "and"})) end end if data.enclitics and #data.enclitics > 0 then -- The outer parens need to be outside of the text_classes span so they show in upright instead of italic, or -- they will clash with upright parens generated by link annotations such as transliterations and pos=. insert(parts, "</span>") local formatted_terms = {} for _, enclitic in ipairs(data.enclitics) do -- FIXME, should we have separate clitic face and/or classes? insert(formatted_terms, wrap_in_span( full_link(enclitic, data.lemma_face, nil, "show qualifiers"), lemma_classes )) end insert(parts, " (") insert(parts, wrap_in_span("with enclitic" .. (#data.enclitics > 1 and "s" or "") .. " ", text_classes)) insert(parts, serial_comma_join(formatted_terms, {conj = data.enclitic_conj or "and"})) insert(parts, ")") insert(parts, "<span class='" .. text_classes .. "'>") end if data.base_lemmas and #data.base_lemmas > 0 then for _, base_lemma in ipairs(data.base_lemmas) do insert(parts, ", the </span>") insert(parts, (tagged_inflections{ lang = base_lemma.lemmas[1].lang, tags = base_lemma.paramobj.tags, lemmas = base_lemma.lemmas, conj = base_lemma.conj or "and", lemma_face = data.lemma_face, no_format_categories = true, nocat = true, text_classes = data.text_classes, })) insert(parts, "<span class='" .. text_classes .. "'>") end end -- FIXME, should posttext go before enclitics? If so we need to have separate handling for the -- final colon when there are multiple tag sets in tagged_inflections(). if data.posttext then insert(parts, data.posttext) end insert(parts, "</span>") return concat(parts) end format_form_of = export.format_form_of --[==[ Return true if `tag` contains an internal link or HTML.]==] function export.is_link_or_html(tag) return tag:find("[[", nil, true) or tag:find("|", nil, true) or tag:find("<", nil, true) end is_link_or_html = export.is_link_or_html --[==[ Look up a tag (either a shortcut of any sort of a canonical long-form tag) and return its expansion. The expansion will be a string unless the shortcut is a list-tag shortcut such as `1s`; in that case, the expansion will be a list. The caller must handle both cases. Only one level of expansion happens; hence, `acc` expands to {"accusative"}, `1s` expands to { {"1", "s"}} (not to { {"first", "singular"}}) and `123` expands to {"1//2//3"}. The expansion will be the same as the passed-in tag in the following circumstances: # The tag is `;` (this is special-cased, and no lookup is done). # The tag is a multipart tag such as `nom//acc` (this is special-cased, and no lookup is done). # The tag contains a raw link (this is special-cased, and no lookup is done). # The tag contains HTML (this is special-cased, and no lookup is done). # The tag is already a canonical long-form tag. # The tag is unrecognized. This function first looks up in the lang-specific data module [[Module:form of/lang-data/LANGCODE]], then in [[Module:form of/data/1]] (which includes more common non-lang-specific tags) and finally (only if the tag is not recognized as a shortcut or canonical tag, and is not of types 1-4 above) in [[Module:form of/data/2]]. If the expansion is a string and is different from the tag, track it if `do_track` is true.]==] function export.lookup_shortcut(tag, lang, do_track) -- If there is HTML or a link in the tag, return it directly; don't try -- to look it up, which will fail. if tag == ";" or tag:find("//", nil, true) or is_link_or_html(tag) then return tag end local expansion while lang do local langdata = safe_load_data(form_of_lang_data_module_prefix .. lang:getCode()) -- If this is a canonical long-form tag, just return it, and don't check for shortcuts. This is an -- optimization; see below. if langdata then if langdata.tags[tag] then return tag end expansion = langdata.shortcuts[tag] if expansion then break end end -- If the language has a parent (i.e. a superordinate variety), try again with that. lang = lang:getParent() end if not expansion then -- If this is a canonical long-form tag, just return it, and don't check for shortcuts (which will cause -- [[Module:form of/data/2]] to be loaded, because there won't be a shortcut entry in [[Module:form of/data/1]] -- -- or, for that matter, in [[Module:form of/data/2]]). This is an optimization; the code will still work without -- it, but will use up more memory. if (m_data1 or get_m_data1()).tags[tag] then return tag end expansion = m_data1.shortcuts[tag] end if not expansion then expansion = (m_data2 or get_m_data2()).shortcuts[tag] end if not expansion then return tag end -- Maybe track the expansion if it's not the same as the raw tag. if do_track and expansion ~= tag and type(expansion) == "string" then track("tag/" .. tag) end return expansion end lookup_shortcut = export.lookup_shortcut --[==[ Look up a normalized/canonicalized tag and return the data object associated with it. If the tag isn't found, return nil. This first looks up in the lang-specific data module [[Module:form of/lang-data/LANGCODE]], then in [[Module:form of/data/1]] (which includes more common non-lang-specific tags) and then finally in [[Module:form of/data/2]].]==] function export.lookup_tag(tag, lang) while lang do local langdata = safe_load_data(form_of_lang_data_module_prefix .. lang:getCode()) local tag = langdata and langdata.tags[tag] if tag then return tag end -- If the language has a parent (i.e. a superordinate variety), try again with that. lang = lang:getParent() end local tagobj = (m_data1 or get_m_data1()).tags[tag] if tagobj then return tagobj end local tagobj2 = (m_data2 or get_m_data2()).tags[tag] if tagobj2 then return tagobj2 end return nil end lookup_tag = export.lookup_tag -- Normalize a single tag, which may be a shortcut but should not be a multipart tag, a multipart shortcut or a list -- shortcut. local function normalize_single_tag(tag, lang, do_track) local expansion = lookup_shortcut(tag, lang, do_track) if type(expansion) ~= "string" then error("Tag '" .. tag .. "' is a list shortcut, which is not allowed here") end tag = expansion if not lookup_tag(tag, lang) and do_track then -- If after all expansions and normalizations we don't recognize the canonical tag, track it. track("unknown") track("unknown/" .. tag) end return tag end --[=[ Normalize a component of a multipart tag. This should not have any // in it, but may join multiple individual tags with a colon, and may be a single list-tag shortcut, which is treated as if colon-separated. The return value may be a list of tags. ]=] local function normalize_multipart_component(tag, lang, do_track) -- If there is HTML or a link in the tag, don't try to split on colon. A colon may legitimately occur in either one, -- and we don't want these things parsed. Note that we don't do this check before splitting on //, which we don't -- expect to occur in links or HTML; see comment in normalize_tag(). if is_link_or_html(tag) then return tag end local components = split(tag, ":", true) if #components == 1 then -- We allow list-tag shortcuts inside of multipart tags, e.g. -- '1s//3p'. Check for this now. tag = lookup_shortcut(tag, lang, do_track) if type(tag) == "table" then -- Temporary tracking as we will disallow this. track("list-tag-inside-of-multipart") -- We found a list-tag shortcut; treat as if colon-separated. components = tag else return normalize_single_tag(tag, lang, do_track) end end local normtags = {} -- Temporary tracking as we will disallow this. track("two-level-multipart") for _, component in ipairs(components) do if do_track then -- There are multiple components; track each of the individual -- raw tags. track("tag/" .. component) end insert(normtags, normalize_single_tag(component, lang, do_track)) end return normtags end --[=[ Normalize a single tag. The return value may be a list (in the case of multipart tags), which will contain nested lists in the case of two-level multipart tags. ]=] local function normalize_tag(tag, lang, do_track) -- We don't check for links or HTML before splitting on //, which we don't expect to occur in links or HTML. Doing -- it this way allows for a tag like '{{lb|grc|Epic}}//{{lb|grc|Ionic}}' to function correctly (the template calls -- will be expanded before we process the tag, and will contain links and HTML). The only check we do is for a URL, -- which shouldn't normally occur, but might if the user tries to put an external link into the tag. URL's with // -- normally have the sequence ://, which should never normally occur when // and : are used in their normal ways. if tag:find("://", nil, true) then return tag end local split_tags = split(tag, "//", true) if #split_tags == 1 then local retval = normalize_multipart_component(tag, lang, do_track) if type(retval) == "table" then -- The user gave a tag like '1:s', i.e. with colon but without //. Allow this, but we need to return a -- nested list. return {retval} end return retval end local normtags = {} for _, single_tag in ipairs(split_tags) do if do_track then -- If the tag was a multipart tag, track each of individual raw tags. track("tag/" .. single_tag) end insert(normtags, normalize_multipart_component(single_tag, lang, do_track)) end return normtags end --[==[ Normalize a tag set (a list of tags) into its canonical-form tags. The return value is a list of normalized tag sets (a list because of there may be conjoined shortcuts among the input tags). A normalized tag set is a list of tag elements, where each element is either a string (the canonical form of a tag), a list of such strings (in the case of multipart tags) or a list of lists of such strings (in the case of two-level multipart tags). For example, the multipart tag `nom//acc//voc` will be represented in canonical form as { {"nominative", "accusative", "vocative"}}, and the two-level multipart tag `1:s//3:p` will be represented as { {{"first-person", "singular"}, {"third-person", "plural"}}}. Example 1: {normalize_tag_set({"nom//acc//voc", "n", "p"})} = { {{{"nominative", "accusative", "vocative"}, "masculine", "plural"}}} Example 2: {normalize_tag_set({"ed-form"}, ENGLISH)} = { {{"simple", "past"}, {"past", "participle"}}} Example 3: {normalize_tag_set({"archaic", "ed-form"}, ENGLISH)} = { {{"archaic", "simple", "past"}, {"archaic", "past", "participle"}}}]==] function export.normalize_tag_set(tag_set, lang, do_track) -- We track usage of shortcuts, normalized forms and (in the case of multipart tags or list tags) intermediate -- forms. For example, if the tags 1s|mn|gen|indefinite are passed in, we track the following: -- [[Wiktionary:Tracking/inflection of/tag/1s]] -- [[Wiktionary:Tracking/inflection of/tag/1]] -- [[Wiktionary:Tracking/inflection of/tag/s]] -- [[Wiktionary:Tracking/inflection of/tag/first-person]] -- [[Wiktionary:Tracking/inflection of/tag/singular]] -- [[Wiktionary:Tracking/inflection of/tag/mn]] -- [[Wiktionary:Tracking/inflection of/tag/m//n]] -- [[Wiktionary:Tracking/inflection of/tag/m]] -- [[Wiktionary:Tracking/inflection of/tag/n]] -- [[Wiktionary:Tracking/inflection of/tag/masculine]] -- [[Wiktionary:Tracking/inflection of/tag/neuter]] -- [[Wiktionary:Tracking/inflection of/tag/gen]] -- [[Wiktionary:Tracking/inflection of/tag/genitive]] -- [[Wiktionary:Tracking/inflection of/tag/indefinite]] local output_tag_set = {} local saw_semicolon = false for _, tag in ipairs(tag_set) do if do_track then -- Track the raw tag. track("tag/" .. tag) end -- Expand the tag, which may generate a new tag (either a fully canonicalized tag, a multipart tag, or a list -- of tags). tag = lookup_shortcut(tag, lang, do_track) if type(tag) == "table" then if contains(tag, ";") then -- If we saw a conjoined shortcut, we need to use a more general algorithm that can expand a single -- tag set into multiple. saw_semicolon = true break end for _, t in ipairs(tag) do if do_track then -- If the tag expands to a list of raw tags, track each of those. track("tag/" .. t) end insert(output_tag_set, normalize_tag(t, lang, do_track)) end else insert(output_tag_set, normalize_tag(tag, lang, do_track)) end end if not saw_semicolon then return {output_tag_set} end -- Use a more general algorithm that handles conjoined shortcuts. output_tag_set = {} for i, tag in ipairs(tag_set) do if do_track then -- Track the raw tag. track("tag/" .. tag) end -- Expand the tag, which may generate a new tag (either a fully canonicalized tag, a multipart tag, or a list -- of tags). tag = lookup_shortcut(tag, lang, do_track) if type(tag) == "table" then local output_tag_sets = {} local shortcut_tag_sets = split_tag_set(tag) local normalized_shortcut_tag_sets = {} for _, shortcut_tag_set in ipairs(shortcut_tag_sets) do extend(normalized_shortcut_tag_sets, normalize_tag_set(shortcut_tag_set, lang, do_track)) end local after_tags = slice(tag_set, i + 1) local normalized_after_tags_sets = normalize_tag_set(after_tags, lang, do_track) for _, normalized_shortcut_tag_set in ipairs(normalized_shortcut_tag_sets) do for _, normalized_after_tags_set in ipairs(normalized_after_tags_sets) do insert(output_tag_sets, append(output_tag_set, normalized_shortcut_tag_set, normalized_after_tags_set)) end end return output_tag_sets else insert(output_tag_set, normalize_tag(tag, lang, do_track)) end end error("Internal error: Should not get here") end normalize_tag_set = export.normalize_tag_set --[==[ Split a tag set that may consist of multiple semicolon-separated tag sets into the component tag sets.]==] function export.split_tag_set(tag_set) local split_tag_sets = {} local cur_tag_set = {} for _, tag in ipairs(tag_set) do if tag == ";" then if #cur_tag_set > 0 then insert(split_tag_sets, cur_tag_set) end cur_tag_set = {} else insert(cur_tag_set, tag) end end if #cur_tag_set > 0 then insert(split_tag_sets, cur_tag_set) end return split_tag_sets end split_tag_set = export.split_tag_set local tag_set_param_mods = { lb = { item_dest = "labels", convert = function(arg, parse_err) return split(arg, "//", true) end, } } --[==[ Parse tag set properties from a tag set (list of tags). Currently no per-tag properties are recognized, and the only per-tag-set property recognized is `<lb:...>` for specifing label(s) for the tag set. Per-tag-set properties must be attached to the last tag.]==] function export.parse_tag_set_properties(tag_set) local function generate_tag_set_obj(last_tag) tag_set[#tag_set] = last_tag return {tags = tag_set} end local last_tag = tag_set[#tag_set] -- Check for inline modifier, e.g. מרים<tr:Miryem>. But exclude HTML entry with <span ...>, <i ...>, <br/> or -- similar in it, caused by wrapping an argument in {{l|...}}, {{af|...}} or similar. Basically, all tags of -- the sort we parse here should consist of a less-than sign, plus letters, plus a colon, e.g. <lb:...>, so if -- we see a tag on the outer level that isn't in this format, we don't try to parse it. The restriction to the -- outer level is to allow generated HTML inside of e.g. qualifier tags, such as foo<q:similar to {{m|fr|bar}}>. if last_tag:find("<", nil, true) and not last_tag:find("^[^<]*<%l*[^%l:]") then return parse_inline_modifiers(last_tag, { param_mods = tag_set_param_mods, generate_obj = generate_tag_set_obj, }) else return generate_tag_set_obj(last_tag) end end parse_tag_set_properties = export.parse_tag_set_properties local function normalize_pos(pos) if not pos then return nil end return (m_pos_data or get_m_pos_data())[pos] or pos end -- Return the display form of a single canonical-form tag. The value -- passed in must be a string (i.e. it cannot be a list describing a -- multipart tag). To handle multipart tags, use get_tag_display_form(). local function get_single_tag_display_form(normtag, lang) local data = lookup_tag(normtag, lang) local display = normtag -- If the tag has a special display form, use it if data and data.display then display = data.display end -- If there is a nonempty glossary index, then show a link to it local glossary = data and data[(m_data or get_m_data()).GLOSSARY] if glossary ~= nil then if glossary == m_data.WIKT then display = "[[" .. normtag .. "|" .. display .. "]]" elseif glossary == m_data.WP then display = "[[w:" .. normtag .. "|" .. display .. "]]" elseif glossary == m_data.APPENDIX then display = "[[Appendix:Glossary#" .. anchor_encode(normtag) .. "|" .. display .. "]]" elseif type(glossary) ~= "string" then error(("Internal error: Wrong type %s for glossary value %s for tag %s"):format( type(glossary), dump(glossary), normtag)) else local link = glossary:match("^wikt:(.*)") if link then display = "[[" .. link .. "|" .. display .. "]]" end if not link then link = glossary:match("^w:(.*)") if link then display = "[[w:" .. link .. "|" .. display .. "]]" end end if not link then display = "[[Appendix:Glossary#" .. anchor_encode(glossary) .. "|" .. display .. "]]" end end end return display end --[==[ Turn a canonicalized tag spec (which describes a single, possibly multipart tag) into the displayed form. The tag spec may be a string (a canonical-form tag); a list of canonical-form tags (in the case of a simple multipart tag); or a list of mixed canonical-form tags and lists of such tags (in the case of a two-level multipart tag). `joiner` indicates how to join the parts of a multipart tag, and can be either {"and"} ("foo and bar", or "foo, bar and baz" for 3 or more), {"slash"} ("foo/bar"), {"en-dash"} ("foo–bar") or {nil}, which uses the global default found in {multipart_join_strategy()} in [[Module:form of/functions]]. (NOTE: The global default is {"slash"} and this seems unlikely to change.)]==] function export.get_tag_display_form(tagspec, lang, joiner) if type(tagspec) == "string" then return get_single_tag_display_form(tagspec, lang) end -- We have a multipart tag. See if there's a display handler to display them specially. for _, handler in ipairs(display_handlers or get_display_handlers()) do local displayval = handler(tagspec, joiner) if displayval then return displayval end end -- No display handler. local displayed_tags = {} for _, first_level_tag in ipairs(tagspec) do if type(first_level_tag) == "string" then insert(displayed_tags, get_single_tag_display_form(first_level_tag, lang)) else -- A first-level element of a two-level multipart tag. Currently we just separate the individual components -- with spaces, but other ways are possible, e.g. using an underscore, colon, parens or braces. local components = {} for _, component in ipairs(first_level_tag) do insert(components, get_single_tag_display_form(component, lang)) end insert(displayed_tags, concat(components, " ")) end end return join_multiparts(displayed_tags, joiner) end get_tag_display_form = export.get_tag_display_form --[==[ Given a normalized tag set (i.e. as output by {normalize_tag_set()}; all tags are in canonical form, multipart tags are represented as lists, and two-level multipart tags as lists of lists), convert to displayed form (a string). See {get_tag_display_form()} for the meaning of `joiner`.]==] function export.get_tag_set_display_form(normalized_tag_set, lang, joiner) local parts = {} for _, tagspec in ipairs(normalized_tag_set) do local to_insert = get_tag_display_form(tagspec, lang, joiner) -- Maybe insert a space before inserting the display form of the tag. We insert a space if -- (a) we're not the first tag; and -- (b) the tag we're about to insert doesn't have the "no_space_on_left" property; and -- (c) the preceding tag doesn't have the "no_space_on_right" property. -- NOTE: We depend here on the fact that -- (1) all tags with either of the above properties set have the same display form as canonical form, and -- (2) all tags with either of the above properties set are single-character tags. -- The second property is an optimization to avoid looking up display forms resulting from multipart tags, -- which won't be found and which will trigger loading of [[Module:form of/data/2]]. If multichar punctuation is -- added in the future, it's ok to change the == 1 below to <= 2 or <= 3. -- -- If the first property above fails to hold in the future, we need to track the canonical form of each tag -- (including the previous one) as well as the display form. This would also avoid the need for the == 1 check. if #parts > 0 then local most_recent_tagobj = parts[#parts]:match("^.[\128-\191]*$") and lookup_tag(parts[#parts], lang) local to_insert_tagobj = to_insert:match("^.[\128-\191]*$") and lookup_tag(to_insert, lang) if ( (not most_recent_tagobj or not most_recent_tagobj.no_space_on_right) and (not to_insert_tagobj or not to_insert_tagobj.no_space_on_left) ) then insert(parts, " ") end end insert(parts, to_insert) end return concat(parts) end get_tag_set_display_form = export.get_tag_set_display_form --[==[ Split a tag set containing two-level multipart tags into one or more tag sets not containing such tags. Single-level multipart tags are left alone. (If we need to, a slight modification of the following code will also split single-level multipart tags.) This assumes that multipart tags are represented as lists and two-level multipart tags are represented as lists of lists, as is output by {normalize_tag_set()}. NOTE: We have to be careful to properly handle imbalanced two-level multipart tags such as `def:s//p` (or the reverse, `s//def:p`).]==] local function split_two_level_multipart_tag_set(tag_set) for i, tag in ipairs(tag_set) do if type(tag) == "table" then -- We saw a multipart tag. Check if any of the parts are two-level. local saw_two_level_tag = false for _, first_level_tag in ipairs(tag) do if type(first_level_tag) == "table" then saw_two_level_tag = true break end end if saw_two_level_tag then -- We found a two-level multipart tag. -- (1) Extract the preceding tags. local pre_tags = slice(tag_set, 1, i - 1) -- (2) Extract the following tags. local post_tags = slice(tag_set, i + 1) -- (3) Loop over each tag set alternant in the two-level multipart tag. -- For each alternant, form the tag set consisting of pre_tags + alternant + post_tags, -- and recursively split that tag set. local resulting_tag_sets = {} for _, first_level_tag_set in ipairs(tag) do local expanded_tag_set = {} extend(expanded_tag_set, pre_tags) -- The second level may have a string or a list. if type(first_level_tag_set) == "table" then extend(expanded_tag_set, first_level_tag_set) else insert(expanded_tag_set, first_level_tag_set) end extend(expanded_tag_set, post_tags) extend(resulting_tag_sets, split_two_level_multipart_tag_set(expanded_tag_set)) end return resulting_tag_sets end end end return {tag_set} end local function try_lang_specific_module(langcode, modules_tried, name, data) local lang_specific_module = form_of_lang_data_module_prefix .. langcode .. "/functions" local langdata = safe_require(lang_specific_module) if langdata then insert(modules_tried, lang_specific_module) if langdata.cat_functions then local fn = langdata.cat_functions[name] if fn then return fn(data), true end end end return nil, false end -- Call a named function, either from the lang-specific data in -- [[Module:form of/lang-specific/LANGCODE/functions]] or in [[Module:form of/functions]]. local function call_named_function(name, funtype, normalized_tag_set, lang, POS, pagename, lemmas) local data = { pagename = pagename or default_pagename or get_default_pagename(), lemmas = lemmas, tag_set = normalized_tag_set, lang = lang, POS = POS } local modules_tried = {} -- First try lang-specific. while lang do local retval, found_it = try_lang_specific_module(lang:getCode(), modules_tried, name, data) if found_it then return retval end -- If the language has a parent (i.e. a superordinate variety), try again with that. lang = lang:getParent() end -- Try lang-independent. insert(modules_tried, form_of_functions_module) local fn = (cat_functions or get_cat_functions())[name] if fn then return fn(data) end for i, modname in ipairs(modules_tried) do modules_tried[i] = "[[" .. modname .. "]]" end error(("No %s function named '%s' in %s"):format(funtype, name, list_to_text(modules_tried, nil, " or "))) end -- Given a tag from the current tag set (which may be a list in case of a multipart tag), -- and a tag from a categorization spec, check that the two match. -- (1) If both are strings, we just check for equality. -- (2) If the spec tag is a string and the tag set tag is a list (i.e. it originates from a -- multipart tag), we check that the spec tag is in the list. This is because we want to treat -- multipart tags in user-specified tag sets as if the user had specified multiple tag sets. -- For example, if the user said "1//3|s|pres|ind" and the categorization spec says {"has", "1"}, -- we want this to match, because "1//3|s|pres|ind" should be treated equivalently to two tag -- sets "1|s|pres|ind" and "3|s|pres|ind", and the former matches the categorization spec. -- (3) If the spec tag is a list (i.e. it originates from a multipart tag), we check that the -- tag set tag is also a list and is a superset of the spec tag. For example, if the categorization -- spec says {"has", "1//3"}, then the tag set tag must be a multipart tag that has both "1" and "3" -- in it. "1//3" works, as does "1//2//3". local function tag_set_tag_matches_spec_tag(tag_set_tag, spec_tag) if type(spec_tag) == "table" then if type(tag_set_tag) == "table" and is_subset_list(spec_tag, tag_set_tag) then return true end elseif type(tag_set_tag) == "table" then if contains(tag_set_tag, spec_tag) then return true end elseif tag_set_tag == spec_tag then return true end return false end -- Check that the current tag set matches the given spec tag. This means that any of the tags -- in the current tag set match, according to tag_set_tag_matches_spec_tag(); see above. If the -- current tag set contains only string tags (i.e. no multipart tags), and the spec tag is a -- string (i.e. not a multipart tag), this boils down to list containment, but it gets more -- complex when multipart tags are present. local function tag_set_matches_spec_tag(spec_tag, tag_set, lang) spec_tag = normalize_tag(spec_tag, lang) for _, tag_set_tag in ipairs(tag_set) do if tag_set_tag_matches_spec_tag(tag_set_tag, spec_tag) then return true end end return false end -- Check whether the given spec matches the current tag set. Two values are returned: -- (1) whether the spec matches the tag set; (2) the index of the category to add if -- the spec matches. local function check_condition(spec, tag_set, normalized_tag_set, lang, POS, pagename, lemmas) if type(spec) == "boolean" then return spec elseif type(spec) ~= "table" then error("Wrong type of condition " .. spec .. ": " .. type(spec)) end local predicate = spec[1] if predicate == "has" then return tag_set_matches_spec_tag(spec[2], tag_set, lang), 3 elseif predicate == "hasall" then for _, tag in ipairs(spec[2]) do if not tag_set_matches_spec_tag(tag, tag_set, lang) then return false, 3 end end return true, 3 elseif predicate == "hasany" then for _, tag in ipairs(spec[2]) do if tag_set_matches_spec_tag(tag, tag_set, lang) then return true, 3 end end return false, 3 elseif predicate == "tags=" then local normalized_spec_tag_sets = normalize_tag_set(spec[2], lang) if #normalized_spec_tag_sets > 1 then error("Internal error: No support for conjoined shortcuts in category/label specs in " .. "[[Module:form of/cats]] when processing spec tag set " .. concat(spec[2], "|")) end local normalized_spec_tag_set = normalized_spec_tag_sets[1] -- Check for and disallow two-level multipart tags in the specs. FIXME: Remove this when we remove -- support for two-level multipart tags. for _, tag in ipairs(normalized_spec_tag_set) do if type(tag) == "table" then for _, subtag in ipairs(tag) do if type(subtag) == "table" then error("Internal error: No support for two-level multipart tags in category/label specs" .. "[[Module:form of/cats]] when processing spec tag set " .. concat(spec[2], "|")) end end end end -- Allow tags to be in different orders, and multipart tags to be in different orders. To handle this, -- we first check that both tag set tags and spec tags have the same length. If so, we sort the -- multipart tags in the tag set tags and spec tags, and then check that all tags in the spec tags are -- in the tag set tags. if #tag_set ~= #normalized_spec_tag_set then return false, 3 end local tag_set_tags = deep_copy(tag_set) for i=1,#tag_set_tags do if type(tag_set_tags[i]) == "table" then sort(tag_set_tags[i]) end if type(normalized_spec_tag_set[i]) == "table" then sort(normalized_spec_tag_set[i]) end end for i=1,#tag_set_tags do if not contains(tag_set_tags, normalized_spec_tag_set[i]) then return false, 3 end end return true, 3 elseif predicate == "p=" then return POS == normalize_pos(spec[2]), 3 elseif predicate == "pany" then for _, specpos in ipairs(spec[2]) do if POS == normalize_pos(specpos) then return true, 3 end end return false, 3 elseif predicate == "pexists" then return POS ~= nil, 2 elseif predicate == "not" then local condval = check_condition(spec[2], tag_set, normalized_tag_set, lang, POS, pagename, lemmas) return not condval, 3 elseif predicate == "and" then local condval = check_condition(spec[2], tag_set, normalized_tag_set, lang, POS, pagename, lemmas) if condval then condval = check_condition(spec[3], tag_set, normalized_tag_set, lang, POS, pagename, lemmas) end return condval, 4 elseif predicate == "or" then local condval = check_condition(spec[2], tag_set, normalized_tag_set, lang, POS, pagename, lemmas) if not condval then condval = check_condition(spec[3], tag_set, normalized_tag_set, lang, POS, pagename, lemmas) end return condval, 4 elseif predicate == "call" then return call_named_function(spec[2], "condition", normalized_tag_set, lang, POS, pagename, lemmas), 3 else error("Unrecognized predicate: " .. predicate) end end -- Process a given spec. This checks any conditions in the spec against the -- tag set, and insert any resulting categories into `categories`. Return value -- is true if the outermost condition evaluated to true and a category was inserted -- (this is used in {"cond" ...} conditions, which stop when a subcondition evaluates -- to true). local function process_spec(spec, tag_set, normalized_tag_set, lang, POS, pagename, lemmas, categories, labels) if not spec then return false elseif type(spec) == "string" then -- A category. Substitute POS request with user-specified part of speech or default. spec = spec:gsub("<<p=(.-)>>", function(default) return POS or normalize_pos(default) end) insert(categories, lang:getFullName() .. " " .. spec) return true elseif type(spec) == "table" and spec.labels then -- A label spec. for _, label in ipairs(spec.labels) do insert_if_not(labels, label) end return true elseif type(spec) ~= "table" then error("Wrong type of specification " .. spec .. ": " .. type(spec)) end local predicate = spec[1] if predicate == "multi" then for _, sp in iterate_from(2, ipairs(spec)) do -- Iterate from 2. process_spec(sp, tag_set, normalized_tag_set, lang, POS, pagename, lemmas, categories, labels) end return true elseif predicate == "cond" then for _, sp in iterate_from(2, ipairs(spec)) do -- Iterate from 2. if process_spec(sp, tag_set, normalized_tag_set, lang, POS, pagename, lemmas, categories, labels) then return true end end return false elseif predicate == "call" then return process_spec( call_named_function(spec[2], "spec", normalized_tag_set, lang, POS, pagename, lemmas), tag_set, normalized_tag_set, lang, POS, pagename, lemmas, categories, labels ) else local condval, ifspec = check_condition(spec, tag_set, normalized_tag_set, lang, POS, pagename, lemmas) if condval then process_spec(spec[ifspec], tag_set, normalized_tag_set, lang, POS, pagename, lemmas, categories, labels) return true else process_spec(spec[ifspec + 1], tag_set, normalized_tag_set, lang, POS, pagename, lemmas, categories, labels) -- FIXME: Are we sure this is correct? return false end end end --[==[ Given a normalized tag set (i.e. as output by {normalize_tag_set()}; all tags are in canonical form, multipart tags are represented as lists, and two-level multipart tags as lists of lists), fetch the associated categories and labels. Return two values, a list of categories and a list of labels. `lang` is the language of term represented by the tag set, and `POS` is the user-provided part of speech (which may be {nil}).]==] function export.fetch_categories_and_labels(normalized_tag_set, lang, POS, pagename, lemmas) local categories, labels = {}, {} POS = normalize_pos(POS) -- First split any two-level multipart tags into multiple sets, to make our life easier. for _, tag_set in ipairs(split_two_level_multipart_tag_set(normalized_tag_set)) do local langcode = lang:getCode() local langspecs = (m_cats_data or get_m_cats_data())[langcode] if langspecs then for _, spec in ipairs(langspecs) do process_spec(spec, tag_set, normalized_tag_set, lang, POS, pagename, lemmas, categories, labels) end end local full_code = lang:getFullCode() if full_code ~= langcode then local langspecs = (m_cats_data or get_m_cats_data())[full_code] if langspecs then for _, spec in ipairs(langspecs) do process_spec(spec, tag_set, normalized_tag_set, lang, POS, pagename, lemmas, categories, labels) end end end if full_code ~= "und" then local langspecs = (m_cats_data or get_m_cats_data())["und"] if langspecs then for _, spec in ipairs(langspecs) do process_spec(spec, tag_set, normalized_tag_set, lang, POS, pagename, lemmas, categories, labels) end end end end return categories, labels end fetch_categories_and_labels = export.fetch_categories_and_labels local function format_labels(labels, data, notext) if labels and #labels > 0 then return show_labels{ labels = labels, lang = data.lang, sort = data.sort, nocat = data.nocat } .. (notext and (data.pretext or "") == "" and "" or " ") else return "" end end --[==[ Implementation of templates that display inflection tags, such as the general {{tl|inflection of}}, semi-specific variants such as {{tl|participle of}}, and specific variants such as {{tl|past participle of}}. `data` contains all the information controlling the display, with the following fields: * `.lang`: ('''''required''''') Language to use when looking up language-specific inflection tags, categories and labels, and for displaying categories and labels. * `.tags`: ('''''required''' unless `.tag_sets` is given'') List of non-canonicalized inflection tags. Multiple tag sets can be indicated by a {";"} as one of the tags, and tag-set properties may be attached to the last tag of a tag set. The tags themselves may come directly from the user (as in {{tl|inflection of}}); come partly from the user (as in {{tl|participle of}}, which adds the tag `part` to user-specified inflection tags); or be entirely specified by the template (as in {{tl|past participle of}}). * `.tag_sets`: ('''''required''' unless `.tags` is given'') List of non-canonicalized tag sets and associated per-tag-set properties. Each element of the list is an object of the form { {tags = {"TAG", "TAG", ...}, labels = {"LABEL", "LABEL", ...}}. If `.tag_sets` is specified, `.tags` should not be given and vice-versa. Specifying `.tag_sets` in place of tags allowed per-tag set labels to be specified; otherwise, there is no advantage. [[Module:pt-gl-inflections]] uses this functionality to supply labels like {"Brazil"} and {"Portugal"} associated with specific tag sets. * `.lemmas`: ('''''recommended''''') List of objects describing the lemma(s) of which the term in question is a non-lemma form. These are passed directly to {full_link()} in [[Module:links]]. Each object should have at minimum a `.lang` field containing the language of the lemma and a `.term` field containing the lemma itself. Each object is formatted using {full_link()} and then if there are more than one, they are joined using {serialCommaJoin()} in [[Module:table]]. Alternatively, `.lemmas` can be a string, which is displayed directly. If omitted entirely, no lemma links are shown and the connecting "of" is also omitted. * `.lemma_face`: ('''''recommended''''') "Face" to use when displaying the lemma objects. Usually should be set to {"term"}. * `.POS`: ('''''recommended''''') Categorizing part-of-speech tag. Comes from the {{para|p}} or {{para|POS}} argument of {{tl|inflection of}}. * `.pagename`: Page name of "current" page or nil to use the actual page title; for testing purposes. * `.conj`: Conjunction or separator to use when joining multiple lemma objects. Defaults to {"and"}. * `.enclitics`: List of enclitics to display after the lemmas, in parens. * `.enclitic_conj`: Conjunction or separator to use when joining multiple enclitics. Defaults to {"and"}. * `.no_format_categories`: If true, don't format the categories derived from the inflection tags; just return them. * `.sort`: Sort key for formatted categories. Ignored when `.no_format_categories` = {true}. * `.nocat`: Suppress computation of categories (even if `.no_format_categories` is not given). * `.notext`: Disable display of all tag text and `inflection of` text. (FIXME: Maybe not implemented correctly.) * `.capfirst`: Capitalize the first word displayed. * `.pretext`: Additional text to display before the inflection tags, but after any top-level labels. * `.posttext`: Additional text to display after the lemma links. * `.text_classes`: CSS classes used to wrap the tag text and lemma links. Default is {"form-of-definition use-with-mention"}. * `.lemma_classes`: Additional CSS classes used to wrap the lemma links. Default is {"form-of-definition-link"}. `.joiner`: Override the joiner (normally a slash) used to join multipart tags. You should normally not specify this. A typical call might look like this (for {{m+|es|amo}}): { local lang = require("Module:languages").getByCode("es") local lemma_obj = { lang = lang, term = "amar", } return m_form_of.tagged_inflections({ lang = lang, tags = {"1", "s", "pres", "ind"}, lemmas = {lemma_obj}, lemma_face = "term", POS = "verb" }) } Normally, one value is returned, the formatted text, which has appended to it the formatted categories derived from the tag-set-related categories generated by the specs in [Module:form of/cats]]. To suppress this, set `data.no_format_categories` = {true}, in which case two values are returned, the formatted text without any formatted categories appended and a list of the categories to be formatted. NOTE: There are two sets of categories that may be generated: (1) categories derived directly from the tag sets, as specified in [[Module:form of/cats]]; (2) categories derived from tag-set labels, either (a) set explicitly by the caller in `data.tag_sets`, (b) specified by the user using `<lb:...>` attached to the last tag in a tag set, or (c) specified in [[Module:form of/cats]]. The second type (label-related categories) are currently not returned in the second return value of {tagged_inflections()}, and are currently inserted into the output text even if `data.no_format_categories` is set to {true}; but they can be suppressed by setting `data.nocat` = {true} (which also suppresses the first type of categories, those derived directly from tag sets, even if `data.no_format_categories` is set to {true}).]==] function export.tagged_inflections(data) if not data.tags and not data.tag_sets then error("First argument must be a table of arguments, and `.tags` or `.tag_sets` must be specified") end if data.tags and data.tag_sets then error("Both `.tags` and `.tag_sets` cannot be specified") end local tag_sets = data.tag_sets if not tag_sets then tag_sets = split_tag_set(data.tags) for i, tag_set in ipairs(tag_sets) do tag_sets[i] = parse_tag_set_properties(tag_set) end end local inflections = {} local categories = {} for _, tag_set in ipairs(tag_sets) do local normalized_tag_sets = normalize_tag_set(tag_set.tags, data.lang, "do-track") for _, normalized_tag_set in ipairs(normalized_tag_sets) do local this_categories, this_labels = fetch_categories_and_labels(normalized_tag_set, data.lang, data.POS, data.pagename, type(data.lemmas) == "table" and data.lemmas or nil) if not data.nocat then extend(categories, this_categories) end local cur_infl = get_tag_set_display_form(normalized_tag_set, data.lang, data.joiner) if #cur_infl > 0 then if tag_set.labels then this_labels = append(tag_set.labels, this_labels) end insert(inflections, {infl_text = cur_infl, labels = this_labels}) end end end local overall_labels, need_per_tag_set_labels for _, inflection in ipairs(inflections) do if overall_labels == nil then overall_labels = inflection.labels elseif not deep_equals(overall_labels, inflection.labels) then need_per_tag_set_labels = true overall_labels = nil break end end if not need_per_tag_set_labels then for _, inflection in ipairs(inflections) do inflection.labels = nil end end local format_data = shallow_copy(data) local of_text = data.lemmas and " of" or "" local formatted_text if #inflections == 1 then if need_per_tag_set_labels then error("Internal error: need_per_tag_set_labels should not be set with one inflection") end format_data.text = format_labels(overall_labels, data, data.notext) .. (data.pretext or "") .. (data.notext and "" or ((data.capfirst and ucfirst(inflections[1].infl_text) or inflections[1].infl_text) .. of_text)) formatted_text = format_form_of(format_data) else format_data.text = format_labels(overall_labels, data, data.notext) .. (data.pretext or "") .. (data.notext and "" or ((data.capfirst and "Inflection" or "inflection") .. of_text)) format_data.posttext = (data.posttext or "") .. ":" local link = format_form_of(format_data) local text_classes = data.text_classes or "form-of-definition use-with-mention" for i, inflection in ipairs(inflections) do inflections[i] = "\n## " .. format_labels(inflection.labels, data, false) .. "<span class='" .. text_classes .. "'>" .. inflection.infl_text .. "</span>" end formatted_text = link .. concat(inflections) end if not data.no_format_categories then if #categories > 0 then formatted_text = formatted_text .. format_categories(categories, data.lang, data.sort, nil, export.force_cat) end return formatted_text end return formatted_text, categories end tagged_inflections = export.tagged_inflections function export.dump_form_of_data(frame) local data = { require(form_of_data1_module), require(form_of_data2_module) } return require(json_module).toJSON(data) end export.form_of_cats_module = form_of_cats_module export.form_of_data1_module = form_of_data1_module export.form_of_data2_module = form_of_data2_module export.form_of_functions_module = form_of_functions_module export.form_of_lang_data_module_prefix = form_of_lang_data_module_prefix export.form_of_pos_module = form_of_pos_module return export mq1bh5eefnyx5wdiycbk2y5wrkf6lv4 ကဏ္ဍ:မန်းငဝ်းတဲႏဖုံႏ 14 3785 12088 8788 2025-06-24T02:45:49Z 咽頭べさ 11 [[ကဏ္ဍ:အဘိဓာန်ႏကို တပါသော့ꩻတဝ်းဒါႏ မန်းဝေါဟာရဖုံႏ]] စာမျက်နှာကို [[ကဏ္ဍ:မန်းငဝ်းတဲႏဖုံႏ]] သို့ 咽頭べさက ရွှေ့ခဲ့သည် 8788 wikitext text/x-wiki [[ကဏ္ဍ:မန်းဘာႏသာႏငဝ်းငွါ]] htmm46ik9yji7ly27ketlu9lmo2n8mc ကဏ္ဍ:ပိဉ်တိစ်နာမ်ႏဖုံႏ 14 3914 11942 9079 2025-06-23T12:49:23Z 咽頭べさ 11 [[ကဏ္ဍ:ပိဉ်တိစ် နာမ်ႏ]] စာမျက်နှာကို [[ကဏ္ဍ:ပိဉ်တိစ်နာမ်ႏဖုံႏ]] သို့ 咽頭べさက ရွှေ့ခဲ့သည် 9079 wikitext text/x-wiki [[ကဏ္ဍ:ပိဉ်တိစ်ဘာႏသာႏငဝ်းငွါ]] 5pdhz0oxp5yjemh26cbr1omoedykwac တမ်းပလေက်:fr-noun 10 3916 11968 9125 2025-06-23T13:54:07Z 咽頭べさ 11 11968 wikitext text/x-wiki {{#invoke:fr-headword|show|နာမ်ႏ}}<!-- --><noinclude>{{documentation}}</noinclude> gdf8wkkxt3f96slahw6pk57pio4ubu9 မော်ဂျူး:fr-headword 828 3917 11965 9088 2025-06-23T13:47:52Z 咽頭べさ 11 11965 Scribunto text/plain local export = {} local pos_functions = {} local concat = table.concat local insert = table.insert local remove = table.remove local sort = table.sort local lang = require("Module:languages").getByCode("fr") local langname = lang:getCanonicalName() local boolean = {type = "boolean"} local list = {list = true} local list_allow_holes = {list = true, allow_holes = true} local suffix_categories = { ["နာမဝိသေသန"] = true, ["ကြိယာႏဝိသေသန"] = true, ["နာမ်ႏ"] = true, ["ကြိယာႏ"] = true, ["ဝိဘတ်ငဝ်းဗူႏ"] = true, } local prepositions = { "à ", "aux? ", "d[eu] ", "d['’]", "des ", "en ", "sous ", "sur ", "avec ", "pour ", "par ", "dans ", "contre ", "sans ", "comme ", "jusqu['’]", -- We could list others but you get diminishing returns } local function track(page) require("Module:debug").track("fr-headword/" .. page) return true end local function glossary_link(entry, text) text = text or entry return "[[Appendix:Glossary#" .. entry .. "|" .. text .. "]]" end -- mw.title.new() returns nil if there are weird chars in the pagename. local function exists(pagename) local title = mw.title.new(pagename) return title and title.exists end local function check_exists(forms, cats, pos) for _, form in ipairs(forms) do if type(form) == "table" then form = form.term end if not exists(form) then -- insert(cats, langname .. " " .. pos .. " with red links in their headword lines") return false end end return true end local function make_plural(form, special) local retval = require("Module:romance utilities").handle_multiword(form, special, make_plural, prepositions) if retval then if #retval > 1 then error("Internal error: Got multiple plurals from handle_multiword(): " .. concat(retval)) end return retval[1] end if form:match("[sxz]$") then return form elseif form:match("au$") then return form .. "x" elseif form:match("al$") then return form:gsub("al$", "aux") end return form .. "s" end local function make_feminine(form, special) local retval = require("Module:romance utilities").handle_multiword(form, special, make_feminine, prepositions) if retval then if #retval > 1 then error("Internal error: Got multiple feminines from handle_multiword(): " .. concat(retval)) end return retval[1] end if form:match("e$") then return form elseif form:match("en$") then return form .. "ne" elseif form:match("er$") then return form:gsub("er$", "ère") elseif form:match("el$") then return form .. "le" elseif form:match("et$") then return form .. "te" elseif form:match("on$") then return form .. "ne" elseif form:match("ieur$") then return form .. "e" elseif form:match("teur$") then return form:gsub("teur$", "trice") elseif form:match("eu[rx]$") then return form:gsub("eu[rx]$", "euse") elseif form:match("if$") then return form:gsub("if$", "ive") elseif form:match("c$") then return form:gsub("c$", "que") elseif form:match("eau$") then return form:gsub("eau$", "elle") else return form .. "e" end end -- For bot use function export.make_feminine(frame) local masc = frame.args[1] or error("Masculine in 1= is required.") local special = frame.args[2] return make_feminine(masc, special) end local function add_suffix(list, suffix, special) local newlist = {} for _, form in ipairs(list) do if suffix == "s" then form = make_plural(form, special) elseif suffix == "e" then form = make_feminine(form, special) else error("Internal error: Unrecognized suffix '" .. suffix .. "'") end insert(newlist, form) end return newlist end local no_split_apostrophe_words = { ["c'est"] = true, ["quelqu'un"] = true, ["aujourd'hui"] = true, } -- The main entry point. -- This is the only function that can be invoked from a template. function export.show(frame) local poscat = frame.args[1] or error("Part of speech has not been specified. Please pass parameter 1 to the module invocation.") local params = { ["head"] = list, ["splithyph"] = boolean, ["nolinkhead"] = boolean, ["pagename"] = true, -- for testing } if pos_functions[poscat] then for key, val in pairs(pos_functions[poscat].params) do params[key] = val end end local parargs = frame:getParent().args local args = require("Module:parameters").process(parargs, params) local subpage = args.pagename or mw.loadData("Module:headword/data").pagename local heads = args["head"] if pos_functions[poscat] and pos_functions[poscat].param1_is_head and args[1] then insert(heads, 1, args[1]) end if args.nolinkhead then if #heads == 0 then heads = {subpage} end else local auto_linked_head = require("Module:romance utilities").add_links_to_multiword_term(subpage, args.splithyph, no_split_apostrophe_words) if #heads == 0 then heads = {auto_linked_head} else for _, head in ipairs(heads) do if head == auto_linked_head then track("redundant-head") end end end end local data = { lang = lang, pos_category = poscat, categories = {}, heads = heads, no_redundant_head_cat = #args.head == 0, genders = {}, inflections = {}, categories = {}, pagename = args.pagename, subpage = subpage } if subpage:find("^%-") and suffix_categories[poscat] then data.pos_category = "suffixes" local singular_poscat = poscat:gsub("s$", "") -- insert(data.categories, langname .. " " .. singular_poscat .. "-forming suffixes") end if pos_functions[poscat] then pos_functions[poscat].func(args, data) end return require("Module:headword").full_headword(data) end local allowed_genders = { ["m"] = true, ["f"] = true, ["mf"] = true, ["mfbysense"] = true, ["mfequiv"] = true, ["gneut"] = true, ["m-p"] = true, ["f-p"] = true, ["mf-p"] = true, ["mfbysense-p"] = true, ["mfequiv-p"] = true, ["gneut-p"] = true, } local additional_allowed_pronoun_genders = { ["m-s"] = true, ["f-s"] = true, ["mf-s"] = true, ["p"] = true, -- mf-p doesn't make sense for e.g. [[iels]]/[[ielles]] ["n"] = true, -- e.g. [[ceci]]/[[cela]] } local function get_noun_pos(pos) return { params = { [1] = true, ["g"] = list, [2] = list, ["pqual"] = list_allow_holes, ["f"] = list, ["fqual"] = list_allow_holes, ["m"] = list, ["mqual"] = list_allow_holes, ["dim"] = list, ["dimqual"] = list_allow_holes, }, func = function(args, data) local lemma = data.subpage local is_proper = pos == "နာမ်ႏဆဲင်ႏတဖြာꩻ" if pos == "cardinal nouns" then pos = "ဂဏန်ꩻ" data.pos_category = "ဂဏန်ꩻ" -- insert(data.categories, 1, langname .. " cardinal numbers") end -- Gather genders insert(data.genders, args[1]) for _, g in ipairs(args.g) do insert(data.genders, g) end local function process_inflection(label, infls, quals) infls.label = label for i, infl in ipairs(infls) do if quals[i] then infls[i] = {term = infl, q = {quals[i]}} end end end -- Gather all the plural parameters from the numbered parameters. local plurals = args[2] -- Add categories for genders if #data.genders == 0 then insert(data.genders, "?") end local mode = nil for _, g in ipairs(data.genders) do if g == "m-p" or g == "f-p" or g =="mf-p" or g == "mfbysense-p" then mode = "p" end if g == "?" and (is_proper or mw.title.getCurrentTitle().nsText == "တမ်းပလေက်") then -- allow unknown gender in template example and proper nouns, -- since there are currently so many proper nouns with -- unspecified gender elseif g and g ~= "" and not allowed_genders[g] then error("Unrecognized " .. langname .. " gender: " .. g) end end -- Decide how to show the plurals mode = mode or plurals[1] local function insert_countable_cat() -- insert(data.categories, langname .. " countable " .. pos) end local function insert_uncountable_cat() -- Most proper nouns are uncountable, so don't create a category for them if not is_proper then -- insert(data.categories, langname .. " uncountable " .. pos) end end if mode == "!" then -- Plural is not attested insert(data.inflections, {label = "plural not attested"}) -- insert(data.categories, langname .. " " .. pos .. " with unattested plurals") elseif mode == "p" then -- Plural-only noun, doesn't have a plural insert(data.inflections, {label = "plural only"}) -- insert(data.categories, langname .. " pluralia tantum") else if mode == "?" then -- Plural is unknown remove(plurals, 1) -- Remove the mode parameter elseif mode == "-" then -- Uncountable noun; may occasionally have a plural remove(plurals, 1) -- Remove the mode parameter insert_uncountable_cat() -- If plural forms were given explicitly, then show "usually" if #plurals > 0 then track("count-uncount") insert(data.inflections, {label = "usually " .. glossary_link("uncountable")}) insert_countable_cat() else insert(data.inflections, {label = glossary_link("uncountable")}) end elseif mode == "~" then -- Mixed countable/uncountable noun, always has a plural remove(plurals, 1) -- Remove the mode parameter insert(data.inflections, {label = glossary_link("countable") .. " and " .. glossary_link("uncountable")}) insert_uncountable_cat() insert_countable_cat() -- If no plural was given, add a default one now if #plurals == 0 then plurals = {"+"} end elseif is_proper then -- Default proper noun; uncountable unless plural(s) specified if #plurals > 0 then insert_countable_cat() else insert_uncountable_cat() end else -- The default, always has a plural insert_countable_cat() -- If no plural was given, add a default one now if #plurals == 0 then plurals = {"+"} end end -- Gather plurals, handling requests for default plurals for i, pl in ipairs(plurals) do if pl == "#" then pl = lemma elseif pl == "s" or pl == "x" then pl = lemma .. pl elseif pl == "+" then pl = make_plural(lemma) elseif pl:find("^%+") then pl = require("Module:romance utilities").get_special_indicator(pl) pl = make_plural(lemma, pl) end if not exists(pl) then -- insert(data.categories, langname .. " " .. pos .. " with red links in their headword lines") end plurals[i] = pl end process_inflection("plural", plurals, args["pqual"]) plurals.accel = {form = "p"} plurals.request = true -- Add the plural forms; do this in some cases even if no plurals -- specified so we get a "please provide plural" message. if mode ~= "-" and (not is_proper or mode) or #plurals > 0 then insert(data.inflections, plurals) end end local function insert_inflection(label, arg, process_arg) local forms = args[arg] if process_arg then for i, form in ipairs(forms) do forms[i] = process_arg(form) end end process_inflection(label, forms, args[arg .. "qual"]) if #forms > 0 then insert(data.inflections, forms) check_exists(forms, data.categories, pos) end return forms end -- Add the feminine forms local fems = insert_inflection("feminine", "f", function(form) -- Allow '#', 'e', '+', '+first', etc. for feminine. if form == "#" then return lemma elseif form == "e" then return lemma .. form elseif form == "+" then return make_feminine(lemma) elseif form:find("^%+") then form = require("Module:romance utilities").get_special_indicator(form) return make_feminine(lemma, form) else return form end end) fems.accel = {form = "f"} -- Add the masculine forms insert_inflection("masculine", "m") -- Add the diminutives local dims = insert_inflection("diminutive", "dim") dims.accel = {form = "diminutive"} end } end for _, noun_pos in ipairs { "နာမ်ႏ", "နာမ်ႏဆဲင်ႏတဖြာꩻ", "cardinal nouns" } do pos_functions[noun_pos] = get_noun_pos(noun_pos) end local function get_pronoun_pos() return { params = { ["head"] = list, [1] = {alias_of = "g", list = false}, ["g"] = list, ["f"] = list, ["fqual"] = list_allow_holes, ["m"] = list, ["mqual"] = list_allow_holes, ["mv"] = list, ["mvqual"] = list_allow_holes, ["fp"] = list, ["fpqual"] = list_allow_holes, ["mp"] = list, ["mpqual"] = list_allow_holes, ["p"] = list, ["pqual"] = list_allow_holes, ["type"] = list, }, func = function(args, data) -- Gather genders data.genders = args.g local function process_inflection(label, infls, quals) infls.label = label for i, infl in ipairs(infls) do if quals[i] then infls[i] = {term = infl, q = {quals[i]}} end end end -- Validate/canonicalize genders for _, g in ipairs(data.genders) do if g == "?" and mw.title.getCurrentTitle().nsText == "တမ်းပလေက်" then -- allow unknown gender in template example elseif g == "?" then -- FIXME, remove this branch once we’ve added the required genders track("missing-pron-gender") elseif g and not allowed_genders[g] and not additional_allowed_pronoun_genders[g] then error("Unrecognized " .. langname .. " gender: " .. g) end end -- Gather all inflections. process_inflection("masculine", args["m"], args["mqual"]) process_inflection("masculine singular before vowel", args["mv"], args["mvqual"]) process_inflection("feminine", args["f"], args["fqual"]) process_inflection("masculine plural", args["mp"], args["mpqual"]) process_inflection("feminine plural", args["fp"], args["fpqual"]) process_inflection("plural", args["p"], args["pqual"]) -- Add the inflections if #args["m"] > 0 then insert(data.inflections, args["m"]) end if #args["f"] > 0 then insert(data.inflections, args["f"]) end if #args["mp"] > 0 then insert(data.inflections, args["mp"]) end if #args["fp"] > 0 then insert(data.inflections, args["fp"]) end if #args["p"] > 0 then insert(data.inflections, args["p"]) end -- Categorize by "type" local pos = "နာမ်ႏတင်" for _, ty in ipairs(args.type) do local category if ty == "indefinite" then category = "indefinite" elseif ty == "interrogative" then category = "interrogative" elseif ty == "personal" then category = "personal" elseif ty == "possessive" then category = "possessive" elseif ty == "reflexive" then category = "reflexive" elseif ty == "relative" then category = "relative" end if category then if type(category) == "table" then for _, cat in ipairs(category) do insert(data.categories, langname .. " " .. cat .. " " .. pos) end else insert(data.categories, langname .. " " .. category .. " " .. pos) end end end end } end pos_functions["နာမ်ႏတင်"] = get_pronoun_pos(true) pos_functions["determiners"] = get_pronoun_pos(true) local function get_misc_pos() return { param1_is_head = true, params = { [1] = true, }, func = function(args, data) end } end pos_functions["ကြိယာႏဝိသေသန"] = get_misc_pos() pos_functions["ဝိဘတ်"] = get_misc_pos() pos_functions["ငဝ်းစုဗူႏ"] = get_misc_pos() pos_functions["prepositional phrases"] = get_misc_pos() pos_functions["proverbs"] = get_misc_pos() pos_functions["punctuation marks"] = get_misc_pos() pos_functions["diacritical marks"] = get_misc_pos() pos_functions["အာမေဍိတ် "] = get_misc_pos() pos_functions["prefixes"] = get_misc_pos() pos_functions["abbreviations"] = get_misc_pos() local function do_adjective(pos) return { params = { [1] = true, ["inv"] = boolean, ["sp"] = true, -- special indicator: "first", "first-last", etc. ["onlyg"] = true, ["m"] = list, ["mqual"] = list, ["mv"] = list, ["mvqual"] = list, ["f"] = list, ["fqual"] = list, ["mp"] = list, ["mpqual"] = list, ["fp"] = list, ["fpqual"] = list, ["p"] = list, ["pqual"] = list, ["current"] = list, ["comp"] = list, ["compqual"] = list, ["sup"] = list, ["supqual"] = list, ["intr"] = boolean, }, func = function(args, data) local lemma = data.subpage if pos == "cardinal adjectives" then pos = "ဂဏန်ꩻ" data.pos_category = "ဂဏန်ꩻ" -- insert(data.categories, 1, langname .. " cardinal numbers") end if pos ~= "numerals" then if args.onlyg == "p" or args.onlyg == "m-p" or args.onlyg == "f-p" then -- insert(data.categories, langname .. " pluralia tantum") end if args.onlyg == "s" or args.onlyg == "f-s" or args.onlyg == "f-s" then -- insert(data.categories, langname .. " singularia tantum") end if args.onlyg then -- insert(data.categories, langname .. " defective " .. pos) end end local function process_inflection(label, arg, accel, get_default, explicit_default_only) local default_val local function default() if default_val == nil then if get_default then default_val = get_default() else default_val = false end end return default_val end local orig_infls = #args[arg] > 0 and args[arg] or explicit_default_only and {} or default() or {} local infls = {} if #orig_infls > 0 then infls.label = label infls.accel = accel and {form = accel} or nil local quals = args[arg .. "qual"] for i, infl in ipairs(orig_infls) do if infl == "#" then infl = lemma elseif infl == "e" or infl == "s" or infl == "x" then infl = lemma .. infl elseif infl == "+" then infl = default() if not infl then error("Can't use '+' with " .. arg .. "=; no default available") end end if type(infl) == "table" then for _, inf in ipairs(infl) do if quals[i] then insert(infls, {term = inf, q = {quals[i]}}) else insert(infls, inf) end end elseif quals[i] then insert(infls, {term = infl, q = {quals[i]}}) else insert(infls, infl) end end insert(data.inflections, infls) end return infls end if args.sp and not require("Module:romance utilities").allowed_special_indicators[args.sp] then local indicators = {} for indic, _ in pairs(require("Module:romance utilities").allowed_special_indicators) do insert(indicators, "'" .. indic .. "'") end sort(indicators) error("Special inflection indicator beginning can only be " .. mw.text.listToText(indicators) .. ": " .. args.sp) end local function get_current() return #args.current > 0 and args.current or {data.subpage} end if args.onlyg == "p" then insert(data.inflections, {label = "plural only"}) if args[1] ~= "mf" then -- Handle feminine plurals process_inflection("feminine plural", "fp", "f|p") end elseif args.onlyg == "s" then insert(data.inflections, {label = "singular only"}) if not (args[1] == "mf" or #args.f == 0 and data.subpage:match("e$")) then -- Handle feminines process_inflection("feminine singular", "f", "f", function() return add_suffix(get_current(), "e", args.sp) end) end elseif args.onlyg == "m" then insert(data.genders, "m") insert(data.inflections, {label = "masculine only"}) -- Handle masculine plurals process_inflection("masculine plural", "mp", "m|p", function() return add_suffix(get_current(), "s", args.sp) end) elseif args.onlyg == "f" then insert(data.genders, "f") insert(data.inflections, {label = "feminine only"}) -- Handle feminine plurals process_inflection("feminine plural", "fp", "f|p", function() return add_suffix(get_current(), "s", args.sp) end) elseif args.onlyg then insert(data.genders, args.onlyg) insert(data.inflections, {label = "defective"}) else -- Gather genders local gender = args[1] -- Default to mf if base form ends in -e and no feminine, -- feminine plural or gender specified if not gender and #args.f == 0 and #args.fp == 0 and data.subpage:match("e$") and not data.subpage:find(" ", nil, true) then gender = "mf" end if #args.current > 0 then track("adj-current") end if args.intr then insert(data.inflections, {label = glossary_link("intransitive")}) insert(data.inflections, {label = "hence " .. glossary_link("invariable")}) args.inv = true elseif args.inv then insert(data.inflections, {label = glossary_link("invariable")}) end -- Handle plurals of mf adjectives if not args.inv and gender == "mf" then process_inflection("plural", "p", "p", function() return add_suffix(get_current(), "s", args.sp) end) end if not args.inv and gender ~= "mf" then -- Handle masculine form if not same as lemma; e.g. [[sûr de soi]] with m=+, m2=sûr de lui process_inflection("masculine singular", "m", "m|s", function() return {data.subpage} end, "explicit default only") -- Handle case of special masculine singular before vowel process_inflection("masculine singular before vowel", "mv", "m|s") -- Handle feminines local feminines = process_inflection("feminine", "f", "f|s", function() return add_suffix(get_current(), "e", args.sp) end) -- Handle masculine plurals process_inflection("masculine plural", "mp", "m|p", function() return add_suffix(get_current(), "s", args.sp) end) -- Handle feminine plurals process_inflection("feminine plural", "fp", "f|p", function() return add_suffix(feminines, "s", args.sp) end) end end -- Handle comparatives process_inflection("comparative", "comp", "comparative") -- Handle superlatives process_inflection("superlative", "sup", "superlative") -- Check existence for _, infls in pairs(data.inflections) do if not check_exists(infls, data.categories, pos) then break end end end } end pos_functions["နာမဝိသေသန"] = do_adjective("နာမဝိသေသန") pos_functions["past participles"] = do_adjective("participles") pos_functions["cardinal adjectives"] = do_adjective("cardinal adjectives") pos_functions["ကြိယာႏ"] = { param1_is_head = true, params = { [1] = true, ["type"] = list, }, func = function(args, data) local pos = "ကြိယာႏ" for _, ty in ipairs(args.type) do local category, label if ty == "auxiliary" then category = "auxiliary" elseif ty == "defective" then category = "defective" label = glossary_link("defective") elseif ty == "impersonal" then category = "impersonal" label = glossary_link("impersonal") elseif ty == "modal" then category = "modal" elseif ty == "reflexive" then category = "reflexive" elseif ty == "transitive" then label = glossary_link("transitive") category = "transitive" elseif ty == "intransitive" then label = glossary_link("intransitive") category = "intransitive" elseif ty == "ambitransitive" or ty == "ambi" then category = {"transitive", "intransitive"} label = glossary_link("transitive") .. " and " .. glossary_link("intransitive") end if category then if type(category) == "table" then for _, cat in ipairs(category) do insert(data.categories, langname .. " " .. cat .. " " .. pos) end else insert(data.categories, langname .. " " .. category .. " " .. pos) end end if label then insert(data.inflections, {label = label}) end end end } pos_functions["cardinal invariable"] = { params = {}, func = function(args, data) data.pos_category = "ဂဏန်ꩻ" -- insert(data.categories, langname .. " cardinal numbers") -- insert(data.categories, langname .. " indeclinable numerals") insert(data.inflections, {label = glossary_link("invariable")}) end } return export 12zvvz60tyt0bwf654ai9ep3bx8f6xh မော်ဂျူး:romance utilities 828 3918 11963 9089 2025-06-23T13:28:27Z 咽頭べさ 11 11963 Scribunto text/plain local export = {} local languages_module = "Module:languages" local parse_utilities_module = "Module:parse utilities" local string_pattern_escape_module = "Module:string/patternEscape" local string_replacement_escape_module = "Module:string/replacementEscape" local string_utilities_module = "Module:string utilities" local concat = table.concat local insert = table.insert local ipairs = ipairs local pairs = pairs local require = require local sort = table.sort local type = type local function escape_wikicode(...) escape_wikicode = require(parse_utilities_module).escape_wikicode return escape_wikicode(...) end local function get_lang(...) get_lang = require(languages_module).getByCode return get_lang(...) end local function pattern_escape(...) pattern_escape = require(string_pattern_escape_module) return pattern_escape(...) end local function replacement_escape(...) replacement_escape = require(string_replacement_escape_module) return replacement_escape(...) end local function split(...) split = require(string_utilities_module).split return split(...) end local function ugsub(...) ugsub = require(string_utilities_module).gsub return ugsub(...) end local function umatch(...) umatch = require(string_utilities_module).match return umatch(...) end export.allowed_special_indicators = { ["first"] = true, ["first-second"] = true, ["first-last"] = true, ["second"] = true, ["last"] = true, ["each"] = true, ["+"] = true, -- requests the default behavior with preposition handling } --[==[ Check for special indicators (values such as {"+first"} or {"+first-last"} that are used in a `pl`, `f`, etc. argument and indicate how to inflect a multiword term). If `form` is such an indicator, the return value is `form` minus the initial `+` sign; otherwise, if form begins with a `+` sign, an error is thrown; otherwise the return value is nil. ]==] function export.get_special_indicator(form) if form:find("^%+") then form = form:gsub("^%+", "") if not export.allowed_special_indicators[form] then local indicators = {} for indic, _ in pairs(export.allowed_special_indicators) do insert(indicators, "+" .. indic) end sort(indicators) error("Special inflection indicator beginning with '+' can only be " .. mw.text.listToText(indicators) .. ": +" .. form) end return form end return nil end local function add_endings(bases, endings) local retval = {} if type(bases) ~= "table" then bases = {bases} end if type(endings) ~= "table" then endings = {endings} end for _, base in ipairs(bases) do for _, ending in ipairs(endings) do insert(retval, base .. ending) end end return retval end --[==[ Inflect a possibly multiword or hyphenated term `form` using the function `inflect`, which is a function of one argument that is called on a single word to inflect and should return either the inflected word or a list of inflected words. `special` indicates how to inflect the multiword term and should be e.g. {"first"| to inflect only the first word, {"first-last"} to inflect the first and last words, {"each"} to inflect each word, etc. See `allowed_special_indicators` above for the possibilities. If `special` is `+`, or is omitted and the term is multiword (i.e. containing a space character), the function checks for multiword or hyphenated terms containing the prepositions in `prepositions`, e.g. Italian [[senso di marcia]] or [[medaglia d'oro]] or Portuguese [[tartaruga-do-mar]]. If such a term is found, only the first word is inflected. Otherwise, the default is {"first-last"}. `prepositions` is a list of regular expressions matching prepositions. The regular expressions will automatically have the separator character (space or hyphen) added to the left side but not the right side, so they should contain a space character (which will automatically be converted to the appropriate separator) on the right side unless the preposition is joined on the right side with an apostrophe. Examples of preposition regular expressions for Italian are {"di "}, {"sull'"} and {"d?all[oae] "} (which matches {"dallo "}, {"dalle "}, {"alla "}, etc.). The return value is always either a list of inflected multiword or hyphenated terms, or nil if `special` is omitted and `form` is not multiword. (If `special` is specified and `form` is not multiword or hyphenated, an error results.) ]==] function export.handle_multiword(form, special, inflect, prepositions, sep) sep = sep or form:find(" ") and " " or "%-" local raw_sep = sep == " " and " " or "-" -- Used to add regex version of separator in the replacement portion of ugsub() or :gsub() local sep_replacement = sep == " " and " " or "%%-" -- Given a Lua pattern, replace space with the appropriate separator. local function hack_re(re) if sep == " " then return re end return (re:gsub(" ", sep_replacement)) end if special == "first" then local first, rest = form:match(hack_re("^(.-)( .*)$")) if not first then error("Special indicator 'first' can only be used with a multiword term: " .. form) end return add_endings(inflect(first), rest) elseif special == "second" then local first, second, rest = form:match(hack_re("^([^ ]+ )([^ ]+)( .*)$")) if not first then error("Special indicator 'second' can only be used with a term with three or more words: " .. form) end return add_endings(add_endings({first}, inflect(second)), rest) elseif special == "first-second" then local first, space, second, rest = form:match(hack_re("^([^ ]+)( )([^ ]+)( .*)$")) if not first then error("Special indicator 'first-second' can only be used with a term with three or more words: " .. form) end return add_endings(add_endings(add_endings(inflect(first), space), inflect(second)), rest) elseif special == "each" then local terms = split(form, sep) if #terms < 2 then error("Special indicator 'each' can only be used with a multiword term: " .. form) end for i, term in ipairs(terms) do terms[i] = inflect(term) if i > 1 then terms[i] = add_endings(raw_sep, terms[i]) end end local result = "" for _, term in ipairs(terms) do result = add_endings(result, term) end return result elseif special == "first-last" then local first, middle, last = form:match(hack_re("^(.-)( .* )(.-)$")) if not first then first, middle, last = form:match(hack_re("^(.-)( )(.*)$")) end if not first then error("Special indicator 'first-last' can only be used with a multiword term: " .. form) end return add_endings(add_endings(inflect(first), middle), inflect(last)) elseif special == "last" then local rest, last = form:match(hack_re("^(.* )(.-)$")) if not rest then error("Special indicator 'last' can only be used with a multiword term: " .. form) end return add_endings(rest, inflect(last)) elseif special and special ~= "+" then error("Unrecognized special=" .. special) end -- Only do default behavior if special indicator '+' explicitly given or separator is space; otherwise we will -- break existing behavior with hyphenated words. if (special == "+" or sep == " ") and form:find(sep) then -- check for prepositions in the middle of the word; do it this way so we can handle -- more than one word before the preposition (and usually inflect each word) for _, prep in ipairs(prepositions) do local first, space_prep_rest = umatch(form, hack_re("^(.-)( " .. prep .. ".*)$")) if first then return add_endings(inflect(first), space_prep_rest) end end -- multiword or hyphenated expressions default to first-last; we need to pass in the separator to avoid -- problems with multiword terms containing hyphens in the individual words return export.handle_multiword(form, "first-last", inflect, prepositions, sep) end return nil end -- Auto-add links to a word that should not have spaces but may have hyphens and/or apostrophes. We split off final -- punctuation, then split on hyphens if `splithyph` is given, and also split on apostrophes. We only split on hyphens -- and apostrophes if they are in the middle of the word, not at the beginning of end (hyphens at the beginning or end -- indicate suffixes or prefixes, respectively, and apostrophes at the beginning or end are also possible, as in -- Italian [['ndrangheta]] or [[po']]). The apostrophe is included in the link to its left (so we auto-split French -- [[l'eau]] as [[l']][[eau]]). See `add_links_to_multiword_term()` for the explanation of `no_split_apostrophe_words` -- and `include_hyphen_prefixes`. local function add_single_word_links(space_word, splithyph, no_split_apostrophe_words, include_hyphen_prefixes) local space_word_no_punct, punct = space_word:match("^(.*)([,;:?!])$") space_word_no_punct = space_word_no_punct or space_word punct = punct or "" local words -- don't split prefixes and suffixes if not splithyph or space_word_no_punct:find("^%-") or space_word_no_punct:find("%-$") then words = {space_word_no_punct} else words = split(space_word_no_punct, "%-") end local linked_words = {} for j, word in ipairs(words) do if j < #words and include_hyphen_prefixes and include_hyphen_prefixes[word] then word = "[[" .. word .. "-]]" else -- Don't split on apostrophes if the word is in `no_split_apostrophe_words` or begins or ends with an apostrophe -- (e.g. [['ndrangheta]] or [[po']]). Handle multiple apostrophes correctly, e.g. [[l'altr'ieri]]. if (not no_split_apostrophe_words or not no_split_apostrophe_words[word]) and word:find("'") and not word:find("^'") and not word:find("'$") then local apostrophe_parts = split(word, "'") for i, apostrophe_part in ipairs(apostrophe_parts) do if i == #apostrophe_parts then apostrophe_parts[i] = "[[" .. apostrophe_part .. "]]" else apostrophe_parts[i] = "[[" .. apostrophe_part .. "']]" end end word = concat(apostrophe_parts) else word = "[[" .. word .. "]]" end if j < #words then word = word .. "-" end end insert(linked_words, word) end return concat(linked_words) .. punct end --[==[ Auto-add links to a multiword term. Links are not added to single-word terms. We split on spaces, and also on hyphens if `splithyph` is given or the word has no spaces. In addition, we split on apostrophes, including the apostrophe in the link to its left (so we auto-split {"de l'eau"} {"[[de]] [[l']][[eau]]"}). We don't always split on hyphens because of cases like {"boire du petit-lait"} where {"petit-lait"} should be linked as a whole, but provide the option to do it for cases like {"croyez-le ou non"}. If there's no space, however, then it makes sense to split on hyphens by default (e.g. for {"avant-avant-hier"}). Cases where only some of the hyphens should be split can always be handled by explicitly specifying the head (e.g. {"Nord-Pas-de-Calais"} given as `head=[[Nord]]-[[Pas-de-Calais]]`). `no_split_apostrophe_words` and `include_hyphen_prefixes` allow for special-case handling of particular words and are as described in the comment above `add_single_word_links()`. `no_split_apostrophe_words`, if given, is a set of words that contain apostrophes but which should not be split on the apostrophes, such as French [[c'est]] and [[quelqu'un]]. `include_hyphen_prefixes`, if given, is a set of prefixes (not including the final hyphen) where we should include the final hyphen in the prefix. Hence, e.g. if {"anti"} is in the set, a Portuguese word like [[anti-herói]] "anti-hero" will be split [[anti-]][[herói]] (whereas a word like [[código-fonte]] "source code" will be split as [[código]]-[[fonte]]). ]==] function export.add_links_to_multiword_term(term, splithyph, no_split_apostrophe_words, include_hyphen_prefixes) if not term:find(" ", nil, true) then splithyph = true end local words = split(term, " ") local linked_words = {} for _, word in ipairs(words) do insert(linked_words, add_single_word_links(word, splithyph, no_split_apostrophe_words, include_hyphen_prefixes)) end local retval = concat(linked_words, " ") -- If we ended up with a single link consisting of the entire term, -- remove the link. return retval:match("^%[%[([^%[%]]*)%]%]$") or retval end --[==[ Given a `linked_term` that is the output of add_links_to_multiword_term(), apply modifications as given in `modifier_spec` to change the link destination of subterms (normally single-word non-lemma forms; sometimes collections of adjacent words). This is usually used to link non-lemma forms to their corresponding lemma, but can also be used to replace a span of adjacent separately-linked words to a single multiword lemma. The format of `modifier_spec` is one or more semicolon-separated subterm specs, where each such spec is of the form `SUBTERM:DEST`, where `SUBTERM` is one or more words in the `linked_term` but without brackets in them, and `DEST` is the corresponding link destination to link the subterm to. Any occurrence of `~` in `DEST` is replaced with `SUBTERM`. Alternatively, a single modifier spec can be of the form `BEGIN[FROM:TO]`, which is equivalent to writing `BEGINFROM:BEGINTO` (see example below). For example, given the source phrase [[il bue che dice cornuto all'asino]] "the pot calling the kettle black" (literally "the ox that calls the donkey horned/cuckolded"), the result of calling `add_links_to_multiword_term()` is [[il]] [[bue]] [[che]] [[dice]] [[cornuto]] [[all']][[asino]]. With a modifier_spec of `dice:dire`, the result is [[il]] [[bue]] [[che]] [[dire|dice]] [[cornuto]] [[all']][[asino]]. Here, based on the modifier spec, the non-lemma form [[dice]] is replaced with the two-part link [[dire|dice]]. Another example: given the source phrase [[chi semina vento raccoglie tempesta]] "sow the wind, reap the whirlwind" (literally "(he) who sows wind gathers [the] tempest"). The result of calling `add_links_to_multiword_term()` is [[chi]] [[semina]] [[vento]] [[raccoglie]] [[tempesta]], and with a modifier_spec of `semina:~re; raccoglie:~re`, the result is [[chi]] [[seminare|semina]] [[vento]] [[raccogliere|raccoglie]] [[tempesta]]. Here we use the `~` notation to stand for the non-lemma form in the destination link. A more complex example is [[se non hai altri moccoli puoi andare a letto al buio]], which becomes [[se]] [[non]] [[hai]] [[altri]] [[moccoli]] [[puoi]] [[andare]] [[a]] [[letto]] [[al]] [[buio]] after calling `add_links_to_multiword_term()`. With the following modifier_spec: `hai:avere; altr[i:o]; moccol[i:o]; puoi: potere; andare a letto:~; al buio:~`, the result of applying the spec is [[se]] [[non]] [[avere|hai]] [[altro|altri]] [[moccolo|moccoli]] [[potere|puoi]] [[andare a letto]] [[al buio]]. Here, we rely on the alternative notation mentioned above for e.g. `altr[i:o]`, which is equivalent to `altri:altro`, and link multiword subterms using e.g. `andare a letto:~`. (The code knows how to handle multiword subexpressions properly, and if the link text and destination are the same, only a single-part link is formed.) ]==] function export.apply_link_modifiers(linked_term, modifier_spec) local split_modspecs = split(modifier_spec, "%s*;%s*") for j, modspec in ipairs(split_modspecs) do local subterm, dest, otherlang local begin_from, begin_to, rest, end_from, end_to = modspec:match("^%[(.-):(.*)%]([^:]*)%[(.-):(.*)%]$") if begin_from then subterm = begin_from .. rest .. end_from dest = begin_to .. rest .. end_to end if not subterm then rest, end_from, end_to = modspec:match("^([^:]*)%[(.-):(.*)%]$") if rest then subterm = rest .. end_from dest = rest .. end_to end end if not subterm then begin_from, begin_to, rest = modspec:match("^%[(.-):(.*)%]([^:]*)$") if begin_from then subterm = begin_from .. rest dest = begin_to .. rest end end if not subterm then subterm, dest = modspec:match("^(.-)%s*:%s*(.*)$") if subterm and subterm ~= "^" and subterm ~= "$" then local langdest -- Parse off an initial language code (e.g. 'en:Higgs', 'la:minūtia' or 'grc:σκατός'). Also handle -- Wikipedia prefixes ('w:Abatemarco' or 'w:it:Colle Val d'Elsa'). otherlang, langdest = dest:match("^([A-Za-z0-9._-]+):([^ ].*)$") if otherlang == "w" then local foreign_wikipedia, foreign_term = langdest:match("^([A-Za-z0-9._-]+):([^ ].*)$") if foreign_wikipedia then otherlang = otherlang .. ":" .. foreign_wikipedia langdest = foreign_term end dest = ("%s:%s"):format(otherlang, langdest) otherlang = nil elseif otherlang then otherlang = get_lang(otherlang, true, "allow etym") dest = langdest end end end if not subterm then error(("Single modifier spec %s should be of the form SUBTERM:DEST where SUBTERM is one or more words " .. "a multiword term and DEST is the destination to link the subterm to (possibly prefixed by a " .. "language code); or of the form BEGIN[FROM:TO], which is equivalent to BEGINFROM:BEGINTO; or " .. "similarly [FROM:TO]END, which is equivalent to FROMEND:TOEND"):format(modspec)) end if subterm == "^" then linked_term = dest:gsub("_", " ") .. linked_term elseif subterm == "$" then linked_term = linked_term .. dest:gsub("_", " ") else if subterm:find("%[") then error(("Subterm '%s' in modifier spec '%s' cannot have brackets in it"):format( escape_wikicode(subterm), escape_wikicode(modspec))) end local escaped_subterm = pattern_escape(subterm) local subterm_re = "%[%[" .. escaped_subterm:gsub("(%%?[ '%-])", "%%]*%1%%[*") .. "%]%]" local expanded_dest if dest:find("~") then expanded_dest = dest:gsub("~", replacement_escape(subterm)) else expanded_dest = dest end if otherlang then expanded_dest = expanded_dest .. "#" .. otherlang:getCanonicalName() end local subterm_replacement if expanded_dest:find("%[") then -- Use the destination directly if it has brackets in it (e.g. to put brackets around parts of a word). subterm_replacement = expanded_dest elseif expanded_dest == subterm then subterm_replacement = "[[" .. subterm .. "]]" else subterm_replacement = "[[" .. expanded_dest .. "|" .. subterm .. "]]" end local replaced_linked_term = ugsub(linked_term, subterm_re, replacement_escape(subterm_replacement)) if replaced_linked_term == linked_term then error(("Subterm '%s' could not be located in %slinked expression %s, or replacement same as subterm" ):format(subterm, j > 1 and "intermediate " or "", escape_wikicode(linked_term))) else linked_term = replaced_linked_term end end end return linked_term end return export k9f9aae2ymvx65t4ayfp2c66bwmjy2p aisné 0 3935 11948 9118 2025-06-23T12:54:11Z 咽頭べさ 11 11948 wikitext text/x-wiki ==ပိဉ်တိစ်== ===နာမ်ႏ=== {{fr-noun|m|f=+}} # {{obsolete form of|fr|aîné}} ===နာမဝိသေသန=== {{fr-adj}} # {{obsolete form of|fr|aîné}} 1n6hrbtjhdhtmwz84on48enxrw3vo54 11966 11948 2025-06-23T13:51:20Z 咽頭べさ 11 11966 wikitext text/x-wiki ==ပိဉ်တိစ်== ===နာမ်ႏ=== {{fr-noun|m}} # {{obsolete form of|fr|aîné}} ===နာမဝိသေသန=== {{fr-adj}} # {{obsolete form of|fr|aîné}} su5op11ouwozpjglgq6ab7xfwnti8m6 11967 11966 2025-06-23T13:51:31Z 咽頭べさ 11 11967 wikitext text/x-wiki ==ပိဉ်တိစ်== ===နာမ်ႏ=== {{fr-noun}} # {{obsolete form of|fr|aîné}} ===နာမဝိသေသန=== {{fr-adj}} # {{obsolete form of|fr|aîné}} 24kjlw1004ecq4oif604p9w78hjcp75 11970 11967 2025-06-23T14:04:31Z 咽頭べさ 11 11970 wikitext text/x-wiki ==ပိဉ်တိစ်== ===နာမ်ႏ=== {{fr-noun|m|f=+}} # {{obsolete form of|fr|aîné}} ===နာမဝိသေသန=== {{fr-adj}} # {{obsolete form of|fr|aîné}} 1n6hrbtjhdhtmwz84on48enxrw3vo54 တမ်းပလေက်:obsolete form of 10 4029 11959 9300 2025-06-23T13:16:30Z 咽頭べさ 11 11959 wikitext text/x-wiki {{ {{#if:{{{lang|}}}|check deprecated lang param usage|no deprecated lang param usage}}|lang={{{lang|}}}|<!-- -->{{#invoke:form of/templates|form_of_t|obsolete form of|cat=|withencap=1}}<!-- -->}}<!-- --><noinclude>{{documentation}}</noinclude> osq2xjxcx574xmpce3kfufh7y0o1muh မော်ဂျူး:transliteration/data 828 4044 11980 9320 2025-06-23T14:17:06Z 咽頭べさ 11 11980 Scribunto text/plain local needs_translit = { ["alr"] = true, ["ab"] = true, ["abq"] = true, ["ady"] = true, ["agh"] = true, ["akv"] = true, ["am"] = true, ["ani"] = true, ["aqc"] = true, ["ar"] = true, ["as"] = true, ["av"] = true, ["ba"] = true, ["bbl"] = true, ["bdk"] = true, ["be"] = true, ["bg"] = true, ["bn"] = true, ["bo"] = true, ["bph"] = true, ["bxr"] = true, ["ce"] = true, ["cji"] = true, ["ckt"] = true, ["cv"] = true, ["dar"] = true, ["dlg"] = true, ["dng"] = true, ["dv"] = true, ["el"] = true, ["enf"] = true, ["ess"] = true, ["eve"] = true, ["evn"] = true, ["fa"] = true, ["gdo"] = true, ["got"] = true, ["gu"] = true, ["he"] = true, ["hi"] = true, ["hy"] = true, ["inh"] = true, ["itl"] = true, ["ja"] = true, ["ka"] = true, ["kap"] = true, ["kbd"] = true, ["kca"] = true, ["kjh"] = true, ["kk"] = true, ["km"] = true, ["kn"] = true, ["ko"] = true, ["krc"] = true, ["kv"] = true, ["kva"] = true, ["ky"] = true, ["lez"] = true, ["lo"] = true, ["mdf"] = true, ["mk"] = true, ["ml"] = true, ["mn"] = true, ["mr"] = true, ["my"] = true, ["myv"] = true, ["ne"] = true, ["or"] = true, ["os"] = true, ["ps"] = true, ["ru"] = true, ["rue"] = true, ["sah"] = true, ["sa"] = true, ["si"] = true, ["ta"] = true, ["te"] = true, ["tg"] = true, ["th"] = true, ["ti"] = true, ["tt"] = true, ["tyv"] = true, ["udm"] = true, ["ug"] = true, ["uk"] = true, ["ur"] = true, ["xal"] = true, ["yi"] = true, ["yrk"] = true, } return { needs_translit } dca0jqt14ctbx6z19z71x0pvcrnafmh မော်ဂျူး:italics 828 4061 11969 9355 2025-06-23T14:02:33Z 咽頭べさ 11 11969 Scribunto text/plain local export = {} local m_string_utils = require("Module:string utilities") local find = m_string_utils.find local match = m_string_utils.match local gsub = m_string_utils.gsub function export.i(text) if text == "" or text == nil then return nil end if type(text) == "table" and text.args then text = text.args[1] end -- Remove whitespace from beginning and end of text. text = mw.text.trim(text) -- Find parenthesized text. local parenthesis = "" if find(text, "%b()$") then text, parenthesis = match(text, "^(.*)(%b())$") if text == "" or text == nil then error("Malformed page name: " .. text) end end text = "''" .. text .. "''" --[[ Adds italics toggle ('') around the whitespace that surrounds various things that aren't supposed to be italicized: for instance, Fragaria × ananassa becomes ''Fragaria'' × ''ananassa''. (The hybridization symbol × isn't supposed to be italicized.) ]] local notItalicized = { ["subsp."] = true, ["ssp."] = true, ["var."] = true, ["f."] = true, ["sect."] = true, ["subsect."] = true, ["subg."] = true, ["infrasp."] = true, ["ser."] = true, ["subser."] = true, ["series"] = true, ["subseries"] = true, ["forma"] = true, ["form"] = true, ["morph"] = true, ["morpha"] = true } local hybrid = "×" text = text:gsub("(%s*([a-z]+%.)%s*)", function(wholeMatch, abbreviation) if notItalicized[abbreviation] then return "''" .. wholeMatch .. "''" end end) text = text:gsub("%s*" .. hybrid .. "%s*", "''%0''"):gsub("%f[']''''%f[^']", "") return text .. parenthesis end function export.unitalicize_brackets(text) if type(text) == "table" and text.args then text = text.args[1] end if not text or text == "" then return nil end local function unitalicize(text) return '<span style="font-style: normal;">' .. text .. '</span>' end local function process(text) if text:find("[[", 1, true) then if text:find("|") then return text:gsub( "|.-%]%]", function (piping) return piping:gsub("%b[]", process) end) end -- do nothing with un-piped wikilinks --[=[ elseif text:find("[http", 1, true) then return text:gsub( "%[([^ ]+ )([^%]]+)%]", function (URL, link_text) return "[" .. URL .. process(link_text) .. "]" end) --]=] elseif text:find("^%[https?://") then return text:gsub( " .+", function (link_text) return link_text:gsub("%b[]", process) end) else local inside_brackets = text:sub(2, -2) if inside_brackets == "..." or inside_brackets == "…" then return unitalicize(text) else return unitalicize("[") .. inside_brackets .. unitalicize("]") end end end text = text:gsub("%b[]", process) return text end function export.test(frame) local text = frame.args[1] local quote = require("Module:yesno")(frame.args.quote) if quote then return export.unitalicize_brackets(text) else return export.i(text) end end return export 7t7460u90fmwbijzkqpjc4vz1pq4uzk ကဏ္ဍ:အဝ်ႏမန်း ကလင်ꩻလွဉ်ဒါႏ သက္ကတဝေါဟာရဖုံႏ 14 4279 12145 9805 2025-06-24T03:19:48Z 咽頭べさ 11 [[ကဏ္ဍ:အဝ်ႏသက္ကတ ကလင်ꩻလွဉ်ဒါႏ မန်းဝေါဟာရဖုံႏ]] စာမျက်နှာကို [[ကဏ္ဍ:အဝ်ႏမန်း ကလင်ꩻလွဉ်ဒါႏ သက္ကတဝေါဟာရဖုံႏ]] သို့ 咽頭べさက ရွှေ့ခဲ့သည် 9805 wikitext text/x-wiki [[ကဏ္ဍ:မန်းဘာႏသာႏငဝ်းငွါ]] htmm46ik9yji7ly27ketlu9lmo2n8mc ကဏ္ဍ:အဝ်ႏမန်း ကထူႏလွူးခါꩻဒါႏ သက္ကတဝေါဟာရဖုံႏ 14 4280 12143 9806 2025-06-24T03:17:17Z 咽頭べさ 11 [[ကဏ္ဍ:အဝ်ႏသက္ကတ ကထူႏလွူးခါꩻဒါႏ မန်းဝေါဟာရဖုံႏ]] စာမျက်နှာကို [[ကဏ္ဍ:အဝ်ႏမန်း ကထူႏလွူးခါꩻဒါႏ သက္ကတဝေါဟာရဖုံႏ]] သို့ 咽頭べさက ရွှေ့ခဲ့သည် 9806 wikitext text/x-wiki [[ကဏ္ဍ:မန်းဘာႏသာႏငဝ်းငွါ]] htmm46ik9yji7ly27ketlu9lmo2n8mc မော်ဂျူး:form of/data/1 828 4347 11974 9911 2025-06-23T14:06:57Z 咽頭べさ 11 11974 Scribunto text/plain --[=[ This module lists the more common recognized inflection tags, along with their shortcut aliases, the corresponding glossary entry or page describing the tag, and the corresponding wikidata entry. The less common tags are in [[Module:form of/data/2]]. We divide the tags this way to save memory space. Be careful adding more tags to this module; add them to the other module unless you're sure they are common. TAGS is a table where keys are the canonical form of an inflection tag and the corresponding values are tables describing the tags, consisting of the following keys: - 1: Type of the tag ("person", "number", "gender", "case", "animacy", "tense-aspect", "mood", "voice-valence", etc.). - 2: Anchor or page describing the inflection tag, with the following values: * nil: No link. * APPENDIX: Anchor in [[Appendix:Glossary]] whose name is the same as the tag * WIKT: Page in the English Wiktionary whose name is the same as the tag. * WP: Page in the English Wikipedia whose name is the same as the tag. * A string: If prefixed by 'w:' the specified page in the English Wikipedia. If prefixed by 'wikt:', the specified page in the English Wiktionary. Otherwise, an anchor in [[Appendix:Glossary]]. NOTE: GLOSSARY ANCHORS ARE PREFERRED. Other types of entries should be migrated to the glossary, with links to Wikipedia and/or Wiktionary entries as appropriate. - 3: List of shortcuts (i.e. aliases for the inflection tag) or a single shortcut string, or nil. - 4: Numeric value of Wikidata identifier (see wikidata.org) for the concept most closely describing this tag. (The actual Wikidata identifier is a string formed by prefixing the number with Q.) - display: If specified, consists of text to display in the definition line, in lieu of the canonical form of the inflection tag. If there is a glossary entry, the displayed text forms the right side of the two-part glossary link. - no_space_on_left: If specified, don't display a space to the left of the tag. Used for punctuation. - no_space_on_right: If specified, don't display a space to the right of the tag. Used for punctuation. SHORTCUTS is a table mapping shortcut aliases to canonical inflection tag names. Shortcuts are of one of three types: (1) A simple alias of a tag. These do not need to be entered explicitly into the table; code at the end of the module automatically fills in these entries based on the information in TAGS. (2) An alias to a multipart tag. For example, the alias "mf" maps to the multipart tag "m//f", which will in turn be expanded into the canonical multipart tag {"masculine", "feminine"}, which will display as (approximately) "[[Appendix:Glossary#gender|masculine]] and [[Appendix:Glossary#gender|feminine]]". The number of such aliases should be liminted, and should cover only the most common combinations. Normally, multipart tags are displayed using serialCommaJoin() in [[Module:table]] to appropriately join the display form of the individual tags using commas and/or "and". However, some multipart tags are displayed specially; see DISPLAY_HANDLERS below. Note that aliases to multipart tags can themselves contain simple aliases in them. (3) An alias to a list of multiple tags (which may themselves be simple or multipart aliases). Specifying the alias is exactly equivalent to specifying the tags in the list in order, one after another. An example is "1s", which maps to the list {"1", "s"}. The number of such aliases should be limited, and should cover only the most common combinations. NOTE: In some cases below, multiple tags point to the same wikidata, because Wikipedia considers them synonyms. Examples are indirect case vs. objective case vs. oblique case, and inferential mood vs. renarrative mood. We do this because (a) we want to allow users to choose their own terminology; (b) we want to be able to use the terminology most common for the language in question; (c) terms considered synonyms may or may not actually be synonyms, as different languages may use the terms differently. For example, although the Wikipedia page on [[w:inferential mood]] claims that inferential and renarrative moods are the same, the page on [[w:Bulgarian_verbs#Evidentials]] claims that Bulgarian has both, and that they are not the same. ]=] local m_form_of_data = require("Module:form of/data") local APPENDIX = m_form_of_data.APPENDIX local WP = m_form_of_data.WP local WIKT = m_form_of_data.WIKT local tags = {} local shortcuts = {} ----------------------- Person ----------------------- tags["first-person"] = { "person", "first person", "1", 21714344, } tags["second-person"] = { "person", "second person", "2", 51929049, } tags["third-person"] = { "person", "third person", "3", 51929074, } tags["impersonal"] = { "person", APPENDIX, "impers", } shortcuts["12"] = "1//2" shortcuts["13"] = "1//3" shortcuts["23"] = "2//3" shortcuts["123"] = "1//2//3" ----------------------- Number ----------------------- tags["singular"] = { "number", "singular number", {"s", "sg"}, 110786, } tags["dual"] = { "number", "dual number", {"d", "du"}, 110022, } tags["plural"] = { "number", "plural number", {"p", "pl"}, 146786, } tags["single-possession"] = { "number", "singular number", "spos", 110786, -- Singular } tags["multiple-possession"] = { "number", "plural number", "mpos", 146786, -- Plural } shortcuts["1s"] = {"1", "s"} shortcuts["2s"] = {"2", "s"} shortcuts["3s"] = {"3", "s"} shortcuts["1d"] = {"1", "d"} shortcuts["2d"] = {"2", "d"} shortcuts["3d"] = {"3", "d"} shortcuts["1p"] = {"1", "p"} shortcuts["2p"] = {"2", "p"} shortcuts["3p"] = {"3", "p"} ----------------------- Gender ----------------------- tags["masculine"] = { "gender", "gender", "m", 499327, } -- This is useful e.g. in Swedish. tags["natural masculine"] = { "gender", "gender", "natm", } tags["feminine"] = { "gender", "gender", "f", 1775415, } tags["neuter"] = { "gender", "gender", "n", 1775461, } tags["common"] = { "gender", "gender", "c", 1305037, } tags["nonvirile"] = { "gender", APPENDIX, "nv", } shortcuts["mf"] = "m//f" shortcuts["mn"] = "m//n" shortcuts["fn"] = "f//n" shortcuts["mfn"] = "m//f//n" ----------------------- Animacy ----------------------- -- (may be useful sometimes for [[Module:object usage]].) tags["animate"] = { "animacy", APPENDIX, "an", 51927507, } tags["inanimate"] = { "animacy", APPENDIX, {"in", "inan"}, 51927539, } tags["personal"] = { "animacy", APPENDIX, {"pr", "pers"}, 63302102, } ----------------------- Tense/aspect ----------------------- tags["present"] = { "tense-aspect", "present tense", "pres", 192613, } tags["past"] = { "tense-aspect", "past tense", nil, 1994301, } tags["future"] = { "tense-aspect", "future tense", {"fut", "futr"}, 501405, } tags["future perfect"] = { "tense-aspect", APPENDIX, {"futp", "fperf"}, 1234617, } tags["non-past"] = { "tense-aspect", "non-past tense", "npast", 16916993, } tags["progressive"] = { "tense-aspect", APPENDIX, "prog", 56653945, } tags["preterite"] = { "tense-aspect", APPENDIX, "pret", 442485, } tags["perfect"] = { "tense-aspect", APPENDIX, "perf", 625420, } tags["imperfect"] = { "tense-aspect", APPENDIX, {"impf", "imperf"}, } tags["pluperfect"] = { "tense-aspect", APPENDIX, {"plup", "pluperf"}, 623742, } tags["aorist"] = { "tense-aspect", "aorist tense", {"aor", "aori"}, 216497, } tags["past historic"] = { "tense-aspect", nil, "phis", 442485, -- Preterite } tags["imperfective"] = { "tense-aspect", APPENDIX, {"impfv", "imperfv"}, 371427, } tags["perfective"] = { "tense-aspect", APPENDIX, {"pfv", "perfv"}, 1424306, } shortcuts["spast"] = {"simple", "past"} shortcuts["simple past"] = {"simple", "past"} shortcuts["spres"] = {"simple", "present"} shortcuts["simple present"] = {"simple", "present"} ----------------------- Mood ----------------------- tags["imperative"] = { "mood", "imperative mood", {"imp", "impr", "impv"}, 22716, } tags["indicative"] = { "mood", "indicative mood", {"ind", "indc", "indic"}, 682111, } tags["subjunctive"] = { "mood", "subjunctive mood", {"sub", "subj"}, 473746, } tags["conditional"] = { "mood", "conditional mood", "cond", 625581, } tags["modal"] = { "mood", "w:modality (linguistics)", "mod", 1243600, } tags["optative"] = { "mood", "optative mood", {"opta", "opt"}, 527205, } tags["jussive"] = { "mood", "jussive mood", "juss", 462367, } tags["hortative"] = { "mood", WP, "hort", 5906629, } ----------------------- Voice/valence ----------------------- -- This tag type combines what is normally called "voice" (active, passive, middle, mediopassive) with other tags that -- aren't normally called voice but are similar in that they control the valence/valency (number and structure of the -- arguments of a verb). tags["active"] = { "voice-valence", "active voice", {"act", "actv"}, 1317831, } tags["middle"] = { "voice-valence", "middle voice", {"mid", "midl"}, } tags["passive"] = { "voice-valence", "passive voice", {"pass", "pasv"}, 1194697, } tags["mediopassive"] = { "voice-valence", APPENDIX, {"mp", "mpass", "mpasv", "mpsv"}, 1601545, } tags["reflexive"] = { "voice-valence", APPENDIX, "refl", 13475484, -- for "reflexive verb" } tags["transitive"] = { "voice-valence", "transitive verb", {"tr", "vt"}, 1774805, -- for "transitive verb" } tags["intransitive"] = { "voice-valence", "intransitive verb", {"intr", "vi"}, 1166153, -- for "intransitive verb" } tags["ditransitive"] = { "voice-valence", "ditransitive verb", "ditr", 2328313, -- for "ditransitive verb" } tags["causative"] = { "voice-valence", APPENDIX, "caus", 56677011, -- for "causative verb" } ----------------------- Non-finite ----------------------- tags["infinitive"] = { "non-finite", APPENDIX, "inf", 179230, } -- A form found in Portuguese and Galician, as well as in Hungarian. This is probably unnecessary and can be replaced -- with the regular "infinitive" tag. A personal infinitive is not a separate infinitive from the plain infinitive, just -- an inflection of the infinitive. tags["personal infinitive"] = { "non-finite", "w:Portuguese verb conjugation", "pinf", } tags["participle"] = { "non-finite", APPENDIX, {"part", "ptcp"}, 814722, } tags["verbal noun"] = { "non-finite", APPENDIX, "vnoun", 1350145, } tags["gerund"] = { "non-finite", APPENDIX, "ger", 1923028, } tags["supine"] = { "non-finite", APPENDIX, "sup", 548470, } tags["transgressive"] = { "non-finite", APPENDIX, nil, 904896, } ----------------------- Case ----------------------- tags["ablative"] = { "case", "ablative case", "abl", 156986, } tags["accusative"] = { "case", "accusative case", "acc", 146078, } tags["dative"] = { "case", "dative case", "dat", 145599, } tags["genitive"] = { "case", "genitive case", "gen", 146233, } tags["instrumental"] = { "case", "instrumental case", "ins", 192997, } tags["locative"] = { "case", "locative case", "loc", 202142, } tags["nominative"] = { "case", "nominative case", "nom", 131105, } tags["prepositional"] = { "case", "prepositional case", {"pre", "prep"}, 2114906, } tags["vocative"] = { "case", "vocative case", "voc", 185077, } ----------------------- State ----------------------- tags["construct"] = { "state", "construct state", {"cons", "construct state"}, 1641446, display = "construct state", } tags["definite"] = { "state", APPENDIX, {"def", "defn", "definite state"}, 53997851, } tags["indefinite"] = { "state", APPENDIX, {"indef", "indf", "indefinite state"}, 53997857, } tags["possessive"] = { "state", WP, "poss", 2105891, } tags["strong"] = { "state", "indefinite", "str", 53997857, -- Indefinite } tags["weak"] = { "state", "definite", "wk", 53997851, -- Definite } tags["mixed"] = { "state", APPENDIX, "mix", 63302161, } tags["attributive"] = { "state", APPENDIX, "attr", } tags["predicative"] = { "state", APPENDIX, "pred", } ----------------------- Degrees of comparison ----------------------- tags["positive degree"] = { "comparison", "positive", {"posd", "positive"}, 3482678, -- Doesn't exist in English; only in Czech, Estonian, Finnish and various Nordic languages. } tags["comparative degree"] = { "comparison", "comparative", {"comd", "comparative"}, 14169499, } tags["superlative degree"] = { "comparison", "superlative", {"supd", "superlative"}, 1817208, } ----------------------- Register ----------------------- ----------------------- Deixis ----------------------- ----------------------- Clusivity ----------------------- ----------------------- Inflectional class ----------------------- tags["pronominal"] = { "class", WIKT, "pron", 12721180, -- for "pronominal attribute", existing only in the Romanian Wikipedia } ----------------------- Attitude ----------------------- -- This is a vague tag type grouping augmentative, diminutive and pejorative, which generally indicate the speaker's -- attitude towards the object in question (as well as often indicating size). tags["augmentative"] = { "attitude", APPENDIX, "aug", 1358239, } tags["diminutive"] = { "attitude", APPENDIX, "dim", 108709, } tags["pejorative"] = { "attitude", APPENDIX, "pej", 545779, } ----------------------- Sound changes ----------------------- tags["contracted"] = { "sound change", nil, "contr", 126473, } tags["uncontracted"] = { "sound change", nil, "uncontr", } ----------------------- Misc grammar ----------------------- shortcuts["past-cl"] = {"past", "-", "tense", "clause"} shortcuts["pres-cl"] = {"pres", "-", "tense", "clause"} shortcuts["fut-cl"] = {"fut", "-", "tense", "clause"} shortcuts["ind-cl"] = {"ind", "clause"} shortcuts["sub-cl"] = {"sub", "clause"} shortcuts["past-sub-cl"] = {"past", "sub", "clause"} shortcuts["pres-sub-cl"] = {"pres", "sub", "clause"} shortcuts["fut-sub-cl"] = {"fut", "sub", "clause"} shortcuts["cond-cl"] = {"cond", "clause"} shortcuts["cond-past-cl"] = {"cond", "past", "clause"} tags["simple"] = { "grammar", nil, "sim", } tags["short"] = { "grammar", } tags["long"] = { "grammar", } tags["form"] = { "grammar", } tags["adjectival"] = { "grammar", WIKT, "adj", } tags["adverbial"] = { "grammar", APPENDIX, "adv", } tags["negative"] = { "grammar", "w:affirmation and negation", "neg", 63302088, } tags["nominalized"] = { "grammar", nil, "nomz", 4683152, -- entry for "nominalized adjective" } tags["nominalization"] = { "grammar", nil, "nomzn", 1500667, } tags["root"] = { "grammar", nil, nil, 111029, } tags["stem"] = { "grammar", nil, nil, 210523, } tags["dependent"] = { "grammar", nil, "dep", 1122094, -- entry for "dependent clause" } tags["independent"] = { "grammar", nil, "indep", 1419215, -- entry for "independent clause" } tags["subject"] = { "grammar", APPENDIX, "sbj", -- sub and subj used for subjunctive 164573, } tags["object"] = { "grammar", APPENDIX, "obj", 175026, } tags["direct object"] = { "grammar", APPENDIX, "dirobj", 2990574, } tags["indirect object"] = { "grammar", APPENDIX, "indirobj", 1094061, } tags["tense"] = { "grammar", APPENDIX, nil, 177691, } tags["clause"] = { "grammar", APPENDIX, nil, 117364, } tags["phrase"] = { "grammar", APPENDIX, nil, 187931, } ----------------------- Other tags ----------------------- -- This consists of non-content words like "and" as well as punctuation characters. If the punctuation characters appear -- by themselves as tags, we special-case the handling of surrounding spaces so the output looks correct. tags["and"] = { "other", } -- HACK! "in" is a shortcut for "inanimate" so create "!in" to display "in". We should generalize this like for labels. tags["!in"] = { "other", display = "in", } tags[","] = { "other", no_space_on_left = true, } tags[":"] = { "other", no_space_on_left = true, } tags["/"] = { "other", no_space_on_left = true, no_space_on_right = true, } tags["("] = { "other", no_space_on_right = true, } tags[")"] = { "other", no_space_on_left = true, } tags["["] = { "other", no_space_on_right = true, } tags["]"] = { "other", no_space_on_left = true, } tags["-"] = { -- regular hyphen-minus "other", no_space_on_left = true, no_space_on_right = true, } ----------------------- Create the shortcuts list ----------------------- m_form_of_data.finalize(tags, shortcuts) return {tags = tags, shortcuts = shortcuts} pahundk72yf6kkp2k4haw8u87paun7l 11975 11974 2025-06-23T14:07:18Z 咽頭べさ 11 [[မော်ဂျူး:form of/data]] စာမျက်နှာကို [[မော်ဂျူး:form of/data/1]] သို့ 咽頭べさက ရွှေ့ခဲ့သည် 11974 Scribunto text/plain --[=[ This module lists the more common recognized inflection tags, along with their shortcut aliases, the corresponding glossary entry or page describing the tag, and the corresponding wikidata entry. The less common tags are in [[Module:form of/data/2]]. We divide the tags this way to save memory space. Be careful adding more tags to this module; add them to the other module unless you're sure they are common. TAGS is a table where keys are the canonical form of an inflection tag and the corresponding values are tables describing the tags, consisting of the following keys: - 1: Type of the tag ("person", "number", "gender", "case", "animacy", "tense-aspect", "mood", "voice-valence", etc.). - 2: Anchor or page describing the inflection tag, with the following values: * nil: No link. * APPENDIX: Anchor in [[Appendix:Glossary]] whose name is the same as the tag * WIKT: Page in the English Wiktionary whose name is the same as the tag. * WP: Page in the English Wikipedia whose name is the same as the tag. * A string: If prefixed by 'w:' the specified page in the English Wikipedia. If prefixed by 'wikt:', the specified page in the English Wiktionary. Otherwise, an anchor in [[Appendix:Glossary]]. NOTE: GLOSSARY ANCHORS ARE PREFERRED. Other types of entries should be migrated to the glossary, with links to Wikipedia and/or Wiktionary entries as appropriate. - 3: List of shortcuts (i.e. aliases for the inflection tag) or a single shortcut string, or nil. - 4: Numeric value of Wikidata identifier (see wikidata.org) for the concept most closely describing this tag. (The actual Wikidata identifier is a string formed by prefixing the number with Q.) - display: If specified, consists of text to display in the definition line, in lieu of the canonical form of the inflection tag. If there is a glossary entry, the displayed text forms the right side of the two-part glossary link. - no_space_on_left: If specified, don't display a space to the left of the tag. Used for punctuation. - no_space_on_right: If specified, don't display a space to the right of the tag. Used for punctuation. SHORTCUTS is a table mapping shortcut aliases to canonical inflection tag names. Shortcuts are of one of three types: (1) A simple alias of a tag. These do not need to be entered explicitly into the table; code at the end of the module automatically fills in these entries based on the information in TAGS. (2) An alias to a multipart tag. For example, the alias "mf" maps to the multipart tag "m//f", which will in turn be expanded into the canonical multipart tag {"masculine", "feminine"}, which will display as (approximately) "[[Appendix:Glossary#gender|masculine]] and [[Appendix:Glossary#gender|feminine]]". The number of such aliases should be liminted, and should cover only the most common combinations. Normally, multipart tags are displayed using serialCommaJoin() in [[Module:table]] to appropriately join the display form of the individual tags using commas and/or "and". However, some multipart tags are displayed specially; see DISPLAY_HANDLERS below. Note that aliases to multipart tags can themselves contain simple aliases in them. (3) An alias to a list of multiple tags (which may themselves be simple or multipart aliases). Specifying the alias is exactly equivalent to specifying the tags in the list in order, one after another. An example is "1s", which maps to the list {"1", "s"}. The number of such aliases should be limited, and should cover only the most common combinations. NOTE: In some cases below, multiple tags point to the same wikidata, because Wikipedia considers them synonyms. Examples are indirect case vs. objective case vs. oblique case, and inferential mood vs. renarrative mood. We do this because (a) we want to allow users to choose their own terminology; (b) we want to be able to use the terminology most common for the language in question; (c) terms considered synonyms may or may not actually be synonyms, as different languages may use the terms differently. For example, although the Wikipedia page on [[w:inferential mood]] claims that inferential and renarrative moods are the same, the page on [[w:Bulgarian_verbs#Evidentials]] claims that Bulgarian has both, and that they are not the same. ]=] local m_form_of_data = require("Module:form of/data") local APPENDIX = m_form_of_data.APPENDIX local WP = m_form_of_data.WP local WIKT = m_form_of_data.WIKT local tags = {} local shortcuts = {} ----------------------- Person ----------------------- tags["first-person"] = { "person", "first person", "1", 21714344, } tags["second-person"] = { "person", "second person", "2", 51929049, } tags["third-person"] = { "person", "third person", "3", 51929074, } tags["impersonal"] = { "person", APPENDIX, "impers", } shortcuts["12"] = "1//2" shortcuts["13"] = "1//3" shortcuts["23"] = "2//3" shortcuts["123"] = "1//2//3" ----------------------- Number ----------------------- tags["singular"] = { "number", "singular number", {"s", "sg"}, 110786, } tags["dual"] = { "number", "dual number", {"d", "du"}, 110022, } tags["plural"] = { "number", "plural number", {"p", "pl"}, 146786, } tags["single-possession"] = { "number", "singular number", "spos", 110786, -- Singular } tags["multiple-possession"] = { "number", "plural number", "mpos", 146786, -- Plural } shortcuts["1s"] = {"1", "s"} shortcuts["2s"] = {"2", "s"} shortcuts["3s"] = {"3", "s"} shortcuts["1d"] = {"1", "d"} shortcuts["2d"] = {"2", "d"} shortcuts["3d"] = {"3", "d"} shortcuts["1p"] = {"1", "p"} shortcuts["2p"] = {"2", "p"} shortcuts["3p"] = {"3", "p"} ----------------------- Gender ----------------------- tags["masculine"] = { "gender", "gender", "m", 499327, } -- This is useful e.g. in Swedish. tags["natural masculine"] = { "gender", "gender", "natm", } tags["feminine"] = { "gender", "gender", "f", 1775415, } tags["neuter"] = { "gender", "gender", "n", 1775461, } tags["common"] = { "gender", "gender", "c", 1305037, } tags["nonvirile"] = { "gender", APPENDIX, "nv", } shortcuts["mf"] = "m//f" shortcuts["mn"] = "m//n" shortcuts["fn"] = "f//n" shortcuts["mfn"] = "m//f//n" ----------------------- Animacy ----------------------- -- (may be useful sometimes for [[Module:object usage]].) tags["animate"] = { "animacy", APPENDIX, "an", 51927507, } tags["inanimate"] = { "animacy", APPENDIX, {"in", "inan"}, 51927539, } tags["personal"] = { "animacy", APPENDIX, {"pr", "pers"}, 63302102, } ----------------------- Tense/aspect ----------------------- tags["present"] = { "tense-aspect", "present tense", "pres", 192613, } tags["past"] = { "tense-aspect", "past tense", nil, 1994301, } tags["future"] = { "tense-aspect", "future tense", {"fut", "futr"}, 501405, } tags["future perfect"] = { "tense-aspect", APPENDIX, {"futp", "fperf"}, 1234617, } tags["non-past"] = { "tense-aspect", "non-past tense", "npast", 16916993, } tags["progressive"] = { "tense-aspect", APPENDIX, "prog", 56653945, } tags["preterite"] = { "tense-aspect", APPENDIX, "pret", 442485, } tags["perfect"] = { "tense-aspect", APPENDIX, "perf", 625420, } tags["imperfect"] = { "tense-aspect", APPENDIX, {"impf", "imperf"}, } tags["pluperfect"] = { "tense-aspect", APPENDIX, {"plup", "pluperf"}, 623742, } tags["aorist"] = { "tense-aspect", "aorist tense", {"aor", "aori"}, 216497, } tags["past historic"] = { "tense-aspect", nil, "phis", 442485, -- Preterite } tags["imperfective"] = { "tense-aspect", APPENDIX, {"impfv", "imperfv"}, 371427, } tags["perfective"] = { "tense-aspect", APPENDIX, {"pfv", "perfv"}, 1424306, } shortcuts["spast"] = {"simple", "past"} shortcuts["simple past"] = {"simple", "past"} shortcuts["spres"] = {"simple", "present"} shortcuts["simple present"] = {"simple", "present"} ----------------------- Mood ----------------------- tags["imperative"] = { "mood", "imperative mood", {"imp", "impr", "impv"}, 22716, } tags["indicative"] = { "mood", "indicative mood", {"ind", "indc", "indic"}, 682111, } tags["subjunctive"] = { "mood", "subjunctive mood", {"sub", "subj"}, 473746, } tags["conditional"] = { "mood", "conditional mood", "cond", 625581, } tags["modal"] = { "mood", "w:modality (linguistics)", "mod", 1243600, } tags["optative"] = { "mood", "optative mood", {"opta", "opt"}, 527205, } tags["jussive"] = { "mood", "jussive mood", "juss", 462367, } tags["hortative"] = { "mood", WP, "hort", 5906629, } ----------------------- Voice/valence ----------------------- -- This tag type combines what is normally called "voice" (active, passive, middle, mediopassive) with other tags that -- aren't normally called voice but are similar in that they control the valence/valency (number and structure of the -- arguments of a verb). tags["active"] = { "voice-valence", "active voice", {"act", "actv"}, 1317831, } tags["middle"] = { "voice-valence", "middle voice", {"mid", "midl"}, } tags["passive"] = { "voice-valence", "passive voice", {"pass", "pasv"}, 1194697, } tags["mediopassive"] = { "voice-valence", APPENDIX, {"mp", "mpass", "mpasv", "mpsv"}, 1601545, } tags["reflexive"] = { "voice-valence", APPENDIX, "refl", 13475484, -- for "reflexive verb" } tags["transitive"] = { "voice-valence", "transitive verb", {"tr", "vt"}, 1774805, -- for "transitive verb" } tags["intransitive"] = { "voice-valence", "intransitive verb", {"intr", "vi"}, 1166153, -- for "intransitive verb" } tags["ditransitive"] = { "voice-valence", "ditransitive verb", "ditr", 2328313, -- for "ditransitive verb" } tags["causative"] = { "voice-valence", APPENDIX, "caus", 56677011, -- for "causative verb" } ----------------------- Non-finite ----------------------- tags["infinitive"] = { "non-finite", APPENDIX, "inf", 179230, } -- A form found in Portuguese and Galician, as well as in Hungarian. This is probably unnecessary and can be replaced -- with the regular "infinitive" tag. A personal infinitive is not a separate infinitive from the plain infinitive, just -- an inflection of the infinitive. tags["personal infinitive"] = { "non-finite", "w:Portuguese verb conjugation", "pinf", } tags["participle"] = { "non-finite", APPENDIX, {"part", "ptcp"}, 814722, } tags["verbal noun"] = { "non-finite", APPENDIX, "vnoun", 1350145, } tags["gerund"] = { "non-finite", APPENDIX, "ger", 1923028, } tags["supine"] = { "non-finite", APPENDIX, "sup", 548470, } tags["transgressive"] = { "non-finite", APPENDIX, nil, 904896, } ----------------------- Case ----------------------- tags["ablative"] = { "case", "ablative case", "abl", 156986, } tags["accusative"] = { "case", "accusative case", "acc", 146078, } tags["dative"] = { "case", "dative case", "dat", 145599, } tags["genitive"] = { "case", "genitive case", "gen", 146233, } tags["instrumental"] = { "case", "instrumental case", "ins", 192997, } tags["locative"] = { "case", "locative case", "loc", 202142, } tags["nominative"] = { "case", "nominative case", "nom", 131105, } tags["prepositional"] = { "case", "prepositional case", {"pre", "prep"}, 2114906, } tags["vocative"] = { "case", "vocative case", "voc", 185077, } ----------------------- State ----------------------- tags["construct"] = { "state", "construct state", {"cons", "construct state"}, 1641446, display = "construct state", } tags["definite"] = { "state", APPENDIX, {"def", "defn", "definite state"}, 53997851, } tags["indefinite"] = { "state", APPENDIX, {"indef", "indf", "indefinite state"}, 53997857, } tags["possessive"] = { "state", WP, "poss", 2105891, } tags["strong"] = { "state", "indefinite", "str", 53997857, -- Indefinite } tags["weak"] = { "state", "definite", "wk", 53997851, -- Definite } tags["mixed"] = { "state", APPENDIX, "mix", 63302161, } tags["attributive"] = { "state", APPENDIX, "attr", } tags["predicative"] = { "state", APPENDIX, "pred", } ----------------------- Degrees of comparison ----------------------- tags["positive degree"] = { "comparison", "positive", {"posd", "positive"}, 3482678, -- Doesn't exist in English; only in Czech, Estonian, Finnish and various Nordic languages. } tags["comparative degree"] = { "comparison", "comparative", {"comd", "comparative"}, 14169499, } tags["superlative degree"] = { "comparison", "superlative", {"supd", "superlative"}, 1817208, } ----------------------- Register ----------------------- ----------------------- Deixis ----------------------- ----------------------- Clusivity ----------------------- ----------------------- Inflectional class ----------------------- tags["pronominal"] = { "class", WIKT, "pron", 12721180, -- for "pronominal attribute", existing only in the Romanian Wikipedia } ----------------------- Attitude ----------------------- -- This is a vague tag type grouping augmentative, diminutive and pejorative, which generally indicate the speaker's -- attitude towards the object in question (as well as often indicating size). tags["augmentative"] = { "attitude", APPENDIX, "aug", 1358239, } tags["diminutive"] = { "attitude", APPENDIX, "dim", 108709, } tags["pejorative"] = { "attitude", APPENDIX, "pej", 545779, } ----------------------- Sound changes ----------------------- tags["contracted"] = { "sound change", nil, "contr", 126473, } tags["uncontracted"] = { "sound change", nil, "uncontr", } ----------------------- Misc grammar ----------------------- shortcuts["past-cl"] = {"past", "-", "tense", "clause"} shortcuts["pres-cl"] = {"pres", "-", "tense", "clause"} shortcuts["fut-cl"] = {"fut", "-", "tense", "clause"} shortcuts["ind-cl"] = {"ind", "clause"} shortcuts["sub-cl"] = {"sub", "clause"} shortcuts["past-sub-cl"] = {"past", "sub", "clause"} shortcuts["pres-sub-cl"] = {"pres", "sub", "clause"} shortcuts["fut-sub-cl"] = {"fut", "sub", "clause"} shortcuts["cond-cl"] = {"cond", "clause"} shortcuts["cond-past-cl"] = {"cond", "past", "clause"} tags["simple"] = { "grammar", nil, "sim", } tags["short"] = { "grammar", } tags["long"] = { "grammar", } tags["form"] = { "grammar", } tags["adjectival"] = { "grammar", WIKT, "adj", } tags["adverbial"] = { "grammar", APPENDIX, "adv", } tags["negative"] = { "grammar", "w:affirmation and negation", "neg", 63302088, } tags["nominalized"] = { "grammar", nil, "nomz", 4683152, -- entry for "nominalized adjective" } tags["nominalization"] = { "grammar", nil, "nomzn", 1500667, } tags["root"] = { "grammar", nil, nil, 111029, } tags["stem"] = { "grammar", nil, nil, 210523, } tags["dependent"] = { "grammar", nil, "dep", 1122094, -- entry for "dependent clause" } tags["independent"] = { "grammar", nil, "indep", 1419215, -- entry for "independent clause" } tags["subject"] = { "grammar", APPENDIX, "sbj", -- sub and subj used for subjunctive 164573, } tags["object"] = { "grammar", APPENDIX, "obj", 175026, } tags["direct object"] = { "grammar", APPENDIX, "dirobj", 2990574, } tags["indirect object"] = { "grammar", APPENDIX, "indirobj", 1094061, } tags["tense"] = { "grammar", APPENDIX, nil, 177691, } tags["clause"] = { "grammar", APPENDIX, nil, 117364, } tags["phrase"] = { "grammar", APPENDIX, nil, 187931, } ----------------------- Other tags ----------------------- -- This consists of non-content words like "and" as well as punctuation characters. If the punctuation characters appear -- by themselves as tags, we special-case the handling of surrounding spaces so the output looks correct. tags["and"] = { "other", } -- HACK! "in" is a shortcut for "inanimate" so create "!in" to display "in". We should generalize this like for labels. tags["!in"] = { "other", display = "in", } tags[","] = { "other", no_space_on_left = true, } tags[":"] = { "other", no_space_on_left = true, } tags["/"] = { "other", no_space_on_left = true, no_space_on_right = true, } tags["("] = { "other", no_space_on_right = true, } tags[")"] = { "other", no_space_on_left = true, } tags["["] = { "other", no_space_on_right = true, } tags["]"] = { "other", no_space_on_left = true, } tags["-"] = { -- regular hyphen-minus "other", no_space_on_left = true, no_space_on_right = true, } ----------------------- Create the shortcuts list ----------------------- m_form_of_data.finalize(tags, shortcuts) return {tags = tags, shortcuts = shortcuts} pahundk72yf6kkp2k4haw8u87paun7l မော်ဂျူး:form of/cats 828 4348 11978 9912 2025-06-23T14:10:11Z 咽頭べさ 11 11978 Scribunto text/plain local cats = {} --[=[ -- FIXME: Data structure is highly inefficient, as it involves lots of nested tables. This contains categorization specs for specific languages and for all languages. The particular categories listed are listed without the preceding canonical language name, which will automatically be prepended, and the text "<<p>>" in a category will be replaced with the user-specified part of speech. The value of an entry in the cats[] table is a list of specifications to apply to inflections in a specific language (except that the entry for "und" applies to all languages). Each specification indicates the conditions under which a given category is applied. Each specification is processed independently; if multiple specifications apply, all the resulting categories will be added to the page. (This is equivalent to wrapping the specifications in a {"multi", ...} clause; see below.) A specification is one of: (1) A string: Always apply that category. (2) A list {"has", TAG, SPEC} or {"has", TAG, SPEC, ELSESPEC}: TAG is an inflection tag, and can either be the full form or any abbreviation; if that tag is present among the user-supplied tags, SPEC is applied, otherwise ELSESPEC is applied if present. SPEC and ELSESPEC are specifications just as at the top level; i.e. they can be strings, nested conditions, etc. (2) A list {"hasall", TAGS, SPEC} or {"hasall", TAGS, SPEC, ELSESPEC}: Similar to {"has", ...} but only activates if all of the tags in TAGS (a list) are present among the user-supplied tags (in any order, and other tags may be present, including between the tags in TAGS). (3) A list {"hasany", TAGS, SPEC} or {"hasany", TAGS, SPEC, ELSESPEC}: Similar to {"has", ...} but activates if any of the tags in TAGS (a list) are present among the user-supplied tags. (4) A list {"tags=", TAGS, SPEC} or {"tags=", TAGS, SPEC, ELSESPEC}: Similar to {"hasall", ...} but activates only if the user-supplied tags exactly match the tags in TAGS, including the order. (But, as above, any tag abbreviation can be given in TAGS, and will match any equivalent abbreviation or full form.) (5) A list {"p=", VALUE, SPEC} or {"p=", VALUE, SPEC, ELSESPEC}: Similar to {"has", ...} but activates if the value supplied for the p= or POS= parameters is the specified value (which can be either the full form or any abbreviation). (6) A list {"pany", VALUES, SPEC} or {"pany", VALUES, SPEC, ELSESPEC}: Similar to {"p=", ...} but activates if the value supplied for the p= or POS= parameters is any of the specified values (which can be either the full forms or any abbreviation). (7) A list {"pexists", SPEC} or {"pexists", SPEC, ELSESPEC}: Activates if any value was specified for the p= or POS= parameters. (8) A list {"cond", SPEC1, SPEC2, ...}: If SPEC1 applies, it will be applied; otherwise, if SPEC2 applies, it will be applied; etc. This stops processing specifications as soon as it finds one that applies. (9) A list {"multi", SPEC1, SPEC2, ...}: If SPEC1 applies, it will be applied; in addition, if SPEC2 applies, it will also be applied; etc. Unlike {"cond", ...}, this continues processing specifications even if a previous one has applied. (10) A list {"not", CONDITION, SPEC} or {"not", CONDITION, SPEC, ELSESPEC}: If CONDITION does *NOT* apply, SPEC will be applied, otherwise ELSESPEC will be applied if present. CONDITION is one of: -- {"has", TAG} -- {"hasall", TAGS} -- {"hasany", TAGS} -- {"tags=", TAGS}, -- {"p=", VALUE} -- {"pany", VALUES} -- {"pexists"} -- {"not", CONDITION} -- {"and", CONDITION1, CONDITION2} -- {"or", CONDITION1, CONDITION2} -- {"call", FUNCTION} where FUNCTION is a string naming a function listed in cat_functions in [[Module:form of/functions]], which is passed a single argument (see (10) below) and should return true or false. That is, conditions are similar to if-else SPECS but without any specifications given. (11) A list {"and", CONDITION1, CONDITION2, SPEC} or {"and", CONDITION1, CONDITION2, SPEC, ELSESPEC}: If CONDITION1 and CONDITION2 both apply, SPEC will be applied, otherwise ELSESPEC will be applied if present. CONDITION is as above for "not". (12) A list {"or", CONDITION1, CONDITION2, SPEC} or {"or", CONDITION1, CONDITION2, SPEC, ELSESPEC}: If either CONDITION1 or CONDITION2 apply, SPEC will be applied, otherwise ELSESPEC will be applied if present. CONDITION is as above for "not". (13) A list {"call", FUNCTION}: FUNCTION is the name of a function listed in cat_functions in [[Module:form of/functions]], which is passed a single argument, a table containing the parameters given to the template call, and which should return a specification (a string naming a category, a list of any of the formats described above). In the table, the following keys are present: "lang": the structure describing the language (usually the first parameter); "tags": the list of tags (canonicalized to their full forms); "term": the term to link to (will be missing if no term is given); "alt": the display form of the term (will be missing if no display form is given); "t": the gloss of the term (will be missing if no gloss is given); In addition, any other parameters specified will be located under a key corresponding to the parameter name. As a simple example, consider this: cats["et"] = { {"has", "part", "participles"}, } This says that, for language code "et" (Estonian), if the "part" tag is present (or if "participle" is present, which is the equivalent full form), the page will be categorized into [[:Category:Estonian participles]]. Another example: cats["lt"] = { {"p=", "part", {"has", "pron", "pronominal dalyvis participle forms", "dalyvis participle forms", } } } This says that, for language code "lt" (Lithuanian), if the "p=" parameter was given with the value "part" (or "participle", the equivalent full form), then if the "pron" tag is present (or the equivalent full form "pronominal"), categorize into [[:Category:Lithuanian pronominal dalyvis participle forms]], else categorize into [["Category:Lithuanian dalyvis participle forms]]. Note that, if p= isn't specified, or has a value other than "part" or "participle", no categories will be added to the page, because there is no "else" specification associated with the "p=" specification. --]=] -- First, the language-independent categories; be careful here not to -- overcategorize. In practice we achieve this using tags=; we should -- probably be smarter. But we don't e.g. want to categorize a page -- into "present participles" if it has the tags f|s|pres|part, which -- is a participle form rather than a participle itself. -- -- We include the categorization here rather than in e.g. {{augmentative of}} -- because we want the categorization to also apply when e.g. an augmentative -- is specified using {{inflection of|LANG|...|aug}} rather than -- {{augmentative of|LANG}}. --[==[Disable all of these for now as they are somewhat controversial. cats["und"] = { {"tags=", {"aug"}, "augmentative <<p=n>>s"}, {"tags=", {"dim"}, "diminutive <<p=n>>s"}, {"or", {"tags=", {"end"}}, {"or", {"tags=", {"end", "form"}}, {"tags=", {"end", "dim"}}}, "endearing <<p=n>>s"}, {"tags=", {"pej"}, "derogatory terms"}, {"tags=", {"comd"}, "comparative <<p=a>>s"}, {"tags=", {"supd"}, "superlative <<p=a>>s"}, {"tags=", {"equd"}, "<<p=a>> equative forms"}, {"tags=", {"caus"}, "causative <<p=v>>s"}, {"tags=", {"freq"}, "frequentative <<p=v>>s"}, {"tags=", {"iter"}, "iterative <<p=v>>s"}, {"tags=", {"refl"}, "reflexive <<p=v>>s"}, {"or", {"tags=", {"impfv"}}, {"tags=", {"impfv", "form"}}, "imperfective <<p=v>>s"}, {"or", {"tags=", {"pfv"}}, {"tags=", {"pfv", "form"}}, "perfective <<p=v>>s"}, {"tags=", {"nomzn"}, "nominalized adjectives"}, {"tags=", {"ger"}, "gerunds"}, {"tags=", {"vnoun"}, "verbal nouns"}, {"tags=", {"pass"}, "<<p=v>> passive forms"}, -- [[User:Rua]] objects to these categories {"tags=", {"past", "act", "part"}, "past active participles"}, {"tags=", {"past", "pass", "part"}, "past passive participles"}, {"tags=", {"past", "part"}, "past participles"}, {"tags=", {"pres", "act", "part"}, "present active participles"}, {"tags=", {"pres", "pass", "part"}, "present passive participles"}, {"tags=", {"pres", "part"}, "present participles"}, {"tags=", {"perf", "part"}, "perfect participles"}, }]==] cats["az"] = { {"hasall", {"subject", "past", "participle"}, "subject past participles"}, {"hasall", {"broken", "plural"}, "broken noun plural forms"}, } cats["bg"] = { {"cond", {"hasall", {"adv", "part"}, "adverbial participles"}, {"has", "part", -- If this is a lemma participle form, categorize appropriately -- for the type of participle, otherwise put into -- "participle forms". We determine a lemma if all of the -- following apply: -- (1) either is masculine, or no gender listed; and -- (2) either is indefinite, or no definiteness listed; and -- (3) not listed as either subjective or objective form. {"and", {"or", {"has", "m"}, {"not", {"hasany", {"f", "n", "p"}}}}, {"and", {"or", {"has", "indef"}, {"not", {"has", "def"}}}, {"not", {"hasany", {"sbjv", "objv"}}}, }, {"cond", {"hasall", {"pres", "act"}, "present active participles"}, {"hasall", {"past", "pass"}, "past passive participles"}, {"hasall", {"past", "act", "aor"}, "past active aorist participles"}, {"hasall", {"past", "act", "impf"}, "past active imperfect participles"}, }, -- FIXME: "participle forms" probably not necessary, -- should be handled by headword "participle forms" } } }, } cats["br"] = { {"p=", "n", {"has", "p", "noun plural forms"} }, } cats["ca"] = { {"has", "part", {"cond", -- FIXME, not clear if we need all of these conditions; -- may partly be handled by headword {"hasany", {"f", "p"}, "participle forms"}, {"has", "pres", "present participles"}, {"has", "past", "past participles"}, } }, } cats["de"] = { {"hasall", {"pres", "part"}, "present participles"}, {"hasall", {"past", "part"}, "past participles"}, } cats["el"] = { {"has", "dat", "dative forms"}, {"cond", {"hasall", {"1", "s", "past"}, "verb past tense forms"}, {"has", "nonfinite", "verb nonfinite forms"}, }, } cats["en"] = { {"cond", -- The display of these labels and their categorization is controlled by [[Module:labels/data/lang/en]]. -- This label will categorize into [[:Category:English archaic third-person singular forms]]. {"has", "3-th", {labels = {"archaic third singular"}}}, -- This label will categorize into [[:Category:English second-person singular forms]]. {"hasall", {"2-st", "pres"}, {labels = {"archaic second singular present"}}}, -- This label will categorize into [[:Category:English second-person singular past tense forms]]. {"hasall", {"2-st", "past"}, {labels = {"archaic second singular past"}}}, }, -- Add irregular plural categories. The corresponding code is in [[Module:form of/lang-data/en/functions]]. {"tags=", {"p"}, {"call", "en-irregular-plural-categories"}}, } cats["enm"] = { {"not", {"hasany", {"sub", "imp"}}, {"multi", {"hasall", {"1", "s", "pres"}, "first-person singular forms"}, {"hasall", {"2", "s", "pres"}, "second-person singular forms"}, {"hasall", {"3", "s", "pres"}, "third-person singular forms"}, {"hasall", {"1//3", "s", "past"}, "first/third-person singular past forms"}, {"hasall", {"2", "s", "past"}, "second-person singular past forms"}, {"hasall", {"p", "pres"}, "plural forms"}, }, }, {"hasall", {"p", "pres", "ind"}, "plural forms"}, {"hasall", {"p", "pres", "sub"}, "plural subjunctive forms"}, {"hasall", {"p", "past"}, "plural past forms"}, {"hasall", {"s", "pres", "sub"}, "singular subjunctive forms"}, {"hasall", {"s", "past", "sub"}, "singular past subjunctive forms"}, {"hasall", {"s", "imp"}, "singular imperative forms"}, {"hasall", {"p", "imp"}, "plural imperative forms"}, {"hasall", {"pres", "part"}, "present participles"}, {"hasall", {"past", "part"}, "past participles"}, } cats["et"] = { {"has", "part", "participles"}, } cats["fi"] = { {"has", "inf", {"cond", {"hasall", {"long", "first"}, "long first infinitives"}, {"hasall", {"second", "act"}, "active second infinitives"}, {"hasall", {"second", "pass"}, "passive second infinitives"}, {"hasall", {"third", "act"}, "active third infinitives"}, {"hasall", {"third", "pass"}, "passive third infinitives"}, {"has", "fifth", "fifth infinitives"}, } }, } cats["got"] = { {"hasall", {"pres", "part"}, "present participles"}, {"hasall", {"past", "part"}, "past participles"}, } cats["hu"] = { {"hasall", {"past", "part"}, "past participles"}, {"hasall", {"pres", "part"}, "present participles"}, {"hasall", {"fut", "part"}, "future participles"}, {"hasall", {"adv", "part"}, "adverbial participles"}, {"hasall", {"verbal", "part"}, "verbal participles"}, } cats["ja"] = { {"p=", "v", {"multi", {"has", "past", "past tense verb forms"}, {"has", "conj", "conjunctive verb forms"}, } }, } cats["kmr"] = { {"hasall", {"pres", "part"}, "present participles"}, {"hasall", {"past", "part"}, "past participles"}, } cats["liv"] = { {"has", "part", {"cond", {"hasall", {"pres", "act"}, "present active participles"}, {"hasall", {"pres", "pass"}, "present passive participles"}, {"hasall", {"past", "act"}, "past active participles"}, {"hasall", {"past", "pass"}, "past passive participles"}, }, }, {"cond", {"has", "ger", "gerunds"}, {"hasall", {"sup", "abe"}, "supine abessives"}, {"has", "sup", "supines"}, {"has", "deb", "debitives"}, }, } cats["lt"] = { {"has", "part", {"cond", -- Three types of adverbial participles. {"has", "budinys", "būdinys participles"}, {"has", "padalyvis", "padalyvis participles"}, {"has", "pusdalyvis", "pusdalyvis participles"}, -- If it's a non-adverbial participle, it's a dalyvis = regular -- adjectival participle. It's a participle per se if it has -- no case, number or gender listed. {"not", {"hasany", { "nom", "gen", "dat", "acc", "ins", "loc", "voc", "m", "f", "s", "p" }}, "dalyvis participles"}, } }, {"p=", "a", {"has", "pron", {"cond", {"has", "comd", "comparative pronominal adjective forms"}, {"has", "supd", "superlative pronominal adjective forms"}, }, {"cond", {"has", "comd", "comparative adjective forms"}, {"has", "supd", "superlative adjective forms"}, }, } }, } cats["lv"] = { {"has", "neg", "negative verb forms"}, {"has", "comd", "comparative adjectives"}, {"has", "supd", "superlative adjectives"}, {"has", "part", {"cond", {"hasall", {"pres", "act"}, "present active participles"}, {"hasall", {"pres", "pass"}, "present passive participles"}, {"hasall", {"past", "act"}, "past active participles"}, {"hasall", {"past", "pass"}, "past passive participles"}, }, }, } cats["mk"] = { {"has", "vnoun", {"multi", "verbal nouns", "verb forms"}, }, {"has", "part", {"multi", "participles", "verb forms", {"cond", {"hasall", {"adj", "part"}, "adjectival participles"}, {"hasall", {"adv", "part"}, "adverbial participles"}, {"hasall", {"perf", "part"}, "perfect participles"}, {"hasall", {"aor", "act", "part"}, "aorist l-participles"}, {"hasall", {"impf", "act", "part"}, "imperfect l-participles"}, }, } }, {"has", "lptcp", {"multi", {"has", "aor", "aorist l-participles"}, {"has", "impf", "imperfect l-participles"}, {"hasall", {"m", "s"}, "participles", "participle forms"}, }, }, {"hasall", {"col", "pl"}, "collective plurals"}, } cats["nl"] = { {"tags=", {"pl", "imp"}, {labels = {"plural imperative"}}}, {"has", "sub", {labels = {"subjunctive"}}}, -- Depending on the part of speech, a specific case-form category is added, or if no -- recognized part of speech is present, the generic case-form category is used. The -- label "archaic" will also be added, for which see [[Module:labels/data/lang/nl]]. {"hasany", {"acc", "dat", "gen"}, {"multi", {labels = {"archaic case form"}}, {"cond", {"p=", "n", "noun case forms"}, {"p=", "a", "adjective case forms"}, -- Only goes to "case forms" umbrella cat if no (/no recognized) POS given "case forms" } } } } cats["pl"] = { {"has", "short", "short adjective forms"}, } cats["sa"] = { {"has", "desid", {"multi", "desiderative verbs", "verbs derived from primitive verbs" }, }, {"has", "freq", {"multi", "frequentative verbs", "verbs derived from primitive verbs" }, }, {"has", "root", "root forms"}, } cats["sco"] = { {"hasall", {"simple", "past"}, "verb simple past forms"}, {"hasall", {"3", "s", "pres", "ind"}, "third-person singular forms"}, } cats["sv"] = { {"cond", -- The display of these labels is controlled by [[Module:labels/data/lang/sv]]. {"hasall", {"past", "sub"}, {labels = {"past subjunctive"}}}, {"hasall", {"pres", "sub"}, {labels = {"present subjunctive"}}}, -- If it just has 'sub' (subjunctive), not labeled as present or past, treat it like the past subjunctive, whose label -- is "weaker" than the present subjunctive (dated vs. archaic). {"has", "sub", {labels = {"past subjunctive"}}}, {"hasall", {"1", "p", "pres"}, {labels = {"1st plural present indicative"}}}, {"hasall", {"2", "p", "pres"}, {labels = {"2nd plural present indicative"}}}, {"hasall", {"p", "pres"}, {labels = {"plural present indicative"}}}, {"hasall", {"1", "p", "past"}, {labels = {"1st plural past indicative"}}}, {"hasall", {"2", "p", "past"}, {labels = {"2nd plural past indicative"}}}, {"hasall", {"p", "past"}, {labels = {"plural past indicative"}}}, {"hasall", {"1", "p", "imp"}, {labels = {"1st plural imperative"}}}, {"hasall", {"p", "imp"}, {labels = {"2nd plural imperative"}}}, }, } cats["uk"] = { {"has", "part", {"multi", "participles", "verb forms", {"cond", {"hasall", {"pres", "act"}, "present active participles"}, {"hasall", {"pres", "pass"}, "present passive participles"}, {"hasall", {"pres", "adv"}, "present adverbial participles"}, {"hasall", {"past", "act"}, "past active participles"}, {"hasall", {"past", "pass"}, "past passive participles"}, {"hasall", {"past", "adv"}, "past adverbial participles"}, }, } }, } return cats rt42p5qqu4t6u9p0w06eewf6nunx2kg ကဏ္ဍ:ပိဉ်တိစ်ကြိယာႏဖုံႏ 14 4409 11936 10001 2025-06-23T12:47:13Z 咽頭べさ 11 [[ကဏ္ဍ:ပိဉ်တိစ် ကြိယာႏ]] စာမျက်နှာကို [[ကဏ္ဍ:ပိဉ်တိစ်ကြိယာႏဖုံႏ]] သို့ 咽頭べさက ရွှေ့ခဲ့သည် 10001 wikitext text/x-wiki [[ကဏ္ဍ:ပိဉ်တိစ်ဘာႏသာႏငဝ်းငွါ]] 5pdhz0oxp5yjemh26cbr1omoedykwac တမ်းပလေက်:fr-adjective 10 4416 11957 10010 2025-06-23T13:14:05Z 咽頭べさ 11 [[တမ်းပလေက်:fr-adj]] စာမျက်နှာကို [[တမ်းပလေက်:fr-adjective]] သို့ 咽頭べさက ရွှေ့ခဲ့သည် 10010 wikitext text/x-wiki {{#invoke:fr-headword|show|နာမဝိသေသန}}<!-- --><noinclude>{{documentation}}</noinclude> 5x3w2sh496ndkg8w2uvwfbvjdzgshfc ကဏ္ဍ:ပိဉ်တိစ်နာမဝိသေသနဖုံႏ 14 4417 11940 10011 2025-06-23T12:48:46Z 咽頭べさ 11 [[ကဏ္ဍ:ပိဉ်တိစ် နာမဝိသေသန]] စာမျက်နှာကို [[ကဏ္ဍ:ပိဉ်တိစ်နာမဝိသေသနဖုံႏ]] သို့ 咽頭べさက ရွှေ့ခဲ့သည် 10011 wikitext text/x-wiki [[ကဏ္ဍ:ပိဉ်တိစ်ဘာႏသာႏငဝ်းငွါ]] 5pdhz0oxp5yjemh26cbr1omoedykwac ကဏ္ဍ:ပိဉ်တိစ်ကြိယာႏဝိသေသနဖုံႏ 14 4420 11938 10014 2025-06-23T12:48:06Z 咽頭べさ 11 [[ကဏ္ဍ:ပိဉ်တိစ် ကြိယာႏဝိသေသန]] စာမျက်နှာကို [[ကဏ္ဍ:ပိဉ်တိစ်ကြိယာႏဝိသေသနဖုံႏ]] သို့ 咽頭べさက ရွှေ့ခဲ့သည် 10014 wikitext text/x-wiki [[ကဏ္ဍ:ပိဉ်တိစ်ဘာႏသာႏငဝ်းငွါ]] 5pdhz0oxp5yjemh26cbr1omoedykwac မြေပြို 0 4504 12104 10158 2025-06-24T02:57:08Z 咽頭べさ 11 12104 wikitext text/x-wiki ==မန်း== ===အငေါဝ်းထန်ႏ=== {{my-IPA}} ===ကြိယာႏ=== {{my-verb}} * ဟံႏသွူꩻ။ ===CHARS=== {{my-adj}} * [[မြေ]]။ :ဟံႏ။ * [[ပြို]]။ :သွူꩻ။ ==={{words}}=== * မြေပြိုသည်။ * မြေပြိုသော။ ===SENTS=== * မြေပြိုခြင်းခြင်းကြောင့် လူအများအပြား သေဆုံးကြရသည်။ : ဟံႏသွူထာꩻတဲင် လိုꩻသီအာမွေစွဥ်ႏထာꩻသွူ။ dsur4pe7ewbvsofta2sffbqd9h8e6g0 မော်ဂျူး:fr-pron 828 4762 11985 10748 2025-06-23T14:43:20Z 咽頭べさ 11 11985 Scribunto text/plain --[=[ Author: Benwing, rewritten from original by Kc kennylau Generates French IPA from spelling. Implements template {{fr-IPA}}; also used in [[Module:fr-verb]] (particularly [[Module:fr-verb/pron]], the submodule handling pronunciation of verbs). --]=] local export = {} local m_str_utils = require("Module:string utilities") local pron_utilities_module = "Module:pron utilities" local table_module = "Module:table" local str_gsub = string.gsub local u = m_str_utils.char local rfind = m_str_utils.find local rsubn = m_str_utils.gsub local rmatch = m_str_utils.match local rsplit = m_str_utils.split local ulower = m_str_utils.lower local uupper = m_str_utils.upper local usub = m_str_utils.sub local ulen = m_str_utils.len local pages_where_redundancy_checking_is_disabled = { ["Appendix:Protologisms/Long words/Titin/French"] = true, } local TILDE = u(0x0303) -- tilde = ̃ local EXPLICIT_H = u(0xFFF0) local EXPLICIT_X = u(0xFFF1) local EXPLICIT_J = u(0xFFF2) local explicit_sound_to_substitution = { ["h"] = EXPLICIT_H, ["x"] = EXPLICIT_X, ["j"] = EXPLICIT_J, } local explicit_substitution_to_sound = {} local explicit_substitution_regex = {} for from, to in pairs(explicit_sound_to_substitution) do explicit_substitution_to_sound[to] = from table.insert(explicit_substitution_regex, to) end explicit_substitution_regex = "[" .. table.concat(explicit_substitution_regex) .. "]" -- If enabled, compare this module with new version of module in -- [[Module:User:Benwing2/fr-pron]] to make sure all pronunciations are the same. -- To check for differences, go to [[Wiktionary:Tracking/fr-pron/different-pron]] -- and look at what links to the page. local test_new_fr_pron_module = false -- version of rsubn() that discards all but the first return value local function rsub(term, foo, bar) local retval = rsubn(term, foo, bar) return retval end -- apply rsub() repeatedly until no change local function rsub_repeatedly(term, foo, bar) while true do local new_term = rsub(term, foo, bar) if new_term == term then return term end term = new_term end end local function ine(x) if x == "" then return nil else return x end end local function track(page) local m_debug = require("Module:debug").track("fr-pron/" .. page) return true end -- pairs of consonants where a schwa between them cannot be deleted in VCəCV -- within a word local no_delete_schwa_in_vcvcv_word_internally_list = { 'ʁʁ', 'ɲʁ', 'ɲl' } -- generate set local no_delete_schwa_in_vcvcv_word_internally = {} for _, x in ipairs(no_delete_schwa_in_vcvcv_word_internally_list) do no_delete_schwa_in_vcvcv_word_internally[x] = true end -- pairs of consonants where a schwa between them cannot be deleted in VCəVC -- across a word boundary; primarily, consonants that are the same except -- possibly for voicing local no_delete_schwa_in_vcvcv_across_words_list = { 'kɡ', 'ɡk', 'kk', 'ɡɡ', -- WARNING: IPA ɡ used here 'td', 'dt', 'tt', 'dd', 'bp', 'pb', 'pp', 'bb', 'ʃʒ', 'ʒʃ', 'ʃʃ', 'ʒʒ', 'fv', 'vf', 'ff', 'vv', 'sz', 'zs', 'ss', 'zz', 'jj', 'ww', 'ʁʁ', 'll', 'nn', 'ɲɲ', 'mm' -- FIXME, should be others } -- generate set local no_delete_schwa_in_vcvcv_across_words = {} for _, x in ipairs(no_delete_schwa_in_vcvcv_across_words_list) do no_delete_schwa_in_vcvcv_across_words[x] = true end local remove_diaeresis_from_vowel = {['ä']='a', ['ë']='e', ['ï']='i', ['ö']='o', ['ü']='u', ['ÿ']='i'} -- True if C1 and C2 form an allowable onset (in which case we always -- attempt to place them after the syllable break) local function allow_onset_2(c1, c2) -- WARNING: Both IPA and non-IPA g below, and both r and ʁ, because it is -- called both before and after the substitutions of these chars. return (c2 == "r" or c2 == "ʁ") and rmatch(c1, "[bkdfgɡpstv]") or c2 == "l" and rmatch(c1, "[bkfgɡpsv]") or c1 == "d" and c2 == "ʒ" or c1 ~= "j" and (c2 == "j" or c2 == "w" or c2 == "W" or c2 == "ɥ") end -- list of vowels, including both input Latin and output IPA; note that -- IPA nasal vowels are two-character sequences with a combining tilde, -- which we include as the last char local oral_vowel_no_schwa_no_i = "aeouAEOUéàèùâêôûäëöüăŏŭɑɛɔæœø" local oral_vowel_schwa = "əƏĕė" local oral_vowel_i = "iyIYîŷïÿ" local oral_vowel = oral_vowel_no_schwa_no_i .. oral_vowel_schwa .. oral_vowel_i local nasal_vowel = TILDE local non_nasal_c = "[^" .. TILDE .. "]" local vowel_no_schwa = oral_vowel_no_schwa_no_i .. oral_vowel_i .. nasal_vowel local vowel = oral_vowel .. nasal_vowel local vowel_c = "[" .. vowel .. "]" local vowel_no_schwa_c = "[" .. vowel_no_schwa .. "]" local vowel_maybe_nasal_r = "[" .. oral_vowel .. "]" .. TILDE .. "?" local non_vowel_c = "[^" .. vowel .. "]" local oral_vowel_c = "[" .. oral_vowel .. "]" -- FIXME: Previously vowel_no_i specified the vowels explicitly and didn't include the nasal combining diacritic; -- should we include it? local vowel_no_i = oral_vowel_no_schwa_no_i .. oral_vowel_schwa local vowel_no_i_c = "[" .. vowel_no_i .. "]" -- special characters that should be carried through but largely ignored when -- syllabifying; single quote prevents interpretation of sequences, -- ‿ indicates liaison, ⁀ is a word boundary marker, - is a literal hyphen -- (we include word boundary markers because they mark word boundaries with -- words joined by hyphens, but should be ignored for syllabification in -- such a case), parens are used to explicitly indicate an optional sound, esp. -- a schwa local syljoiner_c = "[_'‿⁀%-()]" -- don't include syllable marker or space local opt_syljoiners_c = syljoiner_c .. "*" local schwajoiner_c = "[_'‿⁀%-. ]" -- also include . and space but not () local opt_schwajoiners_c = schwajoiner_c .. "*" local cons_c = "[^" .. vowel .. ".⁀ %-]" -- includes underscore, quote and liaison marker local cons_no_liaison_c = "[^" .. vowel .. ".⁀‿ %-]" -- includes underscore and quote but not liaison marker local real_cons_c = "[^" .. vowel .. "_'‿.⁀ %-()]" -- excludes underscore, quote and liaison marker local cons_or_joiner_c = "[^" .. vowel .. ". ]" -- includes all joiners local front_vowel = "eiîéèêĕėəɛæœyŷ" -- should not include capital E, used in cœur etc. local front_vowel_c = "[" .. front_vowel .. "]" local word_begin = "'‿⁀%-" -- characters indicating the beginning of a word local word_begin_c = "[" .. word_begin .. "]" local function respelling_to_IPA(data) local prons = export.show(data.respelling, data.args.pos.default, data.args.noalternatives, data.pagename) -- Check whether explicitly given pronunciations are redundant. if data.orig_respelling and data.orig_respelling ~= "+" then local full_pagename = mw.title.getCurrentTitle().fullText if not pages_where_redundancy_checking_is_disabled[full_pagename] then local default_prons = export.show(nil, data.args.pos, data.args.noalternatives, data.pagename, "no test new module") local is_redundant, is_non_redundant for _, pron in ipairs(prons) do if #default_prons == 1 and default_prons[1] == pron or #default_prons > 1 and require(table_module).contains(default_prons, pron) then is_redundant = true else is_non_redundant = true end end if is_redundant and not is_non_redundant then track("redundant-pron") elseif is_non_redundant and not is_redundant then track("needed-pron") elseif is_redundant and is_non_redundant then track("partly-redundant-pron") end end end for i, pron in ipairs(prons) do prons[i] = "/" .. pron .. "/" end return prons end --[==[ Actual implementation of {{tl|fr-IPA}}, compatible in spirit with {{tl|IPA}}. ]==] function export.fr_IPA(frame) local parent_args = frame:getParent().args local augment_params = { ["noalternatives"] = {type = "boolean"}, ["noalt"] = {type = "boolean", alias_of = "noalternatives"}, } local augment_param_mod_spec = { {param = "qual", alias_of = "q", separate_no_index = false}, -- deprecated {param = "n", alias_of = "ref"}, -- deprecated {param = "pos", separate_no_index = true}, -- pos= by itself has a special meaning } return require(pron_utilities_module).format_prons { lang = require("Module:languages").getByCode("fr"), respelling_to_IPA = respelling_to_IPA, raw_args = parent_args, augment_params = augment_params, augment_param_mod_spec = augment_param_mod_spec, track_module = "fr-pron", } end function export.canonicalize_pron(text, pagename) if not text or text == "+" then text = pagename end text = rsub(text, "%[([hHxXjJ])%]", function(sound) return explicit_sound_to_substitution[ulower(sound)] end) if rfind(text, "^%[.*%]$") then local subs = rsplit(rmatch(text, "^%[(.*)%]$"), ",") text = pagename for _, sub in ipairs(subs) do local fromto = rsplit(sub, ":") if #fromto ~= 2 then error("Bad substitution spec " .. sub .. " in {{fr-IPA}}") end local from, to = fromto[1], fromto[2] if rfind(from, "^~") then -- formerly, ~ was required to match within a word from = rmatch(from, "^~(.*)$") end local newtext = text if rfind(from, "^%^") then -- whole-word match from = rmatch(from, "^%^(.*)$") newtext = rsub(text, "%f[%a]" .. require("Module:string utilities").pattern_escape(from) .. "%f[%A]", to) else newtext = rsub(text, require("Module:string utilities").pattern_escape(from), to) end if newtext == text then error("Substitution spec " .. sub .. " didn't match respelling '" .. text .. "'") end text = newtext end end text = ulower(text) return text end function export.show(text, pos, noalternatives, pagename, no_test_new_module) -- check_new_module=1 can be passed from a bot to compare to the new -- module. In that case, if there's a difference, the return value will -- be a string "OLD_RESULT || NEW_RESULT". -- -- no_test_new_module can be passed from module code to disable the -- new-module check. This is used when checking for redundant pronunciation -- to avoid excess triggering of the [[Wiktionary:Tracking/fr-pron/different-pron]] -- page. local check_new_module if type(text) == "table" then pos = ine(text.args.pos) noalternatives = ine(text.args.noalternatives) pagename = ine(text.args.pagename) check_new_module = ine(text.args.check_new_module) text = ine(text.args[1]) end local new_module_result -- Test code to compare existing module to new one. if (test_new_fr_pron_module or check_new_module) and not no_test_new_module then local m_new_fr_pron = require("Module:User:Benwing2/fr-pron") new_module_result = m_new_fr_pron.show(text, pos, noalternatives, pagename) end pagename = pagename or mw.loadData("Module:headword/data").pagename text = export.canonicalize_pron(text, pagename) -- track quote-separator if different numbers of quote symbols if ulen(rsub(text, "[^']", "")) ~= ulen(rsub(pagename, "[^']", "")) then track("quote-separator") end -- To simplify checking for word boundaries and liaison markers, we -- add ⁀ at the beginning and end of all words, and remove it at the end. -- Note that the liaison marker is ‿. text = rsub(text, "%s*,%s*", '⁀⁀ | ⁀⁀') text = rsub(text, "%s+", '⁀ ⁀') text = rsub(text, "%-+", '⁀-⁀') text = '⁀⁀' .. text .. '⁀⁀' -- various early substitutions text = str_gsub(text, 'ǝ', 'ə') -- replace wrong schwa with same-looking correct one text = str_gsub(text, 'œu', 'Eu') -- capital E so it doesn't trigger c -> s text = str_gsub(text, 'oeu', 'Eu') text = str_gsub(text, 'œil', 'Euil') text = str_gsub(text, 'œ', 'æ') -- keep as æ, mapping later to è or é -- Handle soft c, g. Do these near the very beginning before any changes -- that disturb the orthographic front/back vowel distinction (e.g. -- -ai -> -é when pos == "v" in the next section); but after special -- handling of œu (which should not trigger softening, as in cœur), whereas -- other occurrences of œ do trigger softening (cœliaque). text = rsub(text, "c('?" .. front_vowel_c .. ')', 'ç%1') text = rsub(text, 'ge([aoAOàâôäöăŏɔ])', 'j%1') text = rsub(text, 'g(' .. front_vowel_c .. ')', 'j%1') if pos == "v" then -- special-case for verbs text = rsub(text, 'ai⁀', 'é⁀') -- portions, retiens as verbs should not have /s/ text = rsub(text, 'ti([oe])ns([⁀‿])', "t_i%1ns%2") -- retienne, retiennent as verbs should not have /s/ text = rsub(text, 't(ienne[⁀‿])', "t_%1") text = rsub(text, 't(iennent[⁀‿])', "t_%1") -- final -ent is silent except in single-syllable words (ment, sent); -- vient, tient, and compounds will have to be special-cased, no easy -- way to distinguish e.g. initient (silent) from retient (not silent). text = rsub(text, '(' .. vowel_c .. cons_no_liaison_c .. '*' .. ')ent⁀', '%1e⁀') text = rsub(text, '(' .. vowel_c .. cons_no_liaison_c .. '*' .. ')ent‿', '%1ət‿') end -- various early substitutions #2 text = rsub(text, '[aä]([sz][⁀‿])', 'â%1') -- pas, gaz text = str_gsub(text, 'à', 'a') text = str_gsub(text, 'ù', 'u') text = str_gsub(text, 'î', 'i') text = str_gsub(text, '[Ee]û', 'ø') text = str_gsub(text, 'û', 'u') -- absolute, obstacle, subsumer, obtus, obtenir, etc.; but not toubibs text = str_gsub(text, 'b([st][^⁀‿])', 'p%1') text = str_gsub(text, 'ph', 'f') text = str_gsub(text, 'gn', 'ɲ') text = str_gsub(text, 'compt', 'cont') text = str_gsub(text, 'psych', 'psik') -- -chrom-, -chron-, chrétien, etc.; -chlor-, etc.; -techn-, arachn-, etc.; use 'sh' to get /ʃ/ text = str_gsub(text, 'ch([rln])', 'c%1') -- dinosaure, taure, restaurant, etc.; in unstressed syllables both /ɔ/ and /o/ are usually possible, -- but /ɔ/ is more common/natural; not in -eaur-, which occurs in compounds e.g. [[Beauregard]] text = str_gsub(text, '([^e])aur', '%1or') text = rsub(text, '(' .. word_begin_c .. ')désh', '%1déz') text = rsub(text, '(' .. word_begin_c .. ')et([⁀‿])', '%1é%2') text = rsub(text, '(' .. word_begin_c .. ')es([⁀‿])', '%1ès%2') text = rsub(text, '(' .. word_begin_c .. ')est([⁀‿])', '%1èt%2') text = rsub(text, '(' .. word_begin_c .. ')ress', '%1rəss') -- ressortir, etc. should have schwa text = rsub(text, '(' .. word_begin_c .. ')intrans(' .. vowel_c .. ')', '%1intranz%2') text = rsub(text, '(' .. word_begin_c .. ')trans(' .. vowel_c .. ')', '%1tranz%2') text = rsub(text, '(' .. word_begin_c .. ')eu', '%1ø') -- even in euro- text = rsub(text, '(' .. word_begin_c .. ')neur', '%1nør') -- neuro-, neuralgie, etc. -- hyperactif, etc.; without this we get /i.pʁak.tif/ etc. text = rsub(text, '(' .. word_begin_c .. ')hyper', '%1hypèr') -- superessif, etc.; without this we get /sy.pʁɛ.sif/ etc. text = rsub(text, '(' .. word_begin_c .. ')super', '%1supèr') -- adverbial -emment is pronounced -amment text = rsub(text, 'emment([⁀‿])', 'amment%1') text = rsub(text, 'ie(ds?[⁀‿])', 'ié%1') -- pied, assieds, etc. text = rsub(text, '[eæ]([dgpt]s?[⁀‿])', 'è%1') -- permet text = rsub(text, 'ez([⁀‿])', 'éz%1') -- assez, avez, etc. text = str_gsub(text, 'er‿', 'èr‿') -- premier étage text = rsub(text, '([⁀‿]' .. cons_c .. '*)er(s?[⁀‿])', '%1èr%2') -- cher, fer, vers text = rsub(text, 'er(s?[⁀‿])', 'ér%1') -- premier(s) text = rsub(text, '(' .. word_begin_c .. cons_c .. '*)e(s[⁀‿])', '%1é%2') -- ses, tes, etc. text = str_gsub(text, 'oien', 'oyen') -- iroquoien -- bien, européens, païen, moyen; only word finally or before final s -- (possibly in liaison); doesn't apply to influence, omniscient, réengager, -- etc.; cases where -ien- is [jɛ̃] elsewhere in the word require respelling -- using 'iain' or 'ien-', e.g. 'tient', 'viendra', 'bientôt', 'Vientiane' text = rsub(text, '([iïéy])en(s?[⁀‿])', '%1ɛn%2') -- special-case for words beginning with bien- (bientôt, bienvenu, bienheureux, etc.) text = rsub(text, '(' .. word_begin_c .. ')bien', '%1biɛn') --s, c, g, j, q (soft c/g handled above; ç handled below after dropping -- silent -s; x handled below) text = str_gsub(text, 'cueil', 'keuil') -- accueil, etc. text = str_gsub(text, 'gueil', 'gueuil') -- orgueil text = rsub(text, '(' .. vowel_c .. ')s(' .. vowel_c .. ')', '%1z%2') text = str_gsub(text, "qu'", "k'") -- qu'on text = rsub(text, 'qu(' .. vowel_c .. ')', 'k%1') -- gu+vowel -> g+vowel, but gu+vowel+diaeresis -> gu+vowel text = rsub(text, 'gu(' .. vowel_c .. ')', function(vowel) local undo_diaeresis = remove_diaeresis_from_vowel[vowel] return undo_diaeresis and 'gu' .. undo_diaeresis or 'g' .. vowel end) text = str_gsub(text, 'gü', 'gu') -- aiguë might be spelled aigüe -- parking, footing etc.; also -ing_ e.g. swinguer respelled swing_guer, -- Washington respelled Washing'tonne text = rsub(text, '(' .. cons_c .. ")ing(s?[_'⁀‿])", "%1iŋ%2") text = str_gsub(text, 'ngt', 'nt') -- vingt, longtemps text = str_gsub(text, 'j', 'ʒ') text = str_gsub(text, 's?[cs]h', 'ʃ') text = str_gsub(text, '[cq]', 'k') -- following two must follow s -> z between vowels text = rsub(text, '([^sçx⁀])ti([oeɛ])n', '%1si%2n') -- tion, tien text = rsub(text, '([^sçx⁀])ti([ae])l', '%1si%2l') -- tial, tiel -- special hack for uï; must follow guï handling and precede ill handling text = str_gsub(text, 'uï', 'ui') -- ouir, etc. -- special hack for oel, oil, oêl; must follow intervocal s -> z and -- ge + o -> j, and precede -il- handling text = rsub(text, 'o[eê]l', 'wAl') -- moelle, poêle -- poil but don't affect -oill- (otherwise interpreted as /ɔj/) text = str_gsub(text, 'oil([^l])', 'wAl%1') -- ill, il; must follow j -> ʒ above -- NOTE: In all of the following, we purposely do not check for a vowel -- following -ill-, so that respellings can use it before a consonant -- (e.g. [[boycotter]] respelled 'boillcotter') -- (1) special-casing for C+uill (juillet, cuillère, aiguille respelled -- aiguïlle) text = rsub_repeatedly(text, '(' .. cons_c .. ')uill', '%1ɥij') -- (2) -ill- after a vowel; repeat if necessary in case of VillVill -- sequence (ailloille respelling of ayoye) text = rsub_repeatedly(text, '(' .. vowel_c .. ')ill', '%1j') -- (3) any other ill, except word-initially (illustrer etc.) text = rsub(text, '([^⁀])ill', '%1ij') -- (4) final -il after a vowel; we consider final -Cil to contain a -- pronounced /l/ (e.g. 'il', 'fil', 'avril', 'exil', 'volatil', 'profil') text = rsub(text, '(' .. vowel_c .. ')il([⁀‿])', '%1j%2') -- (5) -il- after a vowel, before a consonant (not totally necessary; -- unlikely to occur normally, respelling can use -ill-) text = rsub(text, '(' .. vowel_c .. ')il(' .. cons_c .. ')', '%1j%2') -- y; include before removing final -e so we can distinguish -ay from -- -aye text = rsub(text, 'ay([⁀‿])', 'ai%1') -- Gamay text = str_gsub(text, 'éy', 'éj') -- used in respellings, eqv. to 'éill' text = rsub(text, '(' .. vowel_no_i_c .. ')y', '%1iy') text = rsub(text, 'yi([' .. vowel .. '.])', 'y.y%1') text = str_gsub(text, "'y‿", "'j‿") -- il n'y‿a text = rsub_repeatedly(text, '(' .. cons_c .. ')y(' .. cons_c .. ')', '%1i%2') text = rsub(text, '(' .. cons_c .. ')ye?([⁀‿])', '%1i%2') text = rsub(text, '(' .. word_begin_c .. ')y(' .. cons_c .. ')', '%1i%2') text = str_gsub(text, '⁀y⁀', '⁀i⁀') -- CyV -> CiV; will later be converted back to /j/ in most cases, but -- allows correct handling of embryon, dryade, cryolithe, glyoxylique, etc. text = rsub(text, '(' .. cons_c .. ')y(' .. vowel_c .. ')', '%1i%2') text = str_gsub(text, 'y', 'j') -- nasal hacks -- make 'n' before liaison in certain cases both nasal and pronounced text = rsub(text, '(' .. word_begin_c .. '[mts]?on)‿', '%1N‿') --mon, son, ton, on text = str_gsub(text, "('on)‿", '%1N‿') --qu'on, l'on text = str_gsub(text, '([eɛu]n)‿', '%1N‿') --en, bien, un, chacun etc. -- in bon, certain etc. the preceding vowel isn't nasal text = str_gsub(text, 'n‿', "N‿") -- other liaison hacks text = str_gsub(text, 'd‿', 't‿') -- grand arbre, pied-à-terre text = str_gsub(text, '[sx]‿', 'z‿') -- vis-a-vis, beaux-arts, premiers enfants, etc. text = str_gsub(text, 'f‿', 'v‿') -- neuf ans, etc. -- treat liaison consonants that would be dropped as if they are extra-word, -- so that preceding "word-final" letters are still dropped and preceding -- vowels take on word-final qualities text = str_gsub(text, '([bdgkpstxz]‿)', '⁀%1') text = str_gsub(text, 'i‿', 'ij‿') -- y a-t-il, gentil enfant --silent letters -- do this first so we also drop preceding letters if needed text = str_gsub(text, '[sz]⁀', '⁀') -- final -x silent in prix, chevaux, eux (with eu -> ø above) text = str_gsub(text, '([iuø])x⁀', '%1⁀') -- silence -c and -ct in nc(t), but not otherwise text = str_gsub(text, 'nkt?⁀', 'n⁀') text = str_gsub(text, '([ks])t⁀', '%1T⁀') -- final -kt, -st pronounced text = str_gsub(text, 'ér⁀', 'é⁀') -- premier, converted earlier to premiér -- p in -mp, b in -mb will be dropped, but temporarily convert to capital -- letter so a trace remains below when we handle nasals text = str_gsub(text, 'm([bp])⁀', function(bp) local capbp = {b='B', p='P'} return 'm' .. capbp[bp] .. '⁀' end) -- plomb -- do the following after dropping r so we don't affect -rt text = str_gsub(text, '[dgpt]⁀', '⁀') -- remove final -e in various circumstances; leave primarily when -- preceded by two or more distinct consonants; in V[mn]e and Vmme/Vnne, -- use [MN] so they're pronounced in full text = rsub(text, '(' .. vowel_c .. ')n+e([⁀‿])', '%1N%2') text = rsub(text, '(' .. vowel_c .. ')m+e([⁀‿])', '%1M%2') text = rsub(text, '(' .. cons_c .. ')%1e([⁀‿])', '%1%2') text = rsub(text, '([mn]' .. cons_c .. ')e([⁀‿])', '%1%2') text = rsub(text, '(' .. vowel_c .. cons_c .. '?)e([⁀‿])', '%1%2') -- ç; must follow s -> z between vowels (above); do after dropping final s -- so that ç can be used in respelling to force a pronounced s text = str_gsub(text, 'ç', 's') -- x; (h)ex- at beginning of word (examen, exister, hexane, etc.) and after -- a vowel (coexister, réexaminer) and after in- (inexact, inexorable) is -- pronounced [egz], x- at beginning of word also pronounced [gz], all- -- other x's pronounced [ks] (including -ex- in lexical, sexy, perplexité, -- etc.). text = rsub(text, '([' .. word_begin .. vowel .. ']h?)[eæ]x(h?' .. vowel_c .. ')', '%1egz%2') text = rsub(text, '(' .. word_begin_c .. 'in)[eæ]xh?(h?' .. vowel_c .. ')', '%1egz%2') text = rsub(text, '(' .. word_begin_c .. ')x', '%1gz') text = str_gsub(text, 'x', 'ks') -- double consonants: eCC treated specially, then CC -> C; do after -- x -> ks so we handle exciter correctly text = rsub(text, '(' .. word_begin_c .. ')e([mn])%2(' .. vowel_c .. ')', '%1en_%2%3') -- emmener, ennui text = rsub(text, '(' .. word_begin_c .. ')(h?)[eæ](' .. cons_c .. ')%3', '%1%2é%3') -- effacer, essui, errer, henné text = rsub(text, '(' .. word_begin_c .. ')dess', '%1déss') -- dessécher, dessein, etc. text = rsub(text, '[eæ](' .. cons_c .. ')%1', 'è%1') -- mett(r)ons, etc. text = rsub(text, '(' .. cons_c .. ')%1', '%1') --diphthongs --uppercase is used to avoid the output of one change becoming the input --to another; we later lowercase the vowels; î and û converted early; --we do this before i/u/ou before vowel -> glide (for e.g. bleuet), --and before nasal handling because e.g. ou before n is not converted --into a nasal vowel (Bouroundi, Cameroun); au probably too, but there --may not be any such words text = str_gsub(text, 'ou', 'U') text = str_gsub(text, 'e?au', 'O') text = str_gsub(text, '[Ee]u([zt])', 'ø%1') text = rsub(text, '[Ee]uh?([⁀‿])', 'ø%1') -- (s)chleuh has /ø/ text = rsub(text, '[Ee][uŭ]', 'œ') text = str_gsub(text, '[ae]i', 'ɛ') -- Before implementing nasal vowels, convert nh to n to correctly handle -- inhérent, anhédonie, bonheur, etc. But preserve enh- to handle -- enhardir, enharnacher, enhaché, enhoncher, enhotter, enhucher (all -- with "aspirate h"). Words with "mute h" need respelling with enn-, e.g. -- enharmonie, enherber. text = rsub(text, '(' .. word_begin_c .. ')enh', '%1en_h') text = str_gsub(text, 'nh', 'n') -- Nasalize vowel + n, m -- Do before syllabification so we syllabify quatre-vingt-un correctly. -- We affect (1) n before non-vowel, (2) m before b/p/f (including B/P, -- which indicate original b/p that are slated to be deleted in words like -- plomb, champs; f predominantly from original ph, as in symphonie, -- emphatiser; perhaps we should distinguish original ph from original f, -- as in occasional words such as Zemfira), (3) -om (nom, dom, pronom, -- condom, etc.) and (4) -aim/-eim (faim, Reims etc.), (4). We leave alone -- other m's, including most final m. We do this after diphthongization, -- which arguably simplifies things somewhat; but we need to handle the -- 'oi' diphthong down below so we don't run into problems with the 'noi' -- sequence (otherwise we'd map 'oi' to 'wa' and then nasalize the n -- because it no longer precedes a vowel). text = rsub_repeatedly(text, '(.)(' .. vowel_c .. ')([mn])(' .. non_vowel_c .. ')', function(v1, v2, mn, c) if mn == 'n' or rfind(c, '[bpBPf]') or (v2 == 'o' or v2 == 'ɛ') and c == '⁀' then local nasaltab = {['a']='ɑ̃', ['ä']='ɑ̃', ['e']='ɑ̃', ['ë']='ɑ̃', ['ɛ']='ɛ̃', ['i']='ɛ̃', ['ï'] = 'ɛ̃', ['o']='ɔ̃', ['ö']='ɔ̃', ['ø']='œ̃', ['œ']='œ̃', ['u']='œ̃', ['ü']='œ̃'} -- à jeun if v1 == 'o' and v2 == 'i' then return 'wɛ̃' .. c -- coin, point elseif nasaltab[v2] then return v1 .. nasaltab[v2] .. c end end return v1 .. v2 .. mn .. c end) -- special hack for maximum, aquarium, circumlunaire, etc. text = rsub(text, 'um(' .. non_vowel_c .. ')', 'ɔm%1') -- now remove BP that represent original b/p to be deleted, which we've -- preserved so far so that we know that preceding m can be nasalized in -- words like plomb, champs text = str_gsub(text, '[BP]', '') -- do after nasal handling so 'chinois' works correctly text = str_gsub(text, 'oi', 'wA') -- Remove silent h (but keep as _ after i/u to prevent glide conversion in -- nihilisme, jihad, etc.; don't do this after original ou, as souhaite is -- pronounced /swɛt/). -- Do after diphthongs to keep vowels apart as in envahir, but do -- before syllabification so it is ignored in words like hémorrhagie. text = str_gsub(text, '([iu])h', '%1_') text = str_gsub(text, 'h', '') --syllabify -- (1) break up VCV as V.CV, and VV as V.V; repeat to handle successive -- syllables text = rsub_repeatedly(text, "(" .. vowel_maybe_nasal_r .. opt_syljoiners_c .. ")(" .. real_cons_c .. "?" .. opt_syljoiners_c .. oral_vowel_c .. ')', '%1.%2') -- (2) break up other VCCCV as VC.CCV, and VCCV as VC.CV; repeat to handle successive syllables text = rsub_repeatedly(text, "(" .. vowel_maybe_nasal_r .. opt_syljoiners_c .. real_cons_c .. opt_syljoiners_c .. ")(" .. real_cons_c .. cons_or_joiner_c .. "*" .. oral_vowel_c .. ")", '%1.%2') local function resyllabify(text) -- (3) resyllabify C.C as .CC for various CC that can form an onset: -- resyllabify C.[lr] as .C[lr] for C = various obstruents; -- resyllabify d.ʒ, C.w, C.ɥ, C.j as .dʒ, .Cw, .Cɥ, .Cj (C.w comes from -- written Coi; C.ɥ comes from written Cuill; C.j comes e.g. from -- des‿yeux, although most post-consonantal j generated later); -- don't resyllabify j.j text = rsub(text, "(%(?)(" .. real_cons_c .. ")(" .. opt_syljoiners_c .. ")%.(" .. opt_syljoiners_c .. ")(" .. real_cons_c .. ")", function(lparen, c1, j1, j2, c2) if allow_onset_2(c1, c2) then return "." .. lparen .. c1 .. j1 .. j2 .. c2 end end) -- (4) resyllabify .CC as C.C for CC that can't form an onset (opposite of -- the previous step); happens e.g. in ouest-quart text = rsub(text, "%.(" .. opt_syljoiners_c .. ")(" .. real_cons_c .. ")(%)?)(" .. opt_syljoiners_c .. ")(" .. real_cons_c .. ")", function(j1, c1, rparen, j2, c2) if not allow_onset_2(c1, c2) and not (c1 == "s" and rfind(c2, "^[ptk]$")) then return j1 .. c1 .. rparen .. "." .. j2 .. c2 end end) -- (5) fix up dʒ and tʃ followed by another consonant (management respelled -- 'manadjment' or similar) text = rsub(text, "%.([%(]?[dt]" .. opt_syljoiners_c .. "[ʒʃ])(" .. opt_syljoiners_c .. ")(" .. real_cons_c .. ")", "%1.%2%3") return text end text = resyllabify(text) -- (6) eliminate diaeresis (note, uï converted early) text = rsub(text, '[äëïöüÿ]', remove_diaeresis_from_vowel) --single vowels text = str_gsub(text, 'â', 'ɑ') --don't do this, too many exceptions --text = rsub(text, 'a(%.?)z', 'ɑ%1z') text = str_gsub(text, 'ă', 'a') text = str_gsub(text, 'e%.j', 'ɛ.j') -- réveiller text = rsub_repeatedly(text, 'e%.(' .. cons_no_liaison_c .. '*' .. vowel_c .. ')', 'ə.%1') text = rsub(text, 'e([⁀‿])', 'ə%1') text = str_gsub(text, 'æ%.', 'é.') text = rsub(text, 'æ([⁀‿])', 'é%1') text = rsub(text, '[eèêæ]', 'ɛ') text = str_gsub(text, 'é', 'e') text = rsub(text, 'o([⁀‿])', 'O%1') text = str_gsub(text, 'o(%.?)z', 'O%1z') text = rsub(text, '[oŏ]', 'ɔ') text = str_gsub(text, 'ô', 'o') text = str_gsub(text, 'u', 'y') --other consonants text = str_gsub(text, 'r', 'ʁ') text = str_gsub(text, 'g', 'ɡ') -- use IPA variant of g --(mostly) final schwa deletions (FIXME, combine with schwa deletions below) --1. delete all instances of ė text = rsub(text, '%.([^.⁀]+)ė', '%1') --2. delete final schwa, only in the last word, not in single-syllable word -- (⁀. can occur after a hyphen, e.g. in puis-je) text = rsub(text, '([^⁀])%.([^ə.⁀]+)ə⁀⁀', '%1%2⁀') --3. delete final schwa before vowel in the next word, not in a single- -- syllable word (croyez-le ou non); the out-of-position %4 looks weird -- but the effect is that we preserve the initial period when there's a -- hyphen and period after the schwa (con.tre-.a.tta.quer -> -- con.tra.tta.quer) but not across a space (con.tre a.tta.quer -> -- contr a.tta.quer) text = rsub(text, '([^⁀])%.([^ə.⁀]+)ə⁀([⁀ %-]*)(%.?)(' .. vowel_c .. ')', '%1%4%2⁀%3%5') --4. delete final schwa before vowel in liaison, not in a single-syllable -- word text = rsub(text, '([^⁀]%.[^ə.⁀]+)ə‿%.?(' .. vowel_c .. ')', '%1‿%2') --5. delete schwa after any vowel (agréerons, soierie) text = rsub(text, '(' .. vowel_c .. ').ə', '%1') --6. make final schwa optional after two consonants except obstruent + approximant -- and [lmn] + ʁ text = rsub(text, '(' .. cons_c .. ')(' .. '%.?' .. ')(' .. cons_c .. ')ə⁀', function(a, dot, b) return a .. dot .. b .. ( rfind(a, '[bdfɡkpstvzʃʒ]') and rfind(b, '[mnlʁwj]') and 'ə' or rfind(a, '[lmn]') and b == 'ʁ' and 'ə' or '(ə)') .. '⁀' end) --i/u/ou -> glide before vowel -- -- do from right to left to handle continuions and étudiions -- correctly -- -- do repeatedly until no more subs (required due to right-to-left -- action) -- -- convert to capital J and W as a signal that we can convert them -- back to /i/ and /u/ later on if they end up preceding a schwa or -- following two consonants in the same syllable, whereas we don't -- do this to j from other sources (y or ill) and w from other -- sources (w or oi); will be lowercased later; not necessary to do -- something similar to ɥ, which can always be converted back to /y/ -- because it always originates from /y/. while true do local new_text = rsub(text, '^(.*)i%.?(' .. vowel_c .. ')', '%1J%2') new_text = rsub(new_text, '^(.*)y%.?(' .. vowel_c .. ')', '%1ɥ%2') new_text = rsub(new_text, '^(.*)U%.?(' .. vowel_c .. ')', '%1W%2') if new_text == text then break end text = new_text end --hack for agréions, pronounced with /j.j/ text = str_gsub(text, 'e%.J', 'ej%.J') --glides -> full vowels after two consonants in the same syllable --(e.g. fl, tr, etc.), but only glides from original i/u/ou (see above) --and not in the sequence 'ui' (e.g. bruit), and only when the second --consonant is l or r (not in abstiennent) text = rsub(text, '(' .. cons_c .. '[lʁ])J(' .. vowel_c .. ')', '%1i.j%2') text = rsub(text, '(' .. cons_c .. '[lʁ])W(' .. vowel_c .. ')', '%1u.%2') text = rsub(text, '(' .. cons_c .. '[lʁ])ɥ(' .. vowel_no_i_c .. ')', '%1y.%2') -- remove _ that prevents interpretation of letter sequences; do this -- before deleting internal schwas text = str_gsub(text, "_", "") -- internal schwa -- 1. delete schwa in VCəCV sequence word-internally when neither V is -- schwa, except in a few sequences such as ʁəʁ (déchirerez), ɲəʁ -- (indignerez), ɲəl (agnelet); use uppercase schwa when not deleting it, -- see below; FIXME, we might want to prevent schwa deletion with other -- consonant sequences text = rsub_repeatedly(text, '(' .. vowel_no_schwa_c .. ')%.(' .. real_cons_c .. ')ə%.(' .. real_cons_c .. ')(' .. vowel_no_schwa_c .. ')', function(v1, c1, c2, v2) if no_delete_schwa_in_vcvcv_word_internally[c1 .. c2] then return v1 .. '.' .. c1 .. 'Ə.' .. c2 .. v2 else return v1 .. c1 .. '.' .. c2 .. v2 end end) -- 2. delete schwa in VCə.Cʁə, VCə.Clə sequence word-internally -- (palefrenier, vilebrequin). text = rsub(text, '(' .. vowel_no_schwa_c .. ')%.(' .. real_cons_c .. ')ə%.(' .. real_cons_c .. ')([lʁ]ə)', '%1%2.%3%4') -- 3. make optional internal schwa in remaining VCəCV sequences, including -- across words, except between certain pairs of consonants (FIXME, needs -- to be smarter); needs to happen after /e/ -> /ɛ/ before schwa in next -- syllable and after removing ' and _ (or we need to take them into account); -- include .* so we go right-to-left, convert to uppercase schwa so -- we can handle sequences of schwas and not get stuck if we want to -- leave a schwa alone. text = rsub_repeatedly(text, '(.*' .. vowel_c .. opt_schwajoiners_c .. ')(' .. real_cons_c .. ')(' .. opt_schwajoiners_c.. ')ə(' .. opt_schwajoiners_c .. ')(' .. real_cons_c .. ')(' .. opt_schwajoiners_c .. vowel_c .. ')', function(v1, c1, sep1, sep2, c2, v2) if no_delete_schwa_in_vcvcv_across_words[c1 .. c2] then return v1 .. c1 .. sep1 .. 'Ə' .. sep2 .. c2 .. v2 else return v1 .. c1 .. sep1 .. '(Ə)' .. sep2 .. c2 .. v2 end end) -- lowercase any uppercase letters (AOUMNJW etc.); they were there to -- prevent certain later rules from firing text = ulower(text) --ĕ forces a pronounced schwa text = str_gsub(text, 'ĕ', 'ə') -- need to resyllabify again in cases like 'saladerie', where deleting the -- schwa above caused a 'd.r' boundary that needs to become '.dr'. text = resyllabify(text) -- rewrite apostrophes as liaison markers text = str_gsub(text, "'", "‿") -- convert explicit-notation characters to their final result text = rsub(text, explicit_substitution_regex, explicit_substitution_to_sound) -- remove hyphens text = rsub(text, '%-', '') local function flatmap_result(items, fun) local new = {} for _, item in ipairs(items) do local results = fun(item) for _, result in ipairs(results) do table.insert(new, result) end end return new end local result = {text} if not noalternatives then -- Include alternative with harmonized é/è if rfind(text, "ɛ%.") or rfind(text, "e" .. real_cons_c .. "+%.") then result = flatmap_result(result, function(item) return {item, rsub(rsub(item, "ɛ%.", "e."), "e(" .. real_cons_c .. "+%.)", "ɛ%1")} end) end if rfind(text, "ism[⁀‿]") then result = flatmap_result(result, function(item) return {item, rsub(item, "ism([⁀‿])", "izm%1")} end) end if rfind(text, "is%.mə[⁀‿]") then result = flatmap_result(result, function(item) return {item, rsub(item, "is%.mə([⁀‿])", "iz.mə%1")} end) end if rfind(text, "ɑ" .. non_nasal_c) then result = flatmap_result(result, function(item) return {rsub_repeatedly(item, "ɑ(" .. non_nasal_c .. ")", "a%1"), item} end) end end --remove word-boundary markers for i, item in ipairs(result) do result[i] = rsub(item, '⁀', '') end -- Handle test_new_fr_pron_module/check_new_module if specified. if new_module_result then if test_new_fr_pron_module then if not require("Module:table").deepEquals(new_module_result, result) then --error(table.concat(result, ",") .. " || " .. table.concat(new_module_result, ",")) track("different-pron") else track("same-pron") end end if check_new_module then if not require("Module:table").deepEquals(new_module_result, result) then result = table.concat(result, ",") .. " || " .. table.concat(new_module_result, ",") end end end return result end return export hnydscbskd5ve2vzz926nse2bl7hlf2 ကဏ္ဍ:ပိဉ်တိစ်ငဝ်းတဲႏဖုံႏ 14 4763 11946 10749 2025-06-23T12:51:21Z 咽頭べさ 11 [[ကဏ္ဍ:အဘိဓာန်ႏကို တပါသော့ꩻတဝ်းဒါႏ ပိဉ်တိစ်ဝေါဟာရဖုံႏ]] စာမျက်နှာကို [[ကဏ္ဍ:ပိဉ်တိစ်ငဝ်းတဲႏဖုံႏ]] သို့ 咽頭べさက ရွှေ့ခဲ့သည် 10749 wikitext text/x-wiki [[ကဏ္ဍ:ပိဉ်တိစ်ဘာႏသာႏငဝ်းငွါ]] 5pdhz0oxp5yjemh26cbr1omoedykwac ကဏ္ဍ:အငေါဝ်းထန်ႏလိဉ့်တွမ်ႏပိဉ်တိစ်ငေါဝ်းငွါဖုံႏ 14 4764 11944 10750 2025-06-23T12:49:52Z 咽頭べさ 11 [[ကဏ္ဍ:အငေါဝ်းထန်ႏလိဉ့်တွမ်ႏပိဉ်တိစ် ငေါဝ်းငွါဖုံႏ]] စာမျက်နှာကို [[ကဏ္ဍ:အငေါဝ်းထန်ႏလိဉ့်တွမ်ႏပိဉ်တိစ်ငေါဝ်းငွါဖုံႏ]] သို့ 咽頭べさက ရွှေ့ခဲ့သည် 10750 wikitext text/x-wiki [[ကဏ္ဍ:ပိဉ်တိစ်ဘာႏသာႏငဝ်းငွါ]] 5pdhz0oxp5yjemh26cbr1omoedykwac မော်ဂျူး:form of/data/2 828 4910 11971 11035 2025-06-23T14:05:51Z 咽頭べさ 11 11971 Scribunto text/plain --[=[ This module lists the less common recognized inflection tags, in the same format as for [[Module:form of/data/1]] (which contains the more common tags). We split the tags this way to save memory, so we avoid loading the less common tags in the majority of cases. ]=] local m_form_of_data = require("Module:form of/data") local APPENDIX = m_form_of_data.APPENDIX local WP = m_form_of_data.WP local WIKT = m_form_of_data.WIKT local tags = {} local shortcuts = {} ----------------------- Person ----------------------- tags["fourth-person"] = { "person", "wikt:fourth person", "4", 3348541, } tags["second-person-object form"] = { "person", APPENDIX, "2o", } ----------------------- Number ----------------------- tags["associative plural"] = { "number", WIKT, {"ass p", "ass pl", "assoc p", "assoc pl"}, } tags["collective"] = { "number", "collective number", "col", 694268, } tags["collective-possession"] = { "number", "collective number", {"cpos", "colpos"}, } tags["distributive paucal"] = { "number", WIKT, "dpau", } tags["paucal"] = { "number", WIKT, "pau", 489410, } tags["singulative"] = { "number", "singulative number", "sgl", 1450795, } tags["transnumeral"] = { "number", APPENDIX, "trn", 113631596, display = "singular or plural", } tags["trial"] = { "number", "trial number", "tri", 2142560, } ----------------------- Gender ----------------------- tags["natural feminine"] = { "gender", "gender", "natf", } tags["virile"] = { "gender", APPENDIX, "vr", } ----------------------- Animacy ----------------------- ----------------------- Tense/aspect ----------------------- tags["abtemporal"] = { "tense-aspect", WIKT, "abtemp", } tags["anterior"] = { "tense-aspect", "w:relative and absolute tense", "ant", } tags["cessative"] = { "tense-aspect", WP, "cess", 17027342, } -- Aspect in Tagalog; presumably similar to the perfect tense/aspect but not necessarily similar enough to use the same -- Wikidata ID tags["complete"] = { "tense-aspect", "w:Tagalog grammar#Aspect", "compl", } tags["concomitant"] = { "tense-aspect", WIKT, "concom", } tags["confirmative"] = { "tense-aspect", WIKT, "conf", } -- Aspect in Tagalog tags["contemplative"] = { "tense-aspect", "w:Tagalog grammar#Aspect", "contem", } tags["contemporal"] = { "tense-aspect", WIKT, "contemp", } tags["continuative"] = { "tense-aspect", WP, nil, 28130104, } tags["continuous"] = { "tense-aspect", "w:continuous aspect", "cont", 12721117, } tags["delimitative"] = { "tense-aspect", "w:delimitative aspect", "delim", 5316270, } tags["durative"] = { "tense-aspect", WP, "dur", } tags["futuritive"] = { "tense-aspect", WP, {"futv", "futrv"}, } tags["frequentative"] = { "tense-aspect", WP, "freq", 467562, } tags["habitual"] = { "tense-aspect", "w:habitual aspect", "hab", 5636904, } -- same as the habitual; used in Mongolian linguistics tags["habitive"] = { "tense-aspect", WP, "habv", } tags["immediative"] = { "tense-aspect", WIKT, {"imm", "immed"}, } tags["incidental"] = { "tense-aspect", WIKT, "incid", } tags["iterative"] = { "tense-aspect", "w:iterative aspect", "iter", 2866772, } tags["momentane"] = { "tense-aspect", WP, nil, 6897160, } tags["momentaneous"] = { "tense-aspect", WIKT, "mom", 115110791, } tags["posterior"] = { "tense-aspect", "w:relative and absolute tense", "post", } tags["preconditional"] = { "tense-aspect", WIKT, "precond", } -- Type of participle in Hindi; also called agentive or agentive-prospective tags["prospective"] = { "tense-aspect", "w:prospective aspect", "pros", } tags["purposive"] = { "tense-aspect", WIKT, "purp", } -- Aspect in Tagalog; presumably similar to the perfect tense/aspect but not necessarily similar enough to use the same -- Wikidata ID tags["recently complete"] = { "tense-aspect", "w:Tagalog grammar#Aspect", "rcompl", } tags["resultative"] = { "tense-aspect", WP, "res", 7316356, } tags["semelfactive"] = { "tense-aspect", WP, "semf", 7449203, } tags["serial"] = { "tense-aspect", WIKT, "ser", } tags["successive"] = { "tense-aspect", WIKT, "succ", } -- be careful not to clash with terminative case tag tags["terminative aspect"] = { "tense-aspect", "w:cessative aspect", "term", display = "terminative", } ----------------------- Mood ----------------------- tags["benedictive"] = { "mood", WP, "bened", 4887358, } tags["cohortative"] = { "mood", "w:cohortative mood", {"coho", "cohort"}, } tags["concessive"] = { "mood", WIKT, "conc", } tags["contrafactual"] = { "mood", WIKT, "cfact", 110323459, } -- Same as the contrafactual, but terminology depends on language. tags["counterfactual"] = { "mood", WP, "counterf", 1783264, -- for "counterfactual conditional" } tags["desiderative"] = { "mood", WP, {"des", "desid"}, 1200631, } tags["dubitative"] = { "mood", "w:dubitative mood", "dub", 1263049, } tags["energetic"] = { "mood", "w:energetic mood", "ener", } tags["inferential"] = { "mood", "w:inferential mood", {"infer", "infr"}, -- Per [[w:inferential mood]], also called "renarrative mood" or (in Estonian) "oblique mood" (but -- "renarrative mood" may be different, see its entry). 3332616, } -- It's not clear that this is exactly a mood, but I'm not sure where -- else to group it tags["intensive"] = { "mood", WP, "inten", 10965321, -- for "intensive word form" } tags["intentional"] = { "mood", WIKT, "intent", } tags["interrogative"] = { "mood", WP, {"interr", "interrog"}, 12021746, } tags["necessitative"] = { "mood", WIKT, "nec", } tags["permissive"] = { "mood", "w:permissive mood", "perm", 4351483, } tags["potential"] = { "mood", "w:potential mood", "potn", 2296856, } tags["precative"] = { "mood", WIKT, "prec", } tags["prescriptive"] = { "mood", WIKT, "prescr", } tags["presumptive"] = { "mood", "w:presumptive mood", "presump", 25463575, } -- Exists at least in Estonian tags["quotative"] = { "mood", "w:quotative evidential mood", "quot", -- 7272884, -- this is for "quotative" morphemes, not the same } tags["renarrative"] = { "mood", "w:renarrative mood", "renarr", -- Per [[w:inferential mood]], renarrative and inferential mood are the same; but per -- [[w:Bulgarian verbs#Evidentials]], they are different, and Bulgarian has both. 3332616, } tags["volitive"] = { "mood", "w:volitive mood", "voli", 10716592, } tags["voluntative"] = { "mood", WIKT, {"voln", "volun"}, } ----------------------- Voice/valence ----------------------- tags["antipassive"] = { "voice-valence", "w:antipassive voice", {"apass", "apasv", "apsv"}, 287232, } tags["applicative"] = { "voice-valence", "w:applicative voice", "appl", 621634, } tags["cooperative"] = { -- ("all together") used in Mongolian "voice-valence", "wikt:cooperative voice", "coop", 114033228, } tags["pluritative"] = { -- ("many together") used in Mongolian "voice-valence", "wikt:pluritative voice", "plur", 114033289, } tags["reciprocal"] = { "voice-valence", "w:reciprocal (grammar)", {"recp", "recip"}, 1964083, } -- Specific to Modern Irish, similar to impersonal tags["autonomous"] = { "voice-valence", WIKT, "auton", } ----------------------- Non-finite ----------------------- -- be careful not to clash with agentive case tag tags["agentive"] = { "non-finite", "w:agent noun", {"ag", "agent"}, } -- Latin etc. tags["gerundive"] = { "non-finite", WP, "gerv", 731298, -- Wikidata claims this is a grammatical mood, which is not really correct } -- Old Irish etc. tags["verbal of necessity"] = { "non-finite", "w:gerundive", "verbnec", 731298, -- gerundive } tags["l-participle"] = { "non-finite", "participle", {"l-ptcp", "lptcp"}, 814722, -- "participle" } -- Finnish agent participle tags["agent participle"] = { "non-finite", "w:Finnish grammar#Agent participle", "agentpart", } -- Hungarian participle tags["verbal participle"] = { "non-finite", WIKT, nil, 2361676, -- attributive verb, aka verbal participle } tags["converb"] = { "non-finite", WP, "conv", 149761, } tags["connegative"] = { "non-finite", APPENDIX, {"conn", "conneg"}, 5161718, } -- Occurs in Hindi as a type of participle used to conjoin two clauses; similarly occurs in Japanese as the "te-form" tags["conjunctive"] = { "non-finite", "w:serial verb construction", -- FIXME! No good link for "conjunctive"; another possibility is "converb" "conj", } tags["absolutive verb form"] = { "non-finite", "wikt:absolutive#Noun", "absvf", display = "absolutive", } -- FIXME! Should this be a mood? tags["debitive"] = { "non-finite", WP, "deb", 17119041, } ----------------------- Case ----------------------- tags["abessive"] = { "case", "w:abessive case", "abe", 319822, } tags["absolutive"] = { "case", "w:absolutive case", "absv", -- FIXME, find uses of "abs" = absolutive 332734, } tags["adessive"] = { "case", "w:adessive case", "ade", 281954, } -- be careful not to clash with adverbial grammar tag tags["adverbial case"] = { "case", WP, "advc", display = "adverbial", } -- be careful not to clash with agentive non-finite tag tags["agentive case"] = { "case", WP, "agc", display = "agentive", } tags["allative"] = { "case", "wikt:allative case", "all", 655020, } --No evidence of the existence of this case on the web, and the shortcuts are better used elsewhere. --tags["anterior"] = { -- "case", -- nil, -- {"ant"}, --} tags["associative"] = { "case", "w:associative case", {"ass", "assoc"}, 15948746, } tags["benefactive"] = { "case", "w:benefactive case", {"ben", "bene"}, 664905, } tags["causal"] = { "case", "w:causal case", {"cauc", "causc"}, 2943136, } tags["causal-final"] = { "case", "w:causal-final case", {"cfi", "cfin"}, 18012653, } tags["comitative"] = { "case", "w:comitative case", "com", 838581, } -- be careful not to clash with comparative degree tags["comparative case"] = { "case", WP, "comc", 5155633, display = "comparative", } tags["delative"] = { "case", "w:delative case", "del", 1183901, } tags["direct"] = { "case", "w:direct case", "dir", 1751855, } tags["directive"] = { "case", "wikt:directive case", "dirc", 56526905, } tags["distributive"] = { "case", "w:distributive case", {"dis", "dist", "distr"}, 492457, } tags["elative"] = { "case", "elative case", "ela", 394253, } tags["ergative"] = { "case", "ergative case", "erg", 324305, } -- be careful not to clash with equative degree tag tags["equative"] = { "case", "w:equative case", "equc", 3177653, } tags["essive-formal"] = { "case", "w:essive-formal case", {"esf", "efor"}, 3827688, } tags["essive-modal"] = { "case", "w:essive-modal case", {"esm", "emod"}, 3827703, } tags["essive"] = { "case", "w:essive case", "ess", 148465, } --No evidence of the existence of this case on the web, and the shortcuts are better used elsewhere. --tags["exclusive"] = { -- "case", -- nil, -- {"exc", "excl"}, --} tags["illative"] = { "case", "w:illative case", "ill", 474668, } tags["indirect"] = { "case", "w:direct case", "indir", 1233197, -- Same as oblique. } tags["inessive"] = { "case", "w:inessive case", "ine", 282031, } tags["instructive"] = { "case", "w:instructive case", "ist", 1665275, } tags["lative"] = { "case", "w:lative case", "lat", 260425, } tags["limitative"] = { "case", "w:list of grammatical cases", "lim", 35870079, } tags["locative-qualitative"] = { "case", "locative-qualitative case", {"lqu", "lqua"}, } tags["objective"] = { "case", "objective case", "objv", -- obj used for "object" 1233197, -- Same as oblique. } tags["oblique"] = { "case", "oblique case", "obl", 1233197, } tags["partitive"] = { "case", "w:partitive case", {"ptv", "par"}, 857325, } --certain languages use this term for the abessive tags["privative"] = { "case", "w:privative case", "priv", 319822, } tags["prolative"] = { "case", "w:prolative case", {"pro", "prol"}, 952933, } tags["sociative"] = { "case", "w:sociative case", "soc", 3773161, } tags["subjective"] = { "case", "w:subjective case", {"subjv", "sbjv"}, -- "sub" and "subj" used for subjunctive, "sbj" for "subject" 131105, -- Same as nominative. } tags["sublative"] = { "case", "w:sublative case", {"sbl", "subl"}, 2120615, } tags["superessive"] = { "case", "w:superessive case", {"spe", "supe"}, 222355, } tags["temporal"] = { "case", "w:temporal case", {"tem", "temp"}, 3235219, } -- be careful not to clash with terminative aspect tag tags["terminative case"] = { "case", "w:terminative case", "ter", 747019, display = "terminative", } tags["translative"] = { "case", "w:translative case", {"tra", "tran"}, 950170, } ----------------------- State ----------------------- tags["independent genitive"] = { "state", WIKT, "indgen", } tags["possessor"] = { "state", WIKT, {"posr", "possr"}, } tags["reflexive possessive"] = { "state", WIKT, {"reflposs", "refl poss"}, } tags["substantive"] = { "state", APPENDIX, {"subs", "subst"}, } ----------------------- Degrees of comparison ----------------------- tags["absolute superlative degree"] = { "comparison", "wikt:absolute superlative", {"asupd", "absolute superlative"}, } tags["relative superlative degree"] = { "comparison", "wikt:relative superlative", {"rsupd", "relative superlative"}, } tags["elative degree"] = { "comparison", "elative", "elad", -- Can't use "elative" as shortcut because that's already used for the elative case 1555419, } -- be careful not to clash with equative case tag tags["equative degree"] = { "comparison", "w:equative", "equd", 5384239, } tags["excessive degree"] = { "comparison", nil, "excd", } ----------------------- Register ----------------------- tags["familiar"] = { "register", "w:T–V distinction", "fam", } tags["polite"] = { "register", "w:T–V distinction", "pol", } tags["intimate"] = { "register", -- "intimate" is also a possible formality level in the sociolinguistic register sense. "w:T–V distinction", "intim", } tags["formal"] = { "register", "w:register (sociolinguistics)", } tags["informal"] = { "register", "w:register (sociolinguistics)", "inform", } tags["colloquial"] = { "register", "w:colloquialism", "colloq", } tags["slang"] = { "register", WP, } tags["contemporary"] = { "register", WIKT, "conty", } tags["literary"] = { "register", "w:literary language", "lit", } tags["dated"] = { "register", WIKT, } tags["archaic"] = { "register", "w:archaism", "arch", } tags["obsolete"] = { "register", WIKT, "obs", } tags["emphatic"] = { "register", WIKT, "emph", } ----------------------- Deixis ----------------------- tags["proximal"] = { "deixis", "w:deixis", {"prox", "prxl"}, } tags["medial"] = { "deixis", "w:deixis", "medl", } tags["distal"] = { "deixis", "w:deixis", "dstl", } ----------------------- Clusivity ----------------------- tags["inclusive"] = { "clusivity", "w:clusivity", "incl", } tags["exclusive"] = { "clusivity", "w:clusivity", "excl", } tags["obviative"] = { "clusivity", "w:clusivity", "obv", } ----------------------- Inflectional class ----------------------- tags["absolute"] = { "grammar", WIKT, "abs", } tags["conjunct"] = { "grammar", WP, "conjt", } tags["deuterotonic"] = { "grammar", "w:dependent and independent verb forms", "deut", } tags["prototonic"] = { "grammar", "w:dependent and independent verb forms", "prot", } ----------------------- Attitude ----------------------- tags["endearing"] = { "attitude", -- FIXME! No good glossary entry for this; the entry for "hypocoristic" refers specifically to proper names. "w:hypocoristic", "end", 1130279, -- entry for "hypocorism" } tags["moderative"] = { "attitude", WIKT, "moder", } ----------------------- Sound changes ----------------------- tags["alliterative"] = { "sound change", "w:alliteration", nil, 484495, } tags["back"] = { "sound change", "w:back vowel", nil, 853589, } tags["front"] = { "sound change", "w:front vowel", nil, 5505949, } tags["rounded"] = { "sound change", "w:roundedness", "round", } tags["sigmatic"] = { "sound change", WIKT, "sigm", } tags["unrounded"] = { "sound change", "w:roundedness", "unround", } tags["vowel harmonic"] = { "sound change", "w:vowel harmony", "vharm", 147137, } ----------------------- Misc grammar ----------------------- tags["relative"] = { "grammar", WIKT, "rel", } tags["direct relative"] = { "grammar", "w:relative_clause#Celtic_languages", "dirrel", } tags["indirect relative"] = { "grammar", "w:relative_clause#Celtic_languages", "indrel", } tags["synthetic"] = { "grammar", WIKT, "synth", } tags["analytic"] = { "grammar", WIKT, {"anal", "analytical"}, } tags["periphrastic"] = { "grammar", WIKT, "peri", } tags["affirmative"] = { "grammar", "w:affirmation and negation", "aff", } tags["possessed"] = { "grammar", "w:possessive affix", {"possd", "possed"}, -- posd = positive degree 804020, -- for possessive affix } tags["non-possessed"] = { "grammar", "w:possessive affix", {"npossd", "npossed", "nonpossessed"}, } tags["possessive affix"] = { "grammar", WP, {"posaf", "possaf"}, 804020, } tags["possessive suffix"] = { "grammar", "w:possessive affix", "possuf", 804020, } tags["possessive prefix"] = { "grammar", "w:possessive affix", {"pospref", "posspref"}, 804020, } tags["prefix"] = { "grammar", APPENDIX, "pref", -- pre = prepositional 134830, } tags["prefixal"] = { "grammar", WIKT, "prefl", -- pre = prepositional 134830, } tags["suffix"] = { "grammar", APPENDIX, {"suf", "suff"}, 102047, } tags["suffixal"] = { "grammar", WIKT, {"sufl", "suffl"}, 102047, } tags["affix"] = { "grammar", WP, "af", -- aff = affirmative 62155, } tags["affixal"] = { "grammar", WIKT, "afl", -- aff = affirmative 62155, } tags["circumfix"] = { "grammar", WP, {"circ", "cirf", "circf"}, 124939, } tags["circumfixal"] = { "grammar", WIKT, {"circl", "cirfl", "circfl"}, 124939, } tags["infix"] = { "grammar", WP, "infx", 201322, } tags["infixal"] = { "grammar", WIKT, "infxl", 201322, } tags["nonfinite"] = { "grammar", APPENDIX, "nonfin", 1050494, -- entry for "non-finite verb" } tags["tenseless"] = { "grammar", WIKT, } tags["aspect"] = { "grammar", APPENDIX, "asp", 208084, } tags["augmented"] = { "grammar", "augment", nil, 760437, } tags["unaugmented"] = { "grammar", "augment", nil, 760437, } ----------------------- Other tags ----------------------- tags["–"] = { -- Unicode en-dash "other", no_space_on_left = true, no_space_on_right = true, } tags["—"] = { -- Unicode em-dash "other", no_space_on_left = true, no_space_on_right = true, } ----------------------- Create the shortcuts list ----------------------- m_form_of_data.finalize(tags, shortcuts) return {tags = tags, shortcuts = shortcuts} bz5gat1nu65fxfch0isklblxjmg0as0 11972 11971 2025-06-23T14:06:12Z 咽頭べさ 11 [[မော်ဂျူး:form of/data2]] စာမျက်နှာကို [[မော်ဂျူး:form of/data/2]] သို့ 咽頭べさက ရွှေ့ခဲ့သည် 11971 Scribunto text/plain --[=[ This module lists the less common recognized inflection tags, in the same format as for [[Module:form of/data/1]] (which contains the more common tags). We split the tags this way to save memory, so we avoid loading the less common tags in the majority of cases. ]=] local m_form_of_data = require("Module:form of/data") local APPENDIX = m_form_of_data.APPENDIX local WP = m_form_of_data.WP local WIKT = m_form_of_data.WIKT local tags = {} local shortcuts = {} ----------------------- Person ----------------------- tags["fourth-person"] = { "person", "wikt:fourth person", "4", 3348541, } tags["second-person-object form"] = { "person", APPENDIX, "2o", } ----------------------- Number ----------------------- tags["associative plural"] = { "number", WIKT, {"ass p", "ass pl", "assoc p", "assoc pl"}, } tags["collective"] = { "number", "collective number", "col", 694268, } tags["collective-possession"] = { "number", "collective number", {"cpos", "colpos"}, } tags["distributive paucal"] = { "number", WIKT, "dpau", } tags["paucal"] = { "number", WIKT, "pau", 489410, } tags["singulative"] = { "number", "singulative number", "sgl", 1450795, } tags["transnumeral"] = { "number", APPENDIX, "trn", 113631596, display = "singular or plural", } tags["trial"] = { "number", "trial number", "tri", 2142560, } ----------------------- Gender ----------------------- tags["natural feminine"] = { "gender", "gender", "natf", } tags["virile"] = { "gender", APPENDIX, "vr", } ----------------------- Animacy ----------------------- ----------------------- Tense/aspect ----------------------- tags["abtemporal"] = { "tense-aspect", WIKT, "abtemp", } tags["anterior"] = { "tense-aspect", "w:relative and absolute tense", "ant", } tags["cessative"] = { "tense-aspect", WP, "cess", 17027342, } -- Aspect in Tagalog; presumably similar to the perfect tense/aspect but not necessarily similar enough to use the same -- Wikidata ID tags["complete"] = { "tense-aspect", "w:Tagalog grammar#Aspect", "compl", } tags["concomitant"] = { "tense-aspect", WIKT, "concom", } tags["confirmative"] = { "tense-aspect", WIKT, "conf", } -- Aspect in Tagalog tags["contemplative"] = { "tense-aspect", "w:Tagalog grammar#Aspect", "contem", } tags["contemporal"] = { "tense-aspect", WIKT, "contemp", } tags["continuative"] = { "tense-aspect", WP, nil, 28130104, } tags["continuous"] = { "tense-aspect", "w:continuous aspect", "cont", 12721117, } tags["delimitative"] = { "tense-aspect", "w:delimitative aspect", "delim", 5316270, } tags["durative"] = { "tense-aspect", WP, "dur", } tags["futuritive"] = { "tense-aspect", WP, {"futv", "futrv"}, } tags["frequentative"] = { "tense-aspect", WP, "freq", 467562, } tags["habitual"] = { "tense-aspect", "w:habitual aspect", "hab", 5636904, } -- same as the habitual; used in Mongolian linguistics tags["habitive"] = { "tense-aspect", WP, "habv", } tags["immediative"] = { "tense-aspect", WIKT, {"imm", "immed"}, } tags["incidental"] = { "tense-aspect", WIKT, "incid", } tags["iterative"] = { "tense-aspect", "w:iterative aspect", "iter", 2866772, } tags["momentane"] = { "tense-aspect", WP, nil, 6897160, } tags["momentaneous"] = { "tense-aspect", WIKT, "mom", 115110791, } tags["posterior"] = { "tense-aspect", "w:relative and absolute tense", "post", } tags["preconditional"] = { "tense-aspect", WIKT, "precond", } -- Type of participle in Hindi; also called agentive or agentive-prospective tags["prospective"] = { "tense-aspect", "w:prospective aspect", "pros", } tags["purposive"] = { "tense-aspect", WIKT, "purp", } -- Aspect in Tagalog; presumably similar to the perfect tense/aspect but not necessarily similar enough to use the same -- Wikidata ID tags["recently complete"] = { "tense-aspect", "w:Tagalog grammar#Aspect", "rcompl", } tags["resultative"] = { "tense-aspect", WP, "res", 7316356, } tags["semelfactive"] = { "tense-aspect", WP, "semf", 7449203, } tags["serial"] = { "tense-aspect", WIKT, "ser", } tags["successive"] = { "tense-aspect", WIKT, "succ", } -- be careful not to clash with terminative case tag tags["terminative aspect"] = { "tense-aspect", "w:cessative aspect", "term", display = "terminative", } ----------------------- Mood ----------------------- tags["benedictive"] = { "mood", WP, "bened", 4887358, } tags["cohortative"] = { "mood", "w:cohortative mood", {"coho", "cohort"}, } tags["concessive"] = { "mood", WIKT, "conc", } tags["contrafactual"] = { "mood", WIKT, "cfact", 110323459, } -- Same as the contrafactual, but terminology depends on language. tags["counterfactual"] = { "mood", WP, "counterf", 1783264, -- for "counterfactual conditional" } tags["desiderative"] = { "mood", WP, {"des", "desid"}, 1200631, } tags["dubitative"] = { "mood", "w:dubitative mood", "dub", 1263049, } tags["energetic"] = { "mood", "w:energetic mood", "ener", } tags["inferential"] = { "mood", "w:inferential mood", {"infer", "infr"}, -- Per [[w:inferential mood]], also called "renarrative mood" or (in Estonian) "oblique mood" (but -- "renarrative mood" may be different, see its entry). 3332616, } -- It's not clear that this is exactly a mood, but I'm not sure where -- else to group it tags["intensive"] = { "mood", WP, "inten", 10965321, -- for "intensive word form" } tags["intentional"] = { "mood", WIKT, "intent", } tags["interrogative"] = { "mood", WP, {"interr", "interrog"}, 12021746, } tags["necessitative"] = { "mood", WIKT, "nec", } tags["permissive"] = { "mood", "w:permissive mood", "perm", 4351483, } tags["potential"] = { "mood", "w:potential mood", "potn", 2296856, } tags["precative"] = { "mood", WIKT, "prec", } tags["prescriptive"] = { "mood", WIKT, "prescr", } tags["presumptive"] = { "mood", "w:presumptive mood", "presump", 25463575, } -- Exists at least in Estonian tags["quotative"] = { "mood", "w:quotative evidential mood", "quot", -- 7272884, -- this is for "quotative" morphemes, not the same } tags["renarrative"] = { "mood", "w:renarrative mood", "renarr", -- Per [[w:inferential mood]], renarrative and inferential mood are the same; but per -- [[w:Bulgarian verbs#Evidentials]], they are different, and Bulgarian has both. 3332616, } tags["volitive"] = { "mood", "w:volitive mood", "voli", 10716592, } tags["voluntative"] = { "mood", WIKT, {"voln", "volun"}, } ----------------------- Voice/valence ----------------------- tags["antipassive"] = { "voice-valence", "w:antipassive voice", {"apass", "apasv", "apsv"}, 287232, } tags["applicative"] = { "voice-valence", "w:applicative voice", "appl", 621634, } tags["cooperative"] = { -- ("all together") used in Mongolian "voice-valence", "wikt:cooperative voice", "coop", 114033228, } tags["pluritative"] = { -- ("many together") used in Mongolian "voice-valence", "wikt:pluritative voice", "plur", 114033289, } tags["reciprocal"] = { "voice-valence", "w:reciprocal (grammar)", {"recp", "recip"}, 1964083, } -- Specific to Modern Irish, similar to impersonal tags["autonomous"] = { "voice-valence", WIKT, "auton", } ----------------------- Non-finite ----------------------- -- be careful not to clash with agentive case tag tags["agentive"] = { "non-finite", "w:agent noun", {"ag", "agent"}, } -- Latin etc. tags["gerundive"] = { "non-finite", WP, "gerv", 731298, -- Wikidata claims this is a grammatical mood, which is not really correct } -- Old Irish etc. tags["verbal of necessity"] = { "non-finite", "w:gerundive", "verbnec", 731298, -- gerundive } tags["l-participle"] = { "non-finite", "participle", {"l-ptcp", "lptcp"}, 814722, -- "participle" } -- Finnish agent participle tags["agent participle"] = { "non-finite", "w:Finnish grammar#Agent participle", "agentpart", } -- Hungarian participle tags["verbal participle"] = { "non-finite", WIKT, nil, 2361676, -- attributive verb, aka verbal participle } tags["converb"] = { "non-finite", WP, "conv", 149761, } tags["connegative"] = { "non-finite", APPENDIX, {"conn", "conneg"}, 5161718, } -- Occurs in Hindi as a type of participle used to conjoin two clauses; similarly occurs in Japanese as the "te-form" tags["conjunctive"] = { "non-finite", "w:serial verb construction", -- FIXME! No good link for "conjunctive"; another possibility is "converb" "conj", } tags["absolutive verb form"] = { "non-finite", "wikt:absolutive#Noun", "absvf", display = "absolutive", } -- FIXME! Should this be a mood? tags["debitive"] = { "non-finite", WP, "deb", 17119041, } ----------------------- Case ----------------------- tags["abessive"] = { "case", "w:abessive case", "abe", 319822, } tags["absolutive"] = { "case", "w:absolutive case", "absv", -- FIXME, find uses of "abs" = absolutive 332734, } tags["adessive"] = { "case", "w:adessive case", "ade", 281954, } -- be careful not to clash with adverbial grammar tag tags["adverbial case"] = { "case", WP, "advc", display = "adverbial", } -- be careful not to clash with agentive non-finite tag tags["agentive case"] = { "case", WP, "agc", display = "agentive", } tags["allative"] = { "case", "wikt:allative case", "all", 655020, } --No evidence of the existence of this case on the web, and the shortcuts are better used elsewhere. --tags["anterior"] = { -- "case", -- nil, -- {"ant"}, --} tags["associative"] = { "case", "w:associative case", {"ass", "assoc"}, 15948746, } tags["benefactive"] = { "case", "w:benefactive case", {"ben", "bene"}, 664905, } tags["causal"] = { "case", "w:causal case", {"cauc", "causc"}, 2943136, } tags["causal-final"] = { "case", "w:causal-final case", {"cfi", "cfin"}, 18012653, } tags["comitative"] = { "case", "w:comitative case", "com", 838581, } -- be careful not to clash with comparative degree tags["comparative case"] = { "case", WP, "comc", 5155633, display = "comparative", } tags["delative"] = { "case", "w:delative case", "del", 1183901, } tags["direct"] = { "case", "w:direct case", "dir", 1751855, } tags["directive"] = { "case", "wikt:directive case", "dirc", 56526905, } tags["distributive"] = { "case", "w:distributive case", {"dis", "dist", "distr"}, 492457, } tags["elative"] = { "case", "elative case", "ela", 394253, } tags["ergative"] = { "case", "ergative case", "erg", 324305, } -- be careful not to clash with equative degree tag tags["equative"] = { "case", "w:equative case", "equc", 3177653, } tags["essive-formal"] = { "case", "w:essive-formal case", {"esf", "efor"}, 3827688, } tags["essive-modal"] = { "case", "w:essive-modal case", {"esm", "emod"}, 3827703, } tags["essive"] = { "case", "w:essive case", "ess", 148465, } --No evidence of the existence of this case on the web, and the shortcuts are better used elsewhere. --tags["exclusive"] = { -- "case", -- nil, -- {"exc", "excl"}, --} tags["illative"] = { "case", "w:illative case", "ill", 474668, } tags["indirect"] = { "case", "w:direct case", "indir", 1233197, -- Same as oblique. } tags["inessive"] = { "case", "w:inessive case", "ine", 282031, } tags["instructive"] = { "case", "w:instructive case", "ist", 1665275, } tags["lative"] = { "case", "w:lative case", "lat", 260425, } tags["limitative"] = { "case", "w:list of grammatical cases", "lim", 35870079, } tags["locative-qualitative"] = { "case", "locative-qualitative case", {"lqu", "lqua"}, } tags["objective"] = { "case", "objective case", "objv", -- obj used for "object" 1233197, -- Same as oblique. } tags["oblique"] = { "case", "oblique case", "obl", 1233197, } tags["partitive"] = { "case", "w:partitive case", {"ptv", "par"}, 857325, } --certain languages use this term for the abessive tags["privative"] = { "case", "w:privative case", "priv", 319822, } tags["prolative"] = { "case", "w:prolative case", {"pro", "prol"}, 952933, } tags["sociative"] = { "case", "w:sociative case", "soc", 3773161, } tags["subjective"] = { "case", "w:subjective case", {"subjv", "sbjv"}, -- "sub" and "subj" used for subjunctive, "sbj" for "subject" 131105, -- Same as nominative. } tags["sublative"] = { "case", "w:sublative case", {"sbl", "subl"}, 2120615, } tags["superessive"] = { "case", "w:superessive case", {"spe", "supe"}, 222355, } tags["temporal"] = { "case", "w:temporal case", {"tem", "temp"}, 3235219, } -- be careful not to clash with terminative aspect tag tags["terminative case"] = { "case", "w:terminative case", "ter", 747019, display = "terminative", } tags["translative"] = { "case", "w:translative case", {"tra", "tran"}, 950170, } ----------------------- State ----------------------- tags["independent genitive"] = { "state", WIKT, "indgen", } tags["possessor"] = { "state", WIKT, {"posr", "possr"}, } tags["reflexive possessive"] = { "state", WIKT, {"reflposs", "refl poss"}, } tags["substantive"] = { "state", APPENDIX, {"subs", "subst"}, } ----------------------- Degrees of comparison ----------------------- tags["absolute superlative degree"] = { "comparison", "wikt:absolute superlative", {"asupd", "absolute superlative"}, } tags["relative superlative degree"] = { "comparison", "wikt:relative superlative", {"rsupd", "relative superlative"}, } tags["elative degree"] = { "comparison", "elative", "elad", -- Can't use "elative" as shortcut because that's already used for the elative case 1555419, } -- be careful not to clash with equative case tag tags["equative degree"] = { "comparison", "w:equative", "equd", 5384239, } tags["excessive degree"] = { "comparison", nil, "excd", } ----------------------- Register ----------------------- tags["familiar"] = { "register", "w:T–V distinction", "fam", } tags["polite"] = { "register", "w:T–V distinction", "pol", } tags["intimate"] = { "register", -- "intimate" is also a possible formality level in the sociolinguistic register sense. "w:T–V distinction", "intim", } tags["formal"] = { "register", "w:register (sociolinguistics)", } tags["informal"] = { "register", "w:register (sociolinguistics)", "inform", } tags["colloquial"] = { "register", "w:colloquialism", "colloq", } tags["slang"] = { "register", WP, } tags["contemporary"] = { "register", WIKT, "conty", } tags["literary"] = { "register", "w:literary language", "lit", } tags["dated"] = { "register", WIKT, } tags["archaic"] = { "register", "w:archaism", "arch", } tags["obsolete"] = { "register", WIKT, "obs", } tags["emphatic"] = { "register", WIKT, "emph", } ----------------------- Deixis ----------------------- tags["proximal"] = { "deixis", "w:deixis", {"prox", "prxl"}, } tags["medial"] = { "deixis", "w:deixis", "medl", } tags["distal"] = { "deixis", "w:deixis", "dstl", } ----------------------- Clusivity ----------------------- tags["inclusive"] = { "clusivity", "w:clusivity", "incl", } tags["exclusive"] = { "clusivity", "w:clusivity", "excl", } tags["obviative"] = { "clusivity", "w:clusivity", "obv", } ----------------------- Inflectional class ----------------------- tags["absolute"] = { "grammar", WIKT, "abs", } tags["conjunct"] = { "grammar", WP, "conjt", } tags["deuterotonic"] = { "grammar", "w:dependent and independent verb forms", "deut", } tags["prototonic"] = { "grammar", "w:dependent and independent verb forms", "prot", } ----------------------- Attitude ----------------------- tags["endearing"] = { "attitude", -- FIXME! No good glossary entry for this; the entry for "hypocoristic" refers specifically to proper names. "w:hypocoristic", "end", 1130279, -- entry for "hypocorism" } tags["moderative"] = { "attitude", WIKT, "moder", } ----------------------- Sound changes ----------------------- tags["alliterative"] = { "sound change", "w:alliteration", nil, 484495, } tags["back"] = { "sound change", "w:back vowel", nil, 853589, } tags["front"] = { "sound change", "w:front vowel", nil, 5505949, } tags["rounded"] = { "sound change", "w:roundedness", "round", } tags["sigmatic"] = { "sound change", WIKT, "sigm", } tags["unrounded"] = { "sound change", "w:roundedness", "unround", } tags["vowel harmonic"] = { "sound change", "w:vowel harmony", "vharm", 147137, } ----------------------- Misc grammar ----------------------- tags["relative"] = { "grammar", WIKT, "rel", } tags["direct relative"] = { "grammar", "w:relative_clause#Celtic_languages", "dirrel", } tags["indirect relative"] = { "grammar", "w:relative_clause#Celtic_languages", "indrel", } tags["synthetic"] = { "grammar", WIKT, "synth", } tags["analytic"] = { "grammar", WIKT, {"anal", "analytical"}, } tags["periphrastic"] = { "grammar", WIKT, "peri", } tags["affirmative"] = { "grammar", "w:affirmation and negation", "aff", } tags["possessed"] = { "grammar", "w:possessive affix", {"possd", "possed"}, -- posd = positive degree 804020, -- for possessive affix } tags["non-possessed"] = { "grammar", "w:possessive affix", {"npossd", "npossed", "nonpossessed"}, } tags["possessive affix"] = { "grammar", WP, {"posaf", "possaf"}, 804020, } tags["possessive suffix"] = { "grammar", "w:possessive affix", "possuf", 804020, } tags["possessive prefix"] = { "grammar", "w:possessive affix", {"pospref", "posspref"}, 804020, } tags["prefix"] = { "grammar", APPENDIX, "pref", -- pre = prepositional 134830, } tags["prefixal"] = { "grammar", WIKT, "prefl", -- pre = prepositional 134830, } tags["suffix"] = { "grammar", APPENDIX, {"suf", "suff"}, 102047, } tags["suffixal"] = { "grammar", WIKT, {"sufl", "suffl"}, 102047, } tags["affix"] = { "grammar", WP, "af", -- aff = affirmative 62155, } tags["affixal"] = { "grammar", WIKT, "afl", -- aff = affirmative 62155, } tags["circumfix"] = { "grammar", WP, {"circ", "cirf", "circf"}, 124939, } tags["circumfixal"] = { "grammar", WIKT, {"circl", "cirfl", "circfl"}, 124939, } tags["infix"] = { "grammar", WP, "infx", 201322, } tags["infixal"] = { "grammar", WIKT, "infxl", 201322, } tags["nonfinite"] = { "grammar", APPENDIX, "nonfin", 1050494, -- entry for "non-finite verb" } tags["tenseless"] = { "grammar", WIKT, } tags["aspect"] = { "grammar", APPENDIX, "asp", 208084, } tags["augmented"] = { "grammar", "augment", nil, 760437, } tags["unaugmented"] = { "grammar", "augment", nil, 760437, } ----------------------- Other tags ----------------------- tags["–"] = { -- Unicode en-dash "other", no_space_on_left = true, no_space_on_right = true, } tags["—"] = { -- Unicode em-dash "other", no_space_on_left = true, no_space_on_right = true, } ----------------------- Create the shortcuts list ----------------------- m_form_of_data.finalize(tags, shortcuts) return {tags = tags, shortcuts = shortcuts} bz5gat1nu65fxfch0isklblxjmg0as0 ကဏ္ဍ:ပိဉ်တိစ် ကြိယာႏ 14 5234 11937 2025-06-23T12:47:13Z 咽頭べさ 11 [[ကဏ္ဍ:ပိဉ်တိစ် ကြိယာႏ]] စာမျက်နှာကို [[ကဏ္ဍ:ပိဉ်တိစ်ကြိယာႏဖုံႏ]] သို့ 咽頭べさက ရွှေ့ခဲ့သည် 11937 wikitext text/x-wiki #REDIRECT [[:ကဏ္ဍ:ပိဉ်တိစ်ကြိယာႏဖုံႏ]] 4ehskzk7oxbtdzwxxizbdlm6d9p0e86 ကဏ္ဍ:ပိဉ်တိစ် ကြိယာႏဝိသေသန 14 5235 11939 2025-06-23T12:48:06Z 咽頭べさ 11 [[ကဏ္ဍ:ပိဉ်တိစ် ကြိယာႏဝိသေသန]] စာမျက်နှာကို [[ကဏ္ဍ:ပိဉ်တိစ်ကြိယာႏဝိသေသနဖုံႏ]] သို့ 咽頭べさက ရွှေ့ခဲ့သည် 11939 wikitext text/x-wiki #REDIRECT [[:ကဏ္ဍ:ပိဉ်တိစ်ကြိယာႏဝိသေသနဖုံႏ]] mlpszxnf7x2csoqgrn8cmz6v5p8p71e ကဏ္ဍ:ပိဉ်တိစ် နာမဝိသေသန 14 5236 11941 2025-06-23T12:48:46Z 咽頭べさ 11 [[ကဏ္ဍ:ပိဉ်တိစ် နာမဝိသေသန]] စာမျက်နှာကို [[ကဏ္ဍ:ပိဉ်တိစ်နာမဝိသေသနဖုံႏ]] သို့ 咽頭べさက ရွှေ့ခဲ့သည် 11941 wikitext text/x-wiki #REDIRECT [[:ကဏ္ဍ:ပိဉ်တိစ်နာမဝိသေသနဖုံႏ]] frq4sbzqx7yrowzospx6vvsenscdgrj ကဏ္ဍ:ပိဉ်တိစ် နာမ်ႏ 14 5237 11943 2025-06-23T12:49:23Z 咽頭べさ 11 [[ကဏ္ဍ:ပိဉ်တိစ် နာမ်ႏ]] စာမျက်နှာကို [[ကဏ္ဍ:ပိဉ်တိစ်နာမ်ႏဖုံႏ]] သို့ 咽頭べさက ရွှေ့ခဲ့သည် 11943 wikitext text/x-wiki #REDIRECT [[:ကဏ္ဍ:ပိဉ်တိစ်နာမ်ႏဖုံႏ]] bvu2jiujj2215cgbwjwuqlcuu1xoiix ကဏ္ဍ:အငေါဝ်းထန်ႏလိဉ့်တွမ်ႏပိဉ်တိစ် ငေါဝ်းငွါဖုံႏ 14 5238 11945 2025-06-23T12:49:52Z 咽頭べさ 11 [[ကဏ္ဍ:အငေါဝ်းထန်ႏလိဉ့်တွမ်ႏပိဉ်တိစ် ငေါဝ်းငွါဖုံႏ]] စာမျက်နှာကို [[ကဏ္ဍ:အငေါဝ်းထန်ႏလိဉ့်တွမ်ႏပိဉ်တိစ်ငေါဝ်းငွါဖုံႏ]] သို့ 咽頭べさက ရွှေ့ခဲ့သည် 11945 wikitext text/x-wiki #REDIRECT [[:ကဏ္ဍ:အငေါဝ်းထန်ႏလိဉ့်တွမ်ႏပိဉ်တိစ်ငေါဝ်းငွါဖုံႏ]] tt4ub8btp5rhdrhl1v34yx8p6hhb0lk ကဏ္ဍ:အဘိဓာန်ႏကို တပါသော့ꩻတဝ်းဒါႏ ပိဉ်တိစ်ဝေါဟာရဖုံႏ 14 5239 11947 2025-06-23T12:51:22Z 咽頭べさ 11 [[ကဏ္ဍ:အဘိဓာန်ႏကို တပါသော့ꩻတဝ်းဒါႏ ပိဉ်တိစ်ဝေါဟာရဖုံႏ]] စာမျက်နှာကို [[ကဏ္ဍ:ပိဉ်တိစ်ငဝ်းတဲႏဖုံႏ]] သို့ 咽頭べさက ရွှေ့ခဲ့သည် 11947 wikitext text/x-wiki #REDIRECT [[:ကဏ္ဍ:ပိဉ်တိစ်ငဝ်းတဲႏဖုံႏ]] odieqh4yyx509r3hwokifqi4v89byqc မော်ဂျူး:table/sortedPairs 828 5240 11949 2025-06-23T12:57:44Z 咽頭べさ 11 ဖန်ဆင်ꩻလဲဉ်းလိတ်မဲ့ငါ တောမ်ႏ "local table_keys_to_list_module = "Module:table/keysToList" local function keys_to_list(...) keys_to_list = require(table_keys_to_list_module) return keys_to_list(...) end --[==[ Iterates through a table, with the keys sorted using the keysToList function. If there are only numerical keys, `export.sparseIpairs` is probably faster.]==] return function(t, key_sort) local list, i = keys_to_list(t, key_so..." 11949 Scribunto text/plain local table_keys_to_list_module = "Module:table/keysToList" local function keys_to_list(...) keys_to_list = require(table_keys_to_list_module) return keys_to_list(...) end --[==[ Iterates through a table, with the keys sorted using the keysToList function. If there are only numerical keys, `export.sparseIpairs` is probably faster.]==] return function(t, key_sort) local list, i = keys_to_list(t, key_sort), 0 return function() i = i + 1 local k = list[i] if k ~= nil then return k, t[k] end end end k9kspqkam96jj5np6nfk0sg15yvnnd3 မော်ဂျူး:table/keysToList 828 5241 11950 2025-06-23T12:58:41Z 咽頭べさ 11 ဖန်ဆင်ꩻလဲဉ်းလိတ်မဲ့ငါ တောမ်ႏ "local compare_module = "Module:compare" local pairs = pairs local sort = table.sort local compare local function get_compare() compare, get_compare = require(compare_module), nil return compare end --[==[ Returns a list of the keys in a table, sorted using either the default `table.sort` function or a custom `key_sort` function. If there are only numerical keys, [[Module:table/numKeys]] is probably fa..." 11950 Scribunto text/plain local compare_module = "Module:compare" local pairs = pairs local sort = table.sort local compare local function get_compare() compare, get_compare = require(compare_module), nil return compare end --[==[ Returns a list of the keys in a table, sorted using either the default `table.sort` function or a custom `key_sort` function. If there are only numerical keys, [[Module:table/numKeys]] is probably faster.]==] return function(t, key_sort) local list, i = {}, 0 for key in pairs(t) do i = i + 1 list[i] = key end -- Use specified sort function, or otherwise `compare`. sort(list, key_sort == nil and (compare or get_compare()) or key_sort) return list end db7h2mui4n7duv8tkb39qolcbe3t8rm မော်ဂျူး:compare 828 5242 11951 2025-06-23T13:00:28Z 咽頭べさ 11 ဖန်ဆင်ꩻလဲဉ်းလိတ်မဲ့ငါ တောမ်ႏ "local math_compare_module = "Module:math/compare" local string_compare_module = "Module:string/compare" local table_compare_module = "Module:table/compare" local require = require local type = type local types local function get_types() types, get_types = { ["nil"] = "\1", ["boolean"] = "\2", ["number"] = "\3", ["string"] = "\4", }, nil return types end local compare_funcs local function get_c..." 11951 Scribunto text/plain local math_compare_module = "Module:math/compare" local string_compare_module = "Module:string/compare" local table_compare_module = "Module:table/compare" local require = require local type = type local types local function get_types() types, get_types = { ["nil"] = "\1", ["boolean"] = "\2", ["number"] = "\3", ["string"] = "\4", }, nil return types end local compare_funcs local function get_compare_funcs() compare_funcs = {} function compare_funcs.boolean(a, b) return a == true and b == false end function compare_funcs.number(...) local math_compare = require(math_compare_module) compare_funcs.number = math_compare return math_compare(...) end function compare_funcs.string(...) local string_compare = require(string_compare_module) compare_funcs.string = string_compare return string_compare(...) end function compare_funcs.table(...) local table_compare = require(table_compare_module) compare_funcs.table = table_compare return table_compare(...) end get_compare_funcs = nil return compare_funcs end --[==[ A general comparison function, which returns {true} if {a} sorts before {b}, or otherwise {false}; it can be used as the sort function with {table.sort}. This function is roughly equivalent to the {<} operator, but is capable of comparing a mix of types, using the following rules: * When items of different types are compared, the type-order is {"nil"}, {"boolean"}, {"number"}, {"string"}, then alphabetical order by type name for all other types. * Numbers are compared with [[Module:math/compare]]. * Strings are compared with [[Module:string/compare]]. * Tables are compared with [[Module:table/compare]]. * Boolean {true} sorts before {false}. * All other types always return {false}.]==] return function(a, b) local type_a, type_b = type(a), type(b) if type_a == type_b then local func = (compare_funcs or get_compare_funcs())[type_a] return func and func(a, b) or false end return ((types or get_types())[type_a] or type_a) < (types[type_b] or type_b) end fs82yur52kblfpa4j6uwsb5dbcxr7em မော်ဂျူး:table/compare 828 5243 11952 2025-06-23T13:01:33Z 咽頭べさ 11 ဖန်ဆင်ꩻလဲဉ်းလိတ်မဲ့ငါ တောမ်ႏ "local string_linesub_module = "Module:string/linesub" local table_get_metamethod_module = "Module:table/getMetamethod" local error = error local rawequal = rawequal local require = require local sub = string.sub local traceback = debug.traceback local xpcall = xpcall local function get_metamethod(...) get_metamethod = require(table_get_metamethod_module) return get_metamethod(...) end local function li..." 11952 Scribunto text/plain local string_linesub_module = "Module:string/linesub" local table_get_metamethod_module = "Module:table/getMetamethod" local error = error local rawequal = rawequal local require = require local sub = string.sub local traceback = debug.traceback local xpcall = xpcall local function get_metamethod(...) get_metamethod = require(table_get_metamethod_module) return get_metamethod(...) end local function linesub(...) linesub = require(string_linesub_module) return linesub(...) end local _a, _b -- used to pass arguments to compare_for_xpcall() local NOT_COMPARABLE = {} -- sentinel local function compare_for_xpcall() local a, b = _a, _b _a, _b = nil return a < b end local function err_handler(err) -- Error message relate to comparing two table values, but the trace at the -- start of the message needs to be trimmed. Traceback will only refer to -- xpcall() on line 5 if the error occured in compare_for_xpcall(); if it -- originated further up the stack (i.e. in a metamethod), xpcall() will -- only be mentioned on a later line. if ( sub(err, -35) == "attempt to compare two table values" and linesub(traceback(), 5, 5) == "\t[C]: in function 'xpcall'" ) then return NOT_COMPARABLE end return err end --[==[ A comparison function for tables, which returns {true} if {a} sorts before {b}, or otherwise {false}; it can be used as the sort function with {table.sort}. By default, attempting to compare two tables will result in an error, unless both tables have the same {__lt} metamethod. This function will also use the {__lt} metamethod under the same circumstances, but will return {false} instead of throwing an error if the two tables are not comparable.]==] return function(a, b) -- If `a` and `b` are tables, they are only comparable if they both have the -- same __lt metamethod. get_unprotected_metatable() returns nil if there is -- no metatable, and false if the metatable is protected. local success_a, __lt_a = get_metamethod(a, "__lt") -- Not comparable if `a` has no __lt metamethod. if success_a and __lt_a == nil then return false end local success_b, __lt_b = get_metamethod(b, "__lt") if success_b then -- Not comparable if `b` has no __lt metamethod. if __lt_b == nil then return false -- If `a` and `b` have known __lt metamethods, they are only comparable -- if the two metamethods are primitively equal. elseif __lt_a ~= nil then return rawequal(__lt_a, __lt_b) and a < b end end -- Not possible to know if `a` and `b` are comparable if either or both have -- protected metatables, and neither are confirmed to have no __lt -- metamethod. Use xpcall() when comparing them, with an error handler that -- determines if the error was due to `a` and `b` not being comparable. -- Unlike pcall(), xpcall() can't pass on arguments to the called function, -- so use upvalues in the top-level of the module to circumvent this. _a, _b = a, b local success, result = xpcall(compare_for_xpcall, err_handler) if success then return result elseif result == NOT_COMPARABLE then return false end -- If the error wasn't due to the comparison, rethrow it. error(result) end 8mcw42u3tihzaq6279e3zlbjws3nhdr မော်ဂျူး:string/linesub 828 5244 11953 2025-06-23T13:02:44Z 咽頭べさ 11 ဖန်ဆင်ꩻလဲဉ်းလိတ်မဲ့ငါ တောမ်ႏ "local index_module = "Module:index" local string_linelen_module = "Module:string/linelen" local find = string.find local require = require local sub = string.sub local function index_range(...) index_range = require(index_module).range return index_range(...) end local function linelen(...) linelen = require(string_linelen_module) return linelen(...) end return function(str, i, j) i, j = index_rang..." 11953 Scribunto text/plain local index_module = "Module:index" local string_linelen_module = "Module:string/linelen" local find = string.find local require = require local sub = string.sub local function index_range(...) index_range = require(index_module).range return index_range(...) end local function linelen(...) linelen = require(string_linelen_module) return linelen(...) end return function(str, i, j) i, j = index_range(str, i, j, linelen) if j and j < i then return "" end local first, pos1, pos2, newline, pattern, plain = 1 if not find(str, "\r", nil, true) then pattern, plain = "\n", true elseif not find(str, "\n", nil, true) then pattern, plain = "\r", true else pattern = "([\n\r]\n?)" end for _ = 1, i - 1 do pos1, pos2, newline = find(str, pattern, first, plain) if pos1 == nil then return "" end first = newline == "\n\n" and pos2 or pos2 + 1 end if j == nil then return sub(str, first) end local last = first for _ = i, j do pos1, pos2, newline = find(str, pattern, last, plain) if pos1 == nil then return sub(str, first) end last = newline == "\n\n" and pos2 or pos2 + 1 end last = pos1 - 1 return sub(str, first, last) end qzydmib4uoy2d53y6s4vvt1a6pynnwv မော်ဂျူး:string/linelen 828 5245 11954 2025-06-23T13:04:07Z 咽頭べさ 11 ဖန်ဆင်ꩻလဲဉ်းလိတ်မဲ့ငါ တောမ်ႏ "local gmatch = string.gmatch --[==[ Counts the number of lines in the input string, treating {"\n"}, {"\r"} and {"\r\n"} as new lines.]==] return function(str) local n = 1 for newline in gmatch(str, "([\n\r]\n?)[^\n\r]*") do n = n + (newline == "\n\n" and 2 or 1) end return n end" 11954 Scribunto text/plain local gmatch = string.gmatch --[==[ Counts the number of lines in the input string, treating {"\n"}, {"\r"} and {"\r\n"} as new lines.]==] return function(str) local n = 1 for newline in gmatch(str, "([\n\r]\n?)[^\n\r]*") do n = n + (newline == "\n\n" and 2 or 1) end return n end jpgjm9kkpx83bv03ujdphtzhtxxjsg2 မော်ဂျူး:index 828 5246 11955 2025-06-23T13:05:36Z 咽頭べさ 11 ဖန်ဆင်ꩻလဲဉ်းလိတ်မဲ့ငါ တောမ်ႏ "local export = {} local math_module = "Module:math" local error = error local format = string.format local tostring = tostring local type = type local function to_integer(...) to_integer = require(math_module).to_integer return to_integer(...) end local function input_err(i, funcname, param) local idx_type = type(i) error(format( "bad argument #%d to 'index.%s' (integer expected, got %s)", param..." 11955 Scribunto text/plain local export = {} local math_module = "Module:math" local error = error local format = string.format local tostring = tostring local type = type local function to_integer(...) to_integer = require(math_module).to_integer return to_integer(...) end local function input_err(i, funcname, param) local idx_type = type(i) error(format( "bad argument #%d to 'index.%s' (integer expected, got %s)", param, funcname, idx_type == "number" and tostring(i) or idx_type ), 4) end local function get_index(i, obj, func, neg1_nil, funcname, param) i = to_integer(i) or input_err(i, funcname, param) -- A relative index of -1 refers to the final index. For many functions, -- it makes no difference if the final index is nil or -1, so if the -- `neg1_nil` flag is set and the index is -1, return nil to avoid having -- to call `func`. if neg1_nil and i == -1 then return nil, obj, func elseif i < 0 then if func ~= nil then obj, func = func(obj), nil end i = obj + i + 1 end return i, obj, func end function export.absolute(obj, i, func, i_min, i_max) i, obj, func = get_index(i, obj, func, false, "absolute", 2) if i_min ~= nil then i_min, obj, func = get_index(i_min, obj, func, false, "absolute", 4) if i < i_min then i = i_min end end if i_max ~= nil then i_max, obj, func = get_index(i_max, obj, func, false, "absolute", 5) if i_min and i_min > i_max then error("bad arguments #4 and #5 to 'index.absolute' (`i_min` cannot be greater than `i_max`)", 2) elseif i > i_max then i = i_max end end return i end function export.range(obj, i, j, func, always_infer_upper, i_min, j_max) -- Canonicalize `i`, or otherwise default to 1. if i == nil then i = 1 else i, obj, func = get_index(i, obj, func, false, "range", 2) end -- Get the minimum value for `i`. This is 1 by default, because a start -- index of 0 is always equivalent to 1 for most functions (e.g. string.byte -- and string.sub). However, many module functions have checks like -- "while i <= j" or "if i > j" that won't, therefore, handle (0, 0) like -- (1, 0), so converting 0 to 1 avoids the need to special-case it. If -- `i_min_allow_0` is set, the minimum defaults to 0 instead (including when -- the input is nil), which may be needed if 0 represents the position -- before the first index. if i_min == nil then i_min = 1 else i_min, obj, func = get_index(i_min, obj, func, false, "range", 5) end -- Set `i` as the minimum value if it hasn't been specified. if i < i_min then i = i_min end -- Canonicalize `j`, which will default to the end if not given. By default, -- this may be implied by returning nil for `j` (even if the input is -1), -- to avoid calling `func` unnecessarily. if j ~= nil then j, obj, func = get_index(j, obj, func, not always_infer_upper, "range", 3) end -- Get the maximum value for `j` (if any). if j_max ~= nil then j_max, obj, func = get_index(j_max, obj, func, not always_infer_upper, "range", 6) end -- If `j` is not set but `j_max` has a value, use that. Otherwise, if -- `always_infer_upper` is set then give the length of `obj`. if not j then j = j_max or always_infer_upper and (not func and obj or func(obj)) or nil -- Ensure `j` does not exceed `j_max`. elseif j_max and j > j_max then j = j_max end -- The minimum value for `j` is i - 1, which is equivalent to a range of -- 0 length (e.g. string.find("", "") returns (1, 0)). local j_min = i - 1 if j and j < j_min then j = j_min end return i, j end return export oo8syi7zilb2cjg7t58khlglmo5bzyt မော်ဂျူး:math/compare 828 5247 11956 2025-06-23T13:10:58Z 咽頭べさ 11 ဖန်ဆင်ꩻလဲဉ်းလိတ်မဲ့ငါ တောမ်ႏ "local math_module = "Module:math" local function is_NaN(...) is_NaN = require(math_module).is_NaN return is_NaN(...) end local function sign(...) sign = require(math_module).sign return sign(...) end --[==[ A comparison function for numbers, which returns {true} if {a} sorts before {b}, or otherwise {false}; it can be used as the sort function with {table.sort}. This function is roughly equivalent t..." 11956 Scribunto text/plain local math_module = "Module:math" local function is_NaN(...) is_NaN = require(math_module).is_NaN return is_NaN(...) end local function sign(...) sign = require(math_module).sign return sign(...) end --[==[ A comparison function for numbers, which returns {true} if {a} sorts before {b}, or otherwise {false}; it can be used as the sort function with {table.sort}. This function is roughly equivalent to the {<} operator, but contains the following special considerations in accordance with the {{w|IEEE 754}} standard: * {{w|NaN}} is sorted as though it has a larger absolute value than infinity ({-NaN < -Inf}; {+Inf < +NaN}). * {{w|Signed zero}} is acknowledged, with {-0 < +0}.]==] return function(a, b) -- <, > and == canot return true if either `a` or `b` are NaN. if a < b then return true -- Use > then == instead of >=, so that the ±0 check is only done when `a` -- and `b` are equal. elseif a > b then return false elseif a == b then -- 1/(+0) is Inf; 1/(-0) is -Inf. return a == 0 and b == 0 and 1 / a < 1 / b or false -- One or both must be NaN, and NaN is the only number that returns false -- to a self-equality check, so if `a` == `a` then `b` is NaN (and vice- -- versa). -NaN sorts before everything and +NaN after everything, so the -- sign determines the result. elseif not is_NaN(a) then -- `b` is NaN return sign(b) == 1 elseif not is_NaN(b) then -- `a` is NaN return sign(a) == -1 end -- If both are NaN, only return true if `a` is -NaN and `b` is +NaN. return sign(a) < sign(b) end 632obodjr2zjfbz9zpr3erx1io9vwm4 တမ်းပလေက်:fr-adj 10 5248 11958 2025-06-23T13:14:05Z 咽頭べさ 11 [[တမ်းပလေက်:fr-adj]] စာမျက်နှာကို [[တမ်းပလေက်:fr-adjective]] သို့ 咽頭べさက ရွှေ့ခဲ့သည် 11958 wikitext text/x-wiki #REDIRECT [[တမ်းပလေက်:fr-adjective]] be3cn6mntkgan3zzq25rwq12bndz4rm မော်ဂျူး:table/extend 828 5249 11964 2025-06-23T13:30:49Z 咽頭べさ 11 ဖန်ဆင်ꩻလဲဉ်းလိတ်မဲ့ငါ တောမ်ႏ "local insert = table.insert local select = select --[==[ Extend an existing list by a new list, modifying the existing list in-place. Compare the Python expression {list.extend(new_items)}.]==] return function(t, ...) local i = 0 if select("#", ...) < 2 then local list = ... while true do i = i + 1 local v = list[i] if v == nil then return t end insert(t, v) end else local pos..." 11964 Scribunto text/plain local insert = table.insert local select = select --[==[ Extend an existing list by a new list, modifying the existing list in-place. Compare the Python expression {list.extend(new_items)}.]==] return function(t, ...) local i = 0 if select("#", ...) < 2 then local list = ... while true do i = i + 1 local v = list[i] if v == nil then return t end insert(t, v) end else local pos, list = ... while true do i = i + 1 local v = list[i] if v == nil then return t end insert(t, pos, v) pos = pos + 1 end end end adajacgjldccb0g5nl3tceeu9y5qxf5 မော်ဂျူး:form of/data2 828 5250 11973 2025-06-23T14:06:12Z 咽頭べさ 11 [[မော်ဂျူး:form of/data2]] စာမျက်နှာကို [[မော်ဂျူး:form of/data/2]] သို့ 咽頭べさက ရွှေ့ခဲ့သည် 11973 Scribunto text/plain return require [[မော်ဂျူး:form of/data/2]] n6z8zj07zo7hf9k4yzymqioqgldr6yy မော်ဂျူး:form of/data 828 5251 11976 2025-06-23T14:07:18Z 咽頭べさ 11 [[မော်ဂျူး:form of/data]] စာမျက်နှာကို [[မော်ဂျူး:form of/data/1]] သို့ 咽頭べさက ရွှေ့ခဲ့သည် 11976 Scribunto text/plain return require [[မော်ဂျူး:form of/data/1]] dcftojefwj7fih9ku79y92c0gjsbww7 မော်ဂျူး:form of/functions 828 5252 11977 2025-06-23T14:08:46Z 咽頭べさ 11 ဖန်ဆင်ꩻလဲဉ်းလိတ်မဲ့ငါ တောမ်ႏ "--[=[ DISPLAY_HANDLERS is a list of one or more functions that provide special handling for multipart tags. Each function takes formerly a single argument (the multipart tag), now temporarily two arguments (the multipart tag and the join strategy, which can be nil to use the default), and should either return the formatted display text or nil to check the next handler. If no handlers apply, there is a defau..." 11977 Scribunto text/plain --[=[ DISPLAY_HANDLERS is a list of one or more functions that provide special handling for multipart tags. Each function takes formerly a single argument (the multipart tag), now temporarily two arguments (the multipart tag and the join strategy, which can be nil to use the default), and should either return the formatted display text or nil to check the next handler. If no handlers apply, there is a default handler that appropriately formats most multipart tags. CAT_FUNCTIONS is a map from function names to functions of a single argument, as described in [[Module:form of/cats]]. There are two types of functions: condition handlers (which return true or false) and spec handlers (which return a specification, as described in [[Module:form of/cats]]). We need to put the functions here rather than in [[Module:form of/cats]] because that module is loaded using mw.loadData(), which can't directly handle functions. ]=] local export = {} function export.multipart_join_strategy() -- Recognized values: -- "and": Join with "and", using commas for 3 or more items -- "en-dash": Join with – (en-dash) -- "slash": Join with / (slash) return "slash" end local function wrap_in_inflection_of_sep(text) return '<span class="inflection-of-sep">' .. text .. '</span>' end -- This is a local version of serialCommaJoin from [[Module:table]] that -- implements it a bit differently. local function join_multiparts_with_serial_comma(seq) local length = #seq if length == 0 then return "" elseif length == 1 then return seq[1] -- nothing to join elseif length == 2 then return seq[1] .. wrap_in_inflection_of_sep("&#32;and&#32;") .. seq[2] else local comma = '<span class="serial-comma">,</span>' local conj = '<span class="serial-and">&#32;and&#32;</span>' return table.concat(seq, wrap_in_inflection_of_sep(",&#32;"), 1, length - 1) .. wrap_in_inflection_of_sep(comma .. conj) .. seq[length] end end function export.join_multiparts(parts, joiner) -- Display the elements of a multipart tag. Currently we use "and", -- with commas when then are three or more elements, of the form -- "foo, bar, baz and bat"; but we are seriously considering switching -- to en-dash, e.g. "foo–bar–baz–bat". Arguably, -- dative–ablative masculine–feminine–neuter plural -- looks better then -- dative and ablative masculine, feminine and neuter plural -- and -- first–second–third-person singular present subjunctive -- looks better than -- first-, second- and third-person singular present subjunctive local strategy = joiner or export.multipart_join_strategy() local retval if strategy == "and" then retval = join_multiparts_with_serial_comma(parts) elseif strategy == "en-dash" then retval = table.concat(parts, wrap_in_inflection_of_sep("–")) elseif strategy == "slash" then retval = table.concat(parts, wrap_in_inflection_of_sep("/")) else error("Unrecognized multipart join strategy: " .. strategy) end return '<span class="inflection-of-conjoined">' .. retval .. '</span>' end export.cat_functions = {} export.display_handlers = {} -- Display handler to clean up display of multiple persons by omitting -- redundant "person" in all but the last element. For example, the tag -- "123" maps to "1//2//3", which in turn gets displayed as (approximately) -- "first-, second- and third-person" (with appropriate glossary links, and -- appropriate spans marking the serial comma). table.insert(export.display_handlers, function(tags, joiner) local els = {} local numtags = #tags local strategy = joiner or export.multipart_join_strategy() for i, tag in ipairs(tags) do local suffix = i == numtags and "-person]]" or strategy == "and" and "-]]" or "]]" if tag == "first-person" then table.insert(els, "[[Appendix:Glossary#first person|first" .. suffix) elseif tag == "second-person" then table.insert(els, "[[Appendix:Glossary#second person|second" .. suffix) elseif tag == "third-person" then table.insert(els, "[[Appendix:Glossary#third person|third" .. suffix) else return nil end end return export.join_multiparts(els, joiner) end ) return export 2vjpws88qwen88nsixuztqzubyuzhu3 မော်ဂျူး:string/nowiki 828 5253 11981 2025-06-23T14:18:16Z 咽頭べさ 11 ဖန်ဆင်ꩻလဲဉ်းလိတ်မဲ့ငါ တောမ်ႏ "local table_list_to_set_module = "Module:table/listToSet" local byte = string.byte local char = string.char local find = string.find local format = string.format local gsub = string.gsub local lower = string.lower local sub = string.sub local function list_to_set(...) list_to_set = require(table_list_to_set_module) return list_to_set(...) end local function escape_byte(_, b) return format("&#%d;", b)..." 11981 Scribunto text/plain local table_list_to_set_module = "Module:table/listToSet" local byte = string.byte local char = string.char local find = string.find local format = string.format local gsub = string.gsub local lower = string.lower local sub = string.sub local function list_to_set(...) list_to_set = require(table_list_to_set_module) return list_to_set(...) end local function escape_byte(_, b) return format("&#%d;", b) end local absolute local function get_absolute() absolute, get_absolute = list_to_set({"\"", "&", "'", ";", "<", "=", ">", "[", "]", "{", "|", "}"}, function(_, ch) return format("&#%d;", byte(ch)) end), nil return absolute end local after_newline local function get_after_newline() after_newline, get_after_newline = list_to_set({0x9, 0xA, 0xD, 0x20, 0x21, 0x23, 0x2A, 0x3A}, escape_byte), nil return after_newline end local scheme_chars, unused_scheme_chars, uri_schemes local function get_scheme_chars() local _uri_schemes = {"bitcoin", "geo", "magnet", "mailto", "matrix", "news", "sip", "sips", "sms", "tel", "urn", "xmpp"} uri_schemes, get_scheme_chars = list_to_set(_uri_schemes), nil _uri_schemes = table.concat(_uri_schemes) -- Add alphanumeric characters used in a listed scheme to `scheme_chars`, -- and those that aren't to `unused_scheme_chars`. scheme_chars, unused_scheme_chars = {}, {} for i = 0x61, 0x7A do local chars = find(_uri_schemes, char(i), nil, true) and scheme_chars or unused_scheme_chars chars[i] = true chars[i - 0x20] = true end unused_scheme_chars[0x5F] = true -- _ return scheme_chars end local after_magic_link local function get_after_magic_link() after_magic_link, get_after_magic_link = list_to_set({0x9, 0xA, 0xC, 0xD, 0x20}, escape_byte), nil return after_magic_link end -- Temporary variables. No risk of collisions across stack levels, since there's -- no way for nowiki() to be called recursively. local _str, esc, esc_next, esc_next2 local function nowiki(loc, ch) if esc_next ~= nil then esc, esc_next, esc_next2 = esc_next, esc_next2, nil return esc or nil end esc = (absolute or get_absolute())[ch] if esc then return esc elseif ch == "\n" or ch == "\r" then esc_next = (after_newline or get_after_newline())[byte(_str, loc + 1)] elseif ch == "!" then if byte(_str, loc + 1) == 0x21 then -- ! esc_next = "&#33;" end elseif ch == ":" then if sub(_str, loc + 1, loc + 2) == "//" then return "&#58;" end local n, b = 0 repeat n = n + 1 b = byte(_str, loc - n) until not (scheme_chars or get_scheme_chars())[b] -- Abort on an unused scheme character, as it can't be a scheme. if unused_scheme_chars[b] then return -- Otherwise, check if the the word before the colon matches a scheme. elseif uri_schemes[lower(sub(_str, loc - n + 1, loc - 1))] then return "&#58;" end elseif ch == "-" then local prev = byte(_str, loc - 1) if (prev == 0xA or prev == 0xD) and sub(_str, loc + 1, loc + 3) == "---" then return "&#45;" end elseif ch == "I" then local esc_sp = (after_magic_link or get_after_magic_link())[byte(_str, loc + 4)] if esc_sp and sub(_str, loc + 1, loc + 3) == "SBN" then esc_next = esc_sp end elseif ch == "P" then local esc_sp = (after_magic_link or get_after_magic_link())[byte(_str, loc + 4)] if esc_sp and sub(_str, loc + 1, loc + 3) == "MID" then esc_next, esc_next2 = false, esc_sp -- to avoid escaping "I" in "PMID" end elseif ch == "R" then local esc_sp = (after_magic_link or get_after_magic_link())[byte(_str, loc + 3)] if esc_sp and sub(_str, loc + 1, loc + 2) == "FC" then esc_next = esc_sp end elseif ch == "_" then if byte(_str, loc + 1) == 0x5F then -- _ esc_next = "&#95;" end elseif ch == "~" then if sub(_str, loc + 1, loc + 2) == "~~" then esc_next, esc_next2 = false, "&#126;" end end end local first local function get_first() first, get_first = list_to_set({0x9, 0xA, 0xD, 0x20, 0x21, 0x23, 0x2A, 0x2B, 0x2D, 0x3A, 0x5F, 0x7E}, escape_byte), nil return first end local last local function get_last() last, get_last = list_to_set({0x9, 0xA, 0xC, 0xD, 0x20, 0x21, 0x3A, 0x5F, 0x7E}, escape_byte), nil return last end return function(str) if #str == 0 then return str end _str, esc, esc_next, esc_next2 = str, nil, nil, nil str = gsub(str, "()([%s!\"#&'*%-:;<=>IPR[%]_{|}~])", nowiki) local b = byte(str, 1) local esc_first = (first or get_first())[b] if #str == 1 then return esc_first or (last or get_last())[b] or str end local esc_last = (last or get_last())[byte(str, -1)] if esc_first then if esc_last then return esc_first .. sub(str, 2, -2) .. esc_last end return esc_first .. sub(str, 2) elseif esc_last then return sub(str, 1, -2) .. esc_last end return str end iqdxq0iiw3rpvozlhmhirkfu3sj92s0 aîné 0 5254 11982 2025-06-23T14:23:40Z 咽頭べさ 11 ဖန်ဆင်ꩻလဲဉ်းလိတ်မဲ့ငါ တောမ်ႏ "==ပိဉ်တိစ်== ===ရွီးခိုႏ=== {{inh+|fr|frm|aisné}}, from {{inh|fr|fro|aisné}} ===Pronunciation=== * {{fr-IPA}} * {{audio|fr|Fr-aîné.ogg}} * {{homophones|fr|henné}} ===နာမဝိသေသန=== {{fr-adj}} # [[အတန်သွတ်ꩻ]]။ ===နာမ်ႏ=== {{fr-noun|m|f=+}} # ?" 11982 wikitext text/x-wiki ==ပိဉ်တိစ်== ===ရွီးခိုႏ=== {{inh+|fr|frm|aisné}}, from {{inh|fr|fro|aisné}} ===Pronunciation=== * {{fr-IPA}} * {{audio|fr|Fr-aîné.ogg}} * {{homophones|fr|henné}} ===နာမဝိသေသန=== {{fr-adj}} # [[အတန်သွတ်ꩻ]]။ ===နာမ်ႏ=== {{fr-noun|m|f=+}} # ? q8a9n0zkijp6wq67hvn39vku3xw7vbx 11986 11982 2025-06-23T14:44:39Z 咽頭べさ 11 11986 wikitext text/x-wiki ==ပိဉ်တိစ်== ===ရွီးခိုႏ=== {{inh+|fr|frm|aisné}}, from {{inh|fr|fro|aisné}} ====အငဝ်းထန်ႏ==== * {{fr-IPA}} * {{audio|fr|Fr-aîné.ogg}} * {{homophones|fr|henné}} ===နာမဝိသေသန=== {{fr-adj}} # [[အတန်သွတ်ꩻ]]။ ===နာမ်ႏ=== {{fr-noun|m|f=+}} # ? 7lcgh6w1f86kn3a11t9sry6robe8rye ကဏ္ဍ:မျန်မာ လိတ်ဖြုံႏခင်ႏလမ်း 14 5255 12018 2025-06-24T00:35:51Z 咽頭べさ 11 ဖန်ဆင်ꩻလဲဉ်းလိတ်မဲ့ငါ တောမ်ႏ "[[ကဏ္ဍ:ယူနီကိုဒ် လိတ်ဖြုံႏခင်ႏလမ်းဖုံႏ]]" 12018 wikitext text/x-wiki [[ကဏ္ဍ:ယူနီကိုဒ် လိတ်ဖြုံႏခင်ႏလမ်းဖုံႏ]] nrdus8gg7d9u6ap1ejbmjsb3tewr3zp ကဏ္ဍ:ယူနီကိုဒ် လိတ်ဖြုံႏခင်ႏလမ်းဖုံႏ 14 5256 12019 2025-06-24T00:38:06Z 咽頭べさ 11 ဖန်ဆင်ꩻလဲဉ်းလိတ်မဲ့ငါ တောမ်ႏ "[[ကဏ္ဍ:ဝိစ်သိဉ်နရီ]]" 12019 wikitext text/x-wiki [[ကဏ္ဍ:ဝိစ်သိဉ်နရီ]] pkvhqpd8diibkpie4doq045lidcla8s ကဏ္ဍ:မဲင်ꩻ-မန်းလိတ် လိတ်အက္ခရာႏဖုံႏ 14 5257 12020 2025-06-24T00:40:10Z 咽頭べさ 11 ဖန်ဆင်ꩻလဲဉ်းလိတ်မဲ့ငါ တောမ်ႏ "[[ကဏ္ဍ:ယူနီကိုဒ် လိတ်ဖြုံႏခင်ႏလမ်းဖုံႏ]]" 12020 wikitext text/x-wiki [[ကဏ္ဍ:ယူနီကိုဒ် လိတ်ဖြုံႏခင်ႏလမ်းဖုံႏ]] nrdus8gg7d9u6ap1ejbmjsb3tewr3zp မော်ဂျူး:Kali-translit 828 5258 12064 2025-06-24T02:27:09Z 咽頭べさ 11 ဖန်ဆင်ꩻလဲဉ်းလိတ်မဲ့ငါ တောမ်ႏ "local export = {} local gsub = mw.ustring.gsub local u = mw.ustring.char local tt1 = { -- consonants ['ꤊ'] = 'k', ['ꤋ'] = 'hk', ['ꤌ'] = 'g', ['ꤍ'] = 'ng', ['ꤎ'] = 's', ['ꤏ'] = 'hs', ['ꤐ'] = 'z', ['ꤑ'] = 'ny', ['ꤒ'] = 't', ['ꤓ'] = 'ht', ['ꤔ'] = 'n', ['ꤕ'] = 'p', ['ꤖ'] = 'hp', ['ꤗ'] = 'm', ['ꤘ'] = 'd', ['ꤙ'] = 'b', ['ꤚ'] = 'r', ['ꤛ'] = 'y', ['ꤜ'] = 'l', ['ꤝ'] =..." 12064 Scribunto text/plain local export = {} local gsub = mw.ustring.gsub local u = mw.ustring.char local tt1 = { -- consonants ['ꤊ'] = 'k', ['ꤋ'] = 'hk', ['ꤌ'] = 'g', ['ꤍ'] = 'ng', ['ꤎ'] = 's', ['ꤏ'] = 'hs', ['ꤐ'] = 'z', ['ꤑ'] = 'ny', ['ꤒ'] = 't', ['ꤓ'] = 'ht', ['ꤔ'] = 'n', ['ꤕ'] = 'p', ['ꤖ'] = 'hp', ['ꤗ'] = 'm', ['ꤘ'] = 'd', ['ꤙ'] = 'b', ['ꤚ'] = 'r', ['ꤛ'] = 'y', ['ꤜ'] = 'l', ['ꤝ'] = 'w', ['ꤞ'] = 'th', ['ꤟ'] = 'h', ['ꤠ'] = 'v', ['ꤡ'] = 'c', -- vowels ['ꤢ'] = 'a', ['ꤣ'] = 'oe', ['ꤤ'] = 'i', ['ꤥ'] = 'o', -- tones ['꤫'] = u(0x0301), ['꤬'] = u(0x0300), ['꤭'] = u(0x0304), -- marks ['꤮'] = '-', ['꤯'] = '.', -- numerals ['꤀'] = '0', ['꤁'] = '1', ['꤂'] = '2', ['꤃'] = '3', ['꤄'] = '4', ['꤅'] = '5', ['꤆'] = '6', ['꤇'] = '7', ['꤈'] = '8', ['꤉'] = '9', -- zero-width space (display it if it hides in a word) [u(0x200B)] = '‼', } local tt2 = { -- vowels ['ꤢꤦ'] = 'ue', ['ꤢꤧ'] = 'ae', ['ꤢꤨ'] = 'u', ['ꤢꤩ'] = 'e', ['ꤢꤪ'] = 'oa', ['ꤣꤦ'] = 'oeue', ['ꤣꤧ'] = 'ueae', ['ꤣꤨ'] = 'oeu', ['ꤣꤩ'] = 'oee', ['ꤣꤪ'] = 'oeoa', } function export.tr(text, lang, sc) if type(text) == 'table' then -- called directly from a template text = text.args[1] end text = gsub(text, '([ꤢ-ꤥ][ꤦ-꤭]*)([ꤢ-ꤥ])', '%1’%2') -- add apostrophe between adjacent two vowels text = gsub(text, '([ꤊ-ꤡ])ꤟ([ꤢ-ꤥ][ꤦ-ꤪ]?)', '%1%2̤') -- change h between initial and vowel into subcolon text = gsub(text, 'ꤟꤌꤣ', 'u'..u(0x0324)..'eoe') -- use u() to break Unicode normalization text = gsub(text, 'ꤛꤣ', 'ueoe') text = gsub(text, '[ꤢꤣ][ꤦ-ꤪ]', tt2) text = gsub(text, '.', tt1) text = gsub(text, '([aeiou])([aeiou]*)̤', '%1̤%2') -- move subcolon to first aeiou text = gsub(text, '([aeiou]̤?)([aeiou]*)(['..u(0x0301)..u(0x0300)..u(0x0304)..'])', '%1%3%2') -- add tone mark on first aeiou return text end return export 3cdu1zhk7dkcqwpt0s53fgub6dq0ewn မော်ဂျူး:kjp-translit 828 5259 12065 2025-06-24T02:28:43Z 咽頭べさ 11 ဖန်ဆင်ꩻလဲဉ်းလိတ်မဲ့ငါ တောမ်ႏ "local export = {} local diacritics = { [mw.ustring.char(0x1039)] = "", [mw.ustring.char(0x103D)] = "w", [mw.ustring.char(0x1060)] = "l", [mw.ustring.char(0x103C)] = "r", [mw.ustring.char(0x103B)] = "j", [mw.ustring.char(0x105E)] = "n", [mw.ustring.char(0x102E)] = "I", [mw.ustring.char(0x1031)] = "E", [mw.ustring.char(0x1032)] = "Ä", [mw.ustring.char(0x103A)] = "V", [mw.ustring.char(0x103E)] = "..." 12065 Scribunto text/plain local export = {} local diacritics = { [mw.ustring.char(0x1039)] = "", [mw.ustring.char(0x103D)] = "w", [mw.ustring.char(0x1060)] = "l", [mw.ustring.char(0x103C)] = "r", [mw.ustring.char(0x103B)] = "j", [mw.ustring.char(0x105E)] = "n", [mw.ustring.char(0x102E)] = "I", [mw.ustring.char(0x1031)] = "E", [mw.ustring.char(0x1032)] = "Ä", [mw.ustring.char(0x103A)] = "V", [mw.ustring.char(0x103E)] = "H", [mw.ustring.char(0x102B)] = "A", [mw.ustring.char(0x102C)] = "A", [mw.ustring.char(0x1038)] = "3", [mw.ustring.char(0x1030)] = "Y", [mw.ustring.char(0x102F)] = "U", [mw.ustring.char(0x102D)] = "Ï", [mw.ustring.char(0x108B)] = "2", [mw.ustring.char(0x1036)] = "Q", [mw.ustring.char(0x1037)] = "4", } local consonants = { ["က"]="k", ["ခ"]="kh", ["ဂ"]="K", ["ဃ"]="kh", ["င"]="ŋ", ["စ"]="c", ["ဆ"]="ch", ["ဇ"]="c", ["ဈ"]="ch", ["ည"]="ɲ", ["ဋ"]="t", ["ဌ"]="th", ["ဍ"]="d", ["ဎ"]="d", ["ဏ"]="n", ["တ"]="t", ["ထ"]="th", ["ဒ"]="T", ["ဓ"]="th", ["န"]="n", ["ပ"]="p", ["ဖ"]="ph", ["ဗ"]="p", ["ဘ"]="ph", ["မ"]="m", ["ယ"]="j", ["ရ"]="r", ["လ"]="l", ["ဝ"]="w", ["သ"]="θ", ["ဟ"]="h", ["ဠ"]="l", ["အ"]="ʔ", ["ၜ"]="b", ["ၯ"]="ɣ", ["ၰ"]="x", } function export.tr(text, lang, sc) text = mw.ustring.gsub(text, ".", diacritics) text = mw.ustring.gsub(text, ".", consonants) -- making sure U and Ä is rendered correctly text = mw.ustring.gsub(text, "([ÏIÄ])([UY])", "%2%1") text = mw.ustring.gsub(text, "([ÏI])Ä", "Ä%1") -- vowels text = mw.ustring.gsub(text, "EAwV2", "ʊ̄") text = mw.ustring.gsub(text, "EAw4V", "ʊ̂") text = mw.ustring.gsub(text, "UÏŋV2", "ə̄ɴ") text = mw.ustring.gsub(text, "UÏŋV3", "ə́ɴ") text = mw.ustring.gsub(text, "UÏŋ4V", "ə̂ɴ") text = mw.ustring.gsub(text, "UQwV3", "ó") text = mw.ustring.gsub(text, "UÏwV2", "ō") text = mw.ustring.gsub(text, "AnV2", "āɴ") text = mw.ustring.gsub(text, "AnV3", "áɴ") text = mw.ustring.gsub(text, "An4V", "âɴ") text = mw.ustring.gsub(text, "AŋV2", "āiɴ") text = mw.ustring.gsub(text, "AŋV3", "áiɴ") text = mw.ustring.gsub(text, "Aŋ4V", "âiɴ") text = mw.ustring.gsub(text, "EAhV", "ʊ́") text = mw.ustring.gsub(text, "EAtV", "ó") text = mw.ustring.gsub(text, "EAwV", "ʊ̀") text = mw.ustring.gsub(text, "EnV2", "ī̱ɴ") text = mw.ustring.gsub(text, "EnV3", "í̱ɴ") text = mw.ustring.gsub(text, "En4V", "î̱ɴ") text = mw.ustring.gsub(text, "EwV2", "ī̱") text = mw.ustring.gsub(text, "Ew4V", "î̱") text = mw.ustring.gsub(text, "ÏŋV2", "ēiɴ") text = mw.ustring.gsub(text, "ÏŋV3", "éiɴ") text = mw.ustring.gsub(text, "Ïŋ4V", "êiɴ") text = mw.ustring.gsub(text, "QŋV2", "ōɴ") text = mw.ustring.gsub(text, "QŋV3", "óɴ") text = mw.ustring.gsub(text, "Qŋ4V", "ôɴ") text = mw.ustring.gsub(text, "UÄÏ2", "wē") text = mw.ustring.gsub(text, "UÄÏ3", "wé") text = mw.ustring.gsub(text, "UÄÏ4", "wê") text = mw.ustring.gsub(text, "UÏhV", "ɨ́") text = mw.ustring.gsub(text, "UÏŋV", "ə̀ɴ") text = mw.ustring.gsub(text, "UÏTV", "ɨ̀") text = mw.ustring.gsub(text, "UŋV2", "ə̄ɯɴ") text = mw.ustring.gsub(text, "UŋV3", "ə́ɯɴ") text = mw.ustring.gsub(text, "Uŋ4V", "ə̂ɯɴ") text = mw.ustring.gsub(text, "UÏtV", "ó") text = mw.ustring.gsub(text, "UÏwV", "ò") text = mw.ustring.gsub(text, "AnV", "àɴ") text = mw.ustring.gsub(text, "AŋV", "àiɴ") text = mw.ustring.gsub(text, "EhV", "í̱") text = mw.ustring.gsub(text, "EnV", "ì̱ɴ") text = mw.ustring.gsub(text, "EtV", "é") text = mw.ustring.gsub(text, "EwV", "ì̱") text = mw.ustring.gsub(text, "HVE", "í̱") text = mw.ustring.gsub(text, "ÏkV", "ái") text = mw.ustring.gsub(text, "ÏŋV", "èiɴ") text = mw.ustring.gsub(text, "j4V", "ɛ̂") text = mw.ustring.gsub(text, "([nŋ])V2", "āɴ") text = mw.ustring.gsub(text, "([nŋ])V3", "áɴ") text = mw.ustring.gsub(text, "([nŋ])4V", "âɴ") text = mw.ustring.gsub(text, "QŋV", "òɴ") text = mw.ustring.gsub(text, "UÄ2", "wī") text = mw.ustring.gsub(text, "UÄ3", "wí") text = mw.ustring.gsub(text, "UÄ4", "wî") text = mw.ustring.gsub(text, "UÄÏ", "wè") text = mw.ustring.gsub(text, "UÏ2", "ɨ̄") text = mw.ustring.gsub(text, "UÏ3", "ɨ̂") text = mw.ustring.gsub(text, "UŋV", "ə̀ɯɴ") text = mw.ustring.gsub(text, "UkV", "áʊ") text = mw.ustring.gsub(text, "UKV", "àʊ") text = mw.ustring.gsub(text, "UQ2", "ōʊɴ") text = mw.ustring.gsub(text, "UQ3", "óʊɴ") text = mw.ustring.gsub(text, "UQ4", "ôʊɴ") text = mw.ustring.gsub(text, "wV2", "ɔ̄") text = mw.ustring.gsub(text, "w4V", "ɔ̂") text = mw.ustring.gsub(text, "VU", "ə") text = mw.ustring.gsub(text, "AÄ", "ɛ̄") text = mw.ustring.gsub(text, "ÄA", "ɛ̄") text = mw.ustring.gsub(text, "AV", "ài") text = mw.ustring.gsub(text, "A2", "ā") text = mw.ustring.gsub(text, "A4", "â") text = mw.ustring.gsub(text, "E4", "ê") text = mw.ustring.gsub(text, "I2", "ī") text = mw.ustring.gsub(text, "I3", "í") text = mw.ustring.gsub(text, "I4", "î") text = mw.ustring.gsub(text, "jV", "ɛ̀") text = mw.ustring.gsub(text, "QE", "é") text = mw.ustring.gsub(text, "hV", "ɔ́") text = mw.ustring.gsub(text, "HV", "ɔ́") text = mw.ustring.gsub(text, "([nŋ])V", "àɴ") text = mw.ustring.gsub(text, "UÄ", "wì") text = mw.ustring.gsub(text, "wV", "ɔ̀") text = mw.ustring.gsub(text, "UQ", "òʊɴ") text = mw.ustring.gsub(text, "Y2", "ɯ̄") text = mw.ustring.gsub(text, "Y3", "ɯ́") text = mw.ustring.gsub(text, "Y4", "ɯ̂") text = mw.ustring.gsub(text, "A", "à") text = mw.ustring.gsub(text, "Ä", "ɛ́") text = mw.ustring.gsub(text, "E", "è") text = mw.ustring.gsub(text, "I", "ì") text = mw.ustring.gsub(text, "K", "k") text = mw.ustring.gsub(text, "T", "t") text = mw.ustring.gsub(text, "Y", "ɯ̀") text = mw.ustring.gsub(text, "([kgŋcɲtdnpbmjrlwθhʔɣx])3", "%1á") -- interpunction text = mw.ustring.gsub(text, "၊", ",") text = mw.ustring.gsub(text, "။", ".") -- spaces text = mw.ustring.gsub(text, "([aeiouàèìòùáéíóúāēīōūâêîôûɨʊɯɛɔɴə" .. mw.ustring.char(0x0300) .. mw.ustring.char(0x0301) .. mw.ustring.char(0x0302) .. mw.ustring.char(0x0304) .. mw.ustring.char(0x0331) .. "])([kgŋcɲtdnpbmjrlwθhʔɣx])", "%1 %2") return(text) end return export epqwokqlmg6uhasdjkuicyrj1zfrhjt ကဏ္ဍ:မန်း ကြိယာႏ 14 5260 12084 2025-06-24T02:43:06Z 咽頭べさ 11 [[ကဏ္ဍ:မန်း ကြိယာႏ]] စာမျက်နှာကို [[ကဏ္ဍ:မန်းကြိယာႏဖုံႏ]] သို့ 咽頭べさက ရွှေ့ခဲ့သည် 12084 wikitext text/x-wiki #REDIRECT [[:ကဏ္ဍ:မန်းကြိယာႏဖုံႏ]] dceg3yve1gufll6mazmxwnpp1njj552 ကဏ္ဍ:မန်း ဂဏန်ꩻ 14 5261 12087 2025-06-24T02:44:37Z 咽頭べさ 11 [[ကဏ္ဍ:မန်း ဂဏန်ꩻ]] စာမျက်နှာကို [[ကဏ္ဍ:မန်းဂဏန်ꩻဖုံႏ]] သို့ 咽頭べさက ရွှေ့ခဲ့သည် 12087 wikitext text/x-wiki #REDIRECT [[:ကဏ္ဍ:မန်းဂဏန်ꩻဖုံႏ]] cnanyar430v3dkrq4927l5y46nf5g4q ကဏ္ဍ:အဘိဓာန်ႏကို တပါသော့ꩻတဝ်းဒါႏ မန်းဝေါဟာရဖုံႏ 14 5262 12089 2025-06-24T02:45:49Z 咽頭べさ 11 [[ကဏ္ဍ:အဘိဓာန်ႏကို တပါသော့ꩻတဝ်းဒါႏ မန်းဝေါဟာရဖုံႏ]] စာမျက်နှာကို [[ကဏ္ဍ:မန်းငဝ်းတဲႏဖုံႏ]] သို့ 咽頭べさက ရွှေ့ခဲ့သည် 12089 wikitext text/x-wiki #REDIRECT [[:ကဏ္ဍ:မန်းငဝ်းတဲႏဖုံႏ]] l72wwpe1wxpdbt3gooavz61902zmbp8 တမ်းပလေက်:blk-adjective 10 5263 12100 2025-06-24T02:54:28Z 咽頭べさ 11 ဖန်ဆင်ꩻလဲဉ်းလိတ်မဲ့ငါ တောမ်ႏ "{{head|blk|နာမဝိသေသန}}" 12100 wikitext text/x-wiki {{head|blk|နာမဝိသေသန}} 7kjmypk7oea4ypidz6iifkf1veme2hg တမ်းပလေက်:my-adverb 10 5264 12101 2025-06-24T02:55:05Z 咽頭べさ 11 ဖန်ဆင်ꩻလဲဉ်းလိတ်မဲ့ငါ တောမ်ႏ "{{head|my|ကြိယာႏဝိသေသန}}" 12101 wikitext text/x-wiki {{head|my|ကြိယာႏဝိသေသန}} dlt4nbhwo8mbdsbfuf0utlj59bxqlp9 ကဏ္ဍ:မန်း နာမဝိသေသန 14 5265 12110 2025-06-24T03:00:10Z 咽頭べさ 11 [[ကဏ္ဍ:မန်း နာမဝိသေသန]] စာမျက်နှာကို [[ကဏ္ဍ:မန်းနာမဝိသေသနဖုံႏ]] သို့ 咽頭べさက ရွှေ့ခဲ့သည် 12110 wikitext text/x-wiki #REDIRECT [[:ကဏ္ဍ:မန်းနာမဝိသေသနဖုံႏ]] ds5ju3kfahijkgmcyv28lmjaqz9va4y တမ်းပလေက်:my-pronoun 10 5266 12113 2025-06-24T03:02:13Z 咽頭べさ 11 ဖန်ဆင်ꩻလဲဉ်းလိတ်မဲ့ငါ တောမ်ႏ "{{head|my|နာမ်ႏတင်}}" 12113 wikitext text/x-wiki {{head|my|နာမ်ႏတင်}} bfd06uebiyn1ttcweyu3sevhrsdikaq ကဏ္ဍ:မန်း ဝိဘတ် 14 5267 12115 2025-06-24T03:02:58Z 咽頭べさ 11 [[ကဏ္ဍ:မန်း ဝိဘတ်]] စာမျက်နှာကို [[ကဏ္ဍ:မန်းဝိဘတ်ဖုံႏ]] သို့ 咽頭べさက ရွှေ့ခဲ့သည် 12115 wikitext text/x-wiki #REDIRECT [[:ကဏ္ဍ:မန်းဝိဘတ်ဖုံႏ]] 9s88s3zh2q65g6ezwmhsy2w7veuelxd ကဏ္ဍ:မန်း ကြိယာႏဝိသေသန 14 5268 12128 2025-06-24T03:08:44Z 咽頭べさ 11 [[ကဏ္ဍ:မန်း ကြိယာႏဝိသေသန]] စာမျက်နှာကို [[ကဏ္ဍ:မန်းကြိယာႏဝိသေသနဖုံႏ]] သို့ 咽頭べさက ရွှေ့ခဲ့သည် 12128 wikitext text/x-wiki #REDIRECT [[:ကဏ္ဍ:မန်းကြိယာႏဝိသေသနဖုံႏ]] sm7l7q7y80jypuqjjc0zaa6yel0vcg6 ကဏ္ဍ:မန်း နာမ်ႏတင် 14 5269 12137 2025-06-24T03:12:27Z 咽頭べさ 11 [[ကဏ္ဍ:မန်း နာမ်ႏတင်]] စာမျက်နှာကို [[ကဏ္ဍ:မန်းနာမ်ႏတင်ဖုံႏ]] သို့ 咽頭べさက ရွှေ့ခဲ့သည် 12137 wikitext text/x-wiki #REDIRECT [[:ကဏ္ဍ:မန်းနာမ်ႏတင်ဖုံႏ]] dz36asw7jomogrft79oc9cwk1tk28tq ကဏ္ဍ:မန်း နာမ်ႏဆဲင်ႏတဖြာꩻ 14 5270 12142 2025-06-24T03:15:35Z 咽頭べさ 11 [[ကဏ္ဍ:မန်း နာမ်ႏဆဲင်ႏတဖြာꩻ]] စာမျက်နှာကို [[ကဏ္ဍ:မန်းနာမ်ႏဆဲင်ႏတဖြာꩻဖုံႏ]] သို့ 咽頭べさက ရွှေ့ခဲ့သည် 12142 wikitext text/x-wiki #REDIRECT [[:ကဏ္ဍ:မန်းနာမ်ႏဆဲင်ႏတဖြာꩻဖုံႏ]] f25k773h8xcklbl04ct7oag68ag94bj ကဏ္ဍ:အဝ်ႏသက္ကတ ကထူႏလွူးခါꩻဒါႏ မန်းဝေါဟာရဖုံႏ 14 5271 12144 2025-06-24T03:17:17Z 咽頭べさ 11 [[ကဏ္ဍ:အဝ်ႏသက္ကတ ကထူႏလွူးခါꩻဒါႏ မန်းဝေါဟာရဖုံႏ]] စာမျက်နှာကို [[ကဏ္ဍ:အဝ်ႏမန်း ကထူႏလွူးခါꩻဒါႏ သက္ကတဝေါဟာရဖုံႏ]] သို့ 咽頭べさက ရွှေ့ခဲ့သည် 12144 wikitext text/x-wiki #REDIRECT [[:ကဏ္ဍ:အဝ်ႏမန်း ကထူႏလွူးခါꩻဒါႏ သက္ကတဝေါဟာရဖုံႏ]] imlshddsplaxhim0mlhqg80mftgtaw1 ကဏ္ဍ:အဝ်ႏသက္ကတ ကလင်ꩻလွဉ်ဒါႏ မန်းဝေါဟာရဖုံႏ 14 5272 12146 2025-06-24T03:19:48Z 咽頭べさ 11 [[ကဏ္ဍ:အဝ်ႏသက္ကတ ကလင်ꩻလွဉ်ဒါႏ မန်းဝေါဟာရဖုံႏ]] စာမျက်နှာကို [[ကဏ္ဍ:အဝ်ႏမန်း ကလင်ꩻလွဉ်ဒါႏ သက္ကတဝေါဟာရဖုံႏ]] သို့ 咽頭べさက ရွှေ့ခဲ့သည် 12146 wikitext text/x-wiki #REDIRECT [[:ကဏ္ဍ:အဝ်ႏမန်း ကလင်ꩻလွဉ်ဒါႏ သက္ကတဝေါဟာရဖုံႏ]] tibai84zznzm8e68nrfnywq2frooh6d