local jpn={}
jpn.kanatable = {
-- 普通假名
["ア"] = "あ",
["イ"] = "い",
["ウ"] = "う",
["エ"] = "え",
["オ"] = "お",
["カ"] = "か",
["キ"] = "き",
["ク"] = "く",
["ケ"] = "け",
["コ"] = "こ",
["サ"] = "さ",
["シ"] = "し",
["ス"] = "す",
["セ"] = "せ",
["ソ"] = "そ",
["タ"] = "た",
["チ"] = "ち",
["ツ"] = "つ",
["テ"] = "て",
["ト"] = "と",
["ナ"] = "な",
["ニ"] = "に",
["ヌ"] = "ぬ",
["ネ"] = "ね",
["ノ"] = "の",
["ハ"] = "は",
["ヒ"] = "ひ",
["フ"] = "ふ",
["ヘ"] = "へ",
["ホ"] = "ほ",
["マ"] = "ま",
["ミ"] = "み",
["ム"] = "む",
["メ"] = "め",
["モ"] = "も",
["ヤ"] = "や",
["ユ"] = "ゆ",
["ヨ"] = "よ",
["ラ"] = "ら",
["リ"] = "り",
["ル"] = "る",
["レ"] = "れ",
["ロ"] = "ろ",
["ワ"] = "わ",
["ヲ"] = "を",
["ン"] = "ん",
-- 浊音假名
["ガ"] = "が",
["ギ"] = "ぎ",
["グ"] = "ぐ",
["ゲ"] = "げ",
["ゴ"] = "ご",
["ザ"] = "ざ",
["ジ"] = "じ",
["ズ"] = "ず",
["ゼ"] = "ぜ",
["ゾ"] = "ぞ",
["ダ"] = "だ",
["ヂ"] = "ぢ",
["ヅ"] = "づ",
["デ"] = "で",
["ド"] = "ど",
["バ"] = "ば",
["ビ"] = "び",
["ブ"] = "ぶ",
["ベ"] = "べ",
["ボ"] = "ぼ",
["パ"] = "ぱ",
["ピ"] = "ぴ",
["プ"] = "ぷ",
["ペ"] = "ぺ",
["ポ"] = "ぽ",
-- 小假名
["ァ"] = "ぁ",
["ィ"] = "ぃ",
["ゥ"] = "ぅ",
["ェ"] = "ぇ",
["ォ"] = "ぉ",
["ャ"] = "ゃ",
["ュ"] = "ゅ",
["ョ"] = "ょ",
["ッ"] = "っ"
}
-- 片假名转平假名
-- 目前ヴ不能转换
function jpn._hira( h )
for k, v in pairs( jpn.kanatable ) do
h = mw.ustring.gsub( h, k, v )
end
return h
end
-- 平假名转片假名
function jpn._kata( h )
for k, v in pairs( jpn.kanatable ) do
h = mw.ustring.gsub( h, v, k )
end
return h
end
-- 转换:处理促音
function jpn._sokuon( s )
-- なまやらわ行真的有促音吗
s = mw.ustring.gsub( s, 'っ([かきくけこ])', 'k%1')
s = mw.ustring.gsub( s, 'っ([さしすせそ])', 's%1')
s = mw.ustring.gsub( s, 'っ([たちつてと])', 't%1')
s = mw.ustring.gsub( s, 'っ([なにぬねの])', 'n%1')
s = mw.ustring.gsub( s, 'っ([はひふへほ])', 'h%1')
s = mw.ustring.gsub( s, 'っ([まみむめも])', 'm%1')
s = mw.ustring.gsub( s, 'っ([やゆよ])', 'y%1')
s = mw.ustring.gsub( s, 'っ([らりるれろ])', 'r%1')
s = mw.ustring.gsub( s, 'っわ', 'wわ')
s = mw.ustring.gsub( s, 'っ([がぎぐげご])', 'g%1')
s = mw.ustring.gsub( s, 'っ([ざじずぜぞ])', 'z%1')
s = mw.ustring.gsub( s, 'っ([だぢづでど])', 'd%1')
s = mw.ustring.gsub( s, 'っ([ばびぶべぼ])', 'p%1')
s = mw.ustring.gsub( s, 'っ([ぱぴぷぺぽ])', 'b%1')
return s
end
-- 转换:处理长音
function jpn._chouon( s )
local t = {
["あー"] = "ā",
["かー"] = "kā",
["さー"] = "sā",
["たー"] = "tā",
["なー"] = "nā",
["はー"] = "hā",
["まー"] = "mā",
["やー"] = "yā",
["らー"] = "rā",
["わー"] = "wā",
["がー"] = "gā",
["ざー"] = "zā",
["だー"] = "dā",
["ばー"] = "bā",
["ぱー"] = "pā",
["きゃー"] = "kyā",
["しゃー"] = "shā",
["ちゃー"] = "chā",
["にゃー"] = "nyā",
["ひゃー"] = "hyā",
["みゃー"] = "myā",
["りゃー"] = "ryā",
["ぎゃー"] = "gyā",
["じゃー"] = "jā",
["ぢゃー"] = "jā",
["びゃー"] = "byā",
["ぴゃー"] = "pyā",
["いー"] = "ī",
["きー"] = "kī",
["しー"] = "shī",
["ちー"] = "chī",
["にー"] = "nī",
["ひー"] = "hī",
["みー"] = "mī",
["りー"] = "rī",
["ぎー"] = "gī",
["じー"] = "jī",
["ぢー"] = "jī",
["びー"] = "bī",
["ぴー"] = "pī",
["うー"] = "ū",
["くー"] = "kū",
["すー"] = "sū",
["つー"] = "tsū",
["ぬー"] = "nū",
["ふー"] = "fū",
["むー"] = "mū",
["ゆー"] = "yū",
["るー"] = "rū",
["ぐー"] = "gū",
["ずー"] = "zū",
["づー"] = "zū",
["ぶー"] = "bū",
["ぷー"] = "pū",
["きゅー"] = "kyū",
["しゅー"] = "shū",
["ちゅー"] = "chū",
["にゅー"] = "nyū",
["ひゅー"] = "hyū",
["みゅー"] = "myū",
["りゅー"] = "ryū",
["ぎゅー"] = "gyū",
["じゅー"] = "jū",
["ぢゅー"] = "jū",
["びゅー"] = "byū",
["ぴゅー"] = "pyū",
["えー"] = "ē",
["けー"] = "kē",
["せー"] = "sē",
["てー"] = "tē",
["ねー"] = "nē",
["へー"] = "hē",
["めー"] = "mē",
["れー"] = "rē",
["げー"] = "gē",
["ぜー"] = "zē",
["でー"] = "dē",
["べー"] = "bē",
["ぺー"] = "pē",
["おー"] = "ō",
["こー"] = "kō",
["そー"] = "sō",
["とー"] = "tō",
["のー"] = "nō",
["ほー"] = "hō",
["もー"] = "mō",
["よー"] = "yō",
["ろー"] = "rō",
["ごー"] = "gō",
["ぞー"] = "zō",
["どー"] = "dō",
["ぼー"] = "bō",
["ぽー"] = "pō",
["きょー"] = "kyō",
["しょー"] = "shō",
["ちょー"] = "chō",
["にょー"] = "nyō",
["ひょー"] = "hyō",
["みょー"] = "myō",
["りょー"] = "ryō",
["ぎょー"] = "gyō",
["じょー"] = "jō",
["ぢょー"] = "jō",
["びょー"] = "byō",
["ぴょー"] = "pyō"
}
for k, v in pairs( t ) do
s = mw.ustring.gsub( s, k, v )
end
return s
end
-- 转换:拗音
function jpn._youon( s )
local t = {
["きゃ"] = "kya",
["きゅ"] = "kyu",
["きょ"] = "kyo",
["しゃ"] = "sha",
["しゅ"] = "shu",
["しょ"] = "sho",
["ちゃ"] = "cha",
["ちゅ"] = "chu",
["ちょ"] = "cho",
["にゃ"] = "nya",
["にゅ"] = "nyu",
["にょ"] = "nyo",
["ひゃ"] = "hya",
["ひゅ"] = "hyu",
["ひょ"] = "hyo",
["みゃ"] = "mya",
["みゅ"] = "myu",
["みょ"] = "myo",
["りゃ"] = "rya",
["りゅ"] = "ryu",
["りょ"] = "ryo",
["ぎゃ"] = "gya",
["ぎゅ"] = "gyu",
["ぎょ"] = "gyo",
["じゃ"] = "ja",
["じゅ"] = "ju",
["じょ"] = "jo",
["ぢゃ"] = "ja",
["ぢゅ"] = "ju",
["ぢょ"] = "jo",
["びゃ"] = "bya",
["びゅ"] = "byu",
["びょ"] = "byo",
["ぴゃ"] = "pya",
["ぴゅ"] = "pyu",
["ぴょ"] = "pyo"
}
for k, v in pairs( t ) do
s = mw.ustring.gsub( s, k, v )
end
return s
end
-- 转换:普通情况
function jpn._hoka( s )
local t = {
["あ"] = "a",
["い"] = "i",
["う"] = "u",
["え"] = "e",
["お"] = "o",
["か"] = "ka",
["き"] = "ki",
["く"] = "ku",
["け"] = "ke",
["こ"] = "ko",
["さ"] = "sa",
["し"] = "shi",
["す"] = "su",
["せ"] = "se",
["そ"] = "so",
["た"] = "ta",
["ち"] = "chi",
["つ"] = "tsu",
["て"] = "te",
["と"] = "to",
["な"] = "na",
["に"] = "ni",
["ぬ"] = "nu",
["ね"] = "ne",
["の"] = "no",
["は"] = "ha",
["ひ"] = "hi",
["ふ"] = "fu",
["へ"] = "he",
["ほ"] = "ho",
["ま"] = "ma",
["み"] = "mi",
["む"] = "mu",
["め"] = "me",
["も"] = "mo",
["や"] = "ya",
["ゆ"] = "yu",
["よ"] = "yo",
["ら"] = "ra",
["り"] = "ri",
["る"] = "ru",
["れ"] = "re",
["ろ"] = "ro",
["わ"] = "wa",
["を"] = "o",
["ん"] = "n",
["が"] = "ga",
["ぎ"] = "gi",
["ぐ"] = "gu",
["げ"] = "ge",
["ご"] = "go",
["ざ"] = "za",
["じ"] = "ji",
["ず"] = "zu",
["ぜ"] = "ze",
["ぞ"] = "zo",
["だ"] = "da",
["ぢ"] = "ji",
["づ"] = "zu",
["で"] = "de",
["ど"] = "do",
["ば"] = "ba",
["び"] = "bi",
["ぶ"] = "bu",
["べ"] = "be",
["ぼ"] = "bo",
["ぱ"] = "pa",
["ぴ"] = "pi",
["ぷ"] = "pu",
["ぺ"] = "pe",
["ぽ"] = "po"
}
for k, v in pairs( t ) do
s = mw.ustring.gsub( s, k, v )
end
return s
end
function jpn.romaji( frame )
local source = frame.args[1]
-- 长音改为横线
local hy = mw.ustring.gsub( source, '([あかさたなはまやらわゃ])あ', '%1ー')
-- hy = mw.ustring.gsub( hy, '([いきしちにひみり])い', '%1ー')
hy = mw.ustring.gsub( hy, '([うくすつぬふむゆるゅ])う', '%1ー')
-- hy = mw.ustring.gsub( hy, '([えけせてねへめれ])い', '%1ー')
hy = mw.ustring.gsub( hy, '([おこそとのほもよろょ])う', '%1ー')
-- 片假名转为平假名
hy = jpn._hira( hy )
-- 处理ん接や行
hy = mw.ustring.gsub( hy, 'ん([やゆよ])', "ん'%1")
-- 以下正式转换
-- 处理促音
hy = jpn._sokuon( hy )
-- 处理长音
hy = jpn._chouon( hy )
-- 处理拗音
hy = jpn._youon( hy )
-- 处理一般状况
hy = jpn._hoka( hy )
-- 清空打断符号:打断符号为$
hy = mw.ustring.gsub( hy, '%$', '' )
-- 大写:在所有^后面的第一个字母将会大写
local i,p,q
while mw.ustring.find( hy, '%^' ) ~= nil do
i = mw.ustring.find( hy, '%^' )
p = mw.ustring.char( mw.ustring.codepoint( hy, i+1 ) )
q = mw.ustring.upper( p )
hy = mw.ustring.gsub( hy, '%^'..p, q, 1 )
end
return hy
end
-- 副产品:片假名转平假名
-- 目前ヴ不能转换
function jpn.hira( frame )
local s = frame.args[1]
s = jpn._hira( s )
return s
end
-- 副产品:平假名转片假名
function jpn.kata( frame )
local s = frame.args[1]
s = jpn._kata( s )
return s
end
return jpn