Przejdź do zawartości

Moduł:transliterator-naukowy

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

Dokumentacja dla tego modułu może zostać utworzona pod nazwą Moduł:transliterator-naukowy/opis

local p = {}

local errcat = '[[Kategoria:Błąd w transliteracji]]'

local commonTransliteration = {
    ["-"] = "-",
    ["–"] = "–",
    ["—"] = "—",
    ["="] = "=",
    [","] = ",",
    ["."] = ".",
    ["/"] = "/",
    [";"] = ";",
    ["'"] = "'",
    ["["] = "[",
    ["]"] = "]",
    ["\\"] = "\\",
    ["`"] = "`",
    ["~"] = "~",
    ["!"] = "!",
    ["@"] = "@",
    ["#"] = "#",
    ["$"] = "$",
    ["%"] = "%",
    ["^"] = "^",
    ["&"] = "&",
    ["*"] = "*",
    ["("] = "(",
    [")"] = ")",
    ["_"] = "_",
    ["+"] = "+",
    ["{"] = "{",
    ["}"] = "}",
    ["|"] = "|",
    [":"] = ":",
    ["\""] = "\"",
    ["<"] = "<",
    [">"] = ">",
    ["?"] = "?" ,
    [" "] = " "
}

local transliterationRu = {
    ["А"] = "A",
    ["а"] = "a",
    ["Б"] = "B",
    ["б"] = "b",
    ["В"] = "V",
    ["в"] = "v",
    ["Г"] = "G",
    ["г"] = "g",
    ["Д"] = "D",
    ["д"] = "d",
    ["Е"] = "E",
    ["е"] = "e",
    ["Ё"] = "Ё",
    ["ё"] = "ё",
    ["Ж"] = "Ž",
    ["ж"] = "ž",
    ["З"] = "Z",
    ["з"] = "z",
    ["И"] = "I",
    ["и"] = "i",
    ["Й"] = "J",
    ["й"] = "j",
    ["К"] = "K",
    ["к"] = "k",
    ["Л"] = "L",
    ["л"] = "l",
    ["М"] = "M",
    ["м"] = "m",
    ["Н"] = "N",
    ["н"] = "n",
    ["О"] = "O",
    ["о"] = "o",
    ["П"] = "P",
    ["п"] = "p",
    ["Р"] = "R",
    ["р"] = "r",
    ["С"] = "S",
    ["с"] = "s",
    ["Т"] = "T",
    ["т"] = "t",
    ["У"] = "U",
    ["у"] = "u",
    ["Ф"] = "F",
    ["ф"] = "f",
    ["Х"] = "X",
    ["х"] = "x",
    ["Ц"] = "C",
    ["ц"] = "c",
    ["Ч"] = "Č",
    ["ч"] = "č",
    ["Ш"] = "Š",
    ["ш"] = "š",
    ["Щ"] = "Šč",
    ["щ"] = "šč",
    ["Ъ"] = "ʺ",
    ["ъ"] = "″",
    ["Ы"] = "Y",
    ["ы"] = "y",
    ["Ь"] = "ʹ",
    ["ь"] = "ʹ",
    ["Э"] = "È",
    ["э"] = "è",
    ["Ю"] = "Ju",
    ["ю"] = "ju",
    ["Я"] = "Ja",
    ["я"] = "ja",
    ["’"] = "’",
    ["’"] = "’"
}

local transliterationUk = {
    ["А"] = "A",
    ["а"] = "a",
    ["Б"] = "B",
    ["б"] = "b",
    ["В"] = "V",
    ["в"] = "v",
    ["Г"] = "H",
    ["г"] = "h",
    ["Ґ"] = "G",
    ["ґ"] = "g",
    ["Д"] = "D",
    ["д"] = "d",
    ["Е"] = "E",
    ["е"] = "e",
    ["Є"] = "Je",
    ["є"] = "je",
    ["Ж"] = "Ž",
    ["ж"] = "ž",
    ["З"] = "Z",
    ["з"] = "z",
    ["И"] = "I",
    ["и"] = "i",
    ["І"] = "I",
    ["і"] = "i",
    ["Ї"] = "Ji",
    ["ї"] = "ji",
    ["Й"] = "J",
    ["й"] = "j",
    ["К"] = "K",
    ["к"] = "k",
    ["Л"] = "L",
    ["л"] = "l",
    ["М"] = "M",
    ["м"] = "m",
    ["Н"] = "N",
    ["н"] = "n",
    ["О"] = "O",
    ["о"] = "o",
    ["П"] = "P",
    ["п"] = "p",
    ["Р"] = "R",
    ["р"] = "r",
    ["С"] = "S",
    ["с"] = "s",
    ["Т"] = "T",
    ["т"] = "t",
    ["У"] = "U",
    ["у"] = "u",
    ["Ф"] = "F",
    ["ф"] = "f",
    ["Х"] = "X",
    ["х"] = "x",
    ["Ц"] = "C",
    ["ц"] = "c",
    ["Ч"] = "Č",
    ["ч"] = "č",
    ["Ш"] = "Š",
    ["ш"] = "š",
    ["Щ"] = "Šč",
    ["щ"] = "šč",
    ["Ь"] = "ʹ",
    ["ь"] = "ʹ",
    ["Ю"] = "Ju",
    ["ю"] = "ju",
    ["Я"] = "Ja",
    ["я"] = "ja",
    ["’"] = "’",
    ["’"] = "’"
}

local transliterationBe = {
    ["А"] = "A",
    ["а"] = "a",
    ["Б"] = "B",
    ["б"] = "b",
    ["В"] = "V",
    ["в"] = "v",
    ["Г"] = "H",
    ["г"] = "h",
    ["Д"] = "D",
    ["д"] = "d",
    ["Е"] = "E",
    ["е"] = "e",
    ["Ё"] = "Ё",
    ["ё"] = "ё",
    ["Ж"] = "Ž",
    ["ж"] = "ž",
    ["З"] = "Z",
    ["з"] = "z",
    ["І"] = "I",
    ["і"] = "i",
    ["Й"] = "J",
    ["й"] = "j",
    ["К"] = "K",
    ["к"] = "k",
    ["Л"] = "L",
    ["л"] = "l",
    ["М"] = "M",
    ["м"] = "m",
    ["Н"] = "N",
    ["н"] = "n",
    ["О"] = "O",
    ["о"] = "o",
    ["П"] = "P",
    ["п"] = "p",
    ["Р"] = "R",
    ["р"] = "r",
    ["С"] = "S",
    ["с"] = "s",
    ["Т"] = "T",
    ["т"] = "t",
    ["У"] = "U",
    ["у"] = "u",
    ["Ў"] = "Ŭ",
    ["ў"] = "ŭ",
    ["Ф"] = "F",
    ["ф"] = "f",
    ["Х"] = "H",
    ["х"] = "h",
    ["Ц"] = "C",
    ["ц"] = "c",
    ["Ч"] = "Č",
    ["ч"] = "č",
    ["Ш"] = "Š",
    ["ш"] = "š",
    ["Ы"] = "Y",
    ["ы"] = "y",
    ["Ь"] = "ʹ",
    ["ь"] = "ʹ",
    ["Э"] = "È",
    ["э"] = "è",
    ["Ю"] = "Ju",
    ["ю"] = "Ju",
    ["Я"] = "Ja",
    ["я"] = "ja",
    ["’"] = "’",
    ["’"] = "’"
}

local transliterationBg = {
    ["А"] = "A",
    ["а"] = "a",
    ["Б"] = "B",
    ["б"] = "b",
    ["В"] = "V",
    ["в"] = "v",
    ["Г"] = "G",
    ["г"] = "g",
    ["Д"] = "D",
    ["д"] = "d",
    ["К"] = "K",
    ["к"] = "k",
    ["Л"] = "L",
    ["л"] = "l",
    ["М"] = "M",
    ["м"] = "m",
    ["Н"] = "N",
    ["н"] = "n",
    ["О"] = "O",
    ["о"] = "o",
    ["П"] = "P",
    ["п"] = "p",
    ["Р"] = "R",
    ["р"] = "r",
    ["С"] = "S",
    ["с"] = "s",
    ["Т"] = "T",
    ["т"] = "t",
    ["У"] = "U",
    ["у"] = "u",
    ["Е"] = "E",
    ["е"] = "e",
    ["Ѐ"] = "È",
    ["ѐ"] = "è",
    ["Ж"] = "Ž",
    ["ж"] = "ž",
    ["З"] = "Z",
    ["з"] = "z",
    ["И"] = "I",
    ["и"] = "i",
    ["Ѝ"] = "Ì",
    ["ѝ"] = "ì",
    ["Й"] = "J",
    ["й"] = "j",
    ["Ф"] = "F",
    ["ф"] = "f",
    ["Х"] = "H",
    ["х"] = "h",
    ["Ц"] = "C",
    ["ц"] = "c",
    ["Ч"] = "Č",
    ["ч"] = "č",
    ["Ш"] = "Š",
    ["ш"] = "š",
    ["Щ"] = "Št",
    ["щ"] = "št",
    ["Ъ"] = "Ǎ",
    ["ъ"] = "ǎ",
    ["Ь"] = "J",
    ["ь"] = "j",
    ["Ю"] = "Ju",
    ["ю"] = "ju",
    ["Я"] = "Ja",
    ["я"] = "ja"
}

local transliterationSr = {
    ["А"] = "A",
    ["а"] = "a",
    ["Б"] = "B",
    ["б"] = "b",
    ["В"] = "V",
    ["в"] = "v",
    ["Г"] = "G",
    ["г"] = "g",
    ["Д"] = "D",
    ["д"] = "d",
    ["Ђ"] = "Đ",
    ["ђ"] = "đ",
    ["Е"] = "E",
    ["е"] = "e",
    ["Ж"] = "Ž",
    ["ж"] = "ž",
    ["Њ"] = "Ň",
    ["њ"] = "ň",
    ["О"] = "O",
    ["о"] = "o",
    ["П"] = "P",
    ["п"] = "p",
    ["Р"] = "R",
    ["р"] = "r",
    ["С"] = "S",
    ["с"] = "s",
    ["Т"] = "T",
    ["т"] = "t",
    ["Ћ"] = "Ć",
    ["ћ"] = "ć",
    ["З"] = "Z",
    ["з"] = "z",
    ["И"] = "I",
    ["и"] = "i",
    ["Ј"] = "J",
    ["ј"] = "j",
    ["К"] = "K",
    ["к"] = "k",
    ["Л"] = "L",
    ["л"] = "l",
    ["Љ"] = "Ľ",
    ["љ"] = "ľ",
    ["М"] = "M",
    ["м"] = "m",
    ["Н"] = "N",
    ["н"] = "n",
    ["У"] = "U",
    ["у"] = "u",
    ["Ф"] = "F",
    ["ф"] = "f",
    ["Х"] = "H",
    ["х"] = "h",
    ["Ц"] = "C",
    ["ц"] = "c",
    ["Ч"] = "Č",
    ["ч"] = "č",
    ["Џ"] = "Dž",
    ["џ"] = "dž",
    ["Ш"] = "Š",
    ["ш"] = "š"
}

local transliterationMk = {
    ["А"] = "A", ["а"] = "a",
    ["Б"] = "B", ["б"] = "b",
    ["В"] = "V", ["в"] = "v",
    ["Г"] = "G", ["г"] = "g",
    ["Ѓ"] = "Ǵ", ["ѓ"] = "ǵ",
    ["Д"] = "D", ["д"] = "d",
    ["Е"] = "E", ["е"] = "e",
    ["Ѐ"] = "È", ["ѐ"] = "è", -- akcent
    ["Ж"] = "Ž", ["ж"] = "ž",
    ["З"] = "Z", ["з"] = "z",
    ["Ѕ"] = "Dz", ["ѕ"] = "dz",
    ["И"] = "I", ["и"] = "i", 
    ["Ѝ"] = "Ì", ["ѝ"] = "ì", -- akcent
    ["Ј"] = "J", ["ј"] = "j",
    ["К"] = "K", ["к"] = "k",
    ["Л"] = "L", ["л"] = "l",
    ["Љ"] = "Ľ", ["љ"] = "ľ",
    ["М"] = "M", ["м"] = "m",
    ["Н"] = "N", ["н"] = "n",
    ["Њ"] = "Ň", ["њ"] = "ň",
    ["О"] = "O", ["о"] = "o",
    ["П"] = "P", ["п"] = "p",
    ["Р"] = "R", ["р"] = "r",
    ["С"] = "S", ["с"] = "s",
    ["Т"] = "T", ["т"] = "t",
    ["Ќ"] = "Ḱ", ["ќ"] = "ḱ",
    ["У"] = "U", ["у"] = "u",
    ["Ф"] = "F", ["ф"] = "f",
    ["Х"] = "H", ["х"] = "h",
    ["Ц"] = "C", ["ц"] = "c",
    ["Ч"] = "Č", ["ч"] = "č",
    ["Џ"] = "Dž", ["џ"] = "dž",
    ["Ш"] = "Š", ["ш"] = "š"
}

local transliterationCu = {
    ["А"] = "A",
    ["а"] = "a",
    ["Б"] = "B",
    ["б"] = "b",
    ["В"] = "V",
    ["в"] = "v",
    ["Г"] = "G",
    ["г"] = "g",
    ["Д"] = "D",
    ["д"] = "d",
    ["Ꙉ"] = "Đ", -- rzadkie
    ["ꙉ"] = "đ", -- rzadkie
    ["Ѕ"] = "Dz", -- dz
    ["ѕ"] = "dz", -- dz
    ["Ꙃ"] = "Dz", -- dz rzadkie
    ["ꙃ"] = "dz", -- dz rzadkie
    ["Ꙅ"] = "Dz", -- dz rzadkie
    ["ꙅ"] = "dz", -- dz rzadkie
    ["Е"] = "E", -- e
    ["е"] = "e", -- e
    ["Є"] = "E", -- e
    ["є"] = "e", -- e
    ["Ж"] = "Ž",
    ["ж"] = "ž",
    ["З"] = "Z", -- z
    ["з"] = "z", -- z
    ["Ꙁ"] = "Z", -- z rzadkie
    ["ꙁ"] = "z", -- z rzadkie
    ["И"] = "I",
    ["и"] = "i",
    ["І"] = "I",
    ["і"] = "i",
    ["Ї"] = "I",
    ["ї"] = "i",
    ["Ӥ"] = "I",
    ["Ӥ"] = "i",
    ["К"] = "K",
    ["к"] = "k",
    ["Л"] = "L",
    ["л"] = "l",
    ["М"] = "M",
    ["м"] = "m",
    ["Н"] = "N",
    ["н"] = "n",
    ["О"] = "O", 
    ["о"] = "o",
    ["Ѡ"] = "O", -- o rzadkie?
    ["ѡ"] = "o", -- o rzadkie?
    ["Ꙩ"] = "O", -- o rzadkie
    ["ꙩ"] = "o", -- o rzadkie
    ["Ꙫ"] = "O", -- o rzadkie
    ["ꙫ"] = "o", -- o rzadkie
    ["Ꙭ"] = "O",  -- o rzadkie
    ["ꙭ"] = "o", -- o rzadkie
    ["Ѻ"] = "O", -- o rzadkie
    ["ѻ"] = "o", -- o rzadkie
    ["Ꙍ"] = "O", -- o rzadkie
    ["ꙍ"] = "o", -- o rzadkie
    ["ꙮ"] = "o", -- o rzadkie
    ["Ѿ"] = "Otŭ", -- rzadkie
    ["ѿ"] = "otŭ", -- rzadkie
    ["П"] = "P",
    ["п"] = "p",
    ["Р"] = "R",
    ["р"] = "r",
    ["С"] = "S",
    ["с"] = "s",
    ["Т"] = "T",
    ["т"] = "t",
    ["У"] = "U", -- nie używać
    ["у"] = "u", -- nie używać
    ["Ѹ"] = "U", -- nie używać
    ["ѹ"] = "u", -- nie używać
    ["Оу"] = "U",
    ["оу"] = "u",
    ["Ф"] = "F",
    ["ф"] = "f",
    ["Х"] = "X",
    ["х"] = "x",
    ["Ц"] = "C",
    ["ц"] = "c",
    ["Ч"] = "Č",
    ["ч"] = "č",
    ["Ш"] = "Š",
    ["ш"] = "š",
    ["Щ"] = "Št",
    ["щ"] = "št",
    ["Ъ"] = "Ŭ",
    ["ъ"] = "ŭ",
    ["Ь"] = "Ĭ",
    ["ь"] = "ĭ",
    ["Ы"] = "Y", -- nie używać
    ["ы"] = "y", -- nie używać
    ["Ꙑ"] = "Y", 
    ["ꙑ"] = "y",
    ["Ѣ"] = "Ě",
    ["ѣ"] = "ě",
    ["Ю"] = "Ju",
    ["ю"] = "ju",
    ["Ꙗ"] = "Ja",
    ["ꙗ"] = "ja",
    ["Я"] = "Ja", -- nie używać
    ["Я"] = "ja", -- nie używać
    ["Ѥ"] = "Je",
    ["ѥ"] = "je",
    ["Ѧ"] = "Ę",
    ["ѧ"] = "ę",
    ["Ꙙ"] = "Ę",
    ["ꙙ"] = "Ę",
    ["Ѩ"] = "Ję",
    ["ѩ"] = "ję",
    ["Ꙝ"] = "Ję",
    ["ꙝ"] = "ję",
    ["Ѫ"] = "Ǫ",
    ["ѫ"] = "ǫ",
    ["Ѭ"] = "Jǫ",
    ["ѭ"] = "jǫ",
    ["Ꙓ"] = "Jě",
    ["ꙓ"] = "jě",
    ["Ѯ"] = "Ks",
    ["ѯ"] = "ks",
    ["Ѱ"] = "Ps",
    ["ѱ"] = "ps",
    ["Ѳ"] = "Th",
    ["ѳ"] = "th",
    ["Ѵ"] = "Ü",
    ["ѵ"] = "ü",
    ["Ѷ"] = "Ü",
    ["ѷ"] = "ü",
    ["Ѯ"] = "Ks",
    ["ѯ"] = "ks",
    ["Ѯ"] = "Ks",
    ["ѯ"] = "ks"
}

local transliterations = {
    ["ru"] = transliterationRu,
    ["uk"] = transliterationUk,
    ["be"] = transliterationBe,
    ["bg"] = transliterationBg,
    ["sr"] = transliterationSr,
    ["mk"] = transliterationMk,
    ["cu"] = transliterationCu,
    ["orv"] = transliterationOrv
}

local function sanitizeText( text )
    local result = text
    result = string.gsub( result, "&#39;", "'" )
    result = string.gsub( result, "&quot;", "\"" )
    result = string.gsub( result, "&amp;", "&" )
    return result
end

function p.transliterate( frame )
        local language = frame.args[1]
        local text = sanitizeText( frame.args[2] )
        local transliteration = transliterations[ language ]
        
        if transliteration == nil then
            return "Błędny kod języka: " .. language
        end
        
        local result = ''
        
        for codepoint in mw.ustring.gcodepoint( text ) do
            local untransliterated = mw.ustring.char( codepoint )
            local transliterated = commonTransliteration[ 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
                result = result .. transliterated
            end
        end
        
        return result
end

return p