Difference between revisions of "Module:Kana"
Jump to navigation
Jump to search
blackwiki>Mr. Stradivarius (create kana-converting module) |
blackwiki>Mr. Stradivarius (add romaji conversion) |
||
| Line 4: | Line 4: | ||
local p = {} | local p = {} | ||
| − | local function | + | local function makeSingleCharConversionTable(inputKey, outputKey) |
local ret = {} | local ret = {} | ||
| − | for i, | + | for i, singleCharData in ipairs(kanaData.singleChars) do |
| − | ret[ | + | ret[singleCharData[inputKey]] = singleCharData[outputKey] |
end | end | ||
return ret | return ret | ||
| Line 13: | Line 13: | ||
local function convertString(s, inputKey, outputKey) | local function convertString(s, inputKey, outputKey) | ||
| − | + | -- Convert double chars | |
| − | + | for i, doubleCharData in ipairs(kanaData.doubleChars) do | |
| − | return | + | s = mw.ustring.gsub(s, doubleCharData[inputKey], doubleCharData[outputKey]) |
| + | end | ||
| + | |||
| + | -- Convert single chars | ||
| + | s = mw.ustring.gsub(s, '.', makeSingleCharConversionTable(inputKey, outputKey)) | ||
| + | |||
| + | return s | ||
end | end | ||
| Line 26: | Line 32: | ||
function p._ktoh(s) | function p._ktoh(s) | ||
return convertString(s, 'katakana', 'hiragana') | return convertString(s, 'katakana', 'hiragana') | ||
| + | end | ||
| + | |||
| + | function p._htor(s) | ||
| + | return convertString(s, 'hiragana', 'romaji') | ||
| + | end | ||
| + | |||
| + | function p._ktor(s) | ||
| + | return convertString(s, 'katakana', 'romaji') | ||
end | end | ||
Revision as of 06:00, 18 July 2017
-- This module converts between Japanese hiragana and katakana
local kanaData = mw.loadData('Module:Kana/data')
local p = {}
local function makeSingleCharConversionTable(inputKey, outputKey)
local ret = {}
for i, singleCharData in ipairs(kanaData.singleChars) do
ret[singleCharData[inputKey]] = singleCharData[outputKey]
end
return ret
end
local function convertString(s, inputKey, outputKey)
-- Convert double chars
for i, doubleCharData in ipairs(kanaData.doubleChars) do
s = mw.ustring.gsub(s, doubleCharData[inputKey], doubleCharData[outputKey])
end
-- Convert single chars
s = mw.ustring.gsub(s, '.', makeSingleCharConversionTable(inputKey, outputKey))
return s
end
local conversionFuncs = {}
function p._htok(s)
return convertString(s, 'hiragana', 'katakana')
end
function p._ktoh(s)
return convertString(s, 'katakana', 'hiragana')
end
function p._htor(s)
return convertString(s, 'hiragana', 'romaji')
end
function p._ktor(s)
return convertString(s, 'katakana', 'romaji')
end
return setmetatable(p, {
__index = function (t, key)
return function (frame)
local args = require('Module:Arguments').getArgs(frame, {
wrappers = 'Template:Kana',
})
return p['_' .. key](args[1])
end
end
})