本站文本内容除另有声明外,均在知识共享 署名-非商业性使用-相同方式共享 3.0 协议下提供。(详情…本站文本内容除另有声明外,均在知识共享 署名-非商业性使用-相同方式共享 3.0 协议下提供。(详情…中文Minecraft Wiki是完全公开的。欢迎持续参与翻译工作中文Minecraft Wiki是完全公开的。欢迎持续参与翻译工作Minecraft中文Wiki微博正在更新!或许有兴趣去看看Minecraft中文Wiki微博正在更新!或许有兴趣去看看翻译或创建页面之前,不妨看看译名标准化Wiki条例页面。翻译或创建页面之前,不妨看看译名标准化Wiki条例页面。想与其他用户进行编辑上的沟通?社区专页正是为此创建的。想与其他用户进行编辑上的沟通?社区专页正是为此创建的。需要管理员的协助?在管理员告示板留言也许可以帮到您。需要管理员的协助?在管理员告示板留言也许可以帮到您。

模块:Autolink

来自Minecraft Wiki
跳转至: 导航搜索
这是文档页面,它将被放置到主模块页。查看Template:Documentation以获取更多信息。

Autolink,即自动链接,用于给模板的参数中的英文转换为对应的中文并显示出来,正如Module:Reverselink能将中文参数转换为英文并提供给模板以显示图片。

本模块主要用于:

本模块使用以下子页面作为具体参数:



local p = {}

local block = mw.loadData( 'Module:Autolink/Block' )
local item = mw.loadData( 'Module:Autolink/Item' )
local other = mw.loadData( 'Module:Autolink/Other' )
local exclusive = mw.loadData( 'Module:Autolink/Exclusive' )
local colors = { 'white ', 'orange ', 'magenta ', 'light blue ', 'yellow ', 'lime ', 'pink ', 'gray ', 'light gray ', 'cyan ', 'purple ', 'blue ', 'brown ', 'green ', 'red ', 'black ', 'silver ' }
local colorc = { '白色', '橙色', '品红色', '淡蓝色', '黄色', '黄绿色', '粉红色', '灰色', '淡灰色', '青色', '紫色', '蓝色', '棕色', '绿色', '红色', '黑色', '淡灰色'}

local function Set (list)
	local set = {}
	for _, l in ipairs(list) do set[l] = true end
	return set
end

local coloredItems = Set { 'firework star', 'hardened clay', 'stained clay', 'banner', 'carpet', 'concrete', 'concrete powder', 'glazed terracotta', 'terracotta', 'shield', 'shulker box', 'stained glass', 'stained glass pane', 'wool', 'bed', 'hardened glass', 'hardened stained glass', 'balloon', 'glow stick', 'hardened glass pane', 'hardened glass', 'sparkler' }

-- used by templates, called via #invoke
function p.link( f )
	local args = f
	if f == mw.getCurrentFrame() then 
		args = require( 'Module:ProcessArgs' ).merge( true )
	end
	return p.invlink( args[1] , args[2] , args[3] )
end

function p.invlink( str , mode, type )
	local arg = string.lower(string.gsub(str , "-" , " "))
	-- check for spawn egg
	if string.find(arg, ' spawn egg', -10, true) then
		local mob = other['EntitySprite'][string.sub(arg, 0, -11)]
		if mob == nil then
			error('missing mob entry: ' .. string.sub(arg, 0, -11))
		end
		index = string.find(mob, '|', 0, true)
		if index then
			mob = string.sub(mob, index+1)
		end
		return p.mode('刷怪蛋|' .. mob .. '刷怪蛋', mode)
	end

	local be
	local lce
	-- check for version postfix
	if string.sub(arg, -3) == ' pe' or string.sub(arg, -3) == ' be' then
		be = 1
		arg = string.sub(arg, 0, -4)
	end
	if string.sub(arg, -4) == ' lce' then
		lce = 1
		arg = string.sub(arg, 0, -5)
	end
	-- check for color prefix
	local color
	for i, c in ipairs( colors ) do
		if string.find(arg, c) == 1 then
			local item = string.sub(arg, string.len(c)+1)
			if coloredItems[item] then
				color = colorc[i]
				arg = item
			end
	   end
	end
	local result
	if type and other[type] then
		result = other[type][arg]
	end
	if result == nil then
		result = block[arg] or item[arg]
	end 
	if result == nil and string.sub(arg, -1) == 's' then
		local singular = string.sub(arg, 0, -2)
		result = block[singular] or item[singular]
	end
	if result == nil then
		for _, list in pairs( other ) do
			result = list[arg]
			if result then
				break
			end
		end
	end

	if result == nil then
		result = exclusive[arg] or str
	end
	
	if color then
		result = result .. '|' .. color .. result   
	end

	if be then
		return p.mode(result, mode, '(基岩版)')
	end
	if lce then
		return p.mode(result, mode, '(原主机版)')
	end

	return p.mode(result, mode)
end

function p.mode( str , mode , postfix )
	if postfix then
		str = str .. '|' .. str .. postfix
	end
	index = string.find(str, '|', 0, true)
	-- return the translated part
	if index then
		if mode == 'nolink' then 
		  return string.sub(str, index+1)
		end
		-- return the page link part
		if mode == 'linkonly' then
			return string.sub(str, 1 , index-1)
		end
	end
	return str
end

-- list out all entries with the type
function p.list( f )
	local args = f
	if f == mw.getCurrentFrame() then 
		args = require( 'Module:ProcessArgs' ).merge( true )
	end
	local type = args[1]
	type = string.lower(type)
    local sprite = nil

	local list = nil
	if type == 'block' then
		list = block
        sprite = 'BlockSprite'
	end
	if type == 'item' then
		list = item
        sprite = 'ItemSprite'
	end
    if type == 'entity' then
        list = other['EntitySprite']
        sprite = 'EntitySprite'
    end
	if list == nil then
		return ''
	end
	local result = ''
	local t = {}
	
	for k,_ in pairs(list) do
		table.insert(t, k)
	end
	
	table.sort(t)

	local limit = 50
	local count = 0

    local frame = mw.getCurrentFrame()
	
	local table = nil
	local header = mw.html.create('tr')
    header:tag('th'):wikitext('图标')
	header:tag('th'):wikitext('英文名称')
	header:tag('th'):wikitext('中文名称')
	
	for _,v in ipairs(t) do
		if count == 0 then 
			if table ~= nil then
				result = result .. tostring(table)
			end
			table = mw.html.create('table'):attr('align', 'left'):css('float', 'left'):css('margin', '2px'):css('border', '1px solid silver'):css('text-align', 'center'):css('background-color', '#fff'):node(header)
		end
	
		local row = mw.html.create('tr')
        row:tag('td'):wikitext(frame:preprocess( '{{' .. sprite .. '|' .. v .. '}}' ))
		row:tag('td'):wikitext((v:gsub('(%l)(%w*)', function(a,b) return a:upper()..b end)))
		row:tag('td'):wikitext(p.mode(list[v], 'nolink'))
		table:node(row)
		count = count + 1
		if count == limit then
			count = 0
		end
	end
	
	result = result .. tostring(table)
	return result
end

return p