Модуль:Таблица идентификаторов

Материал из Minecraft Wiki
Перейти к: навигация, поиск

Этот модуль используется шаблоном Таблица идентификаторов.

local sprite = require('Модуль:Спрайт').sprite
local p = {}

local java_enspr = {
	['Блок'] = 'block',
	['Предмет'] = 'item',
	['Сущность'] = 'entity',
	['Биом'] = 'biome',
	['Окружение'] = 'environment',
}

local bedrock_enspr = {
	['Блок'] = 'tile',
	['Предмет'] = 'item',
	['Сущность'] = 'entity',
	['Биом'] = 'biome',
	['Окружение'] = 'environment',
}

local onlybedrockmessage = ' ([[Bedrock Edition|BE]])'
local onlyjavamessage = ' ([[Java Edition|JE]])'

function p.code_tag(line)
	if string.find(line, '<code>') then
		return line
	else
		return '<code>' .. line .. '</code>'
	end
end

function p.parse_tags(line)
	local list = mw.text.split(line, '%s*,%s*')
	for i, value in ipairs(list) do
		list[i] = p.code_tag(value)
	end
	
	return table.concat(list, '<br>')
end

function p.split_by_first_comma(line)
	local start, end_ = line:find(',%s*')
	return start and line:sub(1, start - 1) or line, end_ and line:sub(end_ + 1)
end

function p._idtable(pargs)
	local out = {
		'{|class=', pargs.class, '\n |-\n !',
		pargs.headers[1] or 'Название',
		'!!',
		pargs.headers[2] or 'Текстовый ID'
	}
	
	local optionalCellConditions = {
		pargs.showNumericIDs or pargs.isType2,
		pargs.showFluidTags,
		pargs.showBlockTags,
		pargs.showItemTags,
		pargs.showEntityTags,
		pargs.showItemForms,
		pargs.translationKeys or pargs.generateTranslationKeys
	}
	
	local optionalCellContents = {
		'Числовой ID' .. (pargs.numericOnlyBedrock and onlybedrockmessage or ''),
		'[[Тег|Теги жидкости]]' .. onlyjavamessage,
		'[[Тег|Теги блока]]' .. onlyjavamessage,
		'[[Тег|Теги предмета]]' .. onlyjavamessage,
		'[[Тег|Теги сущности]]' .. onlyjavamessage,
		'Форма предмета?',
		'Ключи перевода'
	}
	
	for i, condition in ipairs(optionalCellConditions) do
		if condition then
			table.insert(out, '!!' .. (pargs.headers[i+2] or optionalCellContents[i]))
		end
	end

	local showTagsFields = {
		pargs.showFluidTags,
		pargs.showBlockTags,
		pargs.showItemTags,
		pargs.showEntityTags,
	}
	
	local spriteType = pargs.spriteType
	for i, line in ipairs(pargs.lines) do
		local spriteName, displayName = p.split_by_first_comma(line[1])
		local sprite, body = sprite({spriteName, ['текст'] = displayName or spriteName, ['данные'] = 'Спрайт/' .. spriteType})
		table.insert(out, '\n|-\n|' .. sprite .. '||' .. p.code_tag(line[2]))
		
		local j = 3
		if pargs.showNumericIDs or pargs.isType2 then
			table.insert(out, '||' .. p.code_tag(line[j]))
			j = j + 1
		end

		for i2, showTagsField in ipairs(showTagsFields) do
			if showTagsField then
				if line[j] ~= '' then
					table.insert(out, '||' .. p.parse_tags(line[j]))
				else
					table.insert(out, "|| ''Нет''")
				end
				j = j + 1
			end
		end

		if pargs.showItemForms then
			if line[j] ~= '' then
				table.insert(out, '||' .. line[j])
			else
				table.insert(out, '|| Отсутствует')
			end
			j = j + 1
		end

		if pargs.translationKeys or pargs.generateTranslationKeys then
			local text = '?'
			
			if pargs.translationKeys and line[j] then
				text = p.parse_tags(line[j])
			elseif pargs.generateTranslationKeys == 'java' then
				text = p.code_tag(java_enspr[spriteType] .. '.minecraft.' .. line[2])
			elseif pargs.generateTranslationKeys == 'bedrock' then
				text = p.code_tag(bedrock_enspr[spriteType] .. '.' .. line[2] .. '.name')
			end

			table.insert(out, '|| ' .. text)
			if text == '?' and pargs.showCategories then
				table.insert(out, '[[Категория:Страницы с неизвестным значением ключа перевода]]')
			end
			j = j + 1
		end
	end
	
	table.insert(out, '\n|}')
	return table.concat(out)
end

function p.idtable(f)
	local args = f
	if f == mw.getCurrentFrame() then
		args = f:getParent().args
	else
		f = mw.getCurrentFrame()
	end
	
	local pargs = {}
	pargs.class = args['class'] or '\"wikitable\"'
	pargs.spriteType = args['спрайт-тип'] or 'Блок'
	pargs.headers = {
		args['назв'],
		args['назв2'],
		args['назв3'],
		args['назв4'],
		args['назв5'],
		args['назв6'],
		args['назв7'],
		args['назв8'],
		args['назв9'],
	}
	
	pargs.generateTranslationKeys = args['генерацияключейперевода']
	
	pargs.showNumericIDs = args['показномерid'] == '1'
	pargs.numericOnlyBedrock = args['номертолькоbedrock'] == '1'
	pargs.showFluidTags = args['показтегижидк'] == '1'
	pargs.showBlockTags = args['показтегиблока'] == '1'
	pargs.showItemTags = args['показтегипредмета'] == '1'
	pargs.showEntityTags = args['показтегисущности'] == '1'
	pargs.showItemForms = args['показформыпредмета'] == '1'
	pargs.translationKeys = args['ключиперевода'] == '1'
	pargs.isType2 = args['тип'] == '2'
	
	pargs.showCategories = not args['некат']
	
	pargs.lines = {}
	for i, arg in ipairs(args) do
		pargs.lines[i] = mw.text.split(mw.text.trim(arg), '%s*;%s*')
	end
	
	return p._idtable(pargs)
end

return p