-
-
Notifications
You must be signed in to change notification settings - Fork 75
/
Copy pathDisplayNormalizer.php
64 lines (54 loc) · 1.84 KB
/
DisplayNormalizer.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
<?php
declare(strict_types=1);
/*
* This file is part of the humbug/php-scoper package.
*
* Copyright (c) 2017 Théo FIDRY <theo.fidry@gmail.com>,
* Pádraic Brady <padraic.brady@gmail.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Humbug\PhpScoper\Console;
use function Safe\preg_match_all;
use function str_replace;
use function strlen;
use function usort;
use const DIRECTORY_SEPARATOR;
final class DisplayNormalizer
{
public static function normalize(string $display): string
{
return self::normalizeDirectorySeparators(
self::normalizeProgressBar($display),
);
}
public static function normalizeDirectorySeparators(string $display): string
{
if ('\\' === DIRECTORY_SEPARATOR && preg_match_all('/\/path\/to(.*\\\\)+/', $display, $match)) {
/** @phpstan-ignore offsetAccess.notFound */
$paths = $match[0];
usort($paths, static fn ($a, $b) => strlen($b) - strlen($a));
foreach ($paths as $path) {
$fixedPath = str_replace('\\', '/', $path);
$display = str_replace($path, $fixedPath, $display);
}
}
return $display;
}
public static function normalizeProgressBar(string $display): string
{
if ('\\' === DIRECTORY_SEPARATOR && preg_match_all('/\\[=*>?\\-*\\]/', $display, $match)) {
/** @phpstan-ignore offsetAccess.notFound */
$bars = $match[0];
foreach ($bars as $bar) {
$fixedBar = str_replace(['>', '-', '='], ['░', '░', '▓'], $bar);
$display = str_replace($bar, $fixedBar, $display);
}
}
return $display;
}
private function __construct()
{
}
}