Module:EPFtest

From Puella Magi Wiki
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 _