Newer
Older
sqlmarker / Unit_testing / Util / ANSIColors.php
<?php

class ANSIColors
{
    private $foreground_colors = array();
    private $background_colors = array();

    public function __construct()
    {
        // Set up shell colors
        $this->foreground_colors['black'] = '0;30';
        $this->foreground_colors['dark_gray'] = '1;30';
        $this->foreground_colors['blue'] = '0;34';
        $this->foreground_colors['light_blue'] = '1;34';
        $this->foreground_colors['green'] = '0;32';
        $this->foreground_colors['light_green'] = '1;32';
        $this->foreground_colors['cyan'] = '0;36';
        $this->foreground_colors['light_cyan'] = '1;36';
        $this->foreground_colors['red'] = '0;31';
        $this->foreground_colors['light_red'] = '1;31';
        $this->foreground_colors['purple'] = '0;35';
        $this->foreground_colors['light_purple'] = '1;35';
        $this->foreground_colors['brown'] = '0;33';
        $this->foreground_colors['yellow'] = '1;33';
        $this->foreground_colors['light_gray'] = '0;37';
        $this->foreground_colors['white'] = '1;37';

        $this->background_colors['black'] = '40';
        $this->background_colors['red'] = '41';
        $this->background_colors['green'] = '42';
        $this->background_colors['yellow'] = '43';
        $this->background_colors['blue'] = '44';
        $this->background_colors['magenta'] = '45';
        $this->background_colors['cyan'] = '46';
        $this->background_colors['light_gray'] = '47';
    }
    
    // Generate ANSI escape sequence.
    public function ansiEscape( $arg )
    {
        return sprintf( "\033[%sm", $arg );
    }

    // Return colorized string.
    public function colorizeString( $string, $foreground_color = null, $background_color = null )
    {
        return sprintf( "%s%s%s%s",
                        $this->setForegroundColor( $foreground_color ),
                        $this->setBackgroundColor( $background_color ),
                        $string,
                        $this->resetANSI()  );
    }

    // Set foreground color (if it exists).
    public function setForegroundColor( $foreground_color = null )
    {
        return ( isset( $this->foreground_colors[ $foreground_color ] ) )
                ? $this->ansiEscape( $this->foreground_colors[ $foreground_color ] ) : '';
    }

    // Set background color (if it exists).
    public function setBackgroundColor( $background_color = null )
    {
        return ( isset( $this->background_colors[ $background_color ] ) )
                ? $this->ansiEscape( $this->background_colors[ $background_color ] ) : '';
    }
    
    // Set the color.
    public function setColor( $foreground_color = null, $background_color = null )
    {
        return $this->setForegroundColor( $foreground_color ) . $this->setBackgroundColor( $background_color );
    }
    
    // Reset all ANSI formatting.
    public function resetANSI()
    {
        return $this->ansiEscape( '0' );
    }

    // Returns specified foreground color.
    public function getForegroundColor( $name )
    {
        return ( isset( $this->foreground_colors[$name] ) ) ? $this->foreground_colors[$name] : '';
    }

    // Returns specified background color.
    public function getBackgroundColor( $name )
    {
        return ( isset( $this->background_colors[$name] ) ) ? $this->background_colors[$name] : '';
    }

    // Returns all foreground color names.
    public function getForegroundColors()
    {
        return array_keys($this->foreground_colors);
    }

    // Returns all background color names.
    public function getBackgroundColors()
    {
        return array_keys($this->background_colors);
    }
}

?>