<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="rue">
	<id>https://wiki.kocky.cc/w/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%3ADPLlua</id>
	<title>Модуль:DPLlua - Історія едітовань</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.kocky.cc/w/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%3ADPLlua"/>
	<link rel="alternate" type="text/html" href="https://wiki.kocky.cc/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:DPLlua&amp;action=history"/>
	<updated>2026-04-03T22:15:46Z</updated>
	<subtitle>Історія едітовань той сторінкы на вікі</subtitle>
	<generator>MediaWiki 1.40.1</generator>
	<entry>
		<id>https://wiki.kocky.cc/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:DPLlua&amp;diff=427&amp;oldid=prev</id>
		<title>Бетярь: 2 ревізії: Template:Infobox_Species from StarCitizenTools</title>
		<link rel="alternate" type="text/html" href="https://wiki.kocky.cc/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:DPLlua&amp;diff=427&amp;oldid=prev"/>
		<updated>2023-10-23T22:31:16Z</updated>

		<summary type="html">&lt;p&gt;2 ревізії: Template:Infobox_Species from StarCitizenTools&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;rue&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Старша верзія&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Ревізія 00:31, 24 октовбра 2023&lt;/td&gt;
				&lt;/tr&gt;
&lt;!-- diff cache key wiki:diff::1.12:old-66:rev-427 --&gt;
&lt;/table&gt;</summary>
		<author><name>Бетярь</name></author>
	</entry>
	<entry>
		<id>https://wiki.kocky.cc/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:DPLlua&amp;diff=66&amp;oldid=prev</id>
		<title>Бетярь: 1 ревізія: InfoboxNeue from StarCitizenTools</title>
		<link rel="alternate" type="text/html" href="https://wiki.kocky.cc/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:DPLlua&amp;diff=66&amp;oldid=prev"/>
		<updated>2023-10-17T23:55:14Z</updated>

		<summary type="html">&lt;p&gt;1 ревізія: InfoboxNeue from StarCitizenTools&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;rue&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Старша верзія&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Ревізія 01:55, 18 октовбра 2023&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;rue&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(Не є роздїлне)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Бетярь</name></author>
	</entry>
	<entry>
		<id>https://wiki.kocky.cc/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:DPLlua&amp;diff=65&amp;oldid=prev</id>
		<title>starcitizen&gt;Alistair3149: Sync with RS wiki</title>
		<link rel="alternate" type="text/html" href="https://wiki.kocky.cc/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:DPLlua&amp;diff=65&amp;oldid=prev"/>
		<updated>2021-05-09T04:14:59Z</updated>

		<summary type="html">&lt;p&gt;Sync with RS wiki&lt;/p&gt;
&lt;a href=&quot;https://wiki.kocky.cc/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:DPLlua&amp;amp;diff=65&amp;amp;oldid=426&quot;&gt;Указати зміны&lt;/a&gt;</summary>
		<author><name>starcitizen&gt;Alistair3149</name></author>
	</entry>
	<entry>
		<id>https://wiki.kocky.cc/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:DPLlua&amp;diff=426&amp;oldid=prev</id>
		<title>starcitizen&gt;Alistair3149: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="https://wiki.kocky.cc/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:DPLlua&amp;diff=426&amp;oldid=prev"/>
		<updated>2020-03-17T19:54:04Z</updated>

		<summary type="html">&lt;p&gt;1 revision imported&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;rue&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Старша верзія&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Ревізія 21:54, 17 марца 2020&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;rue&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(Не є роздїлне)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>starcitizen&gt;Alistair3149</name></author>
	</entry>
	<entry>
		<id>https://wiki.kocky.cc/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:DPLlua&amp;diff=425&amp;oldid=prev</id>
		<title>en&gt;Alistair3149: Created page with &quot;-- &lt;nowiki&gt; local dpl = {}  dpl.pipe = &#039;¦&#039; local dataContentMarker = &#039;`#@@#`&#039; local usesInclude = {}  -- Custom function for splitting a string because mw.text.split() is waa...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.kocky.cc/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:DPLlua&amp;diff=425&amp;oldid=prev"/>
		<updated>2020-03-15T06:24:19Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;-- &amp;lt;nowiki&amp;gt; local dpl = {}  dpl.pipe = &amp;#039;¦&amp;#039; local dataContentMarker = &amp;#039;`#@@#`&amp;#039; local usesInclude = {}  -- Custom function for splitting a string because mw.text.split() is waa...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Нова сторінка&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- &amp;lt;nowiki&amp;gt;&lt;br /&gt;
local dpl = {}&lt;br /&gt;
&lt;br /&gt;
dpl.pipe = &amp;#039;¦&amp;#039;&lt;br /&gt;
local dataContentMarker = &amp;#039;`#@@#`&amp;#039;&lt;br /&gt;
local usesInclude = {}&lt;br /&gt;
&lt;br /&gt;
-- Custom function for splitting a string because mw.text.split() is waaay too slow&lt;br /&gt;
local function split( str, pattern, plain )&lt;br /&gt;
	local res = {}&lt;br /&gt;
	continue = true&lt;br /&gt;
	local startIndex = 1&lt;br /&gt;
&lt;br /&gt;
	while continue do&lt;br /&gt;
		local i, j = string.find( str, pattern, startIndex, plain )&lt;br /&gt;
		if i then&lt;br /&gt;
			table.insert( res, string.sub( str, startIndex, i-1 ) )&lt;br /&gt;
			startIndex = j + 1&lt;br /&gt;
		else&lt;br /&gt;
			table.insert( res, string.sub( str, startIndex ) )&lt;br /&gt;
			continue = false&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return res&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Also custom function for speed&lt;br /&gt;
local function trim( str )&lt;br /&gt;
	return string.match( str, &amp;#039;^%s*(.-)%s*$&amp;#039; )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local escapeChars = {&lt;br /&gt;
	[&amp;#039;{&amp;#039;] = &amp;#039;&amp;amp;#123;&amp;#039;,&lt;br /&gt;
	[&amp;#039;\180&amp;#039;] = &amp;#039;&amp;amp;#123;&amp;#039;, -- Wtf dpl...&lt;br /&gt;
	[&amp;#039;}&amp;#039;] = &amp;#039;&amp;amp;#125;&amp;#039;,&lt;br /&gt;
	[&amp;#039;\181&amp;#039;] = &amp;#039;&amp;amp;#125;&amp;#039;,&lt;br /&gt;
	[&amp;#039;[&amp;#039;] = &amp;#039;&amp;amp;#91;&amp;#039;,&lt;br /&gt;
	[&amp;#039;]&amp;#039;] = &amp;#039;&amp;amp;#93;&amp;#039;,&lt;br /&gt;
	[&amp;#039;|&amp;#039;] = &amp;#039;&amp;amp;#124;&amp;#039;,&lt;br /&gt;
	[&amp;#039;-&amp;#039;] = &amp;#039;&amp;amp;#8208;&amp;#039;,&lt;br /&gt;
	[&amp;#039;\226&amp;#039;] = &amp;#039;&amp;#039;,&lt;br /&gt;
	[&amp;#039;\157&amp;#039;] = &amp;#039;&amp;#039;,&lt;br /&gt;
}&lt;br /&gt;
local function escape( str )&lt;br /&gt;
	-- the \226\157\180\181 are used to match ❴ (U+E29DB4) and ❵ (U+E29DB5) wich are 3 bytes long so&lt;br /&gt;
	-- we can&amp;#039;t use them directly inside [] patterns. Ustring would fix this but it&amp;#039;s way too slow.&lt;br /&gt;
	str = string.gsub( str, &amp;#039;[{}%[%]|%-\226\157\180\181]&amp;#039;, escapeChars )&lt;br /&gt;
	return str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local unEscapeChars = {&lt;br /&gt;
	[&amp;#039;&amp;amp;#123;&amp;#039;] = &amp;#039;{&amp;#039;,&lt;br /&gt;
	[&amp;#039;&amp;amp;#125;&amp;#039;] = &amp;#039;}&amp;#039;,&lt;br /&gt;
	[&amp;#039;&amp;amp;#91;&amp;#039;] = &amp;#039;[&amp;#039;,&lt;br /&gt;
	[&amp;#039;&amp;amp;#93;&amp;#039;] = &amp;#039;]&amp;#039;,&lt;br /&gt;
	[&amp;#039;&amp;amp;#124;&amp;#039;] = &amp;#039;|&amp;#039;,&lt;br /&gt;
	[&amp;#039;&amp;amp;#8208;&amp;#039;] = &amp;#039;-&amp;#039;&lt;br /&gt;
}&lt;br /&gt;
local function unEscape( str )&lt;br /&gt;
	str = string.gsub( str, &amp;#039;&amp;amp;#%d+;&amp;#039;, unEscapeChars )&lt;br /&gt;
	return str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function removeFormattingSettings( query )&lt;br /&gt;
	local toRemove = {&lt;br /&gt;
		&amp;#039;mode&amp;#039;,&lt;br /&gt;
		&amp;#039;table&amp;#039;,&lt;br /&gt;
		&amp;#039;tablerow&amp;#039;,&lt;br /&gt;
		&amp;#039;tablesortcol&amp;#039;,&lt;br /&gt;
		&amp;#039;headingmode&amp;#039;,&lt;br /&gt;
		&amp;#039;headingcount&amp;#039;,&lt;br /&gt;
		&amp;#039;listattr&amp;#039;,&lt;br /&gt;
		&amp;#039;itemattr&amp;#039;,&lt;br /&gt;
		&amp;#039;hlistattr&amp;#039;,&lt;br /&gt;
		&amp;#039;hitemattr&amp;#039;,&lt;br /&gt;
		&amp;#039;userdateformat&amp;#039;,&lt;br /&gt;
		&amp;#039;shownamespace&amp;#039;,&lt;br /&gt;
		&amp;#039;escapelinks&amp;#039;,&lt;br /&gt;
		&amp;#039;titlemaxlength&amp;#039;,&lt;br /&gt;
		&amp;#039;replaceintitle&amp;#039;,&lt;br /&gt;
		&amp;#039;columns&amp;#039;,&lt;br /&gt;
		&amp;#039;rows&amp;#039;,&lt;br /&gt;
		&amp;#039;rowsize&amp;#039;,&lt;br /&gt;
		&amp;#039;rowcolformat&amp;#039;,&lt;br /&gt;
		&amp;#039;resultsheader&amp;#039;,&lt;br /&gt;
		&amp;#039;resultsfooter&amp;#039;,&lt;br /&gt;
		&amp;#039;oneresultheader&amp;#039;,&lt;br /&gt;
		&amp;#039;oneresultfooter&amp;#039;,&lt;br /&gt;
		&amp;#039;noresultsheader&amp;#039;,&lt;br /&gt;
		&amp;#039;suppresserrors&amp;#039;,&lt;br /&gt;
		&amp;#039;noresultsfooter&amp;#039;,&lt;br /&gt;
		&amp;#039;format&amp;#039;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	for _, k in ipairs( toRemove ) do&lt;br /&gt;
		query[k] = nil&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function formatInclude( query )&lt;br /&gt;
	query = split( query, &amp;#039;,&amp;#039;, true )&lt;br /&gt;
	local count = #query&lt;br /&gt;
&lt;br /&gt;
	for i = 1, #query do&lt;br /&gt;
		if query[i]:match( &amp;#039;%b{}&amp;#039; ) then -- Check if we are including a template&lt;br /&gt;
			local templateName, params = query[i]:match( &amp;#039;{(.-)[¦|}]([^,]*)&amp;#039; )&lt;br /&gt;
			if params:find( &amp;#039;%S&amp;#039; ) then&lt;br /&gt;
				params:gsub( &amp;#039;^:%-&amp;#039;, &amp;#039;&amp;#039; )&lt;br /&gt;
				query[i] = string.format( &amp;#039;{%s}%s&amp;#039;, templateName, params )&lt;br /&gt;
				for _ in params:gmatch( &amp;#039;:&amp;#039; ) do&lt;br /&gt;
					count = count + 1&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				query[i] = string.format( &amp;#039;{%s¦DPLlua helper}&amp;#039;, templateName ) -- Use a helper template to get all the parameters of our included template&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return table.concat( query, &amp;#039;,&amp;#039; ), count&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function formatDpl( query )&lt;br /&gt;
	local queries = {}&lt;br /&gt;
	local count = query.count or 500&lt;br /&gt;
	local offset = query.offset or 0&lt;br /&gt;
	local _usesInclude = false&lt;br /&gt;
	query.count = nil&lt;br /&gt;
	query.offset = nil&lt;br /&gt;
&lt;br /&gt;
	-- We use table format when the include parameter is used to make sure we can&lt;br /&gt;
	-- differentiate between the results in case more than one item is included&lt;br /&gt;
	local dplStringInclude =&lt;br /&gt;
[=[&lt;br /&gt;
{{#dpl:&lt;br /&gt;
|noresultsheader = @@&lt;br /&gt;
|count=%s&lt;br /&gt;
|offset=%s&lt;br /&gt;
|%s&lt;br /&gt;
|table=,&lt;br /&gt;
|tablerow=%s&lt;br /&gt;
}}]=]&lt;br /&gt;
&lt;br /&gt;
	-- Table format requires an include statement so we use format instead.&lt;br /&gt;
	-- This is also a lot faster than adding an empty include statement&lt;br /&gt;
	local dplStringNoInclude =&lt;br /&gt;
[=[&lt;br /&gt;
{{#dpl:&lt;br /&gt;
|noresultsheader = @@&lt;br /&gt;
|count=%s&lt;br /&gt;
|offset=%s&lt;br /&gt;
|%s&lt;br /&gt;
|format=,¦-¦[[%%PAGE%%¦]],,&lt;br /&gt;
}}]=]&lt;br /&gt;
&lt;br /&gt;
	-- Auto generate more than one dpl if count &amp;gt; 500&lt;br /&gt;
	-- The results of these are later combined&lt;br /&gt;
	for i = 1, math.ceil( count / 500 ) do&lt;br /&gt;
		local params = {}&lt;br /&gt;
		local includeCount = 0&lt;br /&gt;
&lt;br /&gt;
		for k, v in pairs( query ) do&lt;br /&gt;
			if k == &amp;#039;include&amp;#039; then&lt;br /&gt;
				v, includeCount = formatInclude( v )&lt;br /&gt;
				_usesInclude =  true&lt;br /&gt;
			end&lt;br /&gt;
			table.insert( params, k .. &amp;#039;=&amp;#039; .. tostring( v ):gsub( &amp;#039;|&amp;#039;, &amp;#039;¦&amp;#039; ) )&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if _usesInclude then&lt;br /&gt;
			table.insert( queries, string.format(&lt;br /&gt;
				dplStringInclude,&lt;br /&gt;
				count &amp;gt; 500 and 500 or count,&lt;br /&gt;
				offset,&lt;br /&gt;
				table.concat( params, &amp;#039;\n|&amp;#039; ),&lt;br /&gt;
				string.rep( dataContentMarker..&amp;#039;%%&amp;#039;..dataContentMarker..&amp;#039;,&amp;#039;, includeCount )&lt;br /&gt;
			) )&lt;br /&gt;
		else&lt;br /&gt;
			table.insert( queries, string.format(&lt;br /&gt;
				dplStringNoInclude,&lt;br /&gt;
				count &amp;gt; 500 and 500 or count,&lt;br /&gt;
				offset,&lt;br /&gt;
				table.concat( params, &amp;#039;\n|&amp;#039; )&lt;br /&gt;
			) )&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		count = count - 500&lt;br /&gt;
		offset = offset + 500&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	table.insert( usesInclude, _usesInclude )&lt;br /&gt;
&lt;br /&gt;
	return table.concat( queries )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function toTable( query )&lt;br /&gt;
	local _usesInclude = table.remove( usesInclude, 1 )&lt;br /&gt;
	local res = {}&lt;br /&gt;
	&lt;br /&gt;
	query = query:gsub( &amp;#039;&amp;lt;p&amp;gt;Extension:DynamicPageList .-&amp;lt;/p&amp;gt;&amp;#039;, function(item) res.error = item; return &amp;#039;&amp;#039; end)&lt;br /&gt;
	&lt;br /&gt;
	if not query:match( &amp;#039;^@@&amp;#039; ) then -- @@ is used when no result is found&lt;br /&gt;
		if _usesInclude then&lt;br /&gt;
			query = query:gsub( &amp;#039;\127\&amp;#039;&amp;quot;`UNIQ%-%-nowiki%-%x+%-QINU`&amp;quot;\&amp;#039;\127&amp;#039;, function(item) return &amp;#039;&amp;lt;nowiki&amp;gt;&amp;#039; .. mw.text.unstripNoWiki( item ) .. &amp;#039;&amp;lt;/nowiki&amp;gt;&amp;#039; end )&lt;br /&gt;
			query = query:gsub( dataContentMarker..&amp;#039;(.-)&amp;#039;..dataContentMarker, escape )&lt;br /&gt;
			query = query:gsub( &amp;#039;{|.-|%-&amp;#039;, &amp;#039;&amp;#039;) -- Remove the header of the table&lt;br /&gt;
			-- Replace the footer of the table width a row indicator. This effectively&lt;br /&gt;
			-- combines the output of multiple dpl queries when count &amp;gt; 500&lt;br /&gt;
			query = query:gsub( &amp;#039;|}&amp;#039;, &amp;#039;|-&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
	&lt;br /&gt;
		query = trim( query )&lt;br /&gt;
		query = split( query, &amp;#039;|-&amp;#039;, true ) -- Results of the returned pages are separated by |-&lt;br /&gt;
	&lt;br /&gt;
		for _, v in ipairs( query ) do&lt;br /&gt;
			if v:match( &amp;#039;%S&amp;#039; ) then&lt;br /&gt;
				v = trim( v )&lt;br /&gt;
				local title = v:match( &amp;#039;^|%[%[(.-)|&amp;#039; )&lt;br /&gt;
				local dataList = v:match( &amp;#039;^|.-|.-|(.*)&amp;#039; ) -- This is everything after the title&lt;br /&gt;
	&lt;br /&gt;
				if not _usesInclude then&lt;br /&gt;
					if title and title ~= &amp;#039;&amp;#039; then&lt;br /&gt;
						table.insert( res, title )&lt;br /&gt;
					end&lt;br /&gt;
				else&lt;br /&gt;
					-- When multiple includes are used (e.g. include={Template1},{Template2}) its results are separated by a pipe&lt;br /&gt;
					dataList = split( dataList, &amp;#039;|&amp;#039;, true )&lt;br /&gt;
					local _dataList = {}&lt;br /&gt;
	&lt;br /&gt;
					for _, dataItem in ipairs( dataList ) do&lt;br /&gt;
						dataItem = unEscape( dataItem )&lt;br /&gt;
						-- When we include an entire template we use the %ARGS% parameter supplied by dpl.&lt;br /&gt;
						-- However all | characters are repaced with §, e.g.:&lt;br /&gt;
						-- §nameLessParam&lt;br /&gt;
						-- §param = text [[wowee§link text]]&lt;br /&gt;
						-- §param2 = text {{something§something else}}&lt;br /&gt;
						dataItem = dataItem:gsub( &amp;#039;%b{}&amp;#039;, function(x) return x:gsub( &amp;#039;§&amp;#039;, &amp;#039;|&amp;#039; ) end ) -- Restore pipe characters inside links and templates&lt;br /&gt;
						dataItem = dataItem:gsub( &amp;#039;%b[]&amp;#039;, function(x) return x:gsub( &amp;#039;§&amp;#039;, &amp;#039;|&amp;#039; ) end )&lt;br /&gt;
						dataItem = trim( dataItem )&lt;br /&gt;
	&lt;br /&gt;
						if dataItem:match( &amp;#039;§&amp;#039; ) then -- Check if we included a template&lt;br /&gt;
							dataItem = split( dataItem, &amp;#039;§&amp;#039;, true )&lt;br /&gt;
							local _dataItem = {}&lt;br /&gt;
	&lt;br /&gt;
							for i, item in ipairs( dataItem ) do&lt;br /&gt;
								if i ~= 1 then -- skip first item as it is a false empty string created by splitting on § when the string started with a §&lt;br /&gt;
									if item:find( &amp;#039;=&amp;#039; ) then -- Check if the parameter is named or unnamed&lt;br /&gt;
										local param, value = item:match( &amp;#039;^%s*(.-)%s*=%s*(.-)%s*$&amp;#039; )&lt;br /&gt;
										_dataItem[ param ] = value&lt;br /&gt;
									else&lt;br /&gt;
										table.insert( _dataItem, trim( item ) )&lt;br /&gt;
									end&lt;br /&gt;
								end&lt;br /&gt;
							end&lt;br /&gt;
	&lt;br /&gt;
							dataItem = _dataItem&lt;br /&gt;
						end&lt;br /&gt;
	&lt;br /&gt;
						table.insert( _dataList, dataItem )&lt;br /&gt;
					end&lt;br /&gt;
	&lt;br /&gt;
					if title and title ~= &amp;#039;&amp;#039; then&lt;br /&gt;
						table.insert( res, { title=title, include=_dataList } )&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;
	return res&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Accepts a series of tables each containig the settings for a dpl query.&lt;br /&gt;
-- Combinig multiple dpl queries yields better performance than doing them sequentially&lt;br /&gt;
function dpl.ask( ... )&lt;br /&gt;
	local queries = { ... }&lt;br /&gt;
&lt;br /&gt;
	for i = 1, #queries do&lt;br /&gt;
		removeFormattingSettings( queries[i] )&lt;br /&gt;
		queries[i] = formatDpl( queries[i] )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	queries = table.concat( queries, &amp;#039;$@µ@$&amp;#039; )&lt;br /&gt;
	local time = os.clock()&lt;br /&gt;
	queries = mw.getCurrentFrame():preprocess( queries )&lt;br /&gt;
	time = os.clock() - time&lt;br /&gt;
	queries = split( queries, &amp;#039;$@µ@$&amp;#039;, true )&lt;br /&gt;
&lt;br /&gt;
	for i = 1, #queries do&lt;br /&gt;
		queries[i] = toTable( queries[i] )&lt;br /&gt;
		queries[i].time = time&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return unpack( queries )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return dpl&lt;br /&gt;
-- &amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>en&gt;Alistair3149</name></author>
	</entry>
</feed>