Modul:Priznaky
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