Module:Kleida

Από Βικιλεξικό
Μετάβαση στην πλοήγηση Πήδηση στην αναζήτηση

Τεκμηρίωση[επεξεργασία]

Χρήση:

  1. Μέσα σε πρότυπο που μπορεί να διαβάσει το PAGENAME:
    {{#invoke: Kleida | kleida | {{PAGENAME}}}}
  2. Για χρήση σε άλλα modules:
    local Kleida = require "Module:Languages" -- στην αρχή του Module
    local mykleida = Kleida.kleida('κάποιο κείμενο ή λέξη') -- κλήση της συνάρτησης

Επιστρέφει ΜΟΝΟ τα γράμματα της ελληνικής αλφαβήτου σε άτονα πεζά και το τελικό σίγμα σαν σ

Μπορεί να χρησιμοποιηθεί μέσα στο {{κλείδα ταξινόμησης}} όταν δεν υπάρχει η παράμετρος της κλείδας.

Ίσως και να χρησιμοποιηθεί για την αυτόματη δημιουργία της παραμέτρου (δηλαδή είτε κάποιος έχει βάλει παράμετρο είτε όχι) αφού μάλλον κάνει περιττή την παράμετρο.

Ή ίσως να χρησιμοποιηθεί για έλεγχο της παραμέτρου βάζοντας τη σελίδα σε κρυφή κατηγορία:Σελίδες για έλεγχο κλπ.


-- @brief
--  φτιάχνει την απλή κλείδα που μπαίνει ως παράμετρος στο "κλείδα ταξινόμησης"
--  μπορεί να φτιαχτεί για όλες τις γλώσσες
--  επίσης μπορεί να επεκταθεί ώστε να επιστρέφει όλο το DEFAULTSORT
-- @param
--  ο τίτλος του λήμματος π.χ. ἐνθάδε
-- @return
--  επιστρέφει την πρώτη παράμετρο για το "κλείδα ταξινόμησης"
--  π.χ. για το Ὦ ξεῖν', ἀγγέλλειν Λακεδαιμονίοι επιστρέφει ωξειναγγελλεινλακεδαιμονιοισ
-- για το -κόπος επιστρέφει κοποσ
-- δεν επιστρέφει την παύλα στο τέλος αλλά μπορεί να φτιαχτεί αν χρειάζεται
-- @author
--  [[wikt:el:Χρήστης:Xoristzatziki]]

objkleida = {}--All lua modules on Wikipedia must begin by defining a variable 
                    --that will hold their externally accessible functions.
                    --Such variables can have whatever name you want and may 
                    --also contain various data as well as functions.

-- κύρια συνάρτηση kleida
--  καλείται με μία αριθμητική παράμετρο
--  η τιμή που επιστρέφει μπορεί να χρησιμοποιηθεί 
--   και για να ταξινομηθούν αλφαβητικά και απλές γραμμές
--   (π.χ. σε πίνακες ή ενότητες)

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

-- Δεν ελέγχει την περίπτωση το πρώτο γράμμα να είναι παύλα και το δεύτερο κενό
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
--]]
-- αν το πρώτο γράμμα είναι παύλα το αφαιρούμε
-- εδώ μπορεί να μπει ο έλεγχος και για τα γαλλικά s, se κλπ
    if startingchar == '-' then
        mystring = mw.ustring.sub(mystring,2)
    end
    -- αν υπήρχε μόνο η παύλα τότε επέστρεψε την αρχική παράμετρο
    if mystring == nil or mw.ustring.len(mystring) < 1 then
        return any_string 
    end
    startingchar = mw.ustring.sub(mystring,1,1)
--δοκίμασε να μετατρέψεις το πρώτο γράμμα
    convertedchar = objkleida._mappedletters[startingchar]    
-- αν το πρώτο γράμμα δεν είναι ελληνικό κράτα το όπως ήταν
    if convertedchar == nil or mw.ustring.len(convertedchar) < 1 then
         wordproduced = startingchar
    else
         --αλλιώς βάλε στην αρχή αυτό που έφερε από τη μετατροπή
         wordproduced = convertedchar
    end
-- αν έχει και άλλα
    if mw.ustring.len(mystring) > 1 then
        --χρησιμοποίησε μόνο τα υπόλοιπα
        mystring = mw.ustring.sub(mystring,2)        
        --για κάθε χαρακτήρα
        for codepoint in mw.ustring.gcodepoint( mystring ) do
            --αντικατέστησέ τον με βάση τον πίνακα
            mychar = mw.ustring.char(codepoint)
            convertedchar = objkleida._mappedletters[mychar]            
            --αν βρήκε κάτι για αντικατάσταση
            --είναι δηλαδή ελληνικό γράμμα
            if convertedchar ~= nil then
                --πρόσθεσέ το στη δημιουργούμενη κλείδα
                wordproduced = wordproduced .. convertedchar
                --mw.log(codepoint .. convertedchar)
            --else
                --mw.log(mychar .. '!!!')
            end
        end
    end
--    if endingminus then wordproduced = wordproduced .. '-' end
    return wordproduced
end

objkleida.kleidafirst = function( frame ) 
    local myarg1 = frame.args[1]
    --[[αφαίρεση των κενών πριν και μετά το λήμμα γιατί μάλλον τα στέλνει το πρότυπο
    και δεν χρειάζονται έτσι κι αλλιώς]]
    myarg1 = myarg1:match( "^%s*(.-)%s*$" )
    return _fmainkleida(myarg1) 
end

objkleida.kleida = function( frame ) 
    local args = frame.args
    local pargs = frame:getParent().args
    --local myarg1 = frame.args[1]
    PAGENAME = mw.title.getCurrentTitle().text  
--    NAMESPACE = mw.title.getCurrentTitle().nsText

    --[[αφαίρεση των κενών πριν και μετά το λήμμα γιατί μάλλον τα στέλνει το πρότυπο
    και δεν χρειάζονται έτσι κι αλλιώς
    (συνάρτηση αντιγραμμένη "τυφλά", είναι σωστή;)]]
    myarg1 = PAGENAME:match( "^%s*(.-)%s*$" )
    local kleidaall = ''
    -- πρώτη κλείδα
    -- μετατρέπουμε τον τίτλο αφαιρώντας διακριτικά κλπ. (ότι κάνει το _fmainkleida)
    kl1 = _fmainkleida(myarg1)
    -- δεύτερη κλείδα
    -- μετατρέπουμε πρώτα σε κεφαλαία και μετά σε πεζά
    -- (από το πρότυπο κλείδα ταξινόμησης που υπήρχε.
    -- Δεν είναι σίγουρο αν είναι αναγκαία η διπλή μετατροπή)
    kl2 = mw.ustring.lower(mw.ustring.upper(myarg1))
    -- τρίτη κλείδα ο τίτλος του λήμματος
    kl3 = myarg1
    --αρχίζουμε βάζοντας την κλείδα1
    kleidaall = kl1 .. ' !'
    --αν είναι ίδια με τη δεύτερη απλά πρόσθεσε άλλο ένα !
    if kl1 == kl2 then
        kleidaall = kleidaall .. ' !'
    else --αλλιώς βάλε τη δεύτερη κλείδα
        kleidaall = kleidaall .. kl2 .. ' !'
    end
    --αν η δεύτερη είναι ίδια με την τρίτη απλά πρόσθεσε άλλο ένα !
    if kl2 == kl3 then
        kleidaall = kleidaall .. ' !'
    else --αλλιώς βάλε την τρίτη κλείδα (δηλαδή τον τίτλο του λήμματος)
        kleidaall = kleidaall .. kl3 .. ' !'
    end
    return frame:preprocess(kleidaall)
end
-- για έλεγχο εδώ, με την κονσόλα αποσφαλμάτωσης πιο κάτω
-- δίνουμε print(p.test2())
function objkleida.test2()
    local myarg1 = '-άλλοςῶ-'
    output =  '#το:' .. myarg1 .. '#γίνεται:' .. _fmainkleida(myarg1) .. '#'
    myarg1 = '-κόπος'
    output =  output .. '#το:' .. myarg1 .. '#γίνεται:' .. _fmainkleida(myarg1) .. '#' 
    myarg1 = '!άλλοςῶ-'
    output =  output .. '#το:' .. myarg1 .. '#γίνεται:' .. _fmainkleida(myarg1) .. '#'
    return output
end

return objkleida