“模块:TWRVersionCheck”的版本间的差异
跳到导航
跳到搜索
(创建页面,内容为“local p = {} function p.split (inputstr, sep) if sep == nil then sep = "%s" end local t={} for str in string.gmatch(inputstr, "([^"..sep.."]+…”) |
|||
(未显示同一用户的5个中间版本) | |||
第16行: | 第16行: | ||
end | end | ||
return rt | return rt | ||
end | |||
function p.isNum(inputstr) | |||
if inputstr==nil then | |||
return 0 | |||
end | |||
local mst=string.sub(inputstr,1,1) | |||
local lv=string.byte(mst)-48 | |||
if lv>=0 and lv<=9 then | |||
return 1 | |||
end | |||
return 0 | |||
end | end | ||
function p.parseSubVersion(inputstr) | function p.parseSubVersion(inputstr) | ||
第59行: | 第70行: | ||
p.types.pre=-1 | p.types.pre=-1 | ||
p.types.rc=0 | p.types.rc=0 | ||
p.types.stable= | p.types.stable=3 | ||
p.types.hf=2 | p.types.hf=1 | ||
p.types[""]=2 | |||
function p.compareSubVersion(t1,t2) | function p.compareSubVersion(t1,t2) | ||
local p1=p.types[t1.type] | local p1=p.types[t1.type] | ||
第112行: | 第124行: | ||
end | end | ||
function p.compareVersion(s1,s2) | function p.compareVersion(s1,s2) | ||
if p.isNum(s1)~=1 then | |||
return -1 | |||
elseif p.isNum(s2)~=1 then | |||
return 1 | |||
end | |||
return p.compareFullVersion(p.parseFullVersion(s1),p.parseFullVersion(s2)) | |||
end | |||
function p.WikiCompareVersion(frame) | |||
if p.compareVersion(frame.args.ver1,frame.args.ver2)>=0 then | |||
return 1 | |||
end | |||
end | end | ||
return p; | return p; |
2022年8月31日 (三) 02:24的最新版本
WikiCompareVersion ver1 ver2 1
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.isNum(inputstr) if inputstr==nil then return 0 end local mst=string.sub(inputstr,1,1) local lv=string.byte(mst)-48 if lv>=0 and lv<=9 then return 1 end return 0 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=3 p.types.hf=1 p.types[""]=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) if p.isNum(s1)~=1 then return -1 elseif p.isNum(s2)~=1 then return 1 end return p.compareFullVersion(p.parseFullVersion(s1),p.parseFullVersion(s2)) end function p.WikiCompareVersion(frame) if p.compareVersion(frame.args.ver1,frame.args.ver2)>=0 then return 1 end end return p;