Module:Kleida
Τεκμηρίωση
επεξεργασίαΧρήση:
- Μέσα σε πρότυπο που μπορεί να διαβάσει το PAGENAME:
- {{#invoke: Kleida | kleida | {{PAGENAME}}}}
- Για χρήση σε άλλα 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