Module:Schematic

local p = {} function p.table( f ) local args = f.args if args[1] == nil then args = f:getParent.args end local caption = args.caption or '' local captionstyle = args.captionstyle or '' local clear = args.clear or '' local float = args.float or '' local size = tonumber( args.size ) or 32 local style = args.style or '' local tablestyle = args.tablestyle or '' local sprite = require( 'Module:Sprite' ).sprite local ids = mw.loadData( 'Module:Schematic/data' ).ids local titles = mw.loadData( 'Module:Schematic/titles' ) local isTable = false if args[2] or  ~=  then isTable = true end local categories = {} if size ~= 32 then tablestyle = 'font-size:' .. size .. 'px;' .. tablestyle end local cols = 0 local maxcols = 0 local schematic = {} local title = '' for _, cell in ipairs( args ) do		cell = mw.text.trim( cell ) if isTable and cell ~= '-' then cols = cols + 1 if cols > maxcols then maxcols = cols end end if cell == '' or cell == 'air' then if isTable then table.insert( schematic, '|' ) else table.insert( schematic, ' ' ) end elseif isTable and cell == '-' then cols = 0 table.insert( schematic, '|-' ) else local layers = {} title = {} for layer in mw.text.gsplit( cell, '%s*+%s*' ) do				local idData = ids[layer] if idData then local image, spriteCat = sprite{ data = 'Schematic/data', iddata = idData, scale = size / 16 }					table.insert( layers, image ) table.insert( categories, spriteCat ) if titles[layer] then table.insert( title, 1, titles[layer] ) end else table.insert( layers, ' ' .. layer .. ' ' ) end end if args.text then table.insert( layers, ' ' .. args.text .. ' ' ) end title = table.concat( title, ' over ' ) layers = table.concat( layers, '' ) if isTable then if layers ~= '' then layers = '| title="' .. title .. '" | ' .. layers .. ' '				else layers = '|' end end table.insert( schematic, layers ) end end

local captionwidth = maxcols * ( size + 1 ) + 1

if isTable then table.insert( schematic, 1, '{|' .. 'class="schematic" style="min-width:' .. captionwidth .. 'px;' .. tablestyle .. '"' ) table.insert( schematic, '|}' ) else if #schematic == 0 then table.insert( schematic, ' ' ) end table.insert( schematic, 1, ' ' ) table.insert( schematic, ' ' ) end local out if caption ~=  or float ~=  then if float == '' then float = 'right' end if clear == '' then clear = 'none' end

if captionwidth < 182 then captionwidth = 182 end if not args.nohelp and mw.title.getCurrentTitle.prefixedText ~= 'Help:Schematic' then caption = ' ' .. f:expandTemplate{ title = 'CommentSprite', args = { '1',						link = 'Help:Schematic', title = 'Schematic help' }				} ..				' ' .. caption end out = { ' ',				' \n', table.concat( schematic, '\n' ), '\n \n' .. caption .. ' ',				' ',			' '		}		out = table.concat( out ) else if isTable then out = table.concat( schematic, '\n' ) else -- Inline schematic should be a single line out = table.concat( schematic ) end end out = out:gsub( ' style=""',  ):gsub( ' title=""%s*|?',  ) return out .. table.concat( categories ) end return p