Этот модуль используется шаблоном Таблица идентификаторов.
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