Example #1
0
        public HtmlToken Tokenize(HtmlTextReader reader)
        {
            int  n;
            char ch;

            _stringBuilder.Length = 0;

            //
            // Trim whitespace
            //
            while ((n = reader.Peek()) != -1)
            {
                ch = (char)n;
                switch (ch)
                {
                case ' ':
                case '\t':
                case '\r':
                case '\n':
                {
                    reader.Read();
                    break;
                }

                default:
                {
                    goto s0;
                }
                }
            }

s0:
            n = reader.Peek();
            if (n == -1)
            {
                if (_stringBuilder.Length == 0)
                {
                    return(new HtmlToken(HtmlTokenType._EOF_));
                }
                else
                {
                    return(new HtmlToken(HtmlTokenType._ERROR_));
                }
            }
            ch = (char)n;
            switch (ch)
            {
            case '\"':
            {
                reader.Read();
                _stringBuilder.Append(ch);
                goto s1;
            }

            case '<':
            {
                reader.Read();
                _stringBuilder.Append(ch);
                goto s4;
            }

            case '>':
            {
                reader.Read();
                _stringBuilder.Append(ch);
                goto s6;
            }

            case '=':
            {
                reader.Read();
                _stringBuilder.Append(ch);
                goto s7;
            }

            case '!':
            case '#':
            case '$':
            case '%':
            case '&':
            case '\'':
            case '(':
            case ')':
            case '*':
            case '+':
            case ',':
            case '-':
            case '.':
            case ':':
            case ';':
            case '?':
            case '@':
            case 'A':
            case 'B':
            case 'C':
            case 'D':
            case 'E':
            case 'F':
            case 'G':
            case 'H':
            case 'I':
            case 'J':
            case 'K':
            case 'L':
            case 'M':
            case 'N':
            case 'O':
            case 'P':
            case 'Q':
            case 'R':
            case 'S':
            case 'T':
            case 'U':
            case 'V':
            case 'W':
            case 'X':
            case 'Y':
            case 'Z':
            case '[':
            case '\\':
            case ']':
            case '^':
            case '_':
            case '`':
            case 'a':
            case 'b':
            case 'c':
            case 'd':
            case 'e':
            case 'f':
            case 'g':
            case 'h':
            case 'i':
            case 'j':
            case 'k':
            case 'l':
            case 'm':
            case 'n':
            case 'o':
            case 'p':
            case 'q':
            case 'r':
            case 's':
            case 't':
            case 'u':
            case 'v':
            case 'w':
            case 'x':
            case 'y':
            case 'z':
            case '{':
            case '|':
            case '}':
            case '~':
            {
                reader.Read();
                _stringBuilder.Append(ch);
                goto s8;
            }

            case '/':
            {
                reader.Read();
                _stringBuilder.Append(ch);
                goto s9;
            }

            case '1':
            case '2':
            case '3':
            case '4':
            case '5':
            case '6':
            case '7':
            case '8':
            case '9':
            {
                reader.Read();
                _stringBuilder.Append(ch);
                goto s10;
            }

            case '0':
            {
                reader.Read();
                _stringBuilder.Append(ch);
                goto s12;
            }

            default:
            {
                _stringBuilder.Append(ch);
                goto se;
            }
            }

s1:
            n = reader.Peek();
            if (n == -1)
            {
                if (_stringBuilder.Length == 0)
                {
                    return(new HtmlToken(HtmlTokenType._EOF_));
                }
                else
                {
                    return(new HtmlToken(HtmlTokenType._ERROR_));
                }
            }
            ch = (char)n;
            switch (ch)
            {
            case '\t':
            case '\n':
            case '\r':
            case ' ':
            case '!':
            case '#':
            case '$':
            case '%':
            case '&':
            case '\'':
            case '(':
            case ')':
            case '*':
            case '+':
            case ',':
            case '-':
            case '.':
            case '/':
            case '0':
            case '1':
            case '2':
            case '3':
            case '4':
            case '5':
            case '6':
            case '7':
            case '8':
            case '9':
            case ':':
            case ';':
            case '<':
            case '=':
            case '>':
            case '?':
            case '@':
            case 'A':
            case 'B':
            case 'C':
            case 'D':
            case 'E':
            case 'F':
            case 'G':
            case 'H':
            case 'I':
            case 'J':
            case 'K':
            case 'L':
            case 'M':
            case 'N':
            case 'O':
            case 'P':
            case 'Q':
            case 'R':
            case 'S':
            case 'T':
            case 'U':
            case 'V':
            case 'W':
            case 'X':
            case 'Y':
            case 'Z':
            case '[':
            case ']':
            case '^':
            case '_':
            case '`':
            case 'a':
            case 'b':
            case 'c':
            case 'd':
            case 'e':
            case 'f':
            case 'g':
            case 'h':
            case 'i':
            case 'j':
            case 'k':
            case 'l':
            case 'm':
            case 'n':
            case 'o':
            case 'p':
            case 'q':
            case 'r':
            case 's':
            case 't':
            case 'u':
            case 'v':
            case 'w':
            case 'x':
            case 'y':
            case 'z':
            case '{':
            case '|':
            case '}':
            case '~':
            {
                reader.Read();
                _stringBuilder.Append(ch);
                goto s1;
            }

            case '\"':
            {
                reader.Read();
                _stringBuilder.Append(ch);
                goto s2;
            }

            case '\\':
            {
                reader.Read();
                _stringBuilder.Append(ch);
                goto s3;
            }

            default:
            {
                _stringBuilder.Append(ch);
                goto se;
            }
            }

s2:
            return(new HtmlToken(HtmlTokenType.QUOTED_STRING, _stringBuilder.ToString()));

s3:
            n = reader.Peek();
            if (n == -1)
            {
                if (_stringBuilder.Length == 0)
                {
                    return(new HtmlToken(HtmlTokenType._EOF_));
                }
                else
                {
                    return(new HtmlToken(HtmlTokenType._ERROR_));
                }
            }
            ch = (char)n;
            switch (ch)
            {
            case '\t':
            case '\n':
            case '\r':
            case ' ':
            case '!':
            case '\"':
            case '#':
            case '$':
            case '%':
            case '&':
            case '\'':
            case '(':
            case ')':
            case '*':
            case '+':
            case ',':
            case '-':
            case '.':
            case '/':
            case '0':
            case '1':
            case '2':
            case '3':
            case '4':
            case '5':
            case '6':
            case '7':
            case '8':
            case '9':
            case ':':
            case ';':
            case '<':
            case '=':
            case '>':
            case '?':
            case '@':
            case 'A':
            case 'B':
            case 'C':
            case 'D':
            case 'E':
            case 'F':
            case 'G':
            case 'H':
            case 'I':
            case 'J':
            case 'K':
            case 'L':
            case 'M':
            case 'N':
            case 'O':
            case 'P':
            case 'Q':
            case 'R':
            case 'S':
            case 'T':
            case 'U':
            case 'V':
            case 'W':
            case 'X':
            case 'Y':
            case 'Z':
            case '[':
            case '\\':
            case ']':
            case '^':
            case '_':
            case '`':
            case 'a':
            case 'b':
            case 'c':
            case 'd':
            case 'e':
            case 'f':
            case 'g':
            case 'h':
            case 'i':
            case 'j':
            case 'k':
            case 'l':
            case 'm':
            case 'n':
            case 'o':
            case 'p':
            case 'q':
            case 'r':
            case 's':
            case 't':
            case 'u':
            case 'v':
            case 'w':
            case 'x':
            case 'y':
            case 'z':
            case '{':
            case '|':
            case '}':
            case '~':
            {
                reader.Read();
                _stringBuilder.Append(ch);
                goto s1;
            }

            default:
            {
                _stringBuilder.Append(ch);
                goto se;
            }
            }

s4:
            n = reader.Peek();
            if (n == -1)
            {
                if (_stringBuilder.Length == 0)
                {
                    return(new HtmlToken(HtmlTokenType._EOF_));
                }
                else
                {
                    return(new HtmlToken(HtmlTokenType.LESS_THAN, _stringBuilder.ToString()));
                }
            }
            ch = (char)n;
            switch (ch)
            {
            case '/':
            {
                reader.Read();
                _stringBuilder.Append(ch);
                goto s5;
            }

            default:
            {
                return(new HtmlToken(HtmlTokenType.LESS_THAN, _stringBuilder.ToString()));
            }
            }

s5:
            return(new HtmlToken(HtmlTokenType.LESS_THAN_FORWARD_SLASH, _stringBuilder.ToString()));

s6:
            return(new HtmlToken(HtmlTokenType.GREATER_THAN, _stringBuilder.ToString()));

s7:
            return(new HtmlToken(HtmlTokenType.EQUALS, _stringBuilder.ToString()));

s8:
            n = reader.Peek();
            if (n == -1)
            {
                if (_stringBuilder.Length == 0)
                {
                    return(new HtmlToken(HtmlTokenType._EOF_));
                }
                else
                {
                    return(new HtmlToken(HtmlTokenType.STRING, _stringBuilder.ToString()));
                }
            }
            ch = (char)n;
            switch (ch)
            {
            case '!':
            case '#':
            case '$':
            case '%':
            case '&':
            case '\'':
            case '(':
            case ')':
            case '*':
            case '+':
            case ',':
            case '-':
            case '.':
            case '/':
            case '0':
            case '1':
            case '2':
            case '3':
            case '4':
            case '5':
            case '6':
            case '7':
            case '8':
            case '9':
            case ':':
            case ';':
            case '?':
            case '@':
            case 'A':
            case 'B':
            case 'C':
            case 'D':
            case 'E':
            case 'F':
            case 'G':
            case 'H':
            case 'I':
            case 'J':
            case 'K':
            case 'L':
            case 'M':
            case 'N':
            case 'O':
            case 'P':
            case 'Q':
            case 'R':
            case 'S':
            case 'T':
            case 'U':
            case 'V':
            case 'W':
            case 'X':
            case 'Y':
            case 'Z':
            case '[':
            case '\\':
            case ']':
            case '^':
            case '_':
            case '`':
            case 'a':
            case 'b':
            case 'c':
            case 'd':
            case 'e':
            case 'f':
            case 'g':
            case 'h':
            case 'i':
            case 'j':
            case 'k':
            case 'l':
            case 'm':
            case 'n':
            case 'o':
            case 'p':
            case 'q':
            case 'r':
            case 's':
            case 't':
            case 'u':
            case 'v':
            case 'w':
            case 'x':
            case 'y':
            case 'z':
            case '{':
            case '|':
            case '}':
            case '~':
            {
                reader.Read();
                _stringBuilder.Append(ch);
                goto s8;
            }

            default:
            {
                return(new HtmlToken(HtmlTokenType.STRING, _stringBuilder.ToString()));
            }
            }

s9:
            n = reader.Peek();
            if (n == -1)
            {
                if (_stringBuilder.Length == 0)
                {
                    return(new HtmlToken(HtmlTokenType._EOF_));
                }
                else
                {
                    return(new HtmlToken(HtmlTokenType.FORWARD_SLASH, _stringBuilder.ToString()));
                }
            }
            ch = (char)n;
            switch (ch)
            {
            case '!':
            case '#':
            case '$':
            case '%':
            case '&':
            case '\'':
            case '(':
            case ')':
            case '*':
            case '+':
            case ',':
            case '-':
            case '.':
            case '/':
            case '0':
            case '1':
            case '2':
            case '3':
            case '4':
            case '5':
            case '6':
            case '7':
            case '8':
            case '9':
            case ':':
            case ';':
            case '?':
            case '@':
            case 'A':
            case 'B':
            case 'C':
            case 'D':
            case 'E':
            case 'F':
            case 'G':
            case 'H':
            case 'I':
            case 'J':
            case 'K':
            case 'L':
            case 'M':
            case 'N':
            case 'O':
            case 'P':
            case 'Q':
            case 'R':
            case 'S':
            case 'T':
            case 'U':
            case 'V':
            case 'W':
            case 'X':
            case 'Y':
            case 'Z':
            case '[':
            case '\\':
            case ']':
            case '^':
            case '_':
            case '`':
            case 'a':
            case 'b':
            case 'c':
            case 'd':
            case 'e':
            case 'f':
            case 'g':
            case 'h':
            case 'i':
            case 'j':
            case 'k':
            case 'l':
            case 'm':
            case 'n':
            case 'o':
            case 'p':
            case 'q':
            case 'r':
            case 's':
            case 't':
            case 'u':
            case 'v':
            case 'w':
            case 'x':
            case 'y':
            case 'z':
            case '{':
            case '|':
            case '}':
            case '~':
            {
                reader.Read();
                _stringBuilder.Append(ch);
                goto s8;
            }

            default:
            {
                return(new HtmlToken(HtmlTokenType.FORWARD_SLASH, _stringBuilder.ToString()));
            }
            }

s10:
            n = reader.Peek();
            if (n == -1)
            {
                if (_stringBuilder.Length == 0)
                {
                    return(new HtmlToken(HtmlTokenType._EOF_));
                }
                else
                {
                    return(new HtmlToken(HtmlTokenType.INTEGER, _stringBuilder.ToString()));
                }
            }
            ch = (char)n;
            switch (ch)
            {
            case '!':
            case '#':
            case '$':
            case '%':
            case '&':
            case '\'':
            case '(':
            case ')':
            case '*':
            case '+':
            case ',':
            case '-':
            case '/':
            case ':':
            case ';':
            case '?':
            case '@':
            case 'A':
            case 'B':
            case 'C':
            case 'D':
            case 'E':
            case 'F':
            case 'G':
            case 'H':
            case 'I':
            case 'J':
            case 'K':
            case 'L':
            case 'M':
            case 'N':
            case 'O':
            case 'P':
            case 'Q':
            case 'R':
            case 'S':
            case 'T':
            case 'U':
            case 'V':
            case 'W':
            case 'X':
            case 'Y':
            case 'Z':
            case '[':
            case '\\':
            case ']':
            case '^':
            case '_':
            case '`':
            case 'a':
            case 'b':
            case 'c':
            case 'd':
            case 'e':
            case 'f':
            case 'g':
            case 'h':
            case 'i':
            case 'j':
            case 'k':
            case 'l':
            case 'm':
            case 'n':
            case 'o':
            case 'p':
            case 'q':
            case 'r':
            case 's':
            case 't':
            case 'u':
            case 'v':
            case 'w':
            case 'x':
            case 'y':
            case 'z':
            case '{':
            case '|':
            case '}':
            case '~':
            {
                reader.Read();
                _stringBuilder.Append(ch);
                goto s8;
            }

            case '0':
            case '1':
            case '2':
            case '3':
            case '4':
            case '5':
            case '6':
            case '7':
            case '8':
            case '9':
            {
                reader.Read();
                _stringBuilder.Append(ch);
                goto s10;
            }

            case '.':
            {
                reader.Read();
                _stringBuilder.Append(ch);
                goto s11;
            }

            default:
            {
                return(new HtmlToken(HtmlTokenType.INTEGER, _stringBuilder.ToString()));
            }
            }

s11:
            n = reader.Peek();
            if (n == -1)
            {
                if (_stringBuilder.Length == 0)
                {
                    return(new HtmlToken(HtmlTokenType._EOF_));
                }
                else
                {
                    return(new HtmlToken(HtmlTokenType.FLOAT, _stringBuilder.ToString()));
                }
            }
            ch = (char)n;
            switch (ch)
            {
            case '!':
            case '#':
            case '$':
            case '%':
            case '&':
            case '\'':
            case '(':
            case ')':
            case '*':
            case '+':
            case ',':
            case '-':
            case '.':
            case '/':
            case ':':
            case ';':
            case '?':
            case '@':
            case 'A':
            case 'B':
            case 'C':
            case 'D':
            case 'E':
            case 'F':
            case 'G':
            case 'H':
            case 'I':
            case 'J':
            case 'K':
            case 'L':
            case 'M':
            case 'N':
            case 'O':
            case 'P':
            case 'Q':
            case 'R':
            case 'S':
            case 'T':
            case 'U':
            case 'V':
            case 'W':
            case 'X':
            case 'Y':
            case 'Z':
            case '[':
            case '\\':
            case ']':
            case '^':
            case '_':
            case '`':
            case 'a':
            case 'b':
            case 'c':
            case 'd':
            case 'e':
            case 'f':
            case 'g':
            case 'h':
            case 'i':
            case 'j':
            case 'k':
            case 'l':
            case 'm':
            case 'n':
            case 'o':
            case 'p':
            case 'q':
            case 'r':
            case 's':
            case 't':
            case 'u':
            case 'v':
            case 'w':
            case 'x':
            case 'y':
            case 'z':
            case '{':
            case '|':
            case '}':
            case '~':
            {
                reader.Read();
                _stringBuilder.Append(ch);
                goto s8;
            }

            case '0':
            case '1':
            case '2':
            case '3':
            case '4':
            case '5':
            case '6':
            case '7':
            case '8':
            case '9':
            {
                reader.Read();
                _stringBuilder.Append(ch);
                goto s11;
            }

            default:
            {
                return(new HtmlToken(HtmlTokenType.FLOAT, _stringBuilder.ToString()));
            }
            }

s12:
            n = reader.Peek();
            if (n == -1)
            {
                if (_stringBuilder.Length == 0)
                {
                    return(new HtmlToken(HtmlTokenType._EOF_));
                }
                else
                {
                    return(new HtmlToken(HtmlTokenType.INTEGER, _stringBuilder.ToString()));
                }
            }
            ch = (char)n;
            switch (ch)
            {
            case '!':
            case '#':
            case '$':
            case '%':
            case '&':
            case '\'':
            case '(':
            case ')':
            case '*':
            case '+':
            case ',':
            case '-':
            case '/':
            case '0':
            case '1':
            case '2':
            case '3':
            case '4':
            case '5':
            case '6':
            case '7':
            case '8':
            case '9':
            case ':':
            case ';':
            case '?':
            case '@':
            case 'A':
            case 'B':
            case 'C':
            case 'D':
            case 'E':
            case 'F':
            case 'G':
            case 'H':
            case 'I':
            case 'J':
            case 'K':
            case 'L':
            case 'M':
            case 'N':
            case 'O':
            case 'P':
            case 'Q':
            case 'R':
            case 'S':
            case 'T':
            case 'U':
            case 'V':
            case 'W':
            case 'X':
            case 'Y':
            case 'Z':
            case '[':
            case '\\':
            case ']':
            case '^':
            case '_':
            case '`':
            case 'a':
            case 'b':
            case 'c':
            case 'd':
            case 'e':
            case 'f':
            case 'g':
            case 'h':
            case 'i':
            case 'j':
            case 'k':
            case 'l':
            case 'm':
            case 'n':
            case 'o':
            case 'p':
            case 'q':
            case 'r':
            case 's':
            case 't':
            case 'u':
            case 'v':
            case 'w':
            case 'x':
            case 'y':
            case 'z':
            case '{':
            case '|':
            case '}':
            case '~':
            {
                reader.Read();
                _stringBuilder.Append(ch);
                goto s8;
            }

            case '.':
            {
                reader.Read();
                _stringBuilder.Append(ch);
                goto s11;
            }

            default:
            {
                return(new HtmlToken(HtmlTokenType.INTEGER, _stringBuilder.ToString()));
            }
            }

se:
            return(new HtmlToken(HtmlTokenType._ERROR_, _stringBuilder.ToString()));
        }
Example #2
0
 public HtmlParser(HtmlTextReader reader)
 {
     this._reader = reader;
     this._token  = this._tokenizer.Tokenize(this._reader);
 }