Advertisement
swarley

Rainbow for XChat

Sep 14th, 2011
221
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 3.00 KB | None | 0 0
  1. # True Rainbow?
  2. # True Rainow
  3.  
  4. use strict;
  5. use warnings;
  6. use feature 'switch';
  7. use Xchat ':all';
  8.  
  9. Xchat::hook_command('rainbow', 'rainbow_test');
  10.  
  11. my %colors = (
  12.     Red    => '04',
  13.     Orange => '07',
  14.     Yellow => '08',
  15.     Green  => '03',
  16.     Blue   => '02',
  17.     Indigo => '06',
  18.     Violet => '06');
  19.  
  20. sub str2rainbow ($){
  21.     my $data = shift;
  22.     my @str = split(//, $data);
  23.     if (@str > 7) {
  24.         splitbow(@str);
  25.     }
  26.     else {
  27.         rainbow(@str);
  28.     }
  29. }
  30.  
  31. sub rainbow_test {
  32.     my $msg = $_[1][1];
  33.     Xchat::command('SAY '.str2rainbow($msg));
  34. }
  35.  
  36. sub rainbow {
  37.     my @str = @_;
  38.     my $return_str = '';
  39.     my $state = 0;
  40.     foreach my $letter (@str) {
  41.         if ($letter eq ' ') {
  42.             $return_str .= ' ';
  43.         }
  44.         else {    
  45.             given ($state) {
  46.                 when(0) {
  47.                     $return_str .= "\003$colors{Red}$letter";
  48.                 }
  49.                 when(1) {
  50.                     $return_str .= "\003$colors{Orange}$letter";
  51.                 }
  52.                 when(2) {
  53.                     $return_str .= "\003$colors{Yellow}$letter";
  54.                 }
  55.                 when(3) {
  56.                     $return_str .= "\003$colors{Green}$letter";
  57.                 }
  58.                 when(4) {
  59.                     $return_str .= "\003$colors{Blue}$letter";
  60.                 }
  61.                 when(5) {
  62.                     $return_str .= "\003$colors{Indigo}$letter";
  63.                 }
  64.                 when(6) {
  65.                     $return_str .= "\002\003$colors{Violet}$letter\002";
  66.                 }
  67.             }
  68.             ++$state;
  69.         }
  70.     }
  71.     return $return_str;
  72. }
  73.  
  74. sub splitbow {
  75.     my @str         = @_;
  76.     my $str_copy    = join('', @str);
  77.     $str_copy =~ s/\s+//g;
  78.     my $return_str  = '';
  79.     my @colors      = values %colors;
  80.     my $color_state = 0;
  81.     my $count_state = 0;
  82.     my $array_size  = length(join '', $str_copy);
  83.     my $per_color   = $array_size/7;
  84.     my $data        = '';
  85.     foreach my $letter (@str) {
  86.         if ($count_state > $per_color && $color_state != 06) {
  87.             ++$color_state;
  88.             $count_state = 0;
  89.         }
  90.         if ($letter =~ m/\s/) {
  91.             $data .= ' ';
  92.         }  
  93.         else {
  94.             given ($color_state) {
  95.                 when(0) {
  96.                     $data .= "\003$colors{Red}$letter";
  97.                 }
  98.                 when(1) {
  99.                     $data .= "\003$colors{Orange}$letter";
  100.                 }
  101.                 when(2) {
  102.                     $data .= "\003$colors{Yellow}$letter";
  103.                 }
  104.                 when(3) {
  105.                     $data .= "\003$colors{Green}$letter";
  106.                 }
  107.                 when(4) {
  108.                     $data .= "\003$colors{Blue}$letter";
  109.                 }
  110.                 when(5) {
  111.                     $data .= "\003$colors{Indigo}$letter";
  112.                 }
  113.                 when(6) {
  114.                     $data .= "\002\003$colors{Violet}$letter\002";
  115.                 }
  116.             }
  117.             ++$count_state;
  118.         }
  119.     }
  120.     return $data;
  121. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement