robustify Ansi module a bit

This commit is contained in:
josh committed 2018-11-12 21:50:16 -05:00
1 parent 7869d38dd8
commit 88fd4bd405
2 files changed
+123 -26

No files matched your search

+53 -21
View File
@@ -3,6 +3,8 @@ module Rscons
module Ansi
class << self
RESET = "\e[0m"
# Write a message to an IO with ANSI escape codes.
#
# @param io [IO]
@@ -17,27 +19,57 @@ module Rscons
do_color = do_ansi?(io)
end
out = ""
message.each do |m|
if m.is_a?(String)
out += m
elsif do_color
case m
when :red
out += "\e[0;31m"
when :green
out += "\e[0;32m"
when :yellow
out += "\e[0;33m"
when :blue
out += "\e[0;34m"
when :magenta
out += "\e[0;35m"
when :cyan
out += "\e[0;36m"
when :white
out += "\e[0;37m"
when :reset
out += "\e[0m"
if do_color
current_color = RESET
desired_color = RESET
message.each do |m|
if m.is_a?(String)
lines = m.split("\n", -1)
lines.each_with_index do |line, i|
if line != ""
if current_color != desired_color
out += desired_color
current_color = desired_color
end
out += line
end
if i < lines.size - 1
# A newline follows
if current_color != RESET
out += RESET
current_color = RESET
end
out += "\n"
end
end
else
case m
when :red; desired_color = "\e[0;31m"
when :green; desired_color = "\e[0;32m"
when :yellow; desired_color = "\e[0;33m"
when :blue; desired_color = "\e[0;34m"
when :magenta; desired_color = "\e[0;35m"
when :cyan; desired_color = "\e[0;36m"
when :white; desired_color = "\e[0;37m"
when :boldred; desired_color = "\e[1;31m"
when :boldgreen; desired_color = "\e[1;32m"
when :boldyellow; desired_color = "\e[1;33m"
when :boldblue; desired_color = "\e[1;34m"
when :boldmagenta; desired_color = "\e[1;35m"
when :boldcyan; desired_color = "\e[1;36m"
when :boldwhite; desired_color = "\e[1;37m"
when :bold; desired_color = "\e[1m"
when :reset; desired_color = RESET
end
end
end
if current_color != RESET
out += RESET
end
else
message.each do |m|
if m.is_a?(String)
out += m
end
end
end