StateBuilder::buildStates()   B
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 27
Code Lines 18

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 18
CRAP Score 1

Importance

Changes 2
Bugs 0 Features 0
Metric Value
c 2
b 0
f 0
dl 0
loc 27
ccs 18
cts 18
cp 1
rs 8.8571
cc 1
eloc 18
nc 1
nop 1
crap 1
1
<?php
2
/**
3
 * This file is part of graze/csv-token
4
 *
5
 * Copyright (c) 2016 Nature Delivered Ltd. <https://www.graze.com>
6
 *
7
 * For the full copyright and license information, please view the LICENSE
8
 * file that was distributed with this source code.
9
 *
10
 * @license https://github.com/graze/csv-token/blob/master/LICENSE.md
11
 * @link    https://github.com/graze/csv-token
12
 */
13
14
namespace Graze\CsvToken\Tokeniser;
15
16
use Graze\CsvToken\Tokeniser\Token\Token;
17
use Graze\CsvToken\Tokeniser\Token\TokenStoreInterface;
18
19
trait StateBuilder
20
{
21
    /**
22
     * @param TokenStoreInterface $tokenStore
23
     *
24
     * @return State The default starting state
25
     */
26 30
    public function buildStates(TokenStoreInterface $tokenStore)
27
    {
28 30
        $initial = new State($tokenStore, State::S_INITIAL_TOKENS);
29 30
        $any = new State($tokenStore, State::S_ANY_TOKENS);
30 30
        $inQuote = new State($tokenStore, State::S_IN_QUOTE_TOKENS);
31 30
        $inEscape = new State($tokenStore, State::S_IN_ESCAPE_TOKENS);
32 30
        $inQuoteEscape = new State($tokenStore, State::S_IN_QUOTE_ESCAPE_TOKENS);
33
34 30
        $initial->addStateTarget(Token::T_ANY & ~Token::T_QUOTE & ~Token::T_ESCAPE, $any);
35 30
        $initial->addStateTarget(Token::T_QUOTE, $inQuote);
36 30
        $initial->addStateTarget(Token::T_ESCAPE, $inEscape);
37
38
        // generate state mapping
39 30
        $any->addStateTarget(Token::T_ANY & ~Token::T_QUOTE & ~Token::T_ESCAPE, $any);
40 30
        $any->addStateTarget(Token::T_QUOTE, $inQuote);
41 30
        $any->addStateTarget(Token::T_ESCAPE, $inEscape);
42
43 30
        $inQuote->addStateTarget(Token::T_CONTENT | Token::T_DOUBLE_QUOTE, $inQuote);
44 30
        $inQuote->addStateTarget(Token::T_QUOTE, $any);
45 30
        $inQuote->addStateTarget(Token::T_ESCAPE, $inQuoteEscape);
46
47 30
        $inEscape->addStateTarget(Token::T_CONTENT, $any);
48
49 30
        $inQuoteEscape->addStateTarget(Token::T_CONTENT, $inQuote);
50
51 30
        return $initial;
52
    }
53
}
54