Module:沙盒/Star0/sandbox

来自Arcaea中文维基

可在Module:沙盒/Star0/sandbox/doc创建此模块的帮助文档

local p = {}

function split(input, delimiter)
    input = tostring(input)
    delimiter = tostring(delimiter)
    if (delimiter == "") then return false end
    local pos, arr = 0, {}
    for st, sp in function() return string.find(input, delimiter, pos, true) end do
        table.insert(arr, string.sub(input, pos, st - 1))
        pos = sp + 1
    end
    table.insert(arr, string.sub(input, pos))
    return arr
end

function trim(str)
   return (string.gsub(str, "^%s*(.-)%s*$", "%1"))
end

function reomve(str,remove)
    local lcSubStrTab = {}
    while true do
        local lcPos = string.find(str,remove)
        if not lcPos then
            lcSubStrTab[#lcSubStrTab+1] =  str    
            break
        end
        local lcSubStr  = string.sub(str,1,lcPos-1)
        lcSubStrTab[#lcSubStrTab+1] = lcSubStr
        str = string.sub(str,lcPos+1,#str)
    end
    local lcMergeStr =""
    local lci = 1
    while true do
        if lcSubStrTab[lci] then
            lcMergeStr = lcMergeStr .. lcSubStrTab[lci] 
            lci = lci + 1
        else 
            break
        end
    end
    return lcMergeStr
end

function table.unique(t, bArray)
    local check = {}
    local n = {}
    local idx = 1
    for k, v in pairs(t) do
        if not check[v] then
            if bArray then
                n[idx] = v
                idx = idx + 1
            else
                n[k] = v
            end
            check[v] = true
        end
    end
    return n
end

local function get_len(tb)
  local len = 0
  for k,v in pairs(tb) do
    len= len+1
  end
return len
end

function talklist(pagename)
	--输入页面名,返回一个包含文本和标题的讨论信息表
	--例如:talklist[1][text]
	local talk=mw.getCurrentFrame():expandTemplate{ title = pagename }
	talk=string.gsub(talk, "===(.-)===", "%1")
	local talklistsnap=split(talk,"==")
	
	tablelong=table.getn(talklistsnap,type)
	
	local Serialnumber=1
	local talktext={}
	local talktitle={}
	for i=1,tonumber((tablelong-1)/2) do
		talktext[Serialnumber]=talklistsnap[(Serialnumber*2)+1]
	    talktitle[Serialnumber]=trim(talklistsnap[(Serialnumber*2)])
		Serialnumber=Serialnumber+1
	end
	
	if type==talktext then return talktext else return talktitle end

end



function userlist(text)
	--输入论题段,输出参与讨论的User顺序表(有重复)。
	local match=string.gmatch (text,".-User:(.-)%|.-UTC")
	local userlist={}
	local user=""
	local i=1
	while true
	do
		user=match()
		if user==nil then break end
		userlist[i]=user
		i=i+1
	end
	return userlist
end

function get_table(talktitle,talktext)
	local result=[[
	{|
	! data-sort-type="number" | # !! 話題 !! <small title="發言數/發言人次 (實際上為計算簽名數)">發言</small> !! <small title="參與討論人數/發言人數">參與</small> !! 最新發言 !! data-sort-type="isoDate" | <small>最後更新(UTC+8)</small>
	]]
	local tableend=[[
	
	|}]]
	local tableSnippet=""
	local userlist={}
	local firstuser,lastuser,lasttime,talk="","","","" --预声明
	
	local lastusersnap=""
	for i=1,get_len(talktext) do
		talk=talktext[i]
		userlist=userlist(talk)
		local firstuser=string.match (userlist,"(.*)")	--获取第一个用户
		local match=string.gmatch (userlist,"(.*)")
		
		--获取最后一个用户
		while true
		do
			lastusersnap=match()
			if lastusersnap==nil then break end
			lastuser=lastusersnap
		end
		
		
		userlist={}
	end
	
	return lastuser

end

function p.main(frame)
	local talktitle=talklist(frame.args[1],talktitle)
	local talktext=talklist(frame.args[1],talktext)
	
	if get_len(talktitle)==get_len(talktext) then return get_table(talktitle,talktext) else return frame:expandTemplate{ title = 'error', args = { 'Topic list 获取错误。' } } end
end

return p