58 lines
1.5 KiB
Ruby
58 lines
1.5 KiB
Ruby
# Frozen-string-literal: true
|
|
|
|
module Jekyll
|
|
module Utils
|
|
module Ansi
|
|
extend self
|
|
|
|
ESCAPE = format("%c", 27)
|
|
MATCH = %r!#{ESCAPE}\[(?:\d+)(?:;\d+)*(j|k|m|s|u|A|B|G)|\e\(B\e\[m!ix.freeze
|
|
COLORS = {
|
|
:red => 31,
|
|
:green => 32,
|
|
:black => 30,
|
|
:magenta => 35,
|
|
:yellow => 33,
|
|
:white => 37,
|
|
:blue => 34,
|
|
:cyan => 36,
|
|
}.freeze
|
|
|
|
# Strip ANSI from the current string. It also strips cursor stuff,
|
|
# well some of it, and it also strips some other stuff that a lot of
|
|
# the other ANSI strippers don't.
|
|
|
|
def strip(str)
|
|
str.gsub MATCH, ""
|
|
end
|
|
|
|
#
|
|
|
|
def has?(str)
|
|
!!(str =~ MATCH)
|
|
end
|
|
|
|
# Reset the color back to the default color so that you do not leak any
|
|
# colors when you move onto the next line. This is probably normally
|
|
# used as part of a wrapper so that we don't leak colors.
|
|
|
|
def reset(str = "")
|
|
@ansi_reset ||= format("%c[0m", 27)
|
|
"#{@ansi_reset}#{str}"
|
|
end
|
|
|
|
# SEE: `self::COLORS` for a list of methods. They are mostly
|
|
# standard base colors supported by pretty much any xterm-color, we do
|
|
# not need more than the base colors so we do not include them.
|
|
# Actually... if I'm honest we don't even need most of the
|
|
# base colors.
|
|
|
|
COLORS.each do |color, num|
|
|
define_method color do |str|
|
|
"#{format("%c", 27)}[#{num}m#{str}#{reset}"
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|