[go: up one dir, main page]

Przejdź do zawartości

Moduł:transliterator

Z Wikisłownika – wolnego słownika wielojęzycznego

{{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