120 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			120 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| # ==========================================
 | |
| #   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
 |