Module:Biblio/Articllo
La documentation pour ce module peut être créée à Module:Biblio/Articllo/doc
local Articllo = { }
local Comon = require( 'Module:Biblio/Comon' )
local References = require( 'Module:Biblio/Rèferences' )
local Nombro2texto = require( 'Module:Nombro2tèxto' )
local TableBuilder = require( 'Module:TableBuilder' )
local Lengoua = require( 'Module:Lengoua' )
function Articllo.articllo( args )
-- La table wiki va recevoir tout les petits bouts de texte, et sera concaténtée à la fin.
-- Elle utilise la metat-table de TableBuilder, permettant d'utiliser les fonctions de la
-- librairy table comme des mèthodes. minsert permet d'insérer plusieurs élément en une
-- seule fois en, ignorant les paramètre nil.
local wiki = TableBuilder.new()
-- validArg renvoi le premier paramètre non vide, ou nil s'ils sont tous vides.
-- Seul les noms des paramètres doivent être transmis à la fonction.
local validArg = function ( ... ) return Comon.validTextArg( args, ... ) or false end
-- table servant à la catégorisation
args.categ = {}
-- clarification paramètre nécessaire pour les COinS
args['pèriodico'] = validArg( 'pèriodico', 'reviua', 'jornal' )
args.titro = validArg( 'titro', 'title' )
args.passajo = validArg( 'pâges', 'pâge', 'passâjo', 'p.', 'pp.' )
args['format èlèctronico'] = args.format
args.format = false
-- span initial (id) et libellé
local spanInitial, spanFinal = Comon.spanInitial ( args, validArg )
wiki.minsert( spanInitial, Comon.libela( args ) )
-- indication de langue
local endicLengoua, codeLengoua = Comon.endicacionDeLengoua ( args, validArg )
if endicLengoua and endicLengoua ~= '' then
wiki.minsert( endicLengoua, ' ' )
end
-- Liste des auteurs et de leur responsabilités (principale et secondaire)
local otor = validArg( 'nom1', 'nom', 'ôtor1', 'ôtor', 'ôtors', 'ôtor enstitucionâl', 'last1', 'last', 'author1', 'author' )
if otor then
if validArg( 'ôtors' ) then
wiki.minsert( args.otors )
if validArg( 'et al.', 'et alii' ) then
wiki.minsert( " ''<abbr class=\"abbr\" title=\"et alii (et d’ôtros)\">et al.</abbr>''" )
end
else
wiki.minsert( Comon.responsabilitatPrincipala( args, validArg ) )
end
wiki.minsert( Comon.responsabilitatSecondera( args, validArg ), ', ' )
args.categ.otor = validArg( 'ôtor', 'ôtors', 'author1', 'author', 1, 2, 3, 4 )
args.categ.cotor = validArg( 'côtors', 'côtor', 'coauthors' )
end
-- titre, sous-titre
if args.titro then
if codeLengoua then
local dir = Lengoua.direccionLengoua( codeLengoua )
if dir == 'rtl' then dir = '" dir="rtl'
else dir = nil
end
wiki.minsert( '<span lang="', codeLengoua, dir, '">')
end
local titro, sotTitro = args.titro, validArg( 'sot-titro' )
if sotTitro then
titro = titro .. ' : ' .. sotTitro
end
titro = Comon.fusionTextoLim( titro, args['lim titro'], args.categ )
wiki.minsert( '« <cite style="font-style:normal;">', titro, '</cite> »', codeLengoua and '</span>' )
else
args.categ.titro = true
wiki.minsert( '<span class="error">[[Modèlo:Articllo|{{Articllo}}]] : paramètro « <code>titro</code> » entrovâblo</span>' )
end
-- Titre original et traducteur
local traduccionTitro = validArg( 'traduccion titro', 'titro originâl' )
if traduccionTitro and traduccionTitro ~= args.titro then
wiki.minsert( ' [« ', traduccionTitro, ' »]' )
end
if not otor then
local responsabilitatSecondera = Comon.responsabilitatSecondera( args, validArg )
if responsabilitatSecondera then
wiki.minsert( ' ', responsabilitatSecondera )
end
end
-- Nature du document et établissement (pour les thèses...)
local natura = validArg( 'natura d’ora', 'natura ôvra' )
if natura then
wiki.minsert( ' (', natura, ')')
end
local etablissement = validArg( 'ètablissement' )
if etablissement then
wiki.minsert( ', ', etablissement )
end
-- périodique
local periodico = validArg( 'pèriodico' )
if periodico then
-- on applique le code langue spécifique ou celui de l'article
local lengouaPeriodico = validArg( 'lengoua pèriodico' )
if lengouaPeriodico then
lengouaPeriodico = Lengoua.codeLengoua2( lengouaPeriodico )
end
lengouaPeriodico = lengouaPeriodico or codeLengoua
if lengouaPeriodico and lengouaPeriodico ~= 'frp' then
periodico = Lengoua.lang{ lengouaPeriodico, periodico }
end
local periodicoEtLim = Comon.fusionTextoLim( periodico, args['lim pèriodico'], args.categ )
if Lengoua.pasLatin( periodico ) then
-- caractères non latin donc police droite
wiki.minsert( ', ', periodicoEtLim )
else
-- le titre et son lien éventuel son affichés en italique
wiki.minsert( ', <i>', periodicoEtLim, '</i>' )
end
else
args.categ.periodico = true
if args.categ.titro then
wiki.minsert( ', <span class="error">paramètro « <code>pèriodico</code> » entrovâblo</span>' )
else
wiki.minsert( ', <span class="error">[[Modèlo:Articllo|{{Articllo}}]] : paramètro « <code>pèriodico</code> » entrovâblo</span>' )
end
end
-- références : lieu, éditeur
local endret = validArg( 'endrêt', 'endrêt èdicion', 'location' )
if endret then
wiki.minsert( ', ', endret )
end
local editor = validArg( 'èditor', 'publisher' )
if editor then
local limEditor = validArg( 'lim èditor' )
wiki.minsert( ', ', Comon.fusionTextoLim( editor, limEditor, args.categ ) )
end
-- références : série, volume
local seria = validArg( 'sèria' )
if seria then
if tonumber( seria ) then
wiki.minsert( ', ', Nombro2texto.ordinal( seria, true ), ' sèria' )
else
if string.match( seria, '<sup>éma</sup>$') then
wiki.minsert( ', ', seria, ' sèria' )
else
wiki.minsert( ', sèria ', seria )
end
end
end
local volumo = validArg( 'volumo', 'vol' )
if volumo then
wiki.minsert( ', ', Comon.vol, volumo )
end
local levro = validArg( 'lévro' )
if levro then
wiki.minsert( ', ', Comon.levro, levro )
end
local titroVolumo = validArg( 'titro volumo', 'titro vol' )
if titroVolumo then
if codeLengoua then
wiki.minsert( ' ', Lengoua.lang{ codeLengoua, '« ' .. titroVolumo .. ' »' } )
else
wiki.minsert( ' « ', titroVolumo, ' »' )
end
end
-- références : n° du périodique et titre du n° et date de publication
local numero = validArg( 'numerô', 'no', 'issue' )
if numero then
if mw.ustring.match( numero, "^%d+ ?[-–—/,;àe]t? ?%d" ) then
wiki.minsert( ', ', Comon.numeros, numero )
else
wiki.minsert( ', ', Comon.numero, numero )
end
end
local titroNumero = validArg( 'titro numerô', 'titro no' )
if titroNumero then
if codeLengoua then
wiki.minsert( ' ', Lengoua.lang{ codeLengoua, '« ' .. titroNumero .. ' »' } )
else
wiki.minsert( ' « ', titroNumero, ' »' )
end
end
if validArg( 'an', 'dâta', 'year' ) then
args.mes = validArg( 'mês', 'sêson' )
wiki.minsert( ',‎ ', Comon.enscripcionData( args ) )
-- le &lrm est une marque de texte gauche à droite, utile si le texte qui précède est en droite à gauche (arabe, hébreux...)
else
args.categ.date = true
if args.categ.titro or args.categ.periodico then
wiki.minsert( ', <span class="error">paramètro « <code>dâta</code> » entrovâblo</span>' )
else
wiki.minsert( ', <span class="error">[[Modèlo:Articllo|{{Articllo}}]] : paramètro « <code>dâta</code> » entrovâblo</span>' )
end
end
-- format livre
local format = validArg( 'format lévro' )
if format then
wiki.minsert( ', ', format )
end
-- pages
local page = validArg( 'passâjo', 'pâges', 'pâge', 'p.', 'pp.' )
if page then
if string.match ( page, '^[%dIVXL]' ) then
wiki.minsert( ', ', Comon.page, page )
else
wiki.minsert( ', ', page )
end
end
local noArticllo = validArg( 'numerô articllo' )
if noArticllo then
wiki.minsert( ', articllo ', Comon.numero, noArticllo )
end
-- lien vers l'article en ligne (isbn, issn, pmid, doi, lire en ligne, résumé...)
-- on n'affiche "consulté le" que si "lire en ligne" ou "url" est fourni
local liereEnLegne = validArg( 'liére en legne' )
local parametroUrl = validArg('url')
if liereEnLegne then
wiki.minsert( References.afichajoLimsDeDefor( args, validArg, true, true ) )
elseif parametroUrl then
wiki.minsert( References.afichajoLimsDeDefor( args, validArg, true, true ) )
else
wiki.minsert( References.afichajoLimsDeDefor( args, validArg, true, false ) )
end
-- ajout des méthadonnées COinS (ContextObjects in Spans)
wiki.minsert( Comon.COinS( args, validArg, 'articllo' ) )
-- fin du span (id) et de la description de l'ouvrage
wiki.minsert( spanFinal )
-- plume "Ouvrage utilisé pour la rédaction de l'article"
if validArg( 'ploma' ) then
local patternPonct = '[,.;:!?]$'
local ponctuacion = wiki.concat():gsub( '%b<>', '' ):match( patternPonct )
if not ponctuacion then
wiki.minsert( '.' )
end
wiki.minsert( Comon.ploma )
end
-- citation et commentaire de cet ouvrage
local citacion = validArg( 'èxtrèt', 'quote', 'citation' )
if citacion then
if codeLengoua then
citacion = Lengoua.lang{ codeLengoua, citacion }
end
wiki.minsert( ' :<blockquote>« ', citacion, ' »</blockquote>' )
end
wiki.minsert( Comon.comentero( args ) )
if mw.title.getCurrentTitle().namespace == 0 then
wiki.minsert(
args.categ.cotor and '[[Catègorie:Recension temporèra por lo modèlo Articllo|cotor]]',
args.categ.lengoua and '[[Catègorie:Pâge du modèlo Articllo presentent na fôta|lengoua]]',
args.categ.titro and '[[Catègorie:Pâge du modèlo Articllo presentent na fôta|titro]]',
args.categ.periodico and '[[Catègorie:Pâge du modèlo Articllo presentent na fôta|periodico]]',
args.categ.date and '[[Catègorie:Pâge du modèlo Articllo presentent na fôta|dâta]]',
args.categ.limDeDefor and '[[Catègorie:Pâge du modèlo Articllo presentent na fôta|de defor]]',
args.categ.isbnInvalid and '[[Catègorie:Pâge avouéc ISBN envalida]]',
args.categ.issnInvalid and '[[Catègorie:Pâge avouéc ISSN envalida]]'
)
if codeLengoua then
if Lengoua.direccionLengoua( codeLengoua ) == 'rtl' then
wiki.minsert( '[[Catègorie:Recension temporèra por lo modèlo Articllo|rtl]]' )
end
end
end
return wiki.concat()
end
return Articllo