Module:Sandbox/HistoryM:修订间差异
跳转到导航
跳转到搜索
添加的内容 删除的内容
小无编辑摘要 |
小无编辑摘要 |
||
第11行: | 第11行: | ||
local HVindex |
local HVindex |
||
local HVrowspan |
local HVrowspan |
||
local Hindex |
local Hindex |
||
local Hrowspan |
local Hrowspan |
||
local versionLink = require( 'Module:Version link' ).main |
|||
local editionAlias={ |
local editionAlias={ |
||
第96行: | 第97行: | ||
end |
end |
||
function |
function getVersionLink(a,b,isSnap) |
||
if(a=='none') then |
if(a=='none') then |
||
if(b=='unknown' or b=='?') then return '?' end |
if(b=='unknown' or b=='?') then return '?' end |
||
第129行: | 第130行: | ||
end |
end |
||
return |
return require( 'Module:Version link' ).main({c,b:gsub( '^%((.*)%)$', '%1')}) |
||
end |
end |
||
第224行: | 第225行: | ||
end |
end |
||
prnt( |
prnt(getversionLink(args.link or 'ver', args[2],false)) |
||
prnt('</th>') |
prnt('</th>') |
||
end |
end |
||
第230行: | 第231行: | ||
if(args.snap ~= nil) then |
if(args.snap ~= nil) then |
||
prnt('<th colspan="3" rowspan="' .. snapRows ..'">') |
prnt('<th colspan="3" rowspan="' .. snapRows ..'">') |
||
prnt( |
prnt(getversionLink(args.slink or 'ver', args.snap,true)) |
||
prnt('</th>') |
prnt('</th>') |
||
end |
end |
2023年6月18日 (日) 09:04的版本
local p = {}
local Hmode = nil
local Hver = nil
local HV = {
xbox = nil,
xbone = nil,
ps = nil,
wiiu = nil,
switch = nil
}
local HVindex
local HVrowspan
local Hindex
local Hrowspan
local versionLink = require( 'Module:Version link' ).main
local editionAlias={
foot = "foot",
['pre-classic'] = "java pre-Classic", ['java pre-classic'] = "java pre-Classic",
classic = "java Classic", ['java classic'] = "java Classic",
['classic server'] = "java Classic server", ['java classic server'] = "java Classic server",
indev = "java Indev", ['java indev'] = "java Indev",
infdev = "java Infdev", ['java infdev'] = "java Infdev",
alpha = "java Alpha", ['java alpha'] = "java Alpha", ['java edition alpha'] = "java Alpha",
['alpha server'] = "java Alpha server", ['java alpha server'] = "java Alpha server", ['java edition alpha server'] = "java Alpha server",
beta = "java Beta", ['java beta'] = "java Beta", ['java edition beta'] = "java Beta",
je = "java", java = "java", ['java edition'] = "java",
['java edition upcoming'] = "java upcoming", ['java upcoming'] = "java upcoming", ['upcoming java'] = "java upcoming",
['pe alpha'] = "pocket Alpha", ['pocket alpha'] = "pocket Alpha", ['pocket edition alpha'] = "pocket Alpha",
pe = "pocket", pocket = "pocket", ['pocket edition'] = "pocket",
ce = "console", lce = "console", console = "console", ['legacy console'] = "console", ['console edition'] = "console", ['legacy console edition'] = "console",
be = "bedrock", bedrock = "bedrock", ['bedrock edition'] = "bedrock",
['be upcoming'] = "bedrock upcoming", ['bedrock upcoming'] = "bedrock upcoming", ['bedrock edition upcoming'] = "bedrock upcoming", ['upcoming bedrock'] = "bedrock upcoming",
['3ds'] = "3ds", new3ds = "3ds", ['new 3ds'] = "3ds",
realms = "realms",
edu = "edu", minecraftedu = "edu",
education = "education", ['education edition'] = "education",
['ee upcoming'] = "education upcoming", ['education upcoming'] = "education upcoming", ['education edition upcoming'] = "education upcoming", ['upcoming education'] = "education upcoming",
ps4 = "ps4", playstation4 = "ps4", ['playstation 4'] = "ps4",
earth = "earth", ['minecraft earth'] = "earth",
dungeons = "dungeons", ['minecraft dungeons'] = "dungeons",
['?'] = "unknown", unknown = "unknown"
}
local headerText={
['java pre-Classic'] = '[[Java版pre-Classic]]',
['java Classic'] = '[[Java版Classic]]',
['java Classic server'] = '[[Java版Classic|Java版Classic服务器]]',
['java Indev'] = '[[Java版Indev]]',
['java Infdev'] = '[[Java版Infdev]]',
['java Alpha'] = '[[Java版Alpha]]',
['java Alpha server'] = '[[Java版Alpha|Java版Alpha服务器]]',
['java Beta'] = '[[Java版Beta]]',
['java'] = '[[Java版版本记录|Java版]]',
['java upcoming'] = '[[计划版本#Java版|Java版(即将到来)]]',
['pocket Alpha'] = '[[携带版Alpha]]',
['pocket'] = '[[携带版]]',
['bedrock'] = '[[基岩版版本记录|基岩版]]',
['bedrock upcoming'] = '[[计划版本#基岩版|基岩版(即将到来)]]',
['edu'] = '[[MinecraftEdu]]',
['education'] = '[[教育版版本记录|教育版]]',
['education upcoming'] = '[[计划版本#教育版|教育版(即将到来)]]',
['console'] = '[[原主机版版本记录|原主机版]]',
['realms'] = '[[Realms#历史|Realms]]',
['3ds'] = '[[New Nintendo 3DS版版本记录|New Nintendo 3DS版]]',
['ps4'] = '[[原主机版版本记录|PlayStation 4版]]',
['earth'] = '[[Minecraft Earth]]',
['dungeons'] = '[[Minecraft Dungeons]]',
['unknown'] = '未知'
}
local versionLinks ={
['java upcoming'] = 'java',
['bedrock upcoming'] = 'bedrock',
['education upcoming'] = 'education',
ps4 = 'ps4',
earth = 'Earth',
dungeons = 'Dungeons'
}
function resetCon()
HV.xbox = nil
HV.xbone = nil
HV.ps = nil
HV.wiiu = nil
HV.switch = nil
end
function reset()
Hver = nil
resetCon()
end
function footReset()
Hmode = nil
reset()
end
function getVersionLink(a,b,isSnap)
if(a=='none') then
if(b=='unknown' or b=='?') then return '?' end
if(isSnap and b=='java') then return '' end
return b
end
if(a=='ver') then
if(b=='unknown' or b=='?') then return '?' end
if(isSnap and b=='java') then return '' end
if((not isSnap) and (Hmode=='realms')) then return b end
local c
if(not isSnap) then
if(b=='Pre-release' and Hmode == 'pocket Alpha') then
c= 'pocket Pre-release'
end
if(Hmode == 'java Classic server' or Hmode == 'java Alpha server') then
if(Hmode=='java Classic server') then c= 'java Classic服务器'..b
elseif(Hmode == 'java Alpha server') then c= 'java Alpha服务器'..b else
c= 'java 服务器'..b end
else
c= (versionLinks[Hmode] or Hmode)..' '..b
end
else
c=(versionLinks[Hmode] or Hmode)..' '..mw.getCurrentFrame():preprocess([[{{
#switch:
{{lc:{{#dplreplace: ]]..b..[[ | ^(pre{{!}}rc{{!}}exp{{!}}build{{!}}Pre-[Rr]elease{{!}}Test Build{{!}}release{{!}}20[01]).*?$ | \\1 }} }}
| pre | rc | exp = ]]..Hver..'-'..b..[[
| test build | pre-release | build | 200 | 201 = ]]..Hver..' '..b..[[
| release | 正式版 = ]]..Hver..[[
| ]]..b..[[
}}]])
end
return require( 'Module:Version link' ).main({c,b:gsub( '^%((.*)%)$', '%1')})
end
if(a:find('//',1,true)) then return '['..a..' '..b..']' else return '[['..a..'|'..b..']]' end
end
function consoleVersionLink(platform,version)
if(version=='none') then return ' ' end
if(version=='unknown' or version=='?') then return '?' end
local r
if(platform=='xbox') then r='{{Version link|xb360 '..version..'|'..version..'}}'
elseif(platform=='xbone') then r='{{Version link|xbone '..version..'|'..version..'}}'
elseif(platform=='wiiu') then r='{{Version link|wiiu '..version..'|'..version..'}}'
elseif(platform=='switch') then r='{{Version link|switch '..version..'|'..version..'}}'
elseif(platform=='ps') then r='{{Version link|ps '..version..'|{{#dplreplace:'..version..' | \\w*\\(.*?\\)$ }}}}'
else return '?' end
return mw.getCurrentFrame():preprocess(r)
end
function addConsoleVersions(platform,version,prnt)
if((version~=nil and version == HV[platform]) or (version==nil and HV[platform]~=nil))
then
return
end
prnt('<th class="nowrap" rowspan="')
HV[platform] = version or "none"
HVindex[platform] = HVindex[platform] + 1
prnt(HVrowspan[platform][HVindex[platform]]..'">')
prnt(consoleVersionLink(platform,version or 'none'))
prnt('</th>')
end
function forLines(args, prnt)
local snapRows = 1
for i,_ in ipairs(args) do if(i>3) then snapRows = snapRows+1 end end --要保证3不是nil
--Header or Foot
if(args[1] ~= nil and args[1] ~= '') then
Hmode = editionAlias[(args[1]):lower()] or (args[1]):lower()
if (Hmode == 'foot') then
prnt('</table>')
footReset()
Hhead = 0
return
end
reset()
prnt('<tr><th colspan="6">')
prnt(headerText[Hmode] or ('[['.. Hmode ..']]'))
prnt('</th></tr>')
return
end
--Content rows
prnt('<tr>')
if((Hmode == 'console') and (args.xbox or args.xbone or args.ps or args.wiiu or args.switch )) then
Hver = nil
if(args[3] ~= nil and args[3] ~= '') then
snapRows = snapRows+1
end
addConsoleVersions("xbox",args.xbox,prnt)
addConsoleVersions("xbone",args.xbone,prnt)
addConsoleVersions("ps",args.ps,prnt)
addConsoleVersions("wiiu",args.wiiu,prnt)
addConsoleVersions("switch",args.switch,prnt)
prnt('<td>'..args[2]..'</td></tr>')
for k,v in ipairs(args) do if(k>2) then prnt('<tr><td>'..v..'</td></tr>') end end --要保证中间没有nil
return
end
--Other versions:
resetCon()
if((args.snap == nil) or (args[2] and args[2]~='' and (args[2] ~= Hver))) then
Hver = nil
prnt('<th ')
if( not (args.link or args[2]:find('(',1,true))) then prnt('class="nowrap"') end
prnt(' rowspan="')
if( args.snap ~= nil) then
Hver = args[2]
Hindex = Hindex + 1
prnt(Hrowspan[Hindex]..'" colspan="2">')
else
prnt(snapRows .. '" colspan="5">')
end
prnt(getversionLink(args.link or 'ver', args[2],false))
prnt('</th>')
end
if(args.snap ~= nil) then
prnt('<th colspan="3" rowspan="' .. snapRows ..'">')
prnt(getversionLink(args.slink or 'ver', args.snap,true))
prnt('</th>')
end
prnt('<td>'..args[3]..'</td></tr>')
for k,v in ipairs(args) do if(k>3) then prnt('<tr><td>'..v..'</td></tr>') end end --要保证中间不是nil
return
end
function p.getLines(f)
local args = f
if f == mw.getCurrentFrame() then
args = require( 'Module:ProcessArgs' ).merge( true )
end
assert(mw.text.trim(args[1]):sub(-14)=='<!--LineEnd-->')
local stringLines = mw.text.split(mw.text.trim(args[1]):sub(1,-15),'<!--LineEnd-->',true)
local tableLines = {}
local stringArgs
local temp,temp1,temp2,temp3
for i,l in ipairs(stringLines) do
tableLines[i]={}
temp = mw.text.trim(l) or ''
if(temp~='') then
stringArgs = mw.text.split(temp,'<!--ArgSep-->',true)
for m,n in ipairs(stringArgs) do
if(n~='') then
temp = n:find("=",1,true)
temp1 = mw.text.trim(n:sub(1,temp-1))
temp1 = tonumber(temp1) or temp1
temp2 = mw.text.trim(n:sub(temp+1))
tableLines[i][temp1]=temp2
end
end
end
end
return tableLines
end
function p.printArgs(f)
local args = f
if f == mw.getCurrentFrame() then
args = require( 'Module:ProcessArgs' ).merge( false )
end
local result = ''
for k,v in pairs(args) do
result=result..k..'='..v..'<!--ArgSep-->'
end
result = result..'<!--LineEnd-->'
return result
end
function countConsoleVersion(platform,version,snapRows)
if((version~=nil and version == HV[platform]) or (version==nil and HV[platform]~=nil))
then
HVrowspan[platform][HVindex[platform]] = HVrowspan[platform][HVindex[platform]] + snapRows
return
end
HV[platform] = version or "none"
HVindex[platform] = HVindex[platform] + 1
HVrowspan[platform][HVindex[platform]] = (HVrowspan[platform][HVindex[platform]] or 0) + snapRows
end
function countLine(args)
local snapRows = 1
for i,_ in ipairs(args) do if(i>3) then snapRows = snapRows+1 end end --要保证3不是nil
--Header or Foot
if(args[1] ~= nil and args[1] ~= '') then
Hmode = editionAlias[(args[1]):lower()] or (args[1]):lower()
if (Hmode == 'foot') then
footReset()
return
end
reset()
return
end
--Content rows
if((Hmode == 'console') and (args.xbox or args.xbone or args.ps or args.wiiu or args.switch )) then
Hver = nil
if(args[3] ~= nil and args[3] ~= '') then
snapRows = snapRows+1
end
countConsoleVersion("xbox",args.xbox,snapRows)
countConsoleVersion("xbone",args.xbone,snapRows)
countConsoleVersion("ps",args.ps,snapRows)
countConsoleVersion("wiiu",args.wiiu,snapRows)
countConsoleVersion("switch",args.switch,snapRows)
return
end
--Other versions:
resetCon()
if((args.snap == nil) or (args[2] and args[2]~='' and (args[2] ~= Hver))) then
Hver = nil
if( args.snap ~= nil) then
Hver = args[2]
Hindex = Hindex + 1
end
end
if(args.snap ~= nil) then
Hrowspan[Hindex] = (Hrowspan[Hindex] or 0) + snapRows
end
return
end
function initRowspan()
Hrowspan = {}
HVrowspan = {
xbox = {},
xbone = {},
ps = {},
wiiu = {},
switch = {}
}
end
function initRowspanIndex()
Hindex = 0
HVindex = {
xbox = 0,
xbone = 0,
ps = 0,
wiiu = 0,
switch = 0
}
end
function p.main(f)
local lines = p.getLines(f)
initRowspan()
initRowspanIndex()
for k,v in ipairs(lines) do
countLine(v)
end
initRowspanIndex()
Hhead=0
local result = {}
for k,v in ipairs(lines) do
if(Hhead~=1) then
table.insert(result, '<table class="wikitable" data-description="历史">')
Hhead = 1
end
forLines(v,function(a) table.insert(result, a) end)
end
return table.concat(result)
end
return p