class Term::ANSIColor::Attribute
Attributes
name[R]
rgb[R]
Public Class Methods
[](name)
click to toggle source
# File lib/term/ansicolor/attribute.rb, line 33 def self.[](name) case when self === name then name when Array === name then nearest_rgb_color name when name.respond_to?(:to_rgb_triple) then nearest_rgb_color(name.to_rgb_triple.to_a) when name.to_s =~ /\A(on_)?(\d+)\z/ then get "#$1color#$2" when name.to_s =~ /\A#([0-9a-f]{3}){1,2}\z/i then nearest_rgb_color name when name.to_s =~ /\Aon_#([0-9a-f]{3}){1,2}\z/i then nearest_rgb_on_color name else get name end end
attributes(&block)
click to toggle source
# File lib/term/ansicolor/attribute.rb, line 17 def self.attributes(&block) @__order__.map { |name| @__store__[name] } end
get(name)
click to toggle source
# File lib/term/ansicolor/attribute.rb, line 45 def self.get(name) @__store__[name.to_sym] end
named_attributes(&block)
click to toggle source
# File lib/term/ansicolor/attribute.rb, line 57 def self.named_attributes(&block) @named_attributes ||= attributes.reject(&:rgb_color?).each(&block) end
nearest_rgb_color(color, options = {})
click to toggle source
# File lib/term/ansicolor/attribute.rb, line 61 def self.nearest_rgb_color(color, options = {}) rgb = RGBTriple[color] colors = rgb_colors(options) colors.reject(&:background?).min_by { |c| c.distance_to(rgb, options) } end
nearest_rgb_on_color(color, options = {})
click to toggle source
# File lib/term/ansicolor/attribute.rb, line 67 def self.nearest_rgb_on_color(color, options = {}) rgb = RGBTriple[color] colors = rgb_colors(options) colors.select(&:background?).min_by { |c| c.distance_to(rgb, options) } end
new(name, code, options = {})
click to toggle source
# File lib/term/ansicolor/attribute.rb, line 73 def initialize(name, code, options = {}) @name = name.to_sym @code = code.to_s if html = options[:html] @rgb = RGBTriple.from_html(html) elsif !options.empty? @rgb = RGBTriple.from_hash(options) else @rgb = nil # prevent instance variable not initialized warnings end end
rgb_colors(options = {}, &block)
click to toggle source
# File lib/term/ansicolor/attribute.rb, line 49 def self.rgb_colors(options = {}, &block) colors = @rgb_colors ||= attributes.select(&:rgb_color?) if options.key?(:gray) && !options[:gray] colors = colors.reject(&:gray?) end colors.each(&block) end
set(name, code, options = {})
click to toggle source
# File lib/term/ansicolor/attribute.rb, line 9 def self.set(name, code, options = {}) name = name.to_sym result = @__store__[name] = new(name, code, options) @__order__ << name @rgb_colors = nil result end
Public Instance Methods
apply(string = nil, &block)
click to toggle source
# File lib/term/ansicolor/attribute.rb, line 95 def apply(string = nil, &block) ::Term::ANSIColor.color(self, string, &block) end
background?()
click to toggle source
# File lib/term/ansicolor/attribute.rb, line 99 def background? @name.to_s.start_with?('on_') end
code()
click to toggle source
# File lib/term/ansicolor/attribute.rb, line 87 def code if rgb_color? background? ? "48;5;#{@code}" : "38;5;#{@code}" else @code end end
distance_to(other, options = {})
click to toggle source
# File lib/term/ansicolor/attribute.rb, line 117 def distance_to(other, options = {}) if our_rgb = to_rgb_triple and other.respond_to?(:to_rgb_triple) and other_rgb = other.to_rgb_triple then our_rgb.distance_to(other_rgb, options) else 1 / 0.0 end end
gradient_to(other, options = {})
click to toggle source
# File lib/term/ansicolor/attribute.rb, line 128 def gradient_to(other, options = {}) if our_rgb = to_rgb_triple and other.respond_to?(:to_rgb_triple) and other_rgb = other.to_rgb_triple then our_rgb.gradient_to(other_rgb, options).map do |rgb_triple| self.class.nearest_rgb_color(rgb_triple, options) end else [] end end
gray?()
click to toggle source
# File lib/term/ansicolor/attribute.rb, line 109 def gray? rgb_color? && to_rgb_triple.gray? end
rgb_color?()
click to toggle source
# File lib/term/ansicolor/attribute.rb, line 105 def rgb_color? !!@rgb end
to_rgb_triple()
click to toggle source
# File lib/term/ansicolor/attribute.rb, line 113 def to_rgb_triple @rgb end