模块:TWRVersionCheck
跳到导航
跳到搜索
WikiCompareVersion ver1 ver2 脚本错误:函数“WikiCompareVersion”不存在。
local p = {}
function p.split (inputstr, sep)
if sep == nil then
sep = "%s"
end
local t={}
for str in string.gmatch(inputstr, "([^"..sep.."]+)") do
table.insert(t, str)
end
return t
end
function p.parseNumberVersion(inputstr)
local rt=p.split(inputstr,"\\.")
for i, v in ipairs( rt ) do
rt[i]=tonumber(v);
end
return rt
end
function p.parseSubVersion(inputstr)
local ext=0
local ver=""
local t={}
for i=1,string.len(inputstr) do
local mst=string.sub(inputstr,i,i)
local lv=string.byte(mst)-48
if lv>=0 and lv<=9 then
ext=i
break
end
ver=ver..mst
end
t.ver=p.parseNumberVersion(string.sub(inputstr,ext))
t.type=ver
return t
end
function p.parseFullVersion(inputstr)
local ss=p.split (inputstr,"-")
local t={}
local subs={}
t.ver=p.parseNumberVersion(ss[1])
for i=2,#ss do
subs[i-1]=p.parseSubVersion(ss[i])
end
t.sub=subs
return t
end
function p.compareNumberVersion(t1,t2)
local len=math.min(#t1,#t2)
for i=1,len do
if t1[i]>t2[i] then
return 1
elseif t1[i]<t2[i] then
return -1
end
end
return 0
end
p.types={}
p.types.pre=-1
p.types.rc=0
p.types.stable=1
p.types.hf=2
function p.compareSubVersion(t1,t2)
local p1=p.types[t1.type]
local p2=p.types[t2.type]
if p1>p2 then
return 1
elseif p1<p2 then
return -1
end
return p.compareNumberVersion(t1.ver,t2.ver)
end
function p.compareFullVersion(t1,t2)
local mv=p.compareNumberVersion(t1.ver,t2.ver)
if mv~=0 then
return mv
end
if #t1.sub==0 then
if #t2.sub~=0 then
if t2.sub[1].type~="pre" then
return -1
end
return 1
end
return 0
end
if #t2.sub==0 then
if t1.sub[1].type=="pre" then
return -1
end
return 1
end
local len=math.min(#t1.sub,#t2.sub)
for i=1,len do
local mv2=p.compareSubVersion(t1.sub[i],t2.sub[i])
if mv2~=0 then
return mv2
end
end
if #t2.sub>#t1.sub then
if t2.sub[#t1.sub+1].type=="pre" then
return 1
end
return -1
elseif #t2.sub<#t1.sub then
if t1.sub[#t2.sub+1].type=="pre" then
return -1
end
return 1
end
return 0
end
function p.compareVersion(s1,s2)
return p.compareFullVersion(p.parseFullVersion(s1),p.parseFullVersion(s2))
end
return p;