Перейти к содержанию

Модуль:Ссылка на версию

Материал из LemonCraft Wiki

Для документации этого модуля может быть создана страница Модуль:Ссылка на версию/doc

local p = {}

local function removePrefix( s, prefixes )
	local final = s
	for _, p in ipairs( prefixes ) do
		final = final:gsub( '^' .. p, '' )
	end
	return mw.text.trim(final)
end

local function getLast( prefix, postfix )
	return function( s )
		local last = mw.ustring.match( s, '^.+%s+(%S+)$' )
		return prefix .. last .. postfix
	end
end

local function getJava( s )
	return removePrefix( s, { '[Jj]ava', ' [Ee]dition', '[Jj][Ee]' } ) .. ' (Java Edition)'
end

local function getBedrock( s )
	return removePrefix( s, { '[Bb]edrock', ' [Ee]dition', '[Bb][Ee]' } ) .. ' (Bedrock Edition)'
end

local function getPocket( s )
	-- Убрано для совместимости
	-- if(s:match('Alpha') and not s:match('Realms')) then
	-- 	return mw.getCurrentFrame():callParserFunction( '#dplreplace', s, '/^(pocket edition|pocket|pe) (Alpha)? ?v?(\\d+\\.\\d+\\.\\d+)? ?(build \\d+)?/i', 'v\\3 alpha \\4' ) .. ' (Pocket Edition)'
	-- end
	return removePrefix( s, { '[Pp]ocket', ' [Ee]dition', '[Pp][Ee]' } ) .. ' (Pocket Edition)'
end

local function getEducation( s )
	return removePrefix( s, { '[Ee]ducation', ' [Ee]dition', '[Ee][Dd][Uu]', '[Ee][Ee]' } ) .. ' (Minecraft Education)'
end

local function getChinese()
	return 'Minecraft China#История'
end

-- Заменено для совместимости. Требуется переработка [[Шаблон:История]].
local function getPlayStation( s )
	-- return removePrefix( s, { '[Pp]layStation', '[Pp][Ss]' } ) .. '#Legacy Console Edition'
	return 'История версий (Legacy Console Edition)#' .. removePrefix( s, { '[Pp]layStation', '[Pp][Ss]' } ) 
end

local function getSwitch( s )
	local prefix = 'История версий (консольные издания)#switch-'
	if s:find('NS Patch') or s:find('Patch s') then
		return prefix .. '1.0.' .. mw.ustring.match( s, '(%d+)$' )
	end
	return prefix .. mw.ustring.match( s, '^.+%s+(%S+)$' )
end

local prefixFunctions = {
	java = getJava,
	je = getJava,
	['pre-classic'] = getJava,
	classic = getJava,
	indev = getJava,
	infdev = getJava,
	alpha = getJava,
	beta = getJava,
	pe = getPocket,
	pocket = getPocket,
	be = getBedrock,
	bedrock = getBedrock,
	edu = getEducation,
	education = getEducation,
	ee = getEducation,
	china = getChinese,
	chinese = getChinese,
	earth = getLast( 'Minecraft Earth:', '' ),
	dungeons = getLast( 'Minecraft Dungeons:', '' ),
	['dungeons arcade'] = getLast( 'Minecraft Dungeons:', '' ),
	legends = getLast( 'Minecraft Legends:', '' ),
	realms = getLast( 'Realms#', '' ),
	xbox = getLast('История версий (консольные издания)#', ''), -- для совместимости
	-- ['360'] = getLast( '', ' (Xbox 360 Edition)' ),
	-- xbox360 = getLast( '', ' (Xbox 360 Edition)' ),
	['360'] = getLast('История версий (консольные издания)#xbox-', ''), -- для совместимости
	xbox360 = getLast('История версий (консольные издания)#xbox-', ''), -- для совместимости
	-- xbone = getLast( '', ' (Xbox One Edition)' ),
	-- xb1 = getLast( '', ' (Xbox One Edition)' ),
	-- xbox1 = getLast( '', ' (Xbox One Edition)' ),
	xbone = getLast('История версий (консольные издания)#xbone-', ''), -- для совместимости
	xb1 = getLast('История версий (консольные издания)#xbone-', ''), -- для совместимости
	xbox1 = getLast('История версий (консольные издания)#xbone-', ''), -- для совместимости
	ps = getPlayStation,
	ps3 = getLast( '', ' (PlayStation 3 Edition)' ),
	ps4 = getLast( '', ' (PlayStation 4 Edition)' ),
	playstation = getLast( '', ' (PlayStation 4 Edition)' ),
	psv = getLast( '', ' (PlayStation Vita Edition)' ),
	psvita = getLast( '', ' (PlayStation Vita Edition)' ),
	-- wii = getLast( 'Patch ', ' (Wii U Edition)' ),
	-- wiiu = getLast( 'Patch ', ' (Wii U Edition)' ),
	wii = getLast('История версий (консольные издания)#wiiu-', ''), -- для совместимости
	wiiu = getLast('История версий (консольные издания)#wiiu-', ''), -- для совместимости
	-- switch = getLast( '', ' (Nintendo Switch Edition)' ),
	-- nswitch = getLast( '', ' (Nintendo Switch Edition)' ),
	switch = getSwitch, -- для совместимости
	nswitch = getSwitch, -- для совместимости
	['3ds'] = getLast( '', ' (New Nintendo 3DS Edition)' ),
	new = getLast( '', ' (New Nintendo 3DS Edition)' ),
	new3ds = getLast( '', ' (New Nintendo 3DS Edition)' ),
	minecraftedu = getLast( '', ' (MinecraftEdu)' ),
	launcher = getLast( '', ' (лаунчер)' ),
}

function p.version( s )
	local v = s:gsub( '^[Mm]inecraft ', '' )
	local prefix = mw.text.split( v, '%s' )[1]:lower()
	local func = prefixFunctions[prefix]
	if func then
		return func( v )
	else
		return v
	end
end

function p.main( f )
	local args = f
	if f == mw.getCurrentFrame() then
		args = require( [[Модуль:ProcessArgs]] ).merge( false )
	end
	local text
	if args[2] == '' then
		text = mw.ustring.match( args[1], '^.+%s+(%S+)$' )
	else
		text = args[2] or args[1]
	end
	return '[[minecraftwiki:' .. p.version( args[1] ) .. '|' .. text .. ']]'
end

return p