Module:沙盒/Star0/sandbox
可在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