From: <nu...@us...> - 2006-04-16 04:03:28
|
Revision: 821 Author: nuance Date: 2006-04-15 21:03:20 -0700 (Sat, 15 Apr 2006) ViewCVS: http://svn.sourceforge.net/pcgen/?rev=821&view=rev Log Message: ----------- Fix [ 1471138 ] FEAT output token is broken Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/io/exporttoken/FeatToken.java Modified: Trunk/pcgen/code/src/java/pcgen/io/exporttoken/FeatToken.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/io/exporttoken/FeatToken.java 2006-04-15 22:51:11 UTC (rev 820) +++ Trunk/pcgen/code/src/java/pcgen/io/exporttoken/FeatToken.java 2006-04-16 04:03:20 UTC (rev 821) @@ -9,6 +9,7 @@ import pcgen.core.Globals; import pcgen.core.PlayerCharacter; import pcgen.io.ExportHandler; +import pcgen.util.Logging; /** * @author karianna @@ -61,7 +62,8 @@ cachedPC = pc; lastMode = fString; - List types = new ArrayList(); + List types = new ArrayList(); + List negate = new ArrayList(); String featType = null; // i holds the number of the feat we want, is decremented @@ -69,8 +71,6 @@ // if the current feat matches the desired feat int i = -1; - boolean notTypes = false; - if ("FEAT".equals(fString) || "VFEAT".equals(fString) || "FEATALL".equals(fString) || "FEATAUTO".equals(fString)) { while (aTok.hasMoreTokens()) { final String bString = aTok.nextToken(); @@ -101,14 +101,17 @@ final String typeStr = aTok.nextToken(); int typeInd = typeStr.indexOf("TYPE"); - if (typeInd != -1) + if (typeInd != -1 && typeStr.length() > 4) { - types.add(typeStr.substring(typeInd + 5)); + if (typeInd > 0) + { + types.add(typeStr.substring(typeInd + 5)); + } + else + { + negate.add(typeStr.substring(typeInd + 5)); + } } - if (typeInd > 0) - { - notTypes = true; - } } } @@ -121,7 +124,7 @@ for (Iterator e = feat.iterator(); e.hasNext();) { aFeat = (Ability) e.next(); - boolean matchTypeDef = false; + boolean matchTypeDef = false; boolean matchVisibilityDef = false; if (featType != null) { @@ -132,19 +135,32 @@ matchTypeDef = true; } - for (Iterator j = types.iterator(); j.hasNext(); ) + boolean istype = false; + boolean isnttype = true; + + // is at leas one of the types we've asked for + if (types.size() > 0) { - final String typeStr = (String)j.next(); - if (notTypes) + for (Iterator j = types.iterator(); j.hasNext();) { - matchTypeDef = !aFeat.isType(typeStr); + final String typeStr = (String) j.next(); + istype |= aFeat.isType(typeStr); } - else - { - matchTypeDef = aFeat.isType(typeStr); - } } + else + { + istype = true; + } + // isn't all the types we've said it's not + for (Iterator j = negate.iterator(); j.hasNext(); ) + { + final String typeStr = (String)j.next(); + isnttype &= !aFeat.isType(typeStr); + } + + matchTypeDef = matchTypeDef && istype && isnttype; + if ((aFeat.getVisible() == Ability.VISIBILITY_HIDDEN) || (aFeat.getVisible() == Ability.VISIBILITY_DISPLAY_ONLY)) { // never display hidden feats unless asked for directly if (visibility == FEAT_HIDDEN) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |