Helper method to parse OIF token, e.g. OIF(expr,truepart,falsepart) OIF(HASFEAT:Armor Prof (Light), Yes , No ) If the character has the Light Armor proficiency, then returns "Yes". Otherwise it returns "No". @param aString String to parse @param output output to write to @param aPC PC
(String aString, java.io.Writer output, PlayerCharacter aPC)
| 2752 | * @param aPC PC we are exporting |
| 2753 | */ |
| 2754 | private void replaceTokenOIF(String aString, java.io.Writer output, PlayerCharacter aPC) |
| 2755 | { |
| 2756 | int iParenCount = 0; |
| 2757 | final String[] tokenizedString = new String[3]; |
| 2758 | int iParamCount = 0; |
| 2759 | int iStart = 4; |
| 2760 | |
| 2761 | for (int i = iStart; i < aString.length(); ++i) |
| 2762 | { |
| 2763 | if (iParamCount == 3) |
| 2764 | { |
| 2765 | break; |
| 2766 | } |
| 2767 | |
| 2768 | switch (aString.charAt(i)) |
| 2769 | { |
| 2770 | case '(': |
| 2771 | iParenCount += 1; |
| 2772 | break; |
| 2773 | case ')': |
| 2774 | iParenCount -= 1; |
| 2775 | |
| 2776 | if (iParenCount == -1) |
| 2777 | { |
| 2778 | if (iParamCount == 2) |
| 2779 | { |
| 2780 | tokenizedString[iParamCount] = aString.substring(iStart, i).trim(); |
| 2781 | iParamCount++; |
| 2782 | iStart = i + 1; |
| 2783 | } |
| 2784 | else |
| 2785 | { |
| 2786 | Logging.errorPrint("OIF: not enough parameters (" + Integer.toString(iParamCount) + ')'); |
| 2787 | for (int j = 0; j < iParamCount; ++j) |
| 2788 | { |
| 2789 | Logging.errorPrint(" " + Integer.toString(j) + ':' + tokenizedString[j]); |
| 2790 | } |
| 2791 | } |
| 2792 | } |
| 2793 | break; |
| 2794 | case ',': |
| 2795 | |
| 2796 | if (iParenCount == 0) |
| 2797 | { |
| 2798 | if (iParamCount < 2) |
| 2799 | { |
| 2800 | tokenizedString[iParamCount] = aString.substring(iStart, i).trim(); |
| 2801 | iStart = i + 1; |
| 2802 | } |
| 2803 | else |
| 2804 | { |
| 2805 | Logging.errorPrint("OIF: too many parameters"); |
| 2806 | } |
| 2807 | |
| 2808 | iParamCount += 1; |
| 2809 | } |
| 2810 | |
| 2811 | break; |
no test coverage detected