Final product
This commit is contained in:
commit
313bc87210
34 changed files with 3161 additions and 0 deletions
91
src/com/gnarwhal/ld48/engine/properties/PropertyReader.java
Normal file
91
src/com/gnarwhal/ld48/engine/properties/PropertyReader.java
Normal file
|
@ -0,0 +1,91 @@
|
|||
package com.gnarwhal.ld48.engine.properties;
|
||||
|
||||
import com.gnarwhal.ld48.engine.properties.Properties.*;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.util.Scanner;
|
||||
|
||||
public class PropertyReader {
|
||||
|
||||
private static int lineNum;
|
||||
private static String path;
|
||||
|
||||
public static Properties readProperties(String path) {
|
||||
Properties props = null;
|
||||
try {
|
||||
File file = new File(path);
|
||||
Scanner scanner = new Scanner(file);
|
||||
PropertyReader.path = path;
|
||||
lineNum = 0;
|
||||
props = readBlock(file.getName(), scanner).data;
|
||||
scanner.close();
|
||||
} catch (FileNotFoundException e) {
|
||||
e.printStackTrace();
|
||||
System.exit(-1);
|
||||
}
|
||||
return props;
|
||||
}
|
||||
|
||||
private static BlockNode readBlock(String name, Scanner scanner) {
|
||||
BlockNode props = new BlockNode();
|
||||
props.key = name;
|
||||
props.data = new Properties(name);
|
||||
while (scanner.hasNextLine()) {
|
||||
String line = scanner.nextLine();
|
||||
line = line.replaceAll("\\s", "");
|
||||
if(line.equals("}"))
|
||||
break;
|
||||
else if(line.length() < 2 || !line.substring(0, 2).equals("//")){
|
||||
String[] pair = line.split(":");
|
||||
if (pair.length != 2)
|
||||
throw new ImproperFormattingException("Formatting exception on line " + line + " in file '" + path + "!");
|
||||
pair[1] = pair[1].replaceAll("\\s", "");
|
||||
if (pair[1].equals("{"))
|
||||
props.data.add(readBlock(pair[0], scanner));
|
||||
else if (pair[1].matches("(\\d+|0x[\\da-f]+)")) {
|
||||
IntNode node = new IntNode();
|
||||
node.key = pair[0];
|
||||
node.data = Integer.decode(pair[1]);
|
||||
props.data.add(node);
|
||||
}
|
||||
else if (pair[1].matches("(\\d+|0x[\\d0-9]+)(,(\\d+|0x[\\d0-9]+))+")) {
|
||||
String[] data = pair[1].split(",");
|
||||
int[] ints = new int[data.length];
|
||||
for (int i = 0; i < ints.length; ++i)
|
||||
ints[i] = Integer.decode(data[i]);
|
||||
IntArrayNode node = new IntArrayNode();
|
||||
node.key = pair[0];
|
||||
node.data = ints;
|
||||
props.data.add(node);
|
||||
|
||||
}
|
||||
else if (pair[1].matches("\\d+\\.\\d+")) {
|
||||
DoubleNode node = new DoubleNode();
|
||||
node.key = pair[0];
|
||||
node.data = Double.parseDouble(pair[1]);
|
||||
props.data.add(node);
|
||||
}
|
||||
else if (pair[1].matches("\\d+\\.\\d+(,\\d+\\.\\d+)+")) {
|
||||
String[] data = pair[1].split(",");
|
||||
double[] doubles = new double[data.length];
|
||||
for (int i = 0; i < doubles.length; ++i)
|
||||
doubles[i] = Double.parseDouble(data[i]);
|
||||
DoubleArrayNode node = new DoubleArrayNode();
|
||||
node.key = pair[0];
|
||||
node.data = doubles;
|
||||
props.data.add(node);
|
||||
|
||||
}
|
||||
else {
|
||||
StringNode node = new StringNode();
|
||||
node.key = pair[0];
|
||||
node.data = pair[1];
|
||||
props.data.add(node);
|
||||
}
|
||||
}
|
||||
++lineNum;
|
||||
}
|
||||
return props;
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue