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 / Color.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
Color.php
128 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 use IAWP_SCOPED\Symfony\Component\Console\Exception\InvalidArgumentException;
14 /**
15 * @author Fabien Potencier <fabien@symfony.com>
16 * @internal
17 */
18 final class Color
19 {
20 private const COLORS = ['black' => 0, 'red' => 1, 'green' => 2, 'yellow' => 3, 'blue' => 4, 'magenta' => 5, 'cyan' => 6, 'white' => 7, 'default' => 9];
21 private const BRIGHT_COLORS = ['gray' => 0, 'bright-red' => 1, 'bright-green' => 2, 'bright-yellow' => 3, 'bright-blue' => 4, 'bright-magenta' => 5, 'bright-cyan' => 6, 'bright-white' => 7];
22 private const AVAILABLE_OPTIONS = ['bold' => ['set' => 1, 'unset' => 22], 'underscore' => ['set' => 4, 'unset' => 24], 'blink' => ['set' => 5, 'unset' => 25], 'reverse' => ['set' => 7, 'unset' => 27], 'conceal' => ['set' => 8, 'unset' => 28]];
23 private $foreground;
24 private $background;
25 private $options = [];
26 public function __construct(string $foreground = '', string $background = '', array $options = [])
27 {
28 $this->foreground = $this->parseColor($foreground);
29 $this->background = $this->parseColor($background, \true);
30 foreach ($options as $option) {
31 if (!isset(self::AVAILABLE_OPTIONS[$option])) {
32 throw new InvalidArgumentException(\sprintf('Invalid option specified: "%s". Expected one of (%s).', $option, \implode(', ', \array_keys(self::AVAILABLE_OPTIONS))));
33 }
34 $this->options[$option] = self::AVAILABLE_OPTIONS[$option];
35 }
36 }
37 public function apply(string $text) : string
38 {
39 return $this->set() . $text . $this->unset();
40 }
41 public function set() : string
42 {
43 $setCodes = [];
44 if ('' !== $this->foreground) {
45 $setCodes[] = $this->foreground;
46 }
47 if ('' !== $this->background) {
48 $setCodes[] = $this->background;
49 }
50 foreach ($this->options as $option) {
51 $setCodes[] = $option['set'];
52 }
53 if (0 === \count($setCodes)) {
54 return '';
55 }
56 return \sprintf("\x1b[%sm", \implode(';', $setCodes));
57 }
58 public function unset() : string
59 {
60 $unsetCodes = [];
61 if ('' !== $this->foreground) {
62 $unsetCodes[] = 39;
63 }
64 if ('' !== $this->background) {
65 $unsetCodes[] = 49;
66 }
67 foreach ($this->options as $option) {
68 $unsetCodes[] = $option['unset'];
69 }
70 if (0 === \count($unsetCodes)) {
71 return '';
72 }
73 return \sprintf("\x1b[%sm", \implode(';', $unsetCodes));
74 }
75 private function parseColor(string $color, bool $background = \false) : string
76 {
77 if ('' === $color) {
78 return '';
79 }
80 if ('#' === $color[0]) {
81 $color = \substr($color, 1);
82 if (3 === \strlen($color)) {
83 $color = $color[0] . $color[0] . $color[1] . $color[1] . $color[2] . $color[2];
84 }
85 if (6 !== \strlen($color)) {
86 throw new InvalidArgumentException(\sprintf('Invalid "%s" color.', $color));
87 }
88 return ($background ? '4' : '3') . $this->convertHexColorToAnsi(\hexdec($color));
89 }
90 if (isset(self::COLORS[$color])) {
91 return ($background ? '4' : '3') . self::COLORS[$color];
92 }
93 if (isset(self::BRIGHT_COLORS[$color])) {
94 return ($background ? '10' : '9') . self::BRIGHT_COLORS[$color];
95 }
96 throw new InvalidArgumentException(\sprintf('Invalid "%s" color; expected one of (%s).', $color, \implode(', ', \array_merge(\array_keys(self::COLORS), \array_keys(self::BRIGHT_COLORS)))));
97 }
98 private function convertHexColorToAnsi(int $color) : string
99 {
100 $r = $color >> 16 & 255;
101 $g = $color >> 8 & 255;
102 $b = $color & 255;
103 // see https://github.com/termstandard/colors/ for more information about true color support
104 if ('truecolor' !== \getenv('COLORTERM')) {
105 return (string) $this->degradeHexColorToAnsi($r, $g, $b);
106 }
107 return \sprintf('8;2;%d;%d;%d', $r, $g, $b);
108 }
109 private function degradeHexColorToAnsi(int $r, int $g, int $b) : int
110 {
111 if (0 === \round($this->getSaturation($r, $g, $b) / 50)) {
112 return 0;
113 }
114 return \round($b / 255) << 2 | \round($g / 255) << 1 | \round($r / 255);
115 }
116 private function getSaturation(int $r, int $g, int $b) : int
117 {
118 $r = $r / 255;
119 $g = $g / 255;
120 $b = $b / 255;
121 $v = \max($r, $g, $b);
122 if (0 === ($diff = $v - \min($r, $g, $b))) {
123 return 0;
124 }
125 return (int) $diff * 100 / $v;
126 }
127 }
128