/// <summary> /// Lee una palabra hasta que se encuentran los separadores /// </summary> private Token ReadWord(string startRule, RuleDelimited rule) { Token token = new Token(rule.Type, rule.SubType, CharSeparator.Row, CharSeparator.Column, ""); // Obtiene la cadena de inicio if (rule.IncludeStart) { token.Value = CharSeparator.GetChars(startRule.Length); } else // ... se salta el inicio { CharSeparator.GetChars(startRule.Length); } // Busca hasta el final if (rule.ToEndLine) { token.Value += CharSeparator.GetCharsToEndLine(); } else if (rule.ToFirstSpace || rule.Ends == null || rule.Ends.Length == 0) { token.Value += CharSeparator.GetCharsToSpace(); } else { bool end = false; while (!CharSeparator.IsEof && !end) { string actualRule = GetStartRule(rule.Ends); // Comprueba si se ha terminado con la palabra ... if (!string.IsNullOrWhiteSpace(actualRule)) // ... si coincide con una de las reglas de fin { if (rule.IncludeEnd) { token.Value += CharSeparator.GetChars(actualRule.Length); } else { CharSeparator.GetChars(actualRule.Length); } end = true; } else if (rule.ToFirstSpace && CharSeparator.IsSpace) { end = true; } else { token.Value += CharSeparator.GetNextChar(); } } } // Limpia la palabra if (rule.MustTrim && !string.IsNullOrWhiteSpace(token.Value)) { token.Value = token.Value.Trim(); } // Devuelve la palabra return(token); }
/// <summary> /// Lee un token hasta encontrar un espacio /// </summary> private TokenBase ReadWordToSpaces() { return(new TokenBase(string.Empty, CharSeparator.Row, CharSeparator.Column, CharSeparator.GetCharsToSpace())); }