Module:Biblio/Ouvrage : Différence entre versions

De Lagny-sur-Marne Wiki
Aller à : navigation, rechercher
(Remplacement de 'editor' par 'publisher')
(Les détails de l'édition sont affichés même s'il y a des références / références simplifiées.)
Ligne 182 : Ligne 182 :
 
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
 +
 +
-- 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' )
 +
if numeroCollection then
 +
wiki.minsert( ' (', Commun.numero, numeroCollection, ')' )
 +
end
 +
 +
-- date, réimpression et éditions
 +
local annee = validArg( 'année', 'date' )
 +
if annee then
 +
wiki.minsert( ', ', Commun.inscriptionDate( args ) )
 +
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
 
-- références
 
local reference = validArg( 'référence' )
 
local reference = validArg( 'référence' )
 
if reference then
 
if reference then
wiki.minsert( ' ', Commun.detailEditions( reference ) )
+
wiki.minsert( ' ', Commun.detailEditions( reference ) )
else
+
end
-- lieu et éditeur
+
local refSimple = validArg( 'référence simplifiée', 'ref' )
local lieu = validArg( 'lieu', 'location' )
+
if refSimple then
if lieu then
+
wiki.minsert( ' ', Commun.detailEdition( refSimple ) )  
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
 
-- références simplifiée
 
local refSimple = validArg( 'référence simplifiée', 'ref' )
 
local annee = validArg( 'année', 'date' )
 
if refSimple then
 
if annee then
 
wiki.minsert( ', ', annee )
 
end
 
wiki.minsert( ' ', Commun.detailEdition( refSimple ) )
 
else
 
-- 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' )
 
if numeroCollection then
 
wiki.minsert( ' (', Commun.numero, numeroCollection, ')' )
 
end
 
 
-- date, réimpression et éditions
 
if annee then
 
wiki.minsert( ', ', Commun.inscriptionDate( args ) )
 
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
 
 
end
 
 
 
end
 
end
 
 

Version du 7 octobre 2013 à 04:22

La documentation pour ce module peut être créée à Module:Biblio/Ouvrage/doc

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 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
	
	-- 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', 'titre' )
	args['titre chapitre'] = false
	args.chap = false
	args['sous-titre chapitre'] = validArg( 'sous-titre chapitre', 'sous-titre' ) 
	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 require( 'Module:Biblio/Ouvrage' ).ouvrage( args, true )
end


function Ouvrage.ouvrage( args, chapitre )
	-- 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
	local genre = ( chapitre and 'chapitre' ) or 'ouvrage'
	
	--Variables servant à la catégorisation
	local categTitre, categTitreChapitre, categTitreOuvrage, categLangue
	
	-- clarification paramètre nécéssaire pour les coins
	args.titre = validArg( 'titre', 'title' )
	args['pages totales'] = validArg( 'pages totales', 'pages' )
	args.pages = ''
	
	
	-- COinS, id et libelé
	wiki.minsert( Commun.COinS( args, validArg, genre ) )
	wiki.minsert( Commun.spanInitial ( args, validArg ) )
	local libelle = validArg( 'libellé' )
	if libelle then
		wiki.minsert( '<small>[', libelle, ']</small> ' )
	end
	
	-- indication de langue
	local incdicLangue, codeLangue, categLangue = Commun.indicationDeLangue ( args, validArg )
	wiki.minsert( incdicLangue, ' ' )

	-- Liste des auteurs et de leur responsabilités (principale et secondaire)
	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
			wiki.minsert( '« <cite ' )
			if codeLangue then
				wiki.minsert( 'lang="', codeLangue, '" ' )
			end
			wiki.minsert( 'style="font-style:normal">', args.titreChap )
			if args['sous-titre chapitre'] then
				wiki.minsert( ( codeLangue and ': ' ) or ' : ', args['sous-titre chapitre'] )
			end
			wiki.minsert( '</cite> »' )
		else
			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
			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 lang="', codeLangue, dir, '">')
		else
			wiki.minsert( '<cite>')
		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( ( codeLangue and ': ' ) or ' : ', sousTitre )
		end
		if lienTitre then
			 wiki.minsert( ']]' )
		end
		wiki.minsert( '</cite>' )
		
	else
		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' )
	if original and original ~= args.titre then
		wiki.minsert( ' [« ', original, ' »]' )
	end
	local traducteur = not auteur and validArg( 'traducteur', 'trad', 'traduction' )
	if traducteur  then
		wiki.minsert( ', ', Outils.abr{ 'trad.', 'traduction', nbsp='+' }, traducteur )
	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
	
	-- 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' )
	if numeroCollection then
		wiki.minsert( ' (', Commun.numero, numeroCollection, ')' ) 
	end	 
	
	-- date, réimpression et éditions
	local annee = validArg( 'année', 'date' )
	if annee then
		wiki.minsert( ', ', Commun.inscriptionDate( args ) )
	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', 'jstor', 'url texte', 'pmid', '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' ) ) 
		)
		
		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
		
		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 sue le passage concerné
	local partie = validArg( 'partie' )
	if partie then
		wiki.minsert( ', partie&nbsp;',  Commun.romain( partie ) )
	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 codeLangue then
			Langue = Langue or require( 'Module:Langue' )
			titreChapitre = Langue.lang{ codeLangue, titreChapitre }
		end
		if numeroChapitre then
			wiki.minsert( ' (« ', titreChapitre, ' »)' )
		else
			wiki.minsert( ', « ', titreChapitre, ' »' )
		end
	end	
	local passage = validArg( 'passage', 'page' )
	if passage then
		wiki.minsert( ', ', Commun.page, passage )
	end	
	
	-- fin des span (COinS et id) et de la description de l'ouvrage
	 wiki.minsert( '</span></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 then
		wiki.minsert( 
			categLangue and '[[Catégorie:Article utilisant le modèle Ouvrage avec un paramètre langue non reconnu]]',
			categTitre and '[[Catégorie:Page utilisant un modèle avec une syntaxe erronée|Ouvrage]]',
			categTitreChapitre and '[[Catégorie:Page utilisant un modèle avec une syntaxe erronée|Chapitre]]',
			categTitreOuvrage and '[[Catégorie:Page utilisant un modèle avec une syntaxe erronée|Chapitre]]'
		)
	end

	
	return wiki.concat()
end


return Ouvrage