<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://stockhub.co/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://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3AInfobox_rune"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Infobox_rune&amp;action=history"/>
	<updated>2026-04-18T21:34:52Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://stockhub.co/index.php?title=Module:Infobox_rune&amp;diff=136985&amp;oldid=prev</id>
		<title>imported&gt;WOSlinker: use require(&#039;strict&#039;) instead of require(&#039;Module:No globals&#039;)</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Infobox_rune&amp;diff=136985&amp;oldid=prev"/>
		<updated>2022-10-21T22:04:43Z</updated>

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