Module:categories

Définition, traduction, prononciation, anagramme et synonyme sur le dictionnaire libre Wiktionnaire.
Sauter à la navigation Sauter à la recherche
Ce module contient des fonctions pour la catégorisation automatique de différents contenus.
categorisation_lexique_interlangue( frame ) 
voir {{catégorisation_lexique_interlangue}}
categorisation_lexique( frame ) 
voir {{catégorisation_lexique}}
lexique_nocat( frame ) 
voir {{info lex}}
lexique( frame, nocat ) 
voir {{lexique}}. Le paramètre nocat est uniquement destiné à usage interne, notamment par lexique_nocat.
rimes( frame ) 
voir {{catégorisation rimes}}
tags( frame ) 
voir {{catégorisation mots-clés}}
tags_banner( frame ) 
{{mots-clés}}

info Documentation du Module:categories : v · d · m · h.


b = require('Module:bases')
rimes = require('Module:rimes')
cdl = require('Module:code de langue')
m_lang = require('Module:langues')

local tree = mw.loadData('Module:categories/data/lexiques')

local p = {}

function p.categorisation_lexique_interlangue(frame)
	local lexicon = string.match(tostring(mw.title.getCurrentTitle()), "Catégorie:(.+)")
	local lexicon_data = tree[b.lc(lexicon)] or tree[lexicon]
	if lexicon_data ~= nil then
		local cs = lexicon_data['description'] .. "\n"
		
		if lexicon_data['super_categories'] ~= nil then
			for k, v in pairs(lexicon_data['super_categories']) do
				cs = cs .. "[[Catégorie:" .. b.ucfirst(v) .. "]]"
			end
		end
	
		return cs .. "[[Catégorie:Lexiques]]"
	else
		return "[[Catégorie:Wiktionnaire:Lexiques non définis]]"
	end
end

function p.categorisation_lexique(frame)
    local title = string.match(tostring(mw.title.getCurrentTitle()), "Catégorie:(.+)")
    local c1, n = string.gsub(title, "Lexique en (.+) du (.+)", "Lexiques en %1|%2")
    local c2 = string.gsub(title, "Lexique en (.+) du (.+)", "%2|%1")
    local lang = string.match(title, "Lexique en (.+) d.+")
    local subject = string.match(title, "Lexique en .+ du (.+)")
    if n ~= 1 then
        c1, n = string.gsub(title, "Lexique en (.+) de la (.+)", "Lexiques en %1|%2")
        c2 = string.gsub(title, "Lexique en (.+) de la (.+)", "%2|%1")
    	subject = string.match(title, "Lexique en .+ de la (.+)")
        if n ~= 1 then
            c1, n = string.gsub(title, "Lexique en (.+) de l’(.+)", "Lexiques en %1|%2")
            c2 = string.gsub(title, "Lexique en (.+) de l’(.+)", "%2|%1")
    		subject = string.match(title, "Lexique en .+ de l’(.+)")
            if n ~= 1 then
                c1, n = string.gsub(title, "Lexique en (.+) des (.+)", "Lexiques en %1|%2")
                c2 = string.gsub(title, "Lexique en (.+) des (.+)", "%2|%1")
    			subject = string.match(title, "Lexique en .+ des (.+)")
            end
        end
    end

    if n == 1 then
        cs = ""
        if tree[subject] ~= nil then
			cs = tree[subject]['description'] .. "\n\n"
			if tree[subject]['template'] ~= nil then
				local lang_code = cdl.code_de_langue({args={lang}})
				local template = tree[subject]['template']
				local template_link = ""
				if type(template) == "string" then
					template_link = template	.. "|" .. template .. "]]|" .. lang_code
				else 
					template_link = template[1] .. "|" .. template[1] .. "]]|" .. lang_code .. "|" .. template[2]
				end
				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
					cs = cs .. "[[Catégorie:Lexique en " .. lang .. " " .. tree[v]['determiner'] .. v .. "|".. subject .."]]"
				end
			end
		else
			cs = "[[Catégorie:Wiktionnaire:Lexiques non définis]]"
		end
		
        return cs .. "[[Catégorie:"..c1.."]][[Catégorie:"..b.ucfirst(c2).."]]"
    end
end

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

function p.lexique(frame, nocat)
	nocat = nocat or false
	
	local args = frame:getParent().args
	
	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 = last
	local lang = m_lang.get_nom(lang_code)
	
	local text = "" 
	local cs = ""
	
	if lang == nil then
		return [[<span style="color:red" title="Code langue saisi : ]] .. lang_code .. [[">'''Erreur sur la langue !'''</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'] .. [[">'']] .. b.ucfirst(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

function p.rimes(frame)
  local title = mw.ustring.match(tostring(mw.title.getCurrentTitle()), "Catégorie:(.+)")
  local lang, pron = mw.ustring.gmatch(title, "Rimes en (.*) en \\(.*)\\")()
  
  local cat = "=== Voir aussi ===\n"
  cat = cat .. "* [[:Catégorie:Phonétique en français|Dictionnaire phonétique en français]]\n"
  cat = cat .. "* [[:Catégorie:Rimes en français|Dictionnaire de rimes en français]]\n"
  cat = cat .. "** [[Annexe:Rimes en français en \\" .. pron .. "\\]]\n"
  cat = cat .. "** [[Annexe:Rimes en français]]\n"

  if rimes.est_vocalique(pron) then
     local last = mw.ustring.sub(pron, -1)

    if last == mw.ustring.char(0x303) then
      last = mw.ustring.sub(pron, -2)
    end
    
    if pron == last then
      cat = cat .. "[[Catégorie:Rimes vocaliques en " .. lang .. "|" .. pron .. "]]" 
    else
      cat = cat .. "[[Catégorie:Rimes en " .. lang .. " en \\" .. last .. "\\|" .. pron .. "]]"
    end
  else
    cat = cat .. "[[Catégorie:Rimes consonantiques en " .. lang .. "|" .. pron .. "]]"   
  end
  
  return cat
  
end

function p.tags(frame)
    local tag = string.match(tostring(mw.title.getCurrentTitle()), "Catégorie:Mots[-]clés/(.+)")

    local text = "Cette catégorie liste toutes les pages traitant du thème «&nbsp; " .. tag .. "&nbsp; ».\n\n"
    text = text .. "Pour accéder à plus de thèmes, consultez [[:Catégorie:Mots-clés|cette catégorie]].\n"
    text = text .. "[[Catégorie:Mots-clés|" .. tag .. "]]\n"
    text = text .. "__HIDDENCAT__"
    
    return text
end

function p.tags_banner(frame)
  local text = "<div class=\"bandeau-niveau-detail\" style=\"display: block; font-size: 0.85em; border: 1px gray solid; border-width: 1px 0; padding: 2px 4px; margin-top: -5px;\">Mots-clés : "
  
  local args = frame:getParent().args
  local tags = {}
  for i, tag in ipairs(args) do
    local nom = b.lc(tag)
    tags[i] = "[[:Catégorie:Mots-clés/" .. nom .. "|" .. nom .. "]][[Catégorie:Mots-clés/"..nom.."]]"
  end
  
  text = text .. table.concat(tags, "<span style=\"white-space:nowrap\"> '''·'''</span> ")
  text = text .. "</div>"
  
  return text
end

return p