class Tco::Palette
Attributes
type[R]
Public Class Methods
new(type)
click to toggle source
# File lib/tco/palette.rb, line 266 def initialize(type) set_type type @cache = {} @palette = [ # ANSI colours (the first 16) are configurable by users in most # terminals. Therefore, they're not used for colour matching, unless # they were explicitly configured in tco.conf. # # The colour values in comments are the defaults for xterm. Unknown.new(0), # [0, 0, 0] Unknown.new(1), # [205, 0, 0] Unknown.new(2), # [0, 205, 0] Unknown.new(3), # [205, 205, 0] Unknown.new(4), # [0, 0, 238] Unknown.new(5), # [205, 0, 205] Unknown.new(6), # [0, 205, 205] Unknown.new(7), # [229, 229, 229] Unknown.new(8), # [127, 127, 127] Unknown.new(9), # [255, 0, 0] Unknown.new(10), # [0, 255, 0] Unknown.new(11), # [255, 255, 0] Unknown.new(12), # [92, 92, 255] Unknown.new(13), # [255, 0, 255] Unknown.new(14), # [0, 255, 255] Unknown.new(15), # [255, 255, 255] # The colours bellow are the definitions from xterm extended # colour palette. They should be the same across terminals. Colour.new([0, 0, 0]), Colour.new([0, 0, 95]), Colour.new([0, 0, 135]), Colour.new([0, 0, 175]), Colour.new([0, 0, 215]), Colour.new([0, 0, 255]), Colour.new([0, 95, 0]), Colour.new([0, 95, 95]), Colour.new([0, 95, 135]), Colour.new([0, 95, 175]), Colour.new([0, 95, 215]), Colour.new([0, 95, 255]), Colour.new([0, 135, 0]), Colour.new([0, 135, 95]), Colour.new([0, 135, 135]), Colour.new([0, 135, 175]), Colour.new([0, 135, 215]), Colour.new([0, 135, 255]), Colour.new([0, 175, 0]), Colour.new([0, 175, 95]), Colour.new([0, 175, 135]), Colour.new([0, 175, 175]), Colour.new([0, 175, 215]), Colour.new([0, 175, 255]), Colour.new([0, 215, 0]), Colour.new([0, 215, 95]), Colour.new([0, 215, 135]), Colour.new([0, 215, 175]), Colour.new([0, 215, 215]), Colour.new([0, 215, 255]), Colour.new([0, 255, 0]), Colour.new([0, 255, 95]), Colour.new([0, 255, 135]), Colour.new([0, 255, 175]), Colour.new([0, 255, 215]), Colour.new([0, 255, 255]), Colour.new([95, 0, 0]), Colour.new([95, 0, 95]), Colour.new([95, 0, 135]), Colour.new([95, 0, 175]), Colour.new([95, 0, 215]), Colour.new([95, 0, 255]), Colour.new([95, 95, 0]), Colour.new([95, 95, 95]), Colour.new([95, 95, 135]), Colour.new([95, 95, 175]), Colour.new([95, 95, 215]), Colour.new([95, 95, 255]), Colour.new([95, 135, 0]), Colour.new([95, 135, 95]), Colour.new([95, 135, 135]), Colour.new([95, 135, 175]), Colour.new([95, 135, 215]), Colour.new([95, 135, 255]), Colour.new([95, 175, 0]), Colour.new([95, 175, 95]), Colour.new([95, 175, 135]), Colour.new([95, 175, 175]), Colour.new([95, 175, 215]), Colour.new([95, 175, 255]), Colour.new([95, 215, 0]), Colour.new([95, 215, 95]), Colour.new([95, 215, 135]), Colour.new([95, 215, 175]), Colour.new([95, 215, 215]), Colour.new([95, 215, 255]), Colour.new([95, 255, 0]), Colour.new([95, 255, 95]), Colour.new([95, 255, 135]), Colour.new([95, 255, 175]), Colour.new([95, 255, 215]), Colour.new([95, 255, 255]), Colour.new([135, 0, 0]), Colour.new([135, 0, 95]), Colour.new([135, 0, 135]), Colour.new([135, 0, 175]), Colour.new([135, 0, 215]), Colour.new([135, 0, 255]), Colour.new([135, 95, 0]), Colour.new([135, 95, 95]), Colour.new([135, 95, 135]), Colour.new([135, 95, 175]), Colour.new([135, 95, 215]), Colour.new([135, 95, 255]), Colour.new([135, 135, 0]), Colour.new([135, 135, 95]), Colour.new([135, 135, 135]), Colour.new([135, 135, 175]), Colour.new([135, 135, 215]), Colour.new([135, 135, 255]), Colour.new([135, 175, 0]), Colour.new([135, 175, 95]), Colour.new([135, 175, 135]), Colour.new([135, 175, 175]), Colour.new([135, 175, 215]), Colour.new([135, 175, 255]), Colour.new([135, 215, 0]), Colour.new([135, 215, 95]), Colour.new([135, 215, 135]), Colour.new([135, 215, 175]), Colour.new([135, 215, 215]), Colour.new([135, 215, 255]), Colour.new([135, 255, 0]), Colour.new([135, 255, 95]), Colour.new([135, 255, 135]), Colour.new([135, 255, 175]), Colour.new([135, 255, 215]), Colour.new([135, 255, 255]), Colour.new([175, 0, 0]), Colour.new([175, 0, 95]), Colour.new([175, 0, 135]), Colour.new([175, 0, 175]), Colour.new([175, 0, 215]), Colour.new([175, 0, 255]), Colour.new([175, 95, 0]), Colour.new([175, 95, 95]), Colour.new([175, 95, 135]), Colour.new([175, 95, 175]), Colour.new([175, 95, 215]), Colour.new([175, 95, 255]), Colour.new([175, 135, 0]), Colour.new([175, 135, 95]), Colour.new([175, 135, 135]), Colour.new([175, 135, 175]), Colour.new([175, 135, 215]), Colour.new([175, 135, 255]), Colour.new([175, 175, 0]), Colour.new([175, 175, 95]), Colour.new([175, 175, 135]), Colour.new([175, 175, 175]), Colour.new([175, 175, 215]), Colour.new([175, 175, 255]), Colour.new([175, 215, 0]), Colour.new([175, 215, 95]), Colour.new([175, 215, 135]), Colour.new([175, 215, 175]), Colour.new([175, 215, 215]), Colour.new([175, 215, 255]), Colour.new([175, 255, 0]), Colour.new([175, 255, 95]), Colour.new([175, 255, 135]), Colour.new([175, 255, 175]), Colour.new([175, 255, 215]), Colour.new([175, 255, 255]), Colour.new([215, 0, 0]), Colour.new([215, 0, 95]), Colour.new([215, 0, 135]), Colour.new([215, 0, 175]), Colour.new([215, 0, 215]), Colour.new([215, 0, 255]), Colour.new([215, 95, 0]), Colour.new([215, 95, 95]), Colour.new([215, 95, 135]), Colour.new([215, 95, 175]), Colour.new([215, 95, 215]), Colour.new([215, 95, 255]), Colour.new([215, 135, 0]), Colour.new([215, 135, 95]), Colour.new([215, 135, 135]), Colour.new([215, 135, 175]), Colour.new([215, 135, 215]), Colour.new([215, 135, 255]), Colour.new([215, 175, 0]), Colour.new([215, 175, 95]), Colour.new([215, 175, 135]), Colour.new([215, 175, 175]), Colour.new([215, 175, 215]), Colour.new([215, 175, 255]), Colour.new([215, 215, 0]), Colour.new([215, 215, 95]), Colour.new([215, 215, 135]), Colour.new([215, 215, 175]), Colour.new([215, 215, 215]), Colour.new([215, 215, 255]), Colour.new([215, 255, 0]), Colour.new([215, 255, 95]), Colour.new([215, 255, 135]), Colour.new([215, 255, 175]), Colour.new([215, 255, 215]), Colour.new([215, 255, 255]), Colour.new([255, 0, 0]), Colour.new([255, 0, 95]), Colour.new([255, 0, 135]), Colour.new([255, 0, 175]), Colour.new([255, 0, 215]), Colour.new([255, 0, 255]), Colour.new([255, 95, 0]), Colour.new([255, 95, 95]), Colour.new([255, 95, 135]), Colour.new([255, 95, 175]), Colour.new([255, 95, 215]), Colour.new([255, 95, 255]), Colour.new([255, 135, 0]), Colour.new([255, 135, 95]), Colour.new([255, 135, 135]), Colour.new([255, 135, 175]), Colour.new([255, 135, 215]), Colour.new([255, 135, 255]), Colour.new([255, 175, 0]), Colour.new([255, 175, 95]), Colour.new([255, 175, 135]), Colour.new([255, 175, 175]), Colour.new([255, 175, 215]), Colour.new([255, 175, 255]), Colour.new([255, 215, 0]), Colour.new([255, 215, 95]), Colour.new([255, 215, 135]), Colour.new([255, 215, 175]), Colour.new([255, 215, 215]), Colour.new([255, 215, 255]), Colour.new([255, 255, 0]), Colour.new([255, 255, 95]), Colour.new([255, 255, 135]), Colour.new([255, 255, 175]), Colour.new([255, 255, 215]), Colour.new([255, 255, 255]), Colour.new([8, 8, 8]), Colour.new([18, 18, 18]), Colour.new([28, 28, 28]), Colour.new([38, 38, 38]), Colour.new([48, 48, 48]), Colour.new([58, 58, 58]), Colour.new([68, 68, 68]), Colour.new([78, 78, 78]), Colour.new([88, 88, 88]), Colour.new([98, 98, 98]), Colour.new([108, 108, 108]), Colour.new([118, 118, 118]), Colour.new([128, 128, 128]), Colour.new([138, 138, 138]), Colour.new([148, 148, 148]), Colour.new([158, 158, 158]), Colour.new([168, 168, 168]), Colour.new([178, 178, 178]), Colour.new([188, 188, 188]), Colour.new([198, 198, 198]), Colour.new([208, 208, 208]), Colour.new([218, 218, 218]), Colour.new([228, 228, 228]), Colour.new([238, 238, 238]) ] end
Public Instance Methods
colours()
click to toggle source
# File lib/tco/palette.rb, line 578 def colours if @type == "extended" @palette else @palette[0,8] end end
get_colour_value(id)
click to toggle source
# File lib/tco/palette.rb, line 543 def get_colour_value(id) raise "Id '#{id}' out of range." unless id.between?(0, @palette.length-1) raise "Value of colour '#{id}' is unknown" if @palette[id].is_a? Unknown @palette[id].rgb if @palette[id] end
is_known?(id)
click to toggle source
# File lib/tco/palette.rb, line 549 def is_known?(id) raise "Id '#{id}' out of range." unless id.between?(0, @palette.length-1) !@palette[id].is_a? Unknown end
match_colour(colour)
click to toggle source
# File lib/tco/palette.rb, line 554 def match_colour(colour) unless colour.is_a? Colour msg = "Unsupported argument type '#{colour.class}', must be 'Colour'." raise ArgumentError.new msg end colours = case @type when "extended" then @palette when "ansi" then @palette[0,8] end if @cache.has_key? colour.to_s @cache[colour.to_s] else distances = colours.map { |c| c.is_a?(Colour) ? c - colour : Float::INFINITY } colour_index = distances.each_with_index.min[1] # TODO: No cache eviction is currently in place # We assume that applications won't use milions of different colours. @cache[colour.to_s] = colour_index colour_index end end
set_colour_value(id, rgb_colour)
click to toggle source
# File lib/tco/palette.rb, line 538 def set_colour_value(id, rgb_colour) raise "Id '#{id}' out of range." unless id.between?(0, @palette.length-1) @palette[id] = Colour.new(rgb_colour) end
type=(type)
click to toggle source
# File lib/tco/palette.rb, line 586 def type=(type) set_type type end
Private Instance Methods
set_type(type)
click to toggle source
# File lib/tco/palette.rb, line 591 def set_type(type) @type = case type when "auto"[0, type.length] if ENV.has_key? "TERM" and ENV["TERM"] == "xterm-256color" "extended" else "ansi" end when "ansi"[0, type.length] "ansi" when "extended"[0, type.length] "extended" else raise "Unknown palette type '#{type}'." end end