Module:BibAbrTest

La bibliothèque libre.
Documentation du module [voir] [modifier] [purger]
La documentation de ce module Scribunto écrit en Lua est incluse depuis sa sous-page de documentation.

Ce module est destiné aux tests personnels de ElioPrrl ; prière de ne pas le modifier ni le supprimer.

Il demandera la suppression quand ses tests seront terminés.

Série A

Abréviations sans espace insécable :

1. s. l. n. d.
2. s. l. n. d.
3. s. l. n. d.
4. S. L. N. D.
5. S. l. n. d.
6. s. l. n. d.
7. S. l. n. d.
8. S. L. N. D.
Série B

Textes en ordre <abréviation>-<nombre> :

1. ms. A et B fo 1-2
2. ms. 1 fo 1
3. ms. 1 fo 1
4. MS. 1 FO 1
5. Ms. 1 Fo 1
6. ms. 1 fo 1
7. Ms. 1 Fo 1
8. MS. 1 FO 1
Série C

Textes en ordre <nombre>-<abréviation> (inversé) :

1. ms. fo
2. 10 ms. 120 fo
3. 10 ms. 120 fo
4. 10 MS. 120 FO
5. 10 Ms. 120 Fo
6. 10 ms. 120 fo
7. 10 Ms. 120 Fo
8. 10 MS. 120 FO
local p = {}


function p.pluriel ( szMot )
	szFin1 = mw.ustring.sub(szMot, -1)
	szFin2 = mw.ustring.sub(szMot, -2)
	if szFin1 == "s" or szFin1 == "z" or szFin1 == "x" then
		return szMot
	elseif szFin2 == "al" then
		return mw.ustring.sub(szMot, 1, -3) .. "aux"
	else
		return szMot .. "s"
	end
end


function p.abr( params, args )
	-- CAS DES ABRÉVIATIONS SANS ESPACE INSÉCABLE
	
		--Arguments de #invoke
	local szModeleUn    = params.un    --partie de l'abréviation sur la ligne de base
	local szModeleDeux  = params.deux  --partie de l'abréviation en exposant
	local szModeleTrois = params.trois --abréviation développée en toutes lettres
	if args.expl ~= nil then           --abréviation développée alternative (si précisée dans le modèle)
		szModeleTrois = args.expl
	end
	local szModeleV     = params.v     --style donné en bloc dans #invoke
	
		--Variables qui serviront à l'écriture du HTML
	local szOuvrante = ''        --balise ouvrante (sans les chevrons)
	local szFermante = '</abbr>' --balise fermante (avec les chevrons)
	local szSup      = ''        --exposant
	local szStyle    = ''        --propriétés de style
	local szLang     = ''        --langue : priorité donnée à celle précisée dans le modèle
	if params.lang ~= nil then szLang = params.lang end
	if args.lang   ~= nil then szLang = args.lang   end
	local szCode     = ''        --code final
	
	--je supprime de la liste des arguments du modèle les arguments déjà traités (pour éviter les homonymies)
	params['un']    = nil
	params['deux']  = nil
	params['trois'] = nil
	params['lang']  = nil
	params['v']     = nil
	args['expl']    = nil
	args['lang']    = nil
	
	--booléens signalant la présence d'un modificateur
	local bModeleIt  = false  -- italiques
    local bModeleSc  = false  -- petites capitales
    local bModeleCap = false  -- première lettre en majuscule
    local bModeleLc  = false  -- tout en minuscules
    local bModeleUc  = false  -- tout en majuscules

	--cas où il manque un paramètre
	if szModeleUn == nil or szModeleDeux == nil or szModeleTrois == nil then
		szCode = '<b style="color: red; font-weight: bold;">Erreur : veuillez bien préciser les trois paramètres obligatoires <code>un=, deux=, trois=</code>.</b>'
	else 
		-- par défaut : balise ouvrante avec seulement le titre, aucun style, contenu tel que passé en argument, balise szFermanteante
		szOuvrante = 'abbr title="' .. szModeleTrois .. '"'
		-- on fait la liste des modificateurs donnés en bloc
		if szModeleV ~= nil then
    		if string.find( szModeleV, 'it' )  then szModeleV = string.gsub( szModeleV, 'it', '' )  ; bModeleIt  = true ; end
    		if string.find( szModeleV, 'sc' )  then szModeleV = string.gsub( szModeleV, 'sc', '' )  ; bModeleSc  = true ; end
    		if string.find( szModeleV, 'cap' ) then szModeleV = string.gsub( szModeleV, 'cap', '' ) ; bModeleCap = true ; end
			if string.find( szModeleV, 'lc' )  then szModeleV = string.gsub( szModeleV, 'lc', '' )  ; bModeleLc  = true ; end
			if string.find( szModeleV, 'uc' )  then szModeleV = string.gsub( szModeleV, 'uc', '' )  ; bModeleUc  = true ; end
		end
		-- on fait la liste des modificateurs donnés en arguments séparés
		-- (dans cet ordre, pour que le modèle puisse annuler les modificateurs du modèle si besoin est : par exemple rm qui annule it)
		for nom, valeur in pairs(args) do
			if valeur == 'it'  then bModeleIt  = true  end
			if valeur == 'rm'  then bModeleIt  = false end
			if valeur == 'sc'  then bModeleSc  = true  end
			if valeur == 'cap' then bModeleCap = true  end
			if valeur == 'lc'  then bModeleLc  = true  end
			if valeur == 'uc'  then bModeleUc  = true  end
		end
		
		-- application des modifications
		if bModeleIt  then szStyle = szStyle .. 'font-style: italic; ' end
		if bModeleSc  then szStyle = szStyle .. 'font-variant: small-caps; ' end
		if bModeleCap then szModeleUn = mw.ustring.upper(mw.ustring.sub(szModeleUn, 1, 1)) .. mw.ustring.sub(szModeleUn, 2) end
		if bModeleLc  then szModeleUn = mw.ustring.lower(szModeleUn) end
		if bModeleUc  then szModeleUn = mw.ustring.upper(szModeleUn) ; szModeleDeux = mw.ustring.upper(szModeleDeux) end
		
		-- si une propriété CSS a été ajoutée, l'englober dans style=""
		if szStyle ~= '' then szStyle = ' style="' .. szStyle .. '"' end
		-- si une langue a été précisée
		if szLang ~= nil then szLang  = ' class="lang-' .. szLang .. '" lang="' .. szLang .. '"' end
		-- si un exposant a été entré, générer la balise sup
		if szModeleDeux ~= nil then szSup = '<sup style="font-size: 70%;">' .. szModeleDeux .. '</sup>' end
		-- génération du code
		szCode = '<' .. szOuvrante .. szLang .. szStyle .. '>' .. szModeleUn .. szSup .. szFermante
	end
	return szCode
end



function p.abrApres( params, args )
	-- CAS DES ABRÉVIATIONS SUIVIES PAR UNE ESPACE INSÉCABLE
	
		--Variables qui dépendent des arguments du modèle
	local szTexte    = ''        --texte après espace insécable
	if args[1] ~= nil then szTexte = args[1] end
	--je supprime de la liste des arguments du modèle les arguments déjà traités
	args[1]      = nil
	
	-- génération du code : résultat de abr + espace insécable + texte
	szCode = p.abr( params, args ) .. '&nbsp;' .. szTexte
	return szCode
end



function p.abrAvant( params, args )
	-- CAS DES ABRÉVIATIONS PRÉCÉDÉES PAR UNE ESPACE INSÉCABLE
	
		--Variables qui dépendent des arguments du modèle
	local szTexte    = ''        --texte après espace insécable
	if args[1] ~= nil then szTexte = args[1] end
	--je supprime de la liste des arguments du modèle les arguments déjà traités
	args[1]      = nil
	
	-- génération du code : résultat de abr + espace insécable + texte
	szCode = szTexte .. '&nbsp;' .. p.abr( params, args )
	return szCode
end



function p.abrSans( frame )
	-- FONCTION À APPELER POUR LES ABRÉVIATIONS SANS ARGUMENT (abréviations sans espace insécable)
	
	--Arguments du module (#invoke) ; copie (à la main) nécessaire, la liste est sinon affecté par référence
	local Params = {}
	for i, v in pairs(frame.args) do
		Params[i] = v
	end
	
	--Arguments dans l'appel du modèle ; idem
	local Args = {}
	for i, v in pairs(mw.getCurrentFrame():getParent().args) do
		Args[i] = v
	end
	
	return p.abr( Params, Args )
	
end



function p.abrAvantOuApres( frame )
	-- FONCTION À APPELER POUR LES ABRÉVIATIONS DEMANDANT UN ARGUMENT (abréviations avec espace insécable)
	
	--Arguments du module (#invoke) ; copie (à la main) nécessaire, la liste est sinon affecté par référence
	local Params = {}
	for i, v in pairs(frame.args) do
		Params[i] = v
	end
	
	--Arguments dans l'appel du modèle ; idem
	local Args = {}
	for i, v in pairs(mw.getCurrentFrame():getParent().args) do
		Args[i] = v
	end
	
	for nom, valeur in pairs(Args) do
		if valeur == 'inv' then
			Params.trois = p.pluriel( Params.trois )
			return p.abrAvant( Params, Args )
		end
	end
	
	return p.abrApres( Params, Args )
	
end


return p