#!/usr/bin/ruby # (c) Yoann Guillot 10/2009 # License: WtfPL v2 # IRC colorizer for ascii pictures # usage: /exec -out ruby irccol.rb [pic path] #col fg bg #0 white light gray + blink #1 black black #2 blue blue #3 green green #4 light red red + blink #5 red red #6 purple purple #7 orange orange #8 yellow orange + blink #9 light green green + blink #10 cyan cyan #11 light cyan cyan + blink #12 light blue blue + blink #13 light purple purple + blink #14 gray black + blink #15 light gray light gray # irc client color index -> color name $cols = %w[white black blue green lred red purple orange lorange lgreen cyan lcyan lblue lpurple gray lgray] # pic pixel -> color name # downcase -> bg color name $c2c = { 'g' => 'green', 'G' => 'lgreen', 'r' => 'red', 'R' => 'lred', 'b' => 'blue', 'B' => 'lblue', 'c' => 'cyan', 'C' => 'lcyan', 'p' => 'purple', 'P' => 'lpurple', 'o' => 'orange', 'O' => 'lorange', 'M' => 'gray', 'm' => 'black', 'W' => 'white', 'w' => 'lgray', ' ' => nil } def col(str) code = str[0, 1] code = { '.' => 'W', ':' => 'M' }[code] || code #return '' if not $c2c.has_key?(code) codeb = code.downcase bd = true if codeb != code out = '' out << "\x16" if bd out << "\003" out << '%d,%02d' % [$cols.index($c2c[code]), $cols.index($c2c[codeb])] if $c2c[code] #out << '%d' % $cols.index($c2c[code]) if $c2c[code] out << str.gsub(/(.)/, (bd ? ' ' : '\1\1')) out << "\x16" if bd out end pic = (ARGV.empty? ? DATA : ARGF).read # read stuff after __END__ if no pic specified pic.each_line { |l| puts l.chomp.gsub(/((.)\2*)/) { col($1) }.gsub("\x16\x16", '') } __END__ mmmmmm mmggggggmm m..gggg....m m...GGGGG....m m..G....GG...m mGGG......GGGGGm mGGG......GG..Gm m.GG......G....m m..GG....GG....m m..GGGGGGGGG..Gm m.GGmmmmmmmmGGGm mmm::m::m::mmm m:..m..m..:m m..........m m........m mmmmmmmm