<?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%2FFirefly</id>
	<title>Module:Sandbox/Firefly - 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%2FFirefly"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Sandbox/Firefly&amp;action=history"/>
	<updated>2026-04-20T19:48:31Z</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/Firefly&amp;diff=145424&amp;oldid=prev</id>
		<title>imported&gt;Firefly: cleanup</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Sandbox/Firefly&amp;diff=145424&amp;oldid=prev"/>
		<updated>2022-01-30T17:31:41Z</updated>

		<summary type="html">&lt;p&gt;cleanup&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 function prepareText( inputString )&lt;br /&gt;
	local retVal = inputString&lt;br /&gt;
	local cleanupPatterns = {}&lt;br /&gt;
	-- Note, these are invoked in order, which may be important!&lt;br /&gt;
	cleanupPatterns[1] = &amp;#039;=+[^=]+=+[ ]-\n&amp;#039; -- no headers&lt;br /&gt;
	cleanupPatterns[2] = &amp;#039;[^[]%[[^[ ]+[]%a%d]&amp;#039; -- no external link URLs&lt;br /&gt;
	cleanupPatterns[3] = &amp;#039;{{[^|]-|&amp;#039; -- no template invocations&lt;br /&gt;
	cleanupPatterns[4] = &amp;#039;&amp;lt;!%-%-.-%-%-&amp;gt;&amp;#039; -- no HTML comments&lt;br /&gt;
	cleanupPatterns[5] = &amp;#039;\n&amp;#039; -- strip newlines&lt;br /&gt;
	&lt;br /&gt;
	for _, pattern in ipairs(cleanupPatterns) do&lt;br /&gt;
		retVal = mw.ustring.gsub(retVal, pattern, &amp;#039;&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return retVal&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getWordcount( text )&lt;br /&gt;
	return (table.maxn(mw.text.split(prepareText(text), &amp;#039;[ ]+&amp;#039;)) + 1)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getWordcountsForSections( targetPage, sectionLevel )&lt;br /&gt;
	&lt;br /&gt;
	local success, targetTitle = pcall( mw.title.new, targetPage )&lt;br /&gt;
	if not success or ( success and not targetTitle ) then&lt;br /&gt;
	    return nil&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local targetContent = targetTitle:getContent()&lt;br /&gt;
	&lt;br /&gt;
	local headerMarkup = string.rep( &amp;quot;=&amp;quot;, sectionLevel )&lt;br /&gt;
	local sections = mw.text.split(targetContent, &amp;#039;\n[ ]-&amp;#039;.. headerMarkup ..&amp;#039;[^=]+&amp;#039;.. headerMarkup ..&amp;#039;[ ]-\n&amp;#039;)&lt;br /&gt;
	&lt;br /&gt;
	local wordCounts = {}&lt;br /&gt;
	for i, section in ipairs(sections) do&lt;br /&gt;
		if (i&amp;gt;1) then -- Skip preamble section&lt;br /&gt;
			wordCounts[#wordCounts + 1] = getWordcount(section)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local resultTable = {}&lt;br /&gt;
	local headersIterator = mw.ustring.gmatch(targetContent, &amp;#039;\n[ ]-&amp;#039;.. headerMarkup ..&amp;#039;([^=]+)&amp;#039;.. headerMarkup ..&amp;#039;[ ]-\n&amp;#039;)&lt;br /&gt;
	local i = 1&lt;br /&gt;
	for header in headersIterator do&lt;br /&gt;
		if mw.ustring.match(header, &amp;#039;{your user name}&amp;#039;) == nil then -- we don&amp;#039;t care about example sections&lt;br /&gt;
			resultTable[i .. &amp;quot; &amp;quot; .. header] = wordCounts[i] -- first capture group&lt;br /&gt;
		end&lt;br /&gt;
		i = i+1&lt;br /&gt;
	end&lt;br /&gt;
	return resultTable&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getRowsFromWordcountTable( wordcountTable )&lt;br /&gt;
	local ret = &amp;quot;&amp;quot;&lt;br /&gt;
	for section, count in pairs(wordcountTable) do&lt;br /&gt;
		ret = ret .. string.format(&amp;quot;\n|-\n| %s || %s&amp;quot;, section, count)&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeWordcountTable( args )&lt;br /&gt;
	return &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main( frame )&lt;br /&gt;
	local frame = mw.getCurrentFrame()&lt;br /&gt;
	local targetPage = frame.args[&amp;quot;target&amp;quot;]&lt;br /&gt;
	&lt;br /&gt;
	local sectionLevel = frame.args[&amp;quot;sectionlevel&amp;quot;]&lt;br /&gt;
	sectionLevel = tonumber(sectionLevel, 10)&lt;br /&gt;
	if sectionLevel == nil then&lt;br /&gt;
		sectionLevel = 2&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local tableCss = frame.args[&amp;quot;tablecss&amp;quot;]&lt;br /&gt;
	if tableCss == nil then&lt;br /&gt;
		tableCss = &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local wordcountTable = getWordcountsForSections( targetPage, sectionLevel )&lt;br /&gt;
&lt;br /&gt;
	return mw.ustring.format( &amp;#039;\n{| class=&amp;quot;wikitable sortable&amp;quot; %s \n|-\n! Section !! Word Count%s\n|-\n|}&amp;#039;, tableCss, getRowsFromWordcountTable(wordcountTable) )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;Firefly</name></author>
	</entry>
</feed>