Toggle menu
15
236
70
27.6K
Kenshi Wiki
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

This module implements {{2-ary truth table}}

Usage

{{#invoke:2-ary truth table|main}}


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')
				:tag('abbr')
					:attr('title', val and 'true' or 'false')
					:wikitext(val and 'T' or 'F')
					:done()
		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
Contents