<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://phuketer.com/w/index.php?action=history&amp;feed=atom&amp;title=Module%3AShindo</id>
	<title>Module:Shindo - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://phuketer.com/w/index.php?action=history&amp;feed=atom&amp;title=Module%3AShindo"/>
	<link rel="alternate" type="text/html" href="https://phuketer.com/w/index.php?title=Module:Shindo&amp;action=history"/>
	<updated>2026-06-17T15:41:44Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.2</generator>
	<entry>
		<id>https://phuketer.com/w/index.php?title=Module:Shindo&amp;diff=1689&amp;oldid=prev</id>
		<title>Maintenance script: ABC final local Lua shim</title>
		<link rel="alternate" type="text/html" href="https://phuketer.com/w/index.php?title=Module:Shindo&amp;diff=1689&amp;oldid=prev"/>
		<updated>2026-06-16T09:41:22Z</updated>

		<summary type="html">&lt;p&gt;ABC final local Lua shim&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 16:41, 16 June 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;-- ABC local compatibility shim for imported Wikipedia earthquake infoboxes.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;-- Returns the first passed value instead of throwing Lua errors.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;local p = {}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;local p = {}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;local function render(frame)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;local function render(frame)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	local args = frame and frame.args or {}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	local args = frame and frame.args or {}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	if args[1] and tostring(args[1]) ~= &amp;#039;&amp;#039; then&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	if args[1] and tostring(args[1]) ~= &amp;#039;&amp;#039; then&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		return tostring(args[1])&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		return tostring(args[1])&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	end&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	end&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	if args.value and tostring(args.value) ~= &amp;#039;&amp;#039; then&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	if args.value and tostring(args.value) ~= &amp;#039;&amp;#039; then&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		return tostring(args.value)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		return tostring(args.value)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	end&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	end&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	if args.intensity and tostring(args.intensity) ~= &amp;#039;&amp;#039; then&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	if args.intensity and tostring(args.intensity) ~= &amp;#039;&amp;#039; then&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		return tostring(args.intensity)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		return tostring(args.intensity)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	end&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	end&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	return &amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	return &amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;end&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;end&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key hub_phuketer_mw260528:diff:1.41:old-1687:rev-1689:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://phuketer.com/w/index.php?title=Module:Shindo&amp;diff=1687&amp;oldid=prev</id>
		<title>Maintenance script: ABC local compatibility shim for Shindo intensity rendering</title>
		<link rel="alternate" type="text/html" href="https://phuketer.com/w/index.php?title=Module:Shindo&amp;diff=1687&amp;oldid=prev"/>
		<updated>2026-06-16T09:26:24Z</updated>

		<summary type="html">&lt;p&gt;ABC local compatibility shim for Shindo intensity rendering&lt;/p&gt;
&lt;a href=&quot;https://phuketer.com/w/index.php?title=Module:Shindo&amp;amp;diff=1687&amp;amp;oldid=1587&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://phuketer.com/w/index.php?title=Module:Shindo&amp;diff=1587&amp;oldid=prev</id>
		<title>imported&gt;SamBroGaming: Undid revision 1296854156 by Awesome Aasim (talk) This sweeping change affects light mode users as well, and considering it has had zero discussion anywhere I could find, I am reverting it</title>
		<link rel="alternate" type="text/html" href="https://phuketer.com/w/index.php?title=Module:Shindo&amp;diff=1587&amp;oldid=prev"/>
		<updated>2025-06-23T00:12:53Z</updated>

		<summary type="html">&lt;p&gt;Undid revision &lt;a href=&quot;/wiki/Special:Diff/1296854156&quot; title=&quot;Special:Diff/1296854156&quot;&gt;1296854156&lt;/a&gt; by &lt;a href=&quot;/wiki/Special:Contributions/Awesome_Aasim&quot; title=&quot;Special:Contributions/Awesome Aasim&quot;&gt;Awesome Aasim&lt;/a&gt; (&lt;a href=&quot;/w/index.php?title=User_talk:Awesome_Aasim&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;User talk:Awesome Aasim (page does not exist)&quot;&gt;talk&lt;/a&gt;) This sweeping change affects light mode users as well, and considering it has had zero discussion anywhere I could find, I am reverting it&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;--- This is the Shindo module. Named after the Japanese term used for classifying earthquakes {{lang|ja|{{ruby|[[wikt:震度|震度]]|しんど}}}}, this module provides utility for seismic intensity scales.&lt;br /&gt;
-- &lt;br /&gt;
--  Seismic intensity data generated on [[Module:Shindo/data]]. Messages on [[Module:Shindo/messages]].&lt;br /&gt;
--  @module shindo&lt;br /&gt;
--  @alias p&lt;br /&gt;
--  @require Module:Arguments&lt;br /&gt;
--  @require Module:MakeInvokeFunc&lt;br /&gt;
--  @require Module:Message&lt;br /&gt;
--  @require Module:Yesno&lt;br /&gt;
--  @release beta&lt;br /&gt;
-- &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
local getArgs = require(&amp;quot;Module:Arguments&amp;quot;).getArgs&lt;br /&gt;
local data = mw.loadData(&amp;quot;Module:Shindo/data&amp;quot;)&lt;br /&gt;
local messages = mw.loadData(&amp;quot;Module:Shindo/messages&amp;quot;)&lt;br /&gt;
local makeInvokeFunc = require(&amp;quot;Module:MakeInvokeFunc&amp;quot;)(p)&lt;br /&gt;
local message = require(&amp;quot;Module:Message&amp;quot;)(messages)&lt;br /&gt;
local yn = require(&amp;quot;Module:Yesno&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
--- Gets the grayscale value of a specific color&lt;br /&gt;
-- @function getValueOfColor&lt;br /&gt;
-- @param {table} tbl table for colors&lt;br /&gt;
-- @param {number} tbl[1] red value&lt;br /&gt;
-- @param {number} tbl[2] green value&lt;br /&gt;
-- @param {number} tbl[3] blue value&lt;br /&gt;
-- @return {number} Decimal value of the color.&lt;br /&gt;
local function getValueOfColor(tbl)&lt;br /&gt;
	return (tbl[1] + tbl[2] + tbl[3]) / 3 / 255&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Gets the color as a comma-separated value for CSS&lt;br /&gt;
-- @function rgbColor&lt;br /&gt;
-- @todo			compute alpha transparency for dark mode, etc.&lt;br /&gt;
-- @param {table}	tbl table for colors&lt;br /&gt;
-- @param {number}	tbl[1] red value&lt;br /&gt;
-- @param {number}	tbl[2] green value&lt;br /&gt;
-- @param {number}	tbl[3] blue value&lt;br /&gt;
-- @return {string}	The color in the format red, green, blue&lt;br /&gt;
local function rgbColor(tbl)&lt;br /&gt;
	return tbl[1] .. (tbl[2] and &amp;quot;, &amp;quot; .. tbl[2] .. (tbl[3] and &amp;quot;, &amp;quot; .. tbl[3] or &amp;quot;&amp;quot;) or &amp;quot;&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Gets the average of multiple colors&lt;br /&gt;
-- @function averageColor&lt;br /&gt;
-- @param {table} tbl table of multiple colors&lt;br /&gt;
-- @return {number} Decimal value of the color.&lt;br /&gt;
local function averageColor(tbl)&lt;br /&gt;
	local colors = {}&lt;br /&gt;
	for k,v in pairs(tbl) do&lt;br /&gt;
		colors[k] = v&lt;br /&gt;
	end&lt;br /&gt;
	local avg = {0, 0, 0}&lt;br /&gt;
	for _,color in pairs(colors) do&lt;br /&gt;
		avg[1] = avg[1] + color[1]&lt;br /&gt;
		avg[2] = avg[2] + color[2]&lt;br /&gt;
		avg[3] = avg[3] + color[3]&lt;br /&gt;
	end&lt;br /&gt;
	avg[1] = math.ceil(avg[1] / #colors) - avg[1] / #colors &amp;gt; 0.5 and math.floor(avg[1] / #colors) or math.ceil(avg[1] / #colors)&lt;br /&gt;
	avg[2] = math.ceil(avg[2] / #colors) - avg[2] / #colors &amp;gt; 0.5 and math.floor(avg[2] / #colors) or math.ceil(avg[2] / #colors)&lt;br /&gt;
	avg[3] = math.ceil(avg[3] / #colors) - avg[3] / #colors &amp;gt; 0.5 and math.floor(avg[3] / #colors) or math.ceil(avg[3] / #colors)&lt;br /&gt;
	return avg&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Gets all the intensity values from a scale&lt;br /&gt;
-- @function listIntensitiesFromScale&lt;br /&gt;
-- @param {string} scale First scale name&lt;br /&gt;
-- @param {string} intensities Table of intensity values&lt;br /&gt;
-- @param {boolean} labelScale Whether to label a scale&lt;br /&gt;
-- @param {string} scale Second scale name&lt;br /&gt;
-- @return {string} List of intensities&lt;br /&gt;
local function listIntensitiesFromScale(scale, intensities, labelScale, scale2)&lt;br /&gt;
	local out = &amp;#039;&amp;#039;&lt;br /&gt;
	if yn(labelScale) then&lt;br /&gt;
		out = out .. data[scale].short .. &amp;#039; &amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	local categoriesAreSame = true&lt;br /&gt;
	local category = &amp;quot;&amp;quot;&lt;br /&gt;
	for k,v in pairs(intensities) do&lt;br /&gt;
		if data[scale].ranks[v] == nil then error(message(&amp;quot;invalidIntensity&amp;quot;, {v, scale})) end&lt;br /&gt;
		out = out .. data[scale].ranks[v].label&lt;br /&gt;
		if k ~= #intensities then&lt;br /&gt;
			if #intensities == 2 then&lt;br /&gt;
				out = out .. &amp;#039;–&amp;#039;&lt;br /&gt;
			else&lt;br /&gt;
				out = out .. &amp;#039;/&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if category == &amp;quot;&amp;quot; and categoriesAreSame then&lt;br /&gt;
			category = data[scale].ranks[v].category or &amp;quot;&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		categoriesAreSame = categoriesAreSame and category ~= &amp;quot;&amp;quot; and (data[scale].ranks[v].category and data[scale].ranks[v].category == category or false)&lt;br /&gt;
	end&lt;br /&gt;
	if categoriesAreSame and category ~= &amp;quot;&amp;quot; and not scale2 then&lt;br /&gt;
		out = out .. &amp;quot; (&amp;#039;&amp;#039;&amp;quot; .. category .. &amp;quot;&amp;#039;&amp;#039;)&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Gets the inline CSS for a particular scale&amp;#039;s intensity color&lt;br /&gt;
-- @function p._color&lt;br /&gt;
-- @param {table} args frame arguments&lt;br /&gt;
-- @param {string} args.scale The name of the scale&lt;br /&gt;
-- @param {string} args.intensity The intensity of the scale&lt;br /&gt;
-- @return {string} Preprocessed text output&lt;br /&gt;
p._color = function(args)&lt;br /&gt;
	local scale = string.lower(args.scale or args[1] or error(message(&amp;quot;noScaleShortCode&amp;quot;)))&lt;br /&gt;
	local intensity = string.upper(args.intensity or args[2] or error(message(&amp;quot;noIntensity&amp;quot;)))&lt;br /&gt;
	if data[scale] == nil then error(message(&amp;quot;invalidScale&amp;quot;, {scale})) end&lt;br /&gt;
	if data[scale].ranks[intensity] == nil then error(message(&amp;quot;invalidIntensity&amp;quot;, {intensity, scale})) end&lt;br /&gt;
	local order = data[scale].ranks[intensity].order&lt;br /&gt;
	local color = data[scale].colors[order]&lt;br /&gt;
	local colorIntensity = getValueOfColor(color)&lt;br /&gt;
	return &amp;#039;background-color:rgb(&amp;#039; .. rgbColor(color) .. &amp;#039;); color:&amp;#039; .. (colorIntensity &amp;lt; 0.5 and &amp;quot;white&amp;quot; or &amp;quot;black&amp;quot;) .. &amp;quot;;&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Gets the format of the scale as a wikitable&lt;br /&gt;
-- @function p._formatInWikitable&lt;br /&gt;
-- @param {table} args frame arguments&lt;br /&gt;
-- @param {string} args.scale The name of the scale&lt;br /&gt;
-- @param {string} args.intensity The intensity of the scale&lt;br /&gt;
-- @param {string} args.tagProps additional properties for the wikitable row&lt;br /&gt;
-- @param {boolean} args.header if the formatting is done as a header&lt;br /&gt;
-- @param {boolean} args.link whether to link to the scale page&lt;br /&gt;
-- @param {boolean} args.labelScale whether to include the name of the scale&lt;br /&gt;
-- @return {string} Preprocessed text output&lt;br /&gt;
p._formatInWikitable = function(args)&lt;br /&gt;
	local scale = string.lower(args.scale or args[1] or error(message(&amp;quot;noScaleShortCode&amp;quot;)))&lt;br /&gt;
	local link = args.link ~= nil and args.link or true&lt;br /&gt;
	local labelScale = args.labelScale ~= nil and args.labelScale or true&lt;br /&gt;
	local doColor = args.color ~= nil and args.color or true&lt;br /&gt;
	local intensity = string.upper(args.intensity or args[2] or error(message(&amp;quot;noIntensity&amp;quot;)))&lt;br /&gt;
	local intensities = mw.text.split(intensity, &amp;quot;/&amp;quot;) or { intensity }&lt;br /&gt;
	if data[scale] == nil then error(message(&amp;quot;invalidScale&amp;quot;, {scale})) end&lt;br /&gt;
	local colors = {}&lt;br /&gt;
	for k,v in pairs(intensities) do&lt;br /&gt;
		local order = data[scale].ranks[v].order&lt;br /&gt;
		colors[k] = data[scale].colors[order]&lt;br /&gt;
	end&lt;br /&gt;
	local color = averageColor(colors)&lt;br /&gt;
	local colorIntensity = getValueOfColor(color)&lt;br /&gt;
	local out = &amp;quot;&amp;quot;&lt;br /&gt;
	if yn(args.header or false) then&lt;br /&gt;
		out = out .. &amp;quot;! &amp;quot; &lt;br /&gt;
	else&lt;br /&gt;
		out = out .. &amp;quot;| &amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	out = out .. (args.tagProps ~= nil and args.tagProps or &amp;quot;&amp;quot;)&lt;br /&gt;
	if (yn(doColor)) then&lt;br /&gt;
		out = out .. &amp;#039;style=&amp;quot;background-color:rgba(&amp;#039; .. rgbColor(color) .. &amp;#039;); color:&amp;#039; .. (colorIntensity &amp;lt; 0.5 and &amp;quot;white&amp;quot; or &amp;quot;black&amp;quot;) .. &amp;#039;;&amp;#039; .. (args.style or &amp;quot;&amp;quot;) .. &amp;#039;&amp;quot; | &amp;#039;&lt;br /&gt;
	elseif (args.style) then&lt;br /&gt;
		out = out .. &amp;#039;style=&amp;quot;&amp;#039; .. (args.style or &amp;quot;&amp;quot;) .. &amp;#039;&amp;quot; | &amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	if yn(link) then&lt;br /&gt;
		out = out .. &amp;#039;[[&amp;#039; .. data[scale].name .. &amp;quot;#&amp;quot; .. data[scale].id_prefix .. data[scale].ranks[intensity].id .. &amp;quot;|&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	if yn(doColor) then&lt;br /&gt;
		out = out .. &amp;#039;&amp;lt;span style=\&amp;quot;color:&amp;#039; .. (colorIntensity &amp;lt; 0.5 and &amp;quot;white&amp;quot; or &amp;quot;black&amp;quot;) .. &amp;#039;;&amp;quot;&amp;gt;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	out = out .. listIntensitiesFromScale(scale, intensities, labelScale, false)&lt;br /&gt;
	if yn(doColor) then&lt;br /&gt;
		out = out .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	if yn(link) then&lt;br /&gt;
		out = out .. &amp;quot;]]&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Gets the format of the scale as a tag&lt;br /&gt;
-- @function p._formatTag&lt;br /&gt;
-- @param {table} args frame arguments&lt;br /&gt;
-- @param {string} args.scale The name of the scale&lt;br /&gt;
-- @param {string} args.scale2 The name of a second scale&lt;br /&gt;
-- @param {string} args.intensity The intensity of the scale&lt;br /&gt;
-- @param {string} args.intensity2 The intensity for the second scale&lt;br /&gt;
-- @param {string} args.tag Tag name&lt;br /&gt;
-- @param {string} args.style styling for the tag&lt;br /&gt;
-- @param {string} args.tagProps additional properties for the tag&lt;br /&gt;
-- @param {boolean} args.color Whether to color the entry&lt;br /&gt;
-- @param {boolean} args.link whether to link to the scale page&lt;br /&gt;
-- @return {string} Preprocessed text output&lt;br /&gt;
p._formatTag = function(args)&lt;br /&gt;
	local scale = string.lower(args.scale or args[1] or error(message(&amp;quot;noScaleShortCode&amp;quot;)))&lt;br /&gt;
	local scale2 = args.scale2 or args[3] or nil&lt;br /&gt;
	if scale2 ~= nil then scale2 = string.lower(scale2) end&lt;br /&gt;
	local link = args.link ~= nil and args.link or true&lt;br /&gt;
	local labelScale = args.labelScale ~= nil and args.labelScale or true&lt;br /&gt;
	local doColor = args.color ~= nil and args.color or true&lt;br /&gt;
	local intensity = string.upper(args.intensity or args[2] or error(message(&amp;quot;noIntensity&amp;quot;)))&lt;br /&gt;
	local intensities = mw.text.split(intensity, &amp;quot;/&amp;quot;) or { intensity }&lt;br /&gt;
	local intensity2 = args.intensity2 or args[4] or (scale2 and error(message(&amp;quot;noIntensity&amp;quot;))) or nil&lt;br /&gt;
	local intensities2 = {}&lt;br /&gt;
	if intensity2 ~= nil then&lt;br /&gt;
		intensity2 = string.upper(intensity2)&lt;br /&gt;
		intensities2 = mw.text.split(intensity2, &amp;quot;/&amp;quot;) or { intensity2 }&lt;br /&gt;
	end&lt;br /&gt;
	if data[scale] == nil then error(message(&amp;quot;invalidScale&amp;quot;, {scale})) end&lt;br /&gt;
	if scale2 and data[scale2] == nil then error(message(&amp;quot;invalidScale&amp;quot;, {scale2})) end&lt;br /&gt;
	local colors = {}&lt;br /&gt;
	for k,v in pairs(intensities) do&lt;br /&gt;
		local order = data[scale].ranks[v].order&lt;br /&gt;
		colors[k] = data[scale].colors[order]&lt;br /&gt;
	end&lt;br /&gt;
	local color = averageColor(colors)&lt;br /&gt;
	local colorIntensity = getValueOfColor(color)&lt;br /&gt;
	local out = &amp;#039;&amp;#039;&lt;br /&gt;
	if yn(doColor) then&lt;br /&gt;
		out = out .. &amp;#039;&amp;lt;&amp;#039; .. (args.tag or &amp;quot;span&amp;quot;) .. &amp;#039; style=&amp;quot;background-color:rgba(&amp;#039; .. rgbColor(color) .. &amp;#039;); padding:4px; color:&amp;#039; .. (colorIntensity &amp;lt; 0.5 and &amp;quot;white&amp;quot; or &amp;quot;black&amp;quot;) ..  &amp;#039;; &amp;#039;&lt;br /&gt;
	elseif args.style then&lt;br /&gt;
		out = out .. &amp;#039;&amp;lt;&amp;#039; .. (args.tag or &amp;quot;span&amp;quot;) .. &amp;#039; style=&amp;quot;&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		out = out .. &amp;#039;&amp;lt;&amp;#039; .. (args.tag or &amp;quot;span&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	if args.style then&lt;br /&gt;
		out = out .. args.style&lt;br /&gt;
		out = out .. &amp;#039;&amp;quot; &amp;#039;&lt;br /&gt;
	elseif yn(doColor) then&lt;br /&gt;
		out = out .. &amp;#039;&amp;quot; &amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	out = out .. (args.tagProps ~= nil and args.tagProps or &amp;quot;&amp;quot;)&lt;br /&gt;
	out = out .. &amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
	if yn(link) then&lt;br /&gt;
		out = out .. &amp;#039;[[&amp;#039; .. data[scale].name .. &amp;quot;#&amp;quot; .. data[scale].id_prefix .. data[scale].ranks[intensities[1]].id .. &amp;quot;|&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	if yn(doColor) then&lt;br /&gt;
		out = out .. &amp;#039;&amp;lt;span style=\&amp;quot;color:&amp;#039; .. (colorIntensity &amp;lt; 0.5 and &amp;quot;white&amp;quot; or &amp;quot;black&amp;quot;) .. &amp;#039;;&amp;quot;&amp;gt;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	out = out .. listIntensitiesFromScale(scale, intensities, labelScale, scale2)&lt;br /&gt;
	if yn(doColor) then&lt;br /&gt;
		out = out .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	if yn(link) then&lt;br /&gt;
		out = out .. &amp;quot;]]&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	if (scale2) then&lt;br /&gt;
		out = out .. &amp;quot; (&amp;quot;&lt;br /&gt;
		if yn(link) then&lt;br /&gt;
			out = out .. &amp;#039;[[&amp;#039; .. data[scale2].name .. &amp;quot;#&amp;quot; .. data[scale2].id_prefix .. data[scale2].ranks[intensities2[1]].id .. &amp;quot;|&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		if yn(doColor) then&lt;br /&gt;
			out = out .. &amp;#039;&amp;lt;span style=\&amp;quot;color:&amp;#039; .. (colorIntensity &amp;lt; 0.5 and &amp;quot;white&amp;quot; or &amp;quot;black&amp;quot;) .. &amp;#039;;&amp;quot;&amp;gt;&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
		out = out .. listIntensitiesFromScale(scale2, intensities2, true, true)&lt;br /&gt;
		if yn(doColor) then&lt;br /&gt;
			out = out .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
		if yn(link) then&lt;br /&gt;
			out = out .. &amp;quot;]]&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		out = out .. &amp;quot;)&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	out = out .. &amp;#039;&amp;lt;/&amp;#039;  .. (args.tag or &amp;quot;span&amp;quot;) .. &amp;#039;&amp;gt;&amp;#039;&lt;br /&gt;
	return mw.getCurrentFrame():preprocess(out)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p._format = function(args)&lt;br /&gt;
	if args[&amp;quot;format&amp;quot;] == &amp;quot;wikitable&amp;quot; then&lt;br /&gt;
		return p.formatInWikitable(args)&lt;br /&gt;
	else&lt;br /&gt;
		return p.formatTag(args)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p._getScaleName = function(args)&lt;br /&gt;
	local scale = string.lower(args.scale or args[1] or error(message(&amp;quot;noScaleShortCode&amp;quot;)))&lt;br /&gt;
	if data[scale] == nil then error(message(&amp;quot;invalidScale&amp;quot;, {scale})) end&lt;br /&gt;
	local out = &amp;#039;&amp;#039;&lt;br /&gt;
	if yn(args.link or true) then&lt;br /&gt;
		out = out .. &amp;#039;[[&amp;#039; .. data[scale].name .. &amp;#039;|&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	out = out .. data[scale].name&lt;br /&gt;
	if yn(args.link or true) then&lt;br /&gt;
		out = out .. &amp;#039;]]&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- uses binary search to convert a peak ground acceleration to a seismic intensity&lt;br /&gt;
function convert(pga, ranks, ranksSorted, left, right)&lt;br /&gt;
	left = left ~= nil and left or 0&lt;br /&gt;
	right = right ~= nil and right or #ranksSorted&lt;br /&gt;
	index = math.floor((left + right) / 2)&lt;br /&gt;
	local lower = ranks[ranksSorted[index + 1]].pga&lt;br /&gt;
	local upper = ranksSorted[index + 2] and ranks[ranksSorted[index + 2]].pga or math.huge&lt;br /&gt;
	if (pga &amp;gt;= upper) then&lt;br /&gt;
		return convert(pga, ranks, ranksSorted, index, right)&lt;br /&gt;
	elseif (pga &amp;lt; lower) then&lt;br /&gt;
		return convert(pga, ranks, ranksSorted, left, index)&lt;br /&gt;
	else&lt;br /&gt;
		return ranksSorted[index + 1]&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p._convert = function(args)&lt;br /&gt;
	local scale = string.lower(args.scale or args[1] or error(message(&amp;quot;noScaleShortCode&amp;quot;)))&lt;br /&gt;
	if data[scale] == nil then error(message(&amp;quot;invalidScale&amp;quot;, {scale})) end&lt;br /&gt;
	local ranksSorted = {}&lt;br /&gt;
	for k,v in ipairs(data[&amp;quot;mmi&amp;quot;].ranksSorted) do ranksSorted[k] = v end&lt;br /&gt;
	return convert(tonumber(args.pga or args[2]), data[scale].ranks, ranksSorted)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.convert1 = convert --debugging&lt;br /&gt;
&lt;br /&gt;
p._list = function(args)&lt;br /&gt;
	local out = mw.html.create(&amp;#039;ul&amp;#039;)&lt;br /&gt;
	for k,v in pairs(data) do&lt;br /&gt;
		local list = out:tag(&amp;#039;li&amp;#039;)&lt;br /&gt;
		list:wikitext(&amp;#039;&amp;lt;code&amp;gt;&amp;#039; .. k .. &amp;#039;&amp;lt;/code&amp;gt;: [[&amp;#039; .. v.name .. &amp;#039;|&amp;#039; .. v.name .. &amp;#039;]]&amp;#039;)&lt;br /&gt;
		local tb = list:tag(&amp;#039;table&amp;#039;):addClass(&amp;quot;wikitable&amp;quot;)&lt;br /&gt;
		tb&lt;br /&gt;
			:tag(&amp;quot;tr&amp;quot;)&lt;br /&gt;
				:tag(&amp;quot;th&amp;quot;):wikitext(&amp;quot;Seismic intensity&amp;quot;):done()&lt;br /&gt;
				:tag(&amp;quot;th&amp;quot;):wikitext(&amp;quot;Display&amp;quot;):done()&lt;br /&gt;
			:done()&lt;br /&gt;
		for l,w in pairs(v.order) do&lt;br /&gt;
			tb:tag(&amp;#039;tr&amp;#039;):wikitext(&amp;#039;&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;&amp;#039; .. w .. &amp;#039;&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt; &amp;#039; .. p.format({k, w, tag = &amp;quot;td&amp;quot;})):done()&lt;br /&gt;
		end&lt;br /&gt;
		list:done()&lt;br /&gt;
	end&lt;br /&gt;
	out:allDone()&lt;br /&gt;
	return tostring(out)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- make each scale invokable&lt;br /&gt;
for k,v in pairs(data) do&lt;br /&gt;
	if p[&amp;quot;_&amp;quot; .. k] ~= nil then error(message(&amp;quot;scaleNameInvalid&amp;quot;, k)) end&lt;br /&gt;
	p[&amp;quot;_&amp;quot; .. k] = function(args)&lt;br /&gt;
		args[&amp;quot;scale&amp;quot;] = k&lt;br /&gt;
		args[&amp;quot;intensity&amp;quot;] = args[&amp;quot;intensity&amp;quot;] or args[1] or nil&lt;br /&gt;
		args[&amp;quot;scale2&amp;quot;] = args[&amp;quot;scale2&amp;quot;] or args[2] or nil&lt;br /&gt;
		args[&amp;quot;intensity2&amp;quot;] = args[&amp;quot;intensity2&amp;quot;] or args[3] or nil&lt;br /&gt;
		if args[&amp;quot;format&amp;quot;] == &amp;quot;wikitable&amp;quot; then&lt;br /&gt;
			return p.formatInWikitable(args)&lt;br /&gt;
		else&lt;br /&gt;
			return p.formatTag(args)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- make all functions that begin with _ invokable&lt;br /&gt;
local q = mw.clone(p)&lt;br /&gt;
for k,v in pairs(q) do&lt;br /&gt;
	if mw.ustring.sub(k, 1, 1) == &amp;quot;_&amp;quot; then&lt;br /&gt;
		p[mw.ustring.sub(k, 2, #k)] = makeInvokeFunc(k)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;SamBroGaming</name></author>
	</entry>
</feed>