rainbow 2.1.0 → 3.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/lib/rainbow/color.rb DELETED
@@ -1,135 +0,0 @@
1
- module Rainbow
2
- class Color
3
-
4
- attr_reader :ground
5
-
6
- def self.build(ground, values)
7
- unless [1, 3].include?(values.size)
8
- fail ArgumentError,
9
- "Wrong number of arguments for color definition, should be 1 or 3"
10
- end
11
-
12
- color = values.size == 1 ? values.first : values
13
-
14
- case color
15
- when Fixnum
16
- Indexed.new(ground, color)
17
- when Symbol
18
- if Named.color_names.include?(color)
19
- Named.new(ground, color)
20
- else X11Named.color_names.include?(color)
21
- X11Named.new(ground, color)
22
- end
23
- when Array
24
- RGB.new(ground, *color)
25
- when String
26
- RGB.new(ground, *parse_hex_color(color))
27
- end
28
- end
29
-
30
- def self.parse_hex_color(hex)
31
- hex = hex.sub(/^#/, '')
32
- r = hex[0..1].to_i(16)
33
- g = hex[2..3].to_i(16)
34
- b = hex[4..5].to_i(16)
35
-
36
- [r, g, b]
37
- end
38
-
39
- class Indexed < Color
40
-
41
- attr_reader :num
42
-
43
- def initialize(ground, num)
44
- @ground = ground
45
- @num = num
46
- end
47
-
48
- def codes
49
- code = num + (ground == :foreground ? 30 : 40)
50
-
51
- [code]
52
- end
53
-
54
- end
55
-
56
- class Named < Indexed
57
-
58
- NAMES = {
59
- black: 0,
60
- red: 1,
61
- green: 2,
62
- yellow: 3,
63
- blue: 4,
64
- magenta: 5,
65
- cyan: 6,
66
- white: 7,
67
- default: 9,
68
- }
69
-
70
- def self.color_names
71
- NAMES.keys
72
- end
73
-
74
- def initialize(ground, name)
75
- unless Named.color_names.include?(name)
76
- fail ArgumentError,
77
- "Unknown color name, valid names: #{Named.color_names.join(', ')}"
78
- end
79
-
80
- super(ground, NAMES[name])
81
- end
82
-
83
- end
84
-
85
- class RGB < Indexed
86
-
87
- attr_reader :r, :g, :b
88
-
89
- def self.to_ansi_domain(value)
90
- (6 * (value / 256.0)).to_i
91
- end
92
-
93
- def initialize(ground, *values)
94
- if values.min < 0 || values.max > 255
95
- fail ArgumentError, "RGB value outside 0-255 range"
96
- end
97
-
98
- super(ground, 8)
99
- @r, @g, @b = values
100
- end
101
-
102
- def codes
103
- super + [5, code_from_rgb]
104
- end
105
-
106
- private
107
-
108
- def code_from_rgb
109
- 16 + self.class.to_ansi_domain(r) * 36 +
110
- self.class.to_ansi_domain(g) * 6 +
111
- self.class.to_ansi_domain(b)
112
- end
113
-
114
- end
115
-
116
- class X11Named < RGB
117
- include X11ColorNames
118
-
119
- def self.color_names
120
- NAMES.keys
121
- end
122
-
123
- def initialize(ground, name)
124
- unless X11Named.color_names.include?(name)
125
- fail ArgumentError,
126
- "Unknown color name, valid names: #{X11Named.color_names.join(', ')}"
127
- end
128
-
129
- super(ground, *NAMES[name])
130
- end
131
-
132
- end
133
-
134
- end
135
- end
@@ -1,52 +0,0 @@
1
- require 'rainbow'
2
-
3
- module Rainbow
4
- module Ext
5
- module String
6
- module InstanceMethods
7
-
8
- def foreground(*color)
9
- Rainbow(self).foreground(*color)
10
- end
11
-
12
- alias_method :color, :foreground
13
- alias_method :colour, :foreground
14
-
15
- def background(*color)
16
- Rainbow(self).background(*color)
17
- end
18
-
19
- def reset
20
- Rainbow(self).reset
21
- end
22
-
23
- def bright
24
- Rainbow(self).bright
25
- end
26
-
27
- def italic
28
- Rainbow(self).italic
29
- end
30
-
31
- def underline
32
- Rainbow(self).underline
33
- end
34
-
35
- def blink
36
- Rainbow(self).blink
37
- end
38
-
39
- def inverse
40
- Rainbow(self).inverse
41
- end
42
-
43
- def hide
44
- Rainbow(self).hide
45
- end
46
-
47
- end
48
- end
49
- end
50
- end
51
-
52
- ::String.send(:include, Rainbow::Ext::String::InstanceMethods)
@@ -1,21 +0,0 @@
1
- require_relative 'wrapper'
2
-
3
- module Rainbow
4
-
5
- def self.global
6
- @global ||= Wrapper.new
7
- end
8
-
9
- def self.enabled
10
- global.enabled
11
- end
12
-
13
- def self.enabled=(value)
14
- global.enabled = value
15
- end
16
-
17
- end
18
-
19
- def Rainbow(string)
20
- Rainbow.global.wrap(string.to_s)
21
- end
@@ -1,15 +0,0 @@
1
- module Sickill
2
- module Rainbow
3
-
4
- def self.enabled=(value)
5
- STDERR.puts("Rainbow gem notice: Sickill::Rainbow.enabled= is " \
6
- "deprecated, use Rainbow.enabled= instead.")
7
- ::Rainbow.enabled = value
8
- end
9
-
10
- def self.enabled
11
- ::Rainbow.enabled
12
- end
13
-
14
- end
15
- end
@@ -1,30 +0,0 @@
1
- module Rainbow
2
-
3
- class NullPresenter < ::String
4
-
5
- def color(*values); self; end
6
- def background(*values); self; end
7
- def reset; self; end
8
- def bright; self; end
9
- def italic; self; end
10
- def underline; self; end
11
- def blink; self; end
12
- def inverse; self; end
13
- def hide; self; end
14
-
15
- def black; self; end
16
- def red; self; end
17
- def green; self; end
18
- def yellow; self; end
19
- def blue; self; end
20
- def magenta; self; end
21
- def cyan; self; end
22
- def white; self; end
23
-
24
- alias_method :foreground, :color
25
- alias_method :fg, :color
26
- alias_method :bg, :background
27
-
28
- end
29
-
30
- end
@@ -1,124 +0,0 @@
1
- require_relative 'string_utils'
2
- require_relative 'x11_color_names'
3
- require_relative 'color'
4
-
5
- module Rainbow
6
-
7
- class Presenter < ::String
8
-
9
- TERM_EFFECTS = {
10
- reset: 0,
11
- bright: 1,
12
- italic: 3,
13
- underline: 4,
14
- blink: 5,
15
- inverse: 7,
16
- hide: 8,
17
- }
18
-
19
- # Sets color of this text.
20
- def color(*values)
21
- wrap_with_sgr(Color.build(:foreground, values).codes)
22
- end
23
-
24
- alias_method :foreground, :color
25
- alias_method :fg, :color
26
-
27
- # Sets background color of this text.
28
- def background(*values)
29
- wrap_with_sgr(Color.build(:background, values).codes)
30
- end
31
-
32
- alias_method :bg, :background
33
-
34
- # Resets terminal to default colors/backgrounds.
35
- #
36
- # It shouldn't be needed to use this method because all methods
37
- # append terminal reset code to end of string.
38
- def reset
39
- wrap_with_sgr(TERM_EFFECTS[:reset])
40
- end
41
-
42
- # Turns on bright/bold for this text.
43
- def bright
44
- wrap_with_sgr(TERM_EFFECTS[:bright])
45
- end
46
-
47
- # Turns on italic style for this text (not well supported by terminal
48
- # emulators).
49
- def italic
50
- wrap_with_sgr(TERM_EFFECTS[:italic])
51
- end
52
-
53
- # Turns on underline decoration for this text.
54
- def underline
55
- wrap_with_sgr(TERM_EFFECTS[:underline])
56
- end
57
-
58
- # Turns on blinking attribute for this text (not well supported by terminal
59
- # emulators).
60
- def blink
61
- wrap_with_sgr(TERM_EFFECTS[:blink])
62
- end
63
-
64
- # Inverses current foreground/background colors.
65
- def inverse
66
- wrap_with_sgr(TERM_EFFECTS[:inverse])
67
- end
68
-
69
- # Hides this text (set its color to the same as background).
70
- def hide
71
- wrap_with_sgr(TERM_EFFECTS[:hide])
72
- end
73
-
74
- def black
75
- color(:black)
76
- end
77
-
78
- def red
79
- color(:red)
80
- end
81
-
82
- def green
83
- color(:green)
84
- end
85
-
86
- def yellow
87
- color(:yellow)
88
- end
89
-
90
- def blue
91
- color(:blue)
92
- end
93
-
94
- def magenta
95
- color(:magenta)
96
- end
97
-
98
- def cyan
99
- color(:cyan)
100
- end
101
-
102
- def white
103
- color(:white)
104
- end
105
-
106
- # We take care of X11 color method call here.
107
- # Such as #aqua, #ghostwhite.
108
- def method_missing(method_name,*args)
109
- if Color::X11Named.color_names.include? method_name and args.empty? then
110
- color(method_name)
111
- else
112
- super
113
- end
114
- end
115
-
116
- private
117
-
118
- def wrap_with_sgr(codes) #:nodoc:
119
- self.class.new(StringUtils.wrap_with_sgr(self, [*codes]))
120
- end
121
-
122
- end
123
-
124
- end
@@ -1,20 +0,0 @@
1
- module Rainbow
2
- class StringUtils
3
-
4
- def self.wrap_with_sgr(string, codes)
5
- return string if codes.empty?
6
-
7
- seq = "\e[" + codes.join(";") + "m"
8
- match = string.match(/^(\e\[([\d;]+)m)*/)
9
- seq_pos = match.end(0)
10
- string = string[0...seq_pos] + seq + string[seq_pos..-1]
11
-
12
- unless string =~ /\e\[0m$/
13
- string = string + "\e[0m"
14
- end
15
-
16
- string
17
- end
18
-
19
- end
20
- end
@@ -1,3 +0,0 @@
1
- module Rainbow
2
- VERSION = "2.1.0".freeze
3
- end
@@ -1,22 +0,0 @@
1
- require_relative 'presenter'
2
- require_relative 'null_presenter'
3
-
4
- module Rainbow
5
-
6
- class Wrapper
7
- attr_accessor :enabled
8
-
9
- def initialize(enabled = true)
10
- @enabled = enabled
11
- end
12
-
13
- def wrap(string)
14
- if enabled
15
- Presenter.new(string.to_s)
16
- else
17
- NullPresenter.new(string.to_s)
18
- end
19
- end
20
- end
21
-
22
- end
@@ -1,152 +0,0 @@
1
- module Rainbow
2
-
3
- module X11ColorNames
4
- NAMES= {
5
- aqua: [0, 255, 255],
6
- aquamarine: [127, 255, 212],
7
- mediumaquamarine: [102, 205, 170],
8
- azure: [240, 255, 255],
9
- beige: [245, 245, 220],
10
- bisque: [255, 228, 196],
11
- black: [0, 0, 0],
12
- blanchedalmond: [255, 235, 205],
13
- blue: [0, 0, 255],
14
- darkblue: [0, 0, 139],
15
- lightblue: [173, 216, 230],
16
- mediumblue: [0, 0, 205],
17
- aliceblue: [240, 248, 255],
18
- cadetblue: [95, 158, 160],
19
- dodgerblue: [30, 144, 255],
20
- midnightblue: [25, 25, 112],
21
- navyblue: [0, 0, 128],
22
- powderblue: [176, 224, 230],
23
- royalblue: [65, 105, 225],
24
- skyblue: [135, 206, 235],
25
- deepskyblue: [0, 191, 255],
26
- lightskyblue: [135, 206, 250],
27
- slateblue: [106, 90, 205],
28
- darkslateblue: [72, 61, 139],
29
- mediumslateblue: [123, 104, 238],
30
- steelblue: [70, 130, 180],
31
- lightsteelblue: [176, 196, 222],
32
- brown: [165, 42, 42],
33
- rosybrown: [188, 143, 143],
34
- saddlebrown: [139, 69, 19],
35
- sandybrown: [244, 164, 96],
36
- burlywood: [222, 184, 135],
37
- chartreuse: [127, 255, 0],
38
- chocolate: [210, 105, 30],
39
- coral: [255, 127, 80],
40
- lightcoral: [240, 128, 128],
41
- cornflower: [100, 149, 237],
42
- cornsilk: [255, 248, 220],
43
- crimson: [220, 20, 60],
44
- cyan: [0, 255, 255],
45
- darkcyan: [0, 139, 139],
46
- lightcyan: [224, 255, 255],
47
- firebrick: [178, 34, 34],
48
- fuchsia: [255, 0, 255],
49
- gainsboro: [220, 220, 220],
50
- gold: [255, 215, 0],
51
- goldenrod: [218, 165, 32],
52
- darkgoldenrod: [184, 134, 11],
53
- lightgoldenrod: [250, 250, 210],
54
- palegoldenrod: [238, 232, 170],
55
- gray: [190, 190, 190],
56
- darkgray: [169, 169, 169],
57
- dimgray: [105, 105, 105],
58
- lightgray: [211, 211, 211],
59
- slategray: [112, 128, 144],
60
- lightslategray: [119, 136, 153],
61
- webgray: [128, 128, 128],
62
- green: [0, 255, 0],
63
- darkgreen: [0, 100, 0],
64
- lightgreen: [144, 238, 144],
65
- palegreen: [152, 251, 152],
66
- darkolivegreen: [85, 107, 47],
67
- yellowgreen: [154, 205, 50],
68
- forestgreen: [34, 139, 34],
69
- lawngreen: [124, 252, 0],
70
- limegreen: [50, 205, 50],
71
- seagreen: [46, 139, 87],
72
- darkseagreen: [143, 188, 143],
73
- lightseagreen: [32, 178, 170],
74
- mediumseagreen: [60, 179, 113],
75
- springgreen: [0, 255, 127],
76
- mediumspringgreen: [0, 250, 154],
77
- webgreen: [0, 128, 0],
78
- honeydew: [240, 255, 240],
79
- indianred: [205, 92, 92],
80
- indigo: [75, 0, 130],
81
- ivory: [255, 255, 240],
82
- khaki: [240, 230, 140],
83
- darkkhaki: [189, 183, 107],
84
- lavender: [230, 230, 250],
85
- lavenderblush: [255, 240, 245],
86
- lemonchiffon: [255, 250, 205],
87
- lime: [0, 255, 0],
88
- linen: [250, 240, 230],
89
- magenta: [255, 0, 255],
90
- darkmagenta: [139, 0, 139],
91
- maroon: [176, 48, 96],
92
- webmaroon: [127, 0, 0],
93
- mintcream: [245, 255, 250],
94
- mistyrose: [255, 228, 225],
95
- moccasin: [255, 228, 181],
96
- oldlace: [253, 245, 230],
97
- olive: [128, 128, 0],
98
- olivedrab: [107, 142, 35],
99
- orange: [255, 165, 0],
100
- darkorange: [255, 140, 0],
101
- orchid: [218, 112, 214],
102
- darkorchid: [153, 50, 204],
103
- mediumorchid: [186, 85, 211],
104
- papayawhip: [255, 239, 213],
105
- peachpuff: [255, 218, 185],
106
- peru: [205, 133, 63],
107
- pink: [255, 192, 203],
108
- deeppink: [255, 20, 147],
109
- lightpink: [255, 182, 193],
110
- hotpink: [255, 105, 180],
111
- plum: [221, 160, 221],
112
- purple: [160, 32, 240],
113
- mediumpurple: [147, 112, 219],
114
- rebeccapurple: [102, 51, 153],
115
- webpurple: [127, 0, 127],
116
- red: [255, 0, 0],
117
- darkred: [139, 0, 0],
118
- orangered: [255, 69, 0],
119
- mediumvioletred: [199, 21, 133],
120
- palevioletred: [219, 112, 147],
121
- salmon: [250, 128, 114],
122
- darksalmon: [233, 150, 122],
123
- lightsalmon: [255, 160, 122],
124
- seashell: [255, 245, 238],
125
- sienna: [160, 82, 45],
126
- silver: [192, 192, 192],
127
- darkslategray: [47, 79, 79],
128
- snow: [255, 250, 250],
129
- tan: [210, 180, 140],
130
- teal: [0, 128, 128],
131
- thistle: [216, 191, 216],
132
- tomato: [255, 99, 71],
133
- turquoise: [64, 224, 208],
134
- darkturquoise: [0, 206, 209],
135
- mediumturquoise: [72, 209, 204],
136
- paleturquoise: [175, 238, 238],
137
- violet: [238, 130, 238],
138
- darkviolet: [148, 0, 211],
139
- blueviolet: [138, 43, 226],
140
- wheat: [245, 222, 179],
141
- white: [255, 255, 255],
142
- antiquewhite: [250, 235, 215],
143
- floralwhite: [255, 250, 240],
144
- ghostwhite: [248, 248, 255],
145
- navajowhite: [255, 222, 173],
146
- whitesmoke: [245, 245, 245],
147
- yellow: [255, 255, 0],
148
- lightyellow: [255, 255, 224],
149
- greenyellow: [173, 255, 47]
150
- }
151
- end
152
- end
data/lib/rainbow.rb DELETED
@@ -1,25 +0,0 @@
1
- require_relative 'rainbow/global'
2
- require_relative 'rainbow/legacy'
3
-
4
- module Rainbow
5
-
6
- def self.new
7
- Wrapper.new(global.enabled)
8
- end
9
-
10
- self.enabled = false unless STDOUT.tty? && STDERR.tty?
11
- self.enabled = false if ENV['TERM'] == 'dumb'
12
- self.enabled = true if ENV['CLICOLOR_FORCE'] == '1'
13
-
14
- # On Windows systems, try to load the local ANSI support library if Ruby version < 2
15
- # Ruby 2.x on Windows includes ANSI support.
16
- require 'rbconfig'
17
- if RbConfig::CONFIG['host_os'] =~ /mswin|mingw/ && RUBY_VERSION.to_i < 2
18
- begin
19
- require 'Win32/Console/ANSI'
20
- rescue LoadError
21
- self.enabled = false
22
- end
23
- end
24
-
25
- end
data/rainbow.gemspec DELETED
@@ -1,23 +0,0 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
3
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'rainbow/version'
5
-
6
- Gem::Specification.new do |spec|
7
- spec.name = "rainbow"
8
- spec.version = Rainbow::VERSION
9
- spec.authors = ["Marcin Kulik"]
10
- spec.email = ["m@ku1ik.com"]
11
- spec.description = %q(Colorize printed text on ANSI terminals)
12
- spec.summary = %q(Colorize printed text on ANSI terminals)
13
- spec.homepage = "https://github.com/sickill/rainbow"
14
- spec.license = "MIT"
15
- spec.required_ruby_version = '>= 1.9.2'
16
-
17
- spec.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
18
- spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
19
- spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
20
- spec.require_paths = ["lib"]
21
-
22
- spec.add_development_dependency "bundler", "~> 1.3"
23
- end
@@ -1,35 +0,0 @@
1
- require 'spec_helper'
2
- require 'rainbow'
3
-
4
- describe 'Custom Rainbow instance' do
5
-
6
- it 'inherits enabled state from the global instance' do
7
- Rainbow.enabled = :yep
8
- expect(Rainbow.new.enabled).to eq(:yep)
9
- end
10
-
11
- it 'tracks its own state separately from the global instance' do
12
- Rainbow.enabled = :yep
13
- rainbow = Rainbow.new
14
- expect(Rainbow.new.enabled).to eq(:yep)
15
-
16
- rainbow.enabled = :nope
17
- expect(Rainbow.enabled).to eq(:yep)
18
- expect(rainbow.enabled).to eq(:nope)
19
- end
20
-
21
- it 'wraps string with escape codes when enabled' do
22
- rainbow = Rainbow.new
23
- rainbow.enabled = true
24
-
25
- expect(rainbow.wrap('hello').green).to eq("\e[32mhello\e[0m")
26
- end
27
-
28
- it "doesn't wrap string with any escape code when disabled" do
29
- rainbow = Rainbow.new
30
- rainbow.enabled = false
31
-
32
- expect(rainbow.wrap('hello').green).to eq('hello')
33
- end
34
-
35
- end