Module:KleidaAll >> Module:KleidaAll/τεκμηρίωση
Κατατάσσει αλφαβητικά στις διάφορες Κατηγορίες λήμματα για διάφορες γλώσσες.

It alphabetizes the lemmata in the various Categories for several languages.


-- authors, 2013: [[User:Xoristzatziki]] [[User:Flyax]]
----επιστρέφει την κλείδα ταξινόμησης σε γαλλικά, πολωνικά κλπ
----(ΔΕΝ διαβάζει το PAGENAME γιατί δεν έχει frame ώστε να μπορεί να "κληθεί" από οποιονδήποτε)
 
p = {}

--local languages = require "Module:Languages"

--για lang = el grc κλπ μπορεί να καλεί-επιστρέφει την ελληνική κλείδα
--ή μπορεί και σαν προεπιλογή να επιστρέφει την ελληνική κλείδα αν δεν υπάρχει παράμετρος lang
--Να ΜΗΝ επιστρέφει τίποτε αν δεν υπάρχει κλείδα ή αν δεν χρειάζεται!

--Αφαιρεί έναν συγκεκριμένο χαρακτήρα -πχ τις παύλες- από ένα αλφαριθμητικό
function stripchars( str, chr )
    local s = ""
    for g in str:gmatch( "[^"..chr.."]" ) do
        s = s .. g
    end
    return s
end

--Αφαιρεί τελείες, κόμματα, κενά, παύλες κλπ από τη λέξη
function kopse (str)
    local mystring = ''
    str = stripchars(str,"- _.,;?!'%(%)%*%%\"") -- ’ δεν αφαιρείται σωστά στην περίπτωση του ρουμ. ș
    for codepoint in mw.ustring.gcodepoint( str ) do
        mychar = mw.ustring.char(codepoint)
        if mychar ~= "’" then mystring = mystring .. mychar end
    end
    return mystring
end

--Απλή αντικατάσταση με βάση έναν πίνακα, χωρίς να διαχωρίζεται το αρχικό γράμμα
simple_repl = function(lexi,pinakaki)
    local wordproduced = ''
    local mychar = ''
    local mystring = kopse(lexi)
    if mystring == nil or mw.ustring.len(mystring) < 1 then
        return lexi
    end    
    mystring = mw.ustring.lower(mystring)
    for codepoint in mw.ustring.gcodepoint( mystring ) do
        mychar = mw.ustring.char(codepoint)
        convertedchar = pinakaki[mychar] or mychar
        wordproduced = wordproduced .. convertedchar
    end
    return wordproduced
end

p.kleida = {}

p.kleida['ine-pro'] = function(word)
	-- check [[:Κατηγορία:Ρίζες (πρωτοϊνδοευρωπαϊκή)]], [[*gʷelH-]]
	PAGENAME = mw.title.getCurrentTitle().text
	if mw.ustring.sub(mw.ustring.match(PAGENAME, PAGENAME), 1, -1):sub(1, 1) == '*' then
	word = mw.ustring.sub(mw.ustring.match(PAGENAME, PAGENAME), 2, -1)  -- no asterisc
	end
return word
end

--  [[:Κατηγορία:Γαλλική γλώσσα]]
p.kleida['fr'] = function(mot)
    local tonismena = { 
        ['à'] = 'a', ['â'] = 'a', ['å'] = 'a', ['é'] = 'e', ['è'] = 'e', ['ê'] = 'e',
        ['ë'] = 'e', ['î'] = 'i', ['ï'] = 'i', ['ô'] = 'o', ['ö'] = 'o', ['œ'] = 'oe',
        ['ù'] = 'u', ['û'] = 'u', ['ü'] = 'u', ['ç'] = 'c', ['æ'] = 'ae' }
    local mystring = mot
    local wordproduced = ''
    local mychar = ''
    
    --Αφαιρούμε το se από τα αυτοπαθή ρήματα
    if mw.ustring.sub(mot,1,3) == 'se_' or mw.ustring.sub(mot,1,3) == 'se ' then mystring = mw.ustring.sub(mot,4) end
    if mw.ustring.sub(mot,1,2) == "s'" or mw.ustring.sub(mot,1,2) == "s’" then mystring = mw.ustring.sub(mot,3) end
    -- suffixes are auto OK but check [[Πρότυπο:ΔΦΑ]] [[:Κατηγορία:Λήμματα με προφορά ΔΦΑ (γαλλικά)]]
--    if mw.ustring.sub(mot,1,1) == "-" then mystring = mw.ustring.sub(mot,2) end
    mystring = kopse(mystring)  -- Αφαίρεσε από τη λέξη κόμματα, τελείες, κενά, παύλες κλπ
    if mystring == nil or mw.ustring.len(mystring) < 1 then
        return mot            --Αν το λήμμα ήταν κάτι σαν "-", άφησέ το
    end
    --τα μετατρέπουμε όλα σε πεζά
    mystring = mw.ustring.lower(mystring)
    --κάνουμε τις αλλαγές των χαρακτήρων με τόνους κλπ
    for codepoint in mw.ustring.gcodepoint( mystring ) do
        mychar = mw.ustring.char(codepoint)
        convertedchar = tonismena[mychar] or mychar
        wordproduced = wordproduced .. convertedchar
    end
    return wordproduced
end

p.kleida['de'] = function(lexi)
    local tonismena = {
        ['à'] = 'a', ['â'] = 'a', ['ä'] = 'a', ['é'] = 'e', ['è'] = 'e', ['ê'] = 'e',
        ['ë'] = 'e', ['î'] = 'i', ['ï'] = 'i', ['ô'] = 'o', ['ö'] = 'o', ['œ'] = 'oe',
        ['ù'] = 'u', ['û'] = 'u', ['ü'] = 'u', ['ç'] = 'c', ['ß'] = 'ss', ['ſ'] = 'ss' }
    return simple_repl(lexi,tonismena)
end

p.kleida['it'] = function(lexi)
    local tonismena = {
        ['à'] = 'a', ['â'] = 'a', ['ä'] = 'a', ['é'] = 'e', ['è'] = 'e', ['ê'] = 'e',
        ['ë'] = 'e', ['î'] = 'i', ['ï'] = 'i', ['ó'] = 'o', ['ô'] = 'o', ['ö'] = 'o', ['œ'] = 'oe',
        ['ù'] = 'u', ['û'] = 'u', ['ü'] = 'u', ['ç'] = 'c', ['ž'] = 'z' }
    return simple_repl(lexi,tonismena)
end

p.kleida['es'] = function(lexi)
    local tonismena = {
        ['á'] = 'a', ['é'] = 'e', ['è'] = 'e', ['í'] = 'i', ['ö'] = 'o', ['ó'] = 'o',
        ['ú'] = 'u', ['ü'] = 'u', ['ð'] = 'd', ['å'] = 'a', ['ñ'] = 'nα' }
    return simple_repl(lexi,tonismena)
end

p.kleida['pt'] = function(lexi)
    local tonismena = {
        ['à'] = 'a', ['â'] = 'a', ['á'] = 'a', ['ã'] = 'a', ['é'] = 'e', ['ê'] = 'e',
        ['í'] = 'i', ['ó'] = 'o', ['ö'] = 'o', ['ô'] = 'o', ['õ'] = 'o',
        ['ú'] = 'u', ['ũ'] = 'u', ['ü'] = 'u', ['ç'] = 'c', ['ð'] = 'd' }
    return simple_repl(lexi,tonismena)
end

p.kleida['vi'] = function(lexi)
    local tonismena = { 
  ['à']='a', ['ả']='a', ['ã']='a', ['á']='a', ['ạ']='a', ['ò']='o', ['ỏ']='o', ['õ']='o', ['ó']='o', ['ọ']='o',
  ['ù']='u', ['ủ']='u', ['ũ']='u', ['ú']='u', ['ụ']='u', ['ỳ']='y', ['ỷ']='y', ['ỹ']='y', ['ý']='y', ['ỵ']='y',
  ['è']='e', ['ẻ']='e', ['ẽ']='e', ['é']='e', ['ẹ']='e', ['ì']='i', ['ỉ']='i', ['ĩ']='i', ['í']='i', ['ị']='i',
   ['ă']='aα', ['ằ']='aα', ['ẳ']='aα', ['ẵ']='aα', ['ắ']='aα', ['ặ']='aα', ['đ']='dα',
   ['â']='aε', ['ầ']='aε', ['ẩ']='aε', ['ẫ']='aε', ['ấ']='aε', ['ậ']='aε',
   ['ê']='eα', ['ề']='eα', ['ể']='eα', ['ễ']='eα', ['ế']='eα', ['ệ']='eα', 
   ['ô']='oα', ['ồ']='oα', ['ổ']='oα', ['ỗ']='oα', ['ố']='oα', ['ộ']='oα',
   ['ơ']='oε', ['ờ']='oε', ['ở']='oε', ['ỡ']='oε', ['ớ']='oε', ['ợ']='oε',
   ['ư']='uα', ['ừ']='uα', ['ử']='uα', ['ữ']='uα', ['ứ']='uα', ['ự']='uα' }
    return simple_repl(lexi,tonismena)
end

p.kleida['ro'] = function(mot)
    local tonismena = {       
        ['ă'] = 'aα', ['â'] = 'aε', ['î'] = 'iα',
        ['ş'] = 'sα', ['ș'] = 'sα', ['ţ'] = 'tα', ['ț'] = 'tα' }
    local mychar = ''
    local wordproduced = ''
    local mystring = kopse(mot)  -- Αφαίρεσε από τη λέξη κόμματα, τελείες, κενά, παύλες κλπ
    if mystring == '' then
        return mot            --Αν το λήμμα ήταν κάτι σαν "-", άφησέ το
    end
    --αφαιρούμε το πρώτο γράμμα για να το αφήσουμε αμετάβλητο
    local initial = mw.ustring.sub(mystring,1,1)
    mystring = mw.ustring.sub(mystring,2)
    mystring = mw.ustring.lower(mystring)
    --κάνουμε τις αλλαγές των χαρακτήρων με τόνους κλπ
    for codepoint in mw.ustring.gcodepoint( mystring ) do
        mychar = mw.ustring.char(codepoint)
        convertedchar = tonismena[mychar] or mychar
        wordproduced = wordproduced .. convertedchar
    end
    return initial .. wordproduced
end

p.kleida['eo'] = function(mot)
    local tonismena = {       
        ['ĉ'] = 'cα', ['ŝ'] = 'sα', ['ĝ'] = 'gα',
        ['ĵ'] = 'jα', ['ĥ'] = 'hα', ['ŭ'] = 'uα' }
    local mychar = ''
    local wordproduced = ''
    local mystring = kopse(mot)  -- Αφαίρεσε από τη λέξη κόμματα, τελείες, κενά, παύλες κλπ
    if mystring == '' then
        return mot            --Αν το λήμμα ήταν κάτι σαν "-", άφησέ το
    end
    --αφαιρούμε το πρώτο γράμμα για να το αφήσουμε αμετάβλητο
    local initial = mw.ustring.sub(mystring,1,1)
    mystring = mw.ustring.sub(mystring,2)
    mystring = mw.ustring.lower(mystring)
    --κάνουμε τις αλλαγές των χαρακτήρων με τόνους κλπ
    for codepoint in mw.ustring.gcodepoint( mystring ) do
        mychar = mw.ustring.char(codepoint)
        convertedchar = tonismena[mychar] or mychar
        wordproduced = wordproduced .. convertedchar
    end
    return initial .. wordproduced
end

--είναι αναγκαίο μόνο για την τουρκική γλώσσα να μπαίνει ο κεφαλαίος χαρακτήρας İ στην κλείδα
--ταξινόμησης των λέξεων που αρχίζουν από πεζό i . Είναι το μοναδικό κεφαλαίο γράμμα που
--χρησιμοποιούμε στις κλείδες ταξινόμησης.
p.kleida['tr'] = function(mot)
    local tonismena1 = {
        ['ç'] = 'cα', ['ğ'] = 'gα', ['ö'] = 'oα', ['ş'] = 'sα', ['ü'] = 'uα', ['I'] = 'hι', ['ı'] = 'hι', ['İ'] = 'i',
        ['Ç'] = 'cα', ['Ğ'] = 'gα', ['Ö'] = 'oα', ['Ş'] = 'sα', ['Ü'] = 'uα' }
    local tonismena2 = { ['â'] = 'a', ['á'] = 'a', ['î'] = 'i', ['û'] = 'u' }
    local mychar = ''
    local wordproduced = ''
    local mystring = kopse(mot)  -- Αφαίρεσε από τη λέξη κόμματα, τελείες, κενά, παύλες κλπ
    if mystring == '' then
        return mot            --Αν το λήμμα ήταν κάτι σαν "-", άφησέ το
    end
    --αφαιρούμε το πρώτο γράμμα για να το αφήσουμε αμετάβλητο εκτός αν είναι I ή i
    local initial = mw.ustring.sub(mystring,1,1)
    if initial == 'I' then initial = 'ı' end
    if initial == 'i' or initial == 'İ' then initial = 'İ' end
    
    mystring = mw.ustring.sub(mystring,2)
    --κάνουμε τις αλλαγές των χαρακτήρων με τόνους κλπ
    for codepoint in mw.ustring.gcodepoint( mystring ) do
        mychar = mw.ustring.char(codepoint)
        convertedchar = tonismena1[mychar] or mychar
        wordproduced = wordproduced .. convertedchar
    end
    wordproduced = mw.ustring.lower(wordproduced)
    mystring = initial .. wordproduced
    wordproduced = ''
    for codepoint in mw.ustring.gcodepoint( mystring ) do
        mychar = mw.ustring.char(codepoint)
        convertedchar = tonismena2[mychar] or mychar
        wordproduced = wordproduced .. convertedchar
    end
    return wordproduced
end

p.kleida['pl'] = function(mot)
    local tonismena = {       
        ['ą'] = 'aα', ['ć'] = 'cα', ['ę'] = 'eα', ['ł'] = 'lα',
        ['ń'] = 'nα', ['ó'] = 'oα', ['ś'] = 'sα', ['ź'] = 'zα', ['ż'] = 'zε'}
    local mychar = ''
    local wordproduced = ''
    local mystring = kopse(mot)  -- Αφαίρεσε από τη λέξη κόμματα, τελείες, κενά, παύλες κλπ
    if mystring == '' then
        return mot            --Αν το λήμμα ήταν κάτι σαν "-", άφησέ το
    end
    --αφαιρούμε το πρώτο γράμμα για να το αφήσουμε αμετάβλητο
    --εδώ ήδη έχει αφαιρεθεί το αρχικό ενωτικό από τα επιθήματα
    local initial = mw.ustring.sub(mystring,1,1)    
    initial = mw.ustring.lower(initial) --το μετατρέπουμε σε πεζό
    mystring = mw.ustring.sub(mystring,2)
    mystring = mw.ustring.lower(mystring) --μετατρέπουμε σε πεζά τα υπόλοιπα
    --κάνουμε τις αλλαγές των χαρακτήρων με τόνους κλπ
    for codepoint in mw.ustring.gcodepoint( mystring ) do
        mychar = mw.ustring.char(codepoint)
        convertedchar = tonismena[mychar] or mychar
        wordproduced = wordproduced .. convertedchar
    end
    return initial .. wordproduced
end

return p