<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.pttlink.org/index.php?action=history&amp;feed=atom&amp;title=Module%3AIgenmod</id>
	<title>Module:Igenmod - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.pttlink.org/index.php?action=history&amp;feed=atom&amp;title=Module%3AIgenmod"/>
	<link rel="alternate" type="text/html" href="https://wiki.pttlink.org/index.php?title=Module:Igenmod&amp;action=history"/>
	<updated>2026-05-04T16:39:15Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.35.5</generator>
	<entry>
		<id>https://wiki.pttlink.org/index.php?title=Module:Igenmod&amp;diff=11175&amp;oldid=prev</id>
		<title>Kg7qin: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="https://wiki.pttlink.org/index.php?title=Module:Igenmod&amp;diff=11175&amp;oldid=prev"/>
		<updated>2022-01-24T07:59:42Z</updated>

		<summary type="html">&lt;p&gt;1 revision imported&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left diff-editfont-monospace&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 07:59, 24 January 2022&lt;/td&gt;
				&lt;/tr&gt;
&lt;!-- diff cache key mediawiki:diff::1.12:old-11174:rev-11175 --&gt;
&lt;/table&gt;</summary>
		<author><name>Kg7qin</name></author>
	</entry>
	<entry>
		<id>https://wiki.pttlink.org/index.php?title=Module:Igenmod&amp;diff=11174&amp;oldid=prev</id>
		<title>Mediawiki&gt;CptViraj: Protected &quot;Module:Igenmod&quot;: High-risk Lua module ([Edit=Allow only template editors and administrators] (indefinite) [Move=Allow only template editors and administrators] (indefinite))</title>
		<link rel="alternate" type="text/html" href="https://wiki.pttlink.org/index.php?title=Module:Igenmod&amp;diff=11174&amp;oldid=prev"/>
		<updated>2021-07-05T08:18:27Z</updated>

		<summary type="html">&lt;p&gt;Protected &amp;quot;&lt;a href=&quot;/wiki/Module:Igenmod&quot; title=&quot;Module:Igenmod&quot;&gt;Module:Igenmod&lt;/a&gt;&amp;quot;: &lt;a href=&quot;https://commons.wikimedia.org/wiki/Protection_policy&quot; class=&quot;extiw&quot; title=&quot;commons:Protection policy&quot;&gt;High-risk Lua module&lt;/a&gt; ([Edit=Allow only template editors and administrators] (indefinite) [Move=Allow only template editors and administrators] (indefinite))&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;
&lt;br /&gt;
-- get workdate via &amp;quot;Module:File&amp;quot; &lt;br /&gt;
function p.wrkdate ( )&lt;br /&gt;
	local str = mw.getCurrentFrame():preprocess('{{REVISIONTIMESTAMP}}')&lt;br /&gt;
	return str:sub(1,4) .. '-' .. str:sub(5,6) .. '-' .. str:sub(7,8)&lt;br /&gt;
end -- end function wrkDate&lt;br /&gt;
&lt;br /&gt;
-- invert the workdate (for a descending sortkey)&lt;br /&gt;
function p.invdate ()&lt;br /&gt;
	local invt = &amp;quot;&amp;quot;&lt;br /&gt;
	local wdat = p.wrkdate () or  &amp;quot;2020-00-00&amp;quot;	&lt;br /&gt;
	invt = string.format ( &amp;quot;%.4u&amp;quot; , 2030 - tonumber ( string.sub ( wdat, 1, 4 )) )&lt;br /&gt;
	invt = invt .. string.format ( &amp;quot;%.2u&amp;quot; , 12 - tonumber ( string.sub ( wdat, 6, 7 )) )&lt;br /&gt;
	invt = invt .. string.format ( &amp;quot;%.2u&amp;quot; , 31 - tonumber ( string.sub ( wdat, 9, 10 )) )&lt;br /&gt;
	return invt&lt;br /&gt;
end -- end function invDate&lt;br /&gt;
&lt;br /&gt;
-- get extension text (uppercased) &lt;br /&gt;
function p.exttext ( )&lt;br /&gt;
	local page = mw.title.getCurrentTitle().text;&lt;br /&gt;
	local ptab = mw.text.split(page , '.', true)&lt;br /&gt;
	return		 mw.ustring.upper( table.concat(ptab, '', #ptab  ) )&lt;br /&gt;
end -- end function extText&lt;br /&gt;
&lt;br /&gt;
-- get extension code: &amp;quot;s&amp;quot; for SVG,  &amp;quot;n&amp;quot; for anything else&lt;br /&gt;
function p.extcode ( )&lt;br /&gt;
	if p.exttext () == &amp;quot;SVG&amp;quot;&lt;br /&gt;
		then return &amp;quot;s&amp;quot;&lt;br /&gt;
		else return &amp;quot;n&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
end -- end function extCode&lt;br /&gt;
&lt;br /&gt;
-- get default tag: &amp;quot;v&amp;quot; for SVG,  &amp;quot;n&amp;quot; for anything else&lt;br /&gt;
function p.default ( )&lt;br /&gt;
	if p.exttext () == &amp;quot;SVG&amp;quot;&lt;br /&gt;
		then return &amp;quot;v&amp;quot;&lt;br /&gt;
		else return &amp;quot;n&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
end -- end function default&lt;br /&gt;
&lt;br /&gt;
-- get unspec tag: &amp;quot;&amp;quot; for SVG,  &amp;quot;n&amp;quot; for anything else&lt;br /&gt;
function p.unspec ( )&lt;br /&gt;
	if p.exttext () ~= &amp;quot;SVG&amp;quot;&lt;br /&gt;
		then return &amp;quot;n&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
end -- end function unspec&lt;br /&gt;
&lt;br /&gt;
-- replace a final dot&lt;br /&gt;
function p.dotrepl ( frame )&lt;br /&gt;
	local lpar = frame.args&lt;br /&gt;
	local strg = mw.text.trim( lpar[1] or '' )&lt;br /&gt;
	local repl = mw.text.trim( lpar[2] or '' )&lt;br /&gt;
	if mw.ustring.sub(strg, #strg) == &amp;quot;.&amp;quot; then&lt;br /&gt;
		strg = mw.ustring.sub(strg, 1, #strg-1) .. repl&lt;br /&gt;
	end&lt;br /&gt;
	return strg&lt;br /&gt;
end -- function dotrepl&lt;br /&gt;
&lt;br /&gt;
-- invert the workdate, for a descending sortkey&lt;br /&gt;
function p.sortkey ()&lt;br /&gt;
	local invt = &amp;quot;&amp;quot;&lt;br /&gt;
	local wdat = p.wrkdate () or  &amp;quot;2020-00-00&amp;quot;	&lt;br /&gt;
	invt = string.format ( &amp;quot;%.4u&amp;quot; , 2030 - tonumber ( string.sub ( wdat, 1, 4 )) )&lt;br /&gt;
	invt = invt .. string.format ( &amp;quot;%.2u&amp;quot; , 12 - tonumber ( string.sub ( wdat, 6, 7 )) )&lt;br /&gt;
	invt = invt .. string.format ( &amp;quot;%.2u&amp;quot; , 31 - tonumber ( string.sub ( wdat, 9, 10 )) )&lt;br /&gt;
	return invt&lt;br /&gt;
end -- end function sortKey&lt;br /&gt;
&lt;br /&gt;
-- get categ:sub: &amp;quot;SVG&amp;quot; for SVG,  &amp;quot;PNG&amp;quot; for anything else&lt;br /&gt;
function p.categ ( )&lt;br /&gt;
	if p.exttext () == &amp;quot;SVG&amp;quot;&lt;br /&gt;
		then return &amp;quot;SVG&amp;quot;&lt;br /&gt;
		else return &amp;quot;PNG&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
end -- end function categ&lt;br /&gt;
&lt;br /&gt;
-- function: changes #/*/:/;  to \35/\42/\58/\59 &lt;br /&gt;
function p.subst ( frame )&lt;br /&gt;
	local gpar = frame.args&lt;br /&gt;
	local char = mw.text.trim ( gpar[1] )&lt;br /&gt;
	if		mw.ustring.sub ( char, 1, 1 ) == '#' then &lt;br /&gt;
		return '&amp;amp;#35;' .. mw.ustring.sub( char, 2, #char );&lt;br /&gt;
	elseif	mw.ustring.sub ( char, 1, 1 ) == '*' then &lt;br /&gt;
		return '&amp;amp;#42;' .. mw.ustring.sub( char, 2, #char );&lt;br /&gt;
	elseif	mw.ustring.sub ( char, 1, 1 ) == ':' then &lt;br /&gt;
		return '&amp;amp;#58;' .. mw.ustring.sub( char, 2, #char );&lt;br /&gt;
	elseif	mw.ustring.sub ( char, 1, 1 ) == ';' then &lt;br /&gt;
		return '&amp;amp;#59;' .. mw.ustring.sub( char, 2, #char );&lt;br /&gt;
	else&lt;br /&gt;
		return char;&lt;br /&gt;
	end&lt;br /&gt;
end -- end function subst&lt;br /&gt;
&lt;br /&gt;
-- function textsplit (for Colorbox and COAInf.)&lt;br /&gt;
function p.split ( frame )&lt;br /&gt;
	local lpar   = frame.args&lt;br /&gt;
	local parstr = mw.text.trim( lpar[1] ) or 'xx/yy/zz'; &lt;br /&gt;
	local tmplte = mw.text.trim( lpar[2] or 'Igen/cbx' );  -- or 'Igen/coa'&lt;br /&gt;
	local argtab = mw.text.split( parstr, &amp;quot;/&amp;quot; );&lt;br /&gt;
--  for (trim loop) ?&lt;br /&gt;
	return mw.getCurrentFrame(): expandTemplate { title = tmplte, args = argtab };&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- function cmdsplit&lt;br /&gt;
function p.c_split ( frame )&lt;br /&gt;
	local lpar   = frame.args&lt;br /&gt;
	local tmplte = mw.text.trim( lpar[1] or '!' );&lt;br /&gt;
	local parstr = mw.text.trim( lpar[2] ) or 'xx/yy/zz'; &lt;br /&gt;
	local argtab = mw.text.split( parstr, '/', true );&lt;br /&gt;
	local indx = 1;&lt;br /&gt;
	local splt = {};&lt;br /&gt;
	local ppar = {}&lt;br /&gt;
	for i, v in ipairs(lpar) do&lt;br /&gt;
		if v ~= nil and lpar [i+2] ~= nil then&lt;br /&gt;
			splt = mw.text.split( lpar [i+2], '/', true )&lt;br /&gt;
			if splt [2] == nil then&lt;br /&gt;
				indx = indx + 1&lt;br /&gt;
				ppar [indx] = splt [1]&lt;br /&gt;
			else&lt;br /&gt;
				splt [1] = mw.text.trim( splt[1] or 'a' )&lt;br /&gt;
				splt [2] = mw.text.trim( splt[2] or 'b' )&lt;br /&gt;
				local xxx = splt [1]&lt;br /&gt;
				ppar [splt [1]] = splt [2]&lt;br /&gt;
--				indx = indx + 1&lt;br /&gt;
--				ppar [indx] = splt [2] .. splt [1]&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end	&lt;br /&gt;
	local cmdtab = {}&lt;br /&gt;
	for v = 1, #argtab do&lt;br /&gt;
		ppar [1] = mw.text.trim( argtab [v] )&lt;br /&gt;
		table.insert( cmdtab, frame:expandTemplate{ title = tmplte,  args = ppar } );&lt;br /&gt;
	end&lt;br /&gt;
 	return  table.concat (cmdtab)&lt;br /&gt;
end -- function c_split&lt;br /&gt;
&lt;br /&gt;
-- function t_split: 1 parm &amp;quot;templte/p1/p2/..&amp;quot; &lt;br /&gt;
function p.t_split ( frame )&lt;br /&gt;
	local lpar   = frame.args&lt;br /&gt;
	local parstr = mw.text.trim( lpar[1] ) or 'xx/yy/zz'; &lt;br /&gt;
	local argtab = mw.text.split( parstr, &amp;quot;/&amp;quot; );&lt;br /&gt;
	local tmplte = mw.text.trim( table.remove ( argtab, 1 ) );&lt;br /&gt;
--  for (trim loop) ?&lt;br /&gt;
	return mw.getCurrentFrame(): expandTemplate { title = tmplte, args = argtab };&lt;br /&gt;
end -- function t_split&lt;br /&gt;
&lt;br /&gt;
-- global function with 1 parm: can remove special prefixes &lt;br /&gt;
--	 the pairs [], &amp;lt;&amp;gt;, (), {} &lt;br /&gt;
--	doubles as &amp;lt;&amp;lt;, .., ((, &amp;amp;&amp;amp;  but of course ''not''  [[ and {{&lt;br /&gt;
function p.remprf ( frame )&lt;br /&gt;
	local lpar = frame.args;&lt;br /&gt;
	if  mw.ustring.sub (lpar[1], 1, 2) == '[]'&lt;br /&gt;
	 or mw.ustring.sub (lpar[1], 1, 2) == '&amp;lt;&amp;gt;'&lt;br /&gt;
	 or mw.ustring.sub (lpar[1], 1, 2) == '()'&lt;br /&gt;
	 or mw.ustring.sub (lpar[1], 1, 2) == '{}'&lt;br /&gt;
	 or mw.ustring.sub (lpar[1], 1, 1) == mw.ustring.sub (lpar[1], 2, 2) &lt;br /&gt;
	and mw.ustring.sub (lpar[1], 1, 2) ~= '[['&lt;br /&gt;
	and mw.ustring.sub (lpar[1], 1, 2) ~= '{{' then&lt;br /&gt;
		return mw.ustring.sub (lpar[1], 3 )		--  remove that prefix&lt;br /&gt;
	else&lt;br /&gt;
		return lpar[1]&lt;br /&gt;
	end&lt;br /&gt;
end -- function remprf&lt;br /&gt;
&lt;br /&gt;
-- global function with 1 parm: remove any 2-byte prefix&lt;br /&gt;
function p.rem2bp ( frame )&lt;br /&gt;
	local lpar = frame.args;&lt;br /&gt;
	return mw.ustring.sub (lpar[1], 3 )&lt;br /&gt;
end -- function rem2bp&lt;br /&gt;
&lt;br /&gt;
-- check whether it is a new Inkscape file&lt;br /&gt;
function p.inkscape ( frame )&lt;br /&gt;
	local otab = {}&lt;br /&gt;
	if p.exttext () ~= &amp;quot;SVG&amp;quot; then&lt;br /&gt;
		table.insert(otab, frame:expandTemplate{ title = &amp;quot;=&amp;quot;, args = {&amp;quot; &amp;quot;} } );&lt;br /&gt;
	else &lt;br /&gt;
		local cat = &amp;quot;Unspec New SVG created with Inkscape&amp;quot;&lt;br /&gt;
		local key = &amp;quot;{{padleft:{{#expr:{{CURRENTYEAR}}  -{{REVISIONYEAR}}}}|2|0}}&amp;quot;&lt;br /&gt;
		key = key ..&amp;quot;{{padleft:{{#expr:{{CURRENTMONTH2}}-{{REVISIONMONTH}}}}|2|0}}&amp;quot;&lt;br /&gt;
		key = key ..&amp;quot;{{padleft:{{#expr:{{CURRENTDAY2}}  -{{REVISIONDAY2}}}}|2|0}}&amp;quot;&lt;br /&gt;
		table.insert(otab, frame:expandTemplate{ title = &amp;quot;Igen/cat&amp;quot;, args = {cat, key } });&lt;br /&gt;
	end&lt;br /&gt;
	return  table.concat (otab);&lt;br /&gt;
end -- end function inkscape&lt;br /&gt;
 &lt;br /&gt;
----------------------- TEST ------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- check whether it is a new Inkscape file&lt;br /&gt;
function p.newscape ( frame )&lt;br /&gt;
	local otab = {}&lt;br /&gt;
	if p.exttext () ~= &amp;quot;SVG&amp;quot; then&lt;br /&gt;
		table.insert(otab, frame:expandTemplate{ title = &amp;quot;=&amp;quot;, args = {&amp;quot; &amp;quot;} } );&lt;br /&gt;
	else &lt;br /&gt;
		local wdat = p.wrkdate () or &amp;quot;2020-00-00&amp;quot;&lt;br /&gt;
		local sdat = mw.getCurrentFrame():callParserFunction( &amp;quot;#time&amp;quot;, { 'Y-m-d', datestr} ) or &amp;quot;2020-08&amp;quot;&lt;br /&gt;
		if  mw.ustring.sub (wdat, 1, 7) == mw.ustring.sub (sdat, 1, 7) then&lt;br /&gt;
			local cat = &amp;quot;Unspec new SVG created with Inkscape&amp;quot;&lt;br /&gt;
			local key = string.format ( &amp;quot;%.4u&amp;quot; , 2030 - tonumber ( string.sub ( wdat, 1, 4 )) )&lt;br /&gt;
			key = key .. string.format ( &amp;quot;%.2u&amp;quot; ,   12 - tonumber ( string.sub ( wdat, 6, 7 )) )&lt;br /&gt;
			key = key .. string.format ( &amp;quot;%.2u&amp;quot; ,   31 - tonumber ( string.sub ( wdat, 9,10 )) )&lt;br /&gt;
			table.insert(otab, frame:expandTemplate{ title = &amp;quot;Igen/cat&amp;quot;, args = {cat, key } });&lt;br /&gt;
			&lt;br /&gt;
--			local msg = &amp;quot; Template [[Template:Inkscape|{{Inkscape}}]] without W3C-specification is deprecated ! &amp;quot; &lt;br /&gt;
--			table.insert(otab, frame:expandTemplate{ title = &amp;quot;error&amp;quot;, args = {msg} } );&lt;br /&gt;
		else&lt;br /&gt;
			table.insert(otab, frame:expandTemplate{ title = &amp;quot;=&amp;quot;, args = {&amp;quot; &amp;quot;} } );&lt;br /&gt;
--			table.insert(otab, frame:expandTemplate{ title = &amp;quot;=&amp;quot;, args = {wdat..sdat} } ); -- test output&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return  table.concat (otab);&lt;br /&gt;
end -- end function newscape&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- function: invert date &lt;br /&gt;
function p.invtest ( frame )&lt;br /&gt;
	local gpar = frame.args&lt;br /&gt;
	local wdat = mw.text.trim ( gpar[1] ) or '2020-00-00'&lt;br /&gt;
--	local leng = tonumber ( gpar[2] ) or 7&lt;br /&gt;
	local sdat = mw.getCurrentFrame():callParserFunction( &amp;quot;#time&amp;quot;, { 'Y-m-d', datestr} ) or &amp;quot;2020-08-30&amp;quot;&lt;br /&gt;
	local key =  string.format ( &amp;quot;%.4u&amp;quot; , 2030 - tonumber ( string.sub ( wdat, 1, 4 )) )&lt;br /&gt;
	key = key .. string.format ( &amp;quot;%.2u&amp;quot; ,   12 - tonumber ( string.sub ( wdat, 6, 7 )) )&lt;br /&gt;
	key = key .. string.format ( &amp;quot;%.2u&amp;quot; ,   31 - tonumber ( string.sub ( wdat, 9,10 )) )&lt;br /&gt;
	return key&lt;br /&gt;
end -- end function invTest&lt;br /&gt;
&lt;br /&gt;
-- check whether it is a new file&lt;br /&gt;
function p.newfile ( frame )&lt;br /&gt;
	if p.exttext () ~= &amp;quot;SVG&amp;quot; then&lt;br /&gt;
		return &amp;quot;n&amp;quot;&lt;br /&gt;
	else &lt;br /&gt;
		local leng = frame [1] or 7;&lt;br /&gt;
		local wdat = p.wrkdate () or  &amp;quot;2020-00-00&amp;quot;&lt;br /&gt;
		local sdat = mw.getCurrentFrame():callParserFunction( &amp;quot;#time&amp;quot;, { 'Y-m-d', datestr} )&lt;br /&gt;
		local leng = tonumber ( frame.args[1] or 7 )&lt;br /&gt;
		if  mw.ustring.sub (wdat, 1, leng) ~= mw.ustring.sub (sdat, 1, leng)&lt;br /&gt;
			then return &amp;quot;s&amp;quot;&lt;br /&gt;
			else return &amp;quot;newcat&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end -- end function newFile&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function p.cattest (args)&lt;br /&gt;
	local categ = mw.ext.cattools&lt;br /&gt;
&lt;br /&gt;
	local category = args[1] or &amp;quot;Category:Igen/top subtemplates&amp;quot;&lt;br /&gt;
	local page     = args[2] or &amp;quot;Template:Igen/top:d&amp;quot;&lt;br /&gt;
	if  categ.hasPage( category, page )&lt;br /&gt;
		then return page .. &amp;quot; ist in category &amp;quot; .. category .. &amp;quot; enthalten&amp;quot;&lt;br /&gt;
		else return page .. &amp;quot; gibt es nicht in &amp;quot; .. category .. &amp;quot; !&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function p.sysdate ( )&lt;br /&gt;
	return os.date (  )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function p.compare ( )&lt;br /&gt;
	local wdat = p.wrkdate () or  &amp;quot;2020-00-00&amp;quot;	&lt;br /&gt;
	local sdat = mw.getCurrentFrame():callParserFunction( &amp;quot;#time&amp;quot;, { 'Y-m-d', datestr} )&lt;br /&gt;
	return &amp;quot;W=&amp;quot;..wdat ..&amp;quot;,  S=&amp;quot;..sdat..&amp;quot;.&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Mediawiki&gt;CptViraj</name></author>
	</entry>
</feed>