Class: HighLine::Style
Instance Attribute Summary collapse
-
#builtin ⇒ Object
Returns the value of attribute builtin.
-
#code ⇒ Object
readonly
Returns the value of attribute code.
-
#list ⇒ Object
readonly
Returns the value of attribute list.
-
#name ⇒ Object
readonly
Returns the value of attribute name.
-
#rgb ⇒ Object
Returns the value of attribute rgb.
Class Method Summary collapse
- .ansi_rgb_to_hex(ansi_number) ⇒ Object
- .code_index ⇒ Object
- .index(style) ⇒ Object
- .list ⇒ Object
- .rgb(*colors) ⇒ Object
- .rgb_hex(*colors) ⇒ Object
- .rgb_number(*parts) ⇒ Object
- .rgb_parts(hex) ⇒ Object
- .uncolor(string) ⇒ Object
Instance Method Summary collapse
- #blue ⇒ Object
- #bright ⇒ Object
- #color(string) ⇒ Object
- #dup ⇒ Object
- #green ⇒ Object
-
#initialize(defn = {}) ⇒ Style
constructor
Single color/styles have :name, :code, :rgb (possibly), :builtin Compound styles have :name, :list, :builtin.
- #on ⇒ Object
- #red ⇒ Object
- #to_hash ⇒ Object
- #variant(new_name, options = {}) ⇒ Object
Constructor Details
#initialize(defn = {}) ⇒ Style
Single color/styles have :name, :code, :rgb (possibly), :builtin Compound styles have :name, :list, :builtin
108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 |
# File 'lib/highline/style.rb', line 108 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) rgb = self.class.rgb_parts(hex) @name ||= 'rgb_' + hex elsif @list @name ||= @list end self.class.index self unless defn[:no_index] end |
Instance Attribute Details
#builtin ⇒ Object
Returns the value of attribute builtin.
104 105 106 |
# File 'lib/highline/style.rb', line 104 def builtin @builtin end |
#code ⇒ Object (readonly)
Returns the value of attribute code.
103 104 105 |
# File 'lib/highline/style.rb', line 103 def code @code end |
#list ⇒ Object (readonly)
Returns the value of attribute list.
103 104 105 |
# File 'lib/highline/style.rb', line 103 def list @list end |
#name ⇒ Object (readonly)
Returns the value of attribute name.
103 104 105 |
# File 'lib/highline/style.rb', line 103 def name @name end |
#rgb ⇒ Object
Returns the value of attribute rgb.
104 105 106 |
# File 'lib/highline/style.rb', line 104 def rgb @rgb end |
Class Method Details
.ansi_rgb_to_hex(ansi_number) ⇒ Object
85 86 87 88 89 |
# File 'lib/highline/style.rb', line 85 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 ⇒ Object
95 96 97 |
# File 'lib/highline/style.rb', line 95 def self.code_index @@code_index ||= {} end |
.index(style) ⇒ Object
45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/highline/style.rb', line 45 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 ⇒ Object
91 92 93 |
# File 'lib/highline/style.rb', line 91 def self.list @@styles ||= {} end |
.rgb(*colors) ⇒ Object
69 70 71 72 73 74 75 76 77 78 |
# File 'lib/highline/style.rb', line 69 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) ⇒ Object
59 60 61 62 63 |
# File 'lib/highline/style.rb', line 59 def self.rgb_hex(*colors) colors.map do |color| color.is_a?(Numeric) ? '%02x'%color : color.to_s end.join end |
.rgb_number(*parts) ⇒ Object
80 81 82 83 |
# File 'lib/highline/style.rb', line 80 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) ⇒ Object
65 66 67 |
# File 'lib/highline/style.rb', line 65 def self.rgb_parts(hex) hex.scan(/../).map{|part| part.to_i(16)} end |
.uncolor(string) ⇒ Object
99 100 101 |
# File 'lib/highline/style.rb', line 99 def self.uncolor(string) string.gsub(/\e\[\d+(;\d+)*m/, '') end |
Instance Method Details
#blue ⇒ Object
153 154 155 |
# File 'lib/highline/style.rb', line 153 def blue @rgb && @rgb[2] end |
#bright ⇒ Object
173 174 175 176 177 178 179 180 181 182 |
# File 'lib/highline/style.rb', line 173 def bright raise "Cannot create a bright variant of a style list (#{inspect})" if @list new_name = ('bright_'+@name.to_s).to_sym if style = self.class.list[new_name] style else new_rgb = @rgb == [0,0,0] ? [128, 128, 128] : @rgb.map {|color| color==0 ? 0 : [color+128,255].min } variant(new_name, :increment=>60, :rgb=>new_rgb) end end |
#color(string) ⇒ Object
133 134 135 |
# File 'lib/highline/style.rb', line 133 def color(string) code + string + HighLine::CLEAR end |
#dup ⇒ Object
125 126 127 |
# File 'lib/highline/style.rb', line 125 def dup self.class.new(@definition) end |
#green ⇒ Object
149 150 151 |
# File 'lib/highline/style.rb', line 149 def green @rgb && @rgb[1] end |
#on ⇒ Object
168 169 170 171 |
# File 'lib/highline/style.rb', line 168 def on new_name = ('on_'+@name.to_s).to_sym self.class.list[new_name] ||= variant(new_name, :increment=>10) end |
#red ⇒ Object
145 146 147 |
# File 'lib/highline/style.rb', line 145 def red @rgb && @rgb[0] end |
#to_hash ⇒ Object
129 130 131 |
# File 'lib/highline/style.rb', line 129 def to_hash @definition end |
#variant(new_name, options = {}) ⇒ Object
157 158 159 160 161 162 163 164 165 166 |
# File 'lib/highline/style.rb', line 157 def variant(new_name, ={}) raise "Cannot create a variant of a style list (#{inspect})" if @list new_code = [:code] || code if [:increment] raise "Unexpected code in #{inspect}" unless new_code =~ /^(.*?)(\d+)(.*)/ new_code = $1 + ($2.to_i + [:increment]).to_s + $3 end new_rgb = [:rgb] || @rgb new_style = self.class.new(self.to_hash.merge(:name=>new_name, :code=>new_code, :rgb=>new_rgb)) end |