Documentation for this module may be created at Module:Climate data/colors/doc

local w = {} local math_mod = require('Module:Math')  local function hex( value ) 	return string.format("%02X", value) end  local function format_line( background, text_color ) 	return "background: #" .. background .. "; color:#" .. text_color .. ";" end  local function range_pos( value, start, stop ) 	if start < stop then 		if value < start then 			return 0 		elseif value > stop then 			return 1 		else 			return (value - start) / (stop - start) 		end 	else 		if value < stop then 			return 1 		elseif value > start then 			return 0 		else 			return (start - value) / (start - stop) 		end 	end end  function w.color_d( frame ) 	local val = math_mod._cleanNumber( frame.args[1] ) 	return w._days_color( val ) end function w.color_pastel( frame ) 	local val = math_mod._cleanNumber( frame.args[1] ) 	return w._pastel_color( val ) end function w.color_t( frame ) 	local val = math_mod._cleanNumber( frame.args[1] ) 	return w._temperature_color( val ) end function w.color_green( frame ) 	local val = math_mod._cleanNumber( frame.args[1] ) 	return w._green_color( val ) end function w.color_s( frame ) 	local val = math_mod._cleanNumber( frame.args[1] ) 	return w._sunshine_color( val ) end function w.color_h( frame ) 	local val = math_mod._cleanNumber( frame.args[1] ) 	return w._humidity_color( val ) end function w.color_p( frame ) 	local val = math_mod._cleanNumber( frame.args[1] ) 	return w._precipitation_color( val ) end function w.color_u( frame ) 	local val = math_mod._cleanNumber( frame.args[1] ) 	return w._uv_color( val ) end  function w._days_color( val ) 	local item, background, text_color  	if val == nil then 		return format_line( "FFFFFF", "000000" ) 	end  	item = hex( range_pos( val, 20, 0 )*255 ) 	background = item .. item  	item = hex( range_pos( val, 40, 20 )*255 ) 	background = background .. item  	if val >= 12 then 		text_color = "FFFFFF" 	else 		text_color = "000000" 	end  	return format_line( background, text_color ) end  function w._green_color( val ) 	local item1, item2, background, text_color  	if val == nil then 		return format_line( "FFFFFF", "000000" ) 	end  	item1 = hex( range_pos( val, 165.6, 0 )*255 ) 	item2 = hex( range_pos( val, 300, 165.61 )*207 + 48 ) 	background = item1 .. item2 .. item1 	if val >= 200 then 		text_color = "FFFFFF" 	else 		text_color = "000000" 	end  	return format_line( background, text_color ) end  function w._temperature_color( val ) 	local item, background, text_color  	if val == nil then 		return format_line( "FFFFFF", "000000" ) 	end  	if val < 4.5 then 		item = range_pos( val, -42.75, 4.5 )*255 		background = hex( item ) 	else 		item = range_pos( val, 60, 41.5 )*255 		background = hex( item ) 	end  	if val <= 4.5 then 		item = range_pos( val, -42.75, 4.5 )*255 		background = background .. hex( item ) 	else 		item = range_pos( val, 41.5, 4.5 )*255 		background = background .. hex( item ) 	end  	if val < -42.78 then 		item = range_pos( val, -90, -42.78 )*255 		background = background .. hex( item ) 	else 		item = range_pos( val, 23, 4.5 )*255 		background = background .. hex( item ) 	end  	if val < -23.3 or val >= 37.8 then 		text_color = "FFFFFF" 	else 		text_color = "000000" 	end  	return format_line( background, text_color ) end  function w._precipitation_color( val ) 	local item, background, text_color  	if val == nil then 		return format_line( "FFFFFF", "000000" ) 	end  	item = hex( range_pos( val, 165.6, 0 )*255 ) 	background = item .. item  	item = hex( range_pos( val, 300, 165.61 )*207 + 48 ) 	background = background .. item  	if val > 90 then 		text_color = "FFFFFF" 	else 		text_color = "000000" 	end  	return format_line( background, text_color ) end  function w._humidity_color( val ) 	local item, background, text_color  	if val == nil then 		return format_line( "FFFFFF", "000000" ) 	end  	item = hex( range_pos( val, 66.67, 0 )*255 ) 	background = item .. item  	item = hex( range_pos( val, 133.33, 66.667 )*255 ) 	background = background .. item  	if val >= 40 then 		text_color = "FFFFFF" 	else 		text_color = "000000" 	end  	return format_line( background, text_color ) end  function w._sunshine_color( val ) 	local item, background, text_color  	if val == nil then 		return format_line( "FFFFFF", "000000" ) 	end  	if val < 90 then 		item = hex( range_pos( val, 0, 90 )*170 ) 	elseif val < 180 then 		item = hex( range_pos( val, 90, 180 )*42.5 + 170 ) 	else 		item = hex( range_pos( val, 180, 360 )*42.5 + 212.5 ) 	end 	background = item .. item  	if val < 90 then 		item = hex( range_pos( val, 0, 90 )*170 ) 	elseif val < 270 then 		item = hex( range_pos( val, 150, 90 )*170 ) 	else 		item = hex( range_pos( val, 270, 720 )*255 ) 	end 	background = background .. item  	if val < 80 then 		text_color = "FFFFFF" 	else 		text_color = "000000" 	end  	return format_line( background, text_color ) end  function w._pastel_color( val ) 	local background, text_color  	if val == nil then 		return format_line( "FFFFFF", "000000" ) 	end  	if val < -15 or val >= 39 then 		text_color = "FFFFFF" 	else 		text_color = "000000" 	end  	if val >= 51 then 		background = 'EE2200' 	else 		val = math_mod._round( (val + 25.5)/3, 0 ) 		if val == 1 then 			background = 'BB00CC' 		elseif val == 2 then 			background = 'CC00EE' 		elseif val == 3 then 			background = 'CC33EE' 		elseif val == 4 then 			background = 'CC55EE' 		elseif val == 5 then 			background = 'DD66EE' 		elseif val == 6 then 			background = 'DD77EE' 		elseif val == 7 then 			background = 'DD99EE' 		elseif val == 8 then 			background = 'DDAAEE' 		elseif val == 9 then 			background = 'DDBBEE' 		elseif val == 10 then 			background = 'EECCFF' 		elseif val == 11 then 			background = 'FFDDFF' 		elseif val == 12 then 			background = 'F1F1F1' 		elseif val == 13 then 			background = 'FFEEBB' 		elseif val == 14 then 			background = 'FFFFCC' 		elseif val == 15 then 			background = 'FFFFBB' 		elseif val == 16 then 			background = 'FFFFAA' 		elseif val == 17 then 			background = 'FFFF88' 		elseif val == 18 then 			background = 'FFCC33' 		elseif val == 19 then 			background = 'FFBB33' 		elseif val == 20 then 			background = 'FF9900' 		elseif val == 21 then 			background = 'FF8844' 		elseif val == 22 then 			background = 'FF6633' 		elseif val == 23 then 			background = 'FF5522' 		elseif val == 24 then 			background = 'FF4422' 		elseif val == 25 then 			background = 'EE4400' 		else 			background = 'AA00AA' 		end 	end  	return format_line( background, text_color ) end  function w._uv_color( val ) 	local background, text_color  	if val == nil then 		return format_line( "FFFFFF", "000000" ) 	end  	if val < 3 then 		background = "3EA72D" 	elseif val >= 3 and val < 6 then 		background = "FFF300" 	elseif val >= 6 and val < 8 then 		background = "F18B00" 	elseif val >= 8 and val < 11 then 		background = "E53210" 	else 		background = "B567A4" 	end  	if val < 3 then 		text_color = "FFFFFF" 	elseif val >= 3 and val < 8 then 		text_color = "000000" 	else 		text_color = "FFFFFF" 	end  	return format_line( background, text_color ) end  function w._none_color() 	return format_line( "FAFAFA", "000000" ) end  function w.interpret_color_code( code ) 	code = code:lower() 	if code == 't' then 		return w._temperature_color 	elseif code == 'pastel' then 		return w._pastel_color 	elseif code == 'green' then 		return w._green_color 	elseif code == 'h' then 		return w._humidity_color 	elseif code == 's' then 		return w._sunshine_color 	elseif code == 'p' then 		return w._precipitation_color 	elseif code == 'd' then 		return w._days_color 	elseif code == 'u' then 		return w._uv_color 	elseif code == 'none' then 		return w._none_color 	else 		error( 'Unknown color scheme option' ) 	end end  return w