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