ansi 1.0.0

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.
@@ -0,0 +1,36 @@
1
+ HISTORY
2
+ LICENSE
3
+ MANIFEST
4
+ README
5
+ demo
6
+ demo/logger.rd
7
+ demo/progressbar.rd
8
+ lib
9
+ lib/ansi
10
+ lib/ansi.rb
11
+ lib/ansi/code.rb
12
+ lib/ansi/logger.rb
13
+ lib/ansi/progressbar.rb
14
+ lib/ansi/string.rb
15
+ lib/ansi/terminal
16
+ lib/ansi/terminal.rb
17
+ lib/ansi/terminal/curses.rb
18
+ lib/ansi/terminal/stty.rb
19
+ lib/ansi/terminal/termios.rb
20
+ lib/ansi/terminal/win32.rb
21
+ meta
22
+ meta/abstract
23
+ meta/authors
24
+ meta/created
25
+ meta/homepage
26
+ meta/license
27
+ meta/package
28
+ meta/project
29
+ meta/released
30
+ meta/repository
31
+ meta/summary
32
+ meta/title
33
+ meta/version
34
+ test
35
+ test/test_ansicode.rb
36
+ test/test_progressbar.rb
data/README ADDED
@@ -0,0 +1,72 @@
1
+ = ANSI
2
+
3
+ * http://death.rubyforge.org
4
+ * http://death.rubyforge.org/ansi
5
+
6
+
7
+ == DESCRIPTION
8
+
9
+ The ANSI project is a collection of ANSI code related libraries
10
+ enabling ANSI code based colorization and stylization of output.
11
+ It is very nice for beautifying shell output.
12
+
13
+ This collection is based on a set of scripts spun-off from
14
+ Ruby Facets. Include are Code (used to be ANSICode), Logger,
15
+ Progressbar and String. In addition the library include
16
+ Terminal which provides information about the current output
17
+ device.
18
+
19
+
20
+ == FEATURES/ISSUES
21
+
22
+ * ANSI::Code can be used as a mixin or as module functions.
23
+ * Good coverage of standard ANSI codes.
24
+ * Windows support needs some TLC :(
25
+
26
+
27
+ == RELEASE NOTES
28
+
29
+ Please see HISTORY file.
30
+
31
+
32
+ == SYNOPSIS
33
+
34
+ The ANSI::Code module defines ANSI codes as methods.
35
+
36
+ include ANSICode
37
+
38
+ p red, "Hello", blue, "World"
39
+ => "\e[31mHello\e[34mWorld"
40
+
41
+ p red { "Hello" } + blue { "World" }
42
+ => "\e[31mHello\e[0m\e[34mWorld\e[0m"
43
+
44
+ Thes mehods can also be called as module methods, eg. 'ANSI::Code.red'.
45
+
46
+ Please see the online documentation for more information on using
47
+ the other libraries.
48
+
49
+
50
+ == HOW TO INSTALL
51
+
52
+ To install with RubyGems simply open a console and type:
53
+
54
+ gem install ansi
55
+
56
+ Local installation requires Setup.rb (gem install setup),
57
+ then download the tarball package and type:
58
+
59
+ tar -xvzf ansi-1.0.0.tgz
60
+ cd ansi-1.0.0
61
+ sudo setup.rb all
62
+
63
+ Windows users use 'ruby setup.rb all'.
64
+
65
+
66
+ == LICENSE/COPYRIGHT
67
+
68
+ Copyright (c) 2004 Coding Dead
69
+
70
+ This program is ditributed unser the terms of the LGPLv3 license.
71
+
72
+ See LICENSE file for details.
@@ -0,0 +1,31 @@
1
+ = ANSI::Logger
2
+
3
+ Require the ANSI::Logger library.
4
+
5
+ require 'ansi/logger'
6
+
7
+ Create a new ANSI::Logger
8
+
9
+ log = ANSI::Logger.new(STDOUT)
10
+
11
+ Info logging appears normal.
12
+
13
+ log.info{"Info logs are green.\n"}
14
+
15
+ Warn logging appears yellow.
16
+
17
+ log.warn{"Warn logs are yellow.\n"}
18
+
19
+ Debug logging appears cyan.
20
+
21
+ log.debug{"Debug logs are cyan.\n"}
22
+
23
+ Error logging appears red.
24
+
25
+ log.error{"Error logs are red.\n"}
26
+
27
+ Fatal logging appears bright red.
28
+
29
+ log.fatal{"Fatal logs are bold red!\n"}
30
+
31
+ QED.
@@ -0,0 +1,63 @@
1
+ = ANSI::Progressbar
2
+
3
+ Pretty progress bars are easy to construct.
4
+
5
+ require 'ansi/progressbar'
6
+
7
+ pbar = ANSI::Progressbar.new("Test Bar", 100)
8
+
9
+ Running the bar simply requires calling the #inc method during
10
+ a loop and calling #finish when done.
11
+
12
+ 100.times do |i|
13
+ sleep 0.01
14
+ pbar.inc
15
+ end
16
+ pbar.finish
17
+
18
+ We will use this same rountine in all the examples below, so lets
19
+ make a quick macro for it. Notice we have to use #reset first
20
+ before reusing the same progress bar.
21
+
22
+ def run(pbar)
23
+ pbar.reset
24
+ 100.times do |i|
25
+ sleep 0.01
26
+ pbar.inc
27
+ end
28
+ pbar.finish
29
+ puts
30
+ end
31
+
32
+ The progress bar can be stylized in almost any way.
33
+ The #format setter provides control over the parts
34
+ that appear on the line. FOr example, by default the
35
+ format is:
36
+
37
+ pbar.format("%-14s %3d%% %s %s", :title, :percentage, :bar, :stat)
38
+
39
+ So lets vary it up to demonstrate the case.
40
+
41
+ pbar.format("%-14s %3d%% %s %s", :title, :percentage, :stat, :bar)
42
+ run(pbar)
43
+
44
+ The progress bar has an extra build in format intended for use with
45
+ file downloads called #transer_mode.
46
+
47
+ pbar.transfer_mode
48
+ run(pbar)
49
+
50
+ Calling this methods is the same as calling:
51
+
52
+ pbar.format("%-14s %3d%% %s %s",:title, :percentage, :bar, :stat_for_file_transfer)
53
+ run(pbar)
54
+
55
+ The #style setter allows each part of the line be modified with ANSI codes. And the
56
+ #bar_mark writer can be used to change the character used to make the bar.
57
+
58
+ pbar.standard_mode
59
+ pbar.style(:title => [:red], :bar=>[:blue])
60
+ pbar.bar_mark = "="
61
+ run(pbar)
62
+
63
+ QED.
@@ -0,0 +1,11 @@
1
+ # ANSI module contains all the ANSI related classes.
2
+ #
3
+ module ANSI
4
+ VERSION = "1.1.0" # :till: VERSION="<%= version %>"
5
+ end
6
+
7
+ require 'ansi/code'
8
+ require 'ansi/logger'
9
+ require 'ansi/progressbar'
10
+ require 'ansi/string'
11
+
@@ -0,0 +1,229 @@
1
+ # Ansi::Code Copyright (c) 2009 Thomas Sawyer, LGPL
2
+ #
3
+ # This library is a partial adaptation of ANSIColor by Florian Frank.
4
+ #
5
+ # ANSIColor Copyright (c) 2002 Florian Frank, LGPL
6
+ #
7
+ # TODO: Need to add rest of ANSI codes. Include modes?
8
+ # TODO: Re-evaluate how color/yielding methods are defined.
9
+ # TODO: Maybe up, down, right, left should have yielding methods too?
10
+
11
+ module ANSI
12
+
13
+ # Currently Windows is not supported.
14
+ SUPPORTED = !(PLATFORM =~ /win/)
15
+
16
+ # Ansi::Code module makes it very easy to use ANSI codes.
17
+ # These are esspecially nice for beautifying shell output.
18
+ #
19
+ # include Ansi::Code
20
+ #
21
+ # p red, "Hello", blue, "World"
22
+ # => "\e[31mHello\e[34mWorld"
23
+ #
24
+ # p red { "Hello" } + blue { "World" }
25
+ # => "\e[31mHello\e[0m\e[34mWorld\e[0m"
26
+ #
27
+ # == Supported ANSI Commands
28
+ #
29
+ # The following is a list of supported codes.
30
+ #
31
+ # save
32
+ # restore
33
+ # clear_screen
34
+ # cls # synonym for :clear_screen
35
+ # clear_line
36
+ # clr # synonym for :clear_line
37
+ # move
38
+ # up
39
+ # down
40
+ # left
41
+ # right
42
+ # display
43
+ #
44
+ # clear
45
+ # reset # synonym for :clear
46
+ # bold
47
+ # dark
48
+ # italic # not widely implemented
49
+ # underline
50
+ # underscore # synonym for :underline
51
+ # blink
52
+ # rapid_blink # not widely implemented
53
+ # negative # no reverse because of String#reverse
54
+ # concealed
55
+ # strikethrough # not widely implemented
56
+ #
57
+ # black
58
+ # red
59
+ # green
60
+ # yellow
61
+ # blue
62
+ # magenta
63
+ # cyan
64
+ # white
65
+ #
66
+ # on_black
67
+ # on_red
68
+ # on_green
69
+ # on_yellow
70
+ # on_blue
71
+ # on_magenta
72
+ # on_cyan
73
+ # on_white
74
+ #
75
+ module Code
76
+
77
+ extend self
78
+
79
+ # Save current cursor positon.
80
+ def save
81
+ "\e[s"
82
+ end
83
+
84
+ # Restore saved cursor positon.
85
+ def restore
86
+ "\e[u"
87
+ end
88
+
89
+ # Clear the screen and move cursor to home.
90
+ def clear_screen
91
+ "\e[2J"
92
+ end
93
+ alias_method :cls, :clear_screen
94
+
95
+ # Clear to the end of the current line.
96
+ def clear_line
97
+ "\e[K"
98
+ end
99
+ alias_method :clr, :clear_line
100
+
101
+ #--
102
+ #def position
103
+ # "\e[#;#R"
104
+ #end
105
+ #++
106
+
107
+ # Move curose to line and column.
108
+ def move( line, column=0 )
109
+ "\e[#{line.to_i};#{column.to_i}H"
110
+ end
111
+
112
+ # Move cursor up a specificed number of spaces.
113
+ def up( spaces=1 )
114
+ "\e[#{spaces.to_i}A"
115
+ end
116
+
117
+ # Move cursor down a specificed number of spaces.
118
+ def down( spaces=1 )
119
+ "\e[#{spaces.to_i}B"
120
+ end
121
+
122
+ # Move cursor left a specificed number of spaces.
123
+ def left( spaces=1 )
124
+ "\e[#{spaces.to_i}D"
125
+ end
126
+
127
+ # Move cursor right a specificed number of spaces.
128
+ def right( spaces=1 )
129
+ "\e[#{spaces.to_i}C"
130
+ end
131
+
132
+ # Like +move+ but returns to original positon
133
+ # after yielding block or adding string argument.
134
+ def display( line, column=0, string=nil ) #:yield:
135
+ result = "\e[s"
136
+ result << "\e[#{line.to_i};#{column.to_i}H"
137
+ if block_given?
138
+ result << yield
139
+ result << "\e[u"
140
+ elsif string
141
+ result << string
142
+ result << "\e[u"
143
+ elsif respond_to?(:to_str)
144
+ result << self
145
+ result << "\e[u"
146
+ end
147
+ return result
148
+ end
149
+
150
+ # Define color codes.
151
+ def self.define_ansicolor_method(name,code)
152
+ class_eval <<-HERE
153
+ def #{name.to_s}(string = nil)
154
+ result = "\e[#{code}m"
155
+ if block_given?
156
+ result << yield
157
+ result << "\e[0m"
158
+ elsif string
159
+ result << string
160
+ result << "\e[0m"
161
+ elsif respond_to?(:to_str)
162
+ result << self
163
+ result << "\e[0m"
164
+ end
165
+ return result
166
+ end
167
+ HERE
168
+ end
169
+
170
+ @@colors = [
171
+ [ :clear , 0 ],
172
+ [ :reset , 0 ], # synonym for :clear
173
+ [ :bold , 1 ],
174
+ [ :dark , 2 ],
175
+ [ :italic , 3 ], # not widely implemented
176
+ [ :underline , 4 ],
177
+ [ :underscore , 4 ], # synonym for :underline
178
+ [ :blink , 5 ],
179
+ [ :rapid_blink , 6 ], # not widely implemented
180
+ [ :negative , 7 ], # no reverse because of String#reverse
181
+ [ :concealed , 8 ],
182
+ [ :strikethrough, 9 ], # not widely implemented
183
+ [ :black , 30 ],
184
+ [ :red , 31 ],
185
+ [ :green , 32 ],
186
+ [ :yellow , 33 ],
187
+ [ :blue , 34 ],
188
+ [ :magenta , 35 ],
189
+ [ :cyan , 36 ],
190
+ [ :white , 37 ],
191
+ [ :on_black , 40 ],
192
+ [ :on_red , 41 ],
193
+ [ :on_green , 42 ],
194
+ [ :on_yellow , 43 ],
195
+ [ :on_blue , 44 ],
196
+ [ :on_magenta , 45 ],
197
+ [ :on_cyan , 46 ],
198
+ [ :on_white , 47 ],
199
+ ]
200
+
201
+ @@colors.each do |c, v|
202
+ define_ansicolor_method(c, v)
203
+ end
204
+
205
+ ColoredRegexp = /\e\[([34][0-7]|[0-9])m/
206
+
207
+ module_function
208
+
209
+ #
210
+ def uncolored(string = nil)
211
+ if block_given?
212
+ yield.gsub(ColoredRegexp, '')
213
+ elsif string
214
+ string.gsub(ColoredRegexp, '')
215
+ elsif respond_to?(:to_str)
216
+ gsub(ColoredRegexp, '')
217
+ else
218
+ ''
219
+ end
220
+ end
221
+
222
+ #
223
+ def colors
224
+ @@colors.map { |c| c[0] }
225
+ end
226
+
227
+ end
228
+
229
+ end