Updated Release Archive. Fixed Mage-killer prereqs. Removed old LETO & ConvoCC related files. Added organized spell scroll store. Fixed Gloura spellbook. Various TLK fixes. Reorganized Repo. Removed invalid user folders. Added DocGen back in.
128 lines
4.2 KiB
Java
128 lines
4.2 KiB
Java
package prc.utils;
|
|
|
|
import prc.autodoc.Data_2da;
|
|
|
|
import java.io.File;
|
|
import java.io.FileWriter;
|
|
import java.util.Scanner;
|
|
import java.util.regex.Pattern;
|
|
|
|
public final class CodeGen {
|
|
private CodeGen() {
|
|
}
|
|
|
|
private static class Script implements Cloneable {
|
|
public String text,
|
|
name;
|
|
|
|
public Script(String text, String name) {
|
|
this.text = text;
|
|
this.name = name;
|
|
}
|
|
|
|
public Object clone() {
|
|
return new Script(text, name);
|
|
}
|
|
}
|
|
|
|
|
|
private static String prefix,
|
|
suffix,
|
|
template;
|
|
private static Data_2da[] data;
|
|
|
|
/**
|
|
* The main method, as usual.
|
|
*
|
|
* @param args do I really need to exapain this?
|
|
* @throws Exception this is a simple tool, just let all failures blow up
|
|
*/
|
|
public static void main(String[] args) throws Exception {
|
|
if (args.length == 0 || args[0].equals("--help") || args[0].equals("-?"))
|
|
readMe();
|
|
|
|
prefix = args[0];
|
|
suffix = args[1];
|
|
template = readTemplate(args[2]);
|
|
|
|
data = new Data_2da[args.length - 3];
|
|
for (int i = 0; i < data.length; i++)
|
|
data[i] = Data_2da.load2da(args[i + 3]);
|
|
|
|
doCreation(new Script(template, prefix), 0);
|
|
}
|
|
|
|
private static void readMe() {
|
|
System.out.println("Usage:\n" +
|
|
"\tjava CodeGen namePrefix nameSuffix templatePath 2daPaths...\n" +
|
|
"\n" +
|
|
"namePrefix\tprefix that all the resulting filenames will share\n" +
|
|
"nameSuffix\tsuffix that all the resulting filenames will share\n" +
|
|
"templatePath\tlocation of the template to use. May be absolute or relative\n" +
|
|
"2daPaths\tone or more 2da files to use fill the template with\n" +
|
|
"\n\n" +
|
|
"Places to replace in the template are marked with ~~~Identifier~~~. This will\n" +
|
|
"be replaced by entries from a column in one of the 2das labeled Identifier.\n" +
|
|
"This is case-insensitive.\n" +
|
|
"\n" +
|
|
"The 2da files must contain two columns labeled Suffix and Value.\n" +
|
|
"\n" +
|
|
"One script file will be generated for each possible combination of values from\n" +
|
|
"the 2das. They will automatically have file type identifier of .nss"
|
|
);
|
|
|
|
System.exit(0);
|
|
}
|
|
|
|
|
|
private static String readTemplate(String filePath) throws Exception {
|
|
Scanner reader = new Scanner(new File(filePath));
|
|
StringBuffer temp = new StringBuffer();
|
|
|
|
while (reader.hasNextLine()) temp.append(reader.nextLine() + "\n");
|
|
|
|
return temp.toString();
|
|
}
|
|
|
|
|
|
private static void doCreation(Script script, int depth) throws Exception {
|
|
if (depth == data.length) {
|
|
printScript(script);
|
|
return;
|
|
}
|
|
Script copy;
|
|
|
|
for (int i = 0; i < data[depth].getEntryCount(); i++) {
|
|
copy = (Script) script.clone();
|
|
for (String label : data[depth].getLabels())
|
|
copy.text = Pattern.compile("~~~" + label + "~~~", Pattern.CASE_INSENSITIVE)
|
|
.matcher(copy.text)
|
|
.replaceAll(data[depth].getEntry(label, i));
|
|
/*copy.text = script.text.replaceAll("~~~" + data[depth].getName() + "~~~",
|
|
data[depth].getEntry("Value", i));*/
|
|
copy.name += data[depth].getEntry("Suffix", i) != null ?
|
|
data[depth].getEntry("Suffix", i) :
|
|
"";
|
|
|
|
doCreation(copy, depth + 1);
|
|
}
|
|
}
|
|
|
|
|
|
private static void printScript(Script toPrint) throws Exception {
|
|
File target = new File(toPrint.name + suffix);
|
|
// Clean up old version if necessary
|
|
if (target.exists()) {
|
|
System.out.println("Deleting previous version of " + target.getName());
|
|
target.delete();
|
|
}
|
|
target.createNewFile();
|
|
|
|
// Creater the writer and print
|
|
FileWriter writer = new FileWriter(target, false);
|
|
writer.write(toPrint.text);
|
|
// Clean up
|
|
writer.flush();
|
|
writer.close();
|
|
}
|
|
} |