« Module:Langue » : différence entre les versions

Aller à la navigation Aller à la recherche
159 octets ajoutés ,  25 décembre 2023
détection d'erreur en cherchant « class="error" » : commentaire code plus précis, et ajout d'un exemple de recherche de ces codes sur le wiki
m (1 version importée)
Modèle:Infobox Musique (œuvre)>Od1n
(détection d'erreur en cherchant « class="error" » : commentaire code plus précis, et ajout d'un exemple de recherche de ces codes sur le wiki)
Ligne 1 : Ligne 1 :
-- luacheck: globals mw, no max line length
local Langue = { }
local Langue = { }


local dataLangue = mw.loadData 'Module:Langue/Data'
local dataLangue = mw.loadData( 'Module:Langue/Data' )
local langErrorMess = '<span class="error">langue non reconnue : %s</span>' -- attention, plusieurs modules recherchent ce message pour détecter des erreurs
 
-- attention, plusieurs modules cherchent « class="error" » pour détecter si ce module a retourné une erreur
-- pour trouver ces codes, on peut rechercher dans le namespace Module : insource:Langue insource:/(find|match)\([^)]+error/
local langErrorMess = '<span class="error">langue non reconnue : %s</span>'


-- premierParametre renvoie le premier paramètre de Frame, que celui-ci ait été passé au module par invoke, directement au modèle,
-- premierParametre renvoie le premier paramètre de Frame, que celui-ci ait été passé au module par invoke, directement au modèle,
Ligne 24 : Ligne 29 :
end
end


-- determinationCode retourne une table contenant le code de langue principal et la liste des subcode
-- determinationCode retourne une table contenant le code de langue principal et la liste des subcodes
-- si le code de langue principal n'est pas reconnu, retourne nil.
-- si le code de langue principal n'est pas reconnu, retourne nil.
function Langue.determinationCode( langue )
function Langue.determinationCode( langue )
Ligne 67 : Ligne 72 :
return 'ltr'
return 'ltr'
end
end
-- séparation du code de langue en code principal et les différents subcode.
-- séparation du code de langue en code principal et les différents subcodes.
local tabCode = Langue.determinationCode( arg )
local tabCode = Langue.determinationCode( arg )
if tabCode then
if tabCode then
Ligne 73 : Ligne 78 :
local codeScript = tabCode[2]
local codeScript = tabCode[2]
if codeScript and string.len( codeScript ) == 4 and dataLangue[ 'rtl script' ] then
if codeScript and string.len( codeScript ) == 4 and dataLangue[ 'rtl script' ] then
-- il y a un subcode d'écritrure, c'est lui qui est pris en compte
-- il y a un subcode d'écriture, c'est lui qui est pris en compte
codeScript = string.upper( string.sub( codeScript, 1, 1 ) ) .. string.sub( codeScript, 2 )
codeScript = string.upper( string.sub( codeScript, 1, 1 ) ) .. string.sub( codeScript, 2 )
if dataLangue[ 'rtl script' ][ codeScript ] then
if dataLangue[ 'rtl script' ][ codeScript ] then
Ligne 79 : Ligne 84 :
end
end
else
else
-- il n'y a pas de sub-code d'écriture, on prend en compte le code de langue principal.
-- il n'y a pas de subcode d'écriture, on prend en compte le code de langue principal.
local tabLangue = dataLangue[ tabCode[1] ]
local tabLangue = dataLangue[ tabCode[1] ]
if tabLangue and tabLangue.rtl then
if tabLangue and tabLangue.rtl then
Ligne 86 : Ligne 91 :
end
end
end
end
 
-- la langue n'est pas écrite de droite à gauche, donc ltr.
-- la langue n'est pas écrite de droite à gauche, donc ltr.
return 'ltr'
return 'ltr'
Ligne 93 : Ligne 98 :


local function getDataLangue( frame )
local function getDataLangue( frame )
-- Obtenir le code de la langue  
-- Obtenir le code de la langue
local codeLangue = premierParametre( frame, true )
local codeLangue = premierParametre( frame, true )
-- Si le paramètre est incorrect, retourner un message d'erreur
-- Si le paramètre est incorrect, retourner un message d'erreur
Ligne 191 : Ligne 196 :
local namespaceCategorisation = { [0] = true, [4] = true, [10] = true, [12] = true, [14] = true, [100] = true }
local namespaceCategorisation = { [0] = true, [4] = true, [10] = true, [12] = true, [14] = true, [100] = true }
local categorisation = namespaceCategorisation[ mw.title.getCurrentTitle().namespace ] and not args.nocat
local categorisation = namespaceCategorisation[ mw.title.getCurrentTitle().namespace ] and not args.nocat
 
-- Décalage des paramètres si code contient la direction du texte (obsolète mais toujours possible).
-- Décalage des paramètres si code contient la direction du texte (obsolète mais toujours possible).
if code == 'ltr' or code == 'rtl' then
if code == 'ltr' or code == 'rtl' then
Ligne 199 : Ligne 204 :
end
end
local codeArg = code
local codeArg = code
 
-- sortie immédiate s'il n'y a pas de texte
-- sortie immédiate s'il n'y a pas de texte
if texte == '' then
if texte == '' then
Ligne 208 : Ligne 213 :
end
end
end
end
 
-- récursion si texte contient des blocs
-- récursion si texte contient des blocs
if texte:match('\n *\n') or texte:match('\n[*#:]') then
if texte:match('\n *\n') or texte:match('\n[*#:]') then
-- les parenthèses permettent d'éliminer la seconde valeur retournée par gsub (nombre de remplacement)
-- les parenthèses permettent d'éliminer la seconde valeur retournée par gsub (nombre de remplacements)
return ( texte:gsub(  
return ( texte:gsub(
'(\n?[*#:]?%s*)([^\n]+)',  
'(\n?[*#:]?%s*)([^\n]+)',
function ( init, ligne )  
function ( init, ligne )
return init .. Langue.langue{ code, ligne }
return init .. Langue.langue{ code, ligne }
end
end
) )
) )
end
end
 
-- Si la langue est reconnue, la valeur de la table est prise en compte (permet de corriger les noms de langue en toutes lettres).
-- Si la langue est reconnue, la valeur de la table est prise en compte (permet de corriger les noms de langue en toutes lettres).
local tabCode = Langue.determinationCode( code )
local tabCode = Langue.determinationCode( code )
Ligne 226 : Ligne 231 :
code = table.concat( tabCode, '-' )
code = table.concat( tabCode, '-' )
tabLangue = dataLangue[ tabCode[1] ]
tabLangue = dataLangue[ tabCode[1] ]
 
local codeScript = tabCode[2]
local codeScript = tabCode[2]
-- Si codeScript est bien un style d'écriture (len = 4) on applique sa direction
-- Si codeScript est bien un style d'écriture (len = 4) on applique sa direction
Ligne 238 : Ligne 243 :
end
end
end
end
 
-- Préparation du rendu de direction du texte.
-- Préparation du rendu de direction du texte.
dir = dir and dir:lower()
dir = dir and dir:lower()
Ligne 250 : Ligne 255 :
html:wikitext( texte )
html:wikitext( texte )
else
else
html:tag( 'span' )
local span = mw.html.create( 'span' )
:addClass( 'lang-' .. code )
:addClass( 'lang-' .. code )
:addClass( args.class )
:attr( 'lang', code )
:attr{ lang = code, dir = dir }
:attr( 'dir', dir )
:wikitext( texte )
:wikitext( texte )
:done()
 
if args.class and args.class ~= '' then
span:addClass( args.class )
end
 
html:node( span )
 
-- Translittération.
-- Translittération.
if ( args.trans or '' ) ~= '' then
if ( args.trans or '' ) ~= '' then
local trans = args.trans:gsub( "^''([^'].*[^'])''$", "%1" )
local trans = args.trans:gsub( "^''%f[^'](.+)%f[']''$", "%1" )
html:wikitext( " (''" )
html:wikitext( " (''" )
:tag( 'span' )
:tag( 'span' )
Ligne 300 : Ligne 310 :
local texte = args.texte
local texte = args.texte
local dir = args.dir
local dir = args.dir
local wikiText = ''
 
-- Cas où le premier et/ou le deuxième paramètre est vide.
-- Cas où le premier et/ou le deuxième paramètre est vide.
if code == '' and nomLangue == '' then
if code == '' and nomLangue == '' then
Ligne 329 : Ligne 339 :
:done()
:done()
:wikitext( texte )
:wikitext( texte )
 
return tostring( html )
return tostring( html )
end
end
Ligne 339 : Ligne 349 :
local listeNom = { }
local listeNom = { }
local listeCode = { }
local listeCode = { }
local tabLangue
 
-- Valeur par défaut du premier paramètre = 'mul'.
-- Valeur par défaut du premier paramètre = 'mul'.
local code = mw.text.trim( args[1] or '' )
local code = mw.text.trim( args[1] or '' )
Ligne 346 : Ligne 356 :
end
end
local maxLang = tonumber(args.maxLang) or nil
local maxLang = tonumber(args.maxLang) or nil
 
if not args[2] and not dataLangue[ mw.ustring.lower( code ) ] then
if not args[2] and not dataLangue[ mw.ustring.lower( code ) ] then
local split = mw.text.split( code, '[+,;:/ .]+' )
local split = mw.text.split( code, '[+,;:/ .]+' )
Ligne 374 : Ligne 384 :
code = mw.text.trim( args[i] or '' )
code = mw.text.trim( args[i] or '' )
until code == ''
until code == ''
 
-- Préparation et renvoi du texte.
-- Préparation et renvoi du texte.
local n = #listeCode
local n = #listeCode
Ligne 384 : Ligne 394 :
end
end
local plusieurs = ( n > 1 )
local plusieurs = ( n > 1 )
 
local html = mw.html.create( 'abbr' )
local html = mw.html.create( 'abbr' )
:addClass( 'abbr' )
:addClass( 'abbr' )
Ligne 390 : Ligne 400 :
:attr( 'title', 'Langue' .. ( plusieurs and 's' or '' ) .. ' : ' .. mw.text.listToText( listeNom ) )
:attr( 'title', 'Langue' .. ( plusieurs and 's' or '' ) .. ' : ' .. mw.text.listToText( listeNom ) )
:wikitext( '(' .. table.concat( listeCode, '\194\160+\194\160' ) .. ')' )
:wikitext( '(' .. table.concat( listeCode, '\194\160+\194\160' ) .. ')' )
 
return tostring( html )
return tostring( html )
end
end
Ligne 407 : Ligne 417 :
local trans = args.trans
local trans = args.trans
local dir = args.dir
local dir = args.dir
local wikiText = ''


-- Détection de la direction du texte.
-- Détection de la direction du texte.
Ligne 423 : Ligne 432 :
end
end


wikiText = nom .. ' :' .. texte
return nom .. ' :' .. texte
 
return wikiText
end
end


Ligne 447 : Ligne 454 :
-- pour la page de discussion de la base de données et ceux qui veulent surveiller cette page.
-- pour la page de discussion de la base de données et ceux qui veulent surveiller cette page.
function Langue.erreurModuleData()
function Langue.erreurModuleData()
if type( dataLangue ) ~= 'table' then
if type( dataLangue ) ~= 'table' then
local message = [[<strong class="error">Le chargement du module Langue/Data génère une erreur : </strong> <br>%s <br>
local message = [[<strong class="error">Le chargement du module Langue/Data génère une erreur.</strong> <br>


<span class="error">Cette erreur doit être corrigée au plus vite car des milliers de pages ne s'affichent pas correctement.</span>
<span class="error">Cette erreur doit être corrigée au plus vite car des milliers de pages ne s'affichent pas correctement.</span>
]]
]]
return string.format( message, resultat )
return message
end
end
end
end
Ligne 488 : Ligne 495 :
table.insert( tableau, 1, entete )
table.insert( tableau, 1, entete )
table.insert( tableau, '}' )
table.insert( tableau, '}' )
 
return table.concat( tableau, '\n|-\n|' )
return table.concat( tableau, '\n|-\n|' )
end
end
Ligne 517 : Ligne 524 :
end
end
table.sort( listeCodesAlias )
table.sort( listeCodesAlias )
 
return table.concat( listeCodesAlias, '\n' )
return table.concat( listeCodesAlias, '\n' )
end
end
Ligne 533 : Ligne 540 :
end
end
table.sort( languesTab )
table.sort( languesTab )
 
return table.concat( languesTab, '\n' )
return table.concat( languesTab, '\n' )
end
end


return Langue
return Langue

Menu de navigation