Module:Biblio/Commun

Cette page est protégée.
Une page de Wikipédia, l'encyclopédie libre.
Ceci est une version archivée de cette page, en date du 17 septembre 2013 à 08:55 et modifiée en dernier par Zebulon84 (discuter | contributions). Elle peut contenir des erreurs, des inexactitudes ou des contenus vandalisés non présents dans la version actuelle.
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)

 Documentation[voir] [modifier] [historique] [purger]

Utilisation

Ce module est destiné à être utilisé par les autres modules biblios, et ne fournit aucune fonction directement utilisable depuis l'espace modèle.

Fonctions utilisables depuis un autre module

Constantes

Parfois suivies ou précédées d'une espace insécable, ici remplacée par « _ ».

  • chap : chap._ ;
  • coll : coll._ ;
  • ed : _éd. ;
  • nbp : _p. ;
  • numero : no_ ;
  • numeros : nos_ ;
  • page : p._ ;
  • pages : p._ ;
  • ['page(s)'] : p._ ;
  • plume : _Ouvrage utilisé pour la rédaction de l'article ;
  • premiere : 1re ;
  • reimpr : réimpr._ ;
  • tome : t._ ;
  • vol : vol._ ;

Fonctions

  • validTextArg( args, name, ... ) – retourne le premier paramètre nommé n'étant pas vide. (copie de Outils.validTextArg mais sans le "trim" pour performances)
  • detailEdition( ref ) – affiche « [détail de l’édition] ».
  • detailEditions( ref ) – affiche « [détail des éditions] ».
  • romain( texte ) – affiche le texte en capitales.
  • fusionTexteLien( texte, lien, categ ) – fusionne un texte avec une cible de lien optionnelle, en supprimant les liens externes.
  • spanInitial( args, validArg ) – crée un span de class ouvrage avec un id correspondant aux quatre premiers noms et à l'année.
  • libelle( args ) – affiche en <small> et entre crochet le paramètre libellé.
  • commentaire( args ) – affiche le paramètre commentaire dans un <div>.
  • indicationDeLangue( args, validArg ) – affiche un ou plusieurs indicateur de langue type (en) en fonction du contenu du paramètre langue. Ignore le français s'il est seul.
  • responsabilitePrincipale( args, validArg ) – affiche la liste des auteurs avec leur responsabilité.
  • responsabiliteSecondaire( args, validArg ) – affiche entre parenthèse traducteur, illustrateur, photographe...
  • inscriptionDate( frame ) – affiche une date correctement formatée, sans lien. L'année est obligatoire. Paramètres nommés année, mois, jour, ou paramètre unique nommé date.
  • formatePagesTotales( pages ) – retourne la valeur en y ajoutant l'abréviation « p. » derrière, si un nombre de pages est détecté.
  • formatePassage( passage ) – retourne la valeur en y ajoutant l'abréviation « p. » la plus précise possible devant, si un numéro de page ou un intervalle de pages est détecté.
  • COinS( args, validArg, genre ) – génère un « Context Object in Span », suivant la norme ANSI Z39.88-2004

Fonctions internes

  • texteLien( str ) – à partir d'un lien wiki, retourne son texte et sa cible.
  • abr( args ) – génère une abréviation.
  • nettoyageTexte( texte ) – retourne le texte sans lien interne, externe ni balise HTML.

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

  • Module:Date – fonction dateISO
  • Module:Langue – fonctions codeLangue2 et indicationMultilingue ; chargé seulement si un paramètre langue, lang, lien langue ou language est renseigné
  • Module:Langue/Data – chargé seulement si le paramètre langue originale est renseigné


-- Les fonctions du module Util sont des éléments nécessaire au modules Ouvrage, Article, ...

local Commun = {}


local Date = require( 'Module:Date' )
local Outils = require( 'Module:Outils' )
local TableBuilder = require( 'Module:TableBuilder' )
local Langue -- = require( 'Module:Langue' ) ne sera chargé que si nécessaire

local validTextArg = Outils.validTextArg
local abr = Outils.abr      -- fonction abréviation discréte

-- extractArgs permet de récupérer les arguement du modèle, 
-- ou la table transmise à la fonction par une autre fonction d'un module
local extractArgs = Outils.extractArgs


-- Abréviation utiles 
Commun.chap =   abr{ 'chap.', 'chapitre(s)', nbsp='+' }
Commun.coll =   abr{ 'coll.', 'collection', nbsp='+' }
Commun.ed =     abr{ 'éd.', 'édition', nbsp='-' }
Commun.nbp =    abr{ 'p.', 'pages', nbsp='-' }
Commun.numero = abr{ 'n<sup>o<sup>', 'numéro', nbsp='+' }
Commun.page =   abr{ 'p.', 'page(s)', nbsp='+' }
Commun.plume = [=[&nbsp;<span title="Ouvrage utilisé pour la rédaction de l'article">[[Image:Nuvola apps ksig horizonta.png|30px|link=|alt=Ouvrage utilisé pour la rédaction de l'article]]</span>]=]
Commun.premiere = abr{ '1<sup>re</sup>', 'première' }
Commun.reimpr = abr{ 'réimpr.', 'réimpression', nbsp='+' }
Commun.tome = abr{ 't.', 'tome', nbsp='+' }
Commun.vol = abr{ 'vol.', 'volume', nbsp='+' }


function Commun.detailEdition( ref ) 
	return '<small>&#91;[[' .. ref .. '|détail de l’édition]]&#93;</small>'
end

function Commun.detailEditions( ref ) 
	return '<small>&#91;[[' .. ref .. '|détail des éditions]]&#93;</small>'
end


-- affiche le texte en nombre romain majuscule.
function Commun.romain( texte )
    local a = '<span class="romain" style="text-transform:uppercase">'
    local b = '</span>'
    return a, texte, b
end


-- voir Modèle:Module biblio/span initial
function Commun.spanInitial( args, validArg )
	validArg = validArg or function ( ... ) return validTextArg( args, ... ) end
	local idTab = { validArg( 'id' ) }
	
	if #idTab == 0 then
		local auteur = validArg( 'nom1', 'nom', 'auteur1', 'auteur', 'last1', 'last', 'author1', 'author' )
		if auteur then
			table.insert( idTab, mw.uri.anchorEncode( auteur ) )
			for i = 2, 4 do
			    auteur = validArg( 'nom' .. i, 'auteur' .. i, 'last' .. i, 'author' .. i )
				if auteur then
					table.insert( idTab, mw.uri.anchorEncode( auteur ) )
				else
					break
				end
			end 
		end
		local annee = validArg( 'année', 'year' )
		if annee then
			table.insert( idTab, mw.uri.anchorEncode( annee ) )
		end
	end	
	
	local id	
	if #idTab > 0 then 
		table.insert( idTab, 1, ' id="' )
		table.insert( idTab, '"' )
		id = table.concat( idTab )
	end 
	 
	return '<span class="ouvrage"', id, ' title ="">'
end

-- voir Modèle:Module biblio/libellé
function Commun.libelle( args )
	local lib = args['libellé'] or ''
	if lib ~= '' then
		lib = '<small>[', lib, ']</small> '
	end
	return lib
end

-- voir Modèle:Commentaire biblio
function Commun.commentaire( args )
	if Outils.trim( args.commentaire ) then
		local a = '<div style="Margin-top:0.1em ;margin-left:2em; line-height:1.5; margin-bottom:0.5em;">'
		local b = '</div>'
		return a, args.commentaire, b
	end
	return ''
end

-- voir Modèle:Module biblio/indication de langue
function Commun.indicationDeLangue( args, validArg )
	local lang = validArg( 'langue', 'lang', 'lien langue', 'language' )
	if lang then
		Langue = require( 'Module:Langue' )
		local codeLangue = Langue.codeLangue2( lang )
		if codeLangue == '' then
			return '', nil, true
		elseif codeLangue ~= 'fr' then
			return Langue.indicationDeLangue { '', codeLangue }, codeLangue
		end
	end
	return ''
end


-- voir Modèle:Module biblio/responsabilité principale
function Commun.responsabilitePrincipale( args, validArg, autolien )
	validArg = validArg or function ( ... ) return validTextArg( args, ... ) end
	
	local nom = validArg( 'nom1', 'nom', 'auteur1', 'auteur', 'last1', 'last', 'author1', 'author' )
	if nom == nil then
		return ''
	end
	
	-- préparation des variables
	local listeRresponsables = { }  -- contiendra un élément pour chaque nom
	local directeur = abr { 'dir.', 'directeur de publication' }
	autolien = autolien or not validArg( 'nolien' )
	local prenom, dir, responsable, lien , precision, resp
	local i = 1
	
	-- boucle sur chaque nom, assemble toutes les caractéristique et ajoute l'ensemble à la liste.
	while nom do
		if i == 1 then
			prenom = validArg( 'prénom1', 'prénom', 'first1', 'first' )
			dir = validArg( 'directeur1', 'directeur' )
			lien = validArg( 'lien auteur1', 'lien auteur', 'authorlink' )
				or ( autolien and validArg( 'nom' ) and ( ( args['prénom'] or '') .. ' ' .. args.nom ) )
		else
			prenom = validArg( 'prénom' .. i, 'first' .. i )
			dir = args['directeur' .. i]
			lien = args['lien auteur' .. i]
		end
		if prenom then 
			prenom = prenom .. ' ' 
		else
			prenom = ''
		end
		
		resp = args['responsabilité' .. i]
		if validArg( 'dir' ) then
			if validArg( 'resp' ) then 
				precision = ' (' .. directeur .. ' et ' .. resp .. ')'
			else
				precision = ' (' .. directeur .. ')'
			end
		elseif validArg( 'resp' ) then 
			precision = ' (' .. resp .. ')'
		else
			precision = ''
		end
		
		if lien then
			responsable = '[[' .. lien .. '|' .. prenom .. nom .. ']]' .. precision
		else
			responsable = prenom .. nom .. precision
		end
		
		table.insert( listeRresponsables, responsable )
		
		i = i + 1
		nom = validArg( 'nom' .. i, 'last' .. i )
	end
	
	if validArg( 'et al.', 'et alii' ) == 'oui' then
		local et_al = " ''" .. abr { "et al.", "et alii (et d’autres)" } .. "''"
		return table.concat( listeRresponsables, ', ' ) .. et_al
	else
		return mw.text.listToText( listeRresponsables )
	end
end


-- voir Module biblio/responsabilité secondaire
function Commun.responsabiliteSecondaire( args, validArg )
	validArg = validArg or function ( ... ) return validTextArg( args, ... ) end
	local liste = { }
	
	-- fonction qui teste l'existence d'un paramètre et insérere  dans liste une abréviation discrète suivi de ce paramètre
	local function insertAbr( arg, abr, texte )
		if arg then
			table.insert( liste, abr { abr, texte } .. '&nbsp;' .. arg )
		end
	end
	
	-- ajout des différents responsables
	local trad = validArg( 'traducteur', 'trad', 'traduction' ) 
	insertAbr( trad, 'trad.', 'traduction' )
	insertAbr( validArg( 'préface' ), 'préf.', 'préface' )
	insertAbr( validArg( 'postface' ), 'post.', 'postface' )
	insertAbr( validArg( 'illustrateur' ), 'ill.', 'illustrations' )
	insertAbr( validArg( 'photographe' ), 'photogr.', 'photographies' )
	if validArg( 'champ libre' ) then
		table.insert( liste, args['champ libre'] )
	end
	
	-- concaténation de l'ensemble
	local texte = table.concat( liste, ', ')
	if texte ~= '' then 
		return '(' .. texte .. ')'
	else
		return ''
	end
end

-- voir émule le modèle:Inscription date
-- la détection des arguments permet d'utilisé la fonction depuis un modèle, depuis invoke, ou depuis une autre fonction.
-- pour facilité l'écriture de lua, annee (sans accent) est accepté lors de l'appel depuis lua.
function Commun.inscriptionDate(frame)
    local args = extractArgs( frame )
    return require( 'Module:Date' ).modeleInscriptionDate( args )
--[[	local annee, mois, jour
	if frame.getParent then
		annee = frame:getParent().args ['année'] or frame.args ['année'] or frame.args.annee or ''
		mois = frame:getParent().args.mois or frame.args.mois or ''
		jour = frame:getParent().args.jour or frame:getParent().args ['quantième'] or frame.args.jour or ''
	else
		annee = frame ['année'] or frame.annee or ''
		mois = frame.mois or ''
		jour = frame.jour or ''
	end
	if annee == '' then
		-- si annee n'est pas précisé, on utilise la paramètre date
		annee = frame.getParent and (frame:getParent().args.date or frame.args.date) or frame.date or ''
		if annee == '' then 
			return ''
		else 
			return '<span class="nowrap">' .. annee .. '</span>'
		end
	else
		-- si l'année est renseigné, on essaye de trouver le mois
		mois = fun.determinationMois (mois, frame)
		if mois then
			mois = mois .. '&nbsp;'
			if jour ~= '' then 
				-- si le mois est valide on détermine le jour
				jour = tonumber(jour) or jour	   -- suppresion des 0 qui trainent
				if jour == 1 or jour == '1er' then 
					jour = '<abbr class="abbr" title="Premier">1<sup>er</sup></abbr>'
				end
				jour = jour .. '&nbsp;'
			end
			return jour .. mois .. annee
		else 
			return annee
		end
	end]]
end


-- voir Modèle:COinS bibliographique
function Commun.COinS( args, validArg, genre ) 
	validArg = validArg or function ( ... ) return validTextArg( args, ... ) end
	if validArg( 'COinS', 'coins', 'COins' ) == 'non' then
		return '<span>'
		-- retour systématique d'un span qui pourra donc être systématiquement fermé.
	end
	
	local liste = { }
	
	-- la fonction insert liste ajoute à la table 'liste' un couple 'nom Coins normalisé' - 'donnée' 
	-- Si istexte = true, le deuxième élément de tab est considéré comme du texte, 
	-- sinon comme le nom d'un paramètre.
	local function insertList( key, value, prefix )
		prefix = prefix or ''
		if type( value ) == 'string' and value ~= '' then
			table.insert( liste, key .. '=' .. mw.uri.encode( prefix .. value ) )
			return true
		end
	end
	
	-- norme du COinS
	insertList( 'ctx_ver', 'Z39.88-2004' )
	
	-- genre, titre et sous-titre
	local tabdoc = { 
		chapitre = { 'book', 'bookitem', 'rft.btitle', 'rft.atitle', 'titre section' },
		article = { 'journal', 'article', 'rft.atitle', 'rft.jtitle', 'périodique' },
		ouvrage = { 'book', 'book', 'rft.btitle', 'rft.atitle', 'titre section' },
	}
	local doc = tabdoc[ genre ]
	if not doc then
		return ''
	end
	insertList( 'rft_val_fmt', doc[1], 'info:ofi/fmt:kev:mtx:' )
	insertList( 'rft.genre',  doc[2] )
	insertList( doc[3], args.titre )
	insertList( doc[4], args[ doc[5] ] )
	insertList( 'rft.stitle', args['sous-titre'] )
	
	-- liste des auteur, noms - prénoms
	if insertList( 'rft.aulast', validArg( 'nom1', 'nom', 'last1', 'last' ) ) then
		insertList( 'rft.aufirst', validArg( 'prénom1', 'prénom', 'first1', 'first' ) )
	else
		insertList( 'rft.au', args.auteur )
	end
	
	for i = 2, 20 do
		local nom = args['nom' .. i]
		if type( nom ) ~= 'string' or nom == '' then
			break 
		else
			local prenom = validArg( 'prénom' .. i )
			if prenom then 
				insertList( 'rft.au', nom .. ', ' .. prenom )
			else
				insertList( 'rft.au', nom )
			end
			
		end
	end
	
	-- date
	local datePub = Date.dateISO( args )
	if datePub then 
		insertList( 'rft.date', datePub )
	else
		insertList( 'rft.date', args.date )
	end
	
	-- doonée phisique de la publication
	insertList( 'rft.volume', validArg( 'volume', 'vol' ) )
	insertList( 'rft.issue', validArg( 'numéro', 'no', 'issue' ) )
	insertList( 'rft.pages', args.pages )
	insertList( 'rft.spage', args['page début'] )
	insertList( 'rft.tpages', args['pages totales'] )
	
	-- donnée sur l'éditeur
	insertList( 'rft.place', args.lieu )
	insertList( 'rft.pub', validArg( 'éditeur', 'édition' ) )
	insertList( 'rft.edition', args["numéro d'édition"] )
	
	-- références internationales
	insertList( 'rft.isbn', args.isbn )
	insertList( 'rft.issn', args.issn )
	insertList( 'rft_id', args.doi, 'info:doi/' )
	insertList( 'rft_id', args.pmid, 'info:pmid/' )
	insertList( 'rft_id', args.oclc, 'info:oclcnum/' )
	insertList( 'rft_id', args.url )
	
	-- referer : page Wikipedia ou se trouve cette référence
	insertList( 'rfr_id', 'fr.wikipedia.org:' .. mw.title.getCurrentTitle().fullText, 'info:sid/' )
	
	return '<span class="Z3988" title="' .. table.concat( liste, '&' ) .. '">'
end

return Commun