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

Contenu supprimé Contenu ajouté
Od1n (discussion | contributions)
retouches
Od1n (discussion | contributions)
m trim trailing spaces, une plaie en moins pour les copier-collers
Ligne 12 :
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
 
function Commun.validTextArg( args, name, ... )
local texte = args[name]
if type( texte ) == 'string' and texte ~= '' and texte:match( '%S' ) then
Ligne 26 :
 
 
-- Abréviation utiles
Commun.chap = abr{ 'chap.', 'chapitre(s)', nbsp='+' }
Commun.coll = abr{ 'coll.', 'collection', nbsp='+' }
Ligne 44 :
end
 
function Commun.detailEditions( ref )
return '<small>&#91;[[' .. ref .. '|détail des éditions]]&#93;</small>'
end
Ligne 99 :
local i = 1
local idTab, id2Tab = { }, { }
 
while nom or auteur_i do
if auteur_i and not nom then
-- tentative de séparation de l'auteur en prénom nom.
-- Enregistre le résultat dans args pour les COinS.
auteur_i = Outils.texteLien( auteur_i )
Ligne 146 :
table.insert( idTab, mw.uri.anchorEncode( nom ) )
table.insert( id2Tab, mw.uri.anchorEncode( auteur_i ) )
 
if i == 4 then
break
Ligne 156 :
auteur_i = validArg( 'auteur' .. i, 'author' .. i )
end
 
if #idTab < 4 and validArg( 'auteur institutionnel' ) then
table.insert( idTab, mw.uri.anchorEncode( validArg( 'auteur institutionnel' ) ) )
table.insert( id2Tab, idTab[#idTab] )
end
 
local annee = validArg( 'année', 'year', 'date' )
if annee then
Ligne 181 :
table.insert( id2Tab, annee )
end
 
if #idTab > 0 then
id = ' id="' .. table.concat( idTab ) .. '"'
Ligne 188 :
id2 = false
end
else
id = ''
end
end
 
local spaninitial, spanfinal
if id2 then
Ligne 228 :
if lang then
Langue = require( 'Module:Langue' )
 
-- on essaie le code de langue complet (nécessaire pour les langues avec plusieurs mot comme "grec ancien")
local codeLangue = Langue.codeLangue2( lang )
Ligne 237 :
return Langue.indicationMultilingue{ codeLangue }, codeLangue
end
 
-- si la langue n'a pas été trouvée on considère qu'il y a plusieurs langues
-- séparation des langues s'il y en a plusieurs
local listeLangue = mw.text.split( lang, '[+,;:/ %.]+' )
 
-- code langue principal qui sera appliqué aux titres
codeLangue = Langue.codeLangue2( listeLangue[1] )
 
if codeLangue == '' then
if type( args.categ ) == 'table' then
Ligne 256 :
args.categ.langue = indicationLangue:find( '???', 1, true )
end
 
if codeLangue ~= 'fr' then
return indicationLangue, codeLangue
Ligne 277 :
return ''
end
 
if nom or auteur then
-- clarification des paramètres
args['prénom1'] = validArg( 'prénom1', 'prénom', 'first1', 'first' )
args['postnom1'] = validArg( 'postnom1', 'postnom' )
 
args.directeur1 = validArg( 'directeur1', 'directeur' )
args['lien auteur1'] = validArg( 'lien auteur1', 'lien auteur', 'author-link' )
end
 
-- préparation des variables
local listeRresponsables = { } -- contiendra un élément pour chaque nom
Ligne 292 :
local prenom, postnom, 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 or auteur do
 
-- nom de l'auteur
if not auteur then
Ligne 312 :
end
end
 
-- lien sur l'auteur
auteur = Commun.fusionTexteLien( auteur, args['lien auteur' .. i], args.categ)
Ligne 337 :
auteur = validArg( 'auteur' .. i, 'author' .. i )
end
 
local listeAuteurs
local et_al = ''
Ligne 346 :
listeAuteurs = mw.text.listToText( listeRresponsables )
end
 
if auteurInstitutionnel then
if #listeRresponsables > 0 then
Ligne 363 :
function Commun.responsabiliteSecondaire( args, validArg )
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 )
Ligne 370 :
end
end
 
-- langue originale et traducteur
local trad = validArg( 'traducteur', 'trad', 'traduction' )
local langueOriginale = validArg( 'langue originale' )
if langueOriginale then
local Languedata = mw.loadData( 'Module:Langue/Data' )
langueOriginale = Languedata[langueOriginale] and Languedata[langueOriginale].nom
Ligne 384 :
trad = ''
end
if mw.ustring.sub( langueOriginale, 1, 1 ):match( '[a, e, é, è, i, o, u, y]' ) or
langueOriginale == 'hébreu' then
trad = "de l'" .. langueOriginale .. trad
Ligne 392 :
end
insertAbr( trad, 'trad.', 'traduction' )
 
-- ajout des différents responsables
insertAbr( validArg( 'préface' ), 'préf.', 'préface' )
Ligne 403 :
table.insert( liste, args['champ libre'] )
end
 
-- concaténation de l'ensemble
local texte = table.concat( liste, ', ')
if texte ~= '' then
return ' (' .. texte .. ')'
end
Ligne 443 :
date = date:gsub( '^(%d%d%d%d%-%d%d%-%d%d)t[%d:+-]+$', '%1') -- Date iso avec l'heure : suppression de l'heure
local t, jma = Date.separationJourMoisAnnee( date )
if t and ( Date.determinationMois( jma.mois ) or Date.valideSaison( jma.mois ) ) then
args['année'] = jma.annee
jma.nolinks = true
jma.nocat = true
return Date.modeleDate( jma )
else
-- date non reconnue, on essaye Month day, year
local mois, jour, annee = mw.ustring.match( date, '^([%a]+)%s*(%d%d?)[,%s]+(%d+)$' )
Ligne 465 :
if type( texte ) == 'string' then
if texte:match( '[%[<]' ) then
local function texteDuLien( l, t )
return ( t ~= '' and t ) or l
end
-- nettoyage des liens interne
Ligne 483 :
-- NISO Z39.88
-- http://www.openurl.info/registry
function Commun.COinS( args, validArg, genre )
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 )
Ligne 495 :
end
end
 
-- norme du COinS
insertList( 'ctx_ver', 'Z39.88-2004' )
 
-- genre, titre et sous-titre
if genre == 'article' then
Ligne 516 :
insertList( 'rft.btitle', nettoyageTexte( args.titre ) )
insertList( 'rft.atitle', nettoyageTexte( validArg( 'titre chapitre', 'titreChap' ) ) )
 
-- donnée sur l'éditeur
insertList( 'rft.place', Outils.texteLien( validArg( 'lieu', 'location' ) ), nil )
Ligne 523 :
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' ) )
Ligne 532 :
else
local auteur = Outils.texteLien( validArg( 'auteur', 'auteur1' ) )
if auteur then
insertList( 'rft.au', auteur )
end
end
 
-- les autres auteurs, la norme ne prévoit pas de séparation
for i = 2, 20 do
Ligne 543 :
local prenom_i = validArg( 'prénom' .. i )
local postnom_i = validArg( 'postnom' .. i)
if prenom_i and postnom_i then
insertList( 'rft.au', nom_i .. ' ' .. postnom_i .. ', ' .. prenom_i )
elseif prenom_i then
Ligne 561 :
end
end
 
if validArg( 'auteur institutionnel' ) then
insertList( 'rft.aucorp', args['auteur institutionnel'] )
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' ) )
Ligne 579 :
insertList( 'rft.spage', args['page début chapitre'] )
insertList( 'rft.tpages', args['pages totales'] )
 
 
-- références internationales
insertList( 'rft.isbn', args.isbn )
Ligne 588 :
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/' )
 
local contextObject = table.concat( liste, '&' )
 
-- calcul d'un id pour que le span vide ne soit pas supprimé par tydy ( cf. https://bugzilla.wikimedia.org/show_bug.cgi?id=27786 )
local id=0
for i = 1, #contextObject do
id = id + string.byte( contextObject, i )
end
 
return '<span class="Z3988" title="' .. contextObject .. '" id="COinS_' .. id ..'"></span>'
end
 
-- voir Modèle:Module biblio/indication de langue
-- la langue est passée en paramètre
function Commun.indicationDeLangue2( args, validArg, lang )
if lang then
Langue = require( 'Module:Langue' )
 
-- on essaie le code de langue complet (nécessaire pour les langues avec plusieurs mot comme "grec ancien")
local codeLangue = Langue.codeLangue2( lang )
 
if codeLangue == 'fr' then
return ''
Ligne 617 :
return Langue.indicationMultilingue{ codeLangue }, codeLangue
end
 
-- si la langue n'a pas été trouvée on considère qu'il y a plusieurs langues
-- séparation des langues s'il y en a plusieurs
local listeLangue = mw.text.split( lang, '[+,;:/ %.]+' )
 
-- code langue principal qui sera appliqué aux titres
codeLangue = Langue.codeLangue2( listeLangue[1] )
 
if codeLangue == '' then
return Langue.indicationMultilingue( listeLangue ), nil, true
Ligne 631 :
local indicationLangue = Langue.indicationMultilingue( listeLangue )
local categLangue = indicationLangue:find ( '???', 1, true )
 
if codeLangue ~= 'fr' then
return indicationLangue, codeLangue, categLangue