package org.manalith.ircbot.plugin.curex;
import java.util.regex.Pattern;
public class TokenObject {
private TokenType tokenType;
private TokenSubtype tokenSType;
private String tokenString;
private int originalTokenPosition;
public TokenObject(String tString) {
tokenType = getInternalTokenType(tString);
if (tokenType.equals(TokenType.Unit))
tokenString = tString.toUpperCase();
else if (tokenType.equals(TokenType.Command))
tokenString = tString.toLowerCase();
else
tokenString = tString;
tokenSType = getInternalTokenSubtype(tString, tokenType);
}
private TokenType getInternalTokenType(String ts) {
TokenType result = TokenType.UnDefined;
if (Pattern.matches("[a-zA-Z]{4,8}", ts))
result = TokenType.Command;
else if (Pattern.matches("[0-9]+(\\.[0-9]+)?", ts))
result = TokenType.Number;
else if (Pattern.matches("[a-zA-Z]{3}", ts))
result = TokenType.Unit;
return result;
}
private TokenSubtype getInternalTokenSubtype(String ts, TokenType tt) {
TokenSubtype result = TokenSubtype.UnDefined;
switch (tt.value()) {
case 0:
switch(ts)
{
case "help":
result = TokenSubtype.CommandHelp;
break;
case "show":
result = TokenSubtype.CommandShow;
break;
case "unitlist":
result = TokenSubtype.CommandUnitList;
break;
case "calc":
result = TokenSubtype.CommandCalc;
break;
}
break;
case 1:
result = TokenSubtype.CurrencyUnit;
break;
case 2:
if (Pattern.matches("[0-9]+", ts))
result = TokenSubtype.NumberNatural;
else if (Pattern.matches("0-9]+\\.[0-9]+", ts))
result = TokenSubtype.NumberFloatingPoint;
break;
default:
break;
}
return result;
}
public String getTokenString() {
return tokenString;
}
public TokenType getTokenType() {
return tokenType;
}
public TokenSubtype getTokenSubtype() {
return tokenSType;
}
public void setOriginalTokenPosition(int pos) {
originalTokenPosition = pos;
}
public int getOriginalTokenPosition() {
return originalTokenPosition;
}
public enum TokenType {
Command(0), Unit(1), Number(2), UnDefined(3);
private final int val;
TokenType(int init_val) {
val = init_val;
}
public int value() {
return val;
}
}
public enum TokenSubtype {
CommandShow(0), CommandHelp(1), CommandCalc(2), CommandUnitList(3), NumberNatural(
4), NumberFloatingPoint(5), CurrencyUnit(6), UnDefined(7);
private final int value;
TokenSubtype(int val) {
value = val;
}
public int value() {
return value;
}
}
}