You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
118 lines
3.4 KiB
118 lines
3.4 KiB
# ==========================================
|
|
# Unity Project - A Test Framework for C
|
|
# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams
|
|
# [Released under MIT License. Please refer to license.txt for details]
|
|
# ==========================================
|
|
|
|
if RUBY_PLATFORM =~ /(win|w)32$/
|
|
begin
|
|
require 'Win32API'
|
|
rescue LoadError
|
|
puts 'ERROR! "Win32API" library not found'
|
|
puts '"Win32API" is required for colour on a windows machine'
|
|
puts ' try => "gem install Win32API" on the command line'
|
|
puts
|
|
end
|
|
# puts
|
|
# puts 'Windows Environment Detected...'
|
|
# puts 'Win32API Library Found.'
|
|
# puts
|
|
end
|
|
|
|
class ColourCommandLine
|
|
def initialize
|
|
return unless RUBY_PLATFORM =~ /(win|w)32$/
|
|
get_std_handle = Win32API.new('kernel32', 'GetStdHandle', ['L'], 'L')
|
|
@set_console_txt_attrb =
|
|
Win32API.new('kernel32', 'SetConsoleTextAttribute', %w[L N], 'I')
|
|
@hout = get_std_handle.call(-11)
|
|
end
|
|
|
|
def change_to(new_colour)
|
|
if RUBY_PLATFORM =~ /(win|w)32$/
|
|
@set_console_txt_attrb.call(@hout, win32_colour(new_colour))
|
|
else
|
|
"\033[30;#{posix_colour(new_colour)};22m"
|
|
end
|
|
end
|
|
|
|
def win32_colour(colour)
|
|
case colour
|
|
when :black then 0
|
|
when :dark_blue then 1
|
|
when :dark_green then 2
|
|
when :dark_cyan then 3
|
|
when :dark_red then 4
|
|
when :dark_purple then 5
|
|
when :dark_yellow, :narrative then 6
|
|
when :default_white, :default, :dark_white then 7
|
|
when :silver then 8
|
|
when :blue then 9
|
|
when :green, :success then 10
|
|
when :cyan, :output then 11
|
|
when :red, :failure then 12
|
|
when :purple then 13
|
|
when :yellow then 14
|
|
when :white then 15
|
|
else
|
|
0
|
|
end
|
|
end
|
|
|
|
def posix_colour(colour)
|
|
# ANSI Escape Codes - Foreground colors
|
|
# | Code | Color |
|
|
# | 39 | Default foreground color |
|
|
# | 30 | Black |
|
|
# | 31 | Red |
|
|
# | 32 | Green |
|
|
# | 33 | Yellow |
|
|
# | 34 | Blue |
|
|
# | 35 | Magenta |
|
|
# | 36 | Cyan |
|
|
# | 37 | Light gray |
|
|
# | 90 | Dark gray |
|
|
# | 91 | Light red |
|
|
# | 92 | Light green |
|
|
# | 93 | Light yellow |
|
|
# | 94 | Light blue |
|
|
# | 95 | Light magenta |
|
|
# | 96 | Light cyan |
|
|
# | 97 | White |
|
|
|
|
case colour
|
|
when :black then 30
|
|
when :red, :failure then 31
|
|
when :green, :success then 32
|
|
when :yellow then 33
|
|
when :blue, :narrative then 34
|
|
when :purple, :magenta then 35
|
|
when :cyan, :output then 36
|
|
when :white, :default_white then 37
|
|
when :default then 39
|
|
else
|
|
39
|
|
end
|
|
end
|
|
|
|
def out_c(mode, colour, str)
|
|
case RUBY_PLATFORM
|
|
when /(win|w)32$/
|
|
change_to(colour)
|
|
$stdout.puts str if mode == :puts
|
|
$stdout.print str if mode == :print
|
|
change_to(:default_white)
|
|
else
|
|
$stdout.puts("#{change_to(colour)}#{str}\033[0m") if mode == :puts
|
|
$stdout.print("#{change_to(colour)}#{str}\033[0m") if mode == :print
|
|
end
|
|
end
|
|
end
|
|
|
|
def colour_puts(role, str)
|
|
ColourCommandLine.new.out_c(:puts, role, str)
|
|
end
|
|
|
|
def colour_print(role, str)
|
|
ColourCommandLine.new.out_c(:print, role, str)
|
|
end
|
|
|