From: <jde...@us...> - 2007-02-21 12:13:27
|
Revision: 2175 http://svn.sourceforge.net/pcgen/?rev=2175&view=rev Author: jdempsey Date: 2007-02-21 04:13:24 -0800 (Wed, 21 Feb 2007) Log Message: ----------- FReq OS Token IFF() to accept any JEP Boolean functions - Add JEP Support to IIF and OIF - Correct names in OIF code Issue#: 1411073 Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/core/VariableProcessor.java Trunk/pcgen/code/src/java/pcgen/io/ExportHandler.java Modified: Trunk/pcgen/code/src/java/pcgen/core/VariableProcessor.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/VariableProcessor.java 2007-02-21 11:39:14 UTC (rev 2174) +++ Trunk/pcgen/code/src/java/pcgen/core/VariableProcessor.java 2007-02-21 12:13:24 UTC (rev 2175) @@ -143,8 +143,63 @@ return total; } + /** + * Evaluates a JEP variable for this character. + * e.g: getJepOnlyVariableValue("3+CHA","CLASS:Cleric") for Turn Undead + * + * @param aSpell This is specifically to compute bonuses to CASTERLEVEL for a specific spell. + * @param aString The variable to be evaluated + * @param src The source within which the variable is evaluated + * @param spellLevelTemp The temporary spell level + * @return The value of the variable, or null if the formula is not JEP + */ + public Float getJepOnlyVariableValue(final Spell aSpell, String aString, String src, int spellLevelTemp) + { + // First try to just parse it as a number. + try + { + final Float total = new Float(aString); + return total; + } + catch (NumberFormatException e) + { + // Nothing to handle here, we're attempting to see if aString was a + // number, If we got here it wasn't + } + String cacheString = aString+"#"+src; + if (aSpell != null) + { + cacheString += aSpell.getKeyName(); + } + + if (spellLevelTemp > 0) + { + cacheString += spellLevelTemp; + } + + Float total = getCachedVariable(cacheString); + if (total != null) + { + return total; + } + + + CachableResult cRes = processJepFormula(aSpell, aString, src); + if (cRes != null) + { + if (cRes.cachable) + { + addCachedVariable(cacheString, cRes.result); + } + return cRes.result; + } + return null; + } + + + /** * Evaluate the variable using the old non-JEP variable parser. Use of this * parser is being phased out. Modified: Trunk/pcgen/code/src/java/pcgen/io/ExportHandler.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/io/ExportHandler.java 2007-02-21 11:39:14 UTC (rev 2174) +++ Trunk/pcgen/code/src/java/pcgen/io/ExportHandler.java 2007-02-21 12:13:24 UTC (rev 2175) @@ -26,6 +26,7 @@ package pcgen.io; import java.io.*; +import java.text.NumberFormat; import java.util.*; import pcgen.core.*; @@ -46,6 +47,8 @@ */ public final class ExportHandler { + private static final Float JEP_TRUE = new Float(1.0); + private static final NumberFormat NUM_FMT = NumberFormat.getInstance(); private static HashMap<String, Token> tokenMap = new HashMap<String, Token>(); private static boolean tokenMapPopulated = false; @@ -657,6 +660,15 @@ return false; } + // Test for JEP formula + Float res = + aPC.getVariableProcessor().getJepOnlyVariableValue(null, expr, + "", 0); + if (res != null) + { + return res.equals(JEP_TRUE); + } + // Before returning false, let's see if this is a valid token, like this: // // |IIF(WEAPON%weap.CATEGORY:Ranged)| @@ -958,8 +970,19 @@ */ private String mathMode(String aString, PlayerCharacter aPC) { + //TODO: Check if this is a JEP formula If it is process that. +// Logging.setDebugMode(true); +// Float res = +// aPC.getVariableProcessor().getJepOnlyVariableValue(null, +// aString, "", 0); +// if (res != null) +// { +// Logging.setDebugMode(false); +// return NUM_FMT.format(res); +// } +// Logging.setDebugMode(false); + Float total = new Float(0.0); - while (aString.lastIndexOf('(') >= 0) { int x = CoreUtility.innerMostStringStart(aString); @@ -2456,7 +2479,7 @@ //Leave else if (aString.startsWith("OIF(")) { - replaceTokenIIF(aString, output, aPC); + replaceTokenOIF(aString, output, aPC); } //Leave @@ -2895,7 +2918,7 @@ } } - private void replaceTokenIIF(String aString, BufferedWriter output, + private void replaceTokenOIF(String aString, BufferedWriter output, PlayerCharacter aPC) { int iParenCount = 0; @@ -2933,7 +2956,7 @@ } else { - Logging.errorPrint("IIF: not enough parameters (" + Logging.errorPrint("OIF: not enough parameters (" + Integer.toString(iParamCount) + ')'); for (int j = 0; j < iParamCount; ++j) { @@ -2972,7 +2995,7 @@ if (iParamCount != 3) { - Logging.errorPrint("IIF: invalid parameter count: " + iParamCount); + Logging.errorPrint("OIF: invalid parameter count: " + iParamCount); } else { @@ -2989,7 +3012,7 @@ if (aString.length() > 0) { - Logging.errorPrint("IIF: extra characters on line: " + aString); + Logging.errorPrint("OIF: extra characters on line: " + aString); FileAccess.write(output, aString); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |