Dokumentácia pre tento modul môže byť vytvorená na Modul:Priznaky/Dokumentácia

-- @brief
--  Handling of distinctive features.
-- 
-- @details
--  Handles the following templates:
--  * {{Príznaky}}
--  * {{Príznak2}}
-- 
-- @remark
--  Requires Priznaky/zoznam
-- 
-- @author
--  [[meta:User:Danny B.]]
local Priznaky = {
    
	zoznam = require "Module:Priznaky/zoznam"
	
}
----------------------------------------

local Languages = require "Module:Languages"


-- @brief
--  Returns the array of numbered arguments passed to the template.
-- 
-- @param
--  args Table of all arguments
-- @return
--  Array of numbered arguments
-- 
-- @warning
--  Returns only the first contiguous chunk of numbered args starting with 1,
--  so for {{Template|arg1|arg2|10=arg10}} it returns only { "arg1", "arg2" }
function numberedArgs( args )
	
	local output = {}
	local index = 1
	
	while args[index] ~= nil do
		
		local arg = args[index]
		
		output[index] = arg
		
		index = index + 1
		
	end
	
	return output
	
end


-- @brief
--  Creates the list of distinctive features
-- 
-- @param
--  frame The current frame object (table of arguments)
-- @param
--  categories Return also categories or not
-- @return
--  Preprocessed wikitext
function createList( frame, categories )
	
	local output = ""
	local parentFrame = frame:getParent()
	local templateArgs = parentFrame.args
	local numberedArgs = numberedArgs( templateArgs )
	
	local jazyk = templateArgs.jazyk or templateArgs[1]
	
	
	if ( not templateArgs["jazyk"] and categories ) then
		table.remove( numberedArgs, 1 )
	end
	
	for index, value in ipairs( numberedArgs ) do
		if ( index ~= 1 ) then
			output = output .. ", "
		end
		if ( Priznaky.zoznam[value] ) then
			output = output .. Priznaky.zoznam[value].popis
			if ( categories and Priznaky.zoznam[value].kategoria ) then
				if (type (Priznaky.zoznam[value].kategoria_bez_jazyka) == "nil" or not Priznaky.zoznam[value].kategoria_bez_jazyka) then
					output = output .. "[[Category:" .. Priznaky.zoznam[value].kategoria .. "/" .. Languages[jazyk].name .. "]]"
				elseif Priznaky.zoznam[value].kategoria_bez_jazyka then
					output = output .. "[[Category:" .. Priznaky.zoznam[value].kategoria .. "]]"
				end
			end
		else
			lang, region = value:match( "^(%l%l%l?)%-(%u%u)$" )
			if ( lang ) then
				if ( Languages[lang] ) then
					if ( Languages[lang].regions and Languages[lang].regions[region] ) then
						output = output .. Languages[lang].regions[region] .. " " .. Languages[lang].name .. "[[Kategória:Monitoring:Príznak" .. ( categories and "y" or "2" ) .. " obsahujúci označenie jazyka]]"
					else
						output = output .. '{{Chyba|text=Neznámy príznak (neznámy region "' .. region .. '" jazyka "' .. lang .. '")|kategória=Opraviť neznámy príznak}}'
					end
				else
					output = output .. '{{Chyba|text=Neznámy príznak (neznámy jazyk "' .. lang .. '")|kategória=Opraviť neznámy príznak}}'
				end
			else
				output = output .. '{{Chyba|text=Neznámy [[Modul:Priznaky/zoznam|príznak]] "' .. value .. '"|kategória=Opraviť neznámy príznak}}'
			end
		end
	end
	
	output = '<span class="priznaky">(' .. output .. ')</span>'
	
	output = frame:preprocess( output )
	
	return output
	
end


----------------------------------------
-- Interface
----------------------------------------


-- @brief
--  Write the list of distinctive features without categories.
-- 
-- @param
--  frame The current frame object (table of arguments)
function Priznaky.vypisBezKategorii( frame )
	
	return createList( frame, false )
	
end


-- @brief
--  Write the list of distinctive features with categories.
-- 
-- @param
--  frame The current frame object (table of arguments)
function Priznaky.vypisSKategoriami( frame )
	
	return createList( frame, true )
	
end


----------------------------------------
return Priznaky