Completed
Pull Request — master (#127)
by Aydin
01:47
created

StringUtil   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 39
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 0

Importance

Changes 0
Metric Value
wmc 6
lcom 0
cbo 0
dl 0
loc 39
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
B wordwrap() 0 27 5
A stripAnsiEscapeSequence() 0 4 1
1
<?php
2
3
namespace PhpSchool\CliMenu\Util;
4
5
/**
6
 * @author Michael Woodward <[email protected]>
7
 */
8
class StringUtil
9
{
10
    /**
11
     * Minimal multi-byte wordwrap implementation
12
     * which also takes break length into consideration
13
     */
14
    public static function wordwrap(string $string, int $width, string $break = "\n") : string
15
    {
16
        return implode(
17
            $break,
18
            array_map(function (string $line) use ($width, $break) {
19
                $line = rtrim($line);
20
                if (mb_strlen($line) <= $width) {
21
                    return $line;
22
                }
23
                
24
                $words  = explode(' ', $line);
25
                $line   = '';
26
                $actual = '';
27
                foreach ($words as $word) {
28
                    if (mb_strlen($actual . $word) <= $width) {
29
                        $actual .= $word . ' ';
30
                    } else {
31
                        if ($actual !== '') {
32
                            $line .= rtrim($actual) . $break;
33
                        }
34
                        $actual = $word . ' ';
35
                    }
36
                }
37
                return $line . trim($actual);
38
            }, explode($break, $string))
39
        );
40
    }
41
42
    public static function stripAnsiEscapeSequence(string $str) : string
43
    {
44
        return preg_replace('/\x1b[^m]*m/', '', $str);
45
    }
46
}
47