Completed
Branch 0.8-dev (a3ec9f)
by Kacper
02:57
created

LanguageToken::processEnd()   A

Complexity

Conditions 3
Paths 4

Size

Total Lines 22
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 16
CRAP Score 3

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 22
ccs 16
cts 16
cp 1
rs 9.2
cc 3
eloc 13
nc 4
nop 4
crap 3
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\Parser\Token;
17
18
use Kadet\Highlighter\Language\Language;
19
use Kadet\Highlighter\Parser\Result;
20
use Kadet\Highlighter\Parser\TokenIterator;
21
22
/**
23
 * Class LanguageToken
24
 *
25
 * @package Kadet\Highlighter\Parser\Token
26
 *
27
 * @property bool $postProcess True if language is post processed.
28
 */
29
class LanguageToken extends Token
30
{
31 2
    public function getInjected()
32
    {
33 2
        return $this->rule->inject;
34
    }
35
36 11
    public function getLanguage()
37
    {
38 11
        return $this->getStart() ? $this->getStart()->rule->inject : $this->rule->language;
39
    }
40
41 11
    protected function validate(Language $language, $context)
42
    {
43 11
        $valid = false;
44
45 11
        if ($this->isStart()) {
46 2
            $lang = $this->rule->language;
47 2
            if ($lang === null && $this->getInjected() !== $language) {
48 1
                $valid = true;
49 2
            } elseif ($language === $lang && $this->rule->validator->validate($context)) {
50 1
                $valid = true;
51 1
            }
52 2
        } else {
53 11
            $desired = $this->getLanguage();
54 11
            $valid   = $language === $desired && $this->rule->validator->validate($context);
55
        }
56 11
        $this->setValid($valid);
57 11
    }
58
    
59
60 2
    protected function processStart(array &$context, Language $language, Result $result, TokenIterator $tokens)
61
    {
62 2
        $result->merge($this->getInjected()->parse($tokens));
63
64 2
        return true;
65
    }
66
67 11
    protected function processEnd(array &$context, Language $language, Result $result, TokenIterator $tokens)
68
    {
69 11
        $this->setStart($result[0]);
70
71 11
        if ($this->_start->postProcess) {
72 1
            $source = substr($tokens->getSource(), $this->_start->pos, $this->_start->getLength());
73 1
            $tokens = $this->_start->getInjected()->tokenize(
74 1
                $source, $result, $this->_start->pos, Language::EMBEDDED_BY_PARENT
75 1
            );
76 1
            $result->exchangeArray($this->_start->getInjected()->parse($tokens)->getTokens());
77 1
        }
78
79
        # closing unclosed tokens
80 11
        foreach (array_reverse($context) as $hash => $name) {
81 1
            $end = new Token([$name, 'pos' => $this->pos]);
82 1
            $tokens[$hash]->setEnd($end);
83 1
            $result->append($end);
84 11
        }
85
86 11
        $result->append($this);
87 11
        return false;
88
    }
89
90
91
}
92