class HighLine::Style
Attributes
builtin[RW]
list[R]
name[R]
rgb[RW]
Public Class Methods
ansi_rgb_to_hex(ansi_number)
click to toggle source
# File lib/highline/style.rb, line 83 def self.ansi_rgb_to_hex(ansi_number) raise "Invalid ANSI rgb code #{ansi_number}" unless (16..231).include?(ansi_number) parts = (ansi_number-16).to_s(6).rjust(3,'0').scan(/./).map{|d| (d.to_i*255.0/6.0).ceil} rgb_hex(*parts) end
code_index()
click to toggle source
# File lib/highline/style.rb, line 93 def self.code_index @@code_index ||= {} end
index(style)
click to toggle source
# File lib/highline/style.rb, line 43 def self.index(style) if style.name @@styles ||= {} @@styles[style.name] = style end if !style.list @@code_index ||= {} @@code_index[style.code] ||= [] @@code_index[style.code].reject!{|indexed_style| indexed_style.name == style.name} @@code_index[style.code] << style end style end
list()
click to toggle source
# File lib/highline/style.rb, line 89 def self.list @@styles ||= {} end
new(defn = {})
click to toggle source
Single color/styles have :name, :code, :rgb (possibly), :builtin Compound styles have :name, :list, :builtin
# File lib/highline/style.rb, line 106 def initialize(defn = {}) @definition = defn @name = defn[:name] @code = defn[:code] @rgb = defn[:rgb] @list = defn[:list] @builtin = defn[:builtin] if @rgb hex = self.class.rgb_hex(@rgb) @name ||= 'rgb_' + hex elsif @list @name ||= @list end self.class.index self unless defn[:no_index] end
rgb(*colors)
click to toggle source
# File lib/highline/style.rb, line 67 def self.rgb(*colors) hex = rgb_hex(*colors) name = ('rgb_' + hex).to_sym if style = list[name] style else parts = rgb_parts(hex) new(:name=>name, :code=>"\e[38;5;#{rgb_number(parts)}m", :rgb=>parts) end end
rgb_hex(*colors)
click to toggle source
# File lib/highline/style.rb, line 57 def self.rgb_hex(*colors) colors.map do |color| color.is_a?(Numeric) ? '%02x'%color : color.to_s end.join end
rgb_number(*parts)
click to toggle source
# File lib/highline/style.rb, line 78 def self.rgb_number(*parts) parts = parts.flatten 16 + parts.inject(0) {|kode, part| kode*6 + (part/256.0*6.0).floor} end
rgb_parts(hex)
click to toggle source
# File lib/highline/style.rb, line 63 def self.rgb_parts(hex) hex.scan(/../).map{|part| part.to_i(16)} end
uncolor(string)
click to toggle source
# File lib/highline/style.rb, line 97 def self.uncolor(string) string.gsub(/\e\[\d+(;\d+)*m/, '') end
Public Instance Methods
blue()
click to toggle source
# File lib/highline/style.rb, line 150 def blue @rgb && @rgb[2] end
bright()
click to toggle source
# File lib/highline/style.rb, line 170 def bright create_bright_variant(:bright) end
code()
click to toggle source
# File lib/highline/style.rb, line 134 def code if @list @list.map{|element| HighLine.Style(element).code}.join else @code end end
color(string)
click to toggle source
# File lib/highline/style.rb, line 130 def color(string) code + string + HighLine::CLEAR end
dup()
click to toggle source
# File lib/highline/style.rb, line 122 def dup self.class.new(@definition) end
green()
click to toggle source
# File lib/highline/style.rb, line 146 def green @rgb && @rgb[1] end
light()
click to toggle source
# File lib/highline/style.rb, line 174 def light create_bright_variant(:light) end
on()
click to toggle source
# File lib/highline/style.rb, line 165 def on new_name = ('on_'+@name.to_s).to_sym self.class.list[new_name] ||= variant(new_name, :increment=>10) end
red()
click to toggle source
# File lib/highline/style.rb, line 142 def red @rgb && @rgb[0] end
to_hash()
click to toggle source
# File lib/highline/style.rb, line 126 def to_hash @definition end
variant(new_name, options={})
click to toggle source
# File lib/highline/style.rb, line 154 def variant(new_name, options={}) raise "Cannot create a variant of a style list (#{inspect})" if @list new_code = options[:code] || code if options[:increment] raise "Unexpected code in #{inspect}" unless new_code =~ /^(.*?)(\d+)(.*)/ new_code = $1 + ($2.to_i + options[:increment]).to_s + $3 end new_rgb = options[:rgb] || @rgb self.class.new(self.to_hash.merge(:name=>new_name, :code=>new_code, :rgb=>new_rgb)) end
Private Instance Methods
create_bright_variant(variant_name)
click to toggle source
# File lib/highline/style.rb, line 180 def create_bright_variant(variant_name) raise "Cannot create a #{name} variant of a style list (#{inspect})" if @list new_name = ("#{variant_name}_"+@name.to_s).to_sym new_rgb = @rgb == [0,0,0] ? [128, 128, 128] : @rgb.map {|color| color==0 ? 0 : [color+128,255].min } find_style(new_name) or variant(new_name, :increment=>60, :rgb=>new_rgb) end
find_style(name)
click to toggle source
# File lib/highline/style.rb, line 188 def find_style(name) self.class.list[name] end