Helpo:Lua/Koderoj

El Vikipedio, la libera enciklopedio
Logo de la Lua-lingvo Lua

VP:LUA

Kategorioj
Ŝablonoj
  • {{LuaModuleDoc}} por la dokumentado de modulo, por aranĝi la keston kun ligiloj
  • {{Modula statuso}} por la dokumentadoj de modulo, por indiki la evoluan statuson de modulo
  • {{Kun Lua-modulo}} por la dokumentado de ŝablono, kiu uzas Lua-modulon aŭ eĉ entute baziĝas sur modulo
  • {{Uzanto Projekto/Lua}} por uzantopaĝoj
Vidu ankaŭ
Komentoj
  1. (per {{Kun Lua-modulo}})
  2. (per {{LuaModuleDoc}})
vdr

Ĉi tie povas esti montrataj ofte uzeblaj koderoj.

Dependeco de la nomspaco[redakti | redakti fonton]

Por atingi, ke certaj aferoj nur okazu en specifa nomspaco, eblas uzi la jenan kodon:

        currentTitle = mw.title.getCurrentTitle()
        local ns   = currentTitle.namespace
        if ns == 0 then text = "Tio estas artikolo."
        end

Tie anstataŭ la variablo text kun valoro povas esti metata la kodo, kiu nur efiku en la artikola nomspaco. Analogie funkcias la afero ĉe aliaj nomspacoj. Uza ekzemplo por tia kodo troviĝas en {{Coordinates2/provejo}}.

Simile eblas aranĝi zorgigan kategorion, kiu poste estas eĉ uzebla en pli ol unu funkcio:

        local kategorio = ""
        currentTitle = mw.title.getCurrentTitle()
        local ns   = currentTitle.namespace
        if ns == 0 then kategorio = "[[Kategorio:Artikoloj pri katoj]]"
        end

Analizo ĉu estas decimala nombro kun du postkomaj resp. postpunktaj ciferoj[redakti | redakti fonton]

Simila kodo kiel la sekva jam troviĝas en {{Coordinates2}} en la tiea funkcio p.coordinates.

local cMin = mw.ustring.char(8722)   -- Unicode-Minus
local scan = "^[%s]*([%-" .. cMin .. "]?)[0-9]+([,%.])[0-9][0-9][%s]*$"
local sign, sep = mw.ustring.match(s, scan)
if sep then
    if sep == "," then
        s = mw.ustring.gsub(s, ",", ".", 1)
    end
    if sign == cMin then
        s = mw.ustring.gsub(s, cMin, "-", 1)
    end
    -- s ist jetzt im maschinenlesbaren Format
    n = tonumber(s)
end

Nur la jena kodo

    n = tonumber(s)

estis ŝanĝita al

    type = type .. '(' .. s .. ')'

Anstataŭaĵo de {{ucfirst:[redakti | redakti fonton]

En Lua-modulo necesas anstataŭigi {{ucfirst: per Lua-kodo. Unu ebleco estas:[1]

mw.ustring.upper(mw.ustring.sub(str, 1, 1)) .. mw.ustring.sub(str, 2)

Alia ebleco estas:[1]

mw.language.getContentLanguage():ucfirst(str)

mw.html library[redakti | redakti fonton]

Jen kodero el la angla vikipedio:[2]

local root = mw.html.create('table')
root
	:tag('tr')
		:tag('td')
			:css('color', args.color or false)
			:wikitext('some text')
return tostring(root)

Jen unuĉela tabelo en helpa funkcio de modulo:[3]

function subtitle(text)
	-- This function builds subtitles in the box
				local sub_title = mw.html.create('table')
				  :css('text-align','center')
				  :css('width','100%')
				  :css('margin','0 auto')
				local row =  sub_title:tag('tr')
				local sub_title_cell =  row:tag('th')
				   :css('background-color','#EEFFCC')
				   :css('border','1px dotted #FFCC99')
				   :css('padding','0.3em')				   
				   :wikitext(text)
				   :done()
				return tostring(sub_title)
end

Parametroj kiel Lua-variabloj[redakti | redakti fonton]

Eblas uzi parametrojn el ŝablono en Lua.[4]

local pframe = frame:getParent()
local config = frame.args  -- arguments from the template definition
local args = pframe.args   -- arguments from the page calling the template

Iomete alia funkcianta varianto troviĝas en {{Datoj}}, nome[5]:

	local args = frame.args
        local pargs = frame:getParent().args

	local t = args[1] or pargs[1] or "" -- tago
	local m = args[2] or pargs[2] or "" -- monato
	local j = args[3] or pargs[3] or "" -- jaro

Per la helpa modulo {{Arguments}} eblas aranĝi tion en pli kompleksaj moduloj.[6]

	-- This function builds the babel box used by the {{babel}} template.
	if not getArgs then
		getArgs = require('Module:Arguments').getArgs
	end
	--local args = getArgs(frame, {wrappers = 'Template:Babel'})
	local args = getArgs(frame, {wrappers = 'Ŝablono:Nomo de la ŝablono'})

Funkcianta ekzemplo troviĝas en la modulo {{biografio/provejo}} kaj la ŝablono {{Informkesto biografio/provejo}}.

Elvoko de modula funkcio el alia modulo[redakti | redakti fonton]

Eĉ eblas voki modulan funkcion kun (frame) el alia modulo laŭ la jena skemo, difinante tabelforman argumentoliston:

local p = {}
local w = require( "Module:Uzanto:Doesle/Wikidata" )

function p.getWikidata()
    return w.areoKMHA({ args = { id = "Q636120" } })
end

function p.getWikidata2()
    return w.claim({ args = { "P2046", id = "Q636120" } })
end

return p

La testa uzo tiam aspektas jene:

{{#invoke:Uzanto:Doesle/Testmodulo|getWikidata}}

{{#invoke:Uzanto:Doesle/Testmodulo|getWikidata2}}
Ununura funkcio

Eĉ eblas elvoki ununuran funkcion el alia modulo laŭ la jena skemo:[7][8]

-- enplekto de la alia modulo, kun la nomo de la uzata funkcio
local prenubildon = require ("Modulo:Portalo").image

local p = {}

-- elvoko de la funkcio
-- por landaj flagoj kun sekva teksto
local function flago(nomo)
			if nomo == "" or nomo == nil then 
				return 
			end
			local n = prenubildon{nomo} -- ne estu ronda krampo, ĉar estas importita funkcio
			if n ~= "Portal-puzzle.svg" and n ~= nil then
				n = "[[Dosiero:" .. n .. "|18px]] " .. nomo
				return n
			else
				return nomo
			end
			
end

return p

Iom truka transdono de parametroj[redakti | redakti fonton]

Eĉ eblas iomete truke transdoni parametrojn, kies nomoj estas iel kunmetataj el aliaj parametroj.[9]

        local a = args["" .. k] or ""                      -- nenomita parametro
        local b = args["" .. v["parametro"] .. k] or ""    -- nomita parametro

Ĉe tio k devas veni el io tia:[9]

        for k, v in (pairs) do
           
        end

Finfine klaras, ke la sekva varianto funkcias, se p estas difinata jene:

        local p = v["parametro"]
        local x = args["" .. p .. k] or ""

Analizo ĉu io enhavas jam ligilon[redakti | redakti fonton]

Analizas signoĉenon, ĉu ĝi enhavas ligilon:[10]

 s = v:match( "%[%[[^|%]]*| *([^%]]+) *%]%]" )
 if not s then
     s = v:match( "%[%[%s*([^%]]+)%s*%]%]" )
 end
 if not s then
     s = v
 end
  • Die erste Klammer heißt übersetzt: Setze s, wenn etwas gefunden wird, das
    • "[["
    • + allerlei, das weder | noch ] ist
    • + Pipe
    • + potentielle Leerzeichen
    • + MERKEN→s: allerlei, das keine ] ist
    • + potentielle Leerzeichen
    • + "]]"

Rekte en la funkcio:

local s
for k,v in pairs(strings) do
    s = v:match( "%[%[[^|%]]*| *([^%]]+) *%]%]" )
    if not s then
        s = v:match( "%[%[%s*([^%]]+)%s*%]%]" )
    end
    if not s then
        s = v
    end
    output[k] = '[[Kategorio:' .. cat .. ' ' .. mw.text.trim(s)
    if key and key ~= "" then
        output[k] = output[k] .. '|' .. key
    end
    output[k] = output[k] .. ']]'
end

En aparta funkcio:

local function f(v, cat, key)
    local s
    s = v:match( "%[%[[^|%]]*| *([^%]]+) *%]%]" )
    if not s then
        s = v:match( "%[%[%s*([^%]]+)%s*%]%]" )
    end
    if not s then
        s = v
    end
    s = '[[Kategorio:' .. cat .. ' ' .. mw.text.trim(s)
    if key and key ~= "" then
        s = s .. '|' .. key
    end
    return s .. ']]'
end 

for k,v in pairs(strings) do
    output[k] = f(v, cat, key)
end

Iteracio tra "tabelo", kiu estas en submodulo[redakti | redakti fonton]

Eĉ eblas iteracii tra "tabelo", kiu ne estas en la sama modulo, sed en enplektita submodulo. Jen ekzemplo:[11]

	local submodulo = args['submodulo'] or "geokesto"
	local variabloj = 'Modulo:Geografiaĵoj/' .. submodulo
	local parametroj = mw.loadData(variabloj)
	local listo = parametroj.linioj
	if type(listo) == "table" then
		-- testo
		local s
		local par, t, pk, pk2, a1, a2, pri, pri2
		for k, v in pairs(listo) do
--			s = type(k)
--			if s == "string" then
--				return k
--			elseif s == "table" then	
--				return k
--			elseif s == "number" then	

				if type(v) == "table" then
					par = v["parametro"]
					t = v["tipo"]
					pri = v["priskribo"]
					pri2 = v["priskribo2"]						
					pk = v["pKodo"]
					pk2 = v["pKodo2"]
					a1 = v["aldono1"]
					a2 = v["aldono2"]	
					

				-- voki la parametron el args
				par = tostring(par)
				-- local param = args[par]	or ""			
				local param = argumentoj (args, par)
                                -- pliaj kodo
                end -- fino de "for"
        end -- fino de "if"

Analizo de "qualifier" de Vikidatuma ero[redakti | redakti fonton]

Eĉ eblas analizi, ĉu "qualifier" de Vikidatuma ero ekzistas kaj poste konvene trakti tion.[12]

-- mallonga versio
v = bildo[1].qualifiers and bildo[1].qualifiers["P2096"] or nil

-- pli legebla kaj pli kompleta versio
if bildo[1] and bildo[1].qualifiers then
    v = bildo[1].qualifiers["P2096"]
end

Fontoteksto[redakti | redakti fonton]

Se oni volas montri la kompletan fontoteksto de modulo, tio eblas jene:[13]

{{#tag:syntaxhighlight | {{Modulo:Saluton}} | lang=lua}}

kio redonas:

   local p = {} 
  function p.hello(frame)
      local name = frame.args[1]
      if not name then name = 'mondo' end
      return  'Saluton, ' .. name .. '! Tio estas Lua!' 
  end 
  return p

Referencoj[redakti | redakti fonton]

Vidu ankaŭ[redakti | redakti fonton]