Module:Biblio/Ouvrage : Différence entre versions

De Lagny-sur-Marne Wiki
Aller à : navigation, rechercher
(Catégories spécifiques aux modèle ouvrage et chapitre)
(chapitre : préface avec les auteurs ouvrage)
 
(58 révisions intermédiaires par 8 utilisateurs non affichées)
Ligne 6 : Ligne 6 :
 
local Outils = require( 'Module:Outils' )
 
local Outils = require( 'Module:Outils' )
 
local TableBuilder = require( 'Module:TableBuilder' )
 
local TableBuilder = require( 'Module:TableBuilder' )
local Langue -- = require( 'Module:Langue' )   ne sera chargé que si nécessaire.
+
local Langue = require( 'Module:Langue' )
  
  
 
function Ouvrage.chapitre( args )
 
function Ouvrage.chapitre( args )
-- validArg renvoi le premier paramètre non vide, ou nil s'ils sont tous vides.
+
-- 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.
 
-- Seul les noms des paramètres doivent être transmis à la fonction.
local validArg = function ( ... ) return Outils.validTextArg( args, ... ) end
+
local validArg = function ( ... ) return Commun.validTextArg( args, ... ) end
 
 
-- titreChap est un paramètre différents de ceux du modèle ouvrage pour utilisé le même programme
+
-- titreChap est un paramètre différent de ceux du modèle ouvrage pour utiliser le même programme
args.titreChap = validArg( 'titre chapitre', 'chap', 'titre' )
+
args.titreChap = validArg( 'titre chapitre', 'chap', 'titre', 'title' )
 
if args.titre == args.titreChap then
 
if args.titre == args.titreChap then
 
args.titre = false
 
args.titre = false
 
end
 
end
args.titre = validArg( 'titre ouvrage', 'titre' )
+
args.titre = validArg( 'titre ouvrage', 'ouvrage', 'titre', 'title' ) or false
 
args['titre chapitre'] = false
 
args['titre chapitre'] = false
 
args.chap = false
 
args.chap = false
args['sous-titre chapitre'] = validArg( 'sous-titre chapitre', 'sous-titre' )  
+
args['sous-titre chapitre'] = validArg( 'sous-titre chapitre', 'sous-titre' ) or false
args['sous-titre'] = validArg( 'sous-titre ouvrage', 'sous-titre' )  
+
args['sous-titre'] = validArg( 'sous-titre ouvrage', 'sous-titre' )
 
if args['sous-titre chapitre'] == args['sous-titre'] then
 
if args['sous-titre chapitre'] == args['sous-titre'] then
 
args['sous-titre'] = false
 
args['sous-titre'] = false
 
end
 
end
 
args['lien titre'] = validArg( 'lien titre ouvrage', 'lien titre' )
 
args['lien titre'] = validArg( 'lien titre ouvrage', 'lien titre' )
return require( 'Module:Biblio/Ouvrage' ).ouvrage( args, true )
+
local preface = validArg( 'préface' )
 +
local auteurOuvrage = validArg( 'auteurs ouvrage', 'auteur ouvrage' )
 +
if preface and auteurOuvrage then
 +
args['auteurs ouvrage'] = ( validArg( 'auteurs ouvrage', 'auteur ouvrage' ) or '' ) .. ' (préf. ' .. preface .. ')'
 +
args['préface'] = ''
 +
end
 +
return Ouvrage.ouvrage( args, true )
 
end
 
end
  
  
 
function Ouvrage.ouvrage( args, chapitre )
 
function Ouvrage.ouvrage( args, chapitre )
-- La table wiki va recevoir tout les petits bouts de texte, et sera concaténtée à la fin.
+
-- La table wiki va recevoir tout les petits bouts de texte, et sera concaténée à la fin.
-- Elle utilise la metat-table de TableBuilder, permettant d'utiliser les fonctions de la  
+
-- Elle utilise la meta-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  
+
-- librairie table comme des méthodes. minsert permet d'insérer plusieurs éléments en une
-- seule fois en, ignorant les paramètre nil.
+
-- seule fois en, ignorant les paramètres nil.
 
local wiki = TableBuilder.new()
 
local wiki = TableBuilder.new()
 
 
-- validArg renvoi le premier paramètre non vide, ou nil s'ils sont tous vides.
+
-- 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.
 
-- Seul les noms des paramètres doivent être transmis à la fonction.
local validArg = function ( ... ) return Outils.validTextArg( args, ... ) end
+
local validArg = function ( ... ) return Commun.validTextArg( args, ... ) or false end
 
local genre = ( chapitre and 'chapitre' ) or 'ouvrage'
 
local genre = ( chapitre and 'chapitre' ) or 'ouvrage'
 
 
--Variables servant à la catégorisation
+
--Table servant à la catégorisation
local categTitre, categTitreChapitre, categTitreOuvrage, categLangue
+
args.categ = {}
 +
 
 
local modeNormal = not validArg( 'nocat' )
 
local modeNormal = not validArg( 'nocat' )
 
 
-- clarification paramètre nécéssaire pour les coins
+
-- Clarification des paramètres  nécessaires pour les COinS
 
args.titre = validArg( 'titre', 'title' )
 
args.titre = validArg( 'titre', 'title' )
 
args['pages totales'] = validArg( 'pages totales', 'pages' )
 
args['pages totales'] = validArg( 'pages totales', 'pages' )
 
args.pages = ''
 
args.pages = ''
 +
local lienExternes = validArg( 'lire en ligne', 'url texte', 'url', 'texte' )
 +
if args.format and not args['format électronique'] and lienExternes and string.match( args.format,"pdf" ) then
 +
args['format électronique'] = args.format
 +
args.format = false
 +
end
 +
 
 
 +
-- span initial (id) et libellé
 +
local spanInitial, spanFinal = Commun.spanInitial ( args, validArg )
 +
wiki.minsert( spanInitial,  Commun.libelle( args ) )
 
 
-- span initial (id) et libelé
+
-- Indication de langue
wiki.minsert( Commun.spanInitial ( args, validArg ) )
+
local indicLangue, codeLangue = Commun.indicationDeLangue ( args, validArg )
local libelle = validArg( 'libellé' )
+
local dir, attributsLangue
if libelle then
+
if Outils.notEmpty( indicLangue ) then
wiki.minsert( '<small>[', libelle, ']</small> ' )
+
wiki.minsert( indicLangue, ' ' )
 +
if codeLangue then
 +
dir = Langue.directionLangue( codeLangue )
 +
if dir == 'rtl' then
 +
attributsLangue = ' lang="' .. codeLangue .. '" dir="rtl"'
 +
else
 +
dir = nil
 +
attributsLangue = ' lang="' .. codeLangue .. '"'
 +
end
 +
end
 
end
 
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)
+
-- Liste des auteurs et de leurs responsabilités (principales et secondaires)
local auteur = validArg( 'nom1', 'nom', 'auteur1', 'auteur', 'auteurs', 'last1', 'last', 'author1', 'author' )
+
local auteur = validArg( 'nom1', 'nom', 'auteur1', 'auteur', 'auteurs', 'auteur institutionnel', 'last1', 'last', 'author1', 'author' )
 
if auteur then
 
if auteur then
 
if validArg( 'auteurs' ) then
 
if validArg( 'auteurs' ) then
 
wiki.minsert( args.auteurs )
 
wiki.minsert( args.auteurs )
else  
+
else
wiki.minsert( Commun.responsabilitePrincipale( args, validArg, true ) )
+
wiki.minsert( Commun.responsabilitePrincipale( args, validArg ) )
 
end
 
end
 
local coauteur = validArg( 'co-auteur', 'coauteurs', 'coauteur', 'coauthors' )
 
local coauteur = validArg( 'co-auteur', 'coauteurs', 'coauteur', 'coauthors' )
Ligne 83 : Ligne 104 :
 
if chapitre then
 
if chapitre then
 
if args.titreChap then
 
if args.titreChap then
wiki.minsert( '« <cite ' )
+
wiki.minsert( '<cite style="font-style:normal"', attributsLangue, '>« ', args.titreChap )
if codeLangue then
 
wiki.minsert( 'lang="', codeLangue, '" ' )
 
end
 
wiki.minsert( 'style="font-style:normal">', args.titreChap )
 
 
if args['sous-titre chapitre'] then
 
if args['sous-titre chapitre'] then
wiki.minsert( ( codeLangue and ': ' ) or ' : ', args['sous-titre chapitre'] )
+
wiki.minsert( ' : ', args['sous-titre chapitre'] )
 
end
 
end
wiki.minsert( '</cite> »' )
+
wiki.minsert( ' »</cite>' )
 
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' ) )
categTitreChapitre = true
+
args.categ.titreChapitre = true
 
end
 
end
 
 
if args.titre then
+
wiki.minsert( ', dans ' )
wiki.minsert( ', dans ' )
 
end
 
 
 
 
local auteurOuvrage = validArg( 'auteurs ouvrage', 'auteur ouvrage' )
 
local auteurOuvrage = validArg( 'auteurs ouvrage', 'auteur ouvrage' )
Ligne 107 : Ligne 122 :
 
end
 
end
 
 
-- titre
+
-- Titre
 
if args.titre then
 
if args.titre then
if codeLangue then
+
local titre, sousTitre = args.titre, validArg( 'sous-titre' )
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
 
if sousTitre then
wiki.minsert( ( codeLangue and ': ' ) or ' : ', sousTitre )
+
titre =  titre .. ' : ' .. sousTitre
 
end
 
end
if lienTitre then
+
titre = Commun.fusionTexteLien( titre, args['lien titre'], args.categ )
wiki.minsert( ']]' )
+
local graphie = ' class="italique"'
 +
if Langue.nonLatin( titre ) then
 +
graphie = ' style="font-style:normal"'
 
end
 
end
wiki.minsert( '</cite>' )
+
wiki.minsert( '<cite', graphie, attributsLangue, '>', titre, '</cite>' )
 
 
 
elseif modeNormal then
 
elseif modeNormal then
 
if chapitre then
 
if chapitre then
categTitreOuvrage = true
+
args.categ.titreOuvrage = true
if categTitreChapitre then
+
if args.categ.titreChapitre then
wiki.minsert( Outils.erreur( 'paramètre « <code>titre ouvrage</code> » manquant' ) )
+
wiki.minsert( Outils.erreur( 'paramètre <code>titre ouvrage</code> manquant' ) )
 
else
 
else
--wiki.minsert( Outils.erreur( '[[Modèle:Chapitre|{{Chapitre}}]] : paramètre « <code>titre ouvrage</code> » manquant' ) )
+
wiki.minsert( Outils.erreur( '[[Modèle:Chapitre|{{Chapitre}}]] : paramètre <code>titre ouvrage</code> manquant' ) )
 
end
 
end
 
else
 
else
categTitre = true
+
args.categ.titre = true
--wiki.minsert( Outils.erreur( '[[Modèle:Ouvrage|{{Ouvrage}}]] : paramètre « <code>titre</code> » manquant' ) )
+
wiki.minsert( Outils.erreur( '[[Modèle:Ouvrage|{{Ouvrage}}]] : paramètre <code>titre</code> manquant' ) )
 
end
 
end
 
end
 
end
+
-- titre original et traducteur
+
-- Titre original et traducteur
local original = validArg( 'titre original', 'titre vo' )
+
local original = validArg( 'titre original', 'titre vo', 'traduction titre' )
 
if original and original ~= args.titre then
 
if original and original ~= args.titre then
wiki.minsert( ' [« ', original, ' »]' )
+
if validArg( 'langue originale' ) then
 +
wiki.minsert( ' [« ', Langue.langue{ args['langue originale'], original }, ' »]' )
 +
else
 +
wiki.minsert( ' [« ', original, ' »]' )
 +
end
 
end
 
end
 
if not auteur then
 
if not auteur then
Ligne 162 : Ligne 165 :
 
end
 
end
 
 
-- volume, tome
+
-- Volume, tome
 
local volume = validArg( 'volume', 'vol' )
 
local volume = validArg( 'volume', 'vol' )
 
if volume then
 
if volume then
Ligne 179 : Ligne 182 :
 
end
 
end
 
if codeLangue then
 
if codeLangue then
Langue = Langue or require( 'Module:Langue' )
+
wiki.minsert( Langue.langue{ codeLangue, titreVolTome },  [['']] )
wiki.minsert( Langue.lang{ codeLangue, titreVolTome },  [['']] )
+
else
else  
 
 
wiki.minsert( titreVolTome,  [['']] )
 
wiki.minsert( titreVolTome,  [['']] )
 +
end
 +
local tradTitreVolTome = validArg( 'traduction titre volume', 'traduction titre tome' )
 +
if tradTitreVolTome then
 +
wiki.minsert( ' [« ', tradTitreVolTome, ' »]' )
 
end
 
end
 
end
 
end
 
 
-- lieu et éditeur
+
-- Nature du document et établissement (pour les thèses...)
 +
local nature = validArg( 'nature ouvrage' )
 +
if nature then
 +
wiki.minsert( ' (', nature, ')')
 +
end
 +
local etablissement = validArg( 'établissement' )
 +
if etablissement then
 +
wiki.minsert( ', ', etablissement )
 +
end
 +
 +
-- Lieu et éditeur
 
local lieu = validArg( 'lieu', 'location' )
 
local lieu = validArg( 'lieu', 'location' )
 
if lieu then
 
if lieu then
Ligne 194 : Ligne 210 :
 
if editeur then
 
if editeur then
 
local lienEditeur = validArg( 'lien éditeur' )
 
local lienEditeur = validArg( 'lien éditeur' )
if lienEditeur then
+
wiki.minsert( ', ', Commun.fusionTexteLien( editeur, lienEditeur, args.categ ) )
wiki.minsert( ', [[', lienEditeur, '|', editeur, ']]' )
 
else
 
wiki.minsert( ', ', editeur )
 
  end
 
 
end
 
end
 
 
-- collecion et numéro
+
-- Collecion et numéro
local collection = validArg( 'collection' )
+
local collection = validArg( 'collection', 'series' )
 
if collection then
 
if collection then
 
wiki.minsert( ', ', Commun.coll, '« ', collection )
 
wiki.minsert( ', ', Commun.coll, '« ', collection )
Ligne 211 : Ligne 223 :
 
wiki.minsert( ' »' )
 
wiki.minsert( ' »' )
 
end
 
end
local numeroCollection = validArg( 'numéro dans collection' )
+
local numeroCollection = validArg( 'numéro dans collection', 'numéro dans la collection' )
 
if numeroCollection then
 
if numeroCollection then
wiki.minsert( ' (', Commun.numero, numeroCollection, ')' )  
+
wiki.minsert( ' (', Commun.numero, numeroCollection, ')' )
end
+
end
 
 
-- date, réimpression et éditions
+
-- Date, réimpression et éditions
local annee = validArg( 'année', 'date' )
+
local annee = validArg( 'année', 'date', 'year' )
 
if annee then
 
if annee then
wiki.minsert( ', ', Commun.inscriptionDate( args ) )
+
local lrm
 +
if Langue.nonLatin( wiki.concat() ) then
 +
lrm = '&lrm;'
 +
end
 +
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 225 : Ligne 242 :
 
wiki.minsert( ' (', Commun.reimpr, publi, ')' )
 
wiki.minsert( ' (', Commun.reimpr, publi, ')' )
 
end
 
end
local numeroEdition = validArg( "numéro d'édition" )
+
local numeroEdition = validArg( "numéro d'édition", "numéro édition"  )
 
if numeroEdition then
 
if numeroEdition then
 
wiki.minsert( ', ', Outils.ordinal( numeroEdition, true ), Commun.ed )
 
wiki.minsert( ', ', Outils.ordinal( numeroEdition, true ), Commun.ed )
Ligne 234 : Ligne 251 :
 
end
 
end
 
 
-- format et pages
+
-- Pages et format
local format = validArg( 'format' )
 
if format then
 
wiki.minsert( ', ', format )
 
end
 
 
local pages = validArg( 'pages totales', 'pages' )
 
local pages = validArg( 'pages totales', 'pages' )
 
if pages then
 
if pages then
 
wiki.minsert( ', ', pages, Commun.nbp )
 
wiki.minsert( ', ', pages, Commun.nbp )
 +
end
 +
local format = validArg( 'format livre', 'format' )
 +
if format then
 +
wiki.minsert( ', ', format )
 
end
 
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 ) )
 
end
 
end
 
local refSimple = validArg( 'référence simplifiée', 'ref' )
 
local refSimple = validArg( 'référence simplifiée', 'ref' )
 
if refSimple then
 
if refSimple then
wiki.minsert( ' ', Commun.detailEdition( refSimple ) )  
+
wiki.minsert( ' ', Commun.detailEdition( refSimple ) )
 
end
 
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>' )
+
-- Lien vers l'ouvrage en ligne (isbn, issn, pmid, doi, lire en ligne, résumé...)
end
+
wiki.minsert( References.affichageLiensExternes( args, validArg, true, false ) )
 +
-- consulté le n'est plus affiché, voir [[Discussion_modèle:Ouvrage#Évolution documentation]]
 
 
-- précision sue le passage concerné
+
-- Précision sur le passage concerné
 
local partie = validArg( 'partie' )
 
local partie = validArg( 'partie' )
 
if partie then
 
if partie then
wiki.minsert( ', partie&nbsp;',  Commun.romain( partie ) )
+
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
 
end
 
local numeroChapitre = validArg( 'numéro chapitre', 'numéro' )
 
local numeroChapitre = validArg( 'numéro chapitre', 'numéro' )
Ligne 311 : Ligne 293 :
 
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' )
+
titreChapitre = Langue.langue{ codeLangue, titreChapitre }
titreChapitre = Langue.lang{ codeLangue, titreChapitre }
 
 
end
 
end
if numeroChapitre then
+
wiki.minsert( titreChapitre )
wiki.minsert( ' (« ', titreChapitre, ' »)' )
+
local tradTitreChap = validArg( 'traduction titre chapitre' )
else
+
if tradTitreChap then
wiki.minsert( ', « ', titreChapitre, ' »' )
+
wiki.minsert( ' [« ', tradTitreChap, ' »]' )
 
end
 
end
end
+
end
 
local passage = validArg( 'passage', 'page' )
 
local passage = validArg( 'passage', 'page' )
 
if passage then
 
if passage then
wiki.minsert( ', ', Commun.page, passage )
+
if string.match ( passage, '^[%dIVXLCM]' ) then
end
+
wiki.minsert( ', ', Commun.page, passage )
 +
else
 +
wiki.minsert( ', ', passage )
 +
end
 +
end
 +
 +
local patternPonct = '[,.;:!?]$'
 +
local ponctuation = wiki.concat():gsub( '%b<>', '' ):match( patternPonct )
 
 
-- ajout des méthadonnées COinS (ContextObjects in Spans)
+
-- Ajout des méthadonnées COinS (ContextObjects in Spans)
 
wiki.minsert( Commun.COinS( args, validArg, genre ) )
 
wiki.minsert( Commun.COinS( args, validArg, genre ) )
 
 
-- fin du span (id) et de la description de l'ouvrage
+
-- Fin du span (id) et de la description de l'ouvrage
wiki.minsert( '</span>' )
+
wiki.minsert( spanFinal )
+
-- citation et commentaire de cet ouvrage  
+
-- Citation et commentaire de cet ouvrage
local citation = validArg( 'extrait', 'citation' )
+
local citation = validArg( 'extrait', 'citation' )
 
if citation then
 
if citation then
 
wiki.minsert( ' :<blockquote>« ', citation, ' »</blockquote>' )
 
wiki.minsert( ' :<blockquote>« ', citation, ' »</blockquote>' )
end
+
end
 
if validArg( 'plume' ) then
 
if validArg( 'plume' ) then
wiki.minsert( Commun.plume )
+
local point
 +
if not citation and not ponctuation then
 +
point = '.'
 +
end
 +
wiki.minsert( point, Commun.plume )
 
end
 
end
 +
 
wiki.minsert( Commun.commentaire( args ) )
 
wiki.minsert( Commun.commentaire( args ) )
 
 
+
local namespaceCategorisation = { [0] = true, [4] = true, [10] = true, [12] = true, [14] = true, [100] = true, [104] = true }
if mw.title.getCurrentTitle().namespace == 0 and modeNormal then
+
if namespaceCategorisation[ mw.title.getCurrentTitle().namespace ] and modeNormal then
wiki.minsert(  
+
wiki.minsert(
categLangue and '[[Catégorie:Page du modèle Ouvrage comportant une erreur|langue]]',
+
args.categ.langue 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]]',
+
args.categ.titre and '[[Catégorie:Page du modèle Ouvrage comportant une erreur|titre]]',
categTitreChapitre and '[[Catégorie:Page du modèle Article comportant une erreur|Chapitre]]',
+
args.categ.titreChapitre and '[[Catégorie:Page du modèle Chapitre comportant une erreur|Chapitre]]',
categTitreOuvrage and '[[Catégorie:Page du modèle Article comportant une erreur|Ouvrage]]'
+
args.categ.titreOuvrage and '[[Catégorie:Page du modèle Chapitre comportant une erreur|Ouvrage]]',
 +
args.categ.lienExterne and '[[Catégorie:Page du modèle Ouvrage comportant une erreur|Externe]]',
 +
args.categ.isbnInvalid and '[[Catégorie:Page avec ISBN invalide]]',
 +
args.categ.issnInvalid and '[[Catégorie:Page avec ISSN invalide]]',
 +
args.categ.eanInvalid and '[[Catégorie:Page avec EAN invalide]]'
 
)
 
)
 +
if dir then
 +
wiki.minsert( '[[Catégorie:Recension temporaire pour le modèle Ouvrage|rtl]]' )
 +
end
 
end
 
end
  

Version actuelle datée du 22 avril 2017 à 07:24

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' )


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 Commun.validTextArg( args, ... ) end
	
	-- titreChap est un paramètre différent de ceux du modèle ouvrage pour utiliser le même programme
	args.titreChap = validArg( 'titre chapitre', 'chap', 'titre', 'title' )
	if args.titre == args.titreChap then
		args.titre = false
	end
	args.titre = validArg( 'titre ouvrage', 'ouvrage', 'titre', 'title' ) 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' )
	local preface = validArg( 'préface' )
	local auteurOuvrage = validArg( 'auteurs ouvrage', 'auteur ouvrage' )
	if preface and auteurOuvrage then
		args['auteurs ouvrage'] = ( validArg( 'auteurs ouvrage', 'auteur ouvrage' ) or '' ) .. ' (préf. ' .. preface .. ')'
		args['préface'] = ''
	end
	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 Commun.validTextArg( args, ... ) or false end
	local genre = ( chapitre and 'chapitre' ) or 'ouvrage'
	
	--Table servant à la catégorisation
	args.categ = {}

	local modeNormal = not validArg( 'nocat' )
	
	-- Clarification des paramètres  nécessaires pour les COinS
	args.titre = validArg( 'titre', 'title' )
	args['pages totales'] = validArg( 'pages totales', 'pages' )
	args.pages = ''
	local lienExternes = validArg( 'lire en ligne', 'url texte', 'url', 'texte' )
	if args.format and not args['format électronique'] and lienExternes and string.match( args.format,"pdf" ) then
		args['format électronique'] = args.format
		args.format = false
	end
	
	
	-- span initial (id) et libellé
	local spanInitial, spanFinal = Commun.spanInitial ( args, validArg )
	wiki.minsert( spanInitial,  Commun.libelle( args ) )
	
	-- Indication de langue
	local indicLangue, codeLangue = Commun.indicationDeLangue ( args, validArg )
	local dir, attributsLangue
	if Outils.notEmpty( indicLangue ) then
		wiki.minsert( indicLangue, ' ' )
		if codeLangue then
			dir = Langue.directionLangue( codeLangue )
			if dir == 'rtl' then 
				attributsLangue = ' lang="' .. codeLangue .. '" dir="rtl"'
			else 
				dir = nil
				attributsLangue = ' lang="' .. codeLangue .. '"'
			end
		end
	end

	-- Liste des auteurs et de leurs responsabilités (principales et secondaires)
	local auteur = validArg( 'nom1', 'nom', 'auteur1', 'auteur', 'auteurs', 'auteur institutionnel', 'last1', 'last', 'author1', 'author' )
	if auteur then
		if validArg( 'auteurs' ) then
			wiki.minsert( args.auteurs )
		else
			wiki.minsert( Commun.responsabilitePrincipale( args, validArg ) )
		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 style="font-style:normal"', attributsLangue, '>« ', args.titreChap )
			if args['sous-titre chapitre'] then
				wiki.minsert( ' : ', args['sous-titre chapitre'] )
			end
			wiki.minsert( ' »</cite>' )
		elseif modeNormal then
			wiki.minsert( Outils.erreur( ' [[Modèle:Chapitre|{{Chapitre}}]] : paramètre <code>titre chapitre</code> manquant' ) )
			args.categ.titreChapitre = 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
		local titre, sousTitre = args.titre, validArg( 'sous-titre' )
		if sousTitre then
			titre =  titre .. ' : ' .. sousTitre
		end
		titre = Commun.fusionTexteLien( titre, args['lien titre'], args.categ )
		local graphie = ' class="italique"'
		if Langue.nonLatin( titre ) then
			graphie = ' style="font-style:normal"'
		end
		wiki.minsert( '<cite', graphie, attributsLangue, '>', titre, '</cite>' )
		
	elseif modeNormal then
		if chapitre then
			args.categ.titreOuvrage = true
			if args.categ.titreChapitre 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
			args.categ.titre = 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
		if validArg( 'langue originale' ) then
			wiki.minsert( ' [« ', Langue.langue{ args['langue originale'], original }, ' »]' )
		else
			wiki.minsert( ' [« ', original, ' »]' )
		end
	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
			wiki.minsert( Langue.langue{ codeLangue, titreVolTome },  [['']] )
		else
			wiki.minsert( titreVolTome,  [['']] )
		end
		local tradTitreVolTome = validArg( 'traduction titre volume', 'traduction titre tome' )
		if tradTitreVolTome then
			wiki.minsert( ' [« ', tradTitreVolTome, ' »]' )
		end
	end
	
	-- Nature du document et établissement (pour les thèses...)
	local nature = validArg( 'nature ouvrage' )
	if nature then
		wiki.minsert( ' (', nature, ')')
	end
	local etablissement = validArg( 'établissement' )
	if etablissement then
		wiki.minsert( ', ', etablissement )
	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' )
		wiki.minsert( ', ', Commun.fusionTexteLien( editeur, lienEditeur, args.categ ) )
	end
	
	-- Collecion et numéro
	local collection = validArg( 'collection', 'series' )
	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
		local lrm
		if Langue.nonLatin( wiki.concat() ) then
			lrm = '&lrm;'
		end
		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", "numéro é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
	
	-- Pages et format
	local pages = validArg( 'pages totales', 'pages' )
	if pages then
		wiki.minsert( ', ', pages, Commun.nbp )
	end
	local format = validArg( 'format livre', 'format' )
	if format then
		wiki.minsert( ', ', format )
	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
	

	-- Lien vers l'ouvrage en ligne (isbn, issn, pmid, doi, lire en ligne, résumé...)
	wiki.minsert( References.affichageLiensExternes( args, validArg, true, false ) )
	-- consulté le n'est plus affiché, voir [[Discussion_modèle:Ouvrage#Évolution documentation]]
	
	-- 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
			titreChapitre = Langue.langue{ codeLangue, titreChapitre }
		end
		wiki.minsert( titreChapitre )
		local tradTitreChap = validArg( 'traduction titre chapitre' )
		if tradTitreChap then
			wiki.minsert( ' [« ', tradTitreChap, ' »]' )
		end
	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
	
	local patternPonct = '[,.;:!?]$'
	local ponctuation = wiki.concat():gsub( '%b<>', '' ):match( patternPonct )
	
	-- 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( spanFinal )
	
	-- Citation et commentaire de cet ouvrage
	local citation = validArg( 'extrait', 'citation' )
	if citation then
		wiki.minsert( ' :<blockquote>« ', citation, ' »</blockquote>' )
	end
	if validArg( 'plume' ) then
		local point
		if not citation and not ponctuation then
			point = '.'
		end
		wiki.minsert( point, Commun.plume )
	end
		
	wiki.minsert( Commun.commentaire( args ) )
	
	local namespaceCategorisation = { [0] = true, [4] = true, [10] = true, [12] = true, [14] = true, [100] = true, [104] = true }
	if namespaceCategorisation[ mw.title.getCurrentTitle().namespace ] and modeNormal then
		wiki.minsert(
			args.categ.langue and '[[Catégorie:Page du modèle Ouvrage comportant une erreur|langue]]',
			args.categ.titre and '[[Catégorie:Page du modèle Ouvrage comportant une erreur|titre]]',
			args.categ.titreChapitre and '[[Catégorie:Page du modèle Chapitre comportant une erreur|Chapitre]]',
			args.categ.titreOuvrage and '[[Catégorie:Page du modèle Chapitre comportant une erreur|Ouvrage]]',
			args.categ.lienExterne and '[[Catégorie:Page du modèle Ouvrage comportant une erreur|Externe]]',
			args.categ.isbnInvalid and '[[Catégorie:Page avec ISBN invalide]]',
			args.categ.issnInvalid and '[[Catégorie:Page avec ISSN invalide]]',
			args.categ.eanInvalid and '[[Catégorie:Page avec EAN invalide]]'
		)
		if dir then
			wiki.minsert( '[[Catégorie:Recension temporaire pour le modèle Ouvrage|rtl]]' )
		end
	end

	
	return wiki.concat()
end


return Ouvrage