Этот модуль используется шаблоном Таблица идентификаторов.
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 '[[Идентификатор]]'
}
local optionalCellConditions = {
pargs.showNumericIDs,
pargs.showFluidTags,
pargs.showBlockTags,
pargs.showItemTags,
pargs.showEntityTags,
pargs.showForms,
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 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] and line[j] ~= '' then
table.insert(out, '||' .. p.parse_tags(line[j]))
else
table.insert(out, "|| ''Нет''")
end
j = j + 1
end
end
if pargs.showForms then
if line[j] and 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.showForms = args['показформы'] == '1'
pargs.translationKeys = args['ключиперевода'] == '1'
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