-- 模块用于 满文⇆转写转换
-- bug、转换错误在User:Араси讨论页留言
-- (User talk:Араси:
-- https://zh.wikipedia.org/wiki/User_talk:Араси
-- https://incubator.wikimedia.org/wiki/User_talk:Араси)
-- 致谢:英文维基词典Module:mnc-translit (https://en.wiktionary.org/wiki/Module:mnc-translit)
-- 及创建者 Wyang (https://en.wiktionary.org/wiki/User:Wyang)
local export = {}
-- a(text) 太清
-- 参考: http://abkai.net/core/zh/manchu/manchu-transliteration/
-- 注意: 为避免歧义: 全角单引号(’) 被误认为 半角单引号+空格(' ),原转写中全角引号均以半角引号替代
function export.a(text)
local abkai={
["ᠠ"]="a",
["ᡝ"]="e",
["ᡳ"]="i",
["ᠣ"]="o",
["ᡠ"]="u",
["ᡡ"]="v",
["ᠨ"]="n",
["ᡴ"]="k",
["ᡤ"]="g",
["ᡥ"]="h",
["ᠪ"]="b",
["ᡦ"]="p",
["ᠰ"]="s",
["ᡧ"]="x",
["ᡨ"]="t",
["ᡩ"]="d",
["ᠯ"]="l",
["ᠮ"]="m",
["ᠴ"]="q",
["ᠵ"]="j",
["ᠶ"]="y",
["ᠺ"]="k'",
["ᡬ"]="g'",
["ᡭ"]="h'",
["ᡵ"]="r",
["ᡶ"]="f",
["ᠸ"]="w",
["ᡮ"]="c",
["ᡟ"]="y'",
["ᡯ"]="z",
["ᡰ"]="r'",
["ᡱ"]="q''", -- 避免连续单引号''→斜体
["ᡷ"]="j''" ,-- 避免连续单引号''→斜体
["ᠩ"]="ng",
["᠇"]="'", --SYLLABLE BOUNDARY MARKER 避免连续单引号''→斜体
["᠊"]="-", --Nirugu 字干符
[""]="-", --ZWJ 零宽度连接符
[" "]="-", --NNBSP 窄不换行空格
["᠋"]="^", --FREE VARIATION SELECTOR ONE 自由变体选择符1
["᠌"]="^^", --FREE VARIATION SELECTOR TWO 自由变体选择符2
["᠍"]="^^^", --FREE VARIATION SELECTOR THREE 自由变体选择符3
[""]="^^^^", --VOWEL SEPARATOR 元音分隔符
["᠈"]=",", --ᠴᡳᡴ᠋
["᠉"]="." --ᠴᡳᡴ᠋
}
text=text.args[1]
text=mw.ustring.gsub(text,"([ᡴᡤᡥ])᠋ᡡ","%1'v") -- k'v g'v h'v
text=mw.ustring.gsub(text,"ᠨ᠋","n'") --借词/专有名词中有点的-n
text=mw.ustring.gsub(text,"([ᠠᡝᡳᠣᡠᡡ])ᡳ᠌?([ᠨᡴᡤᡥᠪᡦᠰᡧᡨᡩᠯᠮᠴᠵᠶᠺᡬᡭᡵᡶᠸᡮᡯᡰᡱᡷᠩ᠇᠊])","%1i%2") -- 元音后-i的词中型
text=mw.ustring.gsub(text,"([ᠠᡝᡳᠣᡠᡡ])ᡨ᠌?([ᠨᡴᡤᡥᠪᡦᠰᡧᡨᡩᠯᠮᠴᠵᠶᠺᡬᡭᡵᡶᠸᡮᡯᡰᡱᡷᠩ᠊])","%1t%2") -- 闭音节末尾的-t
text=mw.ustring.gsub(text,"[ᠠᡝᡳᠣᡠᡡᠨᡴᡤᡥᠪᡦᠰᡧᡨᡩᠯᠮᠴᠵᠶᠺᡬᡭᡵᡶᠸᡮᡟᡯᡰᡱᡷᠩ᠇᠊ ᠋᠌᠍᠈᠉]",abkai)
text=mw.ustring.gsub(text,"''i","y'") -- 知 蚩 jy'=j''i, qy'=q''i
text=mw.ustring.gsub(text,"([aeiouv])[ou]%^?","%1u") -- →Au
text=mw.ustring.gsub(text,"</?br[/ ]->"," ") --换行→空格
return text
end
-- v(text) 穆麟德
-- ῾=U+1FFE
function export.v(text)
local special={
["ᡮᡟ"]="ts", -- 雌
["ᡱᡳ"]="c῾y", -- 蚩
["ᡷᡳ"]="jy", -- 知
["ᡴ᠋ᡡ"]="k῾ū", --阴性k
["ᡤ᠋ᡡ"]="g῾ū", --阴性g
["ᡥ᠋ᡡ"]="h῾ū" --阴性h
}
local von={
["ᠠ"]="a",
["ᡝ"]="e",
["ᡳ"]="i",
["ᠣ"]="o",
["ᡠ"]="u",
["ᡡ"]="ū",
["ᠨ"]="n",
["ᡴ"]="k",
["ᡤ"]="g",
["ᡥ"]="h",
["ᠪ"]="b",
["ᡦ"]="p",
["ᠰ"]="s",
["ᡧ"]="š",
["ᡨ"]="t",
["ᡩ"]="d",
["ᠯ"]="l",
["ᠮ"]="m",
["ᠴ"]="c",
["ᠵ"]="j",
["ᠶ"]="y",
["ᠺ"]="k῾",
["ᡬ"]="g῾",
["ᡭ"]="h῾",
["ᡵ"]="r",
["ᡶ"]="f",
["ᠸ"]="w",
["ᡮ"]="ts῾",
["ᡟ"]="y",
["ᡯ"]="dz",
["ᡰ"]="ž",
["ᡱ"]="c῾",
["ᡷ"]="j῾", -- 穆麟德转写中不存在j῾,为便于区分记为j῾
["ᠩ"]="ng",
["᠇"]="", -- SYLLABLE BOUNDARY MARKER 穆麟德转写不体现
["᠊"]="-", -- Nirugu 字干符
[""]="-", -- ZWJ 零宽度连接符
[" "]=" ", -- NNBSP 窄不换行空格→NBSP 不换行空格
["᠈"]=",",
["᠉"]="."
}
text=text.args[1]
text=mw.ustring.gsub(text,"([ᠠᡝᡳᠣᡠᡡ])ᡳ᠌?([ᠨᡴᡤᡥᠪᡦᠰᡧᡨᡩᠯᠮᠴᠵᠶᠺᡬᡭᡵᡶᠸᡮᡯᡰᡱᡷᠩ᠇᠊])","%1i%2") -- 元音后-i的词中型
text=mw.ustring.gsub(text,"([ᠠᡝᡳᠣᡠᡡ])ᡨ᠌?([ᠨᡴᡤᡥᠪᡦᠰᡧᡨᡩᠯᠮᠴᠵᠶᠺᡬᡭᡵᡶᠸᡮᡯᡰᡱᡷᠩ᠊])","%1t%2") -- 闭音节末尾的-t
text=mw.ustring.gsub(text,"ᡯᡳ᠌?","dzi") -- 资 dzi+FVS2→dzi
text=mw.ustring.gsub(text,"ᠨ᠋","n῾") --借词/专有名词中有点的-n, 穆麟德转写中不存在, 为便于区分保留
text=mw.ustring.gsub(text,"[ᡮᡱᡷ][ᡟᡳ]",special) -- 雌 蚩 知
text=mw.ustring.gsub(text,"[ᡴᡤᡥ]᠋ᡡ",special) -- k῾ū g῾ū h῾ū
text=mw.ustring.gsub(text,"[ᠠᡝᡳᠣᡠᡡᠨᡴᡤᡥᠪᡦᠰᡧᡨᡩᠯᠮᠴᠵᠶᠺᡬᡭᡵᡶᠸᡮᡟᡯᡰᡱᡷᠩ᠇᠊ ᠈᠉]",von)
text=mw.ustring.gsub(text,"([aeiouū])u᠋?","%1o") -- Au→Ao
text=mw.ustring.gsub(text,"</?br[/ ]->"," ") --换行→空格
return text
end
-- p(text) 新满汉
function export.p(text)
local pinyin={
["ᠠ"]="a",
["ᡝ"]="e",
["ᡳ"]="i",
["ᠣ"]="o",
["ᡠ"]="u",
["ᡡ"]="uu",
["ᠨ"]="n",
["ᡴ"]="k",
["ᡤ"]="g",
["ᡥ"]="h",
["ᠪ"]="b",
["ᡦ"]="p",
["ᠰ"]="s",
["ᡧ"]="sh",
["ᡨ"]="t",
["ᡩ"]="d",
["ᠯ"]="l",
["ᠮ"]="m",
["ᠴ"]="ch",
["ᠵ"]="zh",
["ᠶ"]="y",
["ᠺ"]="kk",
["ᡬ"]="gg",
["ᡭ"]="hh",
["ᡵ"]="r",
["ᡶ"]="f",
["ᠸ"]="w",
["ᡮ"]="c",
["ᡟ"]="y",
["ᡯ"]="z",
["ᡰ"]="rr",
["ᡱ"]="ch",
["ᡷ"]="zh",
["ᠩ"]="ng",
["᠇"]="", -- SYLLABLE BOUNDARY MARKER 《新满汉大词典》转写中不体现隔音符
["᠊"]="-",
[""]="-", --零宽度连接符
[" "]=" ", --窄不换行空格
["᠈"]=",",
["᠉"]="."
}
text=text.args[1]
text=mw.ustring.gsub(text,"([ᠠᡝᡳᠣᡠᡡ])ᡳ᠌?([ᠨᡴᡤᡥᠪᡦᠰᡧᡨᡩᠯᠮᠴᠵᠶᠺᡬᡭᡵᡶᠸᡮᡯᡰᡱᡷᠩ᠇᠊])","%1i%2") -- 元音后-i的词中型
text=mw.ustring.gsub(text,"([ᠠᡝᡳᠣᡠᡡ])ᡨ᠌?([ᠨᡴᡤᡥᠪᡦᠰᡧᡨᡩᠯᠮᠴᠵᠶᠺᡬᡭᡵᡶᠸᡮᡯᡰᡱᡷᠩ᠊])","%1t%2") -- 闭音节末尾的-t
text=mw.ustring.gsub(text,"ᡯᡳ᠌?","zy") -- 资
text=mw.ustring.gsub(text,"ᡱᡳ","chy") -- 蚩
text=mw.ustring.gsub(text,"ᡷᡳ","zhy") -- 知
text=mw.ustring.gsub(text,"ᠰᡥ","s'h") -- 隔音符号
text=mw.ustring.gsub(text,"([ᠠᡝᡳᠣᡠᡡ])ᡠ᠋?","%1o") -- Au→Ao
text=mw.ustring.gsub(text,"[ᠠᡝᡳᠣᡠᡡᠨᡴᡤᡥᠪᡦᠰᡧᡨᡩᠯᠮᠴᠵᠶᠺᡬᡭᡵᡶᠸᡮᡟᡯᡰᡱᡷᠩ᠇᠊ ᠈᠉]",pinyin)
text=mw.ustring.gsub(text,"</?br[/ ]->"," ") --换行→空格
return text
end
-- n(text) 不同的转写数量
function export.n(text)
n=3
abk=export.a(text) --太清
von=export.v(text) --穆麟德
pin=export.p(text) --新满汉
if abk~=von then
n=3 --太清≠穆麟德
else
if abk~=pin then
n=2 --太清=穆麟德≠新满汉
else
n=1 --太清=穆麟德=新满汉
end
end
return n
end
-- all(text) 三种转写
function export.all(text)
abk=export.a(text) --太清
von=export.v(text) --穆麟德
pin=export.p(text) --新满汉
text=text.args[1]
if abk~=von then
text=text..'|a= '..abk..' |v='..von..' |p='..pin --太清≠穆麟德
else
if abk~=pin then
text=text..'|va='..abk..'|p='..pin --太清=穆麟德≠新满汉
else
text=text..'|t='..abk --太清=穆麟德=新满汉
end
end
return text
end
--转写→满文
-- 太清转写→满文
function export.Ma(text)
local special={
["n'"]="ᠨ᠋", --借词/专有名词有点的-n
["r'"]="ᡰ",
["ng"]="ᠩ",
["qy'"]="ᡱᡳ", --蚩
["jy'"]="ᡷᡳ", --知
["k'v"]="ᡴ᠋ᡡ", --阴性k
["g'v"]="ᡤ᠋ᡡ", --阴性g
["h'v"]="ᡥ᠋ᡡ", --阴性h
["q''"]="ᡱ",
["j''"]="ᡷ"
}
local kghy={
["k'"]="ᠺ",
["g'"]="ᡬ",
["h'"]="ᡭ",
["y'"]="ᡟ"
}
local abkai={
["a"]="ᠠ",
["e"]="ᡝ",
["i"]="ᡳ",
["o"]="ᠣ",
["u"]="ᡠ",
["v"]="ᡡ",
["n"]="ᠨ",
["k"]="ᡴ",
["g"]="ᡤ",
["h"]="ᡥ",
["b"]="ᠪ",
["p"]="ᡦ",
["s"]="ᠰ",
["x"]="ᡧ",
["t"]="ᡨ",
["d"]="ᡩ",
["l"]="ᠯ",
["m"]="ᠮ",
["q"]="ᠴ",
["j"]="ᠵ",
["y"]="ᠶ",
["r"]="ᡵ",
["f"]="ᡶ",
["w"]="ᠸ",
["c"]="ᡮ",
["z"]="ᡯ",
["'"]="᠇", --SYLLABLE BOUNDARY MARKER
-- ["-"]="᠊", --Nirugu 字干符
-- ["-"]="", --ZWJ 零宽度连接符
["-"]=" ", --NNBSP 窄不换行空格
[","]="᠈",
["."]="᠉"
}
text=text.args[1]
text=mw.ustring.gsub(text,"[‘’῾]","'") -- 引号全角→半角 U+1FFE→引号
text=mw.ustring.gsub(text,",",",") -- 全角→半角
text=mw.ustring.gsub(text,"。",".") -- 全角→半角
text=mw.ustring.gsub(text,"''","''")
text=mw.ustring.gsub(text,"ZWJ","") --ZWJ 零宽度连接符
text=mw.ustring.gsub(text,"([aeiouv])i([nkghbpsxtdlmqjyrfwcz'])","%1ᡳ᠌%2") -- 元音后-i词中型
text=mw.ustring.gsub(text,"([aeiouv])t([nkghbpsxtdlmqjyrfwcz])","%1ᡨ᠌%2") -- 闭音节末尾的-t
text=mw.ustring.gsub(text,"([aeiouv])[uo]","%1ᡠ᠋") -- 双元音
text=export.fvs(text)
text=mw.ustring.gsub(text," +%-i "," ᡳ ")
text=mw.ustring.gsub(text,"[qjnkghr][y'g]['v]?",special)
text=mw.ustring.gsub(text,"[kghy]'",kghy)
text=mw.ustring.gsub(text,"[aeiouvnkghbpsxtdlmqjyrfwcz'%-,%.]",abkai)
return text
end
-- 穆麟德→满文
function export.Mv(text)
local special={
["n῾"]="ᠨ᠋",
["k῾"]="ᠺ",
["g῾"]="ᡬ",
["h῾"]="ᡭ",
["sy"]="ᠰᡟ",
["jy"]="ᡷᡳ",
["ng"]="ᠩ",
["ts῾"]="ᡮ",
["dzi"]="ᡯᡳ᠌",
["c῾y"]="ᡱᡳ",
["ts"]="ᡮᡟ",
["dz"]="ᡯ",
["c῾"]="ᡱ",
["j῾"]="ᡷ"
}
local von={
["a"]="ᠠ",
["e"]="ᡝ",
["i"]="ᡳ",
["o"]="ᠣ",
["u"]="ᡠ",
["ū"]="ᡡ",
["n"]="ᠨ",
["k"]="ᡴ",
["g"]="ᡤ",
["h"]="ᡥ",
["b"]="ᠪ",
["p"]="ᡦ",
["s"]="ᠰ",
["š"]="ᡧ",
["t"]="ᡨ",
["d"]="ᡩ",
["l"]="ᠯ",
["m"]="ᠮ",
["c"]="ᠴ",
["j"]="ᠵ",
["y"]="ᠶ",
["r"]="ᡵ",
["f"]="ᡶ",
["w"]="ᠸ",
["ž"]="ᡰ",
["῾"]="᠇",
["-"]=" ", -- NNBSP 窄不换行空格
[","]="᠈",
["."]="᠉"
}
text=text.args[1]
text=mw.ustring.gsub(text,"[‘’']","῾") -- 引号→U+1FFE
text=mw.ustring.gsub(text,"ZWJ","") --ZWJ 零宽度连接符
text=mw.ustring.gsub(text,"([aeiouū])i([nkghbpsštdlmcjyrfwž῾])","%1ᡳ᠌%2") -- 元音后-i词中型
text=mw.ustring.gsub(text,"([aeiouū])t([nkghbpsštdlmcjyrfwž])","%1ᡨ᠌%2") -- 闭音节末尾的-t
text=mw.ustring.gsub(text,"([kgh])῾ū","%1᠋ᡡ") -- 阴性k 阴性g 阴性h
text=mw.ustring.gsub(text,"[kghsjn][῾yg]",special)
text=mw.ustring.gsub(text,"[tdc][sz῾][῾iy]",special)
text=mw.ustring.gsub(text,"[tdcj][sz῾]",special)
text=mw.ustring.gsub(text,"([aeiouū])[ou]","%1ᡠ᠋")
text=mw.ustring.gsub(text,"[aeiouūnkghbpsštdlmcjyrfwž῾%-,%.]",von)
return text
end
-- 转写间转换
-- 穆麟德→太清
function export.Av(text)
text.args[1]=export.Mv(text)
text=export.a(text)
return text
end
-- 太清→穆麟德
function export.Va(text)
text.args[1]=export.Ma(text)
text=export.v(text)
return text
end
-- 太清→新满汉
function export.Pa(text)
text.args[1]=export.Ma(text)
text=export.p(text)
return text
end
-- 穆麟德→新满汉
function export.Pv(text)
text.args[1]=export.Mv(text)
text=export.p(text)
return text
end
-- FREE VARIATION SELECTOR & VOWEL SEPARATOR
function export.fvs(text)
text=mw.ustring.gsub(text,"%^%^%^%^","")
text=mw.ustring.gsub(text,"%^%^%^","᠍")
text=mw.ustring.gsub(text,"%^%^","᠌")
text=mw.ustring.gsub(text,"%^","᠋")
return text
end
return export