Module:λίστα1
Module:λίστα1 >> Module:λίστα1/τεκμηρίωση
Το Module:λίστα1 καλείται από το Πρότυπο:λίστα1
Creates the 'search' template {{λίστα1}}
--[=[
2019.10.18. Sarri.greek, 2022. fixed hyphens etc.
Module:λίστα1 is called by [[Πρότυπο:λίστα1]] {{#invoke:λίστα1|main|getword=<word>|langname=<language code>}}
Used in prefix Categories like [[:Κατηγορία:Λέξεις με πρόθημα ψυχο- (νέα ελληνικά)]]
Used elsewhere, as search tool. e.g. at [[ζήλος]]
]=]--
local export = {}
local languages = mw.loadData("Module:Languages")
-- call with languages[language_iso].somekeyword
local m_page = require("Module:page") -- splits page's name in parts
-- call with m_page.nameofthefunctionneeded(xx)
local m_lang = require("Module:lang") -- for language expressions
local m_utilities = require("Module:User:Sarri.greek/utilities") -- to take off diacritics with sortkey
-- also required [[Module:auto cat/param-prefix-id]] for multisense prefixes like [[:Κατηγορία:Λέξεις με πρόθημα ανθ- από το αντι- (νέα ελληνικά)]]
-- =========== Errors -- use it with writing: if blahblah then return errorhere('xxxxxx') end
errorhere = function(errstring)
return '<div class="error">' .. errstring .. '</div>[[Κατηγορία:Σελίδες με σφάλματα στο πρότυπο λίστα1]]'
end
function export.main(frame)
local args = frame:getParent().args -- make a Template
-- local args = frame.args -- invoke
local cat_title = m_page.pagetitle(xx) -- Title WITHOUT (textinparenthesis)
local cat_parenthesis = m_page.pageparenthesis(xx) -- (textinparenthesis)
local cat_lang = m_page.pagelang(xx) or '' -- textofparenthesis without brackets = the language name in the category titles
local get_word = args[1] or ''
local search_word = ''
local lang_iso = args[2] or '' -- language code (el, en)
-- e.g. languages[langname].cat (Κατηγορία:Αγγλική γλώσσα) / languages[langname].name (αγγλικά)
local show_word = args[3] or '' -- alt with no diacritics άλλη εμφάνιση λέξης (με διακριτικά, πνεύματα, τόνους)
local search_only = args['exact'] or args['ακριβώς'] or args['only'] or args['μόνο'] or ''
-- =================================== any page except: Κατηγορία:... με πρόθημα
-- if NOT in a Category like [[:Κατηγορία:Λέξεις με πρόθημα ψυχο- (νέα ελληνικά)]]
-- editor must write the parameters
if cat_parenthesis == '' or cat_parenthesis == nil then
if args[1] ~= '' and args[1] ~= nil then
get_word = args[1] -- does not matter if with hyphen or not
-- search is done always without (see below)
else
return errorhere('Συμπληρώστε έναν όρο - Please write a term.')
end
if args[2] ~= '' and args[2] ~= nil then
lang_iso = args[2]
else
lang_iso = 'el' -- default νέα ελληνικά
end
-- =================================== a prefix Cat page
-- if in a Category like [[:Κατηγορία:Λέξεις με πρόθημα ψυχο- (νέα ελληνικά)]]
-- or [[:Κατηγορία:Λέξεις με πρόθημα un-]] (multi languages)
-- get: getword=the prefix in title, langname= el from title
else -- yes parenthesis
if mw.ustring.find(cat_title, 'πρόθημα') then
if args[1] ~= '' and args[1] ~= nil
then -- allow choice
get_word = args[1] -- with hyphen or without
-- PREFIXES prefix params (see [[Module:auto cat]], AFFIXES prefix section)
-- affix. prefix multisense.
-- Κατηγορία:Λέξεις με πρόθημα ανθ- από το αντι- (νέα ελληνικά)
-- Κατηγορία:Λέξεις με πρόθημα α, προτακτικό (νέα ελληνικά)
-- For manual editing from page, write |1=
-- for param affix+id (for prefix) ALL PARAMETERS at:
else
if mw.ustring.find(cat_title, "από το") or mw.ustring.find(cat_title, ",")
then
-- εδώ, υπάρχει λίστα με όλα τα πολύσημα προθήματα
-- here is a list with all available multisense id of prefixes
require ('Module:auto cat/param-prefix-id').param (args)
get_word = other_cat_id
show_word = other_cat_id
-- Κατηγορία:Λέξεις με πρόθημα άν- από το στερητικό α- (νέα ελληνικά)
-- Κατηγορία:Λέξεις με πρόθημα ἅ-, αθροιστικό (αρχαία ελληνικά)
else
-- Κατηγορίες προθημάτων
if mw.ustring.find(cat_title, 'Λέξεις με πρόθημα')
and not mw.ustring.find(cat_title, "από το")
and not mw.ustring.find(cat_title, ",")
then
get_word_hyphen = mw.ustring.sub(mw.ustring.match(cat_title, "Λέξεις με πρόθημα (.*)"), 1, -1) -- this is affix+hyphen
-- FIX the prefix of the title to use in search
if mw.ustring.sub(mw.ustring.match(cat_title, "Λέξεις με πρόθημα (.*)"), 1, -1):sub(-1) == '-'
then
get_word = mw.ustring.sub(mw.ustring.match(cat_title, "Λέξεις με πρόθημα (.*)"), 1, -2) -- no hyphen
end
elseif mw.ustring.find(cat_title, 'Τοπωνύμια με πρόθημα') then
get_word_hyphen = mw.ustring.sub(mw.ustring.match(cat_title, "Τοπωνύμια με πρόθημα (.*)"), 1, -1)
if mw.ustring.sub(mw.ustring.match(cat_title, "Τοπωνύμια με πρόθημα (.*)"), 1, -1):sub(-1) == '-'
then
get_word = mw.ustring.sub(mw.ustring.match(cat_title, "Τοπωνύμια με πρόθημα (.*)"), 1, -2)
end
elseif mw.ustring.find(cat_title, 'Ανδρικά ονόματα με πρόθημα') then
get_word_hyphen = mw.ustring.sub(mw.ustring.match(cat_title, "Ανδρικά ονόματα με πρόθημα (.*)"), 1, -1)
if mw.ustring.sub(mw.ustring.match(cat_title, "Ανδρικά ονόματα με πρόθημα (.*)"), 1, -1):sub(-1) == '-'
then
get_word = mw.ustring.sub(mw.ustring.match(cat_title, "Ανδρικά ονόματα με πρόθημα (.*)"), 1, -2)
end
elseif mw.ustring.find(cat_title, 'Γυναικεία ονόματα με πρόθημα') then
get_word_hyphen = mw.ustring.sub(mw.ustring.match(cat_title, "Γυναικεία ονόματα με πρόθημα (.*)"), 1, -1)
if mw.ustring.sub(mw.ustring.match(cat_title, "Γυναικεία ονόματα με πρόθημα (.*)"), 1, -1):sub(-1) == '-'
then
get_word = mw.ustring.sub(mw.ustring.match(cat_title, "Γυναικεία ονόματα με πρόθημα (.*)"), 1, -2)
end
elseif mw.ustring.find(cat_title, 'Ανδρικά επώνυμα με πρόθημα') then
get_word_hyphen = mw.ustring.sub(mw.ustring.match(cat_title, "Ανδρικά επώνυμα με πρόθημα (.*)"), 1, -1)
if mw.ustring.sub(mw.ustring.match(cat_title, "Ανδρικά επώνυμα με πρόθημα (.*)"), 1, -1):sub(-1) == '-'
then
get_word = mw.ustring.sub(mw.ustring.match(cat_title, "Ανδρικά επώνυμα με πρόθημα (.*)"), 1, -2)
end
elseif mw.ustring.find(cat_title, 'Γυναικεία επώνυμα με πρόθημα') then
get_word_hyphen = mw.ustring.sub(mw.ustring.match(cat_title, "Γυναικεία επώνυμα με πρόθημα (.*)"), 1, -1)
if mw.ustring.sub(mw.ustring.match(cat_title, "Γυναικεία επώνυμα με πρόθημα (.*)"), 1, -1):sub(-1) == '-'
then
get_word = mw.ustring.sub(mw.ustring.match(cat_title, "Γυναικεία επώνυμα με πρόθημα (.*)"), 1, -2)
end
elseif mw.ustring.find(cat_title, 'Επώνυμα κοινού γένους με πρόθημα') then
get_word_hyphen = mw.ustring.sub(mw.ustring.match(cat_title, "Επώνυμα κοινού γένους με πρόθημα (.*)"), 1, -1)
if mw.ustring.sub(mw.ustring.match(cat_title, "Επώνυμα κοινού γένους με πρόθημα (.*)"), 1, -1):sub(-1) == '-'
then
get_word = mw.ustring.sub(mw.ustring.match(cat_title, "Επώνυμα κοινού γένους με πρόθημα (.*)"), 1, -2)
end
end -- close if από το multisense
end -- close Cat προθημάτων
end -- close if πρόθημα is found
-- get language iso code from its name in the title if there is one
if cat_lang ~= '' and cat_lang ~= nil then -- the name of the language in the parenthesis
lang_iso = m_lang.langname_to_langiso(cat_lang) -- DO NOT USE the function name_to_iso, it will not work here
else
if args[2] ~= '' and args[2] ~= nil then
lang_iso = args[2]
else
lang_iso = 'el'
end
end
end -- close if Cat or other page
end -- close if cat_parenthesis
-- =================================== output
-- FIX search_word without diacritics
-- the get_word is already trimmed. It has no hyphen.
-- no diacrities allowed at search e.g. [[:Κατηγορία:Λέξεις με πρόθημα ἱππό- (αρχαία ελληνικά)]]
search_word = m_utilities.sortkey(mw.ustring.sub(get_word)) -- sortkey has no diacritics
-- FIX show_word: it is showm always with one hyphen and its diacritics
-- (although the search is done for all spellings)
-- the hyphen is written out at the ouput.
-- if editor writes it with a hyphen, it is deleted
if args[3] ~= '' and args[3] ~= nil then
if mw.ustring.find(show_word, '-$') -- a hyphen, $ = at the end
then
show_word = mw.ustring.sub(args[3],1,-2) -- stop at 2nd letter from end: no hyphen
else
show_word = show_word
end
-- if editor does not write a show_word (param3)
else
if mw.ustring.find(get_word, '-$') -- a hyphen, $ = at the end
then
show_word = mw.ustring.sub(get_word,1,-2)
else
show_word = get_word
end
end
-- FIX language expressions for search
-- easy-type διευκολύνσεις:
if args[2] == 'αρχ' then lang_iso = 'grc' end
if args[2] == 'ελνστ' then lang_iso = 'grc-koi' end
if args[2] == 'μσν' then lang_iso = 'gkm' end
if languages[lang_iso] == nil then
output = "<span style='color:red'>Άκυρος κωδικός γλώσσας</span>[[Κατηγορία:Σελίδες με προβλήματα στο πρότυπο λίστα1]]"
else -- ok language
-- for .cat I need the space between the 2 words to be joined
-- e.g. Αγγλική γλώσσα to be Αγγλική_γλώσσα (or Αγγλική%20γλώσσα with %%20)
output = ': Πατώντας [https://el.wiktionary.org/w/index.php?title=Κατηγορία:'
.. languages[lang_iso].cat:gsub( " ", "_" ) .. '&from='
.. search_word .. '#mw-pages εδώ] θα δείτε όλες τις λέξεις του Βικιλεξικού που αρχίζουν με «'
.. show_word .. '-» (' .. languages[lang_iso].name .. ')'
end
-- precise search in INDEX
if args['exact'] == '1' or args['ακριβώς'] == '1' or args['only'] == '1' or args['μόνο'] == '1' then
output = ': Λέξεις [https://el.wiktionary.org/wiki/Ειδικό:ΌλεςΟιΣελίδες?from='
.. get_word .. '&to=&namespace=0 με «<b>' .. show_word .. '-</b>»] στο Βικιλεξικό'
end
return output
end -- close main function
return export