PluginProbe ʕ •ᴥ•ʔ
Independent Analytics – WordPress Analytics Plugin / 2.2.0
Independent Analytics – WordPress Analytics Plugin v2.2.0
2.15.0 2.14.10 trunk 1.1 1.10 1.10.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.17.1 1.17.2 1.17.3 1.17.4 1.18 1.18.1 1.19.0 1.19.1 1.2 1.20.0 1.21.0 1.22.0 1.22.1 1.23.0 1.23.1 1.24.0 1.24.1 1.25.0 1.25.1 1.26.0 1.27.0 1.28.0 1.28.1 1.28.2 1.28.3 1.29.0 1.3 1.30.0 1.30.1 1.4 1.5 1.6 1.7 1.8 1.9 2.0.0 2.0.1 2.1.4 2.1.5 2.1.6 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.10 2.11.2 2.11.3 2.11.4 2.11.5 2.11.6 2.11.7 2.11.8 2.11.9 2.12.0 2.12.1 2.12.2 2.13.1 2.13.2 2.13.5 2.13.6 2.14.0 2.14.1 2.14.2 2.14.4 2.14.6 2.14.7 2.14.8 2.14.9 2.2.0 2.2.1 2.3.1 2.3.2 2.4.2 2.4.3 2.5.0 2.5.1 2.6.0 2.6.1 2.6.2 2.6.3 2.6.4 2.7.0 2.7.1 2.7.2 2.7.3 2.8.2 2.8.3 2.8.4 2.8.5 2.8.6 2.8.7 2.8.8 2.8.9 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7
independent-analytics / vendor / symfony / console / Terminal.php
independent-analytics / vendor / symfony / console Last commit date
Attribute 2 years ago CI 2 years ago Command 2 years ago CommandLoader 2 years ago Completion 2 years ago DependencyInjection 2 years ago Descriptor 2 years ago Event 2 years ago EventListener 2 years ago Exception 2 years ago Formatter 2 years ago Helper 2 years ago Input 2 years ago Logger 2 years ago Output 2 years ago Question 2 years ago Resources 2 years ago SignalRegistry 2 years ago Style 2 years ago Tester 2 years ago Application.php 2 years ago Color.php 2 years ago ConsoleEvents.php 2 years ago Cursor.php 2 years ago SingleCommandApplication.php 2 years ago Terminal.php 2 years ago
Terminal.php
152 lines
1 <?php
2
3 /*
4 * This file is part of the Symfony package.
5 *
6 * (c) Fabien Potencier <fabien@symfony.com>
7 *
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
10 */
11 namespace IAWP_SCOPED\Symfony\Component\Console;
12
13 /** @internal */
14 class Terminal
15 {
16 private static $width;
17 private static $height;
18 private static $stty;
19 /**
20 * Gets the terminal width.
21 *
22 * @return int
23 */
24 public function getWidth()
25 {
26 $width = \getenv('COLUMNS');
27 if (\false !== $width) {
28 return (int) \trim($width);
29 }
30 if (null === self::$width) {
31 self::initDimensions();
32 }
33 return self::$width ?: 80;
34 }
35 /**
36 * Gets the terminal height.
37 *
38 * @return int
39 */
40 public function getHeight()
41 {
42 $height = \getenv('LINES');
43 if (\false !== $height) {
44 return (int) \trim($height);
45 }
46 if (null === self::$height) {
47 self::initDimensions();
48 }
49 return self::$height ?: 50;
50 }
51 /**
52 * @internal
53 */
54 public static function hasSttyAvailable() : bool
55 {
56 if (null !== self::$stty) {
57 return self::$stty;
58 }
59 // skip check if shell_exec function is disabled
60 if (!\function_exists('shell_exec')) {
61 return \false;
62 }
63 return self::$stty = (bool) \shell_exec('stty 2> ' . ('\\' === \DIRECTORY_SEPARATOR ? 'NUL' : '/dev/null'));
64 }
65 private static function initDimensions()
66 {
67 if ('\\' === \DIRECTORY_SEPARATOR) {
68 $ansicon = \getenv('ANSICON');
69 if (\false !== $ansicon && \preg_match('/^(\\d+)x(\\d+)(?: \\((\\d+)x(\\d+)\\))?$/', \trim($ansicon), $matches)) {
70 // extract [w, H] from "wxh (WxH)"
71 // or [w, h] from "wxh"
72 self::$width = (int) $matches[1];
73 self::$height = isset($matches[4]) ? (int) $matches[4] : (int) $matches[2];
74 } elseif (!self::hasVt100Support() && self::hasSttyAvailable()) {
75 // only use stty on Windows if the terminal does not support vt100 (e.g. Windows 7 + git-bash)
76 // testing for stty in a Windows 10 vt100-enabled console will implicitly disable vt100 support on STDOUT
77 self::initDimensionsUsingStty();
78 } elseif (null !== ($dimensions = self::getConsoleMode())) {
79 // extract [w, h] from "wxh"
80 self::$width = (int) $dimensions[0];
81 self::$height = (int) $dimensions[1];
82 }
83 } else {
84 self::initDimensionsUsingStty();
85 }
86 }
87 /**
88 * Returns whether STDOUT has vt100 support (some Windows 10+ configurations).
89 */
90 private static function hasVt100Support() : bool
91 {
92 return \function_exists('sapi_windows_vt100_support') && \sapi_windows_vt100_support(\fopen('php://stdout', 'w'));
93 }
94 /**
95 * Initializes dimensions using the output of an stty columns line.
96 */
97 private static function initDimensionsUsingStty()
98 {
99 if ($sttyString = self::getSttyColumns()) {
100 if (\preg_match('/rows.(\\d+);.columns.(\\d+);/i', $sttyString, $matches)) {
101 // extract [w, h] from "rows h; columns w;"
102 self::$width = (int) $matches[2];
103 self::$height = (int) $matches[1];
104 } elseif (\preg_match('/;.(\\d+).rows;.(\\d+).columns/i', $sttyString, $matches)) {
105 // extract [w, h] from "; h rows; w columns"
106 self::$width = (int) $matches[2];
107 self::$height = (int) $matches[1];
108 }
109 }
110 }
111 /**
112 * Runs and parses mode CON if it's available, suppressing any error output.
113 *
114 * @return int[]|null An array composed of the width and the height or null if it could not be parsed
115 */
116 private static function getConsoleMode() : ?array
117 {
118 $info = self::readFromProcess('mode CON');
119 if (null === $info || !\preg_match('/--------+\\r?\\n.+?(\\d+)\\r?\\n.+?(\\d+)\\r?\\n/', $info, $matches)) {
120 return null;
121 }
122 return [(int) $matches[2], (int) $matches[1]];
123 }
124 /**
125 * Runs and parses stty -a if it's available, suppressing any error output.
126 */
127 private static function getSttyColumns() : ?string
128 {
129 return self::readFromProcess('stty -a | grep columns');
130 }
131 private static function readFromProcess(string $command) : ?string
132 {
133 if (!\function_exists('proc_open')) {
134 return null;
135 }
136 $descriptorspec = [1 => ['pipe', 'w'], 2 => ['pipe', 'w']];
137 $cp = \function_exists('sapi_windows_cp_set') ? \sapi_windows_cp_get() : 0;
138 $process = \proc_open($command, $descriptorspec, $pipes, null, null, ['suppress_errors' => \true]);
139 if (!\is_resource($process)) {
140 return null;
141 }
142 $info = \stream_get_contents($pipes[1]);
143 \fclose($pipes[1]);
144 \fclose($pipes[2]);
145 \proc_close($process);
146 if ($cp) {
147 \sapi_windows_cp_set($cp);
148 }
149 return $info;
150 }
151 }
152