Module:Hodge diamond
MyWikiBiz, Author Your Legacy — Saturday December 21, 2024
Jump to navigationJump to searchImplements {{Hodge diamond}}
-- This module implements {{hodge diamond}} local p = {} function p.diagram(frame) local args = (frame.args[3] ~= nil) and frame.args or frame:getParent().args local style = args['style'] or '' local width = args['width'] or '2.5em' local cstyle = args['cstyle'] or '' local caption = args['caption'] local note = args['note'] local entries = {} local argcount = 0 for k, v in pairs( args ) do if type( k ) == 'number' then entries[ k ] = mw.text.trim(v) argcount = argcount + 1 end end local side = math.floor(math.sqrt(argcount)) local rows = 2*side - 1 local root = mw.html.create('table') root :css('text-align', 'center') :cssText(style) if caption then root:tag('caption'):wikitext(caption) end local c = 1 for i = 1,side do row = root:tag('tr') for j = 1,(side-i) do row:tag('td') end for k = 1,i do local cell = row:tag('td') cell :css('width', width) :cssText(cstyle) :wikitext(entries[c]) if k < i then row:tag('td') else if i == side and note then row:tag('td'):wikitext(note) end end c = c + 1 end for j = 1,(side-i) do row:tag('td') end end for i = 1,(side-1) do row = root:tag('tr') for j = 1,i do row:tag('td') end for k = 1,(side-i) do cell = row:tag('td') cell :css('width', width) :cssText(cstyle) :wikitext(entries[c]) if k < (side-i) then row:tag('td') end c = c + 1 end for j = 1,i do row:tag('td') end end return tostring(root) end return p