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
505 506 507 508 509 510 |
# File 'lib/ansisys.rb', line 505 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
502 503 504 |
# File 'lib/ansisys.rb', line 502 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().
495 496 497 |
# File 'lib/ansisys.rb', line 495 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>
482 483 484 485 486 487 488 489 490 491 |
# File 'lib/ansisys.rb', line 482 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
428 |
# File 'lib/ansisys.rb', line 428 def self.default_background; :black; end |
.default_css_colors(inverted = false, bright = false) ⇒ Object
a Hash of color names for each intensity
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 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 |
# File 'lib/ansisys.rb', line 431 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:
427 |
# File 'lib/ansisys.rb', line 427 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
578 579 580 |
# File 'lib/ansisys.rb', line 578 def apply_code!(letter, *pars) return self end |
#css_style ⇒ Object
CSS stylelet to be used in <head>
513 514 515 |
# File 'lib/ansisys.rb', line 513 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.
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 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 |
# File 'lib/ansisys.rb', line 525 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
518 519 520 |
# File 'lib/ansisys.rb', line 518 def write(char, char_width, col, row, sgr) @lines[Integer(row)][Integer(col)] = [char, char_width, sgr.dup] end |