Aller au contenu

Module:P.

De Rishon
Version datée du 22 novembre 2024 à 09:04 par wp>Od1n (ajout support des chiffres romains, car il y a des utilisations avec ceux-ci, et pour réduire la différence avec le code de Module:Biblio/Commun.formatePassage ; voir à propos cette discussion)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)

La documentation pour ce module peut être créée à Module:P./doc

local p = {}

local function abbr( texte, signification )
	return '<abbr class="abbr" title="' .. signification .. '">' .. texte .. '</abbr>'
end

local function nobr( texte )
	return '<span class="nowrap">' .. texte .. '</span>'
end

function p.main( frame )
	local value = frame.args[ 'optionalValue' ]

	-- utilisation sans paramètre
	if value == '' then
		return abbr( 'p.', 'page(s)' ) .. '&nbsp;'
	end

	-- code inspiré de [[Module:Biblio/Commun]].formatePassage (mais adapté et simplifié)

	-- nombre entier
	if value:match( '^[%dIVXLCDM]+$' ) then -- uniquement des chiffres (arabes ou romains)
		return abbr( 'p.', 'page' ) .. '&nbsp;' .. value -- nobr() serait inutile ici

	-- intervalle
	elseif value:match( '^%d+ ?%- ?%d+$' ) -- "tiret du 6" (noter que c'est un caractère à escaper dans les regexes Lua)
	or value:match( '^%d+ ?– ?%d+$' ) -- tiret moyen (attention, c'est un caractère sur 3 octets)
	or value:match( '^[IVXLCDM]+ ?%- ?[IVXLCDM]+$' ) -- même chose avec les nombres romains
	or value:match( '^[IVXLCDM]+ ?– ?[IVXLCDM]+$' ) then
		return abbr( 'p.', 'pages' ) .. '&nbsp;'.. nobr( value ) -- nobr() pour que la valeur soit insécable

	-- toute autre valeur
	else
		return abbr( 'p.', 'page(s)' ) .. '&nbsp;' .. value -- pas de nobr(), au cas où la valeur serait longue
	end
end

return p