Modul:Priznaky

Z Wikislovníku
Skočit na navigaci Skočit na vyhledávání

Dokumentaci tohoto modulu lze vytvořit na stránce Nápověda:Modul:Priznaky

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

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.seznam[value] ) then
			output = output .. Priznaky.seznam[value].popis
			if ( categories and Priznaky.seznam[value].kategorie ) then
				if (type (Priznaky.seznam[value].kategorie_bez_jazyku) == "nil" or not Priznaky.seznam[value].kategorie_bez_jazyku) then
					output = output .. "[[Category:" .. Priznaky.seznam[value].kategorie .. "/" .. Languages[jazyk].name .. "]]"
				elseif Priznaky.seznam[value].kategorie_bez_jazyku then
					output = output .. "[[Category:" .. Priznaky.seznam[value].kategorie .. "]]"
				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 .. "[[Kategorie:Monitoring:Příznak" .. ( categories and "y" or "2" ) .. " obsahující označení jazyka]]"
					else
						output = output .. '{{Chyba|text=Neznámý příznak (neznámý region "' .. region .. '" jazyka "' .. lang .. '")|kategorie=Opravit neznámý příznak}}'
					end
				else
					output = output .. '{{Chyba|text=Neznámý příznak (neznámý jazyk "' .. lang .. '")|kategorie=Opravit neznámý příznak}}'
				end
			else
				output = output .. '{{Chyba|text=Neznámý [[Modul:Priznaky/seznam|příznak]] "' .. value .. '"|kategorie=Opravit neznámý pří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.vypisSKategoriemi( frame )
	
	return createList( frame, true )
	
end


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