Module:Wt/grc/Kleida-grc
Καλείται απόν τὸ Template:Wt/grc/κλείδα-αρχ
-- @brief
-- φτιάχνει την απλή κλείδα που χρησιμεύει για τη σωστή ταξινόμηση των ελληνικών λέξεων
-- μπορεί να φτιαχτεί για όλες τις γλώσσες
-- @param
-- η κλήση του module δεν χρειάζεται παράμετρο, δουλεύει με το PAGENAME της σελίδας
-- @return
-- επιστρέφει την κλείδα ταξινόμησης
-- π.χ. για το Ὦ ξεῖν', ἀγγέλλειν Λακεδαιμονίοι επιστρέφει ωξειναγγελλεινλακεδαιμονιοισ
-- για το -κόπος επιστρέφει κοποσ
-- δεν επιστρέφει την παύλα στο τέλος αλλά μπορεί να φτιαχτεί αν χρειάζεται
-- επιστρέφει κλείδα μόνο για τους πρώτους 32 χαρακτήρες
-- αγνοεί ως πρώτο χαρακτήρα: παύλα, απόστροφο U+0027
-- @authors
-- [[wikt:el:Χρήστης:Xoristzatziki]]
-- [[wikt:el:Χρήστης:Flyax]]
-- [[wikt:el:Χρήστης:Svlioras]]
p = {}
--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
-- η τιμή που επιστρέφει μπορεί να χρησιμοποιηθεί
-- και για να ταξινομηθούν αλφαβητικά και απλές γραμμές
-- (π.χ. σε πίνακες ή ενότητες)
p._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
--]]
-- αν το πρώτο γράμμα είναι παύλα το αφαιρούμε
if startingchar == '-' then
mystring = mw.ustring.sub(mystring,2)
end
-- αν ο πρώτος χαρακτήρας είναι απλή απόστροφος (U+0027) την αφαιρούμε (παράδειγμα: λήμμα 'γγίζω)
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 = p._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 = p._mappedletters[mychar]
--αν βρήκε κάτι για αντικατάσταση
--είναι δηλαδή ελληνικό γράμμα
if convertedchar ~= nil then
--πρόσθεσέ το στη δημιουργούμενη κλείδα
wordproduced = wordproduced .. convertedchar
end
end
end
-- if endingminus then wordproduced = wordproduced .. '-' end
return wordproduced
end
p.kleida = function( frame )
PAGENAME = mw.title.getCurrentTitle().text
--[[αφαίρεση των κενών πριν και μετά το λήμμα γιατί μάλλον τα στέλνει το πρότυπο
και δεν χρειάζονται έτσι κι αλλιώς
(συνάρτηση αντιγραμμένη "τυφλά", είναι σωστή;)]]
local myarg1 = PAGENAME:match( "^%s*(.-)%s*$" )
if mw.ustring.len(myarg1) > 32 then
--δημιουργία κλείδας μόνο για τους πρώτους 32 χαρακτήρες
myarg1 = mw.ustring.sub(myarg1,1,32)
end
return frame:preprocess(_fmainkleida(myarg1))
end
--για χρήση σε άλλα modules
--εύρεση κλείδας σε οποιαδήποτε ελληνική λέξη
p.kleidaleksis = function( leksi )
local arg = leksi
if mw.ustring.len(arg) > 32 then
--δημιουργία κλείδας μόνο για τους πρώτους 32 χαρακτήρες
arg = mw.ustring.sub(arg,1,32)
end
return _fmainkleida(arg)
end
p['κλείδα'] = function(leksi)
return p.kleidaleksis(leksi)
end
--[[:pl:Moduł:a tergo]]
function reverseatext( text )
local s = ''
for codepoint in mw.ustring.gcodepoint( text ) do
s = mw.ustring.char(codepoint) .. s
end
return s
end
p.reverseit = function( frame )
PAGENAME = mw.title.getCurrentTitle().text
--[[αφαίρεση των κενών πριν και μετά το λήμμα γιατί μάλλον τα στέλνει το πρότυπο
και δεν χρειάζονται έτσι κι αλλιώς
(συνάρτηση αντιγραμμένη "τυφλά", είναι σωστή;)]]
local myarg1 = PAGENAME:match( "^%s*(.-)%s*$" )
--θα αντιστρέψει και τη θέση της παύλας
local antistrofo = reverseatext(myarg1)
if mw.ustring.len(antistrofo) > 32 then
--δημιουργία κλείδας μόνο για τους πρώτους 32 χαρακτήρες
antistrofo = mw.ustring.sub(antistrofo,1,32)
end
return _fmainkleida(antistrofo)
end
--επιστρέφει την κλείδα του ονόματος της γλώσσας
--εφόσον η γλώσσα έχει δοθεί με τη μορφή δίψηφου ή τρίψηφου κωδικού
--και υπάρχει στο Module:Wt/grc/Languages
--Χρήση μέσω προτύπου (αφού παίρνει την παράμετρο με getParent)
--Επιστρέφει κενό αν δεν βρει κάτι
p['κλ-γλ'] = function(frame)
local pargs = frame:getParent().args
local output =''
local lang = pargs[1] or ''
if lang then
local languages = mw.loadData("Module:Wt/grc/Languages")
langforsort = languages[lang].name or ''
if langforsort then
return _fmainkleida(langforsort)
else
return lang
end
else
return ''
end
end
return p