Module:2-ary truth table
Appearance
This module is rated as beta, and is ready for widespread use. It is still new and should be used with some caution to ensure the results are as expected. |
This module depends on the following other modules: |
This module uses TemplateStyles: |
This module implements {{2-ary truth table}}
Usage
[edit]{{#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