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