Difference between revisions of "Module:Kana"

From blackwiki
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 makeConversionTable(inputKey, outputKey)
+
local function makeSingleCharConversionTable(inputKey, outputKey)
 
local ret = {}
 
local ret = {}
for i, charData in ipairs(kanaData) do
+
for i, singleCharData in ipairs(kanaData.singleChars) do
ret[charData[inputKey]] = charData[outputKey]
+
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)
local conversionTable = makeConversionTable(inputKey, outputKey)
+
-- Convert double chars
local ret = mw.ustring.gsub(s, '.', conversionTable)
+
for i, doubleCharData in ipairs(kanaData.doubleChars) do
return ret
+
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
})