lib/rainbow/string_utils.rb
# frozen_string_literal: true
module Rainbow
class StringUtils
def self.wrap_with_sgr(string, codes)
return string if codes.empty?
seq = "\e[" + codes.join(";") + "m"
# Skip extending if there are no existing control sequences.
if string.include?("\e")
string = string.sub(/^(\e\[([\d;]+)m)+/) { |m| m + seq }
string += "\e[0m" unless string.end_with? "\e[0m"
string
else
seq + string + "\e[0m"
end
end
def self.uncolor(string)
# See http://www.commandlinefu.com/commands/view/3584/remove-color-codes-special-characters-with-sed
string.gsub(/\e\[[0-9;]*m/, '')
end
end
end