/// <summary> /// Crea un token a partir de una regla y una palabra /// </summary> private Token GetToken(RuleBase rule, string value, bool extractChars) { Token token = new Token(rule.Type, rule.SubType, CharSeparator.Row, CharSeparator.Column, value); // Quita los caracteres del token if (extractChars) { CharSeparator.GetChars(value.Length); } // Elimina los espacios if (rule.MustTrim) { token.Value = token.Value.TrimIgnoreNull(); } // Devuelve el token return(token); }
/// <summary> /// Crea un token a partir de una regla y una palabra /// </summary> private TokenBase GetToken(RuleBase rule, string value, bool extractChars) { TokenBase token = new TokenBase(rule.TokenType, CharSeparator.Row, CharSeparator.Column, value); // Quita los caracteres del token if (extractChars) { CharSeparator.GetChars(value.Length); } // Elimina los espacios if (rule.MustTrim && !string.IsNullOrWhiteSpace(token.Value)) { token.Value = token.Value.Trim(); } // Devuelve el token return(token); }
/// <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); }