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