La documentation pour ce module peut être créée à Module:régions/Documentation

m_bases = require('Module:bases')
m_lang = require('Module:langues')
m_table = require('Module:table')

local tree = mw.loadData('Module:régions/data')

local p = {}

function p.categorisation_region_interlangue(frame)
	local region = string.match(tostring(mw.title.getCurrentTitle()), "Catégorie:(.+)")
	local region_data = tree[region]
	if region_data ~= nil then
		local cs = region_data['description'] .. "\n"
		
		if region_data['super_categories'] ~= nil then
			cs = cs .. "[[Catégorie:" .. m_bases.ucfirst(region_data['super_categories']) .. "]]"
		end
	
		return cs
	else
		return "[[Catégorie:Wiktionnaire:Régions non définies]]"
	end
end

function p.categorisation_region(frame)
	local args = frame:getParent().args
	local lang_code = args[1] or nil
	
	local title = string.match(tostring(mw.title.getCurrentTitle()), "Catégorie:(.+)")
    local region, lang = string.match(title, "(.+) en (.+)")
	
    if c1 ~= nil and c2 ~= nil and lang ~= nil and m_lang.code_de_langue({args={lang}}) ~= '' and subject ~= nil then
        local cs = ""
        if tree[subject] ~= nil then
        	local det = nil
        	if tree[subject]['determiner'] == 'du ' then
        		det = 'le '
        	elseif tree[subject]['determiner'] == 'de la ' then
        		det = 'la '
        	elseif tree[subject]['determiner'] == 'des ' then
        		det = 'les '
        	elseif tree[subject]['determiner'] == 'de l’' then
        		det = 'l’'
        	end
        		
			cs = "Cette page liste les mots en [[" .. lang .. "]] en rapport avec " .. det .. "[[" .. subject .. "]].\n\n" .. tree[subject]['description'] .. "\n\n"
			if tree[subject]['template'] ~= nil then
				local lang_code = m_cdl.code_de_langue({args={lang}})
				local template = tree[subject]['template']
				local template_link = template	.. "|" .. template .. "]]|" .. lang_code
				cs = cs .. "Pour ajouter une entrée à cette catégorie, utilisez le modèle <code>{{[[Modèle:" .. template_link .. "}}</code>.\n"
			end
        	if tree[subject]['super_categories'] ~= nil then
				for k, v in pairs(tree[subject]['super_categories']) do
					if tree[v] ~= nil then
						cs = cs .. "[[Catégorie:Lexique en " .. lang .. " " .. tree[v]['determiner'] .. v .. "|".. subject .."]]"
					else
						cs = cs .. "[[Catégorie:Wiktionnaire:Lexiques avec lexique parent non défini]]"
					end
				end
			end
		else
			cs = "[[Catégorie:Wiktionnaire:Lexiques non définis]]"
		end
		
        return cs .. "[[Catégorie:"..c1.."]][[Catégorie:"..m_bases.ucfirst(c2).."]]"
    else
    	return "[[Catégorie:Wiktionnaire:Lexiques avec erreur]]"
    end
end

function p.lexique_nocat(frame)
	return p.lexique(frame, true)	
end

function p.lexique(frame, nocat)
	nocat = nocat or false
	
	-- Analyse des arguments
	local args = frame:getParent().args
	
	local tableLen = m_table.length(args)
	if nocat then
		if tableLen < 1 then
			return [[<span style="color:red">'''Veuillez saisir au moins un lexique !'''</span>]]
		end
	else
		if tableLen < 2 then
			return [[<span style="color:red">'''Veuillez saisir au moins un lexique et un code langue !'''</span>]]
		end
	end
	
	local lexicons = {}
	local last = nil
	
	for i, arg in ipairs(args) do
		if last ~= nil then
			table.insert(lexicons, last)
		end
		last = arg
	end
	
	local lang_code = nil
	local lang = nil
	
	if nocat then
		table.insert(lexicons, last)
	else
		lang_code = last
		lang = m_lang.get_nom(lang_code)
	end
	
	local text = "" 
	local cs = ""
	
	if not nocat and lang == nil then
		return [[<span style="color:red" title="Code langue saisi : ]] .. lang_code .. [[">'''Code langue inconnu !'''</span>]] .. "[[Catégorie:Wiktionnaire:Lexiques avec langue manquante]]"
	end 
	
	local filtered_lexicons = {}

	for i, lexicon in ipairs(lexicons) do
		if tree[lexicon] ~= nil then
			table.insert(filtered_lexicons, [[<span title="]] .. tree[lexicon]['description'] .. [[">'']] .. (not nocat and m_bases.ucfirst(lexicon) or lexicon) .. [[''</span>]])
			if tree[lexicon]['determiner'] ~= nil then
				if not nocat then
					cs = cs .. "[[Catégorie:Lexique en " .. lang .. " " .. tree[lexicon]['determiner'] .. lexicon .. "]]"
				end
			else
				cs = cs .. "[[Catégorie:Wiktionnaire:Lexiques avec déterminant inconnu]]"
			end
		else
			table.insert(filtered_lexicons, [[<span style="color:red" title="Lexique inexistant : ]] .. lexicon .. [[">'''Lexique inconnu !'''</span>]])
			cs = cs .. "[[Catégorie:Wiktionnaire:Lexiques avec nom inconnu]]"
		end
	end
	
	if next(filtered_lexicons) ~= nil then
		text ="(" .. table.concat(filtered_lexicons, ", ") .. ")"
	end

	return text .. cs
end

return p