ansi-sys 0.4.1 → 0.5.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.
- data/ChangeLog +7 -0
 - data/History.txt +3 -0
 - data/lib/ansisys.rb +91 -24
 - data/website/index.html +7 -7
 - data/website/index.txt +5 -5
 - data/website/stylesheets/screen.css +15 -15
 - metadata +3 -3
 
    
        data/ChangeLog
    CHANGED
    
    
    
        data/History.txt
    CHANGED
    
    
    
        data/lib/ansisys.rb
    CHANGED
    
    | 
         @@ -11,13 +11,14 @@ require 'webrick' 
     | 
|
| 
       11 
11 
     | 
    
         
             
            module AnsiSys
         
     | 
| 
       12 
12 
     | 
    
         
             
            	module VERSION	#:nodoc:
         
     | 
| 
       13 
13 
     | 
    
         
             
            		MAJOR = 0
         
     | 
| 
       14 
     | 
    
         
            -
            		MINOR =  
     | 
| 
       15 
     | 
    
         
            -
            		TINY =  
     | 
| 
      
 14 
     | 
    
         
            +
            		MINOR = 5
         
     | 
| 
      
 15 
     | 
    
         
            +
            		TINY = 0
         
     | 
| 
       16 
16 
     | 
    
         | 
| 
       17 
17 
     | 
    
         
             
            		STRING = [MAJOR, MINOR, TINY].join('.')
         
     | 
| 
       18 
18 
     | 
    
         
             
            	end
         
     | 
| 
       19 
19 
     | 
    
         | 
| 
       20 
20 
     | 
    
         
             
            	module CSSFormatter
         
     | 
| 
      
 21 
     | 
    
         
            +
            		# make a CSS style-let from a Hash of CSS settings
         
     | 
| 
       21 
22 
     | 
    
         
             
            		def hash_to_styles(hash, separator = '; ')
         
     | 
| 
       22 
23 
     | 
    
         
             
            			unless hash.empty?
         
     | 
| 
       23 
24 
     | 
    
         
             
            				return hash.map{|e| "#{e[0]}: #{e[1].join(' ')}"}.join(separator)
         
     | 
| 
         @@ -40,16 +41,19 @@ module AnsiSys 
     | 
|
| 
       40 
41 
     | 
    
         | 
| 
       41 
42 
     | 
    
         
             
            		attr_reader :buffer
         
     | 
| 
       42 
43 
     | 
    
         | 
| 
      
 44 
     | 
    
         
            +
            		# _csis_ is an Array of Code Sequence Introducers
         
     | 
| 
      
 45 
     | 
    
         
            +
            		# which can be \e[, \x9B, or both
         
     | 
| 
       43 
46 
     | 
    
         
             
            		def initialize(csis = ["\x1b["])	# CSI can also be "\x9B"
         
     | 
| 
       44 
47 
     | 
    
         
             
            			@code_start_re = Regexp.union(*(CODE_EQUIVALENT.keys + csis))
         
     | 
| 
       45 
48 
     | 
    
         
             
            			@buffer = ''
         
     | 
| 
       46 
49 
     | 
    
         
             
            		end
         
     | 
| 
       47 
50 
     | 
    
         | 
| 
      
 51 
     | 
    
         
            +
            		# add the String (clear text with some or no escape sequences) to buffer
         
     | 
| 
       48 
52 
     | 
    
         
             
            		def push(string)
         
     | 
| 
       49 
53 
     | 
    
         
             
            			@buffer += string
         
     | 
| 
       50 
54 
     | 
    
         
             
            		end
         
     | 
| 
       51 
55 
     | 
    
         | 
| 
       52 
     | 
    
         
            -
            		# returns array of tokens while deleting the tokenized part  
     | 
| 
      
 56 
     | 
    
         
            +
            		# returns array of tokens while deleting the tokenized part from buffer
         
     | 
| 
       53 
57 
     | 
    
         
             
            		def lex!
         
     | 
| 
       54 
58 
     | 
    
         
             
            			r = Array.new
         
     | 
| 
       55 
59 
     | 
    
         
             
            			@buffer.gsub!(/(?:\r\n|\n\r)/, "\n")
         
     | 
| 
         @@ -79,19 +83,21 @@ module AnsiSys 
     | 
|
| 
       79 
83 
     | 
    
         
             
            	end
         
     | 
| 
       80 
84 
     | 
    
         | 
| 
       81 
85 
     | 
    
         
             
            	class Characters
         
     | 
| 
      
 86 
     | 
    
         
            +
            		# widths of characters
         
     | 
| 
       82 
87 
     | 
    
         
             
            		WIDTHS = {
         
     | 
| 
       83 
88 
     | 
    
         
             
            			"\t" => 8,
         
     | 
| 
       84 
89 
     | 
    
         
             
            		}
         
     | 
| 
       85 
90 
     | 
    
         | 
| 
       86 
     | 
    
         
            -
            		attr_reader :string
         
     | 
| 
       87 
     | 
    
         
            -
            		attr_reader :sgr
         
     | 
| 
       88 
     | 
    
         
            -
            		attr_reader :initial_cursor
         
     | 
| 
      
 91 
     | 
    
         
            +
            		attr_reader :string	# clear text
         
     | 
| 
      
 92 
     | 
    
         
            +
            		attr_reader :sgr	# Select Graphic Rendition associated with the text
         
     | 
| 
       89 
93 
     | 
    
         | 
| 
       90 
94 
     | 
    
         
             
            		def initialize(string, sgr)
         
     | 
| 
       91 
95 
     | 
    
         
             
            			@string = string
         
     | 
| 
       92 
96 
     | 
    
         
             
            			@sgr = sgr
         
     | 
| 
       93 
97 
     | 
    
         
             
            		end
         
     | 
| 
       94 
98 
     | 
    
         | 
| 
      
 99 
     | 
    
         
            +
            		# echo the string onto the _screen_ with initial cursor as _cursor_
         
     | 
| 
      
 100 
     | 
    
         
            +
            		# _cursor_ position will be changed as the string is echoed
         
     | 
| 
       95 
101 
     | 
    
         
             
            		def echo_on(screen, cursor)
         
     | 
| 
       96 
102 
     | 
    
         
             
            			each_char do |c|
         
     | 
| 
       97 
103 
     | 
    
         
             
            				w = width(c)
         
     | 
| 
         @@ -102,12 +108,14 @@ module AnsiSys 
     | 
|
| 
       102 
108 
     | 
    
         
             
            		end
         
     | 
| 
       103 
109 
     | 
    
         | 
| 
       104 
110 
     | 
    
         
             
            		private
         
     | 
| 
      
 111 
     | 
    
         
            +
            		# iterator on each character
         
     | 
| 
       105 
112 
     | 
    
         
             
            		def each_char(&block)
         
     | 
| 
       106 
113 
     | 
    
         
             
            			@string.scan(/./).each do |c|
         
     | 
| 
       107 
114 
     | 
    
         
             
            				yield(c)
         
     | 
| 
       108 
115 
     | 
    
         
             
            			end
         
     | 
| 
       109 
116 
     | 
    
         
             
            		end
         
     | 
| 
       110 
117 
     | 
    
         | 
| 
      
 118 
     | 
    
         
            +
            		# width of a character
         
     | 
| 
       111 
119 
     | 
    
         
             
            		def width(char)
         
     | 
| 
       112 
120 
     | 
    
         
             
            			if WIDTHS.has_key?(char)
         
     | 
| 
       113 
121 
     | 
    
         
             
            				return WIDTHS[char]
         
     | 
| 
         @@ -122,12 +130,13 @@ module AnsiSys 
     | 
|
| 
       122 
130 
     | 
    
         
             
            	end
         
     | 
| 
       123 
131 
     | 
    
         | 
| 
       124 
132 
     | 
    
         
             
            	class Cursor
         
     | 
| 
      
 133 
     | 
    
         
            +
            		# Escape sequence codes processed in this Class
         
     | 
| 
       125 
134 
     | 
    
         
             
            		CODE_LETTERS = %w(A B C D E F G H f)
         
     | 
| 
       126 
135 
     | 
    
         | 
| 
       127 
     | 
    
         
            -
            		attr_reader :cur_col
         
     | 
| 
       128 
     | 
    
         
            -
            		attr_reader :cur_row
         
     | 
| 
       129 
     | 
    
         
            -
            		attr_accessor :max_col
         
     | 
| 
       130 
     | 
    
         
            -
            		attr_accessor :max_row
         
     | 
| 
      
 136 
     | 
    
         
            +
            		attr_reader :cur_col	# current column number (1-)
         
     | 
| 
      
 137 
     | 
    
         
            +
            		attr_reader :cur_row	# current row number (1-)
         
     | 
| 
      
 138 
     | 
    
         
            +
            		attr_accessor :max_col	# maximum column number
         
     | 
| 
      
 139 
     | 
    
         
            +
            		attr_accessor :max_row	# maximum row number
         
     | 
| 
       131 
140 
     | 
    
         | 
| 
       132 
141 
     | 
    
         
             
            		def initialize(cur_col = 1, cur_row = 1, max_col = 80, max_row = 25)
         
     | 
| 
       133 
142 
     | 
    
         
             
            			@cur_col = cur_col
         
     | 
| 
         @@ -136,6 +145,8 @@ module AnsiSys 
     | 
|
| 
       136 
145 
     | 
    
         
             
            			@max_row = max_row
         
     | 
| 
       137 
146 
     | 
    
         
             
            		end
         
     | 
| 
       138 
147 
     | 
    
         | 
| 
      
 148 
     | 
    
         
            +
            		# applies self an escape sequence code that ends with _letter_ as String
         
     | 
| 
      
 149 
     | 
    
         
            +
            		# and with some _pars_ as Integers
         
     | 
| 
       139 
150 
     | 
    
         
             
            		def apply_code!(letter, *pars)
         
     | 
| 
       140 
151 
     | 
    
         
             
            			case letter
         
     | 
| 
       141 
152 
     | 
    
         
             
            			when 'A'
         
     | 
| 
         @@ -178,6 +189,7 @@ module AnsiSys 
     | 
|
| 
       178 
189 
     | 
    
         
             
            			return self
         
     | 
| 
       179 
190 
     | 
    
         
             
            		end
         
     | 
| 
       180 
191 
     | 
    
         | 
| 
      
 192 
     | 
    
         
            +
            		# changes current location for a character with _width_ to be echoed
         
     | 
| 
       181 
193 
     | 
    
         
             
            		def advance!(width = 1)
         
     | 
| 
       182 
194 
     | 
    
         
             
            			r = nil
         
     | 
| 
       183 
195 
     | 
    
         
             
            			@cur_col += width
         
     | 
| 
         @@ -195,21 +207,38 @@ module AnsiSys 
     | 
|
| 
       195 
207 
     | 
    
         
             
            	class SGR
         
     | 
| 
       196 
208 
     | 
    
         
             
            		extend CSSFormatter
         
     | 
| 
       197 
209 
     | 
    
         | 
| 
      
 210 
     | 
    
         
            +
            		# Escape sequence codes processed in this Class
         
     | 
| 
       198 
211 
     | 
    
         
             
            		CODE_LETTERS = %w(m)
         
     | 
| 
       199 
212 
     | 
    
         | 
| 
       200 
     | 
    
         
            -
            		 
     | 
| 
       201 
     | 
    
         
            -
            		attr_reader : 
     | 
| 
       202 
     | 
    
         
            -
             
     | 
| 
       203 
     | 
    
         
            -
            		 
     | 
| 
       204 
     | 
    
         
            -
            		attr_reader : 
     | 
| 
       205 
     | 
    
         
            -
             
     | 
| 
       206 
     | 
    
         
            -
            		 
     | 
| 
       207 
     | 
    
         
            -
            		attr_reader : 
     | 
| 
      
 213 
     | 
    
         
            +
            		# :normal, :bold, or :faint
         
     | 
| 
      
 214 
     | 
    
         
            +
            		attr_reader :intensity
         
     | 
| 
      
 215 
     | 
    
         
            +
             
     | 
| 
      
 216 
     | 
    
         
            +
            		# :off or :on
         
     | 
| 
      
 217 
     | 
    
         
            +
            		attr_reader :italic
         
     | 
| 
      
 218 
     | 
    
         
            +
             
     | 
| 
      
 219 
     | 
    
         
            +
            		# :none, :single, or :double
         
     | 
| 
      
 220 
     | 
    
         
            +
            		attr_reader :underline
         
     | 
| 
      
 221 
     | 
    
         
            +
             
     | 
| 
      
 222 
     | 
    
         
            +
            		# :off, :slow, or :rapid
         
     | 
| 
      
 223 
     | 
    
         
            +
            		attr_reader :blink
         
     | 
| 
      
 224 
     | 
    
         
            +
             
     | 
| 
      
 225 
     | 
    
         
            +
            		# :positive or :negative
         
     | 
| 
      
 226 
     | 
    
         
            +
            		attr_reader :image
         
     | 
| 
      
 227 
     | 
    
         
            +
             
     | 
| 
      
 228 
     | 
    
         
            +
            		# :off or :on
         
     | 
| 
      
 229 
     | 
    
         
            +
            		attr_reader :conceal
         
     | 
| 
      
 230 
     | 
    
         
            +
             
     | 
| 
      
 231 
     | 
    
         
            +
            		# :black, :red, :green, :yellow, :blue, :magenta, :cyan, or :white
         
     | 
| 
      
 232 
     | 
    
         
            +
            		attr_reader :foreground
         
     | 
| 
      
 233 
     | 
    
         
            +
             
     | 
| 
      
 234 
     | 
    
         
            +
            		# :black, :red, :green, :yellow, :blue, :magenta, :cyan, or :white
         
     | 
| 
      
 235 
     | 
    
         
            +
            		attr_reader :background
         
     | 
| 
       208 
236 
     | 
    
         | 
| 
       209 
237 
     | 
    
         
             
            		def initialize
         
     | 
| 
       210 
238 
     | 
    
         
             
            			reset!
         
     | 
| 
       211 
239 
     | 
    
         
             
            		end
         
     | 
| 
       212 
240 
     | 
    
         | 
| 
      
 241 
     | 
    
         
            +
            		# true if all the attributes are same
         
     | 
| 
       213 
242 
     | 
    
         
             
            		def ==(other)
         
     | 
| 
       214 
243 
     | 
    
         
             
            			instance_variables.each do |ivar|
         
     | 
| 
       215 
244 
     | 
    
         
             
            				return false unless instance_eval(ivar) == other.instance_eval(ivar)
         
     | 
| 
         @@ -217,10 +246,13 @@ module AnsiSys 
     | 
|
| 
       217 
246 
     | 
    
         
             
            			return true
         
     | 
| 
       218 
247 
     | 
    
         
             
            		end
         
     | 
| 
       219 
248 
     | 
    
         | 
| 
      
 249 
     | 
    
         
            +
            		# resets attributes
         
     | 
| 
       220 
250 
     | 
    
         
             
            		def reset!
         
     | 
| 
       221 
251 
     | 
    
         
             
            			apply_code!('m', 0)
         
     | 
| 
       222 
252 
     | 
    
         
             
            		end
         
     | 
| 
       223 
253 
     | 
    
         | 
| 
      
 254 
     | 
    
         
            +
            		# applies self an escape sequence code that ends with _letter_ as String
         
     | 
| 
      
 255 
     | 
    
         
            +
            		# and with some _pars_ as Integers
         
     | 
| 
       224 
256 
     | 
    
         
             
            		def apply_code!(letter = 'm', *pars)
         
     | 
| 
       225 
257 
     | 
    
         
             
            			raise AnsiSysError, "Invalid code for SGR: #{letter.inspect}" unless 'm' == letter
         
     | 
| 
       226 
258 
     | 
    
         
             
            			pars = [0] unless pars
         
     | 
| 
         @@ -264,6 +296,8 @@ module AnsiSys 
     | 
|
| 
       264 
296 
     | 
    
         
             
            			return self
         
     | 
| 
       265 
297 
     | 
    
         
             
            		end
         
     | 
| 
       266 
298 
     | 
    
         | 
| 
      
 299 
     | 
    
         
            +
            		# renders self as :html or :text _format_ - makes a <span> html scriptlet.
         
     | 
| 
      
 300 
     | 
    
         
            +
            		# _colors_ can be Screen.default_css_colors(_inverted_, _bright_).
         
     | 
| 
       267 
301 
     | 
    
         
             
            		def render(format = :html, position = :prefix, colors = Screen.default_css_colors)
         
     | 
| 
       268 
302 
     | 
    
         
             
            			case format
         
     | 
| 
       269 
303 
     | 
    
         
             
            			when :html
         
     | 
| 
         @@ -288,10 +322,12 @@ module AnsiSys 
     | 
|
| 
       288 
322 
     | 
    
         
             
            			end
         
     | 
| 
       289 
323 
     | 
    
         
             
            		end
         
     | 
| 
       290 
324 
     | 
    
         | 
| 
      
 325 
     | 
    
         
            +
            		# CSS stylelet
         
     | 
| 
       291 
326 
     | 
    
         
             
            		def css_style(colors = Screen.default_css_colors)
         
     | 
| 
       292 
327 
     | 
    
         
             
            			return CSSFormatter.hash_to_styles(css_styles(colors))
         
     | 
| 
       293 
328 
     | 
    
         
             
            		end
         
     | 
| 
       294 
329 
     | 
    
         | 
| 
      
 330 
     | 
    
         
            +
            		# a Hash of CSS stylelet
         
     | 
| 
       295 
331 
     | 
    
         
             
            		def css_styles(colors = Screen.default_css_colors)
         
     | 
| 
       296 
332 
     | 
    
         
             
            			r = Hash.new{|h, k| h[k] = Array.new}
         
     | 
| 
       297 
333 
     | 
    
         
             
            			# intensity is not (yet) implemented
         
     | 
| 
         @@ -335,7 +371,7 @@ module AnsiSys 
     | 
|
| 
       335 
371 
     | 
    
         
             
            			25 => [:blink, :off],
         
     | 
| 
       336 
372 
     | 
    
         
             
            			27 => [:image, :positive],
         
     | 
| 
       337 
373 
     | 
    
         
             
            			28 => [:conceal, :off],
         
     | 
| 
       338 
     | 
    
         
            -
            		}
         
     | 
| 
      
 374 
     | 
    
         
            +
            		}	# :nodoc:
         
     | 
| 
       339 
375 
     | 
    
         | 
| 
       340 
376 
     | 
    
         
             
            		COLOR = {
         
     | 
| 
       341 
377 
     | 
    
         
             
            			0 => :black,
         
     | 
| 
         @@ -346,17 +382,18 @@ module AnsiSys 
     | 
|
| 
       346 
382 
     | 
    
         
             
            			5 => :magenta,
         
     | 
| 
       347 
383 
     | 
    
         
             
            			6 => :cyan,
         
     | 
| 
       348 
384 
     | 
    
         
             
            			7 => :white,
         
     | 
| 
       349 
     | 
    
         
            -
            		}
         
     | 
| 
      
 385 
     | 
    
         
            +
            		}	# :nodoc:
         
     | 
| 
       350 
386 
     | 
    
         | 
| 
       351 
387 
     | 
    
         
             
            	end
         
     | 
| 
       352 
388 
     | 
    
         | 
| 
       353 
389 
     | 
    
         
             
            	class Screen
         
     | 
| 
       354 
     | 
    
         
            -
            		 
     | 
| 
      
 390 
     | 
    
         
            +
            		# Escape sequence codes processed in this Class
         
     | 
| 
      
 391 
     | 
    
         
            +
            		CODE_LETTERS = %w()	# :nodoc:
         
     | 
| 
       355 
392 
     | 
    
         | 
| 
       356 
393 
     | 
    
         
             
            		def self.default_foreground; :white; end
         
     | 
| 
       357 
394 
     | 
    
         
             
            		def self.default_background; :black; end
         
     | 
| 
       358 
395 
     | 
    
         | 
| 
       359 
     | 
    
         
            -
            		#  
     | 
| 
      
 396 
     | 
    
         
            +
            		# a Hash of color names for each intensity
         
     | 
| 
       360 
397 
     | 
    
         
             
            		def self.default_css_colors(inverted = false, bright = false)
         
     | 
| 
       361 
398 
     | 
    
         
             
            			r = {
         
     | 
| 
       362 
399 
     | 
    
         
             
            				:normal => {
         
     | 
| 
         @@ -407,6 +444,7 @@ module AnsiSys 
     | 
|
| 
       407 
444 
     | 
    
         
             
            			return r
         
     | 
| 
       408 
445 
     | 
    
         
             
            		end
         
     | 
| 
       409 
446 
     | 
    
         | 
| 
      
 447 
     | 
    
         
            +
            		# a Hash of CSS stylelet to be used in <head>
         
     | 
| 
       410 
448 
     | 
    
         
             
            		def self.css_styles(colors = Screen.default_css_colors, max_col = nil, max_row = nil)
         
     | 
| 
       411 
449 
     | 
    
         
             
            			h = {
         
     | 
| 
       412 
450 
     | 
    
         
             
            				'color' => [colors[:normal][:white]],
         
     | 
| 
         @@ -418,12 +456,17 @@ module AnsiSys 
     | 
|
| 
       418 
456 
     | 
    
         
             
            			return h
         
     | 
| 
       419 
457 
     | 
    
         
             
            		end
         
     | 
| 
       420 
458 
     | 
    
         | 
| 
      
 459 
     | 
    
         
            +
            		# CSS stylelet to be used in <head>
         
     | 
| 
       421 
460 
     | 
    
         
             
            		def self.css_style(*args)
         
     | 
| 
       422 
461 
     | 
    
         
             
            			return "pre.screen {\n\t" + CSSFormatter.hash_to_styles(self.css_styles(*args), ";\n\t") + ";\n}\n"
         
     | 
| 
       423 
462 
     | 
    
         
             
            		end
         
     | 
| 
       424 
463 
     | 
    
         | 
| 
      
 464 
     | 
    
         
            +
            		# a Hash of keys as rows,
         
     | 
| 
      
 465 
     | 
    
         
            +
            		# which each value a Hash of keys columns and each value as
         
     | 
| 
      
 466 
     | 
    
         
            +
            		# an Array of character, its width, and associated SGR
         
     | 
| 
       425 
467 
     | 
    
         
             
            		attr_reader :lines
         
     | 
| 
       426 
468 
     | 
    
         | 
| 
      
 469 
     | 
    
         
            +
            		# a Screen
         
     | 
| 
       427 
470 
     | 
    
         
             
            		def initialize(colors = Screen.default_css_colors, max_col = nil, max_row = nil)
         
     | 
| 
       428 
471 
     | 
    
         
             
            			@colors = colors
         
     | 
| 
       429 
472 
     | 
    
         
             
            			@max_col = max_col
         
     | 
| 
         @@ -431,14 +474,19 @@ module AnsiSys 
     | 
|
| 
       431 
474 
     | 
    
         
             
            			@lines = Hash.new{|hash, key| hash[key] = Hash.new}
         
     | 
| 
       432 
475 
     | 
    
         
             
            		end
         
     | 
| 
       433 
476 
     | 
    
         | 
| 
      
 477 
     | 
    
         
            +
            		# CSS stylelet to be used in <head>
         
     | 
| 
       434 
478 
     | 
    
         
             
            		def css_style
         
     | 
| 
       435 
479 
     | 
    
         
             
            			self.class.css_style(@colors, @max_col, @max_row)
         
     | 
| 
       436 
480 
     | 
    
         
             
            		end
         
     | 
| 
       437 
481 
     | 
    
         | 
| 
      
 482 
     | 
    
         
            +
            		# register the _char_ at a specific location on Screen
         
     | 
| 
       438 
483 
     | 
    
         
             
            		def write(char, char_width, col, row, sgr)
         
     | 
| 
       439 
484 
     | 
    
         
             
            			@lines[Integer(row)][Integer(col)] = [char, char_width, sgr.dup]
         
     | 
| 
       440 
485 
     | 
    
         
             
            		end
         
     | 
| 
       441 
486 
     | 
    
         | 
| 
      
 487 
     | 
    
         
            +
            		# render the characters into :html or :text
         
     | 
| 
      
 488 
     | 
    
         
            +
            		# Class name in CSS can be specified as _css_class_.
         
     | 
| 
      
 489 
     | 
    
         
            +
            		# Additional stylelet can be specified as _css_style_.
         
     | 
| 
       442 
490 
     | 
    
         
             
            		def render(format = :html, css_class = 'screen', css_style = nil)
         
     | 
| 
       443 
491 
     | 
    
         
             
            			result = case format
         
     | 
| 
       444 
492 
     | 
    
         
             
            			when :text
         
     | 
| 
         @@ -490,24 +538,33 @@ module AnsiSys 
     | 
|
| 
       490 
538 
     | 
    
         
             
            			return result
         
     | 
| 
       491 
539 
     | 
    
         
             
            		end
         
     | 
| 
       492 
540 
     | 
    
         | 
| 
       493 
     | 
    
         
            -
            		 
     | 
| 
      
 541 
     | 
    
         
            +
            		# applies self an escape sequence code that ends with _letter_ as String
         
     | 
| 
      
 542 
     | 
    
         
            +
            		# and with some _pars_ as Integers
         
     | 
| 
      
 543 
     | 
    
         
            +
            		def apply_code!(letter, *pars)
         
     | 
| 
       494 
544 
     | 
    
         
             
            			return self
         
     | 
| 
       495 
     | 
    
         
            -
            		end
         
     | 
| 
      
 545 
     | 
    
         
            +
            		end	# :nodoc:
         
     | 
| 
       496 
546 
     | 
    
         
             
            	end
         
     | 
| 
       497 
547 
     | 
    
         | 
| 
       498 
548 
     | 
    
         
             
            	class Terminal
         
     | 
| 
      
 549 
     | 
    
         
            +
            		# Escape sequence codes processed in this Class
         
     | 
| 
       499 
550 
     | 
    
         
             
            		CODE_LETTERS = %w(J K S T n s u)
         
     | 
| 
       500 
551 
     | 
    
         | 
| 
      
 552 
     | 
    
         
            +
            		# _csis_ is an Array of Code Sequence Introducers
         
     | 
| 
      
 553 
     | 
    
         
            +
            		# which can be \e[, \x9B, or both
         
     | 
| 
       501 
554 
     | 
    
         
             
            		def initialize(csis = ["\x1b["])
         
     | 
| 
       502 
555 
     | 
    
         
             
            			@lexer = Lexer.new(csis)
         
     | 
| 
       503 
556 
     | 
    
         
             
            			@stream = Array.new
         
     | 
| 
       504 
557 
     | 
    
         
             
            		end
         
     | 
| 
       505 
558 
     | 
    
         | 
| 
      
 559 
     | 
    
         
            +
            		# echoes _data_, a String of characters or escape sequences
         
     | 
| 
      
 560 
     | 
    
         
            +
            		# to the Terminal.
         
     | 
| 
      
 561 
     | 
    
         
            +
            		# This method actually just buffers the echoed data.
         
     | 
| 
       506 
562 
     | 
    
         
             
            		def echo(data)
         
     | 
| 
       507 
563 
     | 
    
         
             
            			@lexer.push(data)
         
     | 
| 
       508 
564 
     | 
    
         
             
            			return self
         
     | 
| 
       509 
565 
     | 
    
         
             
            		end
         
     | 
| 
       510 
566 
     | 
    
         | 
| 
      
 567 
     | 
    
         
            +
            		# CSS stylelet to be used in <head>
         
     | 
| 
       511 
568 
     | 
    
         
             
            		def css_style(format = :html, max_col = 80, max_row = nil, colors = Screen.default_css_colors)
         
     | 
| 
       512 
569 
     | 
    
         
             
            			case format
         
     | 
| 
       513 
570 
     | 
    
         
             
            			when :html
         
     | 
| 
         @@ -517,6 +574,9 @@ module AnsiSys 
     | 
|
| 
       517 
574 
     | 
    
         
             
            			end
         
     | 
| 
       518 
575 
     | 
    
         
             
            		end
         
     | 
| 
       519 
576 
     | 
    
         | 
| 
      
 577 
     | 
    
         
            +
            		# renders the echoed data as _format_ of :html or :text.
         
     | 
| 
      
 578 
     | 
    
         
            +
            		# _max_col_, _max_row_ can be specified as Integer.
         
     | 
| 
      
 579 
     | 
    
         
            +
            		# _colors_ can be Screen.default_css_colors(_inverted_, _bright_).
         
     | 
| 
       520 
580 
     | 
    
         
             
            		def render(format = :html, max_col = 80, max_row = nil, colors = Screen.default_css_colors, css_class = 'screen', css_style = nil)
         
     | 
| 
       521 
581 
     | 
    
         
             
            			screens = populate(format, max_col, max_row, colors)
         
     | 
| 
       522 
582 
     | 
    
         
             
            			separator = case format
         
     | 
| 
         @@ -528,6 +588,8 @@ module AnsiSys 
     | 
|
| 
       528 
588 
     | 
    
         
             
            			return screens.map{|screen| screen.render(format, css_class, css_style)}.join(separator)
         
     | 
| 
       529 
589 
     | 
    
         
             
            		end
         
     | 
| 
       530 
590 
     | 
    
         | 
| 
      
 591 
     | 
    
         
            +
            		# applies self an escape sequence code that ends with _letter_ as String
         
     | 
| 
      
 592 
     | 
    
         
            +
            		# and with some _pars_ as Integers
         
     | 
| 
       531 
593 
     | 
    
         
             
            		def apply_code!(letter, *pars)
         
     | 
| 
       532 
594 
     | 
    
         
             
            			case letter
         
     | 
| 
       533 
595 
     | 
    
         
             
            			when 'J'
         
     | 
| 
         @@ -628,6 +690,11 @@ module AnsiSys 
     | 
|
| 
       628 
690 
     | 
    
         
             
            end
         
     | 
| 
       629 
691 
     | 
    
         | 
| 
       630 
692 
     | 
    
         
             
            if defined?(Hiki) and Hiki::Plugin == self.class
         
     | 
| 
      
 693 
     | 
    
         
            +
            	# a Hiki plugin method to render a file of text with ANSI escape sequences.
         
     | 
| 
      
 694 
     | 
    
         
            +
            	# Attached file name should be specified as _file_name_.
         
     | 
| 
      
 695 
     | 
    
         
            +
            	# _max_row_ can be specified.
         
     | 
| 
      
 696 
     | 
    
         
            +
            	# _invert_ and _bright_ can be specified to change colors.
         
     | 
| 
      
 697 
     | 
    
         
            +
            	# _page_ can be specified to show a file attached to another page.
         
     | 
| 
       631 
698 
     | 
    
         
             
            	def ansi_screen(file_name, max_row = 80, invert = false, bright = true, page = @page)
         
     | 
| 
       632 
699 
     | 
    
         
             
            		return '' unless file_name =~ /\.(txt|rd|rb|c|pl|py|sh|java|html|htm|css|xml|xsl|sql|yaml)\z/i 
         
     | 
| 
       633 
700 
     | 
    
         
             
            		page_file_name = "#{page.untaint.escape}/#{file_name.untaint.escape}"
         
     | 
    
        data/website/index.html
    CHANGED
    
    | 
         @@ -35,10 +35,7 @@ 
     | 
|
| 
       35 
35 
     | 
    
         
             
                  <p>Get Version</p>
         
     | 
| 
       36 
36 
     | 
    
         
             
                  <a href="http://rubyforge.org/projects/ansi-sys" class="numbers">0.4.1</a>
         
     | 
| 
       37 
37 
     | 
    
         
             
                </div>
         
     | 
| 
       38 
     | 
    
         
            -
                < 
     | 
| 
       39 
     | 
    
         
            -
             
     | 
| 
       40 
     | 
    
         
            -
             
     | 
| 
       41 
     | 
    
         
            -
            	<h2>What</h2>
         
     | 
| 
      
 38 
     | 
    
         
            +
                <h2>What</h2>
         
     | 
| 
       42 
39 
     | 
    
         | 
| 
       43 
40 
     | 
    
         | 
| 
       44 
41 
     | 
    
         
             
            	<p>MS-DOS console (with <code>DEVICE=ANSI.SYS</code>), Linux
         
     | 
| 
         @@ -85,9 +82,12 @@ misc/plugin directory and configure Hiki to enable the plugin.</p> 
     | 
|
| 
       85 
82 
     | 
    
         
             
            	<p>As a Ruby library:</p>
         
     | 
| 
       86 
83 
     | 
    
         | 
| 
       87 
84 
     | 
    
         | 
| 
       88 
     | 
    
         
            -
            <pre> 
     | 
| 
      
 85 
     | 
    
         
            +
            <pre>
         
     | 
| 
      
 86 
     | 
    
         
            +
            require 'ansisys'
         
     | 
| 
      
 87 
     | 
    
         
            +
            terminal = AnsiSys::Terminal.new
         
     | 
| 
       89 
88 
     | 
    
         
             
            terminal.echo("ansi-escaped-text")
         
     | 
| 
       90 
     | 
    
         
            -
            terminal.render #=> HTML fragment 
     | 
| 
      
 89 
     | 
    
         
            +
            terminal.render #=> HTML fragment
         
     | 
| 
      
 90 
     | 
    
         
            +
            </pre>
         
     | 
| 
       91 
91 
     | 
    
         | 
| 
       92 
92 
     | 
    
         
             
            	<p>As a Hiki plugin:</p>
         
     | 
| 
       93 
93 
     | 
    
         | 
| 
         @@ -110,7 +110,7 @@ terminal.render #=> HTML fragment</pre> 
     | 
|
| 
       110 
110 
     | 
    
         
             
            	<p>Please refer
         
     | 
| 
       111 
111 
     | 
    
         
             
            <a href="rdoc/files/License_txt.html">License.txt</a></p>
         
     | 
| 
       112 
112 
     | 
    
         
             
                <p class="coda">
         
     | 
| 
       113 
     | 
    
         
            -
                  zunda,  
     | 
| 
      
 113 
     | 
    
         
            +
                  zunda, 3rd November 2007<br>
         
     | 
| 
       114 
114 
     | 
    
         
             
                  Theme extended from <a href="http://rb2js.rubyforge.org/">Paul Battley</a>
         
     | 
| 
       115 
115 
     | 
    
         
             
                </p>
         
     | 
| 
       116 
116 
     | 
    
         
             
            </div>
         
     | 
    
        data/website/index.txt
    CHANGED
    
    | 
         @@ -1,8 +1,5 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            h1. Ruby-ANSI.SYS
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
     | 
    
         
            -
            h1. → 'ansi-sys'
         
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
       6 
3 
     | 
    
         
             
            h2. What
         
     | 
| 
       7 
4 
     | 
    
         | 
| 
       8 
5 
     | 
    
         
             
            MS-DOS console (with <code>DEVICE=ANSI.SYS</code>), Linux
         
     | 
| 
         @@ -41,9 +38,12 @@ h2. Usage 
     | 
|
| 
       41 
38 
     | 
    
         | 
| 
       42 
39 
     | 
    
         
             
            As a Ruby library:
         
     | 
| 
       43 
40 
     | 
    
         | 
| 
       44 
     | 
    
         
            -
            <pre> 
     | 
| 
      
 41 
     | 
    
         
            +
            <pre>
         
     | 
| 
      
 42 
     | 
    
         
            +
            require 'ansisys'
         
     | 
| 
      
 43 
     | 
    
         
            +
            terminal = AnsiSys::Terminal.new
         
     | 
| 
       45 
44 
     | 
    
         
             
            terminal.echo("ansi-escaped-text")
         
     | 
| 
       46 
     | 
    
         
            -
            terminal.render #=> HTML fragment 
     | 
| 
      
 45 
     | 
    
         
            +
            terminal.render #=> HTML fragment
         
     | 
| 
      
 46 
     | 
    
         
            +
            </pre>
         
     | 
| 
       47 
47 
     | 
    
         | 
| 
       48 
48 
     | 
    
         
             
            As a Hiki plugin:
         
     | 
| 
       49 
49 
     | 
    
         | 
| 
         @@ -1,12 +1,12 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            body {
         
     | 
| 
       2 
     | 
    
         
            -
              background-color: # 
     | 
| 
      
 2 
     | 
    
         
            +
              background-color: #FFB;
         
     | 
| 
       3 
3 
     | 
    
         
             
              font-family: "Georgia", sans-serif;
         
     | 
| 
       4 
4 
     | 
    
         
             
              line-height: 1.6em;
         
     | 
| 
       5 
5 
     | 
    
         
             
              padding: 1.6em 0 0 0;
         
     | 
| 
       6 
     | 
    
         
            -
              color: # 
     | 
| 
      
 6 
     | 
    
         
            +
              color: #000;
         
     | 
| 
       7 
7 
     | 
    
         
             
            }
         
     | 
| 
       8 
8 
     | 
    
         
             
            h1, h2, h3, h4, h5, h6 {
         
     | 
| 
       9 
     | 
    
         
            -
              color: # 
     | 
| 
      
 9 
     | 
    
         
            +
              color: #008;
         
     | 
| 
       10 
10 
     | 
    
         
             
            }
         
     | 
| 
       11 
11 
     | 
    
         
             
            h1 { 
         
     | 
| 
       12 
12 
     | 
    
         
             
              font-family: sans-serif;
         
     | 
| 
         @@ -22,7 +22,7 @@ li { 
     | 
|
| 
       22 
22 
     | 
    
         
             
              list-style-type: square;
         
     | 
| 
       23 
23 
     | 
    
         
             
            }
         
     | 
| 
       24 
24 
     | 
    
         
             
            a {
         
     | 
| 
       25 
     | 
    
         
            -
              color: # 
     | 
| 
      
 25 
     | 
    
         
            +
              color: #008;
         
     | 
| 
       26 
26 
     | 
    
         
             
              font-weight: normal;
         
     | 
| 
       27 
27 
     | 
    
         
             
              text-decoration: underline;
         
     | 
| 
       28 
28 
     | 
    
         
             
            }
         
     | 
| 
         @@ -45,14 +45,14 @@ blockquote { 
     | 
|
| 
       45 
45 
     | 
    
         | 
| 
       46 
46 
     | 
    
         
             
            table {
         
     | 
| 
       47 
47 
     | 
    
         
             
              line-height: 1.4em;
         
     | 
| 
       48 
     | 
    
         
            -
              color: # 
     | 
| 
      
 48 
     | 
    
         
            +
              color: #008;
         
     | 
| 
       49 
49 
     | 
    
         
             
              background-color: #111;
         
     | 
| 
       50 
50 
     | 
    
         
             
              padding: 2px 10px 2px 10px;
         
     | 
| 
       51 
51 
     | 
    
         
             
            	border-style: dashed;
         
     | 
| 
       52 
52 
     | 
    
         
             
            }
         
     | 
| 
       53 
53 
     | 
    
         | 
| 
       54 
54 
     | 
    
         
             
            th {
         
     | 
| 
       55 
     | 
    
         
            -
            	color: # 
     | 
| 
      
 55 
     | 
    
         
            +
            	color: #008;
         
     | 
| 
       56 
56 
     | 
    
         
             
            }
         
     | 
| 
       57 
57 
     | 
    
         | 
| 
       58 
58 
     | 
    
         
             
            td {
         
     | 
| 
         @@ -75,8 +75,8 @@ pre, code { 
     | 
|
| 
       75 
75 
     | 
    
         
             
              line-height: 1.4em;
         
     | 
| 
       76 
76 
     | 
    
         
             
            }
         
     | 
| 
       77 
77 
     | 
    
         
             
            pre {
         
     | 
| 
       78 
     | 
    
         
            -
              color: # 
     | 
| 
       79 
     | 
    
         
            -
              background-color: # 
     | 
| 
      
 78 
     | 
    
         
            +
              color: #0F0;
         
     | 
| 
      
 79 
     | 
    
         
            +
              background-color: #010;
         
     | 
| 
       80 
80 
     | 
    
         
             
              padding: 2px 10px 2px 10px;
         
     | 
| 
       81 
81 
     | 
    
         
             
            }
         
     | 
| 
       82 
82 
     | 
    
         
             
            .comment { color: #aaa; font-style: italic; }
         
     | 
| 
         @@ -95,12 +95,12 @@ pre { 
     | 
|
| 
       95 
95 
     | 
    
         
             
              text-align: right;
         
     | 
| 
       96 
96 
     | 
    
         
             
              font-family: sans-serif;
         
     | 
| 
       97 
97 
     | 
    
         
             
              font-weight: normal;
         
     | 
| 
       98 
     | 
    
         
            -
              background-color: # 
     | 
| 
       99 
     | 
    
         
            -
              color: # 
     | 
| 
      
 98 
     | 
    
         
            +
              background-color: #FFF;
         
     | 
| 
      
 99 
     | 
    
         
            +
              color: #008;
         
     | 
| 
       100 
100 
     | 
    
         
             
              padding: 15px 20px 10px 20px;
         
     | 
| 
       101 
101 
     | 
    
         
             
              margin: 0 auto;
         
     | 
| 
       102 
102 
     | 
    
         
             
            	margin-top: 15px;
         
     | 
| 
       103 
     | 
    
         
            -
              border: 3px solid # 
     | 
| 
      
 103 
     | 
    
         
            +
              border: 3px solid #000;
         
     | 
| 
       104 
104 
     | 
    
         
             
            }
         
     | 
| 
       105 
105 
     | 
    
         | 
| 
       106 
106 
     | 
    
         
             
            #version .numbers {
         
     | 
| 
         @@ -113,16 +113,16 @@ pre { 
     | 
|
| 
       113 
113 
     | 
    
         | 
| 
       114 
114 
     | 
    
         
             
            #version p {
         
     | 
| 
       115 
115 
     | 
    
         
             
              text-decoration: none;
         
     | 
| 
       116 
     | 
    
         
            -
            	color: # 
     | 
| 
       117 
     | 
    
         
            -
            	background-color: # 
     | 
| 
      
 116 
     | 
    
         
            +
            	color: #008;
         
     | 
| 
      
 117 
     | 
    
         
            +
            	background-color: #FFF;
         
     | 
| 
       118 
118 
     | 
    
         
             
            	margin: 0;
         
     | 
| 
       119 
119 
     | 
    
         
             
            	padding: 0;
         
     | 
| 
       120 
120 
     | 
    
         
             
            }
         
     | 
| 
       121 
121 
     | 
    
         | 
| 
       122 
122 
     | 
    
         
             
            #version a {
         
     | 
| 
       123 
123 
     | 
    
         
             
              text-decoration: none;
         
     | 
| 
       124 
     | 
    
         
            -
            	color: # 
     | 
| 
       125 
     | 
    
         
            -
            	background-color: # 
     | 
| 
      
 124 
     | 
    
         
            +
            	color: #008;
         
     | 
| 
      
 125 
     | 
    
         
            +
            	background-color: #FFF;
         
     | 
| 
       126 
126 
     | 
    
         
             
            }
         
     | 
| 
       127 
127 
     | 
    
         | 
| 
       128 
128 
     | 
    
         
             
            .clickable {
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,10 +1,10 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification 
         
     | 
| 
       2 
     | 
    
         
            -
            rubygems_version: 0.9. 
     | 
| 
      
 2 
     | 
    
         
            +
            rubygems_version: 0.9.2
         
     | 
| 
       3 
3 
     | 
    
         
             
            specification_version: 1
         
     | 
| 
       4 
4 
     | 
    
         
             
            name: ansi-sys
         
     | 
| 
       5 
5 
     | 
    
         
             
            version: !ruby/object:Gem::Version 
         
     | 
| 
       6 
     | 
    
         
            -
              version: 0. 
     | 
| 
       7 
     | 
    
         
            -
            date: 2007- 
     | 
| 
      
 6 
     | 
    
         
            +
              version: 0.5.0
         
     | 
| 
      
 7 
     | 
    
         
            +
            date: 2007-11-03 00:00:00 -10:00
         
     | 
| 
       8 
8 
     | 
    
         
             
            summary: Ruby-ANSI.SYS is a library to render texts with ANSI escape sequences.
         
     | 
| 
       9 
9 
     | 
    
         
             
            require_paths: 
         
     | 
| 
       10 
10 
     | 
    
         
             
            - lib
         
     |