<?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%3AColor2dec</id>
	<title>Module:Color2dec - 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%3AColor2dec"/>
	<link rel="alternate" type="text/html" href="https://wiki.pttlink.org/index.php?title=Module:Color2dec&amp;action=history"/>
	<updated>2026-05-04T20:36:00Z</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:Color2dec&amp;diff=11159&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:Color2dec&amp;diff=11159&amp;oldid=prev"/>
		<updated>2022-01-24T07:59:39Z</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-11158:rev-11159 --&gt;
&lt;/table&gt;</summary>
		<author><name>Kg7qin</name></author>
	</entry>
	<entry>
		<id>https://wiki.pttlink.org/index.php?title=Module:Color2dec&amp;diff=11158&amp;oldid=prev</id>
		<title>Mediawiki&gt;Sarang: expansion</title>
		<link rel="alternate" type="text/html" href="https://wiki.pttlink.org/index.php?title=Module:Color2dec&amp;diff=11158&amp;oldid=prev"/>
		<updated>2021-12-16T14:55:30Z</updated>

		<summary type="html">&lt;p&gt;expansion&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
--The function &amp;quot;tincture&amp;quot; converts valid tincture names to hexadecimal colorcodes&lt;br /&gt;
--  e.g. 'argent' will give '#FFF'; when not found it tries afterwards with module:convCSS&lt;br /&gt;
--The function &amp;quot;convert&amp;quot; converts a valid hexadecimal colorcode into three decimal numbers: &lt;br /&gt;
--	#bbccdd gives 187|204|221,  while #FF0 will give 255|255|0 &lt;br /&gt;
--The function &amp;quot;tbcgen&amp;quot; generates a complete 5-parameter string &lt;br /&gt;
--Invalid color codes will give invalid or unpredictable results, or LUA errors.&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- local / global function: convert  h → d: #rrggbb or #rgb to dec_table {rr, gg, bb}&lt;br /&gt;
local function convert ( arg )&lt;br /&gt;
	local hex  =  arg or '#000';&lt;br /&gt;
    if  mw.ustring.sub ( hex, 1,  1) ~= '#' then &lt;br /&gt;
        error ('value &amp;quot;' .. hex .. '&amp;quot; cannot be converted to decimal')&lt;br /&gt;
	end &lt;br /&gt;
	local dec  =  {};&lt;br /&gt;
	for i = 1, 3 do&lt;br /&gt;
		if #hex == 4 then&lt;br /&gt;
			dec [i] = tonumber ( string.sub (hex, i+1, i+1)..string.sub (hex, i+1, i+1), 16 )&lt;br /&gt;
		else&lt;br /&gt;
			dec [i] = tonumber ( mw.ustring.sub (hex, 2*i, 2*i + 1), 16 )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return dec;&lt;br /&gt;
end -- function convert&lt;br /&gt;
&lt;br /&gt;
-- global=args[1], local=frame&lt;br /&gt;
function p.tincture ( frame )&lt;br /&gt;
	local args = frame.args&lt;br /&gt;
	local inp = ''&lt;br /&gt;
	if  args then&lt;br /&gt;
        inp   =  mw.text.trim ( args[1] or 'glo' )&lt;br /&gt;
	elseif  frame then&lt;br /&gt;
         inp  =  mw.text.trim ( frame   or 'loc' )&lt;br /&gt;
--	else inp  = 'Tinct wo'&lt;br /&gt;
	end&lt;br /&gt;
	if  mw.ustring.sub ( inp, 2, 2 ) == ')' then &lt;br /&gt;
		inp = mw.ustring.sub ( inp, 3 )&lt;br /&gt;
	end&lt;br /&gt;
	local low  =  ( string.lower ( inp ) );&lt;br /&gt;
	if  mw.ustring.sub ( inp, 1, 1 ) == '#' then&lt;br /&gt;
		if  #inp ==  4  then&lt;br /&gt;
			return inp;&lt;br /&gt;
		elseif   mw.ustring.sub ( low, 2, 2 ) ==  mw.ustring.sub ( low, 3, 3 )&lt;br /&gt;
			and  mw.ustring.sub ( low, 4, 4 ) ==  mw.ustring.sub ( low, 5, 5 )&lt;br /&gt;
			and  mw.ustring.sub ( low, 6, 6 ) ==  mw.ustring.sub ( low, 7, 7 )  then&lt;br /&gt;
			local  upc  =  ( string.upper ( inp ) );&lt;br /&gt;
			return '#'  .. mw.ustring.sub ( upc, 2, 2 ) &lt;br /&gt;
						.. mw.ustring.sub ( upc, 4, 4 ) &lt;br /&gt;
						.. mw.ustring.sub ( upc, 6, 6 );&lt;br /&gt;
		else			&lt;br /&gt;
			return inp; &lt;br /&gt;
		end	&lt;br /&gt;
	end&lt;br /&gt;
	local out  =  '';&lt;br /&gt;
	if     low == 'argent'    then  out = '#FFF'&lt;br /&gt;
	elseif low == 'argent-d'  then  out = '#E7E7E7'&lt;br /&gt;
	elseif low == 'azure'     then  out = '#0F47AF'&lt;br /&gt;
	elseif low == 'carnation' then  out = '#F2A772'&lt;br /&gt;
	elseif low == 'céleste'   then  out = '#89C5E3'&lt;br /&gt;
	elseif low == 'celeste'   then  out = '#89C5E3'&lt;br /&gt;
	elseif low == 'cendrée'   then  out = '#999'&lt;br /&gt;
	elseif low == 'gules'     then  out = '#DA121A'&lt;br /&gt;
	elseif low == 'naranja'	  then  out = '#EB7711'&lt;br /&gt;
	elseif low == 'or'        then  out = '#FCDD09'&lt;br /&gt;
	elseif low == 'purpure'   then  out = '#9116A1'&lt;br /&gt;
	elseif low == 'sable'     then  out = '#000'&lt;br /&gt;
	elseif low == 'tawny'     then  out = '#9D5333'&lt;br /&gt;
	elseif low == 'vert'      then  out = '#078930'&lt;br /&gt;
-- colours less common:	&lt;br /&gt;
	elseif low == 'brunâtre'  then  out = '#3F1FFF'&lt;br /&gt;
	elseif low == 'sanguine'  then  out = '#BC3F4A'&lt;br /&gt;
	elseif low == 'murrey'    then  out = '#C54B8C'&lt;br /&gt;
	elseif low == 'orange_t'  then  out = '#FC7A11'&lt;br /&gt;
	else   &lt;br /&gt;
		local convc = require( &amp;quot;Module:convCSS&amp;quot; )&lt;br /&gt;
		out  =  convc.main ( low )&lt;br /&gt;
	end&lt;br /&gt;
	return out;&lt;br /&gt;
end -- function tincture&lt;br /&gt;
&lt;br /&gt;
-- global=args[1], local=frame&lt;br /&gt;
function p.decode ( frame )&lt;br /&gt;
	local args = frame.args&lt;br /&gt;
	local str = ''&lt;br /&gt;
	if  args then&lt;br /&gt;
       str   =  mw.text.trim ( args [1], charset ); &lt;br /&gt;
	elseif  frame then&lt;br /&gt;
       str   =  mw.text.trim ( frame, charset ); &lt;br /&gt;
	end&lt;br /&gt;
	if  mw.ustring.sub ( str, 2, 2 ) == ')' then &lt;br /&gt;
		str = mw.ustring.sub ( str, 3 );		-- striped legend&lt;br /&gt;
    end&lt;br /&gt;
    if  mw.ustring.sub ( str, 1, 1 ) == '#' then &lt;br /&gt;
         return '&amp;amp;#35;' .. mw.ustring.sub( str, 2 );&lt;br /&gt;
    elseif mw.ustring.sub ( str, 1, 1 ) == '*' then &lt;br /&gt;
         return '&amp;amp;#42;' .. mw.ustring.sub( str, 2 );&lt;br /&gt;
    elseif mw.ustring.sub ( str, 1, 1 ) == ':' then &lt;br /&gt;
         return '&amp;amp;#58;' .. mw.ustring.sub( str, 2 );&lt;br /&gt;
    elseif mw.ustring.sub ( str, 1, 1 ) == ';' then &lt;br /&gt;
         return '&amp;amp;#59;' .. mw.ustring.sub( str, 2 );&lt;br /&gt;
    elseif mw.ustring.sub ( str, 1, 1 ) == '_' then &lt;br /&gt;
         return '&amp;amp;#32;' .. mw.ustring.sub( str, 2 );&lt;br /&gt;
   else&lt;br /&gt;
         return str;&lt;br /&gt;
    end&lt;br /&gt;
end -- function decode&lt;br /&gt;
&lt;br /&gt;
---- Global functions --------------&lt;br /&gt;
&lt;br /&gt;
-- global function with 1 parm   for Igen/cbox with &amp;quot;#&amp;quot;&lt;br /&gt;
function p.tindec ( frame )&lt;br /&gt;
	local gpar = frame.args;&lt;br /&gt;
	local hcod = p.tincture ( gpar[1] );&lt;br /&gt;
	return p.decode ( hcod );&lt;br /&gt;
end -- function tindec&lt;br /&gt;
&lt;br /&gt;
-- global function with 1 parm   for Igen/cbox&lt;br /&gt;
function p.stripe ( frame )&lt;br /&gt;
	local gpar = frame.args;&lt;br /&gt;
	if  mw.ustring.sub ( gpar[1], 2, 2 ) == ')' then&lt;br /&gt;
		return  mw.ustring.sub ( gpar[1], 1, 1 )&lt;br /&gt;
	else&lt;br /&gt;
		return ''&lt;br /&gt;
	end&lt;br /&gt;
end -- function stripe&lt;br /&gt;
&lt;br /&gt;
-- global function with 1 parm   for template:F&lt;br /&gt;
function p.remprf ( frame )&lt;br /&gt;
	local gpar = frame.args;&lt;br /&gt;
	if  mw.ustring.sub (gpar[1], 1, 2) == '()'&lt;br /&gt;
	 or mw.ustring.sub (gpar[1], 1, 2) == '&amp;lt;&amp;gt;'&lt;br /&gt;
	 or mw.ustring.sub (gpar[1], 1, 2) == '[]'&lt;br /&gt;
	 or mw.ustring.sub (gpar[1], 1, 2) == '{}'&lt;br /&gt;
	 or mw.ustring.sub (gpar[1], 1, 1) == mw.ustring.sub (gpar[1], 2, 2) &lt;br /&gt;
	and mw.ustring.sub (gpar[1], 1, 2) ~= '[['&lt;br /&gt;
	and mw.ustring.sub (gpar[1], 1, 2) ~= '{{' then&lt;br /&gt;
		return mw.ustring.sub (gpar[1], 3 );		--  remove that prefix&lt;br /&gt;
	elseif mw.ustring.sub (gpar[1], 1, 1) == '_' then&lt;br /&gt;
		return ' ' .. mw.ustring.sub (gpar[1], 2 );	--	leading space&lt;br /&gt;
	else&lt;br /&gt;
		return gpar[1];&lt;br /&gt;
	end&lt;br /&gt;
end -- function remprf&lt;br /&gt;
&lt;br /&gt;
-- global function with 1 parm  --  remove 2-byte prefix&lt;br /&gt;
function p.rem2bp ( frame )&lt;br /&gt;
	local gpar = frame.args;&lt;br /&gt;
	return mw.ustring.sub (gpar[1], 3 )&lt;br /&gt;
end -- function rem2bp&lt;br /&gt;
 &lt;br /&gt;
-- global with 2 parms: count occurencies of pattern in string&lt;br /&gt;
function p.count ( frame ) &lt;br /&gt;
	local gprm = frame.args; -- global parms&lt;br /&gt;
--	local strg = mw.text.trim ( gprm[1] or ' ' ) or ' ' ;&lt;br /&gt;
--	local pttn = mw.text.trim ( gprm[2] or ' ' ) or ' ' ;&lt;br /&gt;
	local strg = gprm[1] or ' ';&lt;br /&gt;
	local pttn = gprm[2] or ' ';&lt;br /&gt;
	local addp = #pttn - 1;&lt;br /&gt;
	local cunt = 0;&lt;br /&gt;
    for i = 1, #strg-addp do&lt;br /&gt;
    	if mw.ustring.sub( strg, i, i+addp) == pttn&lt;br /&gt;
    		then cunt = cunt + 1;&lt;br /&gt;
    	end&lt;br /&gt;
	end&lt;br /&gt;
	return cunt		-- number of occurrencies&lt;br /&gt;
end	-- function count&lt;br /&gt;
&lt;br /&gt;
-- global with 2 parms: return left part of string&lt;br /&gt;
function p.leftp ( frame ) &lt;br /&gt;
	local gprm = frame.args; -- global parms&lt;br /&gt;
	local strg = gprm[1] or ' ';&lt;br /&gt;
	local pttn = gprm[2] or ' ';&lt;br /&gt;
	local retv = '';&lt;br /&gt;
    for i = 1, #strg do&lt;br /&gt;
    	if mw.ustring.sub( strg, i, i) == pttn&lt;br /&gt;
    		then retv = mw.ustring.sub( strg, 1, i-1);&lt;br /&gt;
				 break;&lt;br /&gt;
    	end&lt;br /&gt;
	end&lt;br /&gt;
	return retv		-- string&lt;br /&gt;
end	-- function leftp&lt;br /&gt;
&lt;br /&gt;
-- global with 2 parms: return right part of string&lt;br /&gt;
function p.rigtp ( frame ) &lt;br /&gt;
	local gprm = frame.args; -- global parms&lt;br /&gt;
	local strg = gprm[1] or ' ';&lt;br /&gt;
	local pttn = gprm[2] or ' ';&lt;br /&gt;
	local retv = '';&lt;br /&gt;
    for i = 1, #strg do&lt;br /&gt;
    	if mw.ustring.sub( strg, i, i) == pttn&lt;br /&gt;
			then retv = mw.ustring.sub( strg, i+1, #strg);&lt;br /&gt;
				 break;&lt;br /&gt;
    	end&lt;br /&gt;
	end&lt;br /&gt;
	return retv		-- string&lt;br /&gt;
end	-- function rigtp&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- global with 2 parms&lt;br /&gt;
function p.tbcgen ( frame )&lt;br /&gt;
    local args = frame.args;&lt;br /&gt;
    local arg1 = args[1] or '#000000';&lt;br /&gt;
	local tbctab = {};&lt;br /&gt;
	local hexcod = '';&lt;br /&gt;
	hexcod = p.tincture ( arg1 );&lt;br /&gt;
	decval = convert ( hexcod ); &lt;br /&gt;
	tbctab [1]   = '0';&lt;br /&gt;
	tbctab [2]   = decval [1];&lt;br /&gt;
	tbctab [3]   = decval [2];&lt;br /&gt;
	tbctab [4]   = decval [3];&lt;br /&gt;
	tbctab [5]   = p.decode ( args[2] or 'couleur' );&lt;br /&gt;
	return mw.getCurrentFrame():expandTemplate{ title = 'Tbc', args =  tbctab };&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- for template: ColorString &lt;br /&gt;
--	two different possibilities for parent parameter input:&lt;br /&gt;
--	  first parameter has the format aaa/bbb/ccc... (also with html-reserved characters!)&lt;br /&gt;
-- 	  second parameter: the name of the template to be performed (default: Igen/cbx)&lt;br /&gt;
--	or&lt;br /&gt;
--	  parameters in the format aaa|bbb|ccc... (allows to specify items like URLs with slashes)&lt;br /&gt;
--  In any case the template to be performed can be specified with &amp;quot;t=&amp;quot;&lt;br /&gt;
--	returns [to the template] the parameters in the format aaa|bbb|ccc...&lt;br /&gt;
--  parent-global parms  &amp;quot;ppar&amp;quot; for ColorString&lt;br /&gt;
function p.cstring ( frame )&lt;br /&gt;
	local pparms = mw.getCurrentFrame(): getParent().args;&lt;br /&gt;
	local argstr = mw.text.trim( pparms[1] ) or 'aa/bb/cc'; &lt;br /&gt;
	local argtit = mw.text.trim( pparms.t or 'Igen/cbx' );&lt;br /&gt;
	local argtab = mw.text.split( argstr, &amp;quot;/&amp;quot; );&lt;br /&gt;
	if  mw.text.trim( argtab[1] ) == mw.text.trim( pparms[1] ) then&lt;br /&gt;
		argtab = pparms&lt;br /&gt;
	end&lt;br /&gt;
	return mw.getCurrentFrame(): expandTemplate { title = argtit, args = argtab };&lt;br /&gt;
end -- function cstring&lt;br /&gt;
&lt;br /&gt;
-- global function colortst (1 param)&lt;br /&gt;
function p.colorts ( frame )&lt;br /&gt;
	local args = frame.args;&lt;br /&gt;
	local hcod = p.tincture ( args[1] );&lt;br /&gt;
	local dtab = convert ( hcod )&lt;br /&gt;
	local xsum = dtab [1] + dtab [2] + dtab [3]&lt;br /&gt;
	local par1 = 'b'&lt;br /&gt;
	local tsum = tostring ( xsum )&lt;br /&gt;
	if #tsum &amp;lt; 3 then tsum = '0' .. tsum end&lt;br /&gt;
	if #tsum &amp;lt; 3 then tsum = '0' .. tsum end&lt;br /&gt;
	tsum = '&amp;amp;nbsp;'..tsum..' '&lt;br /&gt;
	if xsum &amp;lt; 408 then par1 = 'w' end&lt;br /&gt;
	local otab = {}&lt;br /&gt;
	table.insert(otab, frame:expandTemplate{ title = 'Color', args = { par1, tsum , hcod, hcod } });&lt;br /&gt;
	return  table.concat (otab)   --   args[1]&lt;br /&gt;
end -- function colorts&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- function of Ud:PerfektesChaos (layout: Ud:Sarang), &lt;br /&gt;
-- generates a table of 16 × 16 × 16 = 4096 elements&lt;br /&gt;
function p.colortab ()&lt;br /&gt;
	local iR, iG, iB,  hR, hG, hB,  h, s, g&lt;br /&gt;
	local r    = &amp;quot;___NOTOC__&amp;quot;&lt;br /&gt;
	for iR = 0, 15 do&lt;br /&gt;
		hR = string.format( &amp;quot;%X&amp;quot;, iR )&lt;br /&gt;
		r = r .. &amp;quot;\n=== &amp;quot; .. hR .. &amp;quot;xx&amp;quot;&lt;br /&gt;
		r = r .. &amp;quot; ===\n&amp;lt;table width='100%' border='0' style='text-align:center'&amp;gt;&amp;quot;&lt;br /&gt;
		for iG = 0, 15 do&lt;br /&gt;
			hG = string.format( &amp;quot;%X&amp;quot;, iG )&lt;br /&gt;
			r    = r .. &amp;quot;\n&amp;lt;tr&amp;gt;&amp;quot;&lt;br /&gt;
			for iB = 0, 15 do&lt;br /&gt;
				hB = string.format( &amp;quot;%X&amp;quot;, iB )&lt;br /&gt;
				h = hR .. hG .. hB&lt;br /&gt;
--				s = contrast( '#'..h )&lt;br /&gt;
--				s = '#' .. string.format( &amp;quot;%X&amp;quot;, 15 - iR ) .. string.format( &amp;quot;%X&amp;quot;, 15 - iG ) .. string.format( &amp;quot;%X&amp;quot;, 15 - iB )&lt;br /&gt;
--				if iR * 2 + iG * 7 + iB &amp;lt; 75 &lt;br /&gt;
--				if iR * 3 + iG * 10 &amp;lt; 98 &lt;br /&gt;
				if iR + iG  + iB &amp;lt; 24 &lt;br /&gt;
					then	s = &amp;quot;FFF&amp;quot;	else	s = &amp;quot;000&amp;quot;	end&lt;br /&gt;
				g = h&lt;br /&gt;
				if	mw.ustring.find(&amp;quot;0369CF&amp;quot;, hR) ~= nil and&lt;br /&gt;
					mw.ustring.find(&amp;quot;0369CF&amp;quot;, hG) ~= nil and&lt;br /&gt;
					mw.ustring.find(&amp;quot;0369CF&amp;quot;, hB) ~= nil then&lt;br /&gt;
					g = &amp;quot;'''&amp;quot; .. g .. &amp;quot;'''&amp;quot;&lt;br /&gt;
				end  &lt;br /&gt;
				r = r .. string.format( &amp;quot;\n&amp;lt;td title='#%s' style='background:#%s;color:#%s'&amp;gt;%s&amp;lt;/td&amp;gt;&amp;quot;,  h, h, s, g )&lt;br /&gt;
			end -- for iB&lt;br /&gt;
			r = r .. &amp;quot;\n&amp;lt;/tr&amp;gt;&amp;quot;&lt;br /&gt;
		end -- for iG&lt;br /&gt;
		r = r .. &amp;quot;\n&amp;lt;/table&amp;gt;&amp;quot;&lt;br /&gt;
	end -- for iR&lt;br /&gt;
	return r&lt;br /&gt;
end -- function colortab&lt;br /&gt;
&lt;br /&gt;
return p;&lt;/div&gt;</summary>
		<author><name>Mediawiki&gt;Sarang</name></author>
	</entry>
</feed>