<?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%2FProcrastinatingReader%2FDbm</id>
	<title>Module:Sandbox/ProcrastinatingReader/Dbm - 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%2FProcrastinatingReader%2FDbm"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Sandbox/ProcrastinatingReader/Dbm&amp;action=history"/>
	<updated>2026-05-26T12:28:51Z</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/ProcrastinatingReader/Dbm&amp;diff=146016&amp;oldid=prev</id>
		<title>imported&gt;ProcrastinatingReader: assert position in string</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Sandbox/ProcrastinatingReader/Dbm&amp;diff=146016&amp;oldid=prev"/>
		<updated>2020-11-06T18:02:07Z</updated>

		<summary type="html">&lt;p&gt;assert position in string&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;
local getArgs = require(&amp;#039;Module:Arguments&amp;#039;).getArgs&lt;br /&gt;
&lt;br /&gt;
-- Returns a table with the keys of the passed table as its values&lt;br /&gt;
local function getTableKeys(tbl)&lt;br /&gt;
	local keys = {}&lt;br /&gt;
	for k,_ in pairs(tbl) do&lt;br /&gt;
		keys[#keys + 1] = k&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	table.sort(keys)&lt;br /&gt;
	return keys&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Construct a table of the tagged CSDs and any arguments passed in for each CSD&lt;br /&gt;
-- Example format: |G6|rationale{{=}}G6 rationale|xfd|G7|rationale{{=}}G7 rationale&lt;br /&gt;
local function constructCsdTable(args)&lt;br /&gt;
	local tbl = {}&lt;br /&gt;
    local current = &amp;#039;&amp;#039;															-- Code of current CSD being processed. Its value will be the last CSD-like param read (eg &amp;#039;G6&amp;#039;)&lt;br /&gt;
    local size = 0&lt;br /&gt;
    for k,v in pairs(args) do&lt;br /&gt;
        if string.match(v, &amp;#039;^[GgAaFfCcUuRrTtPp]%d%d?$&amp;#039;) then						-- Begin collecting args for a new CSD&lt;br /&gt;
            current, size = string.lower(v), 0&lt;br /&gt;
            tbl[current] = {[&amp;#039;size&amp;#039;] = size}&lt;br /&gt;
        else																	-- Add the arg to the CSD being processed (ie, the corresponding CSD)&lt;br /&gt;
        	local arg = mw.text.split(v, &amp;#039;=&amp;#039;)&lt;br /&gt;
        	tbl[current][string.lower(arg[1])] = arg[2]&lt;br /&gt;
        	size = size + 1														-- Increment the &amp;#039;size&amp;#039;, ie number of params passed for a particular CSD&lt;br /&gt;
        	tbl[current][&amp;#039;size&amp;#039;] = size&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    return tbl&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Build the Db-meta wrapper template&lt;br /&gt;
local function build(frame, args)&lt;br /&gt;
	local passThruArgs = {&amp;#039;rationale&amp;#039;, &amp;#039;xfd&amp;#039;, &amp;#039;user&amp;#039;, &amp;#039;blanked&amp;#039;, &amp;#039;url&amp;#039;, &amp;#039;url2&amp;#039;, &amp;#039;url3&amp;#039;, &amp;#039;source&amp;#039;, &amp;#039;article&amp;#039;, &amp;#039;location&amp;#039;, &amp;#039;filename&amp;#039;, &amp;#039;criterion&amp;#039;} -- Arguments we&amp;#039;ll pass through unchanged to the Db-meta wrapper&lt;br /&gt;
	local csdTable = constructCsdTable(args)&lt;br /&gt;
	local csdKeys = getTableKeys(csdTable)&lt;br /&gt;
	--if true then return mw.dumpObject(csdTable) end&lt;br /&gt;
&lt;br /&gt;
    local builtCsdTemplates = {}&lt;br /&gt;
    local summary = &amp;quot;&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    -- Loop through CSDs (eg G1, G2)&lt;br /&gt;
    local n = 0&lt;br /&gt;
    for k,v in pairs(csdTable) do&lt;br /&gt;
    	n = n + 1&lt;br /&gt;
    	local templateArgs = {&lt;br /&gt;
    		[&amp;#039;raw&amp;#039;] = &amp;#039;yes&amp;#039;,&lt;br /&gt;
    		[&amp;#039;nocat&amp;#039;] = &amp;#039;true&amp;#039;													-- for test purposes&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        -- Add to summary the name of the CSD. Plus open brackets if we&amp;#039;ve got extra params&lt;br /&gt;
        summary = summary .. string.upper(k) .. (v[&amp;#039;size&amp;#039;] &amp;gt; 0 and &amp;#039; (&amp;#039; or &amp;#039;&amp;#039;)&lt;br /&gt;
        &lt;br /&gt;
        -- add values to templateArgs (and summary) in any custom params we got for this CSD, eg Rationale, URL&lt;br /&gt;
        for _,arg in ipairs(passThruArgs) do&lt;br /&gt;
        	if v[arg] then&lt;br /&gt;
        		templateArgs[arg] = v[arg]&lt;br /&gt;
        		summary = summary .. arg .. &amp;#039;: &amp;#039; .. v[arg] .. (v[&amp;#039;size&amp;#039;] &amp;gt; _ and &amp;#039;, &amp;#039; or &amp;#039;&amp;#039;)&lt;br /&gt;
        	end&lt;br /&gt;
        end&lt;br /&gt;
        -- Close brackets if we had custom params. Add a comma if we&amp;#039;ve got another CSD&lt;br /&gt;
        summary = summary .. (v[&amp;#039;size&amp;#039;] &amp;gt; 0 and &amp;#039;)&amp;#039; or &amp;#039;&amp;#039;) .. (#csdKeys &amp;gt; n and &amp;#039;, &amp;#039; or &amp;#039;&amp;#039;)&lt;br /&gt;
    	&lt;br /&gt;
    	-- Save the built template&lt;br /&gt;
    	table.insert(builtCsdTemplates, frame:expandTemplate{ title = &amp;#039;Db-&amp;#039;..k, args = templateArgs })&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- Construct Db-meta wrapper, composed of all the built CSD templates&lt;br /&gt;
    local dbTemplate = frame:expandTemplate{ title = &amp;#039;Db-meta&amp;#039;, args = {&lt;br /&gt;
    		[1] = &amp;#039;&amp;amp;#32;for the following reasons:&amp;lt;/b&amp;gt;&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;&amp;#039;..table.concat(builtCsdTemplates, &amp;#039;&amp;lt;/li&amp;gt;&amp;lt;li&amp;gt;&amp;#039;) .. &amp;#039;&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt; &amp;lt;b&amp;gt;The page may be deleted under any criterion that is valid&amp;#039;,&lt;br /&gt;
    		[&amp;#039;criterion&amp;#039;] = &amp;#039;NA&amp;#039;,&lt;br /&gt;
    		[&amp;#039;temp&amp;#039;] = &amp;#039;Db-notice-multiple&amp;#039;,&lt;br /&gt;
    		[&amp;#039;temp2&amp;#039;] = &amp;#039;|&amp;#039;..table.concat(csdKeys, &amp;#039;|&amp;#039;),&lt;br /&gt;
    		[&amp;#039;summary&amp;#039;] = &amp;#039;Multiple reasons: &amp;#039; .. summary,&lt;br /&gt;
    		&lt;br /&gt;
    		-- forward given params to Db-meta&lt;br /&gt;
    		[&amp;#039;bot&amp;#039;] = args[&amp;#039;bot&amp;#039;] or &amp;#039;&amp;#039;,&lt;br /&gt;
    		[&amp;#039;blanked&amp;#039;] = args[&amp;#039;blanked&amp;#039;] or (csdTable[&amp;#039;g10&amp;#039;] and &amp;#039;yes&amp;#039;) or &amp;#039;&amp;#039;,&lt;br /&gt;
    		[&amp;#039;divblank&amp;#039;] = args[&amp;#039;divblank&amp;#039;] or (csdTable[&amp;#039;g10&amp;#039;] and &amp;#039;yes&amp;#039;) or &amp;#039;&amp;#039;,&lt;br /&gt;
    		[&amp;#039;help&amp;#039;] = args[&amp;#039;help&amp;#039;] or &amp;#039;&amp;#039;,&lt;br /&gt;
    }}&lt;br /&gt;
&lt;br /&gt;
    return dbTemplate&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Exports&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local args = getArgs(frame)&lt;br /&gt;
	return build(frame, args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Test&lt;br /&gt;
function p.dump(frame)&lt;br /&gt;
	return mw.dumpObject(mw.text.unstripNoWiki(frame.args[1]))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;ProcrastinatingReader</name></author>
	</entry>
</feed>