Code:
package europabarbarorum;
import java.io.BufferedReader;
import java.io.FileReader;
import java.util.HashSet;
import java.util.Hashtable;
import java.util.Vector;
/**
* All sorts of stuff you can do with traits. Mostly validation and other bug hunting currently.
* @author Brigt Olav Vik, aka bovi
*/
public class Traits
{
private static final String ROOT_FOLDER = "../../../";
private static final String EDCT = "eb/data/export_descr_character_traits.txt";
private static final String EDA = "eb/data/export_descr_ancillaries.txt";
private static final String VNV = "eb/data/text/export_VnVs.txt";
public Traits()
{
}
public String[] validateAffects() throws Exception
{
Vector mismatches = new Vector();
Hashtable traits = new Hashtable();
HashSet affects = new HashSet();
Vector triggers = new Vector();
String line = null;
BufferedReader r = new BufferedReader(new FileReader(ROOT_FOLDER + EDCT));
while((line = r.readLine()) != null)
{
if(line.indexOf(";") == 0)
continue;
line = line.toLowerCase();
if(line.indexOf("trait") == 0)
{
line = line.substring(6).trim();
if(line.indexOf(" ") >= 0)
line = line.substring(0, line.indexOf(" ")).trim();
traits.put(line, line);
}
else if(line.indexOf("trigger") == 0)
{
line = line.substring(line.indexOf("trigger") + 7).trim();
if(line.indexOf(" ") >= 0)
line = line.substring(0, line.indexOf(" "));
triggers.add(line);
}
else if(line.indexOf("affects") >= 0)
{
line = line.substring(line.indexOf("affects") + 7).trim();
if(line.indexOf(" ") >= 0)
line = line.substring(0, line.indexOf(" "));
affects.add(line);
}
}
r.close();
r = new BufferedReader(new FileReader(ROOT_FOLDER + EDA));
while((line = r.readLine()) != null)
{
if(line.indexOf(";") == 0)
continue;
line = line.toLowerCase();
if(line.indexOf("affects") >= 0)
{
line = line.substring(line.indexOf("affects") + 7).trim();
if(line.indexOf(" ") >= 0)
line = line.substring(0, line.indexOf(" "));
affects.add(line);
}
}
String[] affectsArray = new String[affects.size()];
String hasTrait = null;
affects.toArray(affectsArray);
for (int i = 0; i < affectsArray.length; i++)
{
hasTrait = (String)traits.get(affectsArray[i]);
if(hasTrait == null)
mismatches.add(affectsArray[i]);
}
String[] retur = new String[mismatches.size()];
mismatches.toArray(retur);
return retur;
}
public String[] validateDescriptions() throws Exception
{
Vector mismatches = new Vector();
Hashtable references = new Hashtable();
Hashtable descriptions = new Hashtable();
String line = null;
BufferedReader r = new BufferedReader(new FileReader(ROOT_FOLDER + EDCT));
while((line = r.readLine()) != null)
{
if(line.indexOf(";") == 0)
continue;
line = line.toLowerCase().trim();
if(line.indexOf("level") == 0)
{
line = line.substring(6).trim();
if(line.indexOf(" ") >= 0)
line = line.substring(0, line.indexOf(" ")).trim();
references.put(line, "1");
}
else if(line.indexOf("description") == 0)
{
line = line.substring(12).trim();
if(line.indexOf(" ") >= 0)
line = line.substring(0, line.indexOf(" "));
references.put(line, "1");
}
else if(line.indexOf("effectsdescription") == 0)
{
line = line.substring(19).trim();
if(line.indexOf(" ") >= 0)
line = line.substring(0, line.indexOf(" "));
references.put(line, "1");
}
else if(line.indexOf("gainmessage") == 0)
{
line = line.substring(12).trim();
if(line.indexOf(" ") >= 0)
line = line.substring(0, line.indexOf(" "));
references.put(line, "1");
}
else if(line.indexOf("losemessage") == 0)
{
line = line.substring(12).trim();
if(line.indexOf(" ") >= 0)
line = line.substring(0, line.indexOf(" "));
references.put(line, "1");
}
else if(line.indexOf("epithet") == 0)
{
line = line.substring(8).trim();
if(line.indexOf(" ") >= 0)
line = line.substring(0, line.indexOf(" "));
references.put(line, "1");
}
}
r.close();
r = new BufferedReader(new FileReader(ROOT_FOLDER + VNV));
while((line = r.readLine()) != null)
{
line = new String(line.getBytes(), "UTF-16");
if(line.indexOf("¬") == 0)
continue;
line = line.toLowerCase().trim();
if(line.indexOf("{") == 0)
{
line = line.substring(1, line.indexOf("}")).trim();
if(line.indexOf(" ") >= 0)
line = line.substring(0, line.indexOf(" "));
descriptions.put(line, "1");
}
}
String[] referenceArray = new String[references.size()];
String hasDesc = null;
references.keySet().toArray(referenceArray);
for (int i = 0; i < referenceArray.length; i++)
{
hasDesc = (String)descriptions.get(referenceArray[i]);
if(hasDesc == null)
mismatches.add("Missing description: " + referenceArray[i]);
}
String[] descArray = new String[descriptions.size()];
String isReferenced = null;
descriptions.keySet().toArray(descArray);
for (int i = 0; i < descArray.length; i++)
{
isReferenced = (String)references.get(descArray[i]);
if(isReferenced == null)
mismatches.add("Superfluous description? " + descArray[i]);
}
String[] retur = new String[mismatches.size()];
mismatches.toArray(retur);
return retur;
}
public static void main(String[] args) throws Exception
{
Traits t = new Traits();
String[] affectMismatches = t.validateAffects();
System.out.println("Mismatching Affects:");
for (int i = 0; i < affectMismatches.length; i++)
{
System.out.println(affectMismatches[i]);
}
System.out.println("--------------------");
System.out.println("Description mismatches:");
String[] descMismatches = t.validateDescriptions();
for (int i = 0; i < descMismatches.length; i++)
{
System.out.println(descMismatches[i]);
}
System.out.println("--------------------");
}
public static String[] maxOutChance(String[] lines)
{
boolean isBattleTrigger = false;
int pos = 0;
for (int i = 0; i < lines.length; i++)
{
if (lines[i].toLowerCase().indexOf("whentotest") >= 0)
isBattleTrigger = lines[i].toLowerCase().indexOf("postbattle") >= 0;
if (isBattleTrigger && (pos = lines[i].toLowerCase().indexOf("chance")) >= 0)
lines[i] = lines[i].substring(0, pos) + "Chance 100";
}
return lines;
}
public static String[] commentBattleTriggers(String[] lines, int count)
{
boolean isBattleTrigger = false;
count++;
for (int i = 0; i < lines.length; i++)
{
if (lines[i].toLowerCase().indexOf("whentotest") >= 0)
{
isBattleTrigger = lines[i].toLowerCase().indexOf("postbattle") >= 0;
if(isBattleTrigger && !lines[i-1].startsWith("; "))
{
count--;
if(count == 0)
return lines;
lines[i-1] = "; " + lines[i-1];
}
}
if (isBattleTrigger &&
lines[i].toLowerCase().indexOf("trigger") < 0 &&
!lines[i].startsWith("; ") &&
!isGenuineComment(lines[i]))
lines[i] = "; " + lines[i];
}
return lines;
}
public static String[] uncommentBattleTriggers(String[] lines, int count)
{
boolean isBattleTrigger = false;
count++;
for (int i = 0; i < lines.length; i++)
{
if (lines[i].toLowerCase().indexOf("whentotest") >= 0)
{
isBattleTrigger = lines[i].toLowerCase().indexOf("postbattle") >= 0;
if(isBattleTrigger && lines[i].startsWith("; "))
{
count--;
if(count == 0)
return lines;
if(lines[i-1].startsWith("; "))
lines[i-1] = lines[i-1].substring(2);
}
}
if (isBattleTrigger &&
lines[i].startsWith("; ") &&
(lines[i].toLowerCase().indexOf("trigger")) < 0 &&
!isGenuineComment(lines[i]))
lines[i] = lines[i].substring(2);
if (isBattleTrigger &&
lines[i].startsWith(";") &&
(lines[i].toLowerCase().indexOf("trigger")) < 0 &&
!isGenuineComment(lines[i]))
lines[i] = lines[i].substring(1);
}
return lines;
}
public static String[] uncommentBattleTriggers(String[] lines, String triggerNamePattern)
{
boolean doUncomment = false;
for (int i = 0; i < lines.length; i++)
{
if (lines[i].toLowerCase().indexOf("trigger")>= 0)
doUncomment = false;
if (lines[i].toLowerCase().indexOf("trigger ") >= 0 &&
lines[i].toLowerCase().indexOf(triggerNamePattern.toLowerCase()) >= 0)
doUncomment = true;
if (doUncomment &&
lines[i].startsWith("; ") &&
!isGenuineComment(lines[i]))
lines[i] = lines[i].substring(2);
if (doUncomment &&
lines[i].startsWith("; ") &&
(lines[i].toLowerCase().indexOf("trigger")) < 0 &&
!isGenuineComment(lines[i]))
lines[i] = lines[i].substring(1);
}
return lines;
}
public static String[] commentBattleTriggers(String[] lines, String triggerNamePattern)
{
boolean doComment = false;
for (int i = 0; i < lines.length; i++)
{
if (lines[i].toLowerCase().indexOf("trigger")>= 0)
doComment = false;
if (lines[i].toLowerCase().indexOf("trigger ") >= 0 &&
lines[i].toLowerCase().indexOf(triggerNamePattern.toLowerCase()) >= 0)
doComment = true;
if (doComment &&
!lines[i].startsWith("; ") &&
!isGenuineComment(lines[i]))
lines[i] = "; " + lines[i];
}
return lines;
}
public static String[] uncommentBattleTriggersWithPattern(String[] lines, String pattern)
{
pattern = pattern.toLowerCase();
boolean isBattleTrigger = false;
boolean hasPattern = false;
for (int i = 0; i < lines.length; i++)
{
if(lines[i].startsWith(";"))
continue;
if (lines[i].toLowerCase().indexOf("trigger")>= 0)
{
hasPattern = false;
isBattleTrigger = false;
}
if (lines[i].toLowerCase().indexOf("whentotest") >= 0)
isBattleTrigger = lines[i].toLowerCase().indexOf("postbattle") >= 0;
if(lines[i].toLowerCase().indexOf(pattern) >= 0)
{
hasPattern = true;
if(isBattleTrigger)
{
for (int j = i; j > 1 && lines[j].toLowerCase().indexOf("trigger") < 0; j--)
{
if (lines[i].startsWith("; ") &&
!isGenuineComment(lines[i]))
lines[j-1] = lines[j-1].substring(2);
}
}
}
if (isBattleTrigger && hasPattern &&
lines[i].startsWith("; ") &&
!isGenuineComment(lines[i]))
lines[i] = lines[i].substring(2);
}
return lines;
}
public static String[] commentBattleTriggersWithPattern(String[] lines, String pattern)
{
pattern = pattern.toLowerCase();
boolean isBattleTrigger = false;
boolean hasPattern = false;
for (int i = 0; i < lines.length; i++)
{
if(lines[i].startsWith(";"))
continue;
if (lines[i].toLowerCase().indexOf("trigger")>= 0)
{
hasPattern = false;
isBattleTrigger = false;
}
if (lines[i].toLowerCase().indexOf("whentotest") >= 0)
isBattleTrigger = lines[i].toLowerCase().indexOf("postbattle") >= 0;
if(lines[i].toLowerCase().indexOf(pattern) >= 0)
{
hasPattern = true;
if(isBattleTrigger)
{
for (int j = i; j > 1 && lines[j].toLowerCase().indexOf("trigger") < 0; j--)
{
if (!lines[i].startsWith("; ") &&
!isGenuineComment(lines[i]))
lines[j-1] = "; " + lines[j-1];
}
}
}
if (isBattleTrigger && hasPattern &&
!lines[i].startsWith("; ") &&
!isGenuineComment(lines[i]))
lines[i] = "; " + lines[i];
}
return lines;
}
public static void printDistinctWhenToTests(String[] lines)
{
Vector retur = new Vector();
for (int i = 0; i < lines.length; i++)
{
if(lines[i].toLowerCase().indexOf("whentotest") >= 0 &&
!retur.contains(lines[i]))
retur.add(lines[i]);
}
for (int i = 0; i < retur.size(); i++)
{
System.out.println(retur.get(i));
}
}
/*
public static String replace(String org, String pattern, String replacement)
{
String retur = org;
int pos = 0;
while ((pos = retur.indexOf(pattern, pos)) >= 0)
{
retur = retur.substring(0, pos) + replacement + retur.substring(pos + pattern.length());
}
return retur;
}
*/
public static boolean isGenuineComment(String line)
{
return
line.toLowerCase().indexOf(":") >= 0 ||
line.toLowerCase().indexOf("-----") >= 0 ||
line.toLowerCase().indexOf("=====") >= 0 ||
line.toLowerCase().indexOf("%") >= 0 ||
line.toLowerCase().indexOf("section") >= 0 ||
line.toLowerCase().indexOf("gaining initial star easiest") >= 0 ||
line.toLowerCase().indexOf("o <") >= 0 ||
line.toLowerCase().indexOf("celts win big battle, twice the points") >= 0 ||
line.toLowerCase().indexOf("strategicskill shown by bringing bigger battalion") >= 0 ||
line.toLowerCase().indexOf("determine whether general learned") >= 0;
}
}
Bookmarks