Module:PartOfSpeech

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

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

Κάθε μέρος του λόγου υπάρχει σαν μεταβλητή pos.
Αναλυτικά:

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

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


----
----@params
----παράμετροι:
----μέροςτουλόγου :το μέρος του λόγου που θα εμφανιστεί π.χ. Ουσιαστικό
----γλώσσα :iso της γλώσσας π.χ. fr για τα γαλλικά
----τύπος :το μέρος του λόγου για την κατηγορία π.χ. Ουσιαστικά
----αριθ :ο αριθμός, αν έχουμε περισσότερα από 1 (εδώ υπάρχει διαφωνία αλλά υπάρχει για παν ενδεχόμενο)
-- @remark
--  Χρειάζεται το Module:Languages
--  Χρειάζεται το Module:KleidaAll

p = {}

local languages =  mw.loadData("Module:Languages")
--Module που θα επεκταθεί σιγά σιγά και θα περιέχει συναρτήσεις για κάθε γλώσσα που έχουμε
local ascii = require "Module:KleidaAll"
--Τώρα περιέχει συναρτήσεις για τις παρακάτω γλώσσες
-- 'fr', 'de', 'es', 'ro', 'pt', 'tr', 'eo', 'vi'  }

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

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

pos = {}
pos['αντωνυμία'] = { ['link'] = '[[αντωνυμία|Αντωνυμία]]', ['κατηγορία'] = 'Αντωνυμίες', ['inlangu'] = true}
pos['απαρέμφατο'] = { ['link'] = '[[απαρέμφατο|Απαρέμφατο]]', ['κατηγορία'] = 'Απαρέμφατα', ['inlangu'] = false}
pos['άρθρο'] = { ['link'] = '[[άρθρο|Άρθρο]]', ['κατηγορία'] = 'Άρθρα', ['inlangu'] = true}
pos['αριθμητικό'] = { ['link'] = '[[αριθμητικό|Αριθμητικό]]', ['κατηγορία'] = 'Αριθμητικά', ['inlangu'] = true}
pos['γερουνδιακό'] = { ['link'] = '[[Παράρτημα:Γραμματική_Λατινικής_Γλώσσας#Γερουνδιακό|Γερουνδιακό]]', ['κατηγορία'] = 'Γερουνδιακά', ['inlangu'] = false}
pos['γερούνδιο'] = { ['link'] = '[[γερούνδιο|Γερούνδιο]]', ['κατηγορία'] = 'Γερούνδια', ['inlangu'] = false}
pos['έκφραση'] = { ['link'] = '[[έκφραση|Έκφραση]]', ['κατηγορία'] = 'Εκφράσεις', ['inlangu'] = true}
pos['ένθημα'] = { ['link'] = '[[ένθημα|Ένθημα]]', ['κατηγορία'] = 'Ενθήματα', ['inlangu'] = true}
pos['επιθετική έκφραση'] = { ['link'] = 'Επιθετική έκφραση', ['κατηγορία'] = 'Επιθετικές εκφράσεις', ['inlangu'] = true}
pos['επίθετο'] = { ['link'] = '[[επίθετο|Επίθετο]]', ['κατηγορία'] = 'Επίθετα', ['inlangu'] = true}
pos['επίθημα'] = { ['link'] = '[[επίθημα|Επίθημα]]', ['κατηγορία'] = 'Επιθήματα', ['inlangu'] = true}
pos['επίρρημα'] = { ['link'] = '[[επίρρημα|Επίρρημα]]', ['κατηγορία'] = 'Επιρρήματα', ['inlangu'] = true}
pos['επιρρηματική έκφραση'] = { ['link'] = 'Επιρρηματική έκφραση', ['κατηγορία'] = 'Επιρρηματικές εκφράσεις', ['inlangu'] = true}
pos['επιφώνημα'] = { ['link'] = '[[επιφώνημα|Επιφώνημα]]', ['κατηγορία'] = 'Επιφωνήματα', ['inlangu'] = true}
pos['επιφωνηματική έκφραση'] = { ['link'] = 'Επιφωνηματική έκφραση', ['κατηγορία'] = 'Επιφωνηματικές εκφράσεις', ['inlangu'] = true}
pos['κατάληξη'] = { ['link'] = '[[κατάληξη|Κατάληξη]]', ['κατηγορία'] = 'Καταλήξεις', ['inlangu'] = true}
pos['κατάληξη αρσενικών επιθέτων'] = { ['link'] = 'Κατάληξη αρσενικών επιθέτων', ['κατηγορία'] = 'Καταλήξεις αρσενικών επιθέτων', ['inlangu'] = true}
pos['κατάληξη αρσενικών και θηλυκών ουσιαστικών'] = { ['link'] = 'Κατάληξη αρσενικών και θηλυκών ουσιαστικών', ['κατηγορία'] = 'Καταλήξεις αρσενικών και θηλυκών ουσιαστικών', ['inlangu'] = true}
pos['κατάληξη αρσενικών ουσιαστικών'] = { ['link'] = 'Κατάληξη αρσενικών ουσιαστικών', ['κατηγορία'] = 'Καταλήξεις αρσενικών ουσιαστικών', ['inlangu'] = true}
pos['κατάληξη επιρρημάτων'] = { ['link'] = 'Κατάληξη επιρρημάτων', ['κατηγορία'] = 'Καταλήξεις επιρρημάτων', ['inlangu'] = true}
pos['κατάληξη θηλυκών ουσιαστικών'] = { ['link'] = 'Κατάληξη θηλυκών ουσιαστικών', ['κατηγορία'] = 'Καταλήξεις θηλυκών ουσιαστικών', ['inlangu'] = true}
pos['κατάληξη ουδέτερων ουσιαστικών'] = { ['link'] = 'Κατάληξη ουδέτερων ουσιαστικών', ['κατηγορία'] = 'Καταλήξεις ουδέτερων ουσιαστικών', ['inlangu'] = true}
pos['κατάληξη ρημάτων'] = { ['link'] = 'Κατάληξη ρημάτων', ['κατηγορία'] = 'Καταλήξεις ρημάτων', ['inlangu'] = true}
pos['κύριο όνομα'] = { ['link'] = 'Κύριο όνομα', ['κατηγορία'] = 'Κύρια ονόματα', ['inlangu'] = true}
pos['μεταγραφή'] = { ['link'] = '[[μεταγραφή|Μεταγραφή]]', ['κατηγορία'] = 'Μεταγραφές', ['inlangu'] = false}
pos['μετοχή'] = { ['link'] = '[[μετοχή|Μετοχή]]', ['κατηγορία'] = 'Μετοχές', ['inlangu'] = true}
pos['μόριο'] = { ['link'] = '[[μόριο|Μόριο]]', ['κατηγορία'] = 'Μόρια', ['inlangu'] = true}
pos['μορφή αντωνυμίας'] = { ['link'] = '[[αντωνυμία|Κλιτή μορφή αντωνυμίας]]', ['κατηγορία'] = 'Κλιτές μορφές αντωνυμιών', ['inlangu'] = false}
pos['μορφή αριθμητικού'] = { ['link'] = '[[αριθμητικό|Κλιτή μορφή αριθμητικού]]', ['κατηγορία'] = 'Κλιτές μορφές αριθμητικών', ['inlangu'] = false}
pos['μορφή άρθρου'] = { ['link'] = '[[άρθρο|Κλιτή μορφή άρθρου]]', ['κατηγορία'] = 'Κλιτές μορφές άρθρων', ['inlangu'] = false}
pos['μορφή γερουνδιακού'] = { ['link'] = '[[γερουνδιακό|Κλιτή μορφή γερουνδιακού]]', ['κατηγορία'] = 'Κλιτές μορφές γερουνδιακών', ['inlangu'] = false}
pos['μορφή επιθέτου'] = { ['link'] = '[[επίθετο|Κλιτή μορφή επιθέτου]]', ['κατηγορία'] = 'Κλιτές μορφές επιθέτων', ['inlangu'] = false}
pos['μορφή επιρρήματος'] = { ['link'] = '[[επίρρημα|Κλιτή μορφή επιρρήματος]]', ['κατηγορία'] = 'Κλιτές μορφές επιρρημάτων', ['inlangu'] = false}
pos['μορφή κυρίου ονόματος'] = { ['link'] = 'Κλιτή μορφή κυρίου ονόματος', ['κατηγορία'] = 'Κλιτές μορφές κυρίων ονομάτων', ['inlangu'] = false}
pos['μορφή μετοχής'] = { ['link'] = '[[μετοχή|Κλιτή μορφή μετοχής]]', ['κατηγορία'] = 'Κλιτές μορφές μετοχών', ['inlangu'] = false}
pos['μορφή ουσιαστικού'] = { ['link'] = '[[ουσιαστικό|Κλιτή μορφή ουσιαστικού]]', ['κατηγορία'] = 'Κλιτές μορφές ουσιαστικών', ['inlangu'] = false}
pos['μορφή πολυλεκτικού όρου'] = { ['link'] = 'Κλιτή μορφή πολυλεκτικού όρου', ['κατηγορία'] = 'Κλιτές μορφές πολυλεκτικών όρων', ['inlangu'] = false}
pos['μορφή ρήματος'] = { ['link'] = '[[ρήμα|Ρηματικός τύπος]]', ['κατηγορία'] = 'Ρηματικοί τύποι', ['inlangu'] = false}
pos['ουσιαστικό'] = { ['link'] = '[[ουσιαστικό|Ουσιαστικό]]', ['κατηγορία'] = 'Ουσιαστικά', ['inlangu'] = true}
pos['παροιμία'] = { ['link'] = '[[παροιμία|Παροιμία]]', ['κατηγορία'] = 'Παροιμίες', ['inlangu'] = true}
pos['πολυλεκτικός όρος'] = { ['link'] = 'Πολυλεκτικός όρος', ['κατηγορία'] = 'Πολυλεκτικοί όροι', ['inlangu'] = true}
pos['πρόθεση'] = { ['link'] = '[[πρόθεση|Πρόθεση]]', ['κατηγορία'] = 'Προθέσεις', ['inlangu'] = true}
pos['προθετική έκφραση'] = { ['link'] = 'Προθετική έκφραση', ['κατηγορία'] = 'Προθετικές εκφράσεις', ['inlangu'] = true}
pos['πρόθημα'] = { ['link'] = '[[πρόθημα|Πρόθημα]]', ['κατηγορία'] = 'Προθήματα', ['inlangu'] = true}
pos['πρόσφυμα'] = { ['link'] = '[[πρόσφυμα|Πρόσφυμα]]', ['κατηγορία'] = 'Προσφύματα', ['inlangu'] = true}
pos['ρήμα'] = { ['link'] = '[[ρήμα|Ρήμα]]', ['κατηγορία'] = 'Ρήματα', ['inlangu'] = true}
pos['ρηματική έκφραση'] = { ['link'] = 'Ρηματική έκφραση', ['κατηγορία'] = 'Ρηματικές εκφράσεις', ['inlangu'] = true}
pos['ρίζα'] = { ['link'] = '[[ρίζα|Ρίζα]]', ['κατηγορία'] = 'Ρίζες λέξεων', ['inlangu'] = true}
pos['σουπίνο'] = { ['link'] = '[[Παράρτημα:Γραμματική_Λατινικής_Γλώσσας#Σουπίνο|Σουπίνο]]', ['κατηγορία'] = 'Σουπίνα', ['inlangu'] = false}
pos['συγχώνευση'] = { ['link'] = '[[συγχώνευση|Συγχώνευση]]', ['κατηγορία'] = 'Συγχωνεύσεις', ['inlangu'] = true}
pos['σύμβολο'] = { ['link'] = '[[σύμβολο|Σύμβολο]]', ['κατηγορία'] = 'Σύμβολα', ['inlangu'] = true}
pos['συνδεσμική έκφραση'] = { ['link'] = '[[συνδεσμική έκφραση|Συνδεσμική έκφραση]]', ['κατηγορία'] = 'Συνδεσμικές εκφράσεις', ['inlangu'] = true}
pos['σύνδεσμος'] = { ['link'] = '[[σύνδεσμος|Σύνδεσμος]]', ['κατηγορία'] = 'Σύνδεσμοι', ['inlangu'] = true}
pos['συντομομορφή'] = { ['link'] = '[[συντομομορφή|Συντομομορφή]]', ['κατηγορία'] = 'Συντομομορφές', ['inlangu'] = true}
pos['φράση'] = { ['link'] = '[[Παράρτημα:Βιβλίο φράσεων|Φράση]]', ['κατηγορία'] = 'Βιβλίο φράσεων', ['inlangu'] = false}
pos['χαρακτήρας'] = { ['link'] = '[[χαρακτήρας|Χαρακτήρας]]', ['κατηγορία'] = 'Χαρακτήρες', ['inlangu'] = true}


--η κύρια συνάρτηση που θα χρησιμοποιηθεί στο Πρότυπο
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 = ''
	--αν δεν υπάρχει κάτι καταχωρισμένο στον πίνακα εδώ
	--για το συγκεκριμένο μέρος του λόγου
    if not exeikati(pos[meros]['κατηγορία']) then
    	return errorhere('Το μέρος του λόγου δεν υπάρχει στον πίνακα.')	
    end
    --βάλε την εικόνα, την αρχή του span και το μέρος του λόγου
    local output = '[[Αρχείο:Open book 01.svg|30px]]<span class="partofspeech"> ' .. pos[meros]['link']
    --αν έχει αρίθμηση βάλε και ένα κενό συν τον αριθμό
    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
    if lang == '' or languages[lang] == nil then
        return pos[meros]['link']..'[[Κατηγορία:Σελίδες με σφάλμα στον κωδικό γλώσσας]]'
	--Δεν δόθηκε κωδικός γλώσσας ή δεν είναι καταχωρισμένος στον πίνακα.')	
	else
		--δημιουργία κρυφού χαρακτηριστικού γλώσσας για παραπομπές
		-- π.χ. [[όνομαλήμματος#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		
        output = output  .. '[[Κατηγορία:' .. pos[meros]['κατηγορία'] .. ' (' .. languages[lang].name .. ')' .. kleida .. ']]'
        if pos[meros]['inlangu'] then
            output = output  .. '[[Κατηγορία:' .. languages[lang].cat .. kleida .. ']]'
        end
    end
    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 για την αυτόματη κατηγοριοποίηση. Για τα ελληνικά, γαλλικά, γερμανικά, ισπανικά, πολωνικά, πορτογαλικά, ρουμανικά, τουρκικά, εσπεράντο η κλείδα υπολογίζεται αυτόματα και δεν χρειάζεται να γραφεί ως παράμετρος εδώ.
|-
|valign="top"| <tt>αριθ</tt> || ''Προαιρετική.'' Αρίθμηση που χρησιμοποιείται για να ξεχωρίζονται τα ομόγραφα που ανήκουν στην ίδια κατηγορία αλλά έχουν τελείως διαφορετικές ετυμολογίες και έννοιες. Γράφονται ξεχωριστά ως εξής: <tt><nowiki>{{]=] .. prot .. [=[|xx|αριθ=1}}</nowiki></tt> και <tt><nowiki>{{]=] ..prot.. [=[|xx|αριθ=2}}</nowiki></tt>, όπου xx ο κωδικός της γλώσσας.
|}]=]
    return frame:preprocess(output)
end

return p