Module:Biblio/Article : Différence entre versions

De Lagny-sur-Marne Wiki
Aller à : navigation, rechercher
(retouche de la modification précédente)
(série : prise en compte d'une série qui ne soit pas un nombre.)
Ligne 140 : Ligne 140 :
 
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
 +
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  
 
end  
 
local volume = validArg( 'volume', 'vol' )
 
local volume = validArg( 'volume', 'vol' )
Ligne 174 : Ligne 182 :
 
if validArg( 'année', 'date', 'year' ) then
 
if validArg( 'année', 'date', 'year' ) then
 
wiki.minsert( ',&lrm; ', Commun.inscriptionDate( args ) )
 
wiki.minsert( ',&lrm; ', Commun.inscriptionDate( args ) )
-- le &lrm est une marque de texte gauche à droite, utilile si le texte qui précède est en droite à gauche (arabe, hébreux...)
+
-- 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
 
categDate = true

Version du 28 février 2014 à 12:53

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