全站通知:

模块:List

来自黑神话:悟空WIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索

此模块的文档可以在模块:List/doc创建

-- 本模块参考了 萌娘百科 模块:Var(zh.moegirl.org.cn/模块:Var) 和 模块:Var-array/main (zh.moegirl.org.cn/模块:Var-array/main)
local frame = mw.getCurrentFrame()
local p = {}

function p.v_get(key)
    return frame:callParserFunction("#var", tostring(key))
end

function p.v_set(key, val)
    frame:callParserFunction("#vardefine", tostring(key), tostring(val))
end

function p.v_del(key)
    frame:callParserFunction("#vardefine", tostring(key), '')
end

local prefix = "@list-"
function p.push(frame)
	local k = tostring(frame.args[1])
	local v = tostring(frame.args[2])
	local index_name = prefix .. k .. '.len'
	local index =  p.v_get(index_name)
	if not index or index == '' then
		index = 1
	else
		index = tonumber(index) + 1
	end
	p.v_set(index_name, index)
	
	local list_name = prefix .. k .. "-" .. prefix .. tostring(index)
	p.v_set(list_name, tostring(v))
end

function p.pop(frame)
	local k = tostring(frame.args[1])
	
	local index_name = prefix .. k .. '.len'
	local index = tonumber(p.v_get(index_name))
	
	local list_name = prefix .. k .. "-" .. prefix .. tostring(index)
	local var = p.v_get(list_name)
	p.v_del(list_name)
	if index > 1 then
		index = index - 1
		p.v_set(index_name, index)
	else
		p.v_del(index_name)
		p.v_del(list_name)
	end
	return var
end

function p.size(frame)
	local k = tostring(frame.args[1])
	local index_name = prefix .. k .. '.len'
	return p.v_get(index_name)
end

function p.get(frame)
	local k = tostring(frame.args[1])
	local index = tostring(frame.args[2])
	local list_name = prefix .. k .. "-" .. prefix .. tostring(index)
	return p.v_get(list_name)
end

function p.set(frame)
	local k = tostring(frame.args[1])
	local index = tostring(frame.args[2])
	local v = tostring(frame.args[3])
	local list_name = prefix .. k .. "-" .. prefix .. tostring(index)
	p.v_set(list_name, tostring(v))
end

function p.append(frame)
	local k = tostring(frame.args[1])
	local index = tostring(frame.args[2])
	local v = tostring(frame.args[3])
	local list_name = prefix .. k .. "-" .. prefix .. tostring(index)
	p.v_set(list_name, p.v_get(list_name) .. tostring(v))
end





return p