Module:inline: Difference between revisions

From Laenkea
Jump to navigation Jump to search
No edit summary
No edit summary
Line 3: Line 3:
function export.parse(term)
function export.parse(term)
     local args = {}
     local args = {}
     local i, key, value = 1
     for inline in mw.ustring.gmatch(term, "<([^>]+)>") do
    while i < #term do
    if mw.ustring.find(inline, "%:") then
        key, value, i = mw.ustring.match(term, "<([a-zA-Z]+):([^>]+)>()", i)
    local arg, def = mw.ustring.match(inline, "^([^%:]+)%:([^%:]+)$")
        if key and value then args[key] = value else break end
    args[arg] = def
    else
    args[inline] = true
    end
     end
     end
     return mw.ustring.gsub(term, "<[a-zA-Z]+:[^>]+>", ""), args
     return mw.ustring.gsub(term, "<[^>]+>", ""), args
end
end


return export
return export

Revision as of 14:01, 31 May 2024

local m_inline = require("Module:inline")
local term, args = m_inline.parse("hello<key1:value1><key2>")

Yields:

term = "hello"
args = {["key1"] = "value1", ["key2"] = true}

local export = {}

function export.parse(term)
    local args = {}
    for inline in mw.ustring.gmatch(term, "<([^>]+)>") do
    	if mw.ustring.find(inline, "%:") then
    		local arg, def = mw.ustring.match(inline, "^([^%:]+)%:([^%:]+)$")
    		args[arg] = def
    	else
    		args[inline] = true
    	end
    end
    return mw.ustring.gsub(term, "<[^>]+>", ""), args
end

return export