Class: SuperDiff::Csi::EightBitColor

Inherits:
Color
  • Object
show all
Defined in:
lib/super_diff/csi/eight_bit_color.rb

Constant Summary collapse

VALID_COMPONENT_RANGE =
(0..6)
VALID_CODE_RANGE =
(0..255)
VALID_CODES_BY_NAME =
{
  black: 0,
  red: 1,
  green: 2,
  yellow: 3,
  blue: 4,
  magenta: 5,
  cyan: 6,
  white: 7,
  bright_black: 8,
  bright_red: 9,
  bright_green: 10,
  bright_yellow: 11,
  bright_blue: 12,
  bright_magenta: 13,
  bright_cyan: 14,
  bright_white: 15
}.freeze
STARTING_INDICES =
{
  standard: 0,
  high_intensity: 8,
  grayscale: 232
}.freeze
VALID_PAIR_TYPES =
STARTING_INDICES.keys
VALID_PAIR_INDEX_RANGES =
{
  standard: 0..7,
  high_intensity: 0..7,
  grayscale: 0..23
}.freeze
LEADING_CODES_BY_LAYER =
{ foreground: 38, background: 48 }.freeze
LAYERS_BY_LEADING_CODE =
LEADING_CODES_BY_LAYER.invert.freeze
SERIAL_CODE =
5
OPENING_REGEX =
/\e\[(\d+);#{SERIAL_CODE};(\d+)m/

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Color

#background?, exists?, #foreground?, resolve, sub_colorized_areas_in

Constructor Details

#initialize(value = nil, layer: nil, red: nil, green: nil, blue: nil, type: nil, index: nil) ⇒ EightBitColor

Returns a new instance of EightBitColor.



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/super_diff/csi/eight_bit_color.rb', line 46

def initialize(
  value = nil,
  layer: nil,
  red: nil,
  green: nil,
  blue: nil,
  type: nil,
  index: nil
)
  super()
  if value
    case value
    when Symbol
      @code = interpret_color_name!(value)
      @layer = interpret_layer!(layer)
    when Array
      @code = interpret_pair!(type: type, index: index)
      @layer = interpret_layer!(layer)
    else
      if value.is_a?(String) && value.start_with?("\e[")
        pair = interpret_sequence!(value)
        @code = pair.fetch(:code)
        @layer = pair.fetch(:layer)
      else
        @code = interpret_code!(value)
        @layer = interpret_layer!(layer)
      end
    end
  else
    @code = interpret_triplet!(red: red, green: green, blue: blue)
    @layer = interpret_layer!(layer)
  end
end

Class Method Details

.opening_regexObject



42
43
44
# File 'lib/super_diff/csi/eight_bit_color.rb', line 42

def self.opening_regex
  OPENING_REGEX
end

Instance Method Details

#to_foregroundObject



84
85
86
# File 'lib/super_diff/csi/eight_bit_color.rb', line 84

def to_foreground
  self.class.new(code, layer: :foreground)
end

#to_sObject



80
81
82
# File 'lib/super_diff/csi/eight_bit_color.rb', line 80

def to_s
  "\e[#{leading_code};#{SERIAL_CODE};#{code}m"
end