« Module:Biblio/Ouvrage » : différence entre les versions

Une page de Wikiquote, le recueil des citations libres.
Contenu supprimé Contenu ajouté
Ajout de bibcode ; math reviews et arxiv affichés même s'ils sont "seuls"
Lange rtl (arabe, hébreux...) : amélioration de l'affichage des «  », Catégorisation des pages avec ces langues. Suppression de la catégorisation de nom et nolien.
Ligne 63 : Ligne 63 :
-- indication de langue
-- indication de langue
local indicLangue, codeLangue, categLangue = Commun.indicationDeLangue ( args, validArg )
local indicLangue, codeLangue, categLangue = Commun.indicationDeLangue ( args, validArg )
local dir
if Outils.notEmpty( indicLangue ) then
if Outils.notEmpty( indicLangue ) then
wiki.minsert( indicLangue, ' ' )
wiki.minsert( indicLangue, ' ' )
if codeLangue then
Langue = Langue or require( 'Module:Langue' )
dir = Langue.directionLangue( codeLangue )
if dir == 'rtl' then
dir = '" dir="rtl'
else
dir = nil
end
end
end
end


Ligne 85 : Ligne 95 :
if chapitre then
if chapitre then
if args.titreChap then
if args.titreChap then
wiki.minsert( '« <cite ' )
if codeLangue then
if codeLangue then
wiki.minsert( 'lang="', codeLangue, '" ' )
wiki.minsert( '<span lang="', codeLangue, dir, '">' )
end
end
wiki.minsert( 'style="font-style:normal">', args.titreChap )
wiki.minsert( '« <cite style="font-style:normal">', args.titreChap )
if args['sous-titre chapitre'] then
if args['sous-titre chapitre'] then
wiki.minsert( ' : ', args['sous-titre chapitre'] )
wiki.minsert( ' : ', args['sous-titre chapitre'] )
end
end
wiki.minsert( '</cite> »' )
wiki.minsert( '</cite> »' )
if codeLangue then
wiki.minsert( '</span>' )
end
elseif modeNormal then
elseif modeNormal then
wiki.minsert( Outils.erreur( ' [[Modèle:Chapitre|{{Chapitre}}]] : paramètre « <code>titre chapitre</code> » manquant' ) )
wiki.minsert( Outils.erreur( ' [[Modèle:Chapitre|{{Chapitre}}]] : paramètre « <code>titre chapitre</code> » manquant' ) )
Ligne 110 : Ligne 122 :
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 )
if dir == 'rtl' then dir = '" dir="rtl'
else dir = nil
end
wiki.minsert( '<cite class=italique lang="', codeLangue, dir, '">')
wiki.minsert( '<cite class=italique lang="', codeLangue, dir, '">')
else
else
Ligne 225 : Ligne 231 :
local annee = validArg( 'année', 'date', 'year' )
local annee = validArg( 'année', 'date', 'year' )
if annee then
if annee then
wiki.minsert( ', ', Commun.inscriptionDate( args ) )
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...)
end
end
local publi = validArg( 'réimpression', 'publi' )
local publi = validArg( 'réimpression', 'publi' )
Ligne 328 : Ligne 335 :
local titreChapitre = validArg( 'titre chapitre', 'chap', 'chapitre', 'chapter' )
local titreChapitre = validArg( 'titre chapitre', 'chap', 'chapitre', 'chapter' )
if titreChapitre then
if titreChapitre then
if numeroChapitre then
titreChapitre = '(« ' .. titreChapitre .. ' »)'
else
titreChapitre = '« ' .. titreChapitre .. ' »'
end
if codeLangue then
if codeLangue then
Langue = Langue or require( 'Module:Langue' )
Langue = Langue or require( 'Module:Langue' )
titreChapitre = Langue.lang{ codeLangue, titreChapitre }
titreChapitre = Langue.lang{ codeLangue, titreChapitre }
end
end
wiki.minsert( ', ', titreChapitre )
if numeroChapitre then
wiki.minsert( ' (« ', titreChapitre, ' »)' )
else
wiki.minsert( ', « ', titreChapitre, ' »' )
end
end
end
local passage = validArg( 'passage', 'page' )
local passage = validArg( 'passage', 'page' )
Ligne 371 : Ligne 379 :
categTitreOuvrage and '[[Catégorie:Page du modèle Chapitre comportant une erreur|Ouvrage]]'
categTitreOuvrage and '[[Catégorie:Page du modèle Chapitre comportant une erreur|Ouvrage]]'
)
)
if args.nolien then
if dir then
wiki.minsert( '[[Catégorie:Page du modèle Ouvrage comportant une erreur|nolien]]' )
wiki.minsert( '[[Catégorie:Recension temporaire pour le modèle Ouvrage|rtl]]' )
end
if validArg('nom') and not validArg( 'lien auteur1', 'lien auteur' ) then
local prenom = validArg( 'prénom' )
local nom = prenom and ( prenom .. ' ' .. args.nom ) or args.nom
if nom ~= mw.title.getCurrentTitle().fullText and nom == mw.ustring.gsub( nom, '[#<>%[%]{}|]', '' ) then
local titleNom = mw.title.new( nom )
if titleNom and titleNom.exists then
wiki.minsert( '[[Catégorie:Recension temporaire pour le modèle Ouvrage|nom]]' )
end
end
end
end
end
end

Version du 10 décembre 2013 à 11:28

Ce module est destiné à être utilisé uniquement par le module:Biblio.

Utilisation

Fonctions exportables :

  • ouvrage(args) – affiche les références d'un ouvrage. Voir {{Ouvrage}}. Il faut fournir une table de paramètre simple.
  • chapitre(args) – affiche les références d'un chapitre d'un ouvrage. Voir {{Chapitre}}. Il faut fournir une table de paramètre simple.

Modules externes et autres éléments dont ce module a besoin pour fonctionner :



local Ouvrage = { }


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 Ouvrage.chapitre( args )
	-- validArg renvoie 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
	
	-- titreChap est un paramètre différents de ceux du modèle ouvrage pour utilisé le même programme
	args.titreChap = validArg( 'titre chapitre', 'chap', 'titre' )
	if args.titre == args.titreChap then
		args.titre = false
	end
	args.titre = validArg( 'titre ouvrage', 'ouvrage', 'titre' ) or false
	args['titre chapitre'] = false
	args.chap = false
	args['sous-titre chapitre'] = validArg( 'sous-titre chapitre', 'sous-titre' ) or false
	args['sous-titre'] = validArg( 'sous-titre ouvrage', 'sous-titre' )
	if args['sous-titre chapitre'] == args['sous-titre'] then
		args['sous-titre'] = false
	end
	args['lien titre'] = validArg( 'lien titre ouvrage', 'lien titre' )
	return Ouvrage.ouvrage( args, true )
end


function Ouvrage.ouvrage( args, chapitre )
	-- La table wiki va recevoir tout les petits bouts de texte, et sera concaténée à la fin.
	-- Elle utilise la meta-table de TableBuilder, permettant d'utiliser les fonctions de la
	-- librairie table comme des méthodes. minsert permet d'insérer plusieurs éléments en une
	-- seule fois en, ignorant les paramètres nil.
	local wiki = TableBuilder.new()
	
	-- validArg renvoie 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
	local genre = ( chapitre and 'chapitre' ) or 'ouvrage'
	
	--Variables servant à la catégorisation
	local categTitre, categTitreChapitre, categTitreOuvrage, categLangue
	local modeNormal = not validArg( 'nocat' )
	
	-- clarification des paramètres nécéssaires pour les coins
	args.titre = validArg( 'titre', 'title' )
	args['pages totales'] = validArg( 'pages totales', 'pages' )
	args.pages = ''
	
	
	-- 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 )
	local dir
	if Outils.notEmpty( indicLangue ) then
		wiki.minsert( indicLangue, ' ' )
		if codeLangue then
			Langue = Langue or require( 'Module:Langue' )
			dir = Langue.directionLangue( codeLangue )
			if dir == 'rtl' then 
				dir = '" dir="rtl'
			else 
				dir = nil
			end
		end
	end

	-- Liste des auteurs et de leurs responsabilités (principales et secondaires)
	local auteur = validArg( 'nom1', 'nom', 'auteur1', 'auteur', 'auteurs', 'last1', 'last', 'author1', 'author' )
	if auteur then
		if validArg( 'auteurs' ) then
			wiki.minsert( args.auteurs )
		else
			wiki.minsert( Commun.responsabilitePrincipale( args, validArg, true ) )
		end
		local coauteur = validArg( 'co-auteur', 'coauteurs', 'coauteur', 'coauthors' )
		if coauteur then
			wiki.minsert( ', ', coauteur )
		end
		wiki.minsert( Commun.responsabiliteSecondaire( args, validArg ), ', ' )
	end
	
	-- Pour le modèle chapitre : affichage du chapitre
	if chapitre then
		if args.titreChap then
			if codeLangue then
				wiki.minsert( '<span lang="', codeLangue, dir, '">' )
			end
			wiki.minsert( '« <cite style="font-style:normal">', args.titreChap )
			if args['sous-titre chapitre'] then
				wiki.minsert( ' : ', args['sous-titre chapitre'] )
			end
			wiki.minsert( '</cite> »' )
			if codeLangue then
				wiki.minsert( '</span>' )
			end
		elseif modeNormal then
			wiki.minsert( Outils.erreur( ' [[Modèle:Chapitre|{{Chapitre}}]] : paramètre « <code>titre chapitre</code> » manquant' ) )
			categTitreChapitre = true
		end
		
		wiki.minsert( ', dans ' )
		
		local auteurOuvrage = validArg( 'auteurs ouvrage', 'auteur ouvrage' )
		if auteurOuvrage then
			wiki.minsert( auteurOuvrage, ', ' )
		end
	end
	
	-- titre
	if args.titre then
		if codeLangue then
			wiki.minsert( '<cite class=italique lang="', codeLangue, dir, '">')
		else
			wiki.minsert( '<cite class=italique>')
		end
		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
		if lienTitre then
			wiki.minsert( ']]' )
		end
		wiki.minsert( '</cite>' )
		
	elseif modeNormal then
		if chapitre then
			categTitreOuvrage = true
			if categTitreChapitre then
				wiki.minsert( Outils.erreur( 'paramètre « <code>titre ouvrage</code> » manquant' ) )
			else
				wiki.minsert( Outils.erreur( '[[Modèle:Chapitre|{{Chapitre}}]] : paramètre « <code>titre ouvrage</code> » manquant' ) )
			end
		else
			categTitre = true
			wiki.minsert( Outils.erreur( '[[Modèle:Ouvrage|{{Ouvrage}}]] : paramètre « <code>titre</code> » manquant' ) )
		end
	end
	
	-- titre original et traducteur
	local original = validArg( 'titre original', 'titre vo', 'traduction titre' )
	if original and original ~= args.titre then
		wiki.minsert( ' [« ', original, ' »]' )
	end
	if not auteur then
		local responsabiliteSecondaire = Commun.responsabiliteSecondaire( args, validArg )
		if responsabiliteSecondaire then
			wiki.minsert( ' ', responsabiliteSecondaire )
		end
	end
		
	-- volume, tome
	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 titreVolTome = validArg( 'titre volume', 'titre tome' )
	if titreVolTome then
		if volume or tome then
			wiki.minsert( [[ : '']] )
		else
			wiki.minsert( [[, '']] )
		end
		if codeLangue then
			Langue = Langue or require( 'Module:Langue' )
			wiki.minsert( Langue.lang{ codeLangue, titreVolTome },  [['']] )
		else
			wiki.minsert( titreVolTome,  [['']] )
		end
	end
	
	-- lieu et éditeur
	local lieu = validArg( 'lieu', 'location' )
	if lieu then
		wiki.minsert( ', ', lieu )
	end
	local editeur = validArg( 'éditeur', 'édition', 'editeur', 'edition', 'publisher' )
	if editeur then
		local lienEditeur = validArg( 'lien éditeur' )
		if lienEditeur then
			wiki.minsert( ', [[', lienEditeur, '|', editeur, ']]' )
		else
			wiki.minsert( ', ', editeur )
		end
	end
	
	-- nature du document
	local nature = validArg( 'nature ouvrage' )
	if nature then
		wiki.minsert( ' (', nature, ')')
	end
	
	-- collecion et numéro
	local collection = validArg( 'collection' )
	if collection then
		wiki.minsert( ', ', Commun.coll, '« ', collection )
		local serie = validArg( 'série' )
		if serie then
			wiki.minsert( ' / ', serie )
		end
		wiki.minsert( ' »' )
	end
	local numeroCollection = validArg( 'numéro dans collection', 'numéro dans la collection' )
	if numeroCollection then
		wiki.minsert( ' (', Commun.numero, numeroCollection, ')' )
	end
	
	-- date, réimpression et éditions
	local annee = validArg( 'année', 'date', 'year' )
	if annee 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...)
	end
	local publi = validArg( 'réimpression', 'publi' )
	if publi then
		wiki.minsert( ' (', Commun.reimpr, publi, ')' )
	end
	local numeroEdition = validArg( "numéro d'édition" )
	if numeroEdition then
		wiki.minsert( ', ', Outils.ordinal( numeroEdition, true ), Commun.ed )
	end
	local premiereEdition = validArg( 'année première édition', 'origyear' )
	if premiereEdition then
		wiki.minsert( ' (', Commun.premiere, Commun.ed, ' ', premiereEdition, ')' )
	end
	
	-- format et pages
	local format = validArg( 'format' )
	if format then
		wiki.minsert( ', ', format )
	end
	local pages = validArg( 'pages totales', 'pages' )
	if pages then
		wiki.minsert( ', ', pages, Commun.nbp )
	end
		
	-- références
	local reference = validArg( 'référence' )
	if reference then
		wiki.minsert( ' ', Commun.detailEditions( reference ) )
	end
	local refSimple = validArg( 'référence simplifiée', 'ref' )
	if refSimple then
		wiki.minsert( ' ', Commun.detailEdition( refSimple ) )
	end
	
	-- références ISBN, oclc, lccn, bnf... et liens en ligne
	if validArg( 'isbn', 'lire en ligne', 'présentation en ligne', 'oclc', 'url', 'lccn', 'issn', 'bnf', 'ISBN', 'isbn1', 'ISSN', 'dnb', 'doi', 'pmid', 'jstor', 'bibcode', 'math reviews', 'arxiv', 'url texte', 'résumé' ) then
		local enligne = TableBuilder.new(  )
		
		enligne.minsert( References.isbn( args, validArg ), References.issn( args, validArg ) )
	
		enligne.minsert(
			References.oclc( validArg( 'oclc' ) ),
			References.bnf ( validArg( 'bnf'  ) ),
			References.lccn( validArg( 'lccn' ) ),
			References.dnb ( validArg( 'dnb'  ) ),
			References.doi( validArg( 'doi' ) ),
			References.pmid( validArg( 'pmid' ) ),
			References.jstor( validArg( 'jstor' ) ),
			References.bibcode( validArg( 'bibcode' ) ),
			References.mathreviews( validArg( 'math reviews' ) ),
			References.arxiv( validArg( 'arxiv' ) )
		)
		
		local url = validArg( 'lire en ligne', 'url', 'url texte' )
		if url then
			enligne.insert( References.enLigne{
				lien = url,
				texte = 'lire en ligne',
			} )
		end
		local ecouterEnLigne = validArg( 'écouter en ligne' )
		if ecouterEnLigne then
			enligne.insert( References.enLigne{
				lien = ecouterEnLigne,
				texte = 'écouter en ligne',
			} )
		end
		local resume = validArg( 'présentation en ligne', 'résumé' )
		if resume then
			enligne.insert( References.enLigne{
				lien = resume,
				texte = 'présentation en ligne',
			} )
		end
		
		--[=[ consulté le n'est plus affiché, voir [[Discussion_modèle:Ouvrage#Évolution documentation]]
		local cousulteLe = validArg( 'consulté le', 'accessdate', 'consulté' )
		if cousulteLe then
			enligne.insert( 'consulté le ' .. Outils.nobr( cousulteLe ) )
		end
		]=]
		
		wiki.minsert( ' <small>', mw.text.nowiki( '(' ), enligne.concat( ', ' ),  ')</small>' )
	end
	
	-- précision sur le passage concerné
	local partie = validArg( 'partie' )
	if partie then
		if string.match ( partie, '^[%dIVXLCM]+$' ) then
			wiki.minsert( ', partie&nbsp;', partie )
		elseif string.match ( partie, '^[ivxlcmIVXLCM]+$' ) then
			wiki.minsert( ', partie&nbsp;',  Commun.romain( partie ) )
		else
			wiki.minsert( ', ', partie )
		end
	end
	local numeroChapitre = validArg( 'numéro chapitre', 'numéro' )
	if numeroChapitre then
		wiki.minsert( ', ', Commun.chap, numeroChapitre )
	end
	local titreChapitre = validArg( 'titre chapitre', 'chap', 'chapitre', 'chapter' )
	if titreChapitre then
		if numeroChapitre then
			titreChapitre = '(« ' .. titreChapitre .. ' »)'
		else
			titreChapitre = '« ' .. titreChapitre .. ' »'
		end
		if codeLangue then
			Langue = Langue or require( 'Module:Langue' )
			titreChapitre = Langue.lang{ codeLangue, titreChapitre }
		end
		wiki.minsert( ', ', titreChapitre )
	end
	local passage = validArg( 'passage', 'page' )
	if passage then
		if string.match ( passage, '^[%dIVXLCM]' ) then
			wiki.minsert( ', ', Commun.page, passage )
		else
			wiki.minsert( ', ', passage )
		end
	end
	
	-- ajout des méthadonnées COinS (ContextObjects in Spans)
	wiki.minsert( Commun.COinS( args, validArg, genre ) )
	
	-- fin du span (id) et de la description de l'ouvrage
	wiki.minsert( '</span>' )
	
	-- citation et commentaire de cet ouvrage
	local citation = validArg( 'extrait', 'citation' )
	if citation then
		wiki.minsert( ' :<blockquote>« ', citation, ' »</blockquote>' )
	end
	if validArg( 'plume' ) then
		wiki.minsert( Commun.plume )
	end
	wiki.minsert( Commun.commentaire( args ) )
	
	
	if mw.title.getCurrentTitle().namespace == 0 and modeNormal then
		wiki.minsert(
			categLangue and '[[Catégorie:Page du modèle Ouvrage comportant une erreur|langue]]',
			categTitre and '[[Catégorie:Page du modèle Ouvrage comportant une erreur|titre]]',
			categTitreChapitre and '[[Catégorie:Page du modèle Chapitre comportant une erreur|Chapitre]]',
			categTitreOuvrage and '[[Catégorie:Page du modèle Chapitre comportant une erreur|Ouvrage]]'
		)
		if dir then
			wiki.minsert( '[[Catégorie:Recension temporaire pour le modèle Ouvrage|rtl]]' )
		end
	end

	
	return wiki.concat()
end


return Ouvrage