Module:Abréviation

Révision datée du 13 janvier 2023 à 21:59 par Kharmitch (discussion | contributions)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Documentation[voir] [modifier] [purger]

Ce module prend en charge les abréviations et leurs manipulations.

Ajouter une abréviation modifier

Il suffit d'ajouter une paire de clé-valeur à la collection ABBR.

  • La clé correspond à l'abréviation et doit être écrit en lettres capitales.
  • La valeur correspond au libellé associé à l'abréviation.

Merci d'ajouter la paire dans l'ordre alphabétique des clés.

Présentation des fonctions modifier

  • contains() : Permet de vérifier l'existence d'une abréviation.
  • name() : Retourne le libellé d'une abréviation.
  • categories() : Retourne une chaîne de caractères composée des catégories formées des abréviations et du sujet fournis par l'utilisateur.
  • infobox_links() : Utilisée pour les en-têtes d'infobox, cette fonction retourne une chaîne de caractères composée de liens formés des abréviations et du sujet fournis par l'utilisateur.
local p = {}

------------------------------------------------------
--           Référentiel des abréviations           --
--  Merci de ne pas dupliquer ces données ailleurs  --
-- Si un nouveau jeu sort (\o/), merci de l"ajouter --
------------------------------------------------------

local ABBR = {
    SF      = "Starfield",
    WIKI    = "Starfield Wiki",
}

------------------------------------------------------

-- Vérifie l'existence d'une abréviation
function p.contains(args)
	return ABBR[(args[1] or ""):upper()] ~= nil
end

-- Retourne le mot complet d"une abréviation
function p.name(args)
	return ABBR[(args[1] or ""):upper()]
end

-- Génère une liste de catégories à partir de plusieurs abréviations.
-- Si on souhaite par exemple générer les catégories Lieu pour SF et WIKI,
-- alors la fonction générera la chaîne suivante.
--   `[[Catégorie:Lieu de Starfield]][[Catégorie:Lieu de Starfield Wiki]]`
-- Il est possible de définir une clé de tri.
function p.categories(args)
	local abbrs = args[1]
	local subject = args[2] or ""
	local sortkey = args[3]

	-- On a au moins besoin des abréviations sinon on ne
	-- génère rien.
	if abbrs == nil then
		return nil
	end

	-- Les abréviations sont séparées par des virgules
	-- On coupe la chaîne pour obtenir une liste.
	abbrs = mw.text.split(abbrs, "%s*,%s*")

	local categories = ""

	local prefix = ""
	if subject then
		prefix = subject .. " de "
	end

	if sortkey then
		sortkey = "|" .. sortkey
	else
		sortkey = ""
	end

	for i, abbr in ipairs(abbrs) do
		local name = ABBR[abbr:upper()]

		if name ~= nil then
			category = string.format(
				"[[Catégorie:%s%s%s]]",
				prefix,
				name,
				sortkey
			)
			categories = categories .. category
		end
	end

	if categories == "" then
		return nil
	end

	return categories
end

-- Génère une liste de lien à partir de plusieurs abréviations.
-- Utilisée dans l'en-tête des infobox.
-- Si on souhaite par exemple générer les catégories Lieu pour SF et WIKI,
-- alors la fonction formera une chaîne de ce genre.
--   `[[Lieu de Starfield]], [[Lieu de Starfield Wiki|Starfield Wiki]]`
-- Il est possible de définir le séparateur de liens.
function p.infobox_links(args)
	local abbrs = args[1]
	local link = args["lien"] or args[2]
	local subject   = args["sujet"] or args[3]
	local separator = args["séparateur"] or ", "

	-- On a au moins besoin des abréviations sinon on ne
	-- génère rien.
	if abbrs == nil then
		return nil
	end

	-- Les abréviations sont séparées par des virgules
	-- On coupe la chaîne pour obtenir une liste.
	abbrs = mw.text.split(abbrs, "%s*,%s*")

	local link_prefix = ""
	if link then
		link_prefix = link .. " de "
	end

	local subject_prefix = ""
	if subject then
		subject_prefix = subject .. " de "
	end
	
	local links = ""
	local j = 0

	for i, abbr in ipairs(abbrs) do
		local name = ABBR[abbr:upper()]

		if name ~= nil then
			j = j + 1
			
			if j == 1 then
				links = string.format(
					"[[%s%s|%s''%s'']]",
					link_prefix,
					name,
					subject_prefix,
					name
				)
			else
				links = string.format(
					"%s%s[[%s%s|''%s'']]",
					links,
					separator,
					link_prefix,
					name,
					name
				)
			end
		end
	end

	if links == "" then 
		return nil
	end
	
	return links
end

return p