Utilisateur:Zebulon84/Brouillon2

Une page de Wikipédia, l'encyclopédie libre.
Sauter à la navigation Sauter à la recherche

Tutoriel pour installer Eclipse Lua Developement Tool et le paramétrer pour utiliser les bibliothèques MediaWiki.

Installer eclipse LDT[modifier | modifier le code]

Si vous n'avez pas Eclipse, télécharger le standalone product adapté à votre OS sur la page d'eclipse LDT.

C'est un simple fichier Zip qu'il suffit de décompresser dans un répertoire.

Si vous avez Windows 64 bits, il faut aussi Java 64 bit qui peut être trouvé sur java.com.

Après avoir installé java, il faut lier Eclipse à cette version 64 bit. Cela se fait dans le fichier « LuaDevelopmentTools.ini » qui est dans le répertoire principal d'Eclipse.

Sous Windows 7-64 bit, il faut ajouter la ligne « C:\Program Files\Java\jre7\bin\javaw.exe » juste après la ligne « -vm ».

J'ai Windows 7-64 bits et je n'ai pas eu à faire ça — Şÿℵדαχ₮ɘɼɾ๏ʁ You talkin' to me?

Il est normalement possible de lancer Eclipse après avoir fait cela.

Wiki fonctionnant avec du texte codé en UTF-8, pour éviter les problèmes il est préférable de configurer Eclipse pour utiliser aussi l'UTF-8. Après avoir lancé Eclipse, aller dans le menu :

  • Window / Preferences / General / Workspace

Dans la zone « Text file encoding » cocher « Other » et sélectionner UTF-8.

Chez moi ce choix me donne ça : « {{Traduction/R�f�rence}} : langue non pr�cis�e. [[Cat�gorie: » — Şÿℵדαχ₮ɘɼɾ๏ʁ You talkin' to me?

Installation des bibliothèques Wiki[modifier | modifier le code]

Je ne sais pas créer une véritable « libra ».

Les bibliothéques MediaWiki pour lua se trouvent sur le WikiMedia repositories et sur phabricator.

La version lua de Scribunto est dans engines / LuaCommon / lualib. Normalement le lien y amène directement. Cliquer sur « zip » dans la ligne de menu pour télécharger l'ensemble de la librairie.

Décompresser la librairie dans un répertoire « Scribunto » au niveau des futur fichier de projets lua.

Pour pouvoir utiliser ces fichier, il faut les modifier un peu. Voici ce que j'ai fait, ce n'est peut-être pas optimum, mais ça marche à peu près :

mw.lua[modifier | modifier le code]

Ce fichier fait appel à pas mal de variables issues de php, donc j'ai presque tout viré pour remplacer par

mw = mw or {}

function mw.setupInterface( options )
end

function mw.clone( val )
    local tableRefs = {}
    local function recursiveClone( val )
        if type( val ) == 'table' then
            -- Encode circular references correctly
            if tableRefs[val] ~= nil then
                return tableRefs[val]
            end

            local retVal
            retVal = {}
            tableRefs[val] = retVal

            -- Copy metatable
            if getmetatable( val ) then
                setmetatable( retVal, recursiveClone( getmetatable( val ) ) )
            end

            for key, elt in pairs( val ) do
                retVal[key] = recursiveClone( elt )
            end
            return retVal
        else
            return val
        end
    end
    return recursiveClone( val )
end

function mw.executeModule( chunk, isConsole )
end

function mw.makeProtectedEnvFuncs( protectedEnvironments, protectedFunctions )
end

local function newFrame( frameId, ... )
end

function mw.executeFunction( chunk )
end

function mw.log( ... )
end

function mw.logObject( object, prefix )
end

function mw.clearLogBuffer()
end

function mw.getLogBuffer()
end

function mw.getCurrentFrame()
end

function mw.incrementExpensiveFunctionCount()
end

local function dataWrapper( data, seen )
end

local function validateData( d, seen )
end

function mw.loadData( module )
    return require (module)
end

-- load other sub-librairies
mw.ustring = require 'ustring'
mw.uri = require 'uri'
mw.title = require 'title'
mw.text = require 'text'
mw.site = require 'site'
mw.message = require 'message'
mw.language = require 'language'
mw.site.namespaces = {}

-- require will ignore 'Module:' text and replace all '/' by '_' to be able to load files.
-- Modules names on Wiki 'Module:Langue/Data' should be in a file named 'Langue_Data.lua'
local req = _G.require

function _G.require (modname)
    local name = string.gsub(modname,'Module:','')
    name = string.gsub(name,'/','_')
    return req(name)
end

return mw

ustring/lower.lua et upper.lua[modifier | modifier le code]

Ces fichier semble trop long pour Eclipse. En ne gardant que ~500 lignes et en supprimant les conversions des caractères que je n'avais encore jamais vu, ça marche.

Création d'un nouveau projet[modifier | modifier le code]

A la création d'un projet, il faut ajouter le répertoire « Scribunto » aux sources du projet :

  • Proprerties / Lua / Build Path / Sources / Link Source...

Pour utiliser les fonctions Scribunto il ne reste qu'a créer la table mw : Dans le fichier main ajouter :

  • mw = require 'mw'

Pour utiliser les fonctions liées aux titres de page namespace, ... il faut tricher un peu. Pour tester une page dans l'espace principal, j'ai ajouté :

  • mw.title.getCurrentTitle = function () return {namespace = 0} end

Bugs[modifier | modifier le code]

  • Avec cette configuration, l'utilisation de « mw.ustring.match » avec une seule capture m'a généré une erreur, non présente une fois le code sur wiki.
  • LoadData est ici identique à require, et génère une « vraie » table. Une fois sur wiki, la table est en lecture seule ce qui pose parfois des soucis.