Module:PartOfSpeech >> Module:PartOfSpeech/pos   <<< Module:PartOfSpeech/τεκμηρίωση
Ελέχουμε την Κατηγορία:Σελίδες με σφάλμα στον κωδικό γλώσσας

Το Module περιέχει τη συνάρτηση η οποία εμφανίζει τον τίτλο του μέρους τους λόγου.

Κάθε μέρος του λόγου υπάρχει σαν μεταβλητή pos (όπως στη σελίδα Module:PartOfSpeech/pos).
Αναλυτικά:

  • pos['xxx'] το xxx είναι το όνομα που περιέχεται στο πρότυπο
    για το {{άρθρο}} είναι η λέξη άρθρο που υπάρχει στον κώδικα του προτύπου: {{#invoke:PartOfSpeech|partofspeech|άρθρο}}
  • ['link'] = '[[χχχ|ΧΧΧ]]': τι θα εμφανίζεται στο λήμμα, στον τίτλο της ενότητας, ως κείμενο.
    Παλαιότερα, υπήρχαν σύνδεσμοι στα Μέρη Λόγου: Το χχχ ήταν ο σύνδεσμος και το ΥΥΥ η εμφάνιση που επιθυμούμε.
    για το {{γερουνδιακό}} είχαμε ['link'] = '[[Παράρτημα:Γραμματική_Λατινικής_Γλώσσας#Γερουνδιακό|Γερουνδιακό]]'.
  • ['κατηγορία'] = 'χχχ': Η ονομασία της κατηγορίας στην οποία θα εντάσσεται το λήμμα.
    για το {{ρίζα}} έχουμε ['κατηγορία'] = 'Ρίζες λέξεων' που σημαίνει ότι το λήμμα θα ενταχθεί στην Κατηγορία:Ρίζες λέξεων (ψψψ) όπου ψψψ είναι η γλώσσα στην οποία ανήκει το λήμμα (και έχει δοθεί ως παράμετρος στο λήμμα, όπως π.χ. {{ρίζες|eo}} στο histori-)
  • inlangu
    • ['inlangu'] = true η ενότητα που θα περιέχει το πρότυπο θα εντάσσεται στην κατηγορία της γλώσσας.
    • ['inlangu'] = false η ενότητα ΔΕΝ θα εντάσσεται στην κατηγορία της γλώσσας. Για παράδειγμα το legendus δεν έχει ενταχθεί στην κατηγορία: Λατινική γλώσσα αλλά μόνο στην κατηγορία: Γερουνδιακά (λατινικά). (Η οποία με τη σειρά της είναι ενταγμένη στην κατηγορία Λατινική γλώσσα). Φυσικά αν υπάρχουν και άλλα μέρη του λόγου στο λήμμα για τα οποία το ['inlangu'] = true τότε θα ενταχθεί (όπως π.χ. το secundus)

Εάν χρειαστεί να δημιουργηθεί νέο πρότυπο για κάποιο μέρος του λόγου που δεν υπάρχει τότε προσθέτουμε ένα ακόμα pos['xxx'] = ... με όλα τα στοιχεία συμπληρωμένα και καλύτερα αλφαβητικά στη θέση που πρέπει.


-- 2013 authors: [[wikt:el:Xoristzatziki]] [[wikt:el:Flyax]] 
-- 2020 split [[Module:PartOfSpeech/pos]] και νέα στοιχεία [[wikt:el:Sarri.greek]] 
-- 2022 reverse indices
--- 2013 @params παράμετροι: 
---- μέροςτουλόγου :το μέρος του λόγου που θα εμφανιστεί π.χ. Ουσιαστικό
---- γλώσσα: iso της γλώσσας π.χ. fr για τα γαλλικά
---- τύπος: το μέρος του λόγου για την κατηγορία π.χ. Ουσιαστικά
---- ΔΕ ΧΡΗΣΙΜΟΠΟΙΕΤΑΙ ΠΛΕΟΝ: αριθ: ο αριθμός, αν έχουμε περισσότερα από 1 (εδώ υπάρχει διαφωνία αλλά υπάρχει για παν ενδεχόμενο)
-- @required: [[Module:Languages]],  [[Module:KleidaAll]]
--- για τα αντίστροφα λεξικά: [[Module:Kleida-el]] [[Module:Kleida-la]]
-- ειδικές περιπτώσεις: κατηγορία2, ειδική κατηγορία πρόσθετη για ορισμένες γλώσσες. 2021.11. βλ [[Module talk:PartOfSpeech/pos]]
--[=[ ΔΟΜΗ STRUCTURE
* required
* preliminaries and functions
* categories
* reverse index
* help notes
]=]--


p = {}

-- --------------------REQUIRED
local languages =  mw.loadData("Module:Languages")
	-- Module που θα επεκταθεί σιγά σιγά και θα περιέχει συναρτήσεις για κάθε γλώσσα που έχουμε
local ascii = require "Module:KleidaAll"
	-- Τώρα περιέχει συναρτήσεις για τις παρακάτω γλώσσες
	-- 'fr', 'de', 'es', 'ro', 'pt', 'tr', 'eo', 'vi'
local pos = require("Module:PartOfSpeech/pos")
-- reverse για τα αντίστροφα λεξικά: [[Module:Kleida-el]] [[Module:Kleida-la]]

-- --------------------
--λίγο εκνευριστικό αλλά...
function exeikati(onearg)
    return not (onearg == nil or mw.ustring.len(onearg) < 1)
end

errorhere = function(errstring)
    return '<div class="error">' .. errstring .. '</div>[[Κατηγορία:Σελίδες με σφάλματα]]'
end

-- --------------------
-- η κύρια συνάρτηση που θα χρησιμοποιηθεί στο Πρότυπο
function p.partofspeech(frame)
    local args = frame.args
    local lemmaargs = frame:getParent().args
    local pagename = mw.title.getCurrentTitle().text
    local meros = args[1]	--μέρος του λόγου από το πρότυπο

    local lang = lemmaargs[1] or ''		--γλώσσα από το λήμμα
    local specialnumber = ''	-- not used (problem at Modules: for Tables of Content)
    
	--αν δεν υπάρχει κάτι καταχωρισμένο στον πίνακα εδώ
	--για το συγκεκριμένο μέρος του λόγου
    if not exeikati(pos[meros]['κατηγορία']) then
    	return errorhere('Το μέρος του λόγου δεν υπάρχει στον πίνακα.')	
    end
    
    --βάλε την εικόνα, την αρχή του span και το μέρος του λόγου
    local output = '<span style="white-space:nowrap" class="partofspeech">[[File:OOjs_UI-like_arrow_empty-ltr_progressive.svg|25px|alt=|link=]] ' .. pos[meros]['link']
-- ΔΕ ΧΡΗΣΙΜΟΠΟΙΟΥΜΕ ΠΛΕΟΝ εσωτερική αρίθμηση, αλλά ==={{ουσιασιστικό|χχ}} 1===
    --αν έχει αρίθμηση βάλε και ένα κενό συν τον αριθμό
--    if exeikati(lemmaargs['αριθ']) then        
--        output = output  .. ' ' .. lemmaargs['αριθ']
--        specialnumber = lemmaargs['αριθ']
--    end
    --κλείσε το span
    output = output  .. '</span>'
   
    --Συνέχισε με τις κατηγορίες μόνο για το κύριο namespace
    if mw.title.getCurrentTitle().nsText ~= '' then return output end
	--αν δεν έχει δοθεί γλώσσα ή δεν υπάρχει στον πίνακα των γλωσσών ο κωδικός ή/και το name
	
	-- sublang είναι ποικιλίες, χωρίς κατηγορίες Γραμματικών κατηγοριών. Δεν είναι αυτόνομες γλώσσες
	-- status = 'main' δηλαδή σαν κανονικές γλώσσες, μόνο (μετά από συζήτηση και απόφαση) έγιναν η ελληνιστική grc-koi, τα νεολατινικά (la-new} και η καθαρεύουσα
    	-- [[Βικιλεξικό:Βικιδημία/2021#3_υπαγόμενες_γλώσσες_με_ιδιαίτερο_ρόλο]]
    if lang == '' or languages[lang] == nil or (languages[lang].sublang == true and languages[lang].status ~= 'main') then
        return 
        pos[meros]['link']..'[[Κατηγορία:Σελίδες με σφάλμα στον κωδικό γλώσσας]]'
		.. ' <b><span style="color:#b22222; font-size:14px;">o κωδικός γλώσσας δεν υπάρχει για τα μέρη λόγου</span></b>'
	--Δεν δόθηκε κωδικός γλώσσας ή δεν είναι καταχωρισμένος στον πίνακα.')	
	else
-- Preferably add anchors at various senses / per language
		--δημιουργία κρυφού χαρακτηριστικού γλώσσας για παραπομπές
			-- σημείωση 2022: υπάρχει αυτόματο anchor από το ToC (table of contents)
		-- π.χ. [[όνομαλήμματος#elουσιαστικό]]
		-- ή [[όνομαλήμματος#elουσιαστικό1]]
		--προϋποθέτει ότι η γλωσσική ενότητα υπάρχει μία μόνο φορά
		-- και οι διάφορες υποενότητες είναι αριθμημένες 
		output = '<span id="' .. lang .. meros .. specialnumber.. '"></span>' .. output
	end


    local kleida = ''
    --Αν ο χρήστης μάς έχει δώσει κλείδα, σαν δεύτερη αριθμητική παράμετρο στο λήμμα, την χρησιμοποιούμε
    if exeikati(lemmaargs[2]) then
        kleida = '|' .. lemmaargs[2]
        --διαφορετικά κοιτάμε αν υπάρχει ετοιμη συνάρτηση για τη συγκεκριμένη γλώσσα
    elseif ascii.kleida[lang] ~= nil then
        kleida = '|' .. ascii.kleida[lang](pagename)
    end
    
-- -------------------- ΚΑΤΗΓΟΡΙΕΣ 
    if not exeikati(pos[meros]['κατηγορία']) then  
    	return errorhere('Δεν έχει καταχωρισθεί η κατηγορία στον πίνακα.')	
	else		
        if pos[meros]['inlangu'] then
            output = output  .. '[[Κατηγορία:' .. languages[lang].cat .. kleida .. ']]'
        end
       output = output  .. '[[Κατηγορία:' .. pos[meros]['κατηγορία'] .. ' (' .. languages[lang].name .. ')' .. kleida .. ']]'

    -- ειδικά για τις πολλές 'εκφράσεις'
       if pos[meros]['κατηγορία2'] ~= '' and pos[meros]['κατηγορία2'] ~= nil then
    		output = output .. '[[Κατηγορία:' .. pos[meros]['κατηγορία2'] .. ' (' .. languages[lang].name .. ')' .. kleida .. ']]'
       end
    -- ειδικά για το 'ρηματική φωνή' θέλουμε ΚΑΙ ρήματα (2021)
       if pos[meros]['κατηγορία3'] ~= '' and pos[meros]['κατηγορία3'] ~= nil then
    		output = output .. '[[Κατηγορία:' .. pos[meros]['κατηγορία3'] .. ' (' .. languages[lang].name .. ')' .. kleida .. ']]'
       end
    -- ειδικά για καταλόγους ρημάτων ορισμένων γλωσσών που ΕΧΟΥΝ μονολεκτική παθητική φωνή: 
    -- plus ειδική κατηγορία: Ρηματικές φωνές με κατάλογο ενεργητικής+παθητικής
    	-- βλ [[Module talk:PartOfSpeech/pos]]
    	if pos[meros]['link'] == 'Ρήμα' then
    		if languages[lang]['iso'] == 'el' -- [[λύνω]] [[λύνομαι]] [[ψεύδομαι]]
    		or languages[lang]['iso'] == 'grc' -- [[λύω]] [[λύομαι]] [[ἡγέομαι]]
    		or languages[lang]['iso'] == 'grc-koi' or languages[lang]['iso'] == 'kath' or languages[lang]['iso'] == 'gkm'
    		-- probably add here other hellenic languages: tsd (τσακωνικά), pnt (ποντικά), ...
    		or languages[lang]['iso'] == 'la' -- [[amo]], [[amor]]
    		then
    		output =  output .. '[[Κατηγορία:Ρηματικές φωνές' .. ' (' .. languages[lang].name .. ')' .. kleida .. ']]'
    		end
    	end -- close Ρήμα
    	-- control Surname categories
    	--[=[
    	if pos[meros]['link'] == 'Κύριο όνομα' and pos[meros]['inlangu'] == true then
    		if mw.ustring.find(page, "{{επώνυμο") -- and not mw.ustring.find(bodytext, "{{όνομα") and not mw.ustring.find(bodytext, "{{τόπος")
    		then pos[meros]['inlangu'] = false
    		else pos[meros]['inlangu'] = true
    		end
    	end
    	]=]--		
    	-- control παθητική - μεσοπαθητική φωνή -- test [[λύομαι]] [[λύνομαι]]
    	-- DO NOT USE THIS: if pos[meros] == 'ρηματική φωνή' then
    	if args[1] == 'ρηματική φωνή' then
	    	if (languages[lang]['iso'] == 'grc' or languages[lang]['iso'] == 'grc-koi')
    		then
    		--pos[meros]['κατηγορία3'] = "Ρήματα στη μεσοπαθητική φωνή"
    		output =  output .. '[[Κατηγορία:Ρήματα στη μεσοπαθητική φωνή' .. ' (' .. languages[lang].name .. ')' .. kleida .. ']]'
    		else
    		--pos[meros]['κατηγορία3'] = "Ρήματα στην παθητική φωνή"
    		output =  output .. '[[Κατηγορία:Ρήματα στην παθητική φωνή' .. ' (' .. languages[lang].name .. ')' .. kleida .. ']]'
			end
    	end -- close ρηματική φωνή

-- -------------------- REVERSE INDEX (for inlangu=true) by language (a selection)
	-- NOTE: [[Πρότυπο:κλείδα-ελλ]] for [[Module:Kleida-el]], manually at all grk pages (ελληνικά όλων των ειδών)
	-- also see application at [[Template:list2]]
-- grk Hellenic languages
	-- el [[:Κατηγορία:Αντίστροφο λεξικό (νέα ελληνικά)]] + καππαδοκικά, κατωιταλικά, ποντιακά, τσακωνικά
		if (lang == 'el' or languages[iso] == 'el' 
		or lang == 'cpg' or languages[iso] == 'cpg' 
		or lang == 'grk-ita' or languages[iso] == 'grk-ita' or lang == 'pnt' or languages[iso] == 'pnt' 
		or lang == 'tsd' or languages[iso] == 'tsd')
		and pos[meros]['inlangu'] == true then
		output = output .. '{{DEFAULTSORT:{{#invoke:Kleida-el|kleida}}}}[[Κατηγορία:Αντίστροφο λεξικό (νέα ελληνικά)|{{#invoke:Kleida-el|reverseit}}]]'
		end
	-- gkm [[:Κατηγορία:Αντίστροφο λεξικό (μεσαιωνικά ελληνικά)]] check [[ξενοδόχος]] [[ξενοδόχον]]
		if (lang == 'gkm' or languages[iso] == 'gkm') and pos[meros]['inlangu'] == true then
		output = output .. '{{DEFAULTSORT:{{#invoke:Kleida-el|kleida}}}}[[Κατηγορία:Αντίστροφο λεξικό (μεσαιωνικά ελληνικά)|{{#invoke:Kleida-el|reverseit}}]]'
		end
	-- grc [[:Κατηγορία:Αντίστροφο λεξικό (αρχαία ελληνικά)]] + ελληνιστική κοινή
		if (lang == 'grc' or languages[iso] == 'grc' or lang == 'grc-koi' or languages[iso] == 'grc-koi') and pos[meros]['inlangu'] == true then
		output = output .. '{{DEFAULTSORT:{{#invoke:Kleida-el|kleida}}}}[[Κατηγορία:Αντίστροφο λεξικό (αρχαία ελληνικά)|{{#invoke:Kleida-el|reverseit}}]]'
		end
-- other, by ISO a...z
	-- de [[:Κατηγορία:Αντίστροφο λεξικό (γερμανικά)]]
		if (lang == 'de' or languages[iso] == 'de') and pos[meros]['inlangu'] == true then
		output = output .. '{{DEFAULTSORT:{{#invoke:Kleida-la|kleida}}}}[[Κατηγορία:Αντίστροφο λεξικό (γερμανικά)|{{#invoke:Kleida-la|reverseit}}]]'
		end
	-- en [[:Κατηγορία:Αντίστροφο λεξικό (αγγλικά)]] check [[work]] [[works]] [[put up]]
		if (lang == 'en' or languages[iso] == 'en') and pos[meros]['inlangu'] == true then
		output = output .. '{{DEFAULTSORT:{{#invoke:Kleida-la|kleida}}}}[[Κατηγορία:Αντίστροφο λεξικό (αγγλικά)|{{#invoke:Kleida-la|reverseit}}]]'
		end
	-- eo [[:Κατηγορία:Αντίστροφο λεξικό (εσπεράντο)]]
		if (lang == 'eo' or languages[iso] == 'eo') and pos[meros]['inlangu'] == true then
		output = output .. '{{DEFAULTSORT:{{#invoke:Kleida-la|kleida}}}}[[Κατηγορία:Αντίστροφο λεξικό (εσπεράντο)|{{#invoke:Kleida-la|reverseit}}]]'
		end
	-- es [[:Κατηγορία:Αντίστροφο λεξικό (ισπανικά)]]
		if (lang == 'es' or languages[iso] == 'es') and pos[meros]['inlangu'] == true then
		output = output .. '{{DEFAULTSORT:{{#invoke:Kleida-la|kleida}}}}[[Κατηγορία:Αντίστροφο λεξικό (ισπανικά)|{{#invoke:Kleida-la|reverseit}}]]'
		end
	-- fr [[:Κατηγορία:Αντίστροφο λεξικό (γαλλικά)]] check [[abbé]]  [[thermomètre]] [[thermomètres]] 
		if (lang == 'fr' or languages[iso] == 'fr') and pos[meros]['inlangu'] == true then
		output = output .. '{{DEFAULTSORT:{{#invoke:Kleida-la|kleida}}}}[[Κατηγορία:Αντίστροφο λεξικό (γαλλικά)|{{#invoke:Kleida-la|reverseit}}]]'
		end
	-- it [[:Κατηγορία:Αντίστροφο λεξικό (ιταλικά)]]
		if (lang == 'it' or languages[iso] == 'it') and pos[meros]['inlangu'] == true then
		output = output .. '{{DEFAULTSORT:{{#invoke:Kleida-la|kleida}}}}[[Κατηγορία:Αντίστροφο λεξικό (ιταλικά)|{{#invoke:Kleida-la|reverseit}}]]'
		end
	-- la [[:Κατηγορία:Αντίστροφο λεξικό (λατινικά)]] except for la-new (Χωρίς τα νεολατινικά)
		if (lang == 'la' or languages[iso] == 'la') and pos[meros]['inlangu'] == true then
		output = output .. '{{DEFAULTSORT:{{#invoke:Kleida-la|kleida}}}}[[Κατηγορία:Αντίστροφο λεξικό (λατινικά)|{{#invoke:Kleida-la|reverseit}}]]'
		end
	-- pl [[:Κατηγορία:Αντίστροφο λεξικό (πολωνικά)]]
		if (lang == 'pl' or languages[iso] == 'pl') and pos[meros]['inlangu'] == true then
		output = output .. '{{DEFAULTSORT:{{#invoke:Kleida-la|kleida}}}}[[Κατηγορία:Αντίστροφο λεξικό (πολωνικά)|{{#invoke:Kleida-la|reverseit}}]]'
		end
	-- sh [[:Κατηγορία:Αντίστροφο λεξικό (σερβοκροατικά)]]
		if (lang == 'sh' or languages[iso] == 'sh') and pos[meros]['inlangu'] == true then
		output = output .. '{{DEFAULTSORT:{{#invoke:Kleida-la|kleida}}}}[[Κατηγορία:Αντίστροφο λεξικό (σερβοκροατικά)|{{#invoke:Kleida-la|reverseit}}]]'
		end		
	-- tr [[:Κατηγορία:Αντίστροφο λεξικό (τουρκικά)]]
		if (lang == 'tr' or languages[iso] == 'tr') and pos[meros]['inlangu'] == true then
		output = output .. '{{DEFAULTSORT:{{#invoke:Kleida-la|kleida}}}}[[Κατηγορία:Αντίστροφο λεξικό (τουρκικά)|{{#invoke:Kleida-la|reverseit}}]]'
		end
    end -- close function
    return frame:preprocess(output)
end

-- -------------------- η συνάρτηση για τις «Οδηγίες»
function p.help(frame)
	local protpage = mw.title.getCurrentTitle()
    local prot = protpage.text
    local protns = protpage.namespace
    if protns ~= 10 then
    	return [=[Η συνάρτηση πρέπει να κληθεί από πρότυπο. [[Κατηγορία:Σελίδες με σφάλματα]] ]=]	
    end
    local output = [=['''Οδηγίες χρήσης'''

Το πρότυπο '''<nowiki>{{]=] .. prot .. [=[}}</nowiki>''' είναι ένας τίτλος τρίτου επιπέδου (κάτω από τον τίτλο της γλώσσας) και εισάγει μια λέξη τύπου « ]=] .. pos[prot]['link'] .. [=[ ».

{| align=left style="border:1px" cellpadding=5
!colspan="2"| Παράμετροι
|-
| <tt>1</tt> || ''Υποχρεωτική.'' Κωδικός της γλώσσας (πχ el, en, fr κλπ). Όταν υπάρχει, κατηγοριοποιεί αυτόματα τη σελίδα στο "]=] .. pos[prot]['κατηγορία'] .. [=[ (<γλώσσα>). Αν λείπει ή αν είναι λανθασμένος, η σελίδα εντάσσεται στην [[:Κατηγορία:Σελίδες με σφάλμα στον κωδικό γλώσσας]].
|-
| <tt>2</tt> || ''Προαιρετική.'' Κλείδα διαλογής ASCII για την αυτόματη κατηγοριοποίηση. Για τα ελληνικά, γαλλικά, γερμανικά, ισπανικά, πολωνικά, πορτογαλικά, ρουμανικά, τουρκικά, εσπεράντο η κλείδα υπολογίζεται αυτόματα και δεν χρειάζεται να γραφεί ως παράμετρος εδώ.
|}]=]
    return frame:preprocess(output)
    
    
end

return p