Пример #1
0
        /// <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()));
 }