private Word ReadQuotedString(char quoteChar) { var c = ReadChar(); while (!End && context == CodeReadingContext.InQuotes) { if (c == quoteChar) { break; } var nextChar = GetNextChar(); if (nextChar == Tokens.TagBegin || nextChar == Tokens.TagEnd) { break; } buffer.Append(c); if (c == Tokens.TagBegin || c == Tokens.TagEnd) { break; } c = ReadChar(); } context = CodeReadingContext.None; return(new Word(buffer.ToString(), lineNumber, linePosition, true)); }
public CodeReader(string sourceCode) { if (sourceCode.EndsWith("\n")) { this.sourceCode = sourceCode; } else { this.sourceCode = sourceCode + "\n"; } buffer = new StringBuilder(); context = CodeReadingContext.None; }
public Word ReadWord() { buffer.Remove(0, buffer.Length); var c = ReadChar(); //while (char.IsWhiteSpace(c)) // c = ReadChar(); if (char.IsWhiteSpace(c)) { return(new Word(c.ToString(CultureInfo.InvariantCulture), lineNumber, linePosition, false)); } if (context != CodeReadingContext.InQuotes && (c == Tokens.Quote || c == Tokens.SimpleQuote)) { context = CodeReadingContext.InQuotes; return(ReadQuotedString(c)); } buffer.Append(c); var letterOrDigit = IsLetterOrDigit(c); while (IsLetterOrDigit(GetNextChar()) == letterOrDigit && !char.IsWhiteSpace(GetNextChar()) && !GetNextChar().IsToken()) { c = ReadChar(); if (c == Tokens.Quote) { position--; break; } buffer.Append(c); //if (c.IsToken() && GetNextChar().IsToken()) // break; } return(new Word(buffer.ToString(), lineNumber, linePosition, false)); }