private static void PopulizeTextToken(SkillConditionToken textToken, List <SkillConditionToken> result) { if (!string.IsNullOrEmpty(textToken.Value)) { result.Add(textToken); } }
private static bool ExpectToken(SkillConditionTokenType type, SkillConditionToken token) { if (token.Type != type) { UnityEngine.Debug.LogError("Expected Token: " + type); return(false); } return(true); }
private static int?ReadNumber(SkillConditionToken token) { if (!ExpectToken(SkillConditionTokenType.TextOrNumber, token)) { return(null); } int result = -1; if (int.TryParse(token.Value, out result)) { return(result); } UnityEngine.Debug.LogError("Expected Token: Number"); return(null); }
public static List <SkillConditionToken> Tokenize(string unprocessedText) { var result = new List <SkillConditionToken>(); var textToken = new SkillConditionToken(SkillConditionTokenType.TextOrNumber); var text = unprocessedText.Replace("\t", string.Empty).Replace(" ", string.Empty).Replace("\r", string.Empty).Replace("\n", string.Empty); for (int i = 0; i < text.Length; i++) { switch (text[i]) { case '&': PopulizeTextToken(textToken, result); textToken = new SkillConditionToken(SkillConditionTokenType.TextOrNumber); result.Add(new SkillConditionToken(SkillConditionTokenType.And, "&")); break; case '|': PopulizeTextToken(textToken, result); textToken = new SkillConditionToken(SkillConditionTokenType.TextOrNumber); result.Add(new SkillConditionToken(SkillConditionTokenType.Or, "|")); break; case '[': PopulizeTextToken(textToken, result); textToken = new SkillConditionToken(SkillConditionTokenType.TextOrNumber); result.Add(new SkillConditionToken(SkillConditionTokenType.SquareBracketOpen, "[")); break; case ']': PopulizeTextToken(textToken, result); textToken = new SkillConditionToken(SkillConditionTokenType.TextOrNumber); result.Add(new SkillConditionToken(SkillConditionTokenType.SquareBracketClose, "[")); break; case '(': PopulizeTextToken(textToken, result); textToken = new SkillConditionToken(SkillConditionTokenType.TextOrNumber); result.Add(new SkillConditionToken(SkillConditionTokenType.RoundBracketOpen, "(")); break; case ')': PopulizeTextToken(textToken, result); textToken = new SkillConditionToken(SkillConditionTokenType.TextOrNumber); result.Add(new SkillConditionToken(SkillConditionTokenType.RoundBracketClose, ")")); break; case ',': PopulizeTextToken(textToken, result); textToken = new SkillConditionToken(SkillConditionTokenType.TextOrNumber); result.Add(new SkillConditionToken(SkillConditionTokenType.Comma, ",")); break; case ':': PopulizeTextToken(textToken, result); textToken = new SkillConditionToken(SkillConditionTokenType.TextOrNumber); result.Add(new SkillConditionToken(SkillConditionTokenType.DoubleDot, ":")); break; default: textToken.Value += text[i]; break; } } PopulizeTextToken(textToken, result); return(result); }