Module:EPFtest
Jump to navigation
Jump to search
Documentation for this module may be created at Module:EPFtest/doc
-- source of gsplit and split: https://stackoverflow.com/a/43582076
-- gsplit: iterate over substrings in a string separated by a pattern
--
-- Parameters:
-- text (string) - the string to iterate over
-- pattern (string) - the separator pattern
-- plain (boolean) - if true (or truthy), pattern is interpreted as a plain
-- string, not a Lua pattern
--
-- Returns: iterator
--
-- Usage:
-- for substr in gsplit(text, pattern, plain) do
-- doSomething(substr)
-- end
local function gsplit(text, pattern, plain)
local splitStart, length = 1, #text
return function ()
if splitStart then
local sepStart, sepEnd = string.find(text, pattern, splitStart, plain)
local ret
if not sepStart then
ret = string.sub(text, splitStart)
splitStart = nil
elseif sepEnd < sepStart then
-- Empty separator!
ret = string.sub(text, splitStart, sepStart)
if sepStart < length then
splitStart = sepStart + 1
else
splitStart = nil
end
else
ret = sepStart > splitStart and string.sub(text, splitStart, sepStart - 1) or ''
splitStart = sepEnd + 1
end
return ret
end
end
end
-- split: split a string into substrings separated by a pattern.
--
-- Parameters:
-- text (string) - the string to iterate over
-- pattern (string) - the separator pattern
-- plain (boolean) - if true (or truthy), pattern is interpreted as a plain
-- string, not a Lua pattern
--
-- Returns: table (a sequence table containing the substrings)
local function split(text, pattern, plain)
local ret = {}
for match in gsplit(text, pattern, plain) do
table.insert(ret, match)
end
return ret
end
local _ = {}
function _.tabs(frame)
result = "<tabber>\n"
for k, v in ipairs(frame.args) do
if k % 2 == 1 then
result = result .. "|-| " .. v .. " = \n"
else
result = result .. v .. "\n"
end
end
result = result .. "</tabber>"
return frame:preprocess(result)
end
function _.dpltabs(frame)
local character = frame.args[1]
local dplquery = [[{{#dpl:
|titlematch={{#ifexist:{{{character}}} in Magia Exedra|{{{character}}} in Magia Exedra/%|{{{character}}}/%}}
|nottitlematch={{#ifexist:{{{character}}} in Magia Exedra|{{{character}}} in Magia Exedra/%/%|{{{character}}}/%/%}}
|category= Magia Exedra Kioku by ID
|ordermethod= sortkey
|namespace=
|redirects=exclude
|include=*
|format=,²{#replace:%TITLE%¦{{#ifexist:{{{character}}} in Magia Exedra|{{{character}}} in Magia Exedra/|{{{character}}}/}}}²SPLITSPLITSPLIT¶,SPLITSPLITSPLIT
}}]]
local a = string.gsub(dplquery,"{{{character}}}", character)
local a = frame:preprocess(a)
local t = gsplit(a, "SPLITSPLITSPLIT", true)
local r = ""
local i = 0
for element in t do
if element ~= "" and element ~= nil then
if i % 2 == 0 then
r = r .. "|-| " .. element .. " = \n"
else
r = r .. element .. "\n"
end
i = i +1
end
end
return frame:preprocess("<tabber>\n" .. r .. "</tabber>")
end
return _