Esempio n. 1
0
        protected override void Reset()
        {
            base.Reset();
            _isEscaped = false;

            _tokenCode = Text;
            _lineFeedCount = 0;
            _textBuilder.Length = 0;
            _tokens = new List<Token<CreoleTokenCode>>();
        }
Esempio n. 2
0
        private void _ProcessEscapedCharacter(char character)
        {
            _isEscaped = false;
            if (IsLetter(character))
            {
                _AddToken();

                _tokens.Add(new Token<CreoleTokenCode>(Tilde, _escapeCahracterString, Line, Column));

                _tokenCode = Text;
                _textBuilder.Append(character);
            }
            else if (character == _escapeCahracter)
            {
                _AddToken();

                _tokens.Add(new Token<CreoleTokenCode>(Text, _escapeCahracterString, Line, Column));

                _tokenCode = Text;
            }
            else if (IsDigit(character))
            {
                if (_tokenCode != Text)
                {
                    _AddToken();
                    _tokenCode = Text;
                }
                _textBuilder.Append(_escapeCahracter);

                _textBuilder.Append(character);
            }
            else if (IsWhiteSpace(character))
            {
                if (_tokenCode != Text)
                {
                    _AddToken();
                    _tokenCode = Text;
                }
                _textBuilder.Append(_escapeCahracter);
                _AddToken();

                _tokenCode = WhiteSpace;
                if (character == '\n')
                    _lineFeedCount++;

                _textBuilder.Append(character);
            }
            else
            {
                _AddToken();
                _tokenCode = Text;

                _textBuilder.Append(character);
            }
        }
Esempio n. 3
0
        private void _AddToken()
        {
            if (_isEscaped && _tokenCode == Text)
                _textBuilder.Append(_escapeCahracter);

            if (_textBuilder.Length > 0)
            {
                if (_tokenCode == WhiteSpace)
                {
                    if (_lineFeedCount == 1)
                        _tokenCode = NewLine;
                    else if (_lineFeedCount > 1)
                        _tokenCode = BlankLine;
                    _lineFeedCount = 0;
                }

                _tokens.Add(new Token<CreoleTokenCode>(_tokenCode, _textBuilder.ToString(), Line, Column));
                _textBuilder.Length = 0;
            }
            else if (_isEscaped)
                _tokens.Add(new Token<CreoleTokenCode>(Text, _escapeCahracterString, Line, Column));
        }
Esempio n. 4
0
        private void _ProcessCharacter(char character)
        {
            switch (character)
            {
                case _escapeCahracter:
                    _isEscaped = true;
                    break;

                case '*':
                    _AddToken();
                    _tokens.Add(new Token<CreoleTokenCode>(Asterisk, "*", Line, Column));
                    break;

                case '/':
                    _AddToken();
                    _tokens.Add(new Token<CreoleTokenCode>(Slash, "/", Line, Column));
                    break;

                case '\\':
                    _AddToken();
                    _tokens.Add(new Token<CreoleTokenCode>(BackSlash, "\\", Line, Column));
                    break;

                case '[':
                    _AddToken();
                    _tokens.Add(new Token<CreoleTokenCode>(BracketOpen, "[", Line, Column));
                    break;

                case ']':
                    _AddToken();
                    _tokens.Add(new Token<CreoleTokenCode>(BracketClose, "]", Line, Column));
                    break;

                case '{':
                    _AddToken();
                    _tokens.Add(new Token<CreoleTokenCode>(BraceOpen, "{", Line, Column));
                    break;

                case '}':
                    _AddToken();
                    _tokens.Add(new Token<CreoleTokenCode>(BraceClose, "}", Line, Column));
                    break;

                case '<':
                    _AddToken();
                    _tokens.Add(new Token<CreoleTokenCode>(AngleOpen, "<", Line, Column));
                    break;

                case '>':
                    _AddToken();
                    _tokens.Add(new Token<CreoleTokenCode>(AngleClose, ">", Line, Column));
                    break;

                case '=':
                    _AddToken();
                    _tokens.Add(new Token<CreoleTokenCode>(Equal, "=", Line, Column));
                    break;

                case '-':
                    _AddToken();
                    _tokens.Add(new Token<CreoleTokenCode>(Dash, "-", Line, Column));
                    break;

                case '#':
                    _AddToken();
                    _tokens.Add(new Token<CreoleTokenCode>(Hash, "#", Line, Column));
                    break;

                case '|':
                    _AddToken();
                    _tokens.Add(new Token<CreoleTokenCode>(Pipe, "|", Line, Column));
                    break;

                default:
                    if (IsPunctuation(character))
                    {
                        _AddToken();
                        _tokens.Add(new Token<CreoleTokenCode>(Punctuation, character.ToString(), Line, Column));
                    }
                    else
                    {
                        var tokenCode = (IsWhiteSpace(character) ? WhiteSpace : Text);
                        if (_tokenCode != tokenCode)
                        {
                            _AddToken();
                            _tokenCode = tokenCode;
                        }
                        if (character == '\n')
                            _lineFeedCount++;
                        _textBuilder.Append(character);
                    }
                    break;
            }
        }