« Module:Biblio/Commun » : différence entre les versions
Contenu supprimé Contenu ajouté
Aucun résumé des modifications |
mAucun résumé des modifications |
||
Ligne 233 : | Ligne 233 : | ||
local liste = { } |
local liste = { } |
||
-- |
-- insertlist 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, |
-- Si istexte = true, le deuxième élément de tab est considéré comme du texte, |
||
-- sinon comme le nom d'un paramètre. |
-- sinon comme le nom d'un paramètre. |
||
Ligne 242 : | Ligne 242 : | ||
end |
end |
||
end |
end |
||
-- norme du COinS |
-- norme du COinS |
||
insertList( 'ctx_ver', 'Z39.88-2004' ) |
insertList( 'ctx_ver', 'Z39.88-2004' ) |
||
Ligne 250 : | Ligne 250 : | ||
insertList( 'rft_val_fmt', 'info:ofi/fmt:kev:mtx:journal' ) |
insertList( 'rft_val_fmt', 'info:ofi/fmt:kev:mtx:journal' ) |
||
insertList( 'rft.genre', 'article' ) |
insertList( 'rft.genre', 'article' ) |
||
insertList( 'rft.atitle', Outils.texteLien( args.titre ) ) |
insertList( 'rft.atitle', Outils.texteLien( Outils.texteAdresse( args.titre ) ) ) |
||
insertList( 'rft.jtitle', Outils.texteLien( validArg( 'périodique', 'revue', 'journal' ) ) ) |
insertList( 'rft.jtitle', Outils.texteLien( validArg( 'périodique', 'revue', 'journal' ) ) ) |
||
insertList( 'rft.issue', validArg( 'numéro', 'no', 'issue' ) ) |
insertList( 'rft.issue', validArg( 'numéro', 'no', 'issue' ) ) |
||
Ligne 282 : | Ligne 282 : | ||
local a1, a2, a3 = mw.ustring.match( auteur, '^([^ ]+) ?([^ ]*) ?(.-)$' ) |
local a1, a2, a3 = mw.ustring.match( auteur, '^([^ ]+) ?([^ ]*) ?(.-)$' ) |
||
if Outils.notEmpty( a3 ) then |
if Outils.notEmpty( a3 ) then |
||
local a2len = mw.ustring.len( a2 ) |
|||
if a2len == 1 or ( a2len == 2 and mw.ustring.sub( a2, -1 ) == "." ) then |
|||
-- a1 est le prénom, a2 et a3 le nom |
-- a1 est le prénom, a2 une initiale et a3 le nom |
||
insertList( 'rft.aufirst', a1 |
insertList( 'rft.aufirst', a1 ) |
||
⚫ | |||
insertList( 'rft.aulast', a3 ) |
insertList( 'rft.aulast', a3 ) |
||
else |
else |
||
-- |
-- a2 peut être le deuxième prénon ou le début du nom => rft.au plus générique. |
||
insertList( 'rft. |
insertList( 'rft.au', auteur ) |
||
⚫ | |||
end |
end |
||
elseif Outils.notEmpty( a2 ) then |
elseif Outils.notEmpty( a2 ) then |
||
Ligne 301 : | Ligne 302 : | ||
end |
end |
||
-- les autres auteurs, la norme ne |
-- les autres auteurs, la norme ne prévoit pas de séparation |
||
for i = 2, 20 do |
for i = 2, 20 do |
||
local nom_i = Outils.texteLien( validArg( 'nom' .. i ) ) |
local nom_i = Outils.texteLien( validArg( 'nom' .. i ) ) |
Version du 23 septembre 2013 à 17:55
[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
: _ ;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ésanné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 dateISOModule:Langue
– fonctions codeLangue2 et indicationMultilingue ; chargé seulement si un paramètrelangue
,lang
,lien langue
oulanguage
est renseignéModule:Langue/Data
– chargé seulement si le paramètrelangue originale
est renseigné
La documentation de ce module est générée par le modèle {{Documentation module}}.
Elle est incluse depuis sa sous-page de documentation. Veuillez placer les catégories sur cette page-là.
Les éditeurs peuvent travailler dans le bac à sable (modifier).
Voir les statistiques d'appel depuis le wikicode sur l'outil wstat et les appels depuis d'autres modules.
-- 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 = [=[ <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>[[[' .. ref .. '|détail de l’édition]]]</small>'
end
function Commun.detailEditions( ref )
return '<small>[[[' .. ref .. '|détail des éditions]]]</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 = validArg( 'directeur' .. i )
lien = validArg( 'lien auteur' .. i )
end
if prenom then
prenom = prenom .. ' '
else
prenom = ''
end
resp = args['responsabilité' .. i]
if dir then
if resp then
precision = ' (' .. directeur .. ' et ' .. resp .. ')'
else
precision = ' (' .. directeur .. ')'
end
elseif 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, 'auteur' .. i, 'author' .. i )
end
if validArg( 'et al.', 'et alii' ) 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, abrev, texte )
if arg then
table.insert( liste, abr{ abrev, 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
-- émule le modèle:Inscription date
Commun.inscriptionDate = Date.inscriptionDate
-- voir Modèle:COinS bibliographique
-- NISO Z39.88
-- http://www.openurl.info/registry
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 = { }
-- insertlist 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 ) )
end
end
-- norme du COinS
insertList( 'ctx_ver', 'Z39.88-2004' )
-- genre, titre et sous-titre
if genre == 'article' then
insertList( 'rft_val_fmt', 'info:ofi/fmt:kev:mtx:journal' )
insertList( 'rft.genre', 'article' )
insertList( 'rft.atitle', Outils.texteLien( Outils.texteAdresse( args.titre ) ) )
insertList( 'rft.jtitle', Outils.texteLien( validArg( 'périodique', 'revue', 'journal' ) ) )
insertList( 'rft.issue', validArg( 'numéro', 'no', 'issue' ) )
else
-- genre = ouvrage ou chaitre
insertList( 'rft_val_fmt','info:ofi/fmt:kev:mtx:book' )
if genre == 'chapitre' then
insertList( 'rft.genre', 'bookitem' )
else
insertList( 'rft.genre', 'book' )
end
insertList( 'rft.btitle', Outils.texteLien( args.titre ) )
insertList( 'rft.atitle', Outils.texteLien( validArg( 'titre chapitre', 'titreChap' ) ) )
-- donnée sur l'éditeur
insertList( 'rft.place', validArg( 'lieu' ) )
insertList( 'rft.pub', Outils.texteLien( validArg( 'éditeur', 'édition' ) ) )
insertList( 'rft.edition', args["numéro d'édition"] )
end
insertList( 'rft.stitle', args['sous-titre'] )
-- Premier auteur, séparé en noms et prénoms
local nom = Outils.texteLien( validArg( 'nom1', 'nom', 'last1', 'last' ) )
if nom then
insertList( 'rft.aulast', nom )
insertList( 'rft.aufirst', validArg( 'prénom1', 'prénom', 'first1', 'first' ) )
else
local auteur = Outils.texteLien( validArg( 'auteur', 'auteur1' ) )
if auteur then
-- séparation de auteurs au niveau des deux premiers espaces
local a1, a2, a3 = mw.ustring.match( auteur, '^([^ ]+) ?([^ ]*) ?(.-)$' )
if Outils.notEmpty( a3 ) then
local a2len = mw.ustring.len( a2 )
if a2len == 1 or ( a2len == 2 and mw.ustring.sub( a2, -1 ) == "." ) then
-- a1 est le prénom, a2 une initiale et a3 le nom
insertList( 'rft.aufirst', a1 )
insertList( 'rft.auinitm', a2 )
insertList( 'rft.aulast', a3 )
else
-- a2 peut être le deuxième prénon ou le début du nom => rft.au plus générique.
insertList( 'rft.au', auteur )
end
elseif Outils.notEmpty( a2 ) then
-- a1 prénom, a2 nom
insertList( 'rft.aufirst', a1 )
insertList( 'rft.aulast', a2 )
else
insertList( 'rft.aulast', a1 )
end
end
end
-- les autres auteurs, la norme ne prévoit pas de séparation
for i = 2, 20 do
local nom_i = Outils.texteLien( validArg( 'nom' .. i ) )
if nom_i then
local prenom_i = validArg( 'prénom' .. i )
if prenom_i then
insertList( 'rft.au', nom_i .. ', ' .. prenom_i )
else
insertList( 'rft.au', nom_i )
end
else
local auteur_i = Outils.texteLien( validArg( 'auteur' .. i ) )
if auteur_i then
insertList( 'rft.au', auteur_i )
else
break
end
end
end
-- date
local datePub = Date.dateISO( args )
if datePub then
insertList( 'rft.date', datePub )
else
insertList( 'rft.date', args.date )
end
-- doonées physique de la publication
insertList( 'rft.volume', validArg( 'volume', 'vol' ) )
insertList( 'rft.pages', validArg( 'passage', 'page' ) )
insertList( 'rft.spage', args['page début chapitre'] )
insertList( 'rft.tpages', args['pages totales'] )
-- 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