| @@ 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: |
|