class SuperDiff::Csi::ColorizedDocument

Attributes

color_sequences_open_in_parent[R]

Public Class Methods

new(&block) click to toggle source
Calls superclass method
# File lib/super_diff/csi/colorized_document.rb, line 4
def initialize(&block)
  @color_sequences_open_in_parent = []
  super
end

Protected Instance Methods

colorize_block(colors, opts, &block) click to toggle source
# File lib/super_diff/csi/colorized_document.rb, line 11
def colorize_block(colors, opts, &block)
  color_sequence = build_initial_color_sequence_from(colors, opts)

  if color_sequences_open_in_parent.any?
    add_part(Csi.reset_sequence)
  end

  add_part(color_sequence)
  color_sequences_open_in_parent << color_sequence
  evaluate_block(&block)
  add_part(Csi.reset_sequence)

  color_sequence_to_reopen = color_sequences_open_in_parent.pop
  if color_sequences_open_in_parent.any?
    add_part(color_sequence_to_reopen)
  end
end
colorize_inline(contents, colors, opts) click to toggle source
# File lib/super_diff/csi/colorized_document.rb, line 29
def colorize_inline(contents, colors, opts)
  color_sequence = build_initial_color_sequence_from(colors, opts)

  add_part(color_sequence)

  contents.each do |content|
    if content.is_a?(self.class)
      content.each do |part|
        if part.is_a?(ColorSequenceBlock)
          add_part(Csi.reset_sequence)
        end

        add_part(part)

        if part.is_a?(ResetSequence)
          add_part(color_sequence)
        end
      end
    else
      add_part(content)
    end
  end

  add_part(Csi.reset_sequence)
end

Private Instance Methods

build_initial_color_sequence_from(colors, opts) click to toggle source
# File lib/super_diff/csi/colorized_document.rb, line 59
def build_initial_color_sequence_from(colors, opts)
  ColorSequenceBlock.new(colors).tap do |sequence|
    if opts[:fg]
      sequence << Color.resolve(opts[:fg], layer: :foreground)
    end

    if opts[:bg]
      sequence << Color.resolve(opts[:bg], layer: :background)
    end
  end
end