Completed
Push — master ( 8a551d...4b5f07 )
by Kacper
02:47
created

CliFormatter::format()   B

Complexity

Conditions 5
Paths 4

Size

Total Lines 21
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 13
CRAP Score 5

Importance

Changes 4
Bugs 0 Features 0
Metric Value
c 4
b 0
f 0
dl 0
loc 21
ccs 13
cts 13
cp 1
rs 8.7624
cc 5
eloc 11
nc 4
nop 1
crap 5
1
<?php
2
/**
3
 * Highlighter
4
 *
5
 * Copyright (C) 2016, Some right reserved.
6
 *
7
 * @author Kacper "Kadet" Donat <[email protected]>
8
 *
9
 * Contact with author:
10
 * Xmpp: [email protected]
11
 * E-mail: [email protected]
12
 *
13
 * From Kadet with love.
14
 */
15
16
namespace Kadet\Highlighter\Formatter;
17
18
use Kadet\Highlighter\Parser\Token\Token;
19
use Kadet\Highlighter\Parser\Tokens;
20
use Kadet\Highlighter\Utils\ArrayHelper;
21
use Kadet\Highlighter\Utils\Console;
22
23
/**
24
 * Class CliFormatter
25
 *
26
 * @package Kadet\Highlighter\Formatter
27
 */
28
class CliFormatter implements FormatterInterface
29
{
30
    private $_styles;
31
32
    /**
33
     * CliFormatter constructor.
34
     *
35
     * @param $styles
36
     */
37 7
    public function __construct($styles = false)
38
    {
39 7
        $this->_styles = $styles ?: include __DIR__.'/../Styles/Cli/Default.php';
40 7
    }
41
42 2
    public function format(Tokens $tokens)
43
    {
44 2
        $source = $tokens->getSource();
45
46 2
        $result = '';
47 2
        $last   = 0;
48
49
        /** @var Token $token */
50 2
        foreach ($tokens as $token) {
51 2
            $result .= substr($source, $last, $token->pos - $last);
52
53 2
            if (($style = ArrayHelper::resolve($this->_styles, $token->name)) !== null) {
54 2
                $result .= $token->isStart() ? Console::open(is_callable($style) ? $style($token) : $style) : Console::close();
55 2
            }
56
57 2
            $last = $token->pos;
58 2
        }
59 2
        $result .= substr($source, $last).Console::reset();
60
61 2
        return $result;
62
    }
63
}
64