Module:BibAbrTest
Apparence
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. | 1 ms. | 1 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 ) .. ' ' .. 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 .. ' ' .. 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