summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/tlIItools.17
-rwxr-xr-xgenafx-base.sh6
-rwxr-xr-xgenafx-test.sh11
-rw-r--r--src/main/java/tlIItools/Affix.java280
-rw-r--r--src/main/java/tlIItools/AffixGroup.java11
-rw-r--r--src/main/java/tlIItools/AffixLister.java198
-rw-r--r--src/main/java/tlIItools/AffixSet.java36
-rw-r--r--src/main/java/tlIItools/Effect.java205
-rw-r--r--src/main/java/tlIItools/EffectRepo.java85
-rw-r--r--src/main/java/tlIItools/Main.java13
-rw-r--r--src/main/java/tlIItools/NameFileReader.java136
-rw-r--r--src/main/java/tlIItools/ReplPair.java173
12 files changed, 416 insertions, 745 deletions
diff --git a/docs/tlIItools.1 b/docs/tlIItools.1
index c4bc33fa..318cbe98 100644
--- a/docs/tlIItools.1
+++ b/docs/tlIItools.1
@@ -21,6 +21,10 @@ File groups are a concept that was introduced to group together similar items.
Currently, there isn't much mechanical support they offer, but they help with
grouping things together in the output, and will likely be used for more in the
future.
+.SS Affix groups
+Affix groups are used to group together affixes that are mechanically similar.
+For instance, the affixes \fB+2 to strength\fP and \fB+4 to strength\fP would go
+into the same affix group, assuming that they spawned on the same sort of items.
.SH OPTIONS
.TP
\fB--\fP
@@ -100,5 +104,8 @@ the standard error stream.
Specify the regular expression that should guide any attempts to guess file
groups. The regular expression should match the file name, with a single
capture-group that will specify the name of the file group.
+.TP "--output-affix-groups \fIfile-name\fP"
+Specify that affix groups should be printed out to \fIfile-name\fP. By default,
+affix groups aren't output
.SH EXAMPLES
.SH SEE ALSO
diff --git a/genafx-base.sh b/genafx-base.sh
new file mode 100755
index 00000000..bf68a28b
--- /dev/null
+++ b/genafx-base.sh
@@ -0,0 +1,6 @@
+#!/bin/bash
+
+# Runs AffixLister with the provided arguments
+set -e
+
+mvn compile exec:java -Dexec.args="$@"
diff --git a/genafx-test.sh b/genafx-test.sh
index 4f9726f9..b84e0fd7 100755
--- a/genafx-test.sh
+++ b/genafx-test.sh
@@ -1,16 +1,21 @@
#!/bin/bash
+# Runs the AffixLister, formats the resulting text to PDF format, and then
+# displays it
+# The first argument is the base output name; the rest of the arguments are the
+# files to input
set -e
baseout="$1"
shift 1
fileset="$@"
-listopts="-z -n named"
+listopts="--guess-groups -z -n named"
outputfle=output/"$baseout".txt
errfle=output/"$baseout".err
-outputopts="-o $outputfle -e $errfle"
+afxgroupfle=output/"$baseout".afxgroup
+outputopts="-o $outputfle -e $errfle --output-affix-groups $afxgroupfle"
-mvn clean compile exec:java -Dexec.args="$outputopts $listopts $fileset"
+mvn compile exec:java -Dexec.args="$outputopts $listopts $fileset"
#java AffixLister $listopts $fileset > output/"$baseout".txt 2> output/"$baseout".err
tail -n 2 "$errfle"
diff --git a/src/main/java/tlIItools/Affix.java b/src/main/java/tlIItools/Affix.java
index d90c0108..b147ab0b 100644
--- a/src/main/java/tlIItools/Affix.java
+++ b/src/main/java/tlIItools/Affix.java
@@ -1,112 +1,78 @@
package tlIItools;
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.List;
-import java.util.Scanner;
+import java.util.*;
-/**
- * Represents a Torchlight II affix.
+/** Represents a Torchlight II affix.
+ *
+ * @author Ben Culkin
*/
public class Affix {
- /**
- * Whether or not to record timing info.
- */
+ /** Whether or not to record timing info. */
public static boolean doTiming;
- /**
- * Internal name of the affix.
- */
+ /** Internal name of the affix. */
public String intName;
- /*
- * The prefix/suffix attached to the affix.
+ /* The prefix/suffix attached to the affix.
*
* In general, only one of these is set for a given affix.
*
* NOTE: Some affixes have a mis-set suffix/prefix ordering, and may need to be
- * changed in their files.
- */
- /**
- * The 'suffix name' attached to this affix.
+ * changed in their files. */
+
+ /** The 'suffix name' attached to this affix.
*
* Include the word [ITEM] to indicate where the item name should go.
*
* Note that it is not guaranteed that this is actually a suffix; it could be a
- * prefix.
- */
+ * prefix. */
public String affixSuffix;
- /**
- * The 'prefix name' attached to this affix.
+ /** The 'prefix name' attached to this affix.
*
* Include the word [ITEM] to indicate where the item name should go.
*
* Note that it is not guaranteed that this is actually a prefix; it could be a
- * suffix.
- */
+ * suffix. */
public String affixPrefix;
- /*
- * The min/max levels the affix can spawn at.
- */
- /**
- * The minimum level of an item this affix can spawn on.
- */
+ /* The min/max levels the affix can spawn at. */
+
+ /** The minimum level of an item this affix can spawn on. */
public int minLevel;
- /**
- * The maximum level of an item this affix can spawn on.
- */
+ /** The maximum level of an item this affix can spawn on. */
public int maxLevel;
- /**
- * The spawn weight for the affix.
- */
+ /** The spawn weight for the affix. */
public int weight;
- /**
- * The number of affix slots taken up.
- */
+ /** The number of affix slots taken up. */
public int slots;
- /**
- * Whether this is a socketable affix.
- */
+ // @NOTE isEnchantment, isSocketable and isPerson seem to be mutally
+ // exclusive. Should they be a enum? - bculkin, 12/29/2020
+ /** Whether this is a socketable affix. */
public boolean isSocketable;
- /**
- * Whether this is an enchantment, instead of a standard affix.
- */
+
+ /** Whether this is an enchantment, instead of a standard affix. */
public boolean isEnchantment;
- /**
- * Whether this is a mob/player affix.
- */
+ /** Whether this is a mob/player affix. */
public boolean isPerson;
- /**
- * The types of equipment this can spawn on.
- */
+ /** The types of equipment this can spawn on. */
public List<String> equipTypes;
- /**
- * The types of equipment this can't spawn on.
- */
+ /** The types of equipment this can't spawn on. */
public List<String> nonequipTypes;
- /**
- * Places to get this enchantment from;
- */
+ /** Places to get this enchantment from; */
public List<String> enchantSources;
- /**
- * The socketable types this spawns on.
- */
+ /** The socketable types this spawns on. */
public List<String> socketableTypes;
- /**
- * The effects attached to this affix.
- */
+ /** The effects attached to this affix. */
public List<Effect> effects;
- /**
- * Is this affix in an 'affix group' with another affix?
+ /** Determine whether this affix is in an 'affix group' with another affix.
*
* By 'affix group', what we mean is that it is essentially the same affix, with
* generally just differing levels/values.
@@ -115,50 +81,45 @@ public class Affix {
* strength would be considered to be in the same affix group (assuming that
* both of those strength bonuses had the same effect name).
*
- * @param afx
- * The affix to check if we are in an affix group with.
+ * @param afx The affix to check if we are in an affix group with.
*
- * @return Whether or now we are in an affix group with the specified affix.
- */
+ * @return Whether or now we are in an affix group with the specified affix. */
public boolean isInAffixGroup(Affix afx) {
if (effects == null) {
- if (afx.effects != null)
- return false;
- } else if (!effects.equals(afx.effects)) // TODO this isn't actually an equals;
- // maybe make this a 'isEquivalent' or
- // 'isSimilarEffect'?
+ if (afx.effects != null) return false;
+ } else if (!effects.equals(afx.effects)) {
+ // TODO this isn't actually an equals; maybe make this a 'isEquivalent' or 'isSimilarEffect'?
+ // -bculkin, 12/29/2020
return false;
- if (enchantSources == null) {
- if (afx.enchantSources != null)
- return false;
- } else if (!enchantSources.equals(afx.enchantSources))
+ } else if (enchantSources == null) {
+ if (afx.enchantSources != null) return false;
+ } else if (!enchantSources.equals(afx.enchantSources)) {
return false;
- if (equipTypes == null) {
- if (afx.equipTypes != null)
- return false;
- } else if (!equipTypes.equals(afx.equipTypes))
+ } else if (equipTypes == null) {
+ if (afx.equipTypes != null) return false;
+ } else if (!equipTypes.equals(afx.equipTypes)) {
return false;
- if (isEnchantment != afx.isEnchantment)
+ } else if (isEnchantment != afx.isEnchantment) {
return false;
- if (isPerson != afx.isPerson)
+ } else if (isPerson != afx.isPerson) {
return false;
- if (isSocketable != afx.isSocketable)
+ } else if (isSocketable != afx.isSocketable) {
return false;
- if (nonequipTypes == null) {
- if (afx.nonequipTypes != null)
- return false;
- } else if (!nonequipTypes.equals(afx.nonequipTypes))
+ } else if (nonequipTypes == null) {
+ if (afx.nonequipTypes != null) return false;
+ } else if (!nonequipTypes.equals(afx.nonequipTypes)) {
return false;
- if (socketableTypes == null) {
- if (afx.socketableTypes != null)
- return false;
- } else if (!socketableTypes.equals(afx.socketableTypes))
+ } else if (socketableTypes == null) {
+ if (afx.socketableTypes != null) return false;
+ } else if (!socketableTypes.equals(afx.socketableTypes)) {
return false;
+ } else {
+ return true;
+ }
return true;
}
- /**
- * Gets the name of the 'affix group' that this affix is in.
+ /** Gets the name of the 'affix group' that this affix is in.
*
* By 'affix group', what we mean is that it is essentially the same affix, with
* generally just differing levels/values.
@@ -168,71 +129,50 @@ public class Affix {
* both of those strength bonuses had the same effect name, and applied to the
* same sorts of items).
*
- * @return The name of the affix group
- */
+ * @return The name of the affix group */
public String getAffixGroupName() {
StringBuilder sb = new StringBuilder();
- for (Effect eft : effects) {
- sb.append(eft.getEffectGroup());
- }
+ for (Effect eft : effects) sb.append(eft.getEffectGroup());
- for (String enchantSource : enchantSources) {
- sb.append(enchantSource);
- }
+ for (String enchantSource : enchantSources) sb.append(enchantSource);
- for (String equipType : equipTypes) {
- sb.append(equipType);
- }
+ for (String equipType : equipTypes) sb.append(equipType);
- for (String nonEquipType : nonequipTypes) {
- sb.append(nonEquipType);
- }
+ for (String nonEquipType : nonequipTypes) sb.append(nonEquipType);
- for (String socketableType : socketableTypes) {
- sb.append(socketableType);
- }
+ for (String socketableType : socketableTypes) sb.append(socketableType);
return sb.toString();
}
- /*
- * Are invalid equip types being added?
+ /* Are invalid equip types being added?
*
* NOTE: This is kinda bad practice. It should really be handled via two
* separate affix methods, one to add a valid affix, one to add an invalid, w/
- * the caller keeping tracking/calling the right one.
- */
+ * the caller keeping tracking/calling the right one. */
private boolean inNonEquip;
- /**
- * Create a new blank affix.
- */
+ /** Create a new blank affix. */
public Affix() {
- equipTypes = new ArrayList<>();
- nonequipTypes = new ArrayList<>();
- enchantSources = new ArrayList<>();
+ equipTypes = new ArrayList<>();
+ nonequipTypes = new ArrayList<>();
+ enchantSources = new ArrayList<>();
socketableTypes = new ArrayList<>();
- effects = new ArrayList<>();
+ effects = new ArrayList<>();
}
- /**
- * Sets the set of equip types that is added to.
+ /** Sets the set of equip types that is added to.
*
- * @param nonequip
- * True if the equip types being added are prohibited, or false
- * if they are allowed.
- */
+ * @param nonequip True if the equip types being added are prohibited, or false
+ * if they are allowed. */
public void setEquipType(boolean nonequip) {
inNonEquip = nonequip;
}
- /**
- * Add an equip type to the right set of equip types.
+ /** Add an equip type to the right set of equip types.
*
- * @param type
- * The equip type to add.
- */
+ * @param type The equip type to add. */
public void addEquipType(String type) {
if (inNonEquip) {
nonequipTypes.add(type);
@@ -256,13 +196,12 @@ public class Affix {
return intName;
}
- /**
- * Print out the full details of this affix.
+ /** Print out the full details of this affix.
*
- * @return The full details of the affix.
- */
+ * @return The full details of the affix. */
public String toLongString() {
StringBuilder sb = new StringBuilder();
+
if (isSocketable) {
sb.append("Socketable ");
} else if (isPerson || (intName != null && intName.startsWith("HERO_"))) {
@@ -324,12 +263,14 @@ public class Affix {
}
if (equipTypes.size() != 0) {
- if (isSocketable)
+ if (isSocketable) {
sb.append("\tSocketable Into: ");
- else if (isEnchantment)
+ } else if (isEnchantment) {
sb.append("\tEnchants Onto: ");
- else
+ } else {
sb.append("\tSpawns On: ");
+ }
+
sb.append(equipTypes);
sb.append("\n");
}
@@ -362,6 +303,7 @@ public class Affix {
sb.append("\n");
}
+ /*
sb.append("Affix Group: ");
String afxGroupName = getAffixGroupName();
sb.append(afxGroupName);
@@ -369,36 +311,29 @@ public class Affix {
sb.append(afxGroupName.hashCode());
sb.append(")");
sb.append("\n");
+ */
return sb.toString();
}
- /**
- * Load an affix from an input source.
+ /** Load an affix from an input source.
*
- * @param scn
- * The input source to load from.
+ * @param scn The input source to load from.
*
- * @param fName
- * The name of the input source in question.
+ * @param fName The name of the input source in question.
*
- * @return The loaded affix.
- */
+ * @return The loaded affix. */
public static Affix loadAffix(Scanner scn, String fName) {
return loadAffix(scn, fName, new ArrayList<>());
}
- /**
- * Load an affix from an input source.
+ /** Load an affix from an input source.
*
- * @param scn
- * The input source to read from.
- * @param scnName
- * The name of the input source.
- * @param errors
- * A list to stick errors encountered during loading the affix.
- * @return The affix, loaded from the file.
- */
+ * @param scn The input source to read from.
+ * @param scnName The name of the input source.
+ * @param errors A list to stick errors encountered during loading the affix.
+ *
+ * @return The affix, loaded from the file. */
public static Affix loadAffix(Scanner scn, String scnName, List<String> errors) {
Affix afx = new Affix();
@@ -428,9 +363,10 @@ public class Affix {
afx.affixPrefix = splits[1];
break;
default:
- errors.add(
- String.format("Misformed affix translation: (%s) (%s) (%s)\n",
- splits[0], splits[1], scnName));
+ String msg = String.format(
+ "Misformed affix translation: (%s) (%s) (%s)\n",
+ splits[0], splits[1], scnName);
+ errors.add(msg);
}
} else if (ln.contains("MIN_SPAWN_RANGE")) {
afx.minLevel = Integer.parseInt(splits[1]);
@@ -442,13 +378,17 @@ public class Affix {
afx.weight = Integer.parseInt(splits[1]);
} else if (ln.contains("UNITTYPE") && !ln.contains("/")) {
if (splits.length == 1)
- errors.add(String.format("Malformed equip type: (%s) (%s)\n",
+ errors.add(String.format(
+ "Malformed equip type: (%s) (%s)\n",
splits[0], scnName));
+
afx.addEquipType(splits[1]);
} else if (splits[0].equals("<STRING>NAME")) {
if (splits.length == 1)
- errors.add(String.format("Malformed name: (%s) (%s)\n", splits[0],
- scnName));
+ errors.add(String.format(
+ "Malformed name: (%s) (%s)\n",
+ splits[0], scnName));
+
afx.intName = splits[1];
} else if (ln.contains("[EFFECT]")) {
List<String> eftErrs = new ArrayList<>();
@@ -459,21 +399,21 @@ public class Affix {
afx.effects.add(eft);
}
}
+
// Sort effects, so that they are in a stable order, even if specified out of
// order
afx.effects.sort(Comparator.comparingInt((val) -> val.hashCode()));
long endTime = System.nanoTime();
if (doTiming) {
- String fmt
- = "\tProcessed affix %s from %s in %d nanoseconds (%.2f seconds)\n\n";
+ String fmt = "\tProcessed affix %s from %s in %d nanoseconds (%.2f seconds)\n\n";
double seconds = ((double) (endTime - startTime) / 1000000000);
- errors.add(String.format(fmt, afx.intName, scnName, endTime - startTime,
- seconds));
+ errors.add(String.format(
+ fmt,
+ afx.intName, scnName, endTime - startTime, seconds));
}
return afx;
}
-
}
diff --git a/src/main/java/tlIItools/AffixGroup.java b/src/main/java/tlIItools/AffixGroup.java
new file mode 100644
index 00000000..7ae57453
--- /dev/null
+++ b/src/main/java/tlIItools/AffixGroup.java
@@ -0,0 +1,11 @@
+package tlIItools;
+
+/**
+ * Represents a 'group' of related affixes.
+ *
+ * These are affixes that are do the same thing, but could be of varying levels;
+ * or have effects of differing intensity.
+ *
+ * @author Ben Culkin */
+public class AffixGroup {
+}
diff --git a/src/main/java/tlIItools/AffixLister.java b/src/main/java/tlIItools/AffixLister.java
index 4601ef4d..3d5519d3 100644
--- a/src/main/java/tlIItools/AffixLister.java
+++ b/src/main/java/tlIItools/AffixLister.java
@@ -5,76 +5,48 @@ import java.io.*;
import java.util.*;
import java.util.Map.Entry;
-/**
- * Lists randomly generated affixes for Torchlight II gear.
+/** Lists randomly generated affixes for Torchlight II gear.
*
- * @author Ben Culkin
- */
+ * @author Ben Culkin */
public class AffixLister {
- /*
- * Count of effects this class has loaded.
- */
+ /* Count of effects this class has loaded. */
private static int effectCount = 0;
- /**
- * Should the class record timing data?
- */
+ /** Should the class record timing data? */
public static boolean doTiming = false;
- /**
- * Should the file name be attached to things?
- */
+ /** Should the file name be attached to things? */
public static boolean addFileName = false;
- /*
- * Output streams to use.
- */
- /**
- * The normal output to use.
- */
+ /* Output streams to use. */
+
+ /** The normal output to use. */
public static PrintStream normOut = System.out;
- /**
- * The error output to use.
- */
+ /** The error output to use. */
public static PrintStream errOut = System.err;
- /**
- * Indicates how to treat affixes with regards to their names.
- */
+ /** Indicates how to treat affixes with regards to their names. */
public static enum NameMode {
- /**
- * Show all affixes.
- */
+ /** Show all affixes. */
ALL,
- /**
- * Show only unnamed affixes.
- */
+ /** Show only unnamed affixes. */
UNNAMED,
- /**
- * Show only named affixes.
- */
+ /** Show only named affixes. */
NAMED;
}
- /**
- * Main method.
+ /** Main method.
*
- * @param args
- * The names of the files to read affix data from.
- */
+ * @param args The names of the files to read affix data from. */
public static void main(String[] args) {
listAffixes(args);
}
- /**
- * Main method that actually does stuff.
+ /** Main method that actually does stuff.
*
- * @param args
- * The names of the files to read affix data from.
- *
- * @return The listed affix set.
+ * @param args The names of the files to read affix data from.
*
- */
+ * @return The listed affix set. */
@SuppressWarnings("unused")
public static AffixSet listAffixes(String[] args) {
AffixSet affixSetByName = new AffixSet();
@@ -86,17 +58,16 @@ public class AffixLister {
NameMode nameMode = NameMode.ALL;
- int namedCount = 0;
+ int namedCount = 0;
int unnamedCount = 0;
- int zeroCount = 0;
- int groupCount = 0;
+ int zeroCount = 0;
+ int groupCount = 0;
- boolean outputAffixGroups = false;
+ boolean outputAffixGroups = false;
OutputStream affixGroupDest = null;
- Map<String, Set<Affix>> groupContents = affixSetByName.affixGroups;
-
- Set<Affix> nonGroupContents = affixSetByName.ungroupedAffixes;
+ Map<String, Set<Affix>> groupContents = affixSetByName.affixGroups;
+ Set<Affix> nonGroupContents = affixSetByName.ungroupedAffixes;
NameFileReader nfr = new NameFileReader(false);
nfr.groupRx = ".*/mods/([^/]+)/*";
@@ -112,144 +83,112 @@ public class AffixLister {
case "--":
doingArgs = false;
break;
-
case "--omit-zero":
case "-z":
omitZeros = true;
break;
-
case "--no-omit-zero":
case "-Z":
omitZeros = false;
break;
-
case "--list-zero":
case "-l":
listZeros = true;
break;
-
case "--no-list-zero":
case "-L":
listZeros = false;
break;
-
case "--timing":
case "-t":
doTiming = true;
Effect.doTiming = true;
break;
-
case "--no-timing":
case "-T":
doTiming = false;
Effect.doTiming = false;
break;
-
case "--file-names":
case "-f":
addFileName = true;
break;
-
case "--no-file-names":
case "-F":
addFileName = true;
break;
-
case "--name-mode":
case "-n":
if (i + 1 >= args.length) {
- errOut.printf(
- "ERROR: name mode argument requires the mode to use be specified (all, unnamed or named)\n");
+ errOut.printf("ERROR: name mode argument requires the mode to use be specified (all, unnamed or named)\n");
break;
}
nameMode = NameMode.valueOf(args[++i].toUpperCase());
-
break;
-
case "--file-group":
case "-g":
if (i + 1 >= args.length) {
- errOut.printf(
- "ERROR: file group argument requires the group name to use be specified\n");
+ errOut.printf("ERROR: file group argument requires the group name to use be specified\n");
break;
}
nfr.swapGroup(args[++i]);
-
break;
-
case "--guess-groups":
nfr.guessGroups = true;
-
break;
-
case "--no-guess-groups":
nfr.guessGroups = false;
-
break;
-
case "--read-names-from-file":
case "-r":
if (i + 1 >= args.length) {
- errOut.printf(
- "ERROR: read name file argument requires the file to use be specified\n");
+ errOut.printf("ERROR: read name file argument requires the file to use be specified\n");
break;
}
nfr.readFrom(args[++i]);
-
break;
-
case "--output":
case "-o":
if (i + 1 >= args.length) {
- errOut.printf(
- "ERROR: output file argument requires the file to use be specified\n");
+ errOut.printf("ERROR: output file argument requires the file to use be specified\n");
break;
}
try {
normOut = new PrintStream(args[++i]);
-
nfr.normOut = normOut;
} catch (IOException ioex) {
errOut.printf("Could not open output file %s\n", args[i]);
ioex.printStackTrace(errOut);
}
-
break;
-
case "--output-errors":
case "-e":
if (i + 1 >= args.length) {
- errOut.printf(
- "ERROR: error output file argument requires the file to use be specified\n");
+ errOut.printf("ERROR: error output file argument requires the file to use be specified\n");
break;
}
try {
errOut = new PrintStream(args[++i]);
-
nfr.errOut = errOut;
} catch (IOException ioex) {
errOut.printf("Could not open error output file %s\n", args[i]);
ioex.printStackTrace(errOut);
}
-
break;
-
case "--guess-regex":
if (i + 1 >= args.length) {
- errOut.printf(
- "ERROR: group regex argument requires the regex to use be specified\n");
+ errOut.printf("ERROR: group regex argument requires the regex to use be specified\n");
break;
}
nfr.groupRx = args[++i];
-
break;
case "--output-affix-groups":
if (i + 1 >= args.length) {
@@ -260,24 +199,19 @@ public class AffixLister {
try {
affixGroupDest = new PrintStream(args[++i]);
-
outputAffixGroups = true;
} catch (IOException ioex) {
errOut.printf(
"ERROR: Couldn't open file %s to write affix groups to\n",
affixGroupDest);
}
-
break;
default:
isArg = false;
}
- if (isArg) {
- continue;
- }
-
- nfr.addFile(fName);
+ if (isArg) continue;
+ else nfr.addFile(fName);
} else {
nfr.addFile(fName);
}
@@ -286,8 +220,8 @@ public class AffixLister {
AffixSet affixSetByContents = new AffixSet();
for (Entry<String, List<String>> fGroup : nfr.fNames.entrySet()) {
- if (fGroup.getValue().size() == 0)
- continue;
+ if (fGroup.getValue().size() == 0) continue;
+
normOut.printf("\nFile Group '%s' starting\n", fGroup.getKey());
for (String fName : fGroup.getValue()) {
try (FileReader fr = new FileReader(fName)) {
@@ -323,61 +257,62 @@ public class AffixLister {
}
}
- if (afx.weight == 0)
- zeroCount += 1;
+ if (afx.weight == 0) zeroCount += 1;
if (afx.weight == 0 && !listZeros) {
- if (!omitZeros)
- normOut.printf("\nAffix %s has zero spawn weight\n",
- afx.intName);
+ if (!omitZeros) normOut.printf(
+ "\nAffix %s has zero spawn weight\n",
+ afx.intName);
} else {
- boolean isNamed
- = (afx.affixSuffix != null) || (afx.affixPrefix != null);
+ boolean isNamed =
+ (afx.affixSuffix != null) || (afx.affixPrefix != null);
- if (isNamed)
- namedCount += 1;
- else
- unnamedCount += 1;
+ if (isNamed) namedCount += 1;
+ else unnamedCount += 1;
- if (nameMode == NameMode.UNNAMED && isNamed)
- continue;
- if (nameMode == NameMode.NAMED && !isNamed)
- continue;
+ if (nameMode == NameMode.UNNAMED && isNamed) continue;
+ if (nameMode == NameMode.NAMED && !isNamed) continue;
normOut.printf("\n%s\n", afx.toLongString());
}
} catch (Exception ex) {
- errOut.printf("Something bad happened for file %s:%s\n", fName,
- ex.getMessage());
+ errOut.printf(
+ "Something bad happened for file %s:%s\n",
+ fName, ex.getMessage());
ex.printStackTrace(errOut);
-
errOut.println();
}
}
+
normOut.printf("\nFile Group '%s' ending\n", fGroup.getKey());
}
errOut.println("\nGroup Contents: ");
+
for (Entry<String, Set<Affix>> ent : groupContents.entrySet()) {
errOut.printf("\t%s: %s\n", ent.getKey(), ent.getValue());
}
+
errOut.println();
errOut.println();
if (outputAffixGroups) {
- for (Entry<String, Set<Affix>> ent : affixSetByContents.affixGroups
- .entrySet()) {
- String groupName = ent.getKey();
- Set<Affix> affixes = ent.getValue();
+ for (Entry<String, Set<Affix>> ent :
+ affixSetByContents.affixGroups .entrySet()) {
+
+ String groupName = ent.getKey();
+ Set<Affix> affixes = ent.getValue();
boolean isFirstAfx = true;
for (Affix afx : affixes) {
+ // @TODO actually implement this -bculkin, 12/29/2020
+
+ // Print the header for this group
if (isFirstAfx) {
- // Print the header for this
- // group
isFirstAfx = false;
}
+
// print this affix in the group format
}
}
@@ -385,14 +320,15 @@ public class AffixLister {
long endTime = System.nanoTime();
errOut.printf(
- "\nProcessed %,d affixes (%,d named, %,d unnamed, %,d zero-weight) (%,d effects) (%,d distinct groups, %,d actual groups, %,d nongrouped affixes) out of %,d files (%,d groups) in %,d nanoseconds (%.2f seconds)\n",
- nfr.fCount, namedCount, unnamedCount, zeroCount, effectCount, groupCount,
- groupContents.size(), nonGroupContents.size(), nfr.fCount,
- nfr.fNames.size(), endTime - startTime,
- ((double) (endTime - startTime) / 1000000000));
+ "\nProcessed %,d affixes (%,d named, %,d unnamed, %,d zero-weight) (%,d effects) (%,d distinct groups, %,d actual groups, %,d nongrouped affixes) out of %,d files (%,d groups) in %,d nanoseconds (%.2f seconds)\n",
+ nfr.fCount, namedCount, unnamedCount, zeroCount, effectCount, groupCount,
+ groupContents.size(), nonGroupContents.size(), nfr.fCount,
+ nfr.fNames.size(), endTime - startTime,
+ ((double) (endTime - startTime) / 1000000000));
+
errOut.printf(
- "\tOptions: Name Mode: %s, Special-case zero weight: %s, Noting zero-weight in special case: %s\n",
- nameMode, !listZeros, !omitZeros);
+ "\tOptions: Name Mode: %s, Special-case zero weight: %s, Noting zero-weight in special case: %s\n",
+ nameMode, !listZeros, !omitZeros);
return affixSetByName;
}
diff --git a/src/main/java/tlIItools/AffixSet.java b/src/main/java/tlIItools/AffixSet.java
index d43b34e1..d6b950f6 100644
--- a/src/main/java/tlIItools/AffixSet.java
+++ b/src/main/java/tlIItools/AffixSet.java
@@ -2,50 +2,37 @@ package tlIItools;
import java.util.*;
-/**
- * Container of a set of affixes.
+/** Container of a set of affixes.
*
- * @author Ben Culkin
- */
+ * @author Ben Culkin */
public class AffixSet {
private static class AffixComparator implements Comparator<Affix> {
@Override
public int compare(Affix a1, Affix a2) {
- if (a1.minLevel == a2.minLevel) {
- return a1.maxLevel - a2.maxLevel;
- }
-
- return a1.minLevel - a2.minLevel;
+ if (a1.minLevel == a2.minLevel) return a1.maxLevel - a2.maxLevel;
+ else return a1.minLevel - a2.minLevel;
}
}
- /**
- * All of the affix groups contained in this set.
+ /** All of the affix groups contained in this set.
*
* An affix group is a set of affixes that generally have the same or
- * similar effects, but have different intensities or spawn levels.
- */
+ * similar effects, but have different intensities or spawn levels. */
public Map<String, Set<Affix>> affixGroups;
- /**
- * All of the ungrouped affixes contained in this set.
- */
+ /** All of the ungrouped affixes contained in this set. */
public Set<Affix> ungroupedAffixes;
- /**
- * Create a new blank affix set.
- */
+ /** Create a new blank affix set. */
public AffixSet() {
affixGroups = new TreeMap<>();
ungroupedAffixes = new TreeSet<>(new AffixComparator());
}
- /**
- * Add an affix to this set.
+ /** Add an affix to this set.
*
- * @param afx The affix to add.
- */
+ * @param afx The affix to add. */
public void addAffixByContents(Affix afx) {
String afxGroup = afx.getAffixGroupName();
@@ -55,13 +42,10 @@ public class AffixSet {
affixGroups.compute(afxGroup, (key, val) -> {
if (val == null) {
Set<Affix> afxSet = new HashSet<>();
-
afxSet.add(afx);
-
return afxSet;
} else {
val.add(afx);
-
return val;
}
});
diff --git a/src/main/java/tlIItools/Effect.java b/src/main/java/tlIItools/Effect.java
index d641b112..b6b7e30f 100644
--- a/src/main/java/tlIItools/Effect.java
+++ b/src/main/java/tlIItools/Effect.java
@@ -1,162 +1,96 @@
package tlIItools;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Scanner;
+import java.util.*;
-/**
- * Represents an effect attached to an affix.
+/** Represents an effect attached to an affix.
*
- * @author Ben Culkin
- */
+ * @author Ben Culkin */
public class Effect {
- /**
- * Count of all loaded effects.
- */
+ /** Count of all loaded effects. */
public static int effectCount = 0;
- /**
- * Do timing analysis when loading effects.
- */
+ /** Do timing analysis when loading effects. */
public static boolean doTiming;
- /**
- * The file name this effect came from.
- */
+ /** The file name this effect came from. */
public String fName;
-
- /**
- * The name of the effect.
- */
+ /** The name of the effect. */
public String name;
- /**
- * The specific effect that happens.
- */
+ /** The specific effect that happens. */
public String type;
- /**
- * Damage type for the effect, if applicable.
- */
+ /** Damage type for the effect, if applicable. */
public String damageType = "physical";
- /**
- * Duration of the effect.
- */
+ /** Duration of the effect. */
public double duration;
- /**
- * Whether or not we have a duration or not.
- */
+ /** Whether or not we have a duration or not. */
public boolean hasDuration;
- /**
- * Minimum value for the effect.
- */
+ /** Minimum value for the effect. */
public double minValue;
- /**
- * Maximum value for the effect.
- */
+ /** Maximum value for the effect. */
public double maxValue;
- /**
- * The name of the stat that applies to this affect.
- */
+ /** The name of the stat that applies to this affect. */
public String statName;
- /**
- * The percent of the stat value to apply.
- */
+ /** The percent of the stat value to apply. */
public double statPercent;
- /**
- * Whether or not this stat is a bonus value.
- */
+ /** Whether or not this stat is a bonus value. */
public boolean isStatBonus;
- /**
- * Whether or not this uses the owners level to modify
- * any applicable graph.
- */
+ /** Whether or not this uses the owners level to modify any applicable graph. */
public boolean ownerLevel;
- /**
- * The graph to use instead of the default graph.
- */
- public String graphOverride;
-
- /**
- * Whether or not a graph is used for this effect.
- */
+ /** Whether or not a graph is used for this effect. */
public boolean useGraph = true;
+ /** The graph to use instead of the default graph. */
+ public String graphOverride;
- /**
- * Whether this effect can stack with itself.
- */
+ /** Whether this effect can stack with itself. */
public boolean exclusive;
- /**
- * The amount the targets armor is reduced by for this
- * effect.
- */
+ /** The amount the targets armor is reduced by for this effect. */
public double soakScale = 1.0;
- /**
- * Level of the effect.
- */
+ /** Level of the effect. */
public int level = -1;
- /**
- * Whether or not this effect is a 'transfer'
- * effect (Applied to the enemy on a hit).
- */
+ /** Whether or not this effect is a 'transfer' effect (Applied to the enemy on a hit). */
public boolean isTransfer;
- /**
- * The amount to resist/do knockback by.
- */
+ /** The amount to resist/do knockback by. */
public double resist;
- /**
- * Minimum value per monster.
- */
+ /** Minimum value per monster. */
public double minPer;
- /**
- * Maximum value per monster.
- */
+ /** Maximum value per monster. */
public double maxPer;
- /**
- * Range for effect.
- */
+ /** Range for effect. */
public double range;
- /**
- * Maximum count of monsters.
- */
+ /** Maximum count of monsters. */
public double maxCount;
- /**
- * The rate at which the effect fires.
- */
+ /** The rate at which the effect fires. */
public double pulse;
- /**
- * Create a new blank effect.
- */
+ /** Create a new blank effect. */
public Effect() {
}
- /**
- * Gets the 'effect group' this effect belongs to.
+ /** Gets the 'effect group' this effect belongs to.
*
* An 'effect group is essentially any other effect that is the same general sort of effect, just with different details.
*
* For instance, an effect that grants +4 strength would group with one granting +8 strength,
* assuming that most other details were equal.
*
- * @return The 'effect group' this effect belongs to.
- */
+ * @return The 'effect group' this effect belongs to. */
public String getEffectGroup() {
StringBuilder sb = new StringBuilder();
@@ -185,9 +119,16 @@ public class Effect {
Map<String, String> detMap = hasDuration ? EffectRepo.timeDetals : EffectRepo.detals;
- if (detMap.containsKey(type) || (hasDuration && !EffectRepo.timeDetals.containsKey(type) && EffectRepo.detals.containsKey(type))) {
+ if (detMap.containsKey(type) ||
+ (hasDuration
+ && !EffectRepo.timeDetals.containsKey(type)
+ && EffectRepo.detals.containsKey(type)))
+ {
String fmt;
- if (hasDuration && !EffectRepo.timeDetals.containsKey(type) && EffectRepo.detals.containsKey(type)) {
+ if (hasDuration
+ && !EffectRepo.timeDetals.containsKey(type)
+ && EffectRepo.detals.containsKey(type))
+ {
AffixLister.errOut.printf("Improvised details for timed %s\n", type);
fmt = EffectRepo.detals.get(type) + "for <DUR> seconds";
} else {
@@ -196,35 +137,27 @@ public class Effect {
// Expand aliases first.
- for (ReplPair repl : EffectRepo.replList) {
- fmt = fmt.replaceAll(repl.find, repl.replace);
- }
+ for (ReplPair repl : EffectRepo.replList) fmt = fmt.replaceAll(repl.find, repl.replace);
- if (minValue <= 0 && maxValue <= 0) {
- fmt = fmt.replaceAll("<C\\|([^|>]+)\\|([^|>]+)>", "$1");
- }
-
- if (minValue >= 0 && maxValue >= 0) {
- fmt = fmt.replaceAll("<C\\|([^|>]+)\\|([^|>]+)>", "$2");
- }
-
- if (minPer <= 0 && maxPer <= 0) {
- fmt = fmt.replaceAll("<MC\\|(\\w+)\\|(\\w+)>", "$1");
- }
-
- if (minPer >= 0 && maxPer >= 0) {
- fmt = fmt.replaceAll("<MC\\|([^|>]+)\\|([^|>]+)>", "$2");
- }
+ if (minValue <= 0 && maxValue <= 0) { fmt = fmt.replaceAll("<C\\|([^|>]+)\\|([^|>]+)>", "$1"); }
+ if (minValue >= 0 && maxValue >= 0) { fmt = fmt.replaceAll("<C\\|([^|>]+)\\|([^|>]+)>", "$2"); }
+ if (minPer <= 0 && maxPer <= 0) { fmt = fmt.replaceAll("<MC\\|(\\w+)\\|(\\w+)>", "$1"); }
+ if (minPer >= 0 && maxPer >= 0) { fmt = fmt.replaceAll("<MC\\|([^|>]+)\\|([^|>]+)>", "$2"); }
if (fmt.contains("<") || fmt.contains(">")) {
AffixLister.errOut.printf("WARN: Details for effect %s are malformatted (contains < or >):\n\t%s\n", type, fmt);
}
- sb.append(String.format(fmt, Math.abs(minValue), Math.abs(maxValue), duration, damageType.toLowerCase(), level, resist, name, Math.abs(minPer), Math.abs(maxPer), range, maxCount, pulse));
+ sb.append(String.format(fmt,
+ Math.abs(minValue), Math.abs(maxValue),
+ duration, damageType.toLowerCase(), level, resist, name,
+ Math.abs(minPer), Math.abs(maxPer), range, maxCount, pulse));
} else {
sb.append("No effect details for effect ");
sb.append(type);
- sb.append(String.format(" with parameters (min %.2f, max %.2f, dur %.2f, type %s, level %d)", minValue, maxValue, duration, damageType.toLowerCase(), level, name));
+ sb.append(String.format(
+ " with parameters (min %.2f, max %.2f, dur %.2f, type %s, level %d)",
+ minValue, maxValue, duration, damageType.toLowerCase(), level, name));
if (AffixLister.addFileName) {
sb.append(" from file ");
@@ -267,6 +200,7 @@ public class Effect {
if (statName != null) {
sb.append(String.format(" (%.2f of stat %s", statPercent, statName));
+
if (isStatBonus) sb.append(" as bonus)");
else sb.append(")");
}
@@ -321,16 +255,14 @@ public class Effect {
@Override
public boolean equals(Object obj) {
- if (this == obj)
- return true;
- if (obj == null)
- return false;
- if (getClass() != obj.getClass())
- return false;
+ if (this == obj) return true;
+ if (obj == null) return false;
+ if (getClass() != obj.getClass()) return false;
+
Effect other = (Effect) obj;
+
if (damageType == null) {
- if (other.damageType != null)
- return false;
+ if (other.damageType != null) return false;
} else if (!damageType.equals(other.damageType))
return false;
if (Double.doubleToLongBits(duration) != Double.doubleToLongBits(other.duration))
@@ -394,25 +326,26 @@ public class Effect {
return true;
}
- /**
- * Parse an effect.
+ /** Parse an effect.
+ *
* @param afx The affix the effect belongs to.
* @param scn The scanner to read from.
* @param scnSource The name of the scanner.
+ *
* @return An effect, read from the scanner.
*/
public static Effect parseEffect(Affix afx, Scanner scn, String scnSource) {
return parseEffect(afx, scn, scnSource, new ArrayList<>());
}
- /**
- * Parse an effect.
+ /** Parse an effect.
+ *
* @param afx The affix the effect belongs to.
* @param scn The scanner to read from.
* @param scnSource The name of the scanner.
* @param errs Repository for errors found while parsing.
- * @return An effect, read from the scanner.
- */
+ *
+ * @return An effect, read from the scanner. */
public static Effect parseEffect(Affix afx, Scanner scn, String scnSource, List<String> errs) {
Effect efct = new Effect();
@@ -532,6 +465,4 @@ public class Effect {
return efct;
}
-
-
}
diff --git a/src/main/java/tlIItools/EffectRepo.java b/src/main/java/tlIItools/EffectRepo.java
index f2f0d076..05151a48 100644
--- a/src/main/java/tlIItools/EffectRepo.java
+++ b/src/main/java/tlIItools/EffectRepo.java
@@ -1,40 +1,26 @@
package tlIItools;
-import java.io.FileReader;
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Scanner;
+import java.io.*;
+import java.util.*;
import java.util.Map.Entry;
-/**
- * Repository class for storing information needed for parsing/outputing
+/** Repository class for storing information needed for parsing/outputing
* effects.
*
- * @author Ben Culkin
- *
- */
+ * @author Ben Culkin */
public class EffectRepo {
// NOTE: consider making these use function accessors in the future?
// --bculkin, 6/24/20
- /**
- * The list of detail strings for skills.
- */
+
+ /** The list of detail strings for skills. */
public static Map<String, String> detals;
- /**
- * The list of detail strings for timed skills.
- */
+ /** The list of detail strings for timed skills. */
public static Map<String, String> timeDetals;
- /**
- * The list of replacements for detail strings.
- */
+ /** The list of replacements for detail strings. */
public static List<ReplPair> replList;
- /*
- * Init. lists from files.
- */
+ /* Init. lists from files. */
static {
try (FileReader detalReader = new FileReader("data/affix-detals.txt")) {
detals = readDetails(new Scanner(detalReader));
@@ -42,8 +28,7 @@ public class EffectRepo {
AffixLister.errOut.println("Error loading affix detail text");
}
- try (FileReader timedDetalReader
- = new FileReader("data/timed-affix-detals.txt")) {
+ try (FileReader timedDetalReader = new FileReader("data/timed-affix-detals.txt")) {
timeDetals = readDetails(new Scanner(timedDetalReader));
} catch (IOException ioex) {
AffixLister.errOut.println("Error loading timed affix detail text");
@@ -56,36 +41,31 @@ public class EffectRepo {
}
}
- /**
- * Read effect detail strings from an input source.
+ /** Read effect detail strings from an input source.
+ *
+ * @param scn The source to read from.
*
- * @param scn
- * The source to read from.
- * @return The map of effect details to use.
- */
+ * @return The map of effect details to use. */
public static Map<String, String> readDetails(Scanner scn) {
Map<String, String> detalMap = new HashMap<>();
return readDetails(detalMap, scn);
}
- /**
- * Read effect detail strings from an input source, adding to an existing set.
+ /** Read effect detail strings from an input source, adding to an existing set.
+ *
+ * @param detalMap The details to add to.
+ * @param scn The source to read from.
*
- * @param detalMap
- * The details to add to.
- * @param scn
- * The source to read from.
- * @return The map of effect details to use.
- */
- public static Map<String, String> readDetails(Map<String, String> detalMap,
- Scanner scn) {
+ * @return The map of effect details to use. */
+ public static Map<String, String> readDetails(
+ Map<String, String> detalMap, Scanner scn)
+ {
while (scn.hasNextLine()) {
String name = scn.nextLine().trim();
- if (name.equals(""))
- continue;
- if (name.startsWith("#"))
- continue;
+
+ if (name.equals("")) continue;
+ if (name.startsWith("#")) continue;
String body;
do {
@@ -98,18 +78,17 @@ public class EffectRepo {
return detalMap;
}
- /**
- * Sanity check the loaded format strings.
- */
+ /** Sanity check the loaded format strings. */
public static void sanityCheckFormats() {
for (Entry<String, String> detal : detals.entrySet()) {
String fmt = detal.getValue();
- AffixLister.errOut.printf("\tTRACE: Applying replacements for %s\n",
- detal.getKey());
+ AffixLister.errOut.printf("\tTRACE: Applying replacements for %s\n", detal.getKey());
+
for (ReplPair repl : replList) {
String tmp = fmt;
fmt = fmt.replaceAll(repl.find, repl.replace);
+
if (!fmt.equals(tmp)) {
String outFmt = "\t\tTRACE: Replaced %s with %s: \n\t\t%s\n\t\t%s\n";
@@ -118,8 +97,7 @@ public class EffectRepo {
}
if (fmt.contains("<") || fmt.contains(">")) {
- String warnFmt
- = "WARN: Details for effect %s are malformated (contains < or >):\n\t%s\n";
+ String warnFmt = "WARN: Details for effect %s are malformated (contains < or >):\n\t%s\n";
AffixLister.errOut.printf(warnFmt, detal.getKey(), fmt);
}
@@ -133,8 +111,7 @@ public class EffectRepo {
}
if (fmt.contains("<") || fmt.contains(">")) {
- String warnFmt
- = "WARN: Details for timed effect %s are malformatted (contains < or >):\n\t%s\n";
+ String warnFmt = "WARN: Details for timed effect %s are malformatted (contains < or >):\n\t%s\n";
AffixLister.errOut.printf(warnFmt, detal.getKey(), fmt);
}
}
diff --git a/src/main/java/tlIItools/Main.java b/src/main/java/tlIItools/Main.java
index fa2617c5..a4d09bff 100644
--- a/src/main/java/tlIItools/Main.java
+++ b/src/main/java/tlIItools/Main.java
@@ -1,17 +1,12 @@
package tlIItools;
-/**
- * Main method for TLIITools
+/** Main method for TLIITools
*
- * @author Ben Culkin
- *
- */
+ * @author Ben Culkin */
public class Main {
- /**
- * Main method.
+ /** Main method.
*
- * @param args Unused CLI args.
- */
+ * @param args Unused CLI args. */
public static void main(String[] args) {
// TODO implement this
}
diff --git a/src/main/java/tlIItools/NameFileReader.java b/src/main/java/tlIItools/NameFileReader.java
index 8b1b62d4..a9646942 100644
--- a/src/main/java/tlIItools/NameFileReader.java
+++ b/src/main/java/tlIItools/NameFileReader.java
@@ -1,120 +1,71 @@
package tlIItools;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.PrintStream;
-import java.io.Reader;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Scanner;
-
-/**
- * Reads in a list of file names to process.
+import java.io.*;
+
+import java.util.*;
+
+/** Reads in a list of file names to process.
*
- * @author Ben Culkin
- */
+ * @author Ben Culkin */
public class NameFileReader {
- /**
- * Are we attempting to guess group names?
- */
+ /** Are we attempting to guess group names? */
public boolean guessGroups;
-
- /**
- * Regex to use for guessing group names.
- */
+ /** Regex to use for guessing group names. */
public String groupRx;
-
- /**
- * The default group to put files into.
- */
+ /** The default group to put files into. */
public String defGroup;
-
- /**
- * The map of file groups.
- */
+ /** The map of file groups. */
public Map<String, List<String>> fNames;
- /*
- * The current group.
- */
+ /* The current group. */
private String curGroup;
- /*
- * The list of files for the current group.
- */
+ /* The list of files for the current group. */
private List<String> curList;
- /**
- * Counts the files read in.
- */
+ /** Counts the files read in. */
public int fCount;
- /**
- * Stream to write normal output to.
- */
+ /** Stream to write normal output to. */
public PrintStream normOut = System.out;
-
- /**
- * Stream to write error output to.
- */
+ /** Stream to write error output to. */
public PrintStream errOut = System.err;
- /**
- * Create a new name reader using the default settings.
+ /** Create a new name reader using the default settings.
*
- * Guessing groups is disabled by default.
- */
+ * Guessing groups is disabled by default. */
public NameFileReader() {
this(false);
}
- /**
- * Create a new name reader using the default settings.
+ /** Create a new name reader using the default settings.
*
- * @param guessGroups
- * Controls whether or not to try to guess file groups from file
- * names.
- */
+ * @param guessGroups Controls whether or not to try to guess file groups from file names. */
public NameFileReader(boolean guessGroups) {
this(new HashMap<>(), "default", guessGroups);
}
- /**
- * Create a new name reader using the specified settings.
- *
- * @param fNames
- * The set of groups to add files to.
- *
- * @param defGroup
- * The name of the default file group.
+ /** Create a new name reader using the specified settings.
*
- * @param guessGroups
- * Whether or not to attempt to guess group names.
- */
+ * @param fNames The set of groups to add files to.
+ * @param defGroup The name of the default file group.
+ * @param guessGroups Whether or not to attempt to guess group names. */
public NameFileReader(Map<String, List<String>> fNames, String defGroup, boolean guessGroups) {
- if (!fNames.containsKey(defGroup))
- fNames.put(defGroup, new ArrayList<>());
+ if (!fNames.containsKey(defGroup)) fNames.put(defGroup, new ArrayList<>());
this.fNames = fNames;
- this.defGroup = defGroup;
-
+ this.defGroup = defGroup;
this.guessGroups = guessGroups;
+ this.curGroup = defGroup;
- this.curGroup = defGroup;
- this.curList = fNames.get(curGroup);
+ this.curList = fNames.get(curGroup);
this.fCount = 0;
}
- /**
- * Read in file names from a file.
+ /** Read in file names from a file.
*
- * @param from
- * The name of the file to read from.
- */
+ * @param from The name of the file to read from. */
public void readFrom(String from) {
try (FileReader fr = new FileReader(from)) {
readFrom(fr);
@@ -125,13 +76,9 @@ public class NameFileReader {
}
}
- /**
- * Read in file names from an input source.
- *
- * @param r
- * The input source to read from.
+ /** Read in file names from an input source.
*
- */
+ * @param r The input source to read from. */
public void readFrom(Reader r) {
Scanner scn = new Scanner(r);
@@ -160,12 +107,9 @@ public class NameFileReader {
scn.close();
}
- /**
- * Swap to a new file group.
+ /** Swap to a new file group.
*
- * @param groupName
- * The name of the group to swap to.
- */
+ * @param groupName The name of the group to swap to. */
public void swapGroup(String groupName) {
curGroup = groupName;
@@ -178,23 +122,19 @@ public class NameFileReader {
}
}
- /**
- * Add a file to this file reader.
+ /** Add a file to this file reader.
*
- * @param fName The file to add.
- */
+ * @param fName The file to add. */
public void addFile(String fName) {
curList.add(fName);
fCount += 1;
}
- /**
- * Add a file to this file reader.
+ /** Add a file to this file reader.
*
- * @param groupName The group to add the file to. *
- * @param fName The file to add.
- */
+ * @param groupName The group to add the file to.
+ * @param fName The file to add. */
public void addFile(String groupName, String fName) {
fNames.computeIfAbsent(groupName, (key) -> new ArrayList<>()).add(fName);
diff --git a/src/main/java/tlIItools/ReplPair.java b/src/main/java/tlIItools/ReplPair.java
index 74012716..90717a0a 100644
--- a/src/main/java/tlIItools/ReplPair.java
+++ b/src/main/java/tlIItools/ReplPair.java
@@ -1,51 +1,31 @@
package tlIItools;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Scanner;
+import java.util.*;
-/**
- * String pairs for replacements.
+/** String pairs for replacements.
*
- * @author Ben Culkin
- */
+ * @author Ben Culkin */
public class ReplPair implements Comparable<ReplPair> {
- /**
- * Represents an error encountered parsing ReplPairs
+ /** Represents an error encountered parsing ReplPairs
*
- * @author Ben Culkin
- */
+ * @author Ben Culkin */
public static class ReplError {
- /**
- * The line the error occured on.
- */
+ /** The line the error occured on. */
public int line;
- /**
- * The number of pairs we have processed so far.
- */
+ /** The number of pairs we have processed so far. */
public int numPairs;
- /**
- * The text of the line we errored on.
- */
+ /** The text of the line we errored on. */
public String txt;
- /**
- * The message of the error.
- */
+ /** The message of the error. */
public String msg;
- /**
- * Create a new ReplPair parse error.
+ /** Create a new ReplPair parse error.
*
- * @param lne
- * The line the error occured on.
- * @param nPairs
- * The number of pairs processed up to this point.
- * @param msg
- * The message detailing the error.
- * @param txt
- * The text that caused the error.
- */
+ * @param lne The line the error occured on.
+ * @param nPairs The number of pairs processed up to this point.
+ * @param msg The message detailing the error.
+ * @param txt The text that caused the error. */
public ReplError(int lne, int nPairs, String msg, String txt) {
line = lne;
numPairs = nPairs;
@@ -65,86 +45,56 @@ public class ReplPair implements Comparable<ReplPair> {
}
}
- /**
- * The priority for this replacement.
- */
+ /** The priority for this replacement. */
public int priority;
-
- /**
- * The name of this replacement.
+ /** The name of this replacement.
*
- * Defaults to the 'find' string.
- */
+ * Defaults to the 'find' string. */
public String name;
- /**
- * The string to look for.
- */
+ /** The string to look for. */
public String find;
-
- /**
- * The string to replace it with.
- */
+ /** The string to replace it with. */
public String replace;
- /**
- * Create a new blank replacement pair.
- */
+ /** Create a new blank replacement pair. */
public ReplPair() {
this("", "", 1, null);
}
- /**
- * Create a new replacement pair with a priority of 1.
+ /** Create a new replacement pair with a priority of 1.
*
- * @param f
- * The string to find.
- * @param r
- * The string to replace.
+ * @param f The string to find.
+ * @param r The string to replace.
*/
public ReplPair(String f, String r) {
this(f, r, 1);
}
- /**
- * Create a new named replacement pair with a priority of 1.
+ /** Create a new named replacement pair with a priority of 1.
*
- * @param f
- * The string to find.
- * @param r
- * The string to replace.
- * @param n
- * The name of the replacement pair.
+ * @param f The string to find.
+ * @param r The string to replace.
+ * @param n The name of the replacement pair.
*/
public ReplPair(String f, String r, String n) {
this(f, r, 1, n);
}
- /**
- * Create a new replacement pair with a set priority.
+ /** Create a new replacement pair with a set priority.
*
- * @param f
- * The string to find.
- * @param r
- * The string to replace.
- * @param p
- * The priority for the replacement.
- */
+ * @param f The string to find.
+ * @param r The string to replace.
+ * @param p The priority for the replacement. */
public ReplPair(String f, String r, int p) {
this(f, r, p, f);
}
- /**
- * Create a new replacement pair with a set priority and name.
+ /** Create a new replacement pair with a set priority and name.
*
- * @param f
- * The string to find.
- * @param r
- * The string to replace.
- * @param n
- * The name of the replacement pair.
- * @param p
- * The priority for the replacement.
- */
+ * @param f The string to find.
+ * @param r The string to replace.
+ * @param n The name of the replacement pair.
+ * @param p The priority for the replacement. */
public ReplPair(String f, String r, int p, String n) {
find = f;
replace = r;
@@ -153,29 +103,23 @@ public class ReplPair implements Comparable<ReplPair> {
priority = p;
}
- /**
- * Read a list of replacement pairs from an input source.
+
+ /** Read a list of replacement pairs from an input source.
*
- * @param scn
- * The source to read the replacements from.
- * @return
- * The list of replacements.
- */
+ * @param scn The source to read the replacements from.
+ *
+ * @return The list of replacements. */
public static List<ReplPair> readList(Scanner scn) {
return ReplPair.readList(new ArrayList<>(), scn);
}
- /**
- * Read a list of replacement pairs from an input source, adding them to
+ /** Read a list of replacement pairs from an input source, adding them to
* an existing list.
*
- * @param detals
- * The list to add the replacements to.
- * @param scn
- * The source to read the replacements from.
- * @return
- * The list of replacements.
- */
+ * @param detals The list to add the replacements to.
+ * @param scn The source to read the replacements from.
+ *
+ * @return The list of replacements. */
public static List<ReplPair> readList(List<ReplPair> detals, Scanner scn) {
List<ReplError> errList = new ArrayList<>();
@@ -186,25 +130,22 @@ public class ReplPair implements Comparable<ReplPair> {
if (errList.size() == 0) errString = "An error";
else errString = "Errors";
- throw new IllegalArgumentException(String.format("%s occured parsing replacement pairs:\n%s", errString, errList));
+ throw new IllegalArgumentException(String.format(
+ "%s occured parsing replacement pairs:\n%s",
+ errString, errList));
}
return rplPar;
}
- /**
- * Read a list of replacement pairs from an input source, adding them to
+ /** Read a list of replacement pairs from an input source, adding them to
* an existing list.
*
- * @param detals
- * The list to add the replacements to.
- * @param scn
- * The source to read the replacements from.
- * @param errs
- * The list to stick errors in.
- * @return
- * The list of replacements.
- */
+ * @param detals The list to add the replacements to.
+ * @param scn The source to read the replacements from.
+ * @param errs The list to stick errors in.
+ *
+ * @return The list of replacements. */
public static List<ReplPair> readList(List<ReplPair> detals, Scanner scn, List<ReplError> errs) {
int lno = 0;
int pno = 0;
@@ -236,8 +177,7 @@ public class ReplPair implements Comparable<ReplPair> {
// Read in the next uncommented line
do {
if (!scn.hasNextLine()) {
- String msg =
- "Ran out of input looking for replacement body for raw name " + name;
+ String msg = "Ran out of input looking for replacement body for raw name " + name;
errs.add(new ReplError(lno, pno, msg, null));
break;
@@ -247,7 +187,6 @@ public class ReplPair implements Comparable<ReplPair> {
lno += 1;
} while (body.startsWith("#"));
-
rp.replace = body;
resList.add(rp);