# first create the color class
class Color
attr_accessor :char, :code, :bold
def initialize (char, code, bold)
@char = char
@code = code
@bold = bold
end
end
# add a global color list
$colors = [
Color.new(?d, "0m", false),
Color.new(?D, "0m", true),
Color.new(?r, "1m", false),
Color.new(?R, "1m", true),
Color.new(?g, "2m", false),
Color.new(?G, "2m", true),
Color.new(?y, "3m", false),
Color.new(?Y, "3m", true),
Color.new(?b, "4m", false),
Color.new(?B, "4m", true),
Color.new(?p, "5m", false),
Color.new(?P, "5m", true),
Color.new(?c, "6m", false),
Color.new(?C, "6m", true),
Color.new(?w, "7m", false),
Color.new(?W, "7m", true),
Color.new(?x, "7m", false)] # default
# then add this to your (to_buffer) or what have you
def to_buffer(buf)
i = 0
while i < buf.size
fb = 0
fb = 3 if buf[i] == ?{
fb = 4 if buf[i] == ?#
i += 1
unless fb == 0
valid = false
$colors.each { |c|
b = c.bold ? 1 : 0
if buf[i] == c.char
buf[i-1..i] = "\e = "\e[#{b};#{fb}#{c.code}"
valid = true
break
end
}
unless valid
log.debug("Bad color character: #{buf[i..i]}")
buf[i-1] = '' # set char to null if invalid
end
end
end
send_data(buf)
end
[/code]