term-ansicolor 1.1.1 → 1.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ec07d4e73ee2229632950fb11a792a7ac58d46fe
4
- data.tar.gz: b131e1eb5f84b05ec06341874f13b95ff3c14d9a
3
+ metadata.gz: 6c9a92f957cb6c294806caa9b03a2c04445d76a9
4
+ data.tar.gz: 5eac0662983ec23f174bd5d0af4687120fd49cb9
5
5
  SHA512:
6
- metadata.gz: 615c2efc5fa34346c987a16dec877656dae1a19f6893dc60c4a63f8a62393d785dbb932c898d3eb203ed223c9525fcc64a191ece401ea77d96eba44413b7cd8f
7
- data.tar.gz: c96ce5a595656b357047bad7dfbdcddc19f37debfb51857a23ef8debd9327ec3e127a4905b7f1c96fd5f5d4f65db61a65c58e4d59a8cc69e55f1557b0d218b50
6
+ metadata.gz: e633cda3e9d3b749c7c3a5282012e0f9f0bda78c1674c8de081461b4df16719e7916191c4d7bb57eefa0817c13c7bafc6557a303fdcab8c635c7c786f8598663
7
+ data.tar.gz: ec810aa236b5ff82b942de368b30f262b82189423afb3abcbc1ade2f6f3673794b29564799008fbf4b2d753f6fe02c20534dff3b530155240f9e52f7b9e55263
data/CHANGES CHANGED
@@ -1,3 +1,11 @@
1
+ 2013-03-25 - 1.1.2 * Change the API: color0 - color255 to color(:color0) -
2
+ color(:color255), and on_color0 to on_color(:color0) -
3
+ on_color(:color255); the previous way caused some
4
+ failures, sorry. On the plus side you can now do
5
+ color('#4a6ab4') and get the nearest terminal color to
6
+ this html color.
7
+ * Add colortab executable to display the 255 colors and
8
+ related HTML colors.
1
9
  2013-03-08 - 1.1.1 * Avoid possible conflicts with other people's attributes
2
10
  methods.
3
11
  * Cache attributes globally, also fix caching for frozen
data/Rakefile CHANGED
@@ -10,12 +10,15 @@ GemHadar do
10
10
  email 'flori@ping.de'
11
11
  homepage "http://flori.github.com/#{name}"
12
12
  summary 'Ruby library that colors strings using ANSI escape sequences'
13
- description ''
13
+ description 'This library uses ANSI escape sequences to control the attributes of terminal output'
14
+ licenses << 'GPL-2'
14
15
  test_dir 'tests'
15
16
  ignore '.*.sw[pon]', 'pkg', 'Gemfile.lock', '.rvmrc', 'coverage'
16
17
  readme 'README.rdoc'
17
18
  executables << 'cdiff' << 'decolor'
18
19
 
20
+ development_dependency 'simplecov'
21
+
19
22
  install_library do
20
23
  destdir = "#{ENV['DESTDIR']}"
21
24
  libdir = CONFIG["sitelibdir"]
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.1.1
1
+ 1.1.2
@@ -0,0 +1,50 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'term/ansicolor'
4
+
5
+ class String
6
+ include Term::ANSIColor
7
+ end
8
+
9
+ $colors = Term::ANSIColor::Attribute.rgb_colors.to_a
10
+
11
+ def print_color(c)
12
+ color = $colors[c]
13
+ text = [
14
+ Term::ANSIColor::Attribute.nearest_rgb_color('#000'),
15
+ Term::ANSIColor::Attribute.nearest_rgb_color('#fff'),
16
+ ].max_by { |t| t.distance_to(color) }
17
+ print ("%3u #{color.rgb.html} " % c).on_color(color.name).color(text.name)
18
+ end
19
+
20
+ for c in 0..3
21
+ print_color c
22
+ end
23
+ puts
24
+
25
+ for c in 4..7
26
+ print_color c
27
+ end
28
+ puts
29
+
30
+ for c in 8..11
31
+ print_color c
32
+ end
33
+ puts
34
+
35
+ for c in 12..15
36
+ print_color c
37
+ end
38
+ puts
39
+
40
+ for c in 16..231
41
+ (c - 16) % 6 == 0 and puts
42
+ print_color c
43
+ end
44
+ puts
45
+
46
+ for c in 232..255
47
+ (c - 16) % 6 == 0 and puts
48
+ print_color c
49
+ end
50
+ puts
@@ -4,56 +4,122 @@ module Term
4
4
  # classes.
5
5
  module ANSIColor
6
6
  require 'term/ansicolor/version'
7
+ require 'term/ansicolor/attribute'
8
+ require 'term/ansicolor/rgb_triple'
9
+
10
+ Attribute.set :clear , 0 # String#clear is already used to empty string in Ruby 1.9
11
+ Attribute.set :reset , 0 # synonym for :clear
12
+ Attribute.set :bold , 1
13
+ Attribute.set :dark , 2
14
+ Attribute.set :italic , 3 # not widely implemented
15
+ Attribute.set :underline , 4
16
+ Attribute.set :underscore , 4 # synonym for :underline
17
+ Attribute.set :blink , 5
18
+ Attribute.set :rapid_blink , 6 # not widely implemented
19
+ Attribute.set :negative , 7 # no reverse because of String#reverse
20
+ Attribute.set :concealed , 8
21
+ Attribute.set :strikethrough , 9 # not widely implemented
22
+
23
+ Attribute.set :black , 30
24
+ Attribute.set :red , 31
25
+ Attribute.set :green , 32
26
+ Attribute.set :yellow , 33
27
+ Attribute.set :blue , 34
28
+ Attribute.set :magenta , 35
29
+ Attribute.set :cyan , 36
30
+ Attribute.set :white , 37
31
+
32
+ Attribute.set :on_black , 40
33
+ Attribute.set :on_red , 41
34
+ Attribute.set :on_green , 42
35
+ Attribute.set :on_yellow , 43
36
+ Attribute.set :on_blue , 44
37
+ Attribute.set :on_magenta , 45
38
+ Attribute.set :on_cyan , 46
39
+ Attribute.set :on_white , 47
40
+
41
+ Attribute.set :intense_black , 90 # High intensity, aixterm (works in OS X)
42
+ Attribute.set :intense_red , 91
43
+ Attribute.set :intense_green , 92
44
+ Attribute.set :intense_yellow , 93
45
+ Attribute.set :intense_blue , 94
46
+ Attribute.set :intense_magenta , 95
47
+ Attribute.set :intense_cyan , 96
48
+ Attribute.set :intense_white , 97
49
+
50
+ Attribute.set :on_intense_black , 100 # High intensity background, aixterm (works in OS X)
51
+ Attribute.set :on_intense_red , 101
52
+ Attribute.set :on_intense_green , 102
53
+ Attribute.set :on_intense_yellow , 103
54
+ Attribute.set :on_intense_blue , 104
55
+ Attribute.set :on_intense_magenta, 105
56
+ Attribute.set :on_intense_cyan , 106
57
+ Attribute.set :on_intense_white , 107
58
+
59
+ Attribute.set :color0, 0, :html => '#000000'
60
+ Attribute.set :color1, 1, :html => '#800000'
61
+ Attribute.set :color2, 2, :html => '#808000'
62
+ Attribute.set :color3, 3, :html => '#808000'
63
+ Attribute.set :color4, 4, :html => '#000080'
64
+ Attribute.set :color5, 5, :html => '#800080'
65
+ Attribute.set :color6, 6, :html => '#008080'
66
+ Attribute.set :color7, 7, :html => '#c0c0c0'
67
+
68
+ Attribute.set :color8, 8, :html => '#808080'
69
+ Attribute.set :color9, 9, :html => '#ff0000'
70
+ Attribute.set :color10, 10, :html => '#00ff00'
71
+ Attribute.set :color11, 11, :html => '#ffff00'
72
+ Attribute.set :color12, 12, :html => '#0000ff'
73
+ Attribute.set :color13, 13, :html => '#ff00ff'
74
+ Attribute.set :color14, 14, :html => '#00ffff'
75
+ Attribute.set :color15, 15, :html => '#ffffff'
76
+
77
+ steps = [ 0x00, 0x5f, 0x87, 0xaf, 0xd7, 0xff ]
78
+
79
+ for i in 16..231
80
+ red, green, blue = (i - 16).to_s(6).rjust(3, '0').each_char.map { |c| steps[c.to_i] }
81
+ Attribute.set "color#{i}", i, :red => red, :green => green, :blue => blue
82
+ end
83
+
84
+ grey = 8
85
+ for i in 232..255
86
+ Attribute.set "color#{i}", i, :red => grey, :green => grey, :blue => grey
87
+ grey += 10
88
+ end
89
+
90
+ Attribute.set :on_color0, 0, :html => '#000000'
91
+ Attribute.set :on_color1, 1, :html => '#800000'
92
+ Attribute.set :on_color2, 2, :html => '#808000'
93
+ Attribute.set :on_color3, 3, :html => '#808000'
94
+ Attribute.set :on_color4, 4, :html => '#000080'
95
+ Attribute.set :on_color5, 5, :html => '#800080'
96
+ Attribute.set :on_color6, 6, :html => '#008080'
97
+ Attribute.set :on_color7, 7, :html => '#c0c0c0'
98
+
99
+ Attribute.set :on_color8, 8, :html => '#808080'
100
+ Attribute.set :on_color9, 9, :html => '#ff0000'
101
+ Attribute.set :on_color10, 10, :html => '#00ff00'
102
+ Attribute.set :on_color11, 11, :html => '#ffff00'
103
+ Attribute.set :on_color12, 12, :html => '#0000ff'
104
+ Attribute.set :on_color13, 13, :html => '#ff00ff'
105
+ Attribute.set :on_color14, 14, :html => '#00ffff'
106
+ Attribute.set :on_color15, 15, :html => '#ffffff'
107
+
108
+ steps = [ 0x00, 0x5f, 0x87, 0xaf, 0xd7, 0xff ]
109
+
110
+ for i in 16..231
111
+ red, green, blue = (i - 16).to_s(6).rjust(3, '0').each_char.map { |c| steps[c.to_i] }
112
+ Attribute.set "on_color#{i}", i, :red => red, :green => green, :blue => blue
113
+ end
114
+
115
+ grey = 8
116
+ for i in 232..255
117
+ Attribute.set "on_color#{i}", i, :red => grey, :green => grey, :blue => grey
118
+ grey += 10
119
+ end
7
120
 
8
121
  # :stopdoc:
9
- ATTRIBUTES = [
10
- [ :clear , 0 ], # String#clear is already used to empty string in Ruby 1.9
11
- [ :reset , 0 ], # synonym for :clear
12
- [ :bold , 1 ],
13
- [ :dark , 2 ],
14
- [ :italic , 3 ], # not widely implemented
15
- [ :underline , 4 ],
16
- [ :underscore , 4 ], # synonym for :underline
17
- [ :blink , 5 ],
18
- [ :rapid_blink , 6 ], # not widely implemented
19
- [ :negative , 7 ], # no reverse because of String#reverse
20
- [ :concealed , 8 ],
21
- [ :strikethrough , 9 ], # not widely implemented
22
- [ :black , 30 ],
23
- [ :red , 31 ],
24
- [ :green , 32 ],
25
- [ :yellow , 33 ],
26
- [ :blue , 34 ],
27
- [ :magenta , 35 ],
28
- [ :cyan , 36 ],
29
- [ :white , 37 ],
30
- [ :on_black , 40 ],
31
- [ :on_red , 41 ],
32
- [ :on_green , 42 ],
33
- [ :on_yellow , 43 ],
34
- [ :on_blue , 44 ],
35
- [ :on_magenta , 45 ],
36
- [ :on_cyan , 46 ],
37
- [ :on_white , 47 ],
38
- [ :intense_black , 90 ], # High intensity, aixterm (works in OS X)
39
- [ :intense_red , 91 ],
40
- [ :intense_green , 92 ],
41
- [ :intense_yellow , 93 ],
42
- [ :intense_blue , 94 ],
43
- [ :intense_magenta , 95 ],
44
- [ :intense_cyan , 96 ],
45
- [ :intense_white , 97 ],
46
- [ :on_intense_black , 100 ], # High intensity background, aixterm (works in OS X)
47
- [ :on_intense_red , 101 ],
48
- [ :on_intense_green , 102 ],
49
- [ :on_intense_yellow , 103 ],
50
- [ :on_intense_blue , 104 ],
51
- [ :on_intense_magenta , 105 ],
52
- [ :on_intense_cyan , 106 ],
53
- [ :on_intense_white , 107 ]
54
- ]
55
-
56
- ATTRIBUTE_NAMES = ATTRIBUTES.transpose.first
122
+ ATTRIBUTE_NAMES = Attribute.named_attributes.map(&:name)
57
123
  # :startdoc:
58
124
 
59
125
  # Returns true if Term::ANSIColor supports the +feature+.
@@ -84,41 +150,15 @@ module Term
84
150
 
85
151
  def self.create_color_method(color_name, color_value)
86
152
  module_eval <<-EOT
87
- def #{color_name}(string = nil)
88
- result = ''
89
- result << "\e[#{color_value}m" if Term::ANSIColor.coloring?
90
- if block_given?
91
- result << yield
92
- elsif string.respond_to?(:to_str)
93
- result << string.to_str
94
- elsif respond_to?(:to_str)
95
- result << to_str
96
- else
97
- return result #only switch on
98
- end
99
- result << "\e[0m" if Term::ANSIColor.coloring?
100
- result
153
+ def #{color_name}(string = nil, &block)
154
+ color(:#{color_name}, string, &block)
101
155
  end
102
156
  EOT
103
157
  self
104
158
  end
105
159
 
106
- def method_missing(name, *args, &block)
107
- color_name, color_value = Term::ANSIColor::ATTRIBUTES.assoc(name)
108
- if color_name
109
- ::Term::ANSIColor.create_color_method(name, color_value)
110
- return __send__(color_name, *args, &block)
111
- end
112
- color_name = name.to_s
113
- if color_name =~ /\A(?:(on_)?color)(\d+)\z/
114
- code = $1 ? 48 : 38
115
- index = $2.to_i
116
- if (0..255).include?(index)
117
- ::Term::ANSIColor.create_color_method($&, "#{code};5;#{index}")
118
- return __send__(color_name, *args, &block)
119
- end
120
- end
121
- super
160
+ for attribute in Attribute.named_attributes
161
+ create_color_method(attribute.name, attribute.code)
122
162
  end
123
163
 
124
164
  module RespondTo
@@ -129,12 +169,12 @@ module Term
129
169
  include RespondTo
130
170
  extend RespondTo
131
171
 
132
- # Regular expression that is used to scan for ANSI-sequences while
172
+ # Regular expression that is used to scan for ANSI-Attributes while
133
173
  # uncoloring strings.
134
174
  COLORED_REGEXP = /\e\[(?:(?:[349]|10)[0-7]|[0-9]|[34]8;5;\d{1,3})?m/
135
175
 
136
176
  # Returns an uncolored version of the string, that is all
137
- # ANSI-sequences are stripped from the string.
177
+ # ANSI-Attributes are stripped from the string.
138
178
  def uncolor(string = nil) # :yields:
139
179
  if block_given?
140
180
  yield.to_str.gsub(COLORED_REGEXP, '')
@@ -149,17 +189,41 @@ module Term
149
189
 
150
190
  alias uncolored uncolor
151
191
 
192
+ # Return +string+ or the result string of the given +block+ colored with
193
+ # color +name+. If string isn't a string only the escape sequence to switch
194
+ # on the color +name+ is returned.
195
+ def color(name, string = nil, &block)
196
+ attribute = Attribute.get(name) || Attribute.nearest_rgb(name) or
197
+ raise ArgumentError, "unknown attribute #{name.inspect}"
198
+ result = ''
199
+ result << "\e[#{attribute.code}m" if Term::ANSIColor.coloring?
200
+ if block_given?
201
+ result << yield
202
+ elsif string.respond_to?(:to_str)
203
+ result << string.to_str
204
+ elsif respond_to?(:to_str)
205
+ result << to_str
206
+ else
207
+ return result #only switch on
208
+ end
209
+ result << "\e[0m" if Term::ANSIColor.coloring?
210
+ result
211
+ end
212
+
213
+ def on_color(name, string = nil, &block)
214
+ color("on_#{name}", string, &block)
215
+ end
216
+
152
217
  class << self
153
218
  # Returns an array of all Term::ANSIColor attributes as symbols.
154
219
  def term_ansicolor_attributes
155
- @term_ansicolor_attributes ||= Term::ANSIColor::ATTRIBUTE_NAMES +
156
- (0..255).map { |index| "color#{index}".to_sym } +
157
- (0..255).map { |index| "on_color#{index}".to_sym }
220
+ @term_ansicolor_attributes ||= Term::ANSIColor::ATTRIBUTE_NAMES
158
221
  end
159
222
 
160
223
  alias attributes term_ansicolor_attributes
161
224
  end
162
225
 
226
+ # Returns an array of all Term::ANSIColor attributes as symbols.
163
227
  def term_ansicolor_attributes
164
228
  ::Term::ANSIColor.term_ansicolor_attributes
165
229
  end
@@ -0,0 +1,83 @@
1
+ module Term
2
+ module ANSIColor
3
+ class Attribute
4
+ @__store__ = {}
5
+
6
+ def self.set(name, code, options = {})
7
+ name = name.to_sym
8
+ result = @__store__[name] = new(name, code, options)
9
+ @rgb_colors = nil
10
+ result
11
+ end
12
+
13
+ def self.get(name)
14
+ @__store__[name.to_sym]
15
+ end
16
+
17
+ def self.attributes(&block)
18
+ @__store__.each_value(&block)
19
+ end
20
+
21
+ def self.rgb_colors(&block)
22
+ @rgb_colors ||= attributes.select(&:rgb_color?).each(&block)
23
+ end
24
+
25
+ def self.named_attributes(&block)
26
+ @named_attributes ||= attributes.reject(&:rgb_color?).each(&block)
27
+ end
28
+
29
+ def self.nearest_rgb_color(color)
30
+ rgb = RGBTriple[color]
31
+ rgb_colors.reject(&:background?).min_by { |c| c.distance_to(rgb) }
32
+ end
33
+
34
+ def self.nearest_rgb_on_color(color)
35
+ rgb = RGBTriple[color]
36
+ rgb_colors.select(&:background?).min_by { |c| c.distance_to(rgb) }
37
+ end
38
+
39
+ def initialize(name, code, options = {})
40
+ @name = name.to_sym
41
+ @code = code.to_s
42
+ if html = options[:html]
43
+ @rgb = RGBTriple.from_html(html)
44
+ elsif !options.empty?
45
+ @rgb = RGBTriple.from_hash(options)
46
+ end
47
+ end
48
+
49
+ attr_reader :name
50
+
51
+ def code
52
+ if rgb_color?
53
+ background? ? "48;5;#{@code}" : "38;5;#{@code}"
54
+ else
55
+ @code
56
+ end
57
+ end
58
+
59
+ def background?
60
+ @name.to_s.start_with?('on_')
61
+ end
62
+
63
+ attr_reader :rgb
64
+
65
+ def rgb_color?
66
+ !!@rgb
67
+ end
68
+
69
+ def to_rgb_triple
70
+ @rgb
71
+ end
72
+
73
+ def distance_to(other)
74
+ if our_rgb = to_rgb_triple and
75
+ other.respond_to?(:to_rgb_triple) and
76
+ other_rgb = other.to_rgb_triple
77
+ then
78
+ our_rgb.distance_to other_rgb
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,91 @@
1
+ module Term
2
+ module ANSIColor
3
+ class RGBTriple
4
+ def self.convert_value(color)
5
+ color.nil? and raise ArgumentError, "missing color value"
6
+ color = Integer(color)
7
+ (0..0xff) === color or raise ArgumentError,
8
+ "color value #{color.inspect} not between 0 and 255"
9
+ color
10
+ end
11
+
12
+ private_class_method :convert_value
13
+
14
+ def self.from_html(html)
15
+ case html
16
+ when /\A#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})\z/i
17
+ new(*$~.captures.map { |c| convert_value(c.to_i(16)) })
18
+ when /\A#([0-9a-f])([0-9a-f])([0-9a-f])\z/i
19
+ new(*$~.captures.map { |c| convert_value(c.to_i(16) << 4) })
20
+ end
21
+ end
22
+
23
+ def self.from_hash(options)
24
+ new(
25
+ convert_value(options[:red]),
26
+ convert_value(options[:green]),
27
+ convert_value(options[:blue])
28
+ )
29
+ end
30
+
31
+ def self.from_array(array)
32
+ new(*array)
33
+ end
34
+
35
+ def self.[](thing)
36
+ case
37
+ when thing.respond_to?(:to_rgb_triple) then thing
38
+ when thing.respond_to?(:to_ary) then RGBTriple.from_array(thing.to_ary)
39
+ when thing.respond_to?(:to_str) then RGBTriple.from_html(thing.to_str)
40
+ when thing.respond_to?(:to_hash) then RGBTriple.from_hash(thing.to_hash)
41
+ else raise ArgumentError, "cannot convert #{thing.inspect} into #{self}"
42
+ end
43
+ end
44
+
45
+ def initialize(red, green, blue)
46
+ @values = [ red, green, blue ]
47
+ end
48
+
49
+ def red
50
+ @values[0]
51
+ end
52
+
53
+ def green
54
+ @values[1]
55
+ end
56
+
57
+ def blue
58
+ @values[2]
59
+ end
60
+
61
+ def html
62
+ s = '#'
63
+ @values.each { |c| s << '%02x' % c }
64
+ s
65
+ end
66
+
67
+ def to_rgb_triple
68
+ self
69
+ end
70
+
71
+ attr_reader :values
72
+ protected :values
73
+
74
+ def to_a
75
+ @values.dup
76
+ end
77
+
78
+ def ==(other)
79
+ @values == other.values
80
+ end
81
+
82
+ def distance_to(other)
83
+ Math.sqrt(
84
+ ((red - other.red) * 0.299) ** 2 +
85
+ ((green - other.green) * 0.587) ** 2 +
86
+ ((blue - other.blue) * 0.114) ** 2
87
+ )
88
+ end
89
+ end
90
+ end
91
+ end
@@ -1,7 +1,7 @@
1
1
  module Term::ANSIColor
2
2
  # Term::ANSIColor version
3
- VERSION = '1.1.1'
4
- VERSION_ARRAY = VERSION.split(/\./).map { |x| x.to_i } # :nodoc:
3
+ VERSION = '1.1.2'
4
+ VERSION_ARRAY = VERSION.split('.').map(&:to_i) # :nodoc:
5
5
  VERSION_MAJOR = VERSION_ARRAY[0] # :nodoc:
6
6
  VERSION_MINOR = VERSION_ARRAY[1] # :nodoc:
7
7
  VERSION_BUILD = VERSION_ARRAY[2] # :nodoc:
@@ -2,32 +2,36 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "term-ansicolor"
5
- s.version = "1.1.1"
5
+ s.version = "1.1.2"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Florian Frank"]
9
- s.date = "2013-03-08"
10
- s.description = ""
9
+ s.date = "2013-03-26"
10
+ s.description = "This library uses ANSI escape sequences to control the attributes of terminal output"
11
11
  s.email = "flori@ping.de"
12
12
  s.executables = ["cdiff", "decolor"]
13
- s.extra_rdoc_files = ["README.rdoc", "lib/term/ansicolor.rb", "lib/term/ansicolor/version.rb"]
14
- s.files = [".gitignore", ".travis.yml", "CHANGES", "COPYING", "Gemfile", "README.rdoc", "Rakefile", "VERSION", "bin/cdiff", "bin/decolor", "examples/example.rb", "lib/term/ansicolor.rb", "lib/term/ansicolor/.keep", "lib/term/ansicolor/version.rb", "term-ansicolor.gemspec", "tests/ansicolor_test.rb"]
13
+ s.extra_rdoc_files = ["README.rdoc", "lib/term/ansicolor.rb", "lib/term/ansicolor/attribute.rb", "lib/term/ansicolor/rgb_triple.rb", "lib/term/ansicolor/version.rb"]
14
+ s.files = [".gitignore", ".travis.yml", "CHANGES", "COPYING", "Gemfile", "README.rdoc", "Rakefile", "VERSION", "bin/cdiff", "bin/colortab", "bin/decolor", "examples/example.rb", "lib/term/ansicolor.rb", "lib/term/ansicolor/.keep", "lib/term/ansicolor/attribute.rb", "lib/term/ansicolor/rgb_triple.rb", "lib/term/ansicolor/version.rb", "term-ansicolor.gemspec", "tests/ansicolor_test.rb", "tests/rgb_triple_test.rb", "tests/test_helper.rb"]
15
15
  s.homepage = "http://flori.github.com/term-ansicolor"
16
+ s.licenses = ["GPL-2"]
16
17
  s.rdoc_options = ["--title", "Term-ansicolor - Ruby library that colors strings using ANSI escape sequences", "--main", "README.rdoc"]
17
18
  s.require_paths = ["lib"]
18
- s.rubygems_version = "2.0.0"
19
+ s.rubygems_version = "2.0.3"
19
20
  s.summary = "Ruby library that colors strings using ANSI escape sequences"
20
- s.test_files = ["tests/ansicolor_test.rb"]
21
+ s.test_files = ["tests/ansicolor_test.rb", "tests/rgb_triple_test.rb", "tests/test_helper.rb"]
21
22
 
22
23
  if s.respond_to? :specification_version then
23
24
  s.specification_version = 4
24
25
 
25
26
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
26
- s.add_development_dependency(%q<gem_hadar>, ["~> 0.1.8"])
27
+ s.add_development_dependency(%q<gem_hadar>, ["~> 0.3.0"])
28
+ s.add_development_dependency(%q<simplecov>, [">= 0"])
27
29
  else
28
- s.add_dependency(%q<gem_hadar>, ["~> 0.1.8"])
30
+ s.add_dependency(%q<gem_hadar>, ["~> 0.3.0"])
31
+ s.add_dependency(%q<simplecov>, [">= 0"])
29
32
  end
30
33
  else
31
- s.add_dependency(%q<gem_hadar>, ["~> 0.1.8"])
34
+ s.add_dependency(%q<gem_hadar>, ["~> 0.3.0"])
35
+ s.add_dependency(%q<simplecov>, [">= 0"])
32
36
  end
33
37
  end
@@ -1,7 +1,4 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'test/unit'
4
- require 'term/ansicolor'
1
+ require File.expand_path('test_helper', File.dirname(__FILE__))
5
2
 
6
3
  class String
7
4
  include Term::ANSIColor
@@ -51,6 +48,25 @@ class ANSIColorTest < Test::Unit::TestCase
51
48
  assert_equal string_red_on_green, on_green { red { string } }
52
49
  end
53
50
 
51
+ def test_color
52
+ assert_equal "\e[38;5;128mfoo\e[0m", Color.color(:color128, "foo")
53
+ assert_equal "\e[38;5;128mfoo\e[0m", "foo".color(:color128)
54
+ assert_equal "\e[38;5;128mfoo\e[0m", color(:color128, "foo")
55
+ assert_equal "\e[38;5;128mfoo\e[0m", Color.color(:color128) { "foo" }
56
+ assert_equal "\e[38;5;128mfoo\e[0m", "foo".color(:color128) { "foo" }
57
+ assert_equal "\e[38;5;128mfoo\e[0m", color(:color128) { "foo" }
58
+ assert_equal "\e[38;5;128mfoo\e[0m", color(:color128) + "foo" + color(:reset)
59
+ end
60
+
61
+ def test_on_color
62
+ assert_equal "\e[48;5;128mfoo\e[0m", Color.on_color(:color128, "foo")
63
+ assert_equal "\e[48;5;128mfoo\e[0m", "foo".on_color(:color128)
64
+ assert_equal "\e[48;5;128mfoo\e[0m", on_color(:color128, "foo")
65
+ assert_equal "\e[48;5;128mfoo\e[0m", Color.on_color(:color128) { "foo" }
66
+ assert_equal "\e[48;5;128mfoo\e[0m", "foo".on_color(:color128) { "foo" }
67
+ assert_equal "\e[48;5;128mfoo\e[0m", on_color(:color128) { "foo" }
68
+ assert_equal "\e[48;5;128mfoo\e[0m", on_color(:color128) + "foo" + color(:reset)
69
+ end
54
70
 
55
71
  def test_uncolor
56
72
  assert_equal string, string_red.uncolor
@@ -64,8 +80,8 @@ class ANSIColorTest < Test::Unit::TestCase
64
80
  assert_equal string, uncolor { string_like_red }
65
81
  assert_equal "", uncolor(Object.new)
66
82
  for index in 0..255
67
- assert_equal "foo", Color.uncolor(Color.__send__("color#{index}", "foo"))
68
- assert_equal "foo", Color.uncolor(Color.__send__("on_color#{index}", "foo"))
83
+ assert_equal "foo", Color.uncolor(Color.color("color#{index}", "foo"))
84
+ assert_equal "foo", Color.uncolor(Color.on_color("color#{index}", "foo"))
69
85
  end
70
86
  end
71
87
 
@@ -99,4 +115,14 @@ class ANSIColorTest < Test::Unit::TestCase
99
115
  assert string.frozen?
100
116
  assert_equal red, string.red
101
117
  end
118
+
119
+ def test_nearest_rgb_color
120
+ assert_equal Term::ANSIColor::Attribute.get(:color0).rgb, Term::ANSIColor::Attribute.nearest_rgb_color('#000').rgb
121
+ assert_equal Term::ANSIColor::Attribute.get(:color15).rgb, Term::ANSIColor::Attribute.nearest_rgb_color('#ffffff').rgb
122
+ end
123
+
124
+ def test_nearest_rgb_color
125
+ assert_equal Term::ANSIColor::Attribute.get(:on_color0).rgb, Term::ANSIColor::Attribute.nearest_rgb_on_color('#000').rgb
126
+ assert_equal Term::ANSIColor::Attribute.get(:on_color15).rgb, Term::ANSIColor::Attribute.nearest_rgb_on_color('#ffffff').rgb
127
+ end
102
128
  end
@@ -0,0 +1,29 @@
1
+ require File.expand_path('test_helper', File.dirname(__FILE__))
2
+
3
+ class RgbTripleTest < Test::Unit::TestCase
4
+ include Term::ANSIColor
5
+
6
+ def test_rgb_cast
7
+ rgb = RGBTriple.new(128, 0, 255)
8
+ assert_equal '#8000ff', RGBTriple[ rgb ].html
9
+ assert_equal '#8000ff', RGBTriple[ [ 128, 0, 255 ] ].html
10
+ assert_equal '#8000ff', RGBTriple[ :red => 128, :green => 0, :blue => 255 ].html
11
+ assert_raise ArgumentError do
12
+ RGBTriple[ nil ]
13
+ end
14
+ end
15
+
16
+ def test_rgb_to_a
17
+ rgb = RGBTriple.new(128, 0, 255)
18
+ assert_equal [ 128, 0, 255 ], rgb.to_a
19
+ end
20
+
21
+ def test_rgb_distace
22
+ rgb1 = RGBTriple.new(128, 0, 255)
23
+ rgb2 = RGBTriple.new(128, 200, 64)
24
+ assert_in_delta 0.0, rgb1.distance_to(rgb1), 1e-3
25
+ assert_in_delta 170.481, RGBTriple.new(0, 0, 0).distance_to(RGBTriple.new(255, 255, 255)), 1e-3
26
+ assert_in_delta 119.402, rgb1.distance_to(rgb2), 1e-3
27
+ end
28
+ end
29
+
@@ -0,0 +1,8 @@
1
+ if ENV['START_SIMPLECOV'].to_i == 1
2
+ require 'simplecov'
3
+ SimpleCov.start do
4
+ add_filter "#{File.basename(File.dirname(__FILE__))}/"
5
+ end
6
+ end
7
+ require 'test/unit'
8
+ require 'term/ansicolor'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: term-ansicolor
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Florian Frank
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-03-08 00:00:00.000000000 Z
11
+ date: 2013-03-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gem_hadar
@@ -16,15 +16,30 @@ dependencies:
16
16
  requirements:
17
17
  - - ~>
18
18
  - !ruby/object:Gem::Version
19
- version: 0.1.8
19
+ version: 0.3.0
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ~>
25
25
  - !ruby/object:Gem::Version
26
- version: 0.1.8
27
- description: ''
26
+ version: 0.3.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: simplecov
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description: This library uses ANSI escape sequences to control the attributes of
42
+ terminal output
28
43
  email: flori@ping.de
29
44
  executables:
30
45
  - cdiff
@@ -33,6 +48,8 @@ extensions: []
33
48
  extra_rdoc_files:
34
49
  - README.rdoc
35
50
  - lib/term/ansicolor.rb
51
+ - lib/term/ansicolor/attribute.rb
52
+ - lib/term/ansicolor/rgb_triple.rb
36
53
  - lib/term/ansicolor/version.rb
37
54
  files:
38
55
  - .gitignore
@@ -44,15 +61,21 @@ files:
44
61
  - Rakefile
45
62
  - VERSION
46
63
  - bin/cdiff
64
+ - bin/colortab
47
65
  - bin/decolor
48
66
  - examples/example.rb
49
67
  - lib/term/ansicolor.rb
50
68
  - lib/term/ansicolor/.keep
69
+ - lib/term/ansicolor/attribute.rb
70
+ - lib/term/ansicolor/rgb_triple.rb
51
71
  - lib/term/ansicolor/version.rb
52
72
  - term-ansicolor.gemspec
53
73
  - tests/ansicolor_test.rb
74
+ - tests/rgb_triple_test.rb
75
+ - tests/test_helper.rb
54
76
  homepage: http://flori.github.com/term-ansicolor
55
- licenses: []
77
+ licenses:
78
+ - GPL-2
56
79
  metadata: {}
57
80
  post_install_message:
58
81
  rdoc_options:
@@ -74,9 +97,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
74
97
  version: '0'
75
98
  requirements: []
76
99
  rubyforge_project:
77
- rubygems_version: 2.0.0
100
+ rubygems_version: 2.0.3
78
101
  signing_key:
79
102
  specification_version: 4
80
103
  summary: Ruby library that colors strings using ANSI escape sequences
81
104
  test_files:
82
105
  - tests/ansicolor_test.rb
106
+ - tests/rgb_triple_test.rb
107
+ - tests/test_helper.rb