Jump to content

Module:2-ary truth table: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
add some comments
rename classes and templatestyles page
Line 3: Line 3:
function p.main(frame)
function p.main(frame)
local args = require('Module:Arguments').getArgs(frame)
local args = require('Module:Arguments').getArgs(frame)

-- table_headings includes the headings and the class for the heading
-- table_headings includes the headings and the class for the heading
local table_headings = {
local table_headings = {
Line 34: Line 34:
:addClass('wikitable')
:addClass('wikitable')
:addClass('sortable')
:addClass('sortable')
:addClass('two-ary-tt')
:addClass('two-ary-truth-table')


-- add headings
-- add headings
Line 42: Line 42:
row:tag('th')
row:tag('th')
:addClass(headings[2] ~= '' and headings[2] or nil)
:addClass(headings[2] ~= '' and headings[2] or nil)
:addClass(thick_border[col] and 'border' or nil)
:addClass(thick_border[col] and 'two-ary-truth-table-border' or nil)
:wikitext(headings[1])
:wikitext(headings[1])
end
end
Line 52: Line 52:
local val = truth_table[j][i]
local val = truth_table[j][i]
row:tag('td')
row:tag('td')
:addClass((j < 3) and 'bold' or nil)
:addClass(thick_border[j] and 'two-ary-truth-table-border' or nil)
:addClass(thick_border[j] and 'border' or nil)
:addClass(val and 'two-ary-truth-table-true' or 'two-ary-truth-table-false')
:addClass(val and 't' or 'f')
:wikitext(val and 'T' or 'F')
:wikitext(val and 'T' or 'F')
end
end
Line 61: Line 60:
-- get the templatestyles
-- get the templatestyles
local templatestyles = frame:extensionTag{
local templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = 'Template:2-ary truth table/style.css' }
name = 'templatestyles', args = { src = 'Module:2-ary truth table/styles.css' }
}
}
-- return the templatestyles plus the html table
-- return the templatestyles plus the html table
return templatestyles .. tostring(root)
return templatestyles .. tostring(root)
end
end



Revision as of 02:19, 27 November 2024

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-truth-table')

	-- 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 'two-ary-truth-table-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(thick_border[j] and 'two-ary-truth-table-border' or nil)
				:addClass(val and 'two-ary-truth-table-true' or 'two-ary-truth-table-false')
				:wikitext(val and 'T' or 'F')
		end
	end

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

return p