Module:Biblio/Article
Apparence
La documentation pour ce module peut être créée à Module:Biblio/Article/doc
local Article = { }
local Commun = require( 'Module:Biblio/Commun' )
local References = require( 'Module:Biblio/Références' )
local Outils = require( 'Module:Outils' )
local TableBuilder = require( 'Module:TableBuilder' )
local Langue -- = require( 'Module:Langue' ) ne sera chargé que si nécessaire.
function Article.article( 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 Outils.validTextArg( args, ... ) or false end
-- variable servant à la catégorisation
local categLangue, categAuteur, categCoauteur, categTitre, categPeriodique, categDate
-- clarification paramètre nécéssaire pour les coins
args['périodique'] = validArg( 'périodique', 'revue', 'journal' )
args.titre = validArg( 'titre', 'title' )
args.passage = validArg( 'pages', 'page', 'passage', 'p.', 'pp.' )
-- span initial (id) et libelé
wiki.minsert( Commun.spanInitial ( args, validArg ) )
local libelle = validArg( 'libellé' )
if libelle then
wiki.minsert( '<small>[', libelle, ']</small> ' )
end
-- indication de langue
local indicLangue, codeLangue, categLangue = Commun.indicationDeLangue ( args, validArg )
if Outils.notEmpty( indicLangue ) then
wiki.minsert( indicLangue, ' ' )
end
if codeLangue then
Langue = require( 'Module:Langue' )
end
-- Liste des auteurs et de leur responsabilités (principale et secondaire)
if validArg( 'nom1', 'nom', 'auteur1', 'auteur', 'auteurs', 'last1', 'last', 'author1', 'author' ) then
if validArg( 'auteurs' ) then
wiki.minsert( args.auteurs )
else
wiki.minsert( Commun.responsabilitePrincipale( args, validArg ) )
end
wiki.minsert( Commun.responsabiliteSecondaire( args, validArg ), ', ' )
categAuteur = validArg( 'auteur', 'auteurs', 'author1', 'author', 1, 2, 3, 4 )
categCoauteur = validArg( 'coauteurs', 'coauteur', 'coauthors' )
end
-- titre, sous-titre
if args.titre then
if codeLangue then
local dir = Langue.directionLangue( codeLangue )
if dir == 'rtl' then dir = '" dir="rtl'
else dir = nil
end
wiki.minsert( '<span lang="', codeLangue, dir, '">')
end
wiki.minsert( '« <cite style="font-style:normal;">')
local lienTitre = validArg( 'lien titre' )
if lienTitre then
wiki.minsert( '[[', lienTitre, '|' )
end
wiki.minsert( args.titre )
local sousTitre = validArg( 'sous-titre' )
if sousTitre then
wiki.minsert( ' : ', sousTitre )
end
wiki.minsert( lienTitre and ']]' )
wiki.minsert( ' »</cite>', codeLangue and '</span>' )
else
categTitre = true
wiki.minsert( Outils.erreur( '[[Modèle:Article|{{Article}}]] : paramètre « <code>titre</code> » manquant' ) )
end
-- périodique
local periodique = validArg( 'périodique' )
if periodique then
-- on applique le code langue spécifique ou celui de l'article
local languePeriodique = validArg( 'langue périodique' )
if languePeriodique then
Langue = Langue or require( 'Module:Langue' )
languePeriodique = Langue.codeLangue2( languePeriodique )
end
languePeriodique = languePeriodique or codeLangue
if languePeriodique and languePeriodique ~= 'fr' then
periodique = Langue.lang{ languePeriodique, periodique }
end
-- le titre et son lien éventuel son affichés en italique
wiki.minsert( ', <i>' )
local lienPeriodique = validArg( 'lien périodique' )
if lienPeriodique then
wiki.minsert( '[[', lienPeriodique, '|', periodique, ']]' )
else
wiki.minsert( periodique )
end
wiki.minsert( '</i>' )
else
categPeriodique = true
if categTitre then
wiki.minsert( ', ', Outils.erreur( 'paramètre « <code>périodique</code> » manquant' ) )
else
wiki.minsert( ', ', Outils.erreur( '[[Modèle:Article|{{Article}}]] : paramètre « <code>périodique</code> » manquant' ) )
end
end
-- références : lieu, éditeur
local lieu = validArg( 'lieu', 'lieu édition', 'location' )
if lieu then
wiki.minsert( ', ', lieu )
end
local editeur = validArg( 'éditeur', 'publisher' )
if editeur then
local lienEditeur = validArg( 'lien éditeur' )
if lienEditeur then
wiki.minsert( ', [[', lienEditeur, '|', editeur, ']]' )
else
wiki.minsert( ', ', editeur )
end
end
-- références : série, volume
local serie = validArg( 'série' )
if serie then
if tonumber( serie ) then
wiki.minsert( ', ', Outils.ordinal( serie, true ), ' série' )
else
if string.match( serie, '<sup>e</sup>$') then
wiki.minsert( ', ', serie, ' série' )
else
wiki.minsert( ', série ', serie )
end
end
end
local volume = validArg( 'volume', 'vol' )
if volume then
wiki.minsert( ', ', Commun.vol, volume )
end
local tome = validArg( 'tome' )
if tome then
wiki.minsert( ', ', Commun.tome, tome )
end
local titreVolume = validArg( 'titre volume', 'titre vol' )
if titreVolume then
if codeLangue then
wiki.minsert( ' ', Langue.lang{ codeLangue, '« ' .. titreVolume .. ' »' } )
else
wiki.minsert( ' « ', titreVolume, ' »' )
end
end
-- références : n° du périodique et titre du n° et date de publication
local numero = validArg( 'numéro', 'no', 'issue' )
if numero then
wiki.minsert( ', ', Commun.numero, numero )
end
local titreNumero = validArg( 'titre numéro', 'titre no' )
if titreNumero then
if codeLangue then
wiki.minsert( ' ', Langue.lang{ codeLangue, '« ' .. titreNumero .. ' »' } )
else
wiki.minsert( ' « ', titreNumero, ' »' )
end
end
if validArg( 'année', 'date', 'year' ) then
args.mois = validArg( 'mois', 'saison' )
wiki.minsert( ',‎ ', Commun.inscriptionDate( 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
categDate = true
if categTitre or categPeriodique then
wiki.minsert( ', ', Outils.erreur( 'paramètre « <code>année</code> » ou « <code>date</code> » manquant' ) )
else
wiki.minsert( ', ', Outils.erreur( '[[Modèle:Article|{{Article}}]] : paramètre « <code>année</code> » ou « <code>date</code> » manquant' ) )
end
end
-- pages
local page = validArg( 'passage', 'pages', 'page', 'p.', 'pp.' )
if page then
if string.match ( page, '^[%dIVXL]' ) then
wiki.minsert( ', ', Commun.page, page )
else
wiki.minsert( ', ', page )
end
end
local noArticle = validArg( 'numéro article' )
if noArticle then
wiki.minsert( ', article ', Commun.numero, noArticle )
end
-- lien vers l'ouvrage en ligne
if validArg( 'url texte', 'url', 'issn', 'doi', 'pmid', 'résumé', 'ISSN', 'lire en ligne', 'isbn', 'texte', 'présentation en ligne', 'issn1', 'ISBN', 'oclc', 'PMID', 'pmcid', 'pmc', 'DOI', 'jstor', 'bibcode', 'math reviews', 'arxiv' ) then
local enligne = TableBuilder.new( )
enligne.minsert( References.isbn( args, validArg ), References.issn( args, validArg ) )
enligne.minsert(
References.oclc( validArg( 'oclc' ) ),
References.pmid( validArg( 'pmid', 'PMID' ) ),
References.pmcid ( validArg( 'pmcid', 'pmc' ) ),
References.doi( validArg( 'doi', 'DOI' ) ),
References.jstor( validArg( 'jstor' ) ),
References.bibcode( validArg( 'bibcode' ) ),
References.mathreviews( validArg( 'math reviews' ) ),
References.arxiv( validArg( 'arxiv' ) )
)
local resume = validArg( 'résumé', 'présentation en ligne' )
if resume then
enligne.insert( References.enLigne{
lien = resume,
texte = 'résumé',
} )
end
local url = validArg( 'url texte', 'url', 'lire en ligne', 'texte' )
if url then
enligne.insert(
References.enLigne{
lien = url,
texte = 'lire en ligne',
} .. ( References.indicationDeFormat( args.format ) or '' )
)
end
--[=[ consulté le n'est plus affiché, voir [[Discussion_modèle:Ouvrage#Évolution documentation]]
local consulteLe = validArg( 'consulté le', 'accessdate', 'consulté' )
if consulteLe then
enligne.insert( 'consulté le ' .. Outils.nobr( consulteLe ) )
end
]=]
wiki.minsert( ' <small>', mw.text.nowiki( '(' ), enligne.concat( ', ' ), ')</small>' )
end
-- ajout des méthadonnées COinS (ContextObjects in Spans)
wiki.minsert( Commun.COinS( args, validArg, 'article' ) )
-- fin du span (id) et de la description de l'ouvrage
wiki.minsert( '</span>' )
-- citation et commentaire de cet ouvrage
local citation = validArg( 'extrait', 'quote', 'citation' )
if citation then
wiki.minsert( ' :<blockquote>« ', citation, ' »</blockquote>' )
end
wiki.minsert( Commun.commentaire( args ) )
if mw.title.getCurrentTitle().namespace == 0 then
wiki.minsert(
categCoauteur and '[[Catégorie:Recension temporaire pour le modèle Article|coauteur]]',
categLangue and '[[Catégorie:Page du modèle Article comportant une erreur|langue]]',
categTitre and '[[Catégorie:Page du modèle Article comportant une erreur|titre]]',
categPeriodique and '[[Catégorie:Page du modèle Article comportant une erreur|périodique]]',
categDate and '[[Catégorie:Page du modèle Article comportant une erreur|date]]'
)
if citation and mw.ustring.sub( citation, 1, 1 ) == "«" then
wiki.minsert( '[[Catégorie:Recension temporaire pour le modèle Article|guillemet]]' )
end
if codeLangue then
Langue = Langue or require( 'Module:Langue' )
if Langue.directionLangue( codeLangue ) == 'rtl' then
wiki.minsert( '[[Catégorie:Recension temporaire pour le modèle Article|rtl]]' )
end
end
end
return wiki.concat()
end
return Article