Modul:Překlady

Dobrý den, přišli jste sem a hledáte význam slova Modul:Překlady. V DICTIOUS najdete nejen všechny slovníkové významy slova Modul:Překlady, ale dozvíte se také o jeho etymologii, charakteristice a o tom, jak se říká Modul:Překlady v jednotném a množném čísle. Vše, co potřebujete vědět o slově Modul:Překlady, najdete zde. Definice slova Modul:Překlady vám pomůže být přesnější a správnější při mluvení nebo psaní textů. Znalost definiceModul:Překlady, stejně jako definice dalších slov, obohacuje vaši slovní zásobu a poskytuje vám více a lepších jazykových zdrojů.

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

-- @brief
--  Backend for {{Překlady}}.
-- 
-- @details
--  Generates the list of translations.
-- 
-- @author
--  ]
local _module = {}
----------------------------------------


local Collation = require( "Module:Collation" )
local Error = require( "Module:Error" )
local Language = require( "Module:Language" )
local Maintenance = require( "Module:Maintenance" )


-- @brief
--  Creates the iterator for table sorted by its keys.
-- 
-- @param
--  tbl Table to be sorted
-- 
-- @return
--  Iterator Table sorted by keys
function kpairs( tbl )
	local keys = {}
	
	for key in pairs( tbl ) do
		table.insert( keys, key )
	end
	table.sort( keys, Collation.sortCompare )
	
	local i = 0
	local iterator = function ()
		i = i + 1
		if keys == nil then
			return nil
		else
			return keys, tbl]
		end
	end
	
	return iterator
end


-- @brief
--  Write the list of translations.
-- 
-- @param
--  frame The current frame object
-- 
-- @return
--  Preprocessed wikitext
function _module.print( frame )
	
	local output = ""
	local templateArgs = frame:getParent().args
	local argCount = 0
	
	local errorData = { template = "Překlady" }
	local maintenance = Maintenance( "Překlady" )
	local html
	
	local descriptionArg = "význam"
	local description = mw.text.trim( templateArgs or "" )
	local translations = {}
	local errors = {}
	
	local numberOfMeanings = 0
	local numberedTranslations = 0
	local unnumberedTranslations = 0
	local pageText = mw.title.getCurrentTitle():getContent()
	
	html = mw.html.create( "div" )
		:attr( "class", "translations" )
	
	if pageText then
		local czechSection = mw.ustring.match( pageText, "== *čeština *==(.-)\n==" ) or mw.ustring.match( pageText, "== *čeština *==(.*)" )
		if czechSection then
			for h3 in mw.ustring.gmatch( czechSection, "\n===-===\n" ) do
				h3 = mw.ustring.gsub( h3, "()", "%%%1" )
				local s3 = "\n" .. ( mw.ustring.match( czechSection, h3 .. "(.-)\n===" ) or mw.ustring.match( czechSection, h3 .. "(.-)$" ) )
				local meanings, translations = mw.ustring.match( s3, "\n==== ?význam ?====\n(.-)\n==== ?překlady ?====\n(.*)" )
				if meanings then
					numberOfMeanings = 0
					numberedTranslations = 0
					unnumberedTranslations = 0
					meanings = "\n" .. ( mw.ustring.match( meanings, "(.-)\n====" ) or mw.ustring.match( meanings, "(.-)$" ) )
					for _ in mw.ustring.gmatch( meanings, "\n#" ) do
						numberOfMeanings = numberOfMeanings + 1
					end
					translations = "\n" .. ( mw.ustring.match( translations, "(.-)\n====" ) or mw.ustring.match( translations, "(.-)$" ) )
					for _ in mw.ustring.gmatch( translations, "\n# *{{%s*Překlady" ) do
						numberedTranslations = numberedTranslations + 1
					end
					for _ in mw.ustring.gmatch( translations, "\n{{%s*Překlady" ) do
						unnumberedTranslations = unnumberedTranslations + 1
					end
					if unnumberedTranslations > 0 or numberOfMeanings ~= numberedTranslations then
						maintenance:setCategory( "Sjednotit počet překladů s počtem významů", true )
						html:wikitext( maintenance:getCategory() )
					end
				end
			end
		end
	end
	
	for param, value in pairs( templateArgs ) do
		argCount = argCount + 1
	end
	
	if argCount == 0 or (argCount == 1 and templateArgs == "") then
		html:wikitext( "—]" )
	else
		
		if description == "" then
			if unnumberedTranslations > 0 then
				maintenance:valueMissing({ name = descriptionArg, desc = "překlad pro který význam" })
				html:wikitext( maintenance:getText() )
			end
		else
			html
				:tag( "dfn" )
					:wikitext( mw.text.nowiki( description ) )
					:done()
		end
		
		for langTag, translation in pairs( templateArgs ) do
			local langName = Language:getFullName( langTag )
			if langName then
				local langAttrs = string.gmatch( translation, ' lang="(+)"' )
				local isWrongLangAttr = false
				for langAttr in langAttrs do
					if langAttr ~= langTag then
						isWrongLangAttr = true
					end
				end
				if isWrongLangAttr then
					errorData.text = "Chybně vložený překlad (<nowiki>{{</nowiki>]<nowiki>}}</nowiki> obsahuje jiný kód jazyka)."
					errorData.category = "Opravit vložení překladu"
					translation = translation .. Error.getText( errorData )
				end
				translations = translation
			elseif langTag ~= descriptionArg then
				errors = translation
			end
		end
		
		html = html:tag( "ul" )
		
		for langName, translation in kpairs( translations ) do
			if not string.match( translation, "class=\"translation%-item\"" ) then
				errorData.text = "Chybně vložený překlad (neobsahuje <nowiki>{{</nowiki>]<nowiki>}}</nowiki>)."
				errorData.category = "Opravit vložení překladu"
				translation = translation .. Error.getText( errorData )
			end
			html:tag( "li" )
				:attr( "style", "page-break-inside: avoid;" )   -- Diskuse_k_šabloně:P#rozdělení_složeného_slova_do_více_odstavců
				:wikitext(
					langName,
					": ",
					translation
				)
				:done()
		end
		
		for langTag, translation in kpairs( errors ) do
			errorData.text = "Neznámý kód jazyka „" .. langTag .."“."
			errorData.category = "Zkontrolovat jazyk"
			html:tag( "li" )
				:wikitext( Error.getText( errorData ) )
				:done()
		end
		
	end
	
	html = html:allDone()
	
	output = frame:preprocess( tostring( html ) )
	
	return output
	
end


----------------------------------------
return _module