Module:Sandbox/HistoryM:修订间差异

来自Minecraft Wiki
跳转到导航 跳转到搜索
添加的内容 删除的内容
无编辑摘要
无编辑摘要
第11行: 第11行:
local HVindex
local HVindex
local HVrowspan
local HVrowspan
local Hindex = 0
local Hindex
local Hrowspan
local Hrowspan
local versionLink = require( 'Module:Version link' ).main


local editionAlias={
local editionAlias={
第96行: 第97行:
end
end


function versionLink(a,b,isSnap)
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 mw.getCurrentFrame():preprocess('{{Version link|'..c..'|{{#dplreplace: '..b..' | ^\\((.*?)\\)$ | \\1 }}}}')
return require( 'Module:Version link' ).main({c,b:gsub( '^%((.*)%)$', '%1')})
end
end
第224行: 第225行:
end
end


prnt(versionLink(args.link or 'ver', args[2],false))
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(versionLink(args.slink or 'ver', args.snap,true))
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