Moduł:transliterator
Wygląd
{{translit}}
local transliterations = mw.loadJsonData( 'Moduł:transliterator/dane.json' )
local p = {}
local errcat = '[[Kategoria:Błąd w transliteracji]]'
local aliases = {
["as"] = "bn",
["by"] = "be"
}
local function sanitizeText( text )
local result = text
result = string.gsub( result, "'", "'" )
result = string.gsub( result, """, "\"" )
result = string.gsub( result, "&", "&" )
result = string.gsub( result, "-", "-" )
return result
end
function p.transliterate( frame )
local language = frame.args[1]
local text = sanitizeText( frame.args[2] )
local transliteration = transliterations[ aliases[ language ] or language ]
if transliteration == nil then
return "Błędny kod języka: " .. language
end
local result = ''
for codepoint in mw.ustring.gcodepoint( text ) do
if codepoint == 0xbcd then
if result:len() > 0 and result:sub(-1) == 'A' then
result = result:sub(0, result:len() - 1)
end
else
local untransliterated = mw.ustring.char( codepoint )
local transliterated = transliterations[ 'common' ][ untransliterated ]
if transliterated == nil then
transliterated = transliteration[ untransliterated ]
end
if transliterated == nil then
return "Nieprawidłowy znak " .. untransliterated .. " dla języka o kodzie " .. language .. "." .. (
mw.title.getCurrentTitle():inNamespace( 0 ) and errcat or ''
)
else
if language == 'tm' and transliterated:sub(-1) ~= 'A' and transliterated ~= ' ' and result:len() > 0 and result:sub(-1) == 'A' then
result = result:sub(0, result:len() - 1)
end
result = result .. transliterated
end
end
end
if language == 'tm' then
result = result:gsub('A', 'a'):gsub('ḵs', 'x'):gsub('ḵp', 'f'):gsub('ḵj', 'z')
end
return result
end
return p