epitron-colorize 0.6.1

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc ADDED
@@ -0,0 +1,84 @@
1
+ = colorize
2
+
3
+ originally by Michal Kalbarczyk (fazibear)
4
+ http://fazibear.prv.pl
5
+
6
+ extended by Chris Gahan (epitron)
7
+ http://github.com/epitron
8
+
9
+ == DESCRIPTION:
10
+
11
+ Ruby String class extension. It adds some methods to set color, background color and text effect on console easier. It works by inserting ANSI escape sequences into your strings.
12
+
13
+ == SYNOPSIS:
14
+
15
+ === Colorizing an entire string:
16
+
17
+ puts "This is blue".colorize( :blue )
18
+ puts "This is light blue".colorize( :light_blue )
19
+ puts "This is also blue".colorize( :color => :blue )
20
+ puts "This is blue with red background".colorize( :color => :light_blue, :background => :red )
21
+ puts "This is blue with red background".colorize( :light_blue ).colorize( :background => :red )
22
+ puts "This is blue text on red".blue.on_red
23
+ puts "This is red on blue".colorize( :red ).on_blue
24
+ puts "This is uncolorized".blue.on_red.uncolorize
25
+ puts "This is red on blue and underline".colorize( :red ).on_blue.underline
26
+ puts "This is blue text on red".blue.on_red.blink
27
+
28
+ === Using HTML-like color tags:
29
+
30
+ puts "<blue>This is blue <red>followed by red.</red></blue>".colorize
31
+ puts "<10>This is light green <14>with light yellow</14> in the middle.</10>".colorize
32
+
33
+ Note: Closing the tags is optional; this also works:
34
+
35
+ puts "<green>hi <blue>there <yellow>everyone!".colorize
36
+
37
+ The numeric color tags are based on the old BBS-style color codes. Here's how they map to colors:
38
+
39
+ BBS_COLOR_TABLE = {
40
+ 0 => :black,
41
+ 1 => :blue,
42
+ 2 => :green,
43
+ 3 => :cyan,
44
+ 4 => :red,
45
+ 5 => :magenta,
46
+ 6 => :yellow,
47
+ 7 => :white,
48
+ 8 => :light_black,
49
+ 9 => :light_blue,
50
+ 10 => :light_green,
51
+ 11 => :light_cyan,
52
+ 12 => :light_red,
53
+ 13 => :light_magenta,
54
+ 14 => :light_yellow,
55
+ 15 => :light_white,
56
+ }
57
+
58
+ === Class methods:
59
+
60
+ * String.colors - return array of all possible colors names
61
+ * String.modes - return array of all possible modes
62
+ * String.color_matrix - displays color matrix with color names
63
+ * String.color_matrix( "FOO" ) - display color matrix with "FOO" text
64
+
65
+ == REQUIREMENTS:
66
+
67
+ * Win32/Console/ANSI (for Windows)
68
+
69
+ == INSTALL:
70
+
71
+ * sudo gem install colorize
72
+
73
+ == LICENSE:
74
+
75
+ colorize - Ruby string class extension.
76
+
77
+ Copyright (C) 2007 Michal Kalbarczyk,
78
+ Copyright (C) 2009 Chris Gahan
79
+
80
+ This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
81
+
82
+ This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
83
+
84
+ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
data/lib/colorize.rb ADDED
@@ -0,0 +1,267 @@
1
+ #
2
+ # Colorize String class extension.
3
+ #
4
+ class String
5
+
6
+ #
7
+ # Colors Hash
8
+ #
9
+ COLORS = {
10
+ :black => 0,
11
+ :red => 1,
12
+ :green => 2,
13
+ :yellow => 3,
14
+ :blue => 4,
15
+ :magenta => 5,
16
+ :cyan => 6,
17
+ :white => 7,
18
+ :default => 9,
19
+
20
+ :light_black => 10,
21
+ :light_red => 11,
22
+ :light_green => 12,
23
+ :light_yellow => 13,
24
+ :light_blue => 14,
25
+ :light_magenta => 15,
26
+ :light_cyan => 16,
27
+ :light_white => 17
28
+ }
29
+
30
+ #
31
+ # Modes Hash
32
+ #
33
+ MODES = {
34
+ :default => 0, # Turn off all attributes
35
+ #:bright => 1, # Set bright mode
36
+ :underline => 4, # Set underline mode
37
+ :blink => 5, # Set blink mode
38
+ :swap => 7, # Exchange foreground and background colors
39
+ :hide => 8 # Hide text (foreground color would be the same as background)
40
+ }
41
+
42
+ protected
43
+
44
+ #
45
+ # Set color values in new string intance
46
+ #
47
+ def set_color_parameters( params )
48
+ if (params.instance_of?(Hash))
49
+ @color = params[:color]
50
+ @background = params[:background]
51
+ @mode = params[:mode]
52
+ @uncolorized = params[:uncolorized]
53
+ self
54
+ else
55
+ nil
56
+ end
57
+ end
58
+
59
+ public
60
+
61
+ #
62
+ # Change color of string
63
+ #
64
+ # Examples:
65
+ #
66
+ # puts "This is blue".colorize( :blue )
67
+ # puts "This is light blue".colorize( :light_blue )
68
+ # puts "This is also blue".colorize( :color => :blue )
69
+ # puts "This is blue with red background".colorize( :color => :light_blue, :background => :red )
70
+ # puts "This is blue with red background".colorize( :light_blue ).colorize( :background => :red )
71
+ # puts "This is blue text on red".blue.on_red
72
+ # puts "This is red on blue".colorize( :red ).on_blue
73
+ # puts "This is red on blue and underline".colorize( :red ).on_blue.underline
74
+ # puts "This is blue text on red".blue.on_red.blink
75
+ #
76
+ def colorize( params=nil )
77
+
78
+ return self unless STDOUT.isatty
79
+
80
+ begin
81
+ require 'Win32/Console/ANSI' if PLATFORM =~ /win32/
82
+ rescue LoadError
83
+ raise 'You must gem install win32console to use color on Windows'
84
+ end
85
+
86
+ return self.tagged_colors unless params
87
+
88
+ color_parameters = {}
89
+
90
+ if (params.instance_of?(Hash))
91
+ color_parameters[:color] = COLORS[params[:color]]
92
+ color_parameters[:background] = COLORS[params[:background]]
93
+ color_parameters[:mode] = MODES[params[:mode]]
94
+ elsif (params.instance_of?(Symbol))
95
+ color_parameters[:color] = COLORS[params]
96
+ end
97
+
98
+ color_parameters[:color] ||= @color || 9
99
+ color_parameters[:background] ||= @background || 9
100
+ color_parameters[:mode] ||= @mode || 0
101
+
102
+ color_parameters[:uncolorized] ||= @uncolorized || self.dup
103
+
104
+ # calculate bright mode
105
+ color_parameters[:color] += 50 if color_parameters[:color] > 10
106
+
107
+ color_parameters[:background] += 50 if color_parameters[:background] > 10
108
+
109
+ return "\033[#{color_parameters[:mode]};#{color_parameters[:color]+30};#{color_parameters[:background]+40}m#{color_parameters[:uncolorized]}\033[0m".set_color_parameters( color_parameters )
110
+ end
111
+
112
+
113
+ #
114
+ # Return uncolorized string
115
+ #
116
+ def uncolorize
117
+ return @uncolorized || self
118
+ end
119
+
120
+ #
121
+ # Return true if sting is colorized
122
+ #
123
+ def colorized?
124
+ return !@uncolorized.nil?
125
+ end
126
+
127
+ #
128
+ # Make some color and on_color methods
129
+ #
130
+ COLORS.each_key do | key |
131
+ eval <<-"end_eval"
132
+ def #{key.to_s}
133
+ return self.colorize( :color => :#{key.to_s} )
134
+ end
135
+ def on_#{key.to_s}
136
+ return self.colorize( :background => :#{key.to_s} )
137
+ end
138
+ end_eval
139
+ end
140
+
141
+ #
142
+ # Methods for modes
143
+ #
144
+ MODES.each_key do | key |
145
+ eval <<-"end_eval"
146
+ def #{key.to_s}
147
+ return self.colorize( :mode => :#{key.to_s} )
148
+ end
149
+ end_eval
150
+ end
151
+
152
+ class << self
153
+
154
+ #
155
+ # Return array of available modes used by colorize method
156
+ #
157
+ def modes
158
+ keys = []
159
+ MODES.each_key do | key |
160
+ keys << key
161
+ end
162
+ keys
163
+ end
164
+
165
+ #
166
+ # Return array of available colors used by colorize method
167
+ #
168
+ def colors
169
+ keys = []
170
+ COLORS.each_key do | key |
171
+ keys << key
172
+ end
173
+ keys
174
+ end
175
+
176
+ #
177
+ # Display color matrix with color names.
178
+ #
179
+ def color_matrix( txt = "[X]" )
180
+ size = String.colors.length
181
+ String.colors.each do | color |
182
+ String.colors.each do | back |
183
+ print txt.colorize( :color => color, :background => back )
184
+ end
185
+ puts " < #{color}"
186
+ end
187
+ String.colors.reverse.each_with_index do | back, index |
188
+ puts "#{"|".rjust(txt.length)*(size-index)} < #{back}"
189
+ end
190
+ end
191
+ end
192
+ puts
193
+
194
+ #
195
+ # BBS-style numeric color codes.
196
+ #
197
+ BBS_COLOR_TABLE = {
198
+ 0 => :black,
199
+ 1 => :blue,
200
+ 2 => :green,
201
+ 3 => :cyan,
202
+ 4 => :red,
203
+ 5 => :magenta,
204
+ 6 => :yellow,
205
+ 7 => :white,
206
+ 8 => :light_black,
207
+ 9 => :light_blue,
208
+ 10 => :light_green,
209
+ 11 => :light_cyan,
210
+ 12 => :light_red,
211
+ 13 => :light_magenta,
212
+ 14 => :light_yellow,
213
+ 15 => :light_white,
214
+ }
215
+
216
+
217
+ #
218
+ # Colorize a string that has "color tags".
219
+ #
220
+ # Examples:
221
+ #
222
+ # Colors as words:
223
+ # puts "<light_yellow><light_white>*</light_white> Hey mom! I am <light_green>SO</light_green> colourized right now.</light_yellow>".colorize
224
+ #
225
+ # Numeric ANSI colors (from the BBS days):
226
+ # puts "<10><5>*</5> Hey mom! I am <9>SO</9> colourized right now.</10>".colorize
227
+ #
228
+ def tagged_colors
229
+ stack = []
230
+
231
+ open_tag_re = /<([\w\d_]+)>/
232
+ close_tag_re = /<\/([\w\d_]+)>/
233
+ tokens = self.scan(/(<\/?[\w\d_]+>|[^<>]+)/).flatten
234
+
235
+ result = ""
236
+
237
+ tokens.each do |token|
238
+
239
+ if open_tag_re =~ token
240
+
241
+ stack.push $1
242
+
243
+ elsif close_tag_re =~ token
244
+
245
+ # if this color is on the stack somwehere...
246
+ if pos = stack.rindex($1)
247
+ # close the tag by removing it from the stack
248
+ stack.delete_at pos
249
+ else
250
+ raise "Error: tried to close an unopened color tag -- #{token}"
251
+ end
252
+
253
+ else
254
+
255
+ color = (stack.last || "white")
256
+ color = BBS_COLOR_TABLE[color.to_i] if color =~ /^\d+$/
257
+ result << token.colorize(color.to_sym)
258
+
259
+ end
260
+
261
+ end
262
+
263
+ result
264
+ end
265
+
266
+ end
267
+
@@ -0,0 +1,11 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ class TestColorize < Test::Unit::TestCase
4
+
5
+ def setup
6
+ end
7
+
8
+ def test_truth
9
+ assert true
10
+ end
11
+ end
@@ -0,0 +1,2 @@
1
+ require 'test/unit'
2
+ require File.dirname(__FILE__) + '/../lib/colorize'
metadata ADDED
@@ -0,0 +1,57 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: epitron-colorize
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.6.1
5
+ platform: ruby
6
+ authors:
7
+ - fazibear
8
+ - epitron
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2009-09-11 00:00:00 -07:00
14
+ default_executable:
15
+ dependencies: []
16
+
17
+ description: "Extends the String class to allow you to do things like: { \"Hi mom\".red.on_blue.underline }. (Works under Win32 with \"Win32/Console/ANSI\".)"
18
+ email:
19
+ - chris@ill-logic.com
20
+ executables: []
21
+
22
+ extensions: []
23
+
24
+ extra_rdoc_files:
25
+ - README.rdoc
26
+ files:
27
+ - lib/colorize.rb
28
+ - README.rdoc
29
+ has_rdoc: false
30
+ homepage: http://github.com/epitron/colorize
31
+ post_install_message:
32
+ rdoc_options:
33
+ - --charset=UTF-8
34
+ require_paths:
35
+ - lib
36
+ required_ruby_version: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: "0"
41
+ version:
42
+ required_rubygems_version: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: "0"
47
+ version:
48
+ requirements: []
49
+
50
+ rubyforge_project:
51
+ rubygems_version: 1.2.0
52
+ signing_key:
53
+ specification_version: 3
54
+ summary: Colorize your console output (via extensions to the String class).
55
+ test_files:
56
+ - test/test_colorize.rb
57
+ - test/test_helper.rb