<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mywikibiz.com/index.php?action=history&amp;feed=atom&amp;title=Module%3AInfobox_rune</id>
	<title>Module:Infobox rune - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mywikibiz.com/index.php?action=history&amp;feed=atom&amp;title=Module%3AInfobox_rune"/>
	<link rel="alternate" type="text/html" href="https://mywikibiz.com/index.php?title=Module:Infobox_rune&amp;action=history"/>
	<updated>2026-06-14T04:38:33Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.35.3</generator>
	<entry>
		<id>https://mywikibiz.com/index.php?title=Module:Infobox_rune&amp;diff=472312&amp;oldid=prev</id>
		<title>Zoran: Pywikibot 6.4.0</title>
		<link rel="alternate" type="text/html" href="https://mywikibiz.com/index.php?title=Module:Infobox_rune&amp;diff=472312&amp;oldid=prev"/>
		<updated>2021-07-15T23:22:41Z</updated>

		<summary type="html">&lt;p&gt;Pywikibot 6.4.0&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;--&lt;br /&gt;
-- This module implements {{Infobox rune}}&lt;br /&gt;
--&lt;br /&gt;
require('Module:No globals')&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local getArgs = require('Module:Arguments').getArgs&lt;br /&gt;
&lt;br /&gt;
local function buildunicode(s)&lt;br /&gt;
	local v = mw.text.split(s or '', '[^0-9A-F]')&lt;br /&gt;
	local count = 0&lt;br /&gt;
&lt;br /&gt;
	for k = #v, 1, -1 do&lt;br /&gt;
		if v[k] and v[k]:match('^[0-9A-F][0-9A-F][0-9A-F][0-9A-F]$') then&lt;br /&gt;
			v[k] = '&amp;amp;#x' .. v[k] .. '; ' .. '&amp;lt;div style=&amp;quot;display:block;font-size: 30%&amp;quot;&amp;gt;U+' .. v[k] .. '&amp;lt;/div&amp;gt;'&lt;br /&gt;
			count = count + 1&lt;br /&gt;
		else&lt;br /&gt;
			table.remove(v, k)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if count &amp;gt; 1 then&lt;br /&gt;
		local res = mw.html.create()&lt;br /&gt;
		local row = res:tag('table')&lt;br /&gt;
						:addClass('multicol')&lt;br /&gt;
						:css('width', '100%')&lt;br /&gt;
						:attr('role', 'presentation')&lt;br /&gt;
						:tag('tr')&lt;br /&gt;
		for k = 1,#v do&lt;br /&gt;
			row:tag('td')&lt;br /&gt;
				:css('width', math.floor(100/count) .. '%')&lt;br /&gt;
				:wikitext(v[k])&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		return tostring(res)&lt;br /&gt;
	elseif count &amp;gt; 0 then&lt;br /&gt;
		return tostring(v[1])&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function addCells(row, entries, subcols, fs)&lt;br /&gt;
	if type(entries) == 'string' then&lt;br /&gt;
		local colspan = subcols[1] + subcols[2] + subcols[3]&lt;br /&gt;
		row:tag('td')&lt;br /&gt;
			:css('font-size', fs)&lt;br /&gt;
			:css('padding', '1px')&lt;br /&gt;
			:attr('colspan', colspan)&lt;br /&gt;
			:wikitext(entries)&lt;br /&gt;
	else&lt;br /&gt;
		for k=1,3 do&lt;br /&gt;
			if subcols[k] &amp;gt; 0 then&lt;br /&gt;
				if entries[k] and type(entries[k]) == 'string' then&lt;br /&gt;
					if entries[k] ~= '&amp;lt;same&amp;gt;' then&lt;br /&gt;
						local colspan = subcols[k]&lt;br /&gt;
						for j=(k+1),3 do&lt;br /&gt;
							if entries[j] and entries[j] == '&amp;lt;same&amp;gt;' then&lt;br /&gt;
								colspan = colspan + subcols[j]&lt;br /&gt;
							else&lt;br /&gt;
								break&lt;br /&gt;
							end&lt;br /&gt;
						end&lt;br /&gt;
						row:tag('td')&lt;br /&gt;
							:css('font-size', fs)&lt;br /&gt;
							:css('padding', '1px')&lt;br /&gt;
							:attr('colspan', (colspan &amp;gt; 1) and colspan or nil)&lt;br /&gt;
							:wikitext(entries[k])&lt;br /&gt;
					end&lt;br /&gt;
				elseif entries[k] then&lt;br /&gt;
					for j=1,subcols[k] do&lt;br /&gt;
						if entries[k][j] then&lt;br /&gt;
							row:tag('td')&lt;br /&gt;
								:css('font-size', fs)&lt;br /&gt;
								:css('padding', '1px')&lt;br /&gt;
								:wikitext(entries[k][j])&lt;br /&gt;
						else&lt;br /&gt;
							row:tag('td')&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
				else&lt;br /&gt;
					for j=1,subcols[k] do&lt;br /&gt;
						row:tag('td')&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.infobox(frame)&lt;br /&gt;
	local args = getArgs(frame)&lt;br /&gt;
&lt;br /&gt;
	local langlinks = {&lt;br /&gt;
		pg = '[[Proto-Germanic language|Proto-Germanic]]',&lt;br /&gt;
		oe = '[[Old English]]',&lt;br /&gt;
		on = '[[Old Norse]]'&lt;br /&gt;
	}&lt;br /&gt;
		&lt;br /&gt;
	local shapelinks = {&lt;br /&gt;
		pg = '[[Elder Futhark]]',&lt;br /&gt;
		oe = '[[Anglo-Saxon runes|Futhorc]]',&lt;br /&gt;
		on = '[[Younger Futhark]]'&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	local let2num = {&lt;br /&gt;
		a = '1',&lt;br /&gt;
		b = '2',&lt;br /&gt;
		c = '3',&lt;br /&gt;
		d = '4',&lt;br /&gt;
		e = '5'&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	-- fill in the entries&lt;br /&gt;
	local entrynames = {'lang',	'name',	'meaning', 'shape', 'unicode hex', &lt;br /&gt;
		'transliteration', 'transcription', 'IPA', 'position'}&lt;br /&gt;
	local entries = {}&lt;br /&gt;
	for i = 1, #entrynames do&lt;br /&gt;
		entries[entrynames[i]] = nil&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		k = '' .. k&lt;br /&gt;
		local pre, num, num2, let = nil, nil, nil, nil&lt;br /&gt;
		for i = 1, #entrynames do&lt;br /&gt;
			pre, num, let = k:match('^(' .. entrynames[i] .. ')([1-3])([a-e]?)$')&lt;br /&gt;
			num2 = nil&lt;br /&gt;
			if pre then break end&lt;br /&gt;
			pre, num, num2 = k:match('^(' .. entrynames[i] .. ')([1-3])([1-3]?)$')&lt;br /&gt;
			let = nil&lt;br /&gt;
			if pre then break end&lt;br /&gt;
		end&lt;br /&gt;
		if pre == 'unicode hex' then &lt;br /&gt;
			v = buildunicode(v)&lt;br /&gt;
		end&lt;br /&gt;
		if num and num ~= '' then&lt;br /&gt;
			num = tonumber(num)&lt;br /&gt;
			if let and let ~= '' then&lt;br /&gt;
				if entries[pre] and type(entries[pre]) == 'table' then&lt;br /&gt;
					if entries[pre][num] and type(entries[pre][num]) == 'table' then&lt;br /&gt;
						entries[pre][num][tonumber(let2num[let])] = v&lt;br /&gt;
					else&lt;br /&gt;
						entries[pre][num] = {nil, nil, nil, nil, nil}&lt;br /&gt;
						entries[pre][num][tonumber(let2num[let])] = v&lt;br /&gt;
					end&lt;br /&gt;
				else&lt;br /&gt;
					entries[pre] = {nil, nil, nil}&lt;br /&gt;
					entries[pre][num] = {nil, nil, nil, nil, nil}&lt;br /&gt;
					entries[pre][num][tonumber(let2num[let])] = v&lt;br /&gt;
				end&lt;br /&gt;
			elseif num2 and num2 ~= '' then&lt;br /&gt;
				num2 = tonumber(num2)&lt;br /&gt;
				if entries[pre] and type(entries[pre]) == 'table' then&lt;br /&gt;
					entries[pre][num] = v&lt;br /&gt;
					for i = (num+1),num2 do&lt;br /&gt;
						entries[pre][i] = '&amp;lt;same&amp;gt;'&lt;br /&gt;
					end&lt;br /&gt;
				else&lt;br /&gt;
					entries[pre] = {nil, nil, nil}&lt;br /&gt;
					entries[pre][num] = v&lt;br /&gt;
					for i = (num+1),num2 do&lt;br /&gt;
						entries[pre][i] = '&amp;lt;same&amp;gt;'&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				if entries[pre] and type(entries[pre]) == 'table' then&lt;br /&gt;
					entries[pre][num] = v&lt;br /&gt;
				else&lt;br /&gt;
					entries[pre] = {nil, nil, nil}&lt;br /&gt;
					entries[pre][num] = v&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		elseif pre then&lt;br /&gt;
			entries[pre] = v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local subcols = {0, 0, 0}&lt;br /&gt;
&lt;br /&gt;
	-- determine the number of subcolumns per column&lt;br /&gt;
	for i = 1, #entrynames do&lt;br /&gt;
		local e = entries[entrynames[i]]&lt;br /&gt;
		if e then&lt;br /&gt;
			if type(e) == 'table' then&lt;br /&gt;
				for j = 1,3 do&lt;br /&gt;
					if e[j] and type(e[j]) == 'table' then&lt;br /&gt;
						local n = #(e[j])&lt;br /&gt;
						if n &amp;gt; subcols[j] then&lt;br /&gt;
							subcols[j] = n&lt;br /&gt;
						end&lt;br /&gt;
					elseif e[j] then&lt;br /&gt;
						if 1 &amp;gt; subcols[j] then&lt;br /&gt;
							subcols[j] = 1&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local lets = {'a', 'b', 'c', 'd', 'e'}&lt;br /&gt;
	&lt;br /&gt;
	-- build the table&lt;br /&gt;
	local root = mw.html.create()&lt;br /&gt;
&lt;br /&gt;
	root = root&lt;br /&gt;
		:tag('table')&lt;br /&gt;
		:addClass('wikitable')&lt;br /&gt;
		:addClass('plainrowheaders')&lt;br /&gt;
		:css('float', args.float or 'right')&lt;br /&gt;
		:css('clear', (args.float == 'none' and 'both') or args.float or 'right')&lt;br /&gt;
		:css('width', args.width or 'auto')&lt;br /&gt;
		:css('margin', args.float == 'left' and '0.5em 1.0em 0.5em 0' or '0.5em 0 0.5em 1.0em')&lt;br /&gt;
		:css('font-size', '88%')&lt;br /&gt;
		:css('text-align', 'center')&lt;br /&gt;
	&lt;br /&gt;
	local rowspan = 1 + (entries['name'] and 1 or 0) + (entries['meaning'] and 1 or 0)&lt;br /&gt;
	-- Name&lt;br /&gt;
	local row = root:tag('tr')&lt;br /&gt;
	row:tag('th')&lt;br /&gt;
		:attr('scope', 'row')&lt;br /&gt;
		:attr('rowspan', (rowspan &amp;gt; 1) and rowspan or nil)&lt;br /&gt;
		:css('vertical-align', 'middle')&lt;br /&gt;
		:wikitext('Name')&lt;br /&gt;
	for k=1,3 do&lt;br /&gt;
		if subcols[k] &amp;gt; 0 then&lt;br /&gt;
			local v = langlinks[(args['lang' .. k] or ''):lower()] or args['lang' .. k]&lt;br /&gt;
			row:tag('th')&lt;br /&gt;
				:attr('scope', 'col')&lt;br /&gt;
				:attr('colspan', (subcols[k] &amp;gt; 1) and subcols[k] or nil)&lt;br /&gt;
				:wikitext(v)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if entries['name'] then&lt;br /&gt;
		row = root:tag('tr'):css('font-size', '150%')&lt;br /&gt;
		addCells(row, entries['name'], subcols, nil)&lt;br /&gt;
	end&lt;br /&gt;
	if entries['meaning'] then&lt;br /&gt;
		row = root:tag('tr')&lt;br /&gt;
		addCells(row, entries['meaning'], subcols, nil)&lt;br /&gt;
	end&lt;br /&gt;
	if entries['shape'] then&lt;br /&gt;
		row = root:tag('tr')&lt;br /&gt;
		row:tag('th')&lt;br /&gt;
			:attr('scope', 'row')&lt;br /&gt;
			:attr('rowspan', 2)&lt;br /&gt;
			:css('vertical-align', 'middle')&lt;br /&gt;
			:wikitext('Shape')&lt;br /&gt;
		for k=1,3 do&lt;br /&gt;
			if subcols[k] &amp;gt; 0 then&lt;br /&gt;
				local v = shapelinks[(args['lang' .. k] or ''):lower()] or ''&lt;br /&gt;
				row:tag('th')&lt;br /&gt;
					:attr('scope', 'col')&lt;br /&gt;
					:attr('colspan', (subcols[k] &amp;gt; 1) and subcols[k] or nil)&lt;br /&gt;
					:wikitext(v)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		row = root:tag('tr')&lt;br /&gt;
		addCells(row, entries['shape'], subcols, nil)&lt;br /&gt;
	end&lt;br /&gt;
	if entries['unicode hex'] then&lt;br /&gt;
		row = root:tag('tr')&lt;br /&gt;
		row:tag('th')&lt;br /&gt;
			:attr('scope', 'row')&lt;br /&gt;
			:css('vertical-align', 'middle')&lt;br /&gt;
			:wikitext('[[Runic (Unicode block)|Unicode]]')&lt;br /&gt;
		addCells(row, entries['unicode hex'], subcols, '300%')&lt;br /&gt;
	end&lt;br /&gt;
	if entries['transliteration'] then&lt;br /&gt;
		row = root:tag('tr')&lt;br /&gt;
		row:tag('th')&lt;br /&gt;
			:attr('scope', 'row')&lt;br /&gt;
			:css('vertical-align', 'middle')&lt;br /&gt;
			:wikitext('[[Runic transliteration and transcription|Transliteration]]')&lt;br /&gt;
		addCells(row, entries['transliteration'], subcols, '120%')&lt;br /&gt;
	end&lt;br /&gt;
	if entries['transcription'] then&lt;br /&gt;
		row = root:tag('tr')&lt;br /&gt;
		row:tag('th')&lt;br /&gt;
			:attr('scope', 'row')&lt;br /&gt;
			:css('vertical-align', 'middle')&lt;br /&gt;
			:wikitext(entries['transliteration'] and 'Transcription' &lt;br /&gt;
				or '[[Runic transliteration and transcription|Transcription]]')&lt;br /&gt;
		addCells(row, entries['transcription'], subcols, '120%')&lt;br /&gt;
	end&lt;br /&gt;
	if entries['IPA'] then&lt;br /&gt;
		row = root:tag('tr')&lt;br /&gt;
		row:tag('th')&lt;br /&gt;
			:attr('scope', 'row')&lt;br /&gt;
			:css('vertical-align', 'middle')&lt;br /&gt;
			:wikitext('[[International Phonetic Alphabet|IPA]]')&lt;br /&gt;
		addCells(row, entries['IPA'], subcols, '150%')&lt;br /&gt;
	end&lt;br /&gt;
	if entries['position'] then&lt;br /&gt;
		row = root:tag('tr')&lt;br /&gt;
		row:tag('th')&lt;br /&gt;
			:attr('scope', 'row')&lt;br /&gt;
			:css('vertical-align', 'middle')&lt;br /&gt;
			:css('line-height', '1.3em')&lt;br /&gt;
			:wikitext('Position in&amp;lt;br&amp;gt;rune-row')&lt;br /&gt;
		addCells(row, entries['position'], subcols, nil)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Zoran</name></author>
	</entry>
</feed>