<?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%3ASandbox%2FNardog%2F4</id>
	<title>Module:Sandbox/Nardog/4 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ASandbox%2FNardog%2F4"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Sandbox/Nardog/4&amp;action=history"/>
	<updated>2026-05-28T20:53:21Z</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:Sandbox/Nardog/4&amp;diff=145877&amp;oldid=prev</id>
		<title>imported&gt;Nardog at 11:20, 5 July 2020</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Sandbox/Nardog/4&amp;diff=145877&amp;oldid=prev"/>
		<updated>2020-07-05T11:20:36Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
local find = mw.ustring.find&lt;br /&gt;
local gmatch = mw.ustring.gmatch&lt;br /&gt;
local gsub = mw.ustring.gsub&lt;br /&gt;
local sub = mw.ustring.sub&lt;br /&gt;
local trim = mw.text.trim&lt;br /&gt;
&lt;br /&gt;
local function multiFind(s, t)&lt;br /&gt;
	local i, j = find(s, t[1])&lt;br /&gt;
	for n = 2, #t do&lt;br /&gt;
		local i2, j2 = find(s, t[n])&lt;br /&gt;
		if i2 and (not i or i2 &amp;lt; i) then&lt;br /&gt;
			i, j = i2, j2&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return i, j&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function wrapSpaces(s)&lt;br /&gt;
	return gsub(s, &amp;#039;(%s+)&amp;#039;, &amp;#039;&amp;lt;span class=&amp;quot;wrap&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function escAndRep(s)&lt;br /&gt;
	local patterns = {&lt;br /&gt;
		&amp;#039;%[%[[^%]|]-%s[^%]|]-|&amp;#039;, -- Piped links&lt;br /&gt;
		&amp;#039;&amp;lt;/?[A-Za-z][^&amp;gt;]-%s[^&amp;gt;]-&amp;gt;&amp;#039; -- HTML tags&lt;br /&gt;
	}&lt;br /&gt;
	s = gsub(s, &amp;#039;%[%[([^%]|]-%s[^%]|]-)%]%]&amp;#039;, &amp;#039;[[%1|%1]]&amp;#039;) -- Pipe unpiped links&lt;br /&gt;
	local i, j = multiFind(s, patterns)&lt;br /&gt;
	if i then -- Match found&lt;br /&gt;
		local remaining, escaped = {}, {}&lt;br /&gt;
		repeat&lt;br /&gt;
			table.insert(remaining, sub(s, 1, i - 1)) -- What precedes the match&lt;br /&gt;
			table.insert(escaped, sub(s, i, j)) -- The match&lt;br /&gt;
			s = sub(s, j + 1) -- Truncate&lt;br /&gt;
			i, j = multiFind(s, patterns)&lt;br /&gt;
		until not i&lt;br /&gt;
		table.insert(remaining, s) -- What follows the last match&lt;br /&gt;
		s = {}&lt;br /&gt;
		for k, v in ipairs(remaining) do&lt;br /&gt;
			v = wrapSpaces(v)&lt;br /&gt;
			table.insert(s, v)&lt;br /&gt;
			table.insert(s, escaped[k])&lt;br /&gt;
		end&lt;br /&gt;
		s = table.concat(s)&lt;br /&gt;
	else&lt;br /&gt;
		s = wrapSpaces(s)&lt;br /&gt;
	end&lt;br /&gt;
	return s&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._main(s, wrap, tooltip, class)&lt;br /&gt;
	local span = mw.html.create(&amp;#039;span&amp;#039;)&lt;br /&gt;
		:attr(&amp;#039;lang&amp;#039;, &amp;#039;und-Latn-fonipa&amp;#039;)&lt;br /&gt;
		:addClass(&amp;#039;IPA&amp;#039;)&lt;br /&gt;
		:addClass(class)&lt;br /&gt;
	-- wrap=all: Do nothing&lt;br /&gt;
	-- wrap=none: Never break&lt;br /&gt;
	-- Otherwise: Break at spaces only&lt;br /&gt;
	if wrap ~= &amp;#039;all&amp;#039; then&lt;br /&gt;
		span:addClass(&amp;#039;nowrap&amp;#039;)&lt;br /&gt;
		if wrap ~= &amp;#039;none&amp;#039; then&lt;br /&gt;
			s = escAndRep(s)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if tooltip ~= &amp;#039;&amp;#039; then -- tooltip is added unless blank&lt;br /&gt;
		span:attr(&amp;#039;title&amp;#039;, tooltip or&lt;br /&gt;
			&amp;#039;Representation in the International Phonetic Alphabet (IPA)&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	return tostring(span:wikitext(s))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	-- local args = frame:getParent().args&lt;br /&gt;
	local args = frame.args[1] and frame.args or frame:getParent().args&lt;br /&gt;
	local s = args[1] and trim(args[1]) or &amp;#039;&amp;#039;&lt;br /&gt;
	return s == &amp;#039;&amp;#039; and &amp;#039;&amp;#039; or p._main(s, args.wrap, args.tooltip, args.class)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._lang(args)&lt;br /&gt;
	local ret = { p._main(args[1], args.wrap, args.tooltip, args.class) }&lt;br /&gt;
	local cats = {}&lt;br /&gt;
&lt;br /&gt;
	-- Label&lt;br /&gt;
	do&lt;br /&gt;
		local label = args.label&lt;br /&gt;
		local lang = args.lang and args.lang ~= &amp;#039;&amp;#039; and args.lang&lt;br /&gt;
		local defaultlabel = args.defaultlabel and args.defaultlabel ~= &amp;#039;&amp;#039;&lt;br /&gt;
			and args.defaultlabel or lang and lang .. &amp;#039; pronunciation:&amp;#039;&lt;br /&gt;
		if not label then&lt;br /&gt;
			local labelcode = args.labelcode and args.labelcode:lower()&lt;br /&gt;
			if labelcode then&lt;br /&gt;
				local function returnLabel()&lt;br /&gt;
					if labelcode == &amp;#039;&amp;#039; then&lt;br /&gt;
						return &amp;#039;&amp;#039;&lt;br /&gt;
					end&lt;br /&gt;
					for k, v in pairs{&lt;br /&gt;
						[&amp;#039;ipa&amp;#039;] = &amp;#039;[[International Phonetic Alphabet|IPA]]:&amp;#039;,&lt;br /&gt;
						[&amp;#039;pron&amp;#039;] = &amp;#039;pronounced&amp;#039;,&lt;br /&gt;
						[&amp;#039;also&amp;#039;] = &amp;#039;also&amp;#039;,&lt;br /&gt;
						[&amp;#039;local&amp;#039;] = &amp;#039;locally&amp;#039;,&lt;br /&gt;
						[&amp;#039;localpron&amp;#039;] = &amp;#039;local pronunciation:&amp;#039;&lt;br /&gt;
					} do&lt;br /&gt;
						if labelcode == k then&lt;br /&gt;
							return v&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
					if labelcode == &amp;#039;lang&amp;#039; then&lt;br /&gt;
						return lang and lang .. &amp;#039;:&amp;#039;&lt;br /&gt;
					end&lt;br /&gt;
					if args.dialects and args.dialects ~= &amp;#039;&amp;#039; then&lt;br /&gt;
						for s in gmatch(args.dialects, &amp;#039;([^=]+=[^;]+);?&amp;#039;) do&lt;br /&gt;
							local t = mw.text.split(s, &amp;#039;[;=]&amp;#039;)&lt;br /&gt;
							for i = 1, #t - 1 do&lt;br /&gt;
								if labelcode == t[i] then&lt;br /&gt;
									return t[#t] .. &amp;#039; pronunciation:&amp;#039;&lt;br /&gt;
								end&lt;br /&gt;
								if labelcode == &amp;#039;lang&amp;#039; .. t[i] then&lt;br /&gt;
									return t[#t] .. &amp;#039;:&amp;#039;&lt;br /&gt;
								end&lt;br /&gt;
							end&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
					-- For calls from modules&lt;br /&gt;
					return args.labels and args.labels[labelcode]&lt;br /&gt;
				end&lt;br /&gt;
				label = returnLabel()&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		label = label or defaultlabel&lt;br /&gt;
		if label and label ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			if args.small ~= &amp;#039;no&amp;#039; then -- Defaults to true&lt;br /&gt;
				label = &amp;#039;&amp;lt;span style=&amp;quot;font-size:85%&amp;quot;&amp;gt;&amp;#039; .. label .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
			table.insert(ret, 1, label .. &amp;#039; &amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Audio&lt;br /&gt;
	if args.audio and args.audio ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		local audio = mw.getCurrentFrame():expandTemplate{&lt;br /&gt;
			title = &amp;#039;Template:Audio&amp;#039;,&lt;br /&gt;
			args = { args.audio, &amp;#039;listen&amp;#039;, help = &amp;#039;no&amp;#039; }&lt;br /&gt;
		}&lt;br /&gt;
		table.insert(ret, &amp;#039; &amp;lt;span class=&amp;quot;nowrap&amp;quot; style=&amp;quot;font-size:85%&amp;quot;&amp;gt;(&amp;#039; ..&lt;br /&gt;
			audio .. &amp;#039;)&amp;lt;/span&amp;gt;&amp;#039;)&lt;br /&gt;
		if args.audiocat ~= &amp;#039;&amp;#039; then -- audiocat is added unless blank&lt;br /&gt;
			table.insert(cats, args.audiocat&lt;br /&gt;
				or &amp;#039;Pages including recorded pronunciations&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Categories&lt;br /&gt;
	if args.category and args.category ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		table.insert(cats, args.category)&lt;br /&gt;
	end&lt;br /&gt;
	if cats[1] then&lt;br /&gt;
		local ns = mw.title.getCurrentTitle().namespace&lt;br /&gt;
		if ns % 2 == 0 and ns ~= 2 then -- Non-talk and non-user&lt;br /&gt;
			for _, v in ipairs(cats) do&lt;br /&gt;
				table.insert(ret, &amp;#039;[[Category:&amp;#039; .. v .. &amp;#039;]]&amp;#039;)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return table.concat(ret)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.lang(frame)&lt;br /&gt;
	local args = frame.args&lt;br /&gt;
	local parentArgs = frame:getParent().args&lt;br /&gt;
	for k, v in pairs(parentArgs) do&lt;br /&gt;
		if type(k) == &amp;#039;string&amp;#039; then&lt;br /&gt;
			args[k] = v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	args[1] = args[1] and trim(args[1]) or &amp;#039;&amp;#039;&lt;br /&gt;
	return args[1] == &amp;#039;&amp;#039; and &amp;#039;&amp;#039; or p._lang(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;Nardog</name></author>
	</entry>
</feed>