Passed
Push — master ( 203740...2c4c0a )
by Kacper
04:22
created

CliFormatter   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 35
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 3

Test Coverage

Coverage 100%

Importance

Changes 5
Bugs 0 Features 0
Metric Value
wmc 6
c 5
b 0
f 0
lcom 1
cbo 3
dl 0
loc 35
ccs 16
cts 16
cp 1
rs 10

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 3 2
A format() 0 21 4
1
<?php
2
/**
3
 * Highlighter
4
 *
5
 * Copyright (C) 2015, 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;
19
use Kadet\Highlighter\Parser\TokenIterator;
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 6
    public function __construct($styles = false) {
38 6
        $this->_styles = $styles ?: include __DIR__.'/../Styles/Cli/Default.php';
39 6
    }
40
41 1
    public function format(TokenIterator $tokens)
42
    {
43 1
        $source = $tokens->getSource();
44
45 1
        $result = '';
46 1
        $last = 0;
47
48
        /** @var Token $token */
49 1
        foreach ($tokens as $token) {
50 1
            $result .= substr($source, $last, $token->pos - $last);
51
52 1
            if (($style = ArrayHelper::resolve($this->_styles, $token->name)) !== null) {
53 1
                $result .= $token->isStart() ? Console::open($style) : Console::close();
54 1
            }
55
56 1
            $last = $token->pos;
57 1
        }
58 1
        $result .= substr($source, $last).Console::reset();
59
60 1
        return $result;
61
    }
62
}