Class: AnsiSys::Terminal

Inherits:
Object
  • Object
show all
Defined in:
lib/ansisys.rb

Constant Summary collapse

CODE_LETTERS =

Escape sequence codes processed in this Class

%w(J K S T n s u)

Instance Method Summary collapse

Constructor Details

#initialize(csis = ["\x1b["]) ⇒ Terminal

csis is an Array of Code Sequence Introducers which can be e[, x9B, or both



589
590
591
592
# File 'lib/ansisys.rb', line 589

def initialize(csis = ["\x1b["])
  @lexer = Lexer.new(csis)
  @stream = Array.new
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



630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
# File 'lib/ansisys.rb', line 630

def apply_code!(letter, *pars)
  case letter
  when 'J'
    cur_col = @cursor.cur_col
    cur_row = @cursor.cur_row
    lines = @screens[-1].lines
    if pars.empty? or 0 == pars[0]
      rs = lines.keys.select{|r| r > cur_row}
      cs = lines[cur_row].keys.select{|c| c >= cur_col}
    elsif 1 == pars[0]
      rs = lines.keys.select{|r| r < cur_row}
      cs = lines[cur_row].keys.select{|c| c <= cur_col}
    elsif 2 == pars[0]
      rs = lines.keys
      cs = []
      @cursor.apply_code!('H', 1, 1)
    end
    rs.each do |r|
      lines.delete(r)
    end
    cs.each do |c|
      lines[cur_row].delete(c)
    end
  when 'K'
    cur_col = @cursor.cur_col
    cur_row = @cursor.cur_row
    line = @screens[-1].lines[cur_row]
    if pars.empty? or 0 == pars[0]
      cs = line.keys.select{|c| c >= cur_col}
    elsif 1 == pars[0]
      cs = line.keys.select{|c| c <= cur_col}
    elsif 2 == pars[0]
      cs = line.keys
    end
    cs.each do |c|
      line.delete(c)
    end
  when 'S'
    lines = @screens[-1].lines
    n = pars.empty? ? 1 : pars[0]
    n.times do |l|
      lines.delete(l)
    end
    rs = lines.keys.sort
    rs.each do |r|
      lines[r-n] = lines[r]
      lines.delete(r)
    end
    @cursor.apply_code!('H', rs[-1] - n + 1, 1)
  when 'T'
    lines = @screens[-1].lines
    n = pars.empty? ? 1 : pars[0]
    rs = lines.keys.sort_by{|a| -a} # sort.reverse
    rs.each do |r|
      lines[r+n] = lines[r]
      lines.delete(r)
    end
    @cursor.apply_code!('H', rs[-1] - n + 1, 1)
  when 's'
    @stored_cursor = @cursor.dup
  when 'u'
    @cursor = @stored_cursor.dup if @stored_cursor
  end

  return self
end

#css_style(format = :html, max_col = 80, max_row = nil, colors = Screen.default_css_colors) ⇒ Object

CSS stylelet to be used in <head>



603
604
605
606
607
608
609
610
# File 'lib/ansisys.rb', line 603

def css_style(format = :html, max_col = 80, max_row = nil, colors = Screen.default_css_colors)
  case format
  when :html
    Screen.css_style(colors, max_col, max_row)
  when :text
    ''
  end
end

#echo(data) ⇒ Object

echoes data, a String of characters or escape sequences to the Terminal. This method actually just buffers the echoed data.



597
598
599
600
# File 'lib/ansisys.rb', line 597

def echo(data)
  @lexer.push(data)
  return self
end

#render(format = :html, max_col = 80, max_row = nil, colors = Screen.default_css_colors, css_class = nil, css_style = nil, kcode = nil) ⇒ Object

renders the echoed data as format of :html or :text. max_col, max_row can be specified as Integer. colors can be Screen.default_css_colors(inverted, bright).



615
616
617
618
619
620
621
622
623
624
625
626
# File 'lib/ansisys.rb', line 615

def render(format = :html, max_col = 80, max_row = nil, colors = Screen.default_css_colors, css_class = nil, css_style = nil, kcode = nil)
  css_class ||= 'screen'
  kcode ||= Guess.kcode(@lexer.buffer)
  screens = populate(format, max_col, max_row, colors, kcode)
  separator = case format
  when :html
    "\n"
  when :text
    "\n---\n"
  end
  return screens.map{|screen| screen.render(format, css_class, css_style)}.join(separator)
end