Module:Test wikicode/Test
Ce module permet d'extraire et d'analyser des parties de wikicode. Il peut faciliter la comparaison de wikicodes ayant des structures similaires plus facilement qu'en les comparant sous forme de chaînes de caractères.
Utilisation
[modifier le code]Fonctions exportables :
parseLink(link)
- analyse le wikicode d'un lien interne pour en retourner les composants.parseImage(image)
- analyse le wikicode d'une image pour en retourner les composants.extract(wikicode, items)
– extrait les items demandés du wikicode.
Détail par fonction
[modifier le code]parseLink(link)
[modifier le code]Analyse le lien interne link
et retourne ses composants :
page
: la destination du lientext
: le texte du lien
Exemples
[modifier le code]Appel | Résultat |
---|---|
p.parseLink("[[Foo|Bar]]")
|
{ page = "Foo", text = "Bar" } |
p.parseLink("[[Foo]]")
|
{ page = "Foo", text = "Foo" } |
parseImage(image)
[modifier le code]Analyse l'image image
et retourne ses composants :
src
: le nom de l'image, sans préfixeformat
: une table dont les clés représentent les différents formats appliqués (border
,frameless
,framed
et/outhumbnail
) avec en valeurtrue
ou la valeur du paramètrethumbnail
halign
: l'alignement horizontal de l'image (left
,center
ouright
)valign
: l'alignement vertical de l'image (baseline
,sub
,super
,top
,text-top
,middle
,bottom
outext-bottom
)size
: la taille de l'image ou le mot-cléupright
ou une table avec la cléupright
et en valeur la valeur du paramètrelink
: la valeur du paramètrelink
alt
: la valeur du paramètrealt
class
: la valeur du paramètreclass
lang
: la valeur du paramètrelang
caption
: le titre de l'image
Exemples
[modifier le code]Appel | Résultat |
---|---|
p.parseImage("[[Fichier:Test.svg]]")
|
{ src = "Test.svg" } |
p.parseImage("[[Fichier:Test.svg|bordure|frameless]]")
|
{ src = "Test.svg", format = {border = true, frameless = true} } |
p.parseImage("[[Fichier:Test.svg|gauche]]")
|
{ src = "Test.svg", halign = "left" } |
p.parseImage("[[Fichier:Test.svg|top]]")
|
{ src = "Test.svg", valign = "top" } |
p.parseImage("[[Fichier:Test.svg|14x14px]]")
|
{ src = "Test.svg", size = "14x14px" } |
p.parseImage("[[Fichier:Test.svg|redresse]]")
|
{ src = "Test.svg", size = "upright" } |
p.parseImage("[[Fichier:Test.svg|upright=1.2]]")
|
{ src = "Test.svg", size = {upright = 1.2} } |
p.parseImage("[[Fichier:Test.svg|link=https://fr.wikipedia.org]]")
|
{ src = "Test.svg", link = "https://fr.wikipedia.org" } |
p.parseImage("[[Fichier:Test.svg|alt=Image de test]]")
|
{ src = "Test.svg", alt = "Image de test" } |
p.parseImage("[[Fichier:Test.svg|class = noviewer]]")
|
{ src = "Test.svg", class = "noviewer" } |
p.parseImage("[[Fichier:Test.svg|langue=fr]]")
|
{ src = "Test.svg", lang = "fr" } |
p.parseImage("[[Fichier:Test.svg|Image de test]]")
|
{ src = "Test.svg", caption = "Image de test" } |
extract(wikicode, items)
[modifier le code]Permet d'extraire du wikicode
donné les composants indiqués par la table items
:
link
: extrait un lien interne et retourne ses composants tels qu'analysés parparseLink
.image
: extrait une image et retourne ses composants tels qu'analysés parparseImage
.-
,*
,+
: extraient n'importe quel texte, la quantité de texte retournée correspond au comportement des quantifieurs dans les expressions régulières Lua.^
,$
: n'extraient rien, permettent d'indiquer que l'extraction doit se faire respectivement depuis le début ou jusqu'à la fin du wikicode. Le comportement est similaire aux assertions des expressions régulières Lua.
La fonction retourne une table contenant la valeur extraite pour chacun des composants ou nil
si la structure du code ne correspond pas aux items demandés.
Exemples
[modifier le code]Appel | Résultat |
---|---|
p.extract("Test [[Foo|Bar]] test", {"link"})
|
{ {page = "Foo", text = "Bar"} } |
p.extract("Test [[Foo|Bar]] test", {"^", "-", "link", "+"})
|
{ "Test ", {page = "Foo", text = "Bar"}, " test" } |
p.extract("Test [[Image:Test.svg|40x40px]] [[Foo]]", {"image", "-", "link"})
|
{ {src = "Test.svg", size="40x40px"}, " ", {page = "Foo", text = "Foo"} } |
p.extract("Test [[Foo|Bar]] test", {"image"})
|
nil |
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 (créer).
Voir les statistiques d'appel depuis le wikicode sur l'outil wstat et les appels depuis d'autres modules.
-- Test unitaire pour [[Module:Test wikicode]]. Cliquer sur « Discussion » pour voir le résultat du test.
local p = require('Module:UnitTests')
local modulename = mw.title.getCurrentTitle().baseText
local Test_wikicode = require( 'Module:' .. modulename )
function p:test_parseLink()
local function test(link, expected)
self:equals_deep(mw.text.nowiki(link), Test_wikicode.parseLink(link), expected, {nowiki = true})
end
test("[[Test]]", {
page = "Test",
text = "Test"
})
test("[[Wikipédia:Accueil_principal]]", {
page = "Wikipédia:Accueil principal",
text = "Wikipédia:Accueil_principal"
})
test("[[Wikipédia:Accueil%20principal]]", {
page = "Wikipédia:Accueil principal",
text = "Wikipédia:Accueil principal"
})
test("[[Wikipédia:Accueil_principal|Foo Bar Baz]]", {
page = "Wikipédia:Accueil principal",
text = "Foo Bar Baz"
})
test("[[Geoffroy II du Perche|Geoffroy {{II}}]]", {
page = "Geoffroy II du Perche",
text = "Geoffroy {{II}}"
})
end
function p:test_parseImage()
local function test(image, expected)
self:equals_deep(mw.text.nowiki(image), Test_wikicode.parseImage(image), expected, {nowiki = true})
end
test("[[Fichier:Test.svg]]", {
src = "Test.svg"
})
test("[[File:Test.svg]]", {
src = "Test.svg"
})
test("[[Image:Test.svg]]", {
src = "Test.svg"
})
-- Format: border
test("[[Fichier:Test.svg|border]]", {
src = "Test.svg",
format = {border = true}
})
test("[[Fichier:Test.svg|bordure]]", {
src = "Test.svg",
format = {border = true}
})
-- Format: frameless
test("[[Fichier:Test.svg|frameless]]", {
src = "Test.svg",
format = {frameless = true}
})
test("[[Fichier:Test.svg|sans_cadre]]", {
src = "Test.svg",
format = {frameless = true}
})
test("[[Fichier:Test.svg|non_encadré]]", {
src = "Test.svg",
format = {frameless = true}
})
test("[[Fichier:Test.svg|non_encadre]]", {
src = "Test.svg",
format = {frameless = true}
})
-- Format: framed
test("[[Fichier:Test.svg|framed]]", {
src = "Test.svg",
format = {framed = true}
})
test("[[Fichier:Test.svg|frame]]", {
src = "Test.svg",
format = {framed = true}
})
test("[[Fichier:Test.svg|enframed]]", {
src = "Test.svg",
format = {framed = true}
})
test("[[Fichier:Test.svg|cadre]]", {
src = "Test.svg",
format = {framed = true}
})
test("[[Fichier:Test.svg|encadré]]", {
src = "Test.svg",
format = {framed = true}
})
test("[[Fichier:Test.svg|encadre]]", {
src = "Test.svg",
format = {framed = true}
})
-- Format: thumbnail
test("[[Fichier:Test.svg|thumbnail]]", {
src = "Test.svg",
format = {thumbnail = true}
})
test("[[Fichier:Test.svg|thumb]]", {
src = "Test.svg",
format = {thumbnail = true}
})
test("[[Fichier:Test.svg|vignette]]", {
src = "Test.svg",
format = {thumbnail = true}
})
-- Format: thumbnail with value
test("[[Fichier:Test.svg|thumbnail=Test.png]]", {
src = "Test.svg",
format = {thumbnail = "Test.png"}
})
test("[[Fichier:Test.svg|thumb=Test.png]]", {
src = "Test.svg",
format = {thumbnail = "Test.png"}
})
test("[[Fichier:Test.svg|vignette=Test.png]]", {
src = "Test.svg",
format = {thumbnail = "Test.png"}
})
-- Format: border and frameless
test("[[Fichier:Test.svg|border|frameless]]", {
src = "Test.svg",
format = {border = true, frameless = true}
})
test("[[Fichier:Test.svg|sans_cadre|bordure]]", {
src = "Test.svg",
format = {border = true, frameless = true}
})
-- Horizontal alignment: left
test("[[Fichier:Test.svg|left]]", {
src = "Test.svg",
halign = "left"
})
test("[[Fichier:Test.svg|gauche]]", {
src = "Test.svg",
halign = "left"
})
-- Horizontal alignment: right
test("[[Fichier:Test.svg|right]]", {
src = "Test.svg",
halign = "right"
})
test("[[Fichier:Test.svg|droite]]", {
src = "Test.svg",
halign = "right"
})
-- Horizontal alignment: center
test("[[Fichier:Test.svg|center]]", {
src = "Test.svg",
halign = "center"
})
test("[[Fichier:Test.svg|centre]]", {
src = "Test.svg",
halign = "center"
})
test("[[Fichier:Test.svg|centré]]", {
src = "Test.svg",
halign = "center"
})
-- Vertical alignment: baseline
test("[[Fichier:Test.svg|baseline]]", {
src = "Test.svg",
valign = "baseline"
})
test("[[Fichier:Test.svg|base]]", {
src = "Test.svg",
valign = "baseline"
})
test("[[Fichier:Test.svg|ligne-de-base]]", {
src = "Test.svg",
valign = "baseline"
})
-- Vertical alignment: sub
test("[[Fichier:Test.svg|sub]]", {
src = "Test.svg",
valign = "sub"
})
test("[[Fichier:Test.svg|ind]]", {
src = "Test.svg",
valign = "sub"
})
test("[[Fichier:Test.svg|indice]]", {
src = "Test.svg",
valign = "sub"
})
-- Vertical alignment: super
test("[[Fichier:Test.svg|super]]", {
src = "Test.svg",
valign = "super"
})
test("[[Fichier:Test.svg|sup]]", {
src = "Test.svg",
valign = "super"
})
test("[[Fichier:Test.svg|exp]]", {
src = "Test.svg",
valign = "super"
})
test("[[Fichier:Test.svg|exposant]]", {
src = "Test.svg",
valign = "super"
})
-- Vertical alignment: top
test("[[Fichier:Test.svg|top]]", {
src = "Test.svg",
valign = "top"
})
test("[[Fichier:Test.svg|haut]]", {
src = "Test.svg",
valign = "top"
})
-- Vertical alignment: text-top
test("[[Fichier:Test.svg|text-top]]", {
src = "Test.svg",
valign = "text-top"
})
test("[[Fichier:Test.svg|haut-texte]]", {
src = "Test.svg",
valign = "text-top"
})
test("[[Fichier:Test.svg|haut-txt]]", {
src = "Test.svg",
valign = "text-top"
})
-- Vertical alignment: middle
test("[[Fichier:Test.svg|middle]]", {
src = "Test.svg",
valign = "middle"
})
test("[[Fichier:Test.svg|milieu]]", {
src = "Test.svg",
valign = "middle"
})
-- Vertical alignment: bottom
test("[[Fichier:Test.svg|bottom]]", {
src = "Test.svg",
valign = "bottom"
})
test("[[Fichier:Test.svg|bas]]", {
src = "Test.svg",
valign = "bottom"
})
-- Vertical alignment: text-bottom
test("[[Fichier:Test.svg|text-bottom]]", {
src = "Test.svg",
valign = "text-bottom"
})
test("[[Fichier:Test.svg|bas-texte]]", {
src = "Test.svg",
valign = "text-bottom"
})
test("[[Fichier:Test.svg|bas-txt]]", {
src = "Test.svg",
valign = "text-bottom"
})
-- Link
test("[[Fichier:Test.svg|link=Foo]]", {
src = "Test.svg",
link = "Foo"
})
test("[[Fichier:Test.svg|lien = Foo]]", {
src = "Test.svg",
link = "Foo"
})
-- Alt
test("[[Fichier:Test.svg|alt=Texte alternatif]]", {
src = "Test.svg",
alt = "Texte alternatif"
})
-- Class
test("[[Fichier:Test.svg|class = foobar]]", {
src = "Test.svg",
class = "foobar"
})
test("[[Fichier:Test.svg|classe=foobar]]", {
src = "Test.svg",
class = "foobar"
})
-- Lang
test("[[Fichier:Test.svg|lang=en]]", {
src = "Test.svg",
lang = "en"
})
test("[[Fichier:Test.svg|langue = en]]", {
src = "Test.svg",
lang = "en"
})
-- Size
test("[[Fichier:Test.svg|20px]]", {
src = "Test.svg",
size = "20px"
})
test("[[Fichier:Test.svg|x14px]]", {
src = "Test.svg",
size = "x14px"
})
test("[[Fichier:Test.svg|20x14px]]", {
src = "Test.svg",
size = "20x14px"
})
-- Size: upright
test("[[Fichier:Test.svg|upright]]", {
src = "Test.svg",
size = "upright"
})
test("[[Fichier:Test.svg|redresse]]", {
src = "Test.svg",
size = "upright"
})
-- Size: upright with value
test("[[Fichier:Test.svg|upright=]]", {
src = "Test.svg",
size = {upright = ""}
})
test("[[Fichier:Test.svg|upright=1.2]]", {
src = "Test.svg",
size = {upright = "1.2"}
})
test("[[Fichier:Test.svg|upright 1.2]]", {
src = "Test.svg",
size = {upright = "1.2"}
})
test("[[Fichier:Test.svg|redresse=1.2]]", {
src = "Test.svg",
size = {upright = "1.2"}
})
test("[[Fichier:Test.svg|redresse_1.2]]", {
src = "Test.svg",
size = {upright = "1.2"}
})
-- Caption
test("[[Fichier:Test.svg|Titre de l'image]]", {
src = "Test.svg",
caption = "Titre de l'image"
})
-- Everything
test("[[Fichier:Test.svg|lang = fr|frameless|12x84px|gauche|border|link=|classe = noviewer|text-bottom|alt=Test|Titre de l'image]]", {
src = "Test.svg",
format = {frameless = true, border = true},
halign = "left",
valign = "text-bottom",
size = "12x84px",
link = "",
alt = "Test",
class = "noviewer",
lang = "fr",
caption = "Titre de l'image"
})
end
function p:test_extract()
local function test(wikicode, items, expected)
local label = mw.text.nowiki(wikicode) .. "<br />" ..
"{" .. table.concat(items, ", ") .. "}"
self:equals_deep(label, Test_wikicode.extract(wikicode, items), expected, {nowiki = true})
end
test("Test [[Foo]] test", {'link'}, {{page = "Foo", text = "Foo"}})
test("Test [[Foo]] test", {'image'}, nil)
test("Test [[Fichier:Test.svg]] test", {'image'}, {{src = "Test.svg"}})
test("Test [[Fichier:Test.svg]] test", {'link'}, nil)
test("[[Foo]] test", {'^', 'link'}, {{page = "Foo", text = "Foo"}})
test("Test [[Foo]] test", {'^', 'link'}, nil)
test("Test [[Fichier:Test.svg]]", {'image', '$'}, {{src = "Test.svg"}})
test("Test [[Fichier:Test.svg]] test", {'image', '$'}, nil)
test("[[Foo]][[Foo]]", {'link', '*', 'link'}, {{page = "Foo", text = "Foo"}, "", {page = "Foo", text = "Foo"}})
test("[[Foo]] test [[Foo]]", {'link', '*', 'link'}, {{page = "Foo", text = "Foo"}, " test ", {page = "Foo", text = "Foo"}})
test("[[Foo]][[Foo]]", {'link', '+', 'link'}, nil)
test("[[Foo]] test [[Foo]]", {'link', '+', 'link'}, {{page = "Foo", text = "Foo"}, " test ", {page = "Foo", text = "Foo"}})
test("[[Foo]] test [[Bar]][[Foo]]", {'link', '+', 'link'}, {{page = "Foo", text = "Foo"}, " test [[Bar]]", {page = "Foo", text = "Foo"}})
test("Foo", {'-'}, {''})
test("Foo", {'^', '-', '$'}, {'Foo'})
test("Foo", {'^', '-', '*', '+', '$'}, {'', 'Fo', 'o'})
test("[[Foo]] test [[Bar]][[Foo]]", {'link', '-', 'link'}, {{page = "Foo", text = "Foo"}, " test ", {page = "Bar", text = "Bar"}})
test(
'<span class="datasortkey" data-sort-value="France"><span class="flagicon">[[Fichier:Flag of France.svg|20x18px|border|Drapeau de la France|class=noviewer]] </span>[[France|France]]</span>',
{'^', '-', 'image', '-', 'link', '*', '$'},
{
'<span class="datasortkey" data-sort-value="France"><span class="flagicon">',
{src = "Flag of France.svg", size = "20x18px", format = {border = true}, caption = "Drapeau de la France", class = "noviewer"},
' </span>',
{page = "France", text = "France"},
'</span>'
}
)
end
return p