Module:2-ary truth table

local p = {}

function p.main(frame) local args = require('Module:Arguments').getArgs(frame)

-- table_headings includes the headings and the class for the heading local table_headings = { {frame:extensionTag("math",args['A'] or 'A',{}), ''}, {frame:extensionTag("math",args['B'] or 'B',{}), ''} }	-- truth_table is the transpose of the rendered table local truth_table = { {false, false, true, true}, {false, true, false, true} }	-- thick_border marks which columns have a thick left border local thick_border = {false, false, true}

-- pre-process the inputs, saving data in the tables defined above local col = 3 while args[6*(col-2) - 1] do		thick_border[col + 1] = string.lower(args[6*(col-2)] or '') == 'thick' table_headings[col] = {args[6*(col-2) - 1], 'unsortable'} truth_table[col] = {} for i = 1,4 do			truth_table[col][i] = (tonumber(args[6*(col-3) + i]) or 0) == 1 end col = col + 1 end local total_cols = col - 1

-- start building the html table root = mw.html.create('table') :addClass('wikitable') :addClass('sortable') :addClass('two-ary-tt')

-- add headings local row = root:tag('tr') for col = 1,total_cols do		local headings = table_headings[col] row:tag('th') :addClass(headings[2] ~= '' and headings[2] or nil) :addClass(thick_border[col] and 'border' or nil) :wikitext(headings[1]) end

-- add rows for i = 1,4 do		row = root:tag('tr') for j = 1,total_cols do			local val = truth_table[j][i] row:tag('td') :addClass((j < 3) and 'bold' or nil) :addClass(thick_border[j] and 'border' or nil) :addClass(val and 't' or 'f') :wikitext(val and 'T' or 'F') end end

-- get the templatestyles local templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = 'Template:2-ary truth table/style.css' } }	-- return the templatestyles plus the html table return templatestyles .. tostring(root) end

return p