class SuperDiff::Csi::FourBitColor
Constants
- COLORS_BY_CODE
- OPENING_REGEX
- VALID_CODES_BY_NAME
- VALID_CODE_RANGES
- VALID_NAMES
- VALID_TYPES
Attributes
name[R]
Public Class Methods
exists?(name)
click to toggle source
# File lib/super_diff/csi/four_bit_color.rb, line 33 def self.exists?(name) VALID_CODES_BY_NAME.has_key?(name) end
new(value, layer: nil)
click to toggle source
# File lib/super_diff/csi/four_bit_color.rb, line 41 def initialize(value, layer: nil) if value.is_a?(Symbol) @name = interpret_name!(value) @layer = interpret_layer!(layer) else pair = if value.start_with?("\e[") interpret_sequence!(value) else interpret_code!(value) end @name = pair.fetch(:name) @layer = pair.fetch(:layer) end end
opening_regex()
click to toggle source
# File lib/super_diff/csi/four_bit_color.rb, line 37 def self.opening_regex OPENING_REGEX end
Public Instance Methods
to_foreground()
click to toggle source
# File lib/super_diff/csi/four_bit_color.rb, line 63 def to_foreground self.class.new(name, layer: :foreground) end
to_s()
click to toggle source
# File lib/super_diff/csi/four_bit_color.rb, line 58 def to_s code = VALID_CODES_BY_NAME.fetch(name).fetch(layer) "\e[#{code}m" end
Private Instance Methods
interpret_code!(code)
click to toggle source
# File lib/super_diff/csi/four_bit_color.rb, line 95 def interpret_code!(code) if VALID_CODE_RANGES.none? { |range| range.cover?(code) } message = "#{code.inspect} is not a valid color code.\n" + "Valid codes are:\n" VALID_CODE_RANGES.each do |range| message << "- #{range.begin} through #{range.end}\n" end raise ArgumentError.new(message) end COLORS_BY_CODE.fetch(code) end
interpret_name!(name)
click to toggle source
# File lib/super_diff/csi/four_bit_color.rb, line 71 def interpret_name!(name) if !VALID_NAMES.include?(name) message = "#{name.inspect} is not a valid color name.\n" + "Valid names are:\n" VALID_NAMES.each do |valid_name| message << "- #{valid_name}" end raise ArgumentError.new(message) end name end
interpret_sequence!(sequence)
click to toggle source
# File lib/super_diff/csi/four_bit_color.rb, line 87 def interpret_sequence!(sequence) match = sequence.match(OPENING_REGEX) if match interpret_code!(match[1].to_i) end end