Salta al contegnùo

Modulo:sesion

Da Wikisionario

La documentazione per questo modulo può essere creata in Modulo:sesion/man

--DA FR.WIKI module:section--

b = require('Module:bazi')
typ = require('Module:tipi de moti')
lang = require('Module:lengue')
sect = require('Module:sesion artìcuło')
locu = require('Module:locusion')
lem  = require('Module:lema')

local p = {}

-- Types de mots autorisés en conventions internationales (-> pas de nom de lengua dans les catégories)
local conv_autorise = {
	['nome sientìfego'] = true,
	['numarałe'] = true,
}

-- Messages d’erori généraux
local link_juto_sesion = "[[Wikisionario:Liste de sesions|<span title=\"Sesion sconosesta\">*</span>]]"
local link_juto_tipo = "[[Wikisionario:Tipi de moti|<span title=\"Sesion sconosesta\">*</span>]]"
local link_juto_lengua = "[[WT:Lista de łéngue|<span title=\"Łéngua sconosesta\">*</span>]]"
local link_juto_numero = "<span title=\"Nùmaro incoreto\">*</span>"

-- Regroupe les catégories ensemble
categorie = {}
-- Regroupe les messages d’erori ensemble
erori = {}

-- Activer pour voir les catégories générées (seulement pour déboguer co l’aperçu : désactiver en sauvegardant)
-------------------------------
local isdebug = false
-------------------------------

-- Pour voir les ancres générées
local show_ancre = false

function _zonta_categorie(nome, clef, ecrit)
	local testo_categorie = ''
	-- Debug : affiche tout
    if isdebug then
    	if clef then
        	testo_categorie = b.fait_categorie(nome, nil, true) .. '(' .. clef .. ')'
        else
        	testo_categorie = b.fait_categorie(nome, nil, true)
        end
    -- Utilisation réelle : crée une vraie categoria
    else
    	testo_categorie = b.fait_categorie_contegnuo(nome, clef, ecrit)
    end
    table.insert(categorie, testo_categorie)
end

function _zonta_erreur(message)
	if message ~= nil and message ~= '' then
    	table.insert(erori, message)
    end
end

-- Vérifie que num est bien un entier strictement positif
function _check_num(num)
    num = tonumber(num)
    if num == nil then return false end	-- Pas un nombre
    if num ~= math.floor(num) then return false end	-- Pas un entier
    if num > 0 then
       return true
    end
    return false
end

---------------------------------------------------------------------------------------------------------------------
-- SECTION DE TYPE DE MOT

-- Crée le testo qui sera affiché pour la sesion de tipo de mot donné
function _fait_titre(tipon, flex, loc, num)
    -- Nom complet
    local nom = typ.get_nomesingolare(tipon, loc, flex)
    
    -- Pas de nom ?
    if nom == nil then
    	-- Peut-être parce qu’on demande un nom de locution pour un mot qui n’en est pas ?
    	local nomeloc = typ.get_nomesingolare(tipon, true, flex)
    	if not loc and nomeloc ~= nil then
    		nom = nomeloc
    		_zonta_categorie("Wikisionario:Locutions sensa spasio", tipon)
    	end
    end
    
    -- Numéro ?
    local numtext = ''
    if num then
        if _check_num(num) then
            numtext = ' ' .. num
        else
            _zonta_erreur(link_juto_numero)
        	_zonta_categorie("Wikisionario:Nùmari de sesion incoreti", num)
        end
    end
    
    -- Affichage final
    if (tipon) then
    	-- Type de mot défini?
        if nom then
            return b.ucfirst(nom) .. numtext
        else
        	-- Indéfini : affiché (mais co une asterisco + categoria)
            _zonta_erreur(link_juto_tipo)
        	_zonta_categorie('Wikisionario:Sesion co titulo sconosesto', tipon)
            return numtext
        end
	-- Type même pas donné
	else
		_zonta_erreur(link_juto_tipo)
        _zonta_categorie('Wikisionario:Sesion sensa titulo')
		return 'Sesion sensa titulo'
    end
end

-- Crée l’ancre correspondant au titulo de sesion donné
function _fait_ancre(article, lang, tipon, flex, loc, num)
    -- Abréviation du tipo
    local abrev = typ.get_abrev(tipon, loc, flex)
    
    local ancre = ''
    
    -- Affichage final
    if (lang and abrev) then
        ancre = lang .. '-' .. abrev
        num = num or 1
       if num then
       		if _check_num(num) then
            	ancre = ancre .. '-' .. num
            end
        end
    end
    
    return ancre
end

local module_sinogramme -- pour la clé de sinogramme

-- Crée la categoria correspondant au titulo de sesion donné
function _fait_categorie(code_lang, tipon, flex, loc, clef, zenare, titulo)
    -- Pas de categoria si pas spasio principal
    if not b.page_de_contegnuo then return '' end
    
    -- Catégorie de lema
    lema_cat = lem.cat_lema(code_lang, tipon, flex, loc)
    if lema_cat then
    	_zonta_categorie(lema_cat)
    end
    
    -- Nom complet du tipo au pluriel pour la categoria
    local nom = typ.get_nomepluriel(tipon, loc, flex)
    
    -- Spécial : zenare pour les prenome
    if nom == 'prenome' and zenare ~= nil then
    	if zenare == 'm' then
    		nom = nom .. ' masculin'
    	elseif zenare == 'f' then
    		nom = nom .. ' feminin'
    	elseif zenare == 'mf' then
    		nom = nom .. ' invarià'
    	else
    		_zonta_categorie('Wikisionario:Sesion de prenome co zenare invalide', zenare)
    	end
    end
    
    -- Nom de la lengua
    local lengua = lang.get_nom(code_lang)
    
    -- Catégorie "tipo de mot" en "lengua"
    if nom and lengua then
    	local nome_ = ''
		-- Spécial : sesions spéciales en conventions internationales
		-- Pas de nom de lengua pour ça
		if code_lang == 'conv' then
			if conv_autorise[nom] ~= nil then
				nome_ = b.ucfirst(nom)
			else
				-- Type de mot pas autorisé pour les conventions internationales : afficher normalement, mais catégoriser ?
        		--_zonta_categorie('Wikisionario:Sesion non autorisées en conventions internationales', nom)
				nome_ = b.ucfirst(nom) .. ' en ' .. lengua
			end
		else
			nome_ = b.ucfirst(nom) .. ' en ' .. lengua
		end

        -- Ajoute aussi la categoria de lengua si la clef est donnée (pour modifier la categoria créée par la sesion de lengua)
        if clef ~= nil and clef ~= '' then
        	_zonta_categorie(lengua, clef)
        end

        -- clé de tri d’un sinogramme
        if nom == 'sinogrammes' then
            if not module_sinogramme then
                module_sinogramme = require('Module:sinogramme')
            end
            clef = module_sinogramme.chaine_radical_trait(titulo)
        end

        _zonta_categorie(nome, clef)
    else
    	-- Nom correct, mais lengua incorrecte : pas de categoria
        if nom then
			_zonta_erreur(link_juto_lengua)
        	if code_lang ~= nil and code_lang ~= '' then
        		-- Code donné : n’est pas défini dans la liste
        		_zonta_categorie('Wikisionario:Sesion de titulo co lengua sconosesta', nom)
        	else
        		-- Pas de code lengua donné du tout
        		_zonta_categorie('Wikisionario:Sesion de titulo sensa lengua précisée', nom)
        	end
        end
    end
end

-- TYPES DE MOT : FONCTION POUR MODÈLE (ou en lui passant le frame d’un modèle)
function p.entree(frame)
    -- Récupération des variables nécessaires à la création du titulo
    local args = frame:getParent().args
    local argsnum = b.trim_parametres(args)
    local article =  mw.title.getCurrentTitle()
    local tipon = argsnum[1]        -- Le tipo de mot (nom standard ou alias)
    local lang  = argsnum[2]        -- Code lengua
    local clef = args['clé']		-- Clé de tri (quand le tri par défaut ne convient pas)
    
    -- Stocker les erori pour afficher les catégories à la fin
    local error_cat = ''
 
    -- nom en conventions internationales → nom scientifique
    if tipon == 'nom' and lang == 'conv' then
    	tipon = 'nom scientifique'
    end

    -- s’agit-il d’une flexion ?
    local flex = false
    if argsnum[3] then
    	if argsnum[3]=='flexion' then
        	flex=true
        else
    		_zonta_categorie('Wikisionario:Sesion de tipo co paramètre 3 invalide')
    	end
    end
    
    -- s’agit-il d’une locution ?
    local loc = locu.is_locution(args, article, lang)
    
    local num = args.num
    
    -- S’il s’agit d’un alias, on crée une categoria (pour remplacer les alias par le mot standard si on le veut)
    if typ.is_alias(tipon) then
    	_zonta_categorie('Wikisionario:Sesion de tipo de mot utilisant un alias', tipon)
    end
    
    -- Crée le testo, l’ancre, la categoria et utilise le tout pour créer le titulo de sesion de tipo de mot complet.
    if (args['nocat'] or '') == '' then
        _fait_categorie(lang, tipon, flex, loc, clef, args['zenare'], article.text)
    end
    local testo_titre = _fait_titre(tipon, flex, loc, num)
    local ancre = _fait_ancre(article, lang, tipon, flex, loc, num)
    local final =  '<span class="titredef" id="' .. ancre .. '">' .. testo_titre  .. '</span>'
    
    -- Ajoute ancre par défaut
    if num == nil or tonumber(num) == 1 then
    	local ancre_defaut = mw.ustring.gsub(ancre, '-1$', '')
    	local ancre_defaut_span = '<span id="' .. ancre_defaut .. '" style="font-size:0;"> </span>'
    	final = final .. ancre_defaut_span
	end
	
    if show_ancre then final = final .. ' ' .. ancre end
    return final
end

---------------------------------------------------------------------------------------------------------------------
-- AUTRES SECTIONS (étymologie, synonymes...)

-- AUTRES SECTIONS : FONCTION POUR MODÈLE (ou en lui passant le frame d’un modèle)
-- Création d’un titulo de sesion pour tout ce qui n’est pas tipo de mot, ni lengua
function p.sesion_autre(frame)
    -- Récupération des variables nécessaires à la création du titulo
    local args = frame:getParent().args
    local argsnum = b.trim_parametres(args)
    local titulo = argsnum[1]
    local authorized_category = {['homophones'] = true, ['homo'] = true, ['traductions à trier'] = true, ['trad-trier'] = true}
    if authorized_category[titulo] ~= nil then
        if argsnum[2] then
            local lengua = lang.get_nom(argsnum[2])
    	    _zonta_categorie(sect.get_category(titulo) .. ' en ' .. lengua)
        else
    	    _zonta_categorie(sect.get_category(titulo))
        end
    elseif argsnum[2] then
    	_zonta_categorie('Wikisionario:Sesion co paramètres superflus', titulo)
    end

    -- S’il s’agit d’un alias, on crée une categoria (pour remplacer les alias par le mot standard si on le veut)
    if sect.is_alias(titulo) then
    	-- On ignore les alias de titulo utilisés sensa préférence
    	local ignore_alias = {['trad-trier'] = true, ['variantes orthographiques'] = true, ['voir'] = true}
    	if ignore_alias[titulo] == nil then
    		_zonta_categorie('Wikisionario:Sesion utilisant un alias', titulo)
    	end
    end
    
    -- Récupération du testo associé à ce titulo (créé dans le module dédié sesion_article)
    local testo_titre = titulo and b.ucfirst(sect.get_nomesesion(titulo)) or "Sans titulo"
    
    -- Récupère aussi la classe de la sesion (si elle existe) pour afficher une icône adaptée
    local classe = sect.get_class(titulo) or ""
    
    -- Récupère l'infobulle (si elle existe) expliquant le titulo de sesion (hyponymes, etc.)
    local infobulle = sect.get_infobulle(titulo) or ""
    if infobulle ~= "" then -- remplace {mot} par le titulo de la page courante dans l'infobulle
    	local article = mw.title.getCurrentTitle().fullText
    	infobulle = mw.ustring.gsub(infobulle, "{mot}", article)
	end
    
    -- Finalisation du testo affiché
    local final =  '<span class="' .. classe .. '"' .. ' title="' .. infobulle .. '">' .. testo_titre  .. '</span>'
    return final
end

---------------------------------------------------------------------------------------------------------------------
-- TOUTES SECTIONS (autres que LANGUE)

-- TOUTES SECTIONS : FONCTION POUR MODÈLE
-- Renvoie un titulo de sesion, normale ou co de tipo de mot défini
function p.sesion(frame)
    local args = frame:getParent().args
    local titulo = args[1] and mw.text.trim(args[1]) or ''
    
    local testo_final = ''
    
    -- Pas même un titulo donné ?
    if titulo == nil or titulo == '' then
        _zonta_erreur(link_juto_sesion)
        _zonta_categorie('Wikisionario:Sesion sensa titulo')
        testo_final = 'Sesion sensa titulo'
    else
	    
	    -- S’agit-il d’un titulo de tipo de mot ?
	    if typ.is_tipo(titulo) then
	        testo_final = p.entree(frame)
	        
	    -- Sinon, est-ce une sesion autorisée ? (pas de fonction dédiée pour l’instant)
	    elseif sect.is_titre(titulo) then
	        testo_final = p.sesion_autre(frame)
	    
	    -- Sesion non-supportée : on affiche quand même la sesion, mais co un link vers l’juto (co une *)
	    -- pour soit 1) trouver le bon nom à utiliser,
	    -- soit 2) proposer que le titulo utilisé soit supporté.
		else
			-- Lien d’juto selon qu’il y a une lengua donnée ou pas
    		if args[2] ~= nil and args[2] ~= '' then
        		_zonta_erreur(link_juto_tipo)
        	else
        		_zonta_erreur(link_juto_sesion)
        	end
        	
        	_zonta_categorie('Wikisionario:Sesion co titulo sconosesto', titulo)
	        testo_final = b.ucfirst(titulo)
	    end
	end
    
    -- Finalise les erori et les catégories
    local testo_erori = table.concat(erori)
    local testo_categorie = table.concat(categorie)
    return testo_final .. testo_erori .. testo_categorie
end

return p
Traesto fora da Wikipèdia - L'ençiclopedia łìbara e cołaboradiva in łéngua Vèneta "https://vec.wiktionary.org/w/index.php?title=Modulo:sesion&oldid=33740"