Пример #1
0
        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));
        }
Пример #2
0
        public CodeReader(string sourceCode)
        {
            if (sourceCode.EndsWith("\n"))
            {
                this.sourceCode = sourceCode;
            }
            else
            {
                this.sourceCode = sourceCode + "\n";
            }

            buffer  = new StringBuilder();
            context = CodeReadingContext.None;
        }
Пример #3
0
        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));
        }