Posts: 7192 Location: Borgo San Michele
Sun 16 Oct, 2011 13:46
Thanks for sharing
Mort, there are similar (not identical!) scripts in bbcode.php that you can use here.
/**
* Load rainbow colors
*/
function load_rainbow_colors()
{
return array(
1 => 'red',
2 => 'orange',
3 => 'yellow',
4 => 'green',
5 => 'blue',
6 => 'indigo',
7 => 'violet'
);
}
/**
* Apply rainbow effect
*/
function rainbow($text)
{
// Returns text highlighted in rainbow colours
$colors = $this->load_rainbow_colors();
$text = trim($text);
$length = strlen($text);
$result = '';
$color_counter = 0;
$TAG_OPEN = false;
for ($i = 0; $i < $length; $i++)
{
$char = substr($text, $i, 1);
if (!$TAG_OPEN)
{
if ($char == '<')
{
$TAG_OPEN = true;
$result .= $char;
}
elseif (preg_match("#\S#i", $char))
{
$color_counter++;
$result .= '<span style="color: ' . $colors[$color_counter] . ';">' . $char . '</span>';
$color_counter = ($color_counter == 7) ? 0 : $color_counter;
}
else
{
$result .= $char;
}
}
else
{
if ($char == '>')
{
$TAG_OPEN = false;
}
$result .= $char;
}
}
return $result;
}
function rand_color()
{
$color_code = mt_rand(0, 255);
if ($color_code < 16)
{
return ('0' . dechex($color_code));
}
else
{
return dechex($color_code);
}
}
function load_random_colors($iterations = 10)
{
$random_color = array();
for ($i = 0; $i < $iterations; $i++)
{
$random_color[$i + 1] = '#' . $this->rand_color() . $this->rand_color() . $this->rand_color();
}
return $random_color;
}
function load_gradient_colors($color1, $color2, $iterations = 10)
{
$col1_array = array();
$col2_array = array();
$col_dif_array = array();
$gradient_color = array();
$col1_array[0] = hexdec(substr($color1, 1, 2));
$col1_array[1] = hexdec(substr($color1, 3, 2));
$col1_array[2] = hexdec(substr($color1, 5, 2));
$col2_array[0] = hexdec(substr($color2, 1, 2));
$col2_array[1] = hexdec(substr($color2, 3, 2));
$col2_array[2] = hexdec(substr($color2, 5, 2));
$col_dif_array[0] = ($col2_array[0] - $col1_array[0]) / ($iterations - 1);
$col_dif_array[1] = ($col2_array[1] - $col1_array[1]) / ($iterations - 1);
$col_dif_array[2] = ($col2_array[2] - $col1_array[2]) / ($iterations - 1);
for ($i = 0; $i < $iterations; $i++)
{
$part1 = round($col1_array[0] + ($col_dif_array[0] * $i));
$part2 = round($col1_array[1] + ($col_dif_array[1] * $i));
$part3 = round($col1_array[2] + ($col_dif_array[2] * $i));
$part1 = ($part1 < 16) ? ('0' . dechex($part1)) : (dechex($part1));
$part2 = ($part2 < 16) ? ('0' . dechex($part2)) : (dechex($part2));
$part3 = ($part3 < 16) ? ('0' . dechex($part3)) : (dechex($part3));
$gradient_color[$i + 1] = '#' . $part1 . $part2 . $part3;
}
return $gradient_color;
}
function gradient($text, $color1, $color2, $mode = 'random', $iterations = 10)
{
// Returns text highlighted in random gradient colours
if ($mode == 'random')
{
$colors = $this->load_random_colors();
}
else
{
$colors = $this->load_gradient_colors($color1, $color2, $iterations);
}
$text = trim(stripslashes($text));
$length = strlen($text);
$result = '';
$color_counter = 0;
$TAG_OPEN = false;
for ($i = 0; $i < $length; $i++)
{
$char = substr($text, $i, 1);
if (!$TAG_OPEN)
{
if ($char == '<')
{
$TAG_OPEN = true;
$result .= $char;
}
elseif (preg_match("#\S#i", $char))
{
$color_counter++;
$result .= '<span style="color: ' . $colors[$color_counter] . ';">' . $char . '</span>';
$color_counter = ($color_counter == $iterations) ? 0 : $color_counter;
}
else
{
$result .= $char;
}
}
else
{
if ($char == '>')
{
$TAG_OPEN = false;
}
$result .= $char;
}
}
return $result;
}