Class: AnsiSys::Screen
- Inherits:
-
Object
- Object
- AnsiSys::Screen
- Defined in:
- lib/ansisys.rb
Constant Summary collapse
- CODE_LETTERS =
Escape sequence codes processed in this Class
%w()
Instance Attribute Summary collapse
-
#lines ⇒ Object
readonly
a Hash of keys as rows, which each value a Hash of keys columns and each value as an Array of character, its width, and associated SGR.
Class Method Summary collapse
-
.css_style(*args) ⇒ Object
CSS stylelet to be used in <head>.
-
.css_styles(colors = Screen.default_css_colors, max_col = nil, max_row = nil) ⇒ Object
a Hash of CSS stylelet to be used in <head>.
- .default_background ⇒ Object
-
.default_css_colors(inverted = false, bright = false) ⇒ Object
a Hash of color names for each intensity.
-
.default_foreground ⇒ Object
:nodoc:.
Instance Method Summary collapse
-
#apply_code!(letter, *pars) ⇒ Object
applies self an escape sequence code that ends with letter as String and with some pars as Integers.
-
#css_style ⇒ Object
CSS stylelet to be used in <head>.
-
#initialize(colors = Screen.default_css_colors, max_col = nil, max_row = nil) ⇒ Screen
constructor
a Screen.
-
#render(format = :html, css_class = 'screen', css_style = nil) ⇒ Object
render the characters into :html or :text Class name in CSS can be specified as css_class.
-
#write(char, char_width, col, row, sgr) ⇒ Object
register the char at a specific location on Screen.
Constructor Details
#initialize(colors = Screen.default_css_colors, max_col = nil, max_row = nil) ⇒ Screen
a Screen
488 489 490 491 492 493 |
# File 'lib/ansisys.rb', line 488 def initialize(colors = Screen.default_css_colors, max_col = nil, max_row = nil) @colors = colors @max_col = max_col @max_row = max_row @lines = Hash.new{|hash, key| hash[key] = Hash.new} end |
Instance Attribute Details
#lines ⇒ Object (readonly)
a Hash of keys as rows, which each value a Hash of keys columns and each value as an Array of character, its width, and associated SGR
485 486 487 |
# File 'lib/ansisys.rb', line 485 def lines @lines end |
Class Method Details
.css_style(*args) ⇒ Object
CSS stylelet to be used in <head>. Takes the same arguments as Screen::css_styles().
478 479 480 |
# File 'lib/ansisys.rb', line 478 def self.css_style(*args) return "pre.screen {\n\t" + CSSFormatter.hash_to_styles(self.css_styles(*args), ";\n\t") + ";\n}\n" end |
.css_styles(colors = Screen.default_css_colors, max_col = nil, max_row = nil) ⇒ Object
a Hash of CSS stylelet to be used in <head>
465 466 467 468 469 470 471 472 473 474 |
# File 'lib/ansisys.rb', line 465 def self.css_styles(colors = Screen.default_css_colors, max_col = nil, max_row = nil) h = { 'color' => [colors[:normal][:white]], 'background-color' => [colors[:normal][:black]], 'padding' => ['0.5em'], } h['width'] = ["#{Float(max_col)/2}em"] if max_col #h['height'] = ["#{max_row}em"] if max_row # could not find appropriate unit return h end |
.default_background ⇒ Object
411 |
# File 'lib/ansisys.rb', line 411 def self.default_background; :black; end |
.default_css_colors(inverted = false, bright = false) ⇒ Object
a Hash of color names for each intensity
414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 |
# File 'lib/ansisys.rb', line 414 def self.default_css_colors(inverted = false, bright = false) r = { :normal => { :black => 'black', :red => 'maroon', :green => 'green', :yellow => 'olive', :blue => 'navy', :magenta => 'purple', :cyan => 'teal', :white => 'silver', }, :bold => { :black => 'gray', :red => 'red', :green => 'lime', :yellow => 'yellow', :blue => 'blue', :magenta => 'fuchsia', :cyan => 'cyan', :white => 'white' }, :faint => { :black => 'black', :red => 'maroon', :green => 'green', :yellow => 'olive', :blue => 'navy', :magenta => 'purple', :cyan => 'teal', :white => 'silver', }, } if bright r[:bold][:black] = 'black' [:normal, :faint].each do |i| r[i] = r[:bold] end end if inverted r.each_key do |i| r[i][:black], r[i][:white] = r[i][:white], r[i][:black] end end return r end |
.default_foreground ⇒ Object
:nodoc:
410 |
# File 'lib/ansisys.rb', line 410 def self.default_foreground; :white; end |
Instance Method Details
#apply_code!(letter, *pars) ⇒ Object
applies self an escape sequence code that ends with letter as String and with some pars as Integers
561 562 563 |
# File 'lib/ansisys.rb', line 561 def apply_code!(letter, *pars) return self end |
#css_style ⇒ Object
CSS stylelet to be used in <head>
496 497 498 |
# File 'lib/ansisys.rb', line 496 def css_style self.class.css_style(@colors, @max_col, @max_row) end |
#render(format = :html, css_class = 'screen', css_style = nil) ⇒ Object
render the characters into :html or :text Class name in CSS can be specified as css_class. Additional stylelet can be specified as css_style.
508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 |
# File 'lib/ansisys.rb', line 508 def render(format = :html, css_class = 'screen', css_style = nil) result = case format when :text '' when :html %Q|<pre#{css_class ? %Q[ class="#{css_class}"] : ''}#{css_style ? %Q| style="#{css_style}"| : ''}>\n| else raise AnsiSysError, "Invalid format option to render: #{format.inspect}" end unless @lines.keys.empty? prev_sgr = nil max_row = @lines.keys.max (1..max_row).each do |row| if @lines.has_key?(row) and not @lines[row].keys.empty? col = 1 while col <= @lines[row].keys.max if @lines[row].has_key?(col) and @lines[row][col] char, width, sgr = @lines[row][col] if prev_sgr != sgr result += prev_sgr.render(format, :postfix, @colors) if prev_sgr result += sgr.render(format, :prefix, @colors) prev_sgr = sgr end case format when :text result += char when :html result += WEBrick::HTMLUtils.escape(char) end col += width else result += ' ' col += 1 end end end result += "\n" if row < max_row end result += prev_sgr.render(format, :postfix, @colors) if prev_sgr end result += case format when :text '' when :html '</pre>' end return result end |
#write(char, char_width, col, row, sgr) ⇒ Object
register the char at a specific location on Screen
501 502 503 |
# File 'lib/ansisys.rb', line 501 def write(char, char_width, col, row, sgr) @lines[Integer(row)][Integer(col)] = [char, char_width, sgr.dup] end |