/**
*
*/
package fr.whyt.parser;
import java.util.HashMap;
import java.util.Map;
import fr.whyt.craft.Tree;
import fr.whyt.item.Item;
import fr.whyt.item.enums.Type;
import fr.whyt.item.enums.WeaponType;
import fr.whyt.item.enums.Rarity;
import fr.whyt.item.enums.AttributeType;
/**
* @author WhyT
*
*/
public interface DBReader {
/* <gname> <#pgname> <#gname> <description>
* _all 0 zero or one <item> and zero or one <comment>
* item 0 1 ? : zero or one full item : <crafmaterial> <weapon>
* craftmaterial 1 2 ? : zero or one simple item : "<name>" <type> <scarcity> <level> <price>
* name 2 3 .+ : one or more any characters
* type 2 4 .+ : one or more any word characters
* scarcity 2 5 .+ : one or more any word characters
* level 2 6 \d+ : one or more any digits
* price 2 7 \d+ : one or more any digits
* weapon 1 8 ? : zero or one weapon : <weapontype> <highdamage><one - or white space><lowdamage> <bonus>
* weapontype 8 9 .+ : one or more any word characters
* lowdamage 8 10 \d+ : one or more any digits
* highdamage 8 11 \d+ : one or more any digits
* bonuslist 8 12
* bonus 12 13 * : zero or more bonus : <bonusvalue> <bonustype><zero or one white space>
* bonusvalue 13 14 \d+ : one or more any digits
* bonustype 13 15 .+ : one or more any word characters
* comment 0 16 ? : zero or one comment : <zero or more space><content>
* content 15 17 //.* : zero or one comment line : <//><zero or more any characters>
**
* gname : group name
* #pgname : parent group name number
* #gname : group name number
* description : group feature description
*/
public final String dataRegExp =
"(?<item>"
+ "(?<craftmaterial>\""
+ "(?<name>.+)\" "
+ "(?<type>(?i)" + Type.union() + ") "
+ "(?<scarcity>(?i)" + Rarity.union() + ") "
+ "(?<level>\\d+) "
+ "(?<price>\\d+))"
+ "(?<weapon> "
+ "(?<weapontype>(?i)" + WeaponType.union() + ") "
+ "(?<lowdamage>\\d+)[- ](?<highdamage>\\d+) "
+ "(?<bonuslist>"
+ "(?<bonus>"
+ "(?<bonusvalue>\\d+) "
+ "(?<bonustype>(?i)" + AttributeType.union() + ")[ ]?)*))?)?"
+ "(?<comment>\\s*(?<content>//.*)?)?";
/*
* <gname> <#pgname> <#gname> <description>
* _all 0 zero or one <recipe> and zero or one <comment>
* recipe 0 1 ? : zero or one <<indent>"<name>"\s*<quantity>>
* indent 1 2 \t? : zero or one indent <\t>
* name 1 3 .+ : one or more of any characters
* quantity 1 4 \d* : zero or more of any digits
* comment 0 5 ? : zero or one <\s*<content>>
* content 5 6 //.* : zero or one <// and zero or more any characters>
**
* gname : group name,
* #pgname : parent group name number,
* #gname : group name number,
* description : group feature description
*/
public final String recipeRegExp =
"(?<recipe>"
+ "(?<indent>\t?)\""
+ "(?<name>.+)\""
+ "\\s*"
+ "(?<quantity>\\d*))?"
+ "(?<comment>\\s*(?<content>//.*)?)?";
/*
* Maps uniques des Item et Recipe : Hashcode = ID
*/
public Map<Integer, Item> items = new HashMap<Integer, Item>(10, .90f);
public Map<Integer, Tree> recipes = new HashMap<Integer, Tree>(10, .90f);
}