Module:Biblio/Article : Différence entre versions

De Lagny-sur-Marne Wiki
Aller à : navigation, rechercher
(ajout responsabilité secondaire après le titre s'il n'y a pas d'auteur (comme Ouvrage), (bis, après correction de bug))
 
(43 révisions intermédiaires par 8 utilisateurs non affichées)
Ligne 6 : Ligne 6 :
 
local Outils = require( 'Module:Outils' )
 
local Outils = require( 'Module:Outils' )
 
local TableBuilder = require( 'Module:TableBuilder' )
 
local TableBuilder = require( 'Module:TableBuilder' )
local Langue -- = require( 'Module:Langue' )   ne sera chargé que si nécessaire.
+
local Langue = require( 'Module:Langue' )
  
  
Ligne 18 : Ligne 18 :
 
-- validArg renvoi le premier paramètre non vide, ou nil s'ils sont tous vides.
 
-- 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.
 
-- Seul les noms des paramètres doivent être transmis à la fonction.
local validArg = function ( ... ) return Outils.validTextArg( args, ... ) end
+
local validArg = function ( ... ) return Commun.validTextArg( args, ... ) or false end
 
 
-- variable servant à la catégorisation
+
-- table servant à la catégorisation
local categLangue, categAuteur, categCoauteur, categTitre, categPeriodique, categDate
+
args.categ = {}
 
 
-- clarification paramètre nécéssaire pour les coins
+
-- clarification paramètre nécessaire pour les COinS
 
args['périodique'] = validArg( 'périodique', 'revue', 'journal' )
 
args['périodique'] = validArg( 'périodique', 'revue', 'journal' )
 
args.titre = validArg( 'titre', 'title' )
 
args.titre = validArg( 'titre', 'title' )
 
args.passage = validArg( 'pages', 'page', 'passage', 'p.', 'pp.' )
 
args.passage = validArg( 'pages', 'page', 'passage', 'p.', 'pp.' )
 +
args['format électronique'] = args.format
 +
args.format = false
 
 
 
 
-- COinS, id et libelé
+
-- span initial (id) et libellé
wiki.minsert( Commun.COinS( args, validArg, 'article' ) )
+
local spanInitial, spanFinal = Commun.spanInitial ( args, validArg )
wiki.minsert( Commun.spanInitial ( args, validArg ) )
+
wiki.minsert( spanInitial,  Commun.libelle( args ) )
local libelle = validArg( 'libellé' )
 
if libelle then
 
wiki.minsert( '<small>[', libelle, ']</small> ' )
 
end
 
 
 
 
-- indication de langue
 
-- indication de langue
local indicLangue, codeLangue, categLangue = Commun.indicationDeLangue ( args, validArg )
+
local indicLangue, codeLangue = Commun.indicationDeLangue ( args, validArg )
wiki.minsert( indicLangue, ' ' )
+
if Outils.notEmpty( indicLangue ) then
 +
wiki.minsert( indicLangue, ' ' )
 +
end
 
 
 
-- Liste des auteurs et de leur responsabilités (principale et secondaire)
 
-- Liste des auteurs et de leur responsabilités (principale et secondaire)
if validArg( 'nom1', 'nom', 'auteur', 'auteurs', 'last1', 'last', 'author1', 'author' ) then
+
local auteur = validArg( 'nom1', 'nom', 'auteur1', 'auteur', 'auteurs', 'auteur institutionnel', 'last1', 'last', 'author1', 'author' )
 +
if auteur then
 
if validArg( 'auteurs' ) then
 
if validArg( 'auteurs' ) then
 
wiki.minsert( args.auteurs )
 
wiki.minsert( args.auteurs )
else  
+
else
 
wiki.minsert( Commun.responsabilitePrincipale( args, validArg ) )
 
wiki.minsert( Commun.responsabilitePrincipale( args, validArg ) )
 
end
 
end
 
wiki.minsert( Commun.responsabiliteSecondaire( args, validArg ), ', ' )
 
wiki.minsert( Commun.responsabiliteSecondaire( args, validArg ), ', ' )
 
 
categAuteur = validArg( 'auteur', 'auteurs', 'author1', 'author', 1, 2, 3, 4 )
+
args.categ.auteur = validArg( 'auteur', 'auteurs', 'author1', 'author', 1, 2, 3, 4 )
categCoauteur = validArg( 'coauteurs', 'coauteur', 'coauthors' )
+
args.categ.coauteur = validArg( 'coauteurs', 'coauteur', 'coauthors' )
 
end
 
end
 
 
Ligne 57 : Ligne 58 :
 
if args.titre then
 
if args.titre then
 
if codeLangue then
 
if codeLangue then
Langue = Langue or require( 'Module:Langue' )
 
 
local dir = Langue.directionLangue( codeLangue )
 
local dir = Langue.directionLangue( codeLangue )
 
if dir == 'rtl' then dir = '" dir="rtl'
 
if dir == 'rtl' then dir = '" dir="rtl'
 
else dir = nil
 
else dir = nil
 
end
 
end
+
wiki.minsert( '<span lang="', codeLangue, dir, '">')
wiki.minsert( '« <cite  style="font-style:normal;" lang="', codeLangue, dir, '">')
 
else
 
wiki.minsert( '« <cite  style="font-style:normal;">')
 
end
 
 
local lienTitre = validArg( 'lien titre' )
 
if lienTitre then
 
wiki.minsert( '[[', lienTitre, '|' )
 
 
end
 
end
 
 
wiki.minsert( args.titre )
+
local titre, sousTitre = args.titre, validArg( 'sous-titre' )
 
local sousTitre = validArg( 'sous-titre' )
 
 
if sousTitre then
 
if sousTitre then
wiki.minsert( ( codeLangue and ': ' ) or ' : ', sousTitre )
+
titre = titre .. ' : ' .. sousTitre
 
end
 
end
wiki.minsert( lienTitre and ']]' )
+
titre = Commun.fusionTexteLien( titre, args['lien titre'], args.categ )
 
 
wiki.minsert( '</cite> »' )
+
wiki.minsert( '« <cite style="font-style:normal;">', titre, '</cite> »', codeLangue and '</span>' )
 
else
 
else
categTitre = true
+
args.categ.titre = true
 
wiki.minsert( Outils.erreur( '[[Modèle:Article|{{Article}}]] : paramètre « <code>titre</code> » manquant' ) )
 
wiki.minsert( Outils.erreur( '[[Modèle:Article|{{Article}}]] : paramètre « <code>titre</code> » manquant' ) )
 +
end
 +
 +
-- Titre original et traducteur
 +
local traductionTitre = validArg( 'traduction titre', 'titre original' )
 +
if traductionTitre and traductionTitre ~= args.titre then
 +
wiki.minsert( ' [« ', traductionTitre, ' »]' )
 +
end
 +
if not auteur then
 +
local responsabiliteSecondaire = Commun.responsabiliteSecondaire( args, validArg )
 +
if responsabiliteSecondaire then
 +
wiki.minsert( ' ', responsabiliteSecondaire )
 +
end
 +
end
 +
 +
-- Nature du document et établissement (pour les thèses...)
 +
local nature = validArg( 'nature article', 'nature ouvrage' )
 +
if nature then
 +
wiki.minsert( ' (', nature, ')')
 +
end
 +
local etablissement = validArg( 'établissement' )
 +
if etablissement then
 +
wiki.minsert( ', ', etablissement )
 
end
 
end
 
 
Ligne 90 : Ligne 102 :
 
local periodique = validArg( 'périodique' )
 
local periodique = validArg( 'périodique' )
 
if periodique then
 
if periodique then
wiki.minsert( ', <i>' )
+
-- on applique le code langue spécifique ou celui de l'article
local lienPeriodique = validArg( 'lien périodique' )
+
local languePeriodique = validArg( 'langue périodique' )
if lienPeriodique then
+
if languePeriodique then
wiki.minsert( '[[', lienPeriodique, '|', periodique, ']]' )
+
languePeriodique = Langue.codeLangue2( languePeriodique )
 +
end
 +
languePeriodique = languePeriodique or codeLangue
 +
if languePeriodique and languePeriodique ~= 'fr' then
 +
periodique = Langue.lang{ languePeriodique, periodique }
 +
end
 +
 +
local periodiqueEtLien = Commun.fusionTexteLien( periodique, args['lien périodique'], args.categ )
 +
if Langue.nonLatin( periodique ) then
 +
-- caractères non latin donc police droite
 +
wiki.minsert( ', ', periodiqueEtLien )
 
else
 
else
wiki.minsert( periodique )
+
-- le titre et son lien éventuel son affichés en italique
 +
wiki.minsert( ', <i>', periodiqueEtLien, '</i>' )
 
end
 
end
wiki.minsert( '</i>' )
+
 
else
 
else
categPeriodique = true
+
args.categ.periodique = true
if categTitre then
+
if args.categ.titre then
 
wiki.minsert( ', ', Outils.erreur( 'paramètre « <code>périodique</code> » manquant' ) )
 
wiki.minsert( ', ', Outils.erreur( 'paramètre « <code>périodique</code> » manquant' ) )
 
else
 
else
Ligne 111 : Ligne 134 :
 
if lieu then
 
if lieu then
 
wiki.minsert( ', ', lieu )
 
wiki.minsert( ', ', lieu )
end
+
end
 
local editeur = validArg( 'éditeur', 'publisher' )
 
local editeur = validArg( 'éditeur', 'publisher' )
 
if editeur then
 
if editeur then
 
local lienEditeur = validArg( 'lien éditeur' )
 
local lienEditeur = validArg( 'lien éditeur' )
if lienEditeur then
+
wiki.minsert( ', ', Commun.fusionTexteLien( editeur, lienEditeur, args.categ ) )
wiki.minsert( ', [[', lienEditeur, '|', editeur, ']]' )
 
else
 
wiki.minsert( ', ', editeur )
 
end
 
 
end
 
end
 
 
Ligne 125 : Ligne 144 :
 
local serie = validArg( 'série' )
 
local serie = validArg( 'série' )
 
if serie then
 
if serie then
wiki.minsert( ', ', Outils.ordinal( serie, true ), ' série' )
+
if tonumber( serie ) then
end  
+
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' )
 
local volume = validArg( 'volume', 'vol' )
 
if volume then
 
if volume then
Ligne 138 : Ligne 165 :
 
if titreVolume then
 
if titreVolume then
 
if codeLangue then
 
if codeLangue then
Langue = Langue or require( 'Module:Langue' )
+
wiki.minsert( ' ', Langue.lang{ codeLangue, '« ' .. titreVolume .. ' »' } )
titreVolume = Langue.lang{ codeLangue, titreVolume }
+
else
end
+
wiki.minsert( ' « ', titreVolume, ' »' )
wiki.minsert( ' « ', titreVolume, ' »' )
+
end
 
end
 
end
 
 
Ligne 152 : Ligne 179 :
 
if titreNumero then
 
if titreNumero then
 
if codeLangue then
 
if codeLangue then
Langue = Langue or require( 'Module:Langue' )
+
wiki.minsert( ' ', Langue.lang{ codeLangue, '« ' .. titreNumero .. ' »'  } )
titreNumero = Langue.lang{ codeLangue, titreNumero }
+
else
end
+
wiki.minsert( ' « ', titreNumero, ' »' )
wiki.minsert( ' « ', titreNumero, ' »' )
+
end
 
end
 
end
 
if validArg( 'année', 'date', 'year' ) then
 
if validArg( 'année', 'date', 'year' ) then
wiki.minsert( ', ', Commun.inscriptionDate( args ) )
+
args.mois = validArg( 'mois', 'saison' )
 +
wiki.minsert( ',&lrm; ', 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
 
else
categDate = true
+
args.categ.date = true
if categTitre or categPeriodique then
+
if args.categ.titre or args.categ.periodique then
 
wiki.minsert( ', ', Outils.erreur( 'paramètre « <code>année</code> » ou « <code>date</code> » manquant' ) )
 
wiki.minsert( ', ', Outils.erreur( 'paramètre « <code>année</code> » ou « <code>date</code> » manquant' ) )
 
else
 
else
 
wiki.minsert( ', ', Outils.erreur( '[[Modèle:Article|{{Article}}]] : paramètre « <code>année</code> » ou « <code>date</code> » manquant' ) )
 
wiki.minsert( ', ', Outils.erreur( '[[Modèle:Article|{{Article}}]] : paramètre « <code>année</code> » ou « <code>date</code> » manquant' ) )
 
end
 
end
 +
end
 +
 +
-- format livre
 +
local format = validArg( 'format livre' )
 +
if format then
 +
wiki.minsert( ', ', format )
 
end
 
end
 
 
Ligne 171 : Ligne 206 :
 
local page =  validArg( 'passage', 'pages', 'page', 'p.', 'pp.' )
 
local page =  validArg( 'passage', 'pages', 'page', 'p.', 'pp.' )
 
if page then
 
if page then
wiki.minsert( ', ', Commun.page, page )
+
if string.match ( page, '^[%dIVXL]' ) then
 +
wiki.minsert( ', ', Commun.page, page )
 +
else
 +
wiki.minsert( ', ', page )
 +
end
 
end
 
end
 
local noArticle = validArg( 'numéro article' )
 
local noArticle = validArg( 'numéro article' )
Ligne 177 : Ligne 216 :
 
wiki.minsert( ', article ', Commun.numero, noArticle )
 
wiki.minsert( ', article ', Commun.numero, noArticle )
 
end
 
end
+
-- lien vers l'ouvrage en ligne
+
-- lien vers l'article en ligne (isbn, issn, pmid, doi, lire en ligne, résumé...)
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
+
wiki.minsert( References.affichageLiensExternes( args, validArg, true, false ) )
local enligne = TableBuilder.new(  )
+
-- consulté le n'est plus affiché, voir [[Discussion_modèle:Ouvrage/Archive_5#.C3.89volution_documentation]]
+
enligne.minsert( References.isbn( args, validArg ), References.issn( args, validArg ) )
+
local patternPonct = '[,.;:!?]$'
+
local ponctuation = wiki.concat():gsub( '%b<>', '' ):match( patternPonct )
enligne.minsert(
+
References.oclc( validArg( 'oclc' ) ),
+
-- ajout des méthadonnées COinS (ContextObjects in Spans)
References.pmid( validArg( 'pmid', 'PMID' ) ),
+
wiki.minsert( Commun.COinS( args, validArg, 'article' ) )
References.pmcid ( validArg( 'pmcid', 'pmc' ) ),
+
References.doi( validArg( 'doi', 'DOI' ) ),
+
-- fin du span (id) et de la description de l'ouvrage
References.jstor( validArg( 'jstor' ) ),
+
wiki.minsert( spanFinal )
References.bibcode( validArg( 'bibcode' ) ),
+
References.mathreviews( validArg( 'math reviews' ) )
+
-- citation et commentaire de cet ouvrage
)
+
local citation = validArg( 'extrait', 'quote', 'citation' )
+
if citation then
local arxiv = validArg( 'arxiv' )
+
wiki.minsert( ' :<blockquote>« ', citation, ' »</blockquote>' )
if arxiv then
+
end
enligne.minsert( '[[arXiv]] [[arxiv:' .. arxiv .. '|]]' )
+
end
+
if validArg( 'plume' ) then
+
local point
local resume = validArg( 'résumé', 'présentation en ligne' )
+
if not citation and not ponctuation then
if resume then
+
point = '.'
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
 
end
 
+
wiki.minsert( point, Commun.plume )
wiki.minsert( ' <small>', mw.text.nowiki( '(' ), enligne.concat( ', ' ),  ')</small>' )
 
 
end
 
end
 
 
-- fin des span (COinS et id) et de la description de l'article
 
wiki.minsert( '</span></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 ) )
 
wiki.minsert( Commun.commentaire( args ) )
 
 
 
 
 
if mw.title.getCurrentTitle().namespace == 0 then
 
if mw.title.getCurrentTitle().namespace == 0 then
wiki.minsert(  
+
wiki.minsert(
categCoauteur and '[[Catégorie:Recension temporaire pour le modèle Article]]',
+
args.categ.coauteur and '[[Catégorie:Recension temporaire pour le modèle Article|coauteur]]',
( categLangue or categTitre or categPeriodique ) and '[[Catégorie:Page du modèle Article comportant une erreur]]'
+
args.categ.langue  and '[[Catégorie:Page du modèle Article comportant une erreur|langue]]',
 +
args.categ.titre and '[[Catégorie:Page du modèle Article comportant une erreur|titre]]',
 +
args.categ.periodique and '[[Catégorie:Page du modèle Article comportant une erreur|périodique]]',
 +
args.categ.date and '[[Catégorie:Page du modèle Article comportant une erreur|date]]',
 +
args.categ.lienExterne and '[[Catégorie:Page du modèle Article comportant une erreur|externe]]',
 +
args.categ.isbnInvalid and '[[Catégorie:Page avec ISBN invalide]]',
 +
args.categ.issnInvalid and '[[Catégorie:Page avec ISSN invalide]]'
 
)
 
)
end
+
if codeLangue then
 +
if Langue.directionLangue( codeLangue ) == 'rtl' then
 +
wiki.minsert( '[[Catégorie:Recension temporaire pour le modèle Article|rtl]]' )
 +
end
 +
end
 +
end
 
 
 
 

Version actuelle datée du 22 avril 2017 à 08:18

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' )


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 Commun.validTextArg( args, ... ) or false end
	
	-- table servant à la catégorisation
	args.categ = {}
	
	-- clarification paramètre nécessaire pour les COinS
	args['périodique'] = validArg( 'périodique', 'revue', 'journal' )
	args.titre = validArg( 'titre', 'title' )
	args.passage = validArg( 'pages', 'page', 'passage', 'p.', 'pp.' )
	args['format électronique'] = args.format
	args.format = false
	
	
	-- span initial (id) et libellé
	local spanInitial, spanFinal = Commun.spanInitial ( args, validArg )
	wiki.minsert( spanInitial,  Commun.libelle( args ) )
	
	-- indication de langue
	local indicLangue, codeLangue = Commun.indicationDeLangue ( args, validArg )
	if Outils.notEmpty( indicLangue ) then
		wiki.minsert( indicLangue, ' ' )
	end
	
	-- Liste des auteurs et de leur responsabilités (principale et secondaire)
	local auteur = validArg( 'nom1', 'nom', 'auteur1', 'auteur', 'auteurs', 'auteur institutionnel', 'last1', 'last', 'author1', 'author' )
	if auteur then
		if validArg( 'auteurs' ) then
			wiki.minsert( args.auteurs )
		else
			 wiki.minsert( Commun.responsabilitePrincipale( args, validArg ) )
		end
		wiki.minsert( Commun.responsabiliteSecondaire( args, validArg ), ', ' )
		
		args.categ.auteur = validArg( 'auteur', 'auteurs', 'author1', 'author', 1, 2, 3, 4 )
		args.categ.coauteur = 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
		
		local titre, sousTitre = args.titre, validArg( 'sous-titre' )
		if sousTitre then
			titre = titre .. ' : ' .. sousTitre
		end
		titre = Commun.fusionTexteLien( titre, args['lien titre'], args.categ )
		
		wiki.minsert( '« <cite style="font-style:normal;">', titre, '</cite> »', codeLangue and '</span>' )
	else
		args.categ.titre = true
		wiki.minsert( Outils.erreur( '[[Modèle:Article|{{Article}}]] : paramètre « <code>titre</code> » manquant' ) )
	end
	
	-- Titre original et traducteur
	local traductionTitre = validArg( 'traduction titre', 'titre original' )
	if traductionTitre and traductionTitre ~= args.titre then
		wiki.minsert( ' [« ', traductionTitre, ' »]' )
	end
	if not auteur then
		local responsabiliteSecondaire = Commun.responsabiliteSecondaire( args, validArg )
		if responsabiliteSecondaire then
			wiki.minsert( ' ', responsabiliteSecondaire )
		end
	end

	-- Nature du document et établissement (pour les thèses...)
	local nature = validArg( 'nature article', 'nature ouvrage' )
	if nature then
		wiki.minsert( ' (', nature, ')')
	end
	local etablissement = validArg( 'établissement' )
	if etablissement then
		wiki.minsert( ', ', etablissement )
	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
			languePeriodique = Langue.codeLangue2( languePeriodique )
		end
		languePeriodique = languePeriodique or codeLangue
		if languePeriodique and languePeriodique ~= 'fr' then
			periodique = Langue.lang{ languePeriodique, periodique }
		end
		
		local periodiqueEtLien = Commun.fusionTexteLien( periodique, args['lien périodique'], args.categ )
		if Langue.nonLatin( periodique ) then
			-- caractères non latin donc police droite
			wiki.minsert( ', ', periodiqueEtLien )
		else
			-- le titre et son lien éventuel son affichés en italique
			wiki.minsert( ', <i>', periodiqueEtLien, '</i>' )
		end
		
	else
		args.categ.periodique = true
		if args.categ.titre 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' )
		wiki.minsert( ', ', Commun.fusionTexteLien( editeur, lienEditeur, args.categ ) )
	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( ',&lrm; ', 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
		args.categ.date = true
		if args.categ.titre or args.categ.periodique 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	
	
	-- format livre
	local format = validArg( 'format livre' )
	if format then
		wiki.minsert( ', ', format )
	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'article en ligne (isbn, issn, pmid, doi, lire en ligne, résumé...)
	wiki.minsert( References.affichageLiensExternes( args, validArg, true, false ) )
	-- consulté le n'est plus affiché, voir [[Discussion_modèle:Ouvrage/Archive_5#.C3.89volution_documentation]]
	
	local patternPonct = '[,.;:!?]$'
	local ponctuation = wiki.concat():gsub( '%b<>', '' ):match( patternPonct )
	
	-- 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( spanFinal )
	
	-- citation et commentaire de cet ouvrage
	local citation = validArg( 'extrait', 'quote', 'citation' )
	if citation then
		wiki.minsert( ' :<blockquote>« ', citation, ' »</blockquote>' )
	end
	
	if validArg( 'plume' ) then
		local point
		if not citation and not ponctuation then
			point = '.'
		end
		wiki.minsert( point, Commun.plume )
	end
	
	wiki.minsert( Commun.commentaire( args ) )
	
	
	if mw.title.getCurrentTitle().namespace == 0 then
		wiki.minsert(
			args.categ.coauteur and '[[Catégorie:Recension temporaire pour le modèle Article|coauteur]]',
			args.categ.langue  and '[[Catégorie:Page du modèle Article comportant une erreur|langue]]',
			args.categ.titre and '[[Catégorie:Page du modèle Article comportant une erreur|titre]]',
			args.categ.periodique and '[[Catégorie:Page du modèle Article comportant une erreur|périodique]]',
			args.categ.date and '[[Catégorie:Page du modèle Article comportant une erreur|date]]',
			args.categ.lienExterne and '[[Catégorie:Page du modèle Article comportant une erreur|externe]]',
			args.categ.isbnInvalid and '[[Catégorie:Page avec ISBN invalide]]',
			args.categ.issnInvalid and '[[Catégorie:Page avec ISSN invalide]]'
		)
		if codeLangue then
			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