X-Git-Url: http://www.aleph1.co.uk/gitweb/?a=blobdiff_plain;ds=sidebyside;f=vendor%2Fsebastian%2Fenvironment%2Fsrc%2FConsole.php;fp=vendor%2Fsebastian%2Fenvironment%2Fsrc%2FConsole.php;h=2aff1d6581190a0771042e5de4349aa321002f74;hb=a2bd1bf0c2c1f1a17d188f4dc0726a45494cefae;hp=0000000000000000000000000000000000000000;hpb=57c063afa3f66b07c4bbddc2d6129a96d90f0aad;p=yaffs-website diff --git a/vendor/sebastian/environment/src/Console.php b/vendor/sebastian/environment/src/Console.php new file mode 100644 index 000000000..2aff1d658 --- /dev/null +++ b/vendor/sebastian/environment/src/Console.php @@ -0,0 +1,113 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace SebastianBergmann\Environment; + +/** + */ +class Console +{ + const STDIN = 0; + const STDOUT = 1; + const STDERR = 2; + + /** + * Returns true if STDOUT supports colorization. + * + * This code has been copied and adapted from + * Symfony\Component\Console\Output\OutputStream. + * + * @return bool + */ + public function hasColorSupport() + { + if (DIRECTORY_SEPARATOR == '\\') { + return false !== getenv('ANSICON') || 'ON' === getenv('ConEmuANSI') || 'xterm' === getenv('TERM'); + } + + if (!defined('STDOUT')) { + return false; + } + + return $this->isInteractive(STDOUT); + } + + /** + * Returns the number of columns of the terminal. + * + * @return int + */ + public function getNumberOfColumns() + { + if (DIRECTORY_SEPARATOR == '\\') { + $columns = 80; + + if (preg_match('/^(\d+)x\d+ \(\d+x(\d+)\)$/', trim(getenv('ANSICON')), $matches)) { + $columns = $matches[1]; + } elseif (function_exists('proc_open')) { + $process = proc_open( + 'mode CON', + array( + 1 => array('pipe', 'w'), + 2 => array('pipe', 'w') + ), + $pipes, + null, + null, + array('suppress_errors' => true) + ); + + if (is_resource($process)) { + $info = stream_get_contents($pipes[1]); + + fclose($pipes[1]); + fclose($pipes[2]); + proc_close($process); + + if (preg_match('/--------+\r?\n.+?(\d+)\r?\n.+?(\d+)\r?\n/', $info, $matches)) { + $columns = $matches[2]; + } + } + } + + return $columns - 1; + } + + if (!$this->isInteractive(self::STDIN)) { + return 80; + } + + if (function_exists('shell_exec') && preg_match('#\d+ (\d+)#', shell_exec('stty size'), $match) === 1) { + if ((int) $match[1] > 0) { + return (int) $match[1]; + } + } + + if (function_exists('shell_exec') && preg_match('#columns = (\d+);#', shell_exec('stty'), $match) === 1) { + if ((int) $match[1] > 0) { + return (int) $match[1]; + } + } + + return 80; + } + + /** + * Returns if the file descriptor is an interactive terminal or not. + * + * @param int|resource $fileDescriptor + * + * @return bool + */ + public function isInteractive($fileDescriptor = self::STDOUT) + { + return function_exists('posix_isatty') && @posix_isatty($fileDescriptor); + } +}