private static int GlobCharacter(string s, int index, char c) { while (StyleSyntaxTokenizer.IsNextCharacter(s, index, c)) { index++; } return(index); }
public void Tokenize(string syntax) { this.m_Tokens.Clear(); this.m_CurrentTokenIndex = 0; syntax = syntax.Trim(new char[] { ' ' }).ToLower(); int i = 0; while (i < syntax.Length) { char c = syntax[i]; char c2 = c; char c3 = c2; if (c3 <= '?') { switch (c3) { case ' ': i = StyleSyntaxTokenizer.GlobCharacter(syntax, i, ' '); this.m_Tokens.Add(new StyleSyntaxToken(StyleSyntaxTokenType.Space)); break; case '!': this.m_Tokens.Add(new StyleSyntaxToken(StyleSyntaxTokenType.ExclamationPoint)); break; case '"': case '$': case '%': case '(': case ')': goto IL_2EA; case '#': this.m_Tokens.Add(new StyleSyntaxToken(StyleSyntaxTokenType.HashMark)); break; case '&': { bool flag = !StyleSyntaxTokenizer.IsNextCharacter(syntax, i, '&'); if (flag) { string text = (i + 1 < syntax.Length) ? syntax[i + 1].ToString() : "EOF"; Debug.LogAssertionFormat("Expected '&' got '{0}'", new object[] { text }); this.m_Tokens.Add(new StyleSyntaxToken(StyleSyntaxTokenType.Unknown)); } else { this.m_Tokens.Add(new StyleSyntaxToken(StyleSyntaxTokenType.DoubleAmpersand)); i++; } break; } case '\'': this.m_Tokens.Add(new StyleSyntaxToken(StyleSyntaxTokenType.SingleQuote)); break; case '*': this.m_Tokens.Add(new StyleSyntaxToken(StyleSyntaxTokenType.Asterisk)); break; case '+': this.m_Tokens.Add(new StyleSyntaxToken(StyleSyntaxTokenType.Plus)); break; case ',': this.m_Tokens.Add(new StyleSyntaxToken(StyleSyntaxTokenType.Comma)); break; default: switch (c3) { case '<': this.m_Tokens.Add(new StyleSyntaxToken(StyleSyntaxTokenType.LessThan)); break; case '=': goto IL_2EA; case '>': this.m_Tokens.Add(new StyleSyntaxToken(StyleSyntaxTokenType.GreaterThan)); break; case '?': this.m_Tokens.Add(new StyleSyntaxToken(StyleSyntaxTokenType.QuestionMark)); break; default: goto IL_2EA; } break; } } else if (c3 != '[') { if (c3 != ']') { switch (c3) { case '{': this.m_Tokens.Add(new StyleSyntaxToken(StyleSyntaxTokenType.OpenBrace)); break; case '|': { bool flag2 = StyleSyntaxTokenizer.IsNextCharacter(syntax, i, '|'); if (flag2) { this.m_Tokens.Add(new StyleSyntaxToken(StyleSyntaxTokenType.DoubleBar)); i++; } else { this.m_Tokens.Add(new StyleSyntaxToken(StyleSyntaxTokenType.SingleBar)); } break; } case '}': this.m_Tokens.Add(new StyleSyntaxToken(StyleSyntaxTokenType.CloseBrace)); break; default: goto IL_2EA; } } else { this.m_Tokens.Add(new StyleSyntaxToken(StyleSyntaxTokenType.CloseBracket)); } } else { this.m_Tokens.Add(new StyleSyntaxToken(StyleSyntaxTokenType.OpenBracket)); } IL_3C5: i++; continue; IL_2EA: bool flag3 = char.IsNumber(c); if (flag3) { int startIndex = i; int num = 1; while (StyleSyntaxTokenizer.IsNextNumber(syntax, i)) { i++; num++; } string s = syntax.Substring(startIndex, num); int number = int.Parse(s); this.m_Tokens.Add(new StyleSyntaxToken(StyleSyntaxTokenType.Number, number)); } else { bool flag4 = char.IsLetter(c); if (flag4) { int startIndex2 = i; int num2 = 1; while (StyleSyntaxTokenizer.IsNextLetterOrDash(syntax, i)) { i++; num2++; } string text2 = syntax.Substring(startIndex2, num2); this.m_Tokens.Add(new StyleSyntaxToken(StyleSyntaxTokenType.String, text2)); } else { Debug.LogAssertionFormat("Expected letter or number got '{0}'", new object[] { c }); this.m_Tokens.Add(new StyleSyntaxToken(StyleSyntaxTokenType.Unknown)); } } goto IL_3C5; } this.m_Tokens.Add(new StyleSyntaxToken(StyleSyntaxTokenType.End)); }