-
-
Couldn't load subscription status.
- Fork 89
Use ANSI color codes and Unicode characters on Windows as well #662
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
880a25b
41bc621
8e976bc
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -267,8 +267,7 @@ public static function escapeshellcmd($cmd) | |
| /** | ||
| * Prepares token content for output to screen. | ||
| * | ||
| * Replaces invisible characters so they are visible. On non-Windows | ||
| * operating systems it will also colour the invisible characters. | ||
| * Replaces invisible characters so they are visible, and colour them. | ||
| * | ||
| * @param string $content The content to prepare. | ||
| * @param string[] $exclude A list of characters to leave invisible. | ||
|
|
@@ -278,35 +277,25 @@ public static function escapeshellcmd($cmd) | |
| */ | ||
| public static function prepareForOutput($content, $exclude=[]) | ||
| { | ||
| if (stripos(PHP_OS, 'WIN') === 0) { | ||
| if (in_array("\r", $exclude, true) === false) { | ||
| $content = str_replace("\r", '\r', $content); | ||
| } | ||
|
|
||
| if (in_array("\n", $exclude, true) === false) { | ||
| $content = str_replace("\n", '\n', $content); | ||
| } | ||
|
|
||
| if (in_array("\t", $exclude, true) === false) { | ||
| $content = str_replace("\t", '\t', $content); | ||
| } | ||
| } else { | ||
| if (in_array("\r", $exclude, true) === false) { | ||
| $content = str_replace("\r", "033円[30;1m\\r033円[0m", $content); | ||
| } | ||
| $replacements = [ | ||
| "\r" => '\r', | ||
| "\n" => '\n', | ||
| "\t" => '\t', | ||
| " " => '·', | ||
| ]; | ||
| if (stripos(PHP_OS, 'WIN') === 0 && PHP_VERSION_ID < 70100) { | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Is this condition sufficient ? If I read the https://www.php.net/manual/en/migration71.windows-support.php page, I get the impression an additional check may be needed against the value of the Also note that Same remark applies to the |
||
| // Do not replace spaces on old PHP on Windows. | ||
| // Printing Unicode characters like '·' to Windows console only works since PHP 7.1. | ||
| unset($replacements[" "]); | ||
| } | ||
|
|
||
| if (in_array("\n", $exclude, true) === false) { | ||
| $content = str_replace("\n", "033円[30;1m\\n033円[0m", $content); | ||
| } | ||
| $replacements = array_diff_key($replacements, array_fill_keys($exclude, true)); | ||
|
|
||
| if (in_array("\t", $exclude, true) === false) { | ||
| $content = str_replace("\t", "033円[30;1m\\t033円[0m", $content); | ||
| } | ||
| // Colour runs of invisible characters. | ||
| $match = implode('', array_keys($replacements)); | ||
| $content = preg_replace("/([$match]+)/", "033円[30;1m1ドル033円[0m", $content); | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This ends up adding more redundant colour codes on Windows for PHP < 7.1, similar to what is happening in the PHP tokenizer. |
||
|
|
||
| if (in_array(' ', $exclude, true) === false) { | ||
| $content = str_replace(' ', "033円[30;1m·033円[0m", $content); | ||
| } | ||
| }//end if | ||
| $content = strtr($content, $replacements); | ||
|
|
||
| return $content; | ||
|
|
||
|
|
||