ဝိစ်သိဉ်နရီ
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(" and ") .. seq[2]
else
local comma = '<span class="serial-comma">,</span>'
local conj = '<span class="serial-and"> and </span>'
return table.concat(seq, wrap_in_inflection_of_sep(", "), 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 = "!"
end
elseif ch == ":" then
if sub(_str, loc + 1, loc + 2) == "//" then
return ":"
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 ":"
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 "-"
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 = "_"
end
elseif ch == "~" then
if sub(_str, loc + 1, loc + 2) == "~~" then
esc_next, esc_next2 = false, "~"
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