Module:Biblio/Article
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, ... ) 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.' )
-- COinS, id et libelé
wiki.minsert( Commun.COinS( args, validArg, 'article' ) )
wiki.minsert( Commun.spanInitial ( args, validArg ) )
local libelle = validArg( 'libellé' )
if libelle then
wiki.minsert( '[', libelle, '] ' )
end
-- indication de langue local indicLangue, codeLangue, categLangue = Commun.indicationDeLangue ( args, validArg ) wiki.minsert( indicLangue, ' ' )
-- Liste des auteurs et de leur responsabilités (principale et secondaire) if validArg( 'nom1', 'nom', '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 Langue = Langue or require( 'Module:Langue' ) local dir = Langue.directionLangue( codeLangue ) if dir == 'rtl' then dir = '" dir="rtl' else dir = nil end
wiki.minsert( '« ') else wiki.minsert( '« ') end
local lienTitre = validArg( 'lien titre' ) if lienTitre then wiki.minsert( '' ) end wiki.minsert( args.titre ) local sousTitre = validArg( 'sous-titre' ) if sousTitre then wiki.minsert( ( codeLangue and ': ' ) or ' : ', sousTitre ) end wiki.minsert( lienTitre and '' )
wiki.minsert( ' »' )
else
categTitre = true
wiki.minsert( Outils.erreur( '[[Modèle:Article| {{Article}} : paramètre « titre
» manquant, paramètre « périodique
» manquant, paramètre « année
» ou « date
» manquant]] : paramètre « titre
» manquant' ) )
end
-- périodique
local periodique = validArg( 'périodique' )
if periodique then
wiki.minsert( ', ' )
local lienPeriodique = validArg( 'lien périodique' )
if lienPeriodique then
wiki.minsert( '', periodique, '' )
else
wiki.minsert( periodique )
end
wiki.minsert( '' )
else
categPeriodique = true
if categTitre then
wiki.minsert( ', ', Outils.erreur( 'paramètre « périodique
» manquant' ) )
else
wiki.minsert( ', ', Outils.erreur( '[[Modèle:Article| {{Article}} : paramètre « titre
» manquant, paramètre « périodique
» manquant, paramètre « année
» ou « date
» manquant]] : paramètre « périodique
» 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( ', ', editeur, '' ) else wiki.minsert( ', ', editeur ) end end
-- références : série, volume local serie = validArg( 'série' ) if serie then wiki.minsert( ', ', Outils.ordinal( serie, true ), ' série' ) 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 Langue = Langue or require( 'Module:Langue' ) titreVolume = Langue.lang{ codeLangue, titreVolume } end wiki.minsert( ' « ', titreVolume, ' »' ) 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
Langue = Langue or require( 'Module:Langue' )
titreNumero = Langue.lang{ codeLangue, titreNumero }
end
wiki.minsert( ' « ', titreNumero, ' »' )
end
if validArg( 'année', 'date', 'year' ) then
wiki.minsert( ', ', Commun.inscriptionDate( args ) )
else
categDate = true
if categTitre or categPeriodique then
wiki.minsert( ', ', Outils.erreur( 'paramètre « année
» ou « date
» manquant' ) )
else
wiki.minsert( ', ', Outils.erreur( '[[Modèle:Article| {{Article}} : paramètre « titre
» manquant, paramètre « périodique
» manquant, paramètre « année
» ou « date
» manquant]] : paramètre « année
» ou « date
» manquant' ) )
end
end
-- pages local page = validArg( 'passage', 'pages', 'page', 'p.', 'pp.' ) if page then wiki.minsert( ', ', Commun.page, page ) 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', 'PMID', 'pmcid', 'pmc', 'DOI', 'jstor', 'math reviews' ) 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' ) ) )
local arxiv = validArg( 'arxiv' ) if arxiv then enligne.minsert( 'arXiv [[arxiv:' .. arxiv .. '|]]' ) end
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 = 'texte intégral', } .. ( References.indicationDeFormat( args.format ) or ) ) end
local consulteLe = validArg( 'consulté le', 'accessdate', 'consulté' ) if consulteLe then enligne.insert( 'consulté le ' .. Outils.nobr( consulteLe ) ) end
wiki.minsert( ' ', mw.text.nowiki( '(' ), enligne.concat( ', ' ), ')' ) end
-- fin des span (COinS et id) et de la description de l'article wiki.minsert( '' )
-- citation et commentaire de cet ouvrage local citation = validArg( 'extrait', 'quote', 'citation' ) if citation then
wiki.minsert( ' :
', citation, '
' )
end wiki.minsert( Commun.commentaire( args ) )
if mw.title.getCurrentTitle().namespace == 0 then
wiki.minsert(
categCoauteur and ,
( categLangue or categTitre or categPeriodique ) and
)
end
return wiki.concat()
end
return Article