Code Duplication    Length = 46-46 lines in 2 locations

src/RichParam/Parser.php 1 location

@@ 48-93 (lines=46) @@
45
     * @param string $modifiersStr
46
     * @return array
47
     */
48
    private function parseModifiers($modifiersStr)
49
    {
50
        $interpretation = [];
51
        $modifierName = '';
52
        $modifierParamStr = '';
53
54
        $depth = 0;
55
        for ($i = 0; $i < strlen($modifiersStr); $i++) {
56
            switch ($modifiersStr[$i]) {
57
                case '(':
58
                    if ($depth) {
59
                        $modifierParamStr .= $modifiersStr[$i];
60
                    }
61
                    $depth++;
62
                    break;
63
64
                case ')':
65
                    $depth--;
66
                    if ($depth) {
67
                        $modifierParamStr .= $modifiersStr[$i];
68
                    }
69
                    break;
70
                case ':':
71
                    if ($depth) {
72
                        $modifierParamStr .= $modifiersStr[$i];
73
                    } else {
74
                        $interpretation[$modifierName] = $this->parseArguments($modifierParamStr);
75
                        $modifierName = '';
76
                        $modifierParamStr = '';
77
                    }
78
                    break;
79
                default:
80
                    if ($depth) {
81
                        $modifierParamStr .= $modifiersStr[$i];
82
                    } else {
83
                        $modifierName .= $modifiersStr[$i];
84
                    }
85
            }
86
        }
87
88
        if ($modifierName) {
89
            $interpretation[$modifierName] = $this->parseArguments($modifierParamStr);
90
        }
91
92
        return $interpretation;
93
    }
94
95
    /**
96
     * Can make an array out of parameter string that looks like this:

src/Vortex.php 1 location

@@ 659-704 (lines=46) @@
656
     * @param string $s
657
     * @return array
658
     */
659
    private function parseModifierArraySlowButAccurate($s)
660
    {
661
        $modifierArr = [];
662
        $modifierName = '';
663
        $modifierParamStr = '';
664
665
        $depth = 0;
666
        for ($i = 0; $i <= strlen($s); $i++) {
667
            switch ($s[$i]) {
668
                case '(':
669
                    if ($depth) {
670
                        $modifierParamStr .= $s[$i];
671
                    }
672
                    $depth++;
673
                    break;
674
675
                case ')':
676
                    $depth--;
677
                    if ($depth) {
678
                        $modifierParamStr .= $s[$i];
679
                    }
680
                    break;
681
                case ':':
682
                    if ($depth) {
683
                        $modifierParamStr .= $s[$i];
684
                    } else {
685
                        $modifierArr[$modifierName] = $this->parseModifierParamStringSlowButAccurate($modifierParamStr);
686
                        $modifierName = '';
687
                        $modifierParamStr = '';
688
                    }
689
                    break;
690
                default:
691
                    if ($depth) {
692
                        $modifierParamStr .= $s[$i];
693
                    } else {
694
                        $modifierName .= $s[$i];
695
                    }
696
            }
697
        }
698
699
        if ($modifierName) {
700
            $modifierArr[$modifierName] = $this->parseModifierParamStringSlowButAccurate($modifierParamStr);
701
        }
702
703
        return $modifierArr;
704
    }
705
706
    /**
707
     * Can make an array out of parameter string that looks like this: