Modul:Kleida-el

Z Wikislovníku
Skočit na navigaci Skočit na vyhledávání

Dokumentaci tohoto modulu lze vytvořit na stránce Nápověda:Modul:Kleida-el

-- @brief
--  creates DEFAULTSORT for greek (and almost all ancient greek) lemmas
---- since greek lemmas in dictionaries are listed depending on one of 24 letters of alfabet 
---- independently from their accents
-- @param
--  none, uses PAGENAME from "frame"

-- [[el:Module:Kleida-el]]

objkleida = {}
-- mapping dictionary
-- maps every greek letter (except the very archaic like digamma)
-- to one of the 24 anaccented letters of greek alphabet
objkleida._mappedletters = {
        ["Α"]  = "α",
        ["ά"]  = "α",
        ["α"]  = "α",
        ["ἀ"]  = "α",
        ["ἁ"]  = "α",
        ["ἂ"]  = "α",
        ["ἃ"]  = "α",
        ["ἄ"]  = "α",
        ["ἅ"]  = "α",
        ["ἆ"]  = "α",
        ["ἇ"]  = "α",
        ["Ἀ"]  = "α",
        ["Ἁ"]  = "α",
        ["Ἂ"]  = "α",
        ["Ἃ"]  = "α",
        ["Ἄ"]  = "α",
        ["Ἅ"]  = "α",
        ["Ἆ"]  = "α",
        ["Ἇ"]  = "α",
        ["ὰ"]  = "α",
        ["ά"]  = "α",
        ["ᾀ"]  = "α",
        ["ᾁ"]  = "α",
        ["ᾂ"]  = "α",
        ["ᾃ"]  = "α",
        ["ᾄ"]  = "α",
        ["ᾅ"]  = "α",
        ["ᾆ"]  = "α",
        ["ᾇ"]  = "α",
        ["ᾈ"]  = "α",
        ["ᾉ"]  = "α",
        ["ᾊ"]  = "α",
        ["ᾋ"]  = "α",
        ["ᾌ"]  = "α",
        ["ᾍ"]  = "α",
        ["ᾎ"]  = "α",
        ["ᾏ"]  = "α",
        ["ᾰ"]  = "α",
        ["ᾱ"]  = "α",
        ["ᾲ"]  = "α",
        ["ᾳ"]  = "α",
        ["ᾴ"]  = "α",
        ["ᾶ"]  = "α",
        ["ᾷ"]  = "α",
        ["Ᾰ"]  = "α",
        ["Ᾱ"]  = "α",
        ["Ὰ"]  = "α",
        ["Ά"]  = "α",
        ["ᾼ"]  = "α",
        ["Β"]  = "β",
        ["β"]  = "β",
        ["Γ"]  = "γ",
        ["γ"]  = "γ",
        ["Δ"]  = "δ",
        ["δ"]  = "δ",
        ["Έ"]  = "ε",
        ["Ε"]  = "ε",
        ["έ"]  = "ε",
        ["ε"]  = "ε",
        ["ἐ"]  = "ε",
        ["ἑ"]  = "ε",
        ["ἒ"]  = "ε",
        ["ἓ"]  = "ε",
        ["ἔ"]  = "ε",
        ["ἕ"]  = "ε",
        ["Ἐ"]  = "ε",
        ["Ἑ"]  = "ε",
        ["Ἒ"]  = "ε",
        ["Ἓ"]  = "ε",
        ["Ἔ"]  = "ε",
        ["Ἕ"]  = "ε",
        ["ὲ"]  = "ε",
        ["Ὲ"]  = "ε",
        ["Έ"]  = "ε",
        ["Ζ"]  = "ζ",
        ["ζ"]  = "ζ",
        ["Ή"]  = "η",
        ["Η"]  = "η",
        ["ή"]  = "η",
        ["η"]  = "η",
        ["ἠ"]  = "η",
        ["ἡ"]  = "η",
        ["ἢ"]  = "η",
        ["ἣ"]  = "η",
        ["ἤ"]  = "η",
        ["ἥ"]  = "η",
        ["ἦ"]  = "η",
        ["ἧ"]  = "η",
        ["Ἠ"]  = "η",
        ["Ἡ"]  = "η",
        ["Ἢ"]  = "η",
        ["Ἣ"]  = "η",
        ["Ἤ"]  = "η",
        ["Ἥ"]  = "η",
        ["Ἦ"]  = "η",
        ["Ἧ"]  = "η",
        ["ὴ"]  = "η",
        ["ή"]  = "η",
        ["ᾐ"]  = "η",
        ["ᾑ"]  = "η",
        ["ᾒ"]  = "η",
        ["ᾓ"]  = "η",
        ["ᾔ"]  = "η",
        ["ᾕ"]  = "η",
        ["ᾖ"]  = "η",
        ["ᾗ"]  = "η",
        ["ᾘ"]  = "η",
        ["ᾙ"]  = "η",
        ["ᾚ"]  = "η",
        ["ᾛ"]  = "η",
        ["ᾜ"]  = "η",
        ["ᾝ"]  = "η",
        ["ᾞ"]  = "η",
        ["ᾟ"]  = "η",
        ["ῂ"]  = "η",
        ["ῃ"]  = "η",
        ["ῄ"]  = "η",
        ["ῆ"]  = "η",
        ["ῇ"]  = "η",
        ["Ὴ"]  = "η",
        ["Ή"]  = "η",
        ["ῌ"]  = "η",
        ["Θ"]  = "θ",
        ["θ"]  = "θ",
        ["Ί"]  = "ι",
        ["ΐ"]  = "ι",
        ["Ι"]  = "ι",
        ["Ϊ"]  = "ι",
        ["ί"]  = "ι",
        ["ι"]  = "ι",
        ["ϊ"]  = "ι",
        ["ἰ"]  = "ι",
        ["ἱ"]  = "ι",
        ["ἲ"]  = "ι",
        ["ἳ"]  = "ι",
        ["ἴ"]  = "ι",
        ["ἵ"]  = "ι",
        ["ἶ"]  = "ι",
        ["ἷ"]  = "ι",
        ["Ἰ"]  = "ι",
        ["Ἱ"]  = "ι",
        ["Ἲ"]  = "ι",
        ["Ἳ"]  = "ι",
        ["Ἴ"]  = "ι",
        ["Ἵ"]  = "ι",
        ["Ἶ"]  = "ι",
        ["Ἷ"]  = "ι",
        ["ὶ"]  = "ι",
        ["ί"]  = "ι",
        ["ῖ"]  = "ι",
        ["ῗ"]  = "ι",
        ["Ῐ"]  = "ι",
        ["Ῑ"]  = "ι",
        ["Ὶ"]  = "ι",
        ["Ί"]  = "ι",
        ["Κ"]  = "κ",
        ["κ"]  = "κ",
        ["Λ"]  = "λ",
        ["λ"]  = "λ",
        ["Μ"]  = "μ",
        ["μ"]  = "μ",
        ["Ν"]  = "ν",
        ["ν"]  = "ν",
        ["Ξ"]  = "ξ",
        ["ξ"]  = "ξ",
        ["Ό"]  = "ο",
        ["Ο"]  = "ο",
        ["ο"]  = "ο",
        ["ό"]  = "ο",
        ["ὀ"]  = "ο",
        ["ὁ"]  = "ο",
        ["ὂ"]  = "ο",
        ["ὃ"]  = "ο",
        ["ὄ"]  = "ο",
        ["ὅ"]  = "ο",
        ["Ὀ"]  = "ο",
        ["Ὁ"]  = "ο",
        ["Ὂ"]  = "ο",
        ["Ὃ"]  = "ο",
        ["Ὄ"]  = "ο",
        ["Ὅ"]  = "ο",
        ["ὸ"]  = "ο",
        ["ό"]  = "ο",
        ["Ὸ"]  = "ο",
        ["Ό"]  = "ο",
        ["Π"]  = "π",
        ["π"]  = "π",
        ["Ρ"]  = "ρ",
        ["ρ"]  = "ρ",
        ["ῤ"]  = "ρ",
        ["ῥ"]  = "ρ",
        ["Ῥ"]  = "ρ",
        ["Σ"]  = "σ",
        ["ς"]  = "σ",
        ["σ"]  = "σ",
        ["Τ"]  = "τ",
        ["τ"]  = "τ",
        ["Ύ"]  = "υ",
        ["Υ"]  = "υ",
        ["Ϋ"]  = "υ",
        ["ΰ"]  = "υ",
        ["υ"]  = "υ",
        ["ϋ"]  = "υ",
        ["ύ"]  = "υ",
        ["ὐ"]  = "υ",
        ["ὑ"]  = "υ",
        ["ὒ"]  = "υ",
        ["ὓ"]  = "υ",
        ["ὔ"]  = "υ",
        ["ὕ"]  = "υ",
        ["ὖ"]  = "υ",
        ["ὗ"]  = "υ",
        ["Ὑ"]  = "υ",
        ["Ὓ"]  = "υ",
        ["Ὕ"]  = "υ",
        ["Ὗ"]  = "υ",
        ["ὺ"]  = "υ",
        ["ύ"]  = "υ",
        ["ῠ"]  = "υ",
        ["ῡ"]  = "υ",
        ["ῢ"]  = "υ",
        ["ΰ"]  = "υ",
        ["ῦ"]  = "υ",
        ["ῧ"]  = "υ",
        ["Ῠ"]  = "υ",
        ["Ῡ"]  = "υ",
        ["Ὺ"]  = "υ",
        ["Ύ"]  = "υ",
        ["Φ"]  = "φ",
        ["φ"]  = "φ",
        ["Χ"]  = "χ",
        ["χ"]  = "χ",
        ["Ψ"]  = "ψ",
        ["ψ"]  = "ψ",
        ["Ώ"]  = "ω",
        ["Ω"]  = "ω",
        ["ω"]  = "ω",
        ["ώ"]  = "ω",
        ["ὠ"]  = "ω",
        ["ὡ"]  = "ω",
        ["ὢ"]  = "ω",
        ["ὣ"]  = "ω",
        ["ὤ"]  = "ω",
        ["ὥ"]  = "ω",
        ["ὦ"]  = "ω",
        ["ὧ"]  = "ω",
        ["Ὠ"]  = "ω",
        ["Ὡ"]  = "ω",
        ["Ὢ"]  = "ω",
        ["Ὣ"]  = "ω",
        ["Ὤ"]  = "ω",
        ["Ὥ"]  = "ω",
        ["Ὦ"]  = "ω",
        ["Ὧ"]  = "ω",
        ["ὼ"]  = "ω",
        ["ώ"]  = "ω",
        ["ᾠ"]  = "ω",
        ["ᾡ"]  = "ω",
        ["ᾢ"]  = "ω",
        ["ᾣ"]  = "ω",
        ["ᾤ"]  = "ω",
        ["ᾥ"]  = "ω",
        ["ᾦ"]  = "ω",
        ["ᾧ"]  = "ω",
        ["ᾨ"]  = "ω",
        ["ᾩ"]  = "ω",
        ["ᾪ"]  = "ω",
        ["ᾫ"]  = "ω",
        ["ᾬ"]  = "ω",
        ["ᾭ"]  = "ω",
        ["ᾮ"]  = "ω",
        ["ᾯ"]  = "ω",
        ["ῲ"]  = "ω",
        ["ῳ"]  = "ω",
        ["ῴ"]  = "ω",
        ["ῶ"]  = "ω",
        ["ῷ"]  = "ω",
        ["Ὼ"]  = "ω",
        ["Ώ"]  = "ω",
        ["ῼ"]  = "ω",
        ["Ω"]  = "ω",
}

-- function _fmainkleida
--  (can also be used independently to sort lines in tables, etc)
-- Δεν ελέγχει την περίπτωση το πρώτο γράμμα να είναι παύλα και το δεύτερο κενό
-- Does not check if first letter is hyphent followed by space
-- LUA problem, if parameter (any_string) contains more than 32 characters
-- Except from the first character,
-- keeps only "mapped characters" 
-- (aka the 24 anaccented letters of greek alphabet)
function _fmainkleida ( any_string ) 
    local mystring = any_string
    local startingchar = mw.ustring.sub(mystring,1,1)
    local wordproduced = ''
    local mychar = ''
--[[    
-- if ending minus must be returned
--    local endingminus = false
--    if mw.ustring.sub(any_string, -1) == '-' then endingminus = true end
--]]
-- αν το πρώτο γράμμα είναι παύλα το αφαιρούμε
-- if first character is hyphen is removed
-- this way "endings" (like -λογία) will be sorted under their first character
    if startingchar == '-' then
        mystring = mw.ustring.sub(mystring,2)
    end
    -- αν υπήρχε μόνο η παύλα τότε επιστρέφει την αρχική παράμετρο
    --if only a hyphen existed then returns that hyphen
    if mystring == nil or mw.ustring.len(mystring) < 1 then
        return any_string 
    end
    startingchar = mw.ustring.sub(mystring,1,1)
--δοκίμασε να μετατρέψεις το πρώτο γράμμα
--"map" first letter
    convertedchar = objkleida._mappedletters[startingchar]    
    -- αν το πρώτο γράμμα δεν είναι ελληνικό κράτα το όπως ήταν
    -- if first letter was not a "greek" one
    -- keep it as is
    -- (why? maybe it is a punctuation mark or other mark)
    if convertedchar == nil or mw.ustring.len(convertedchar) < 1 then
         wordproduced = startingchar
    --αλλιώς βάλε στην αρχή αυτό που έφερε από τη μετατροπή
    --else replace it with the return value
    else
         wordproduced = convertedchar
    end
    -- αν έχει και άλλα
    -- if more characters exist...
    if mw.ustring.len(mystring) > 1 then
        --χρησιμοποίησε μόνο τα υπόλοιπα
        --use only the rest.
        mystring = mw.ustring.sub(mystring,2)        
        --για κάθε χαρακτήρα
        --For every character
        for codepoint in mw.ustring.gcodepoint( mystring ) do
            --αντικατάστησέ τον με βάση τον πίνακα
            --replace it according to mapping table
            mychar = mw.ustring.char(codepoint)
            convertedchar = objkleida._mappedletters[mychar]            
            --αν βρήκε κάτι για αντικατάσταση
            --είναι δηλαδή ελληνικό γράμμα
            --if something returned
            --(aka was a greek letter, accented or not)
            if convertedchar ~= nil then
                --πρόσθεσέ το στη δημιουργούμενη κλείδα
                --add it to "defaultsort"
                wordproduced = wordproduced .. convertedchar
            end
            -- else is a non greek character a space, another hyphen etc
            -- do nothing with it
        end
    end
--    if endingminus then wordproduced = wordproduced .. '-' end
    return wordproduced
end

--function that will be used for DEFAULTSORT
--will use "frame" and current tile to invoke parameter
objkleida.kleida = function( frame ) 
    PAGENAME = mw.title.getCurrentTitle().text  
    --[[αφαίρεση των κενών πριν και μετά το λήμμα γιατί μάλλον τα στέλνει το πρότυπο
    και δεν χρειάζονται έτσι κι αλλιώς
    (συνάρτηση αντιγραμμένη "τυφλά", είναι σωστή;)]]
    local myarg1 = PAGENAME:match( "^%s*(.-)%s*$" )
    if mw.ustring.len(myarg1) > 32 then
        --δημιουργία κλείδας μόνο για τους πρώτους 32 χαρακτήρες        
        --LUE problems exist if more than 32 characters are used
        --But can be extended to support "chunks" of 32 characters
        --(which maybe is not so usefull in such big words)
        myarg1 =  mw.ustring.sub(myarg1,1,32)
    end
    --creates DEFAULTSORT entry for the first 32 characters
    return frame:preprocess(_fmainkleida(myarg1))
end
 
return objkleida