silverstripe-framework/dev/Cli.php
Sean Harvey b35fb2b5ad BUGFIX #4572 Fixed Windows failure on SS_Cli::supports_colour() because posix functions are not supported
git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/branches/2.4@100560 467b73ca-7a2a-4603-9d3b-597d59a354a9
2011-02-02 14:18:49 +13:00

81 lines
2.2 KiB
PHP

<?php
/**
* Class to facilitate command-line output.
* Support less-trivial output stuff such as colours (on xterm-color)
*
* @package sapphire
* @subpackage dev
*/
class SS_Cli extends Object {
/**
* Returns true if the current STDOUT supports the use of colour control codes.
*/
static function supports_colour() {
if(!defined('STDOUT')) define('STDOUT', fopen("php://stdout","w"));
return function_exists('posix_isatty') ? @posix_isatty(STDOUT) : false;
}
/**
* Return text encoded for CLI output, optionally coloured
* @param string $fgColour The foreground colour - black, red, green, yellow, blue, magenta, cyan, white. Null is default.
* @param string $bgColour The foreground colour - black, red, green, yellow, blue, magenta, cyan, white. Null is default.
* @param string $bold A boolean variable - bold or not.
*/
static function text($text, $fgColour = null, $bgColour = null, $bold = false) {
if(!self::supports_colour()) return $text;
if($fgColour || $bgColour || $bold) {
$prefix = self::start_colour($fgColour, $bgColour, $bold);
$suffix = self::end_colour();
} else {
$prefix = $suffix = "";
}
return $prefix . $text . $suffix;
}
/**
* Send control codes for changing text to the given colour
* @param string $fgColour The foreground colour - black, red, green, yellow, blue, magenta, cyan, white. Null is default.
* @param string $bgColour The foreground colour - black, red, green, yellow, blue, magenta, cyan, white. Null is default.
* @param string $bold A boolean variable - bold or not.
*/
static function start_colour($fgColour = null, $bgColour = null, $bold = false) {
if(!self::supports_colour()) return "";
$colours = array(
'black' => 0,
'red' => 1,
'green' => 2,
'yellow' => 3,
'blue' => 4,
'magenta' => 5,
'cyan' => 6,
'white' => 7,
);
$prefix = "";
if($fgColour || $bold) {
if(!$fgColour) $fgColour = "white";
$prefix .= "\033[" . ($bold ? "1;" :"") . "3" . $colours[$fgColour] . "m";
}
if($bgColour) {
$prefix .= "\033[4" . $colours[$bgColour] . "m";
}
return $prefix;
}
/**
* Send control codes for returning to normal colour
*/
static function end_colour() {
return self::supports_colour() ? "\033[0m" : "";
}
}
?>