PluginProbe ʕ •ᴥ•ʔ
Independent Analytics – WordPress Analytics Plugin / 1.30.0
Independent Analytics – WordPress Analytics Plugin v1.30.0
2.15.5 2.15.4 2.15.3 2.15.2 2.15.1 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 3 years ago CI 3 years ago Command 3 years ago CommandLoader 3 years ago Completion 3 years ago DependencyInjection 3 years ago Descriptor 3 years ago Event 3 years ago EventListener 3 years ago Exception 3 years ago Formatter 3 years ago Helper 3 years ago Input 3 years ago Logger 3 years ago Output 3 years ago Question 3 years ago Resources 3 years ago SignalRegistry 3 years ago Style 3 years ago Tester 3 years ago Application.php 3 years ago Color.php 3 years ago ConsoleEvents.php 3 years ago Cursor.php 3 years ago SingleCommandApplication.php 3 years ago Terminal.php 3 years ago
Color.php
127 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 */
17 final class Color
18 {
19 private const COLORS = ['black' => 0, 'red' => 1, 'green' => 2, 'yellow' => 3, 'blue' => 4, 'magenta' => 5, 'cyan' => 6, 'white' => 7, 'default' => 9];
20 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];
21 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]];
22 private $foreground;
23 private $background;
24 private $options = [];
25 public function __construct(string $foreground = '', string $background = '', array $options = [])
26 {
27 $this->foreground = $this->parseColor($foreground);
28 $this->background = $this->parseColor($background, \true);
29 foreach ($options as $option) {
30 if (!isset(self::AVAILABLE_OPTIONS[$option])) {
31 throw new InvalidArgumentException(\sprintf('Invalid option specified: "%s". Expected one of (%s).', $option, \implode(', ', \array_keys(self::AVAILABLE_OPTIONS))));
32 }
33 $this->options[$option] = self::AVAILABLE_OPTIONS[$option];
34 }
35 }
36 public function apply(string $text) : string
37 {
38 return $this->set() . $text . $this->unset();
39 }
40 public function set() : string
41 {
42 $setCodes = [];
43 if ('' !== $this->foreground) {
44 $setCodes[] = $this->foreground;
45 }
46 if ('' !== $this->background) {
47 $setCodes[] = $this->background;
48 }
49 foreach ($this->options as $option) {
50 $setCodes[] = $option['set'];
51 }
52 if (0 === \count($setCodes)) {
53 return '';
54 }
55 return \sprintf("\x1b[%sm", \implode(';', $setCodes));
56 }
57 public function unset() : string
58 {
59 $unsetCodes = [];
60 if ('' !== $this->foreground) {
61 $unsetCodes[] = 39;
62 }
63 if ('' !== $this->background) {
64 $unsetCodes[] = 49;
65 }
66 foreach ($this->options as $option) {
67 $unsetCodes[] = $option['unset'];
68 }
69 if (0 === \count($unsetCodes)) {
70 return '';
71 }
72 return \sprintf("\x1b[%sm", \implode(';', $unsetCodes));
73 }
74 private function parseColor(string $color, bool $background = \false) : string
75 {
76 if ('' === $color) {
77 return '';
78 }
79 if ('#' === $color[0]) {
80 $color = \substr($color, 1);
81 if (3 === \strlen($color)) {
82 $color = $color[0] . $color[0] . $color[1] . $color[1] . $color[2] . $color[2];
83 }
84 if (6 !== \strlen($color)) {
85 throw new InvalidArgumentException(\sprintf('Invalid "%s" color.', $color));
86 }
87 return ($background ? '4' : '3') . $this->convertHexColorToAnsi(\hexdec($color));
88 }
89 if (isset(self::COLORS[$color])) {
90 return ($background ? '4' : '3') . self::COLORS[$color];
91 }
92 if (isset(self::BRIGHT_COLORS[$color])) {
93 return ($background ? '10' : '9') . self::BRIGHT_COLORS[$color];
94 }
95 throw new InvalidArgumentException(\sprintf('Invalid "%s" color; expected one of (%s).', $color, \implode(', ', \array_merge(\array_keys(self::COLORS), \array_keys(self::BRIGHT_COLORS)))));
96 }
97 private function convertHexColorToAnsi(int $color) : string
98 {
99 $r = $color >> 16 & 255;
100 $g = $color >> 8 & 255;
101 $b = $color & 255;
102 // see https://github.com/termstandard/colors/ for more information about true color support
103 if ('truecolor' !== \getenv('COLORTERM')) {
104 return (string) $this->degradeHexColorToAnsi($r, $g, $b);
105 }
106 return \sprintf('8;2;%d;%d;%d', $r, $g, $b);
107 }
108 private function degradeHexColorToAnsi(int $r, int $g, int $b) : int
109 {
110 if (0 === \round($this->getSaturation($r, $g, $b) / 50)) {
111 return 0;
112 }
113 return \round($b / 255) << 2 | \round($g / 255) << 1 | \round($r / 255);
114 }
115 private function getSaturation(int $r, int $g, int $b) : int
116 {
117 $r = $r / 255;
118 $g = $g / 255;
119 $b = $b / 255;
120 $v = \max($r, $g, $b);
121 if (0 === ($diff = $v - \min($r, $g, $b))) {
122 return 0;
123 }
124 return (int) $diff * 100 / $v;
125 }
126 }
127