Skip to content

Commit b0d3016

Browse files
committed
update something. add new lib cli-utils
1 parent b21c7e9 commit b0d3016

File tree

6 files changed

+345
-157
lines changed

6 files changed

+345
-157
lines changed

src/Cli.php

Lines changed: 3 additions & 144 deletions
Original file line numberDiff line numberDiff line change
@@ -14,96 +14,6 @@
1414
*/
1515
class Cli
1616
{
17-
const NORMAL = 0;
18-
19-
// Foreground color
20-
const FG_BLACK = 30;
21-
const FG_RED = 31;
22-
const FG_GREEN = 32;
23-
const FG_BROWN = 33; // like yellow
24-
const FG_BLUE = 34;
25-
const FG_CYAN = 36;
26-
const FG_WHITE = 37;
27-
const FG_DEFAULT = 39;
28-
29-
// extra Foreground color
30-
const FG_DARK_GRAY = 90;
31-
const FG_LIGHT_RED = 91;
32-
const FG_LIGHT_GREEN = 92;
33-
const FG_LIGHT_YELLOW = 93;
34-
const FG_LIGHT_BLUE = 94;
35-
const FG_LIGHT_MAGENTA = 95;
36-
const FG_LIGHT_CYAN = 96;
37-
const FG_WHITE_W = 97;
38-
39-
// Background color
40-
const BG_BLACK = 40;
41-
const BG_RED = 41;
42-
const BG_GREEN = 42;
43-
const BG_BROWN = 43; // like yellow
44-
const BG_BLUE = 44;
45-
const BG_CYAN = 46;
46-
const BG_WHITE = 47;
47-
const BG_DEFAULT = 49;
48-
49-
// extra Background color
50-
const BG_DARK_GRAY = 100;
51-
const BG_LIGHT_RED = 101;
52-
const BG_LIGHT_GREEN = 102;
53-
const BG_LIGHT_YELLOW = 103;
54-
const BG_LIGHT_BLUE = 104;
55-
const BG_LIGHT_MAGENTA = 105;
56-
const BG_LIGHT_CYAN = 106;
57-
const BG_WHITE_W = 107;
58-
59-
// color option
60-
const BOLD = 1; // 加粗
61-
const FUZZY = 2; // 模糊(不是所有的终端仿真器都支持)
62-
const ITALIC = 3; // 斜体(不是所有的终端仿真器都支持)
63-
const UNDERSCORE = 4; // 下划线
64-
const BLINK = 5; // 闪烁
65-
const REVERSE = 7; // 颠倒的 交换背景色与前景色
66-
const CONCEALED = 8; // 隐匿的
67-
68-
/**
69-
* Regex to match tags
70-
* @var string
71-
*/
72-
const COLOR_TAG = '/<([a-z=;]+)>(.*?)<\/\\1>/s';
73-
74-
/**
75-
* some styles
76-
* @var array
77-
*/
78-
const STYLES = [
79-
'light_red' => '1;31',
80-
'light_green' => '1;32',
81-
'yellow' => '1;33',
82-
'light_blue' => '1;34',
83-
'magenta' => '1;35',
84-
'light_cyan' => '1;36',
85-
'white' => '1;37',
86-
'black' => '0;30',
87-
'red' => '0;31',
88-
'green' => '0;32',
89-
'brown' => '0;33',
90-
'blue' => '0;34',
91-
'cyan' => '0;36',
92-
93-
'bold' => '1',
94-
'underscore' => '4',
95-
'reverse' => '7',
96-
97-
//
98-
'suc' => '1;32',// same 'green' and 'bold'
99-
'success' => '1;32',
100-
'info' => '0;32',// same 'green'
101-
'comment' => '0;33',// same 'brown'
102-
'warning' => '0;30;43',
103-
'danger' => '0;31',// same 'red'
104-
'error' => '30;41',
105-
];
106-
10717
/*******************************************************************************
10818
* color render
10919
******************************************************************************/
@@ -113,60 +23,9 @@ class Cli
11323
* @param string|int|array $style
11424
* @return string
11525
*/
116-
public static function color($text, $style = null): string
117-
{
118-
if (!$text) {
119-
return $text;
120-
}
121-
122-
if (!self::isSupportColor()) {
123-
return self::clearColor($text);
124-
}
125-
126-
if (\is_string($style)) {
127-
$color = self::STYLES[$style] ?? '0';
128-
} elseif (\is_int($style)) {
129-
$color = $style;
130-
131-
// array: [self::FG_GREEN, self::BG_WHITE, self::UNDERSCORE]
132-
} elseif (\is_array($style)) {
133-
$color = implode(';', $style);
134-
} elseif (strpos($text, '<') !== false) {
135-
return self::renderColor($text);
136-
} else {
137-
return $text;
138-
}
139-
140-
// $result = chr(27). "$color{$text}" . chr(27) . chr(27) . "[0m". chr(27);
141-
return "\033[{$color}m{$text}\033[0m";
142-
}
143-
144-
public static function renderColor($text)
26+
public static function color(string $text, $style = null): string
14527
{
146-
if (!$text || false === strpos($text, '<')) {
147-
return $text;
148-
}
149-
150-
// if don't support output color text, clear color tag.
151-
if (!SysEnv::isSupportColor()) {
152-
return static::clearColor($text);
153-
}
154-
155-
if (!preg_match_all(self::COLOR_TAG, $text, $matches)) {
156-
return $text;
157-
}
158-
159-
foreach ((array)$matches[0] as $i => $m) {
160-
if ($style = self::STYLES[$matches[1][$i]] ?? null) {
161-
$tag = $matches[1][$i];
162-
$match = $matches[2][$i];
163-
164-
$replace = sprintf("\033[%sm%s\033[0m", $style, $match);
165-
$text = str_replace("<$tag>$match</$tag>", $replace, $text);
166-
}
167-
}
168-
169-
return $text;
28+
return Color::render($text, $style);
17029
}
17130

17231
/**
@@ -209,7 +68,7 @@ public static function write($message, $nl = true, $quit = false)
20968
$message = implode($nl ? PHP_EOL : '', $message);
21069
}
21170

212-
self::stdout(self::renderColor($message), $nl, $quit);
71+
self::stdout(Color::parseTag($message), $nl, $quit);
21372
}
21473

21574
/**

0 commit comments

Comments
 (0)