« Module:Langue » : différence entre les versions
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 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 | -- 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 | -- 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' | -- 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 | -- 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 | -- 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]+)', | |||
function ( init, ligne ) | |||
return init .. Langue.langue{ code, ligne } | |||
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 | local span = mw.html.create( 'span' ) | ||
:addClass( 'lang-' .. code ) | :addClass( 'lang-' .. code ) | ||
: | :attr( 'lang', code ) | ||
:attr | :attr( 'dir', dir ) | ||
:wikitext( texte ) | :wikitext( texte ) | ||
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( "^'' | 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 | ||
-- 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 = { } | ||
-- 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 | ||
-- Détection de la direction du texte. | -- Détection de la direction du texte. | ||
Ligne 423 : | Ligne 432 : | ||
end | end | ||
return nom .. ' :' .. texte | |||
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' | if type( dataLangue ) ~= 'table' then | ||
local message = [[<strong class="error">Le chargement du module Langue/Data génère une erreur | 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 | 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 |