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