Пример #1
0
        private StringCollection GetTokens(string input)
        {
            StringCollection stringCollection = new StringCollection();
            int startIndex1 = 0;

            HtmlParser.ParseStatus parseStatus = HtmlParser.ParseStatus.ReadText;
            while (startIndex1 < input.Length)
            {
                switch (parseStatus)
                {
                case HtmlParser.ParseStatus.ReadText:
                    if (startIndex1 + 2 < input.Length && input.Substring(startIndex1, 2).Equals("</"))
                    {
                        startIndex1 += 2;
                        stringCollection.Add("</");
                        parseStatus = HtmlParser.ParseStatus.ReadEndTag;
                        break;
                    }
                    if (input.Substring(startIndex1, 1).Equals("<"))
                    {
                        ++startIndex1;
                        stringCollection.Add("<");
                        parseStatus = HtmlParser.ParseStatus.ReadStartTag;
                        break;
                    }
                    int num1 = input.IndexOf("<", startIndex1);
                    if (num1 == -1)
                    {
                        stringCollection.Add(input.Substring(startIndex1));
                        return(stringCollection);
                    }
                    stringCollection.Add(input.Substring(startIndex1, num1 - startIndex1));
                    startIndex1 = num1;
                    break;

                case HtmlParser.ParseStatus.ReadEndTag:
                    while (startIndex1 < input.Length && input.Substring(startIndex1, 1).IndexOfAny(HtmlParser.WHITESPACE_CHARS) != -1)
                    {
                        ++startIndex1;
                    }
                    int startIndex2 = startIndex1;
                    while (startIndex1 < input.Length && input.Substring(startIndex1, 1).IndexOfAny(" \r\n\t>".ToCharArray()) == -1)
                    {
                        ++startIndex1;
                    }
                    stringCollection.Add(input.Substring(startIndex2, startIndex1 - startIndex2));
                    while (startIndex1 < input.Length && input.Substring(startIndex1, 1).IndexOfAny(HtmlParser.WHITESPACE_CHARS) != -1)
                    {
                        ++startIndex1;
                    }
                    if (startIndex1 < input.Length && input.Substring(startIndex1, 1).Equals(">"))
                    {
                        stringCollection.Add(">");
                        parseStatus = HtmlParser.ParseStatus.ReadText;
                        ++startIndex1;
                        break;
                    }
                    break;

                case HtmlParser.ParseStatus.ReadStartTag:
                    while (startIndex1 < input.Length && input.Substring(startIndex1, 1).IndexOfAny(HtmlParser.WHITESPACE_CHARS) != -1)
                    {
                        ++startIndex1;
                    }
                    int startIndex3 = startIndex1;
                    while (startIndex1 < input.Length && input.Substring(startIndex1, 1).IndexOfAny(" \r\n\t/>".ToCharArray()) == -1)
                    {
                        ++startIndex1;
                    }
                    stringCollection.Add(input.Substring(startIndex3, startIndex1 - startIndex3));
                    while (startIndex1 < input.Length && input.Substring(startIndex1, 1).IndexOfAny(HtmlParser.WHITESPACE_CHARS) != -1)
                    {
                        ++startIndex1;
                    }
                    if (startIndex1 + 1 < input.Length && input.Substring(startIndex1, 1).Equals("/>"))
                    {
                        stringCollection.Add("/>");
                        parseStatus  = HtmlParser.ParseStatus.ReadText;
                        startIndex1 += 2;
                        break;
                    }
                    if (startIndex1 < input.Length && input.Substring(startIndex1, 1).Equals(">"))
                    {
                        stringCollection.Add(">");
                        parseStatus = HtmlParser.ParseStatus.ReadText;
                        ++startIndex1;
                        break;
                    }
                    parseStatus = HtmlParser.ParseStatus.ReadAttributeName;
                    break;

                case HtmlParser.ParseStatus.ReadAttributeName:
                    while (startIndex1 < input.Length && input.Substring(startIndex1, 1).IndexOfAny(HtmlParser.WHITESPACE_CHARS) != -1)
                    {
                        ++startIndex1;
                    }
                    int startIndex4 = startIndex1;
                    while (startIndex1 < input.Length && input.Substring(startIndex1, 1).IndexOfAny(" \r\n\t/>=".ToCharArray()) == -1)
                    {
                        ++startIndex1;
                    }
                    stringCollection.Add(input.Substring(startIndex4, startIndex1 - startIndex4));
                    while (startIndex1 < input.Length && input.Substring(startIndex1, 1).IndexOfAny(HtmlParser.WHITESPACE_CHARS) != -1)
                    {
                        ++startIndex1;
                    }
                    if (startIndex1 + 1 < input.Length && input.Substring(startIndex1, 2).Equals("/>"))
                    {
                        stringCollection.Add("/>");
                        parseStatus  = HtmlParser.ParseStatus.ReadText;
                        startIndex1 += 2;
                        break;
                    }
                    if (startIndex1 < input.Length && input.Substring(startIndex1, 1).Equals(">"))
                    {
                        stringCollection.Add(">");
                        parseStatus = HtmlParser.ParseStatus.ReadText;
                        ++startIndex1;
                        break;
                    }
                    if (startIndex1 < input.Length && input.Substring(startIndex1, 1).Equals("="))
                    {
                        stringCollection.Add("=");
                        ++startIndex1;
                        parseStatus = HtmlParser.ParseStatus.ReadAttributeValue;
                        break;
                    }
                    if (startIndex1 < input.Length && input.Substring(startIndex1, 1).Equals("/"))
                    {
                        ++startIndex1;
                        break;
                    }
                    break;

                case HtmlParser.ParseStatus.ReadAttributeValue:
                    while (startIndex1 < input.Length && input.Substring(startIndex1, 1).IndexOfAny(HtmlParser.WHITESPACE_CHARS) != -1)
                    {
                        ++startIndex1;
                    }
                    if (startIndex1 < input.Length && input.Substring(startIndex1, 1).Equals("\""))
                    {
                        int num2 = startIndex1;
                        ++startIndex1;
                        while (startIndex1 < input.Length && !input.Substring(startIndex1, 1).Equals("\""))
                        {
                            ++startIndex1;
                        }
                        if (startIndex1 < input.Length && input.Substring(startIndex1, 1).Equals("\""))
                        {
                            ++startIndex1;
                        }
                        stringCollection.Add(input.Substring(num2 + 1, startIndex1 - num2 - 2));
                        parseStatus = HtmlParser.ParseStatus.ReadAttributeName;
                    }
                    else if (startIndex1 < input.Length && input.Substring(startIndex1, 1).Equals("'"))
                    {
                        int num2 = startIndex1;
                        ++startIndex1;
                        while (startIndex1 < input.Length && !input.Substring(startIndex1, 1).Equals("'"))
                        {
                            ++startIndex1;
                        }
                        if (startIndex1 < input.Length && input.Substring(startIndex1, 1).Equals("'"))
                        {
                            ++startIndex1;
                        }
                        stringCollection.Add(input.Substring(num2 + 1, startIndex1 - num2 - 2));
                        parseStatus = HtmlParser.ParseStatus.ReadAttributeName;
                    }
                    else
                    {
                        int startIndex5 = startIndex1;
                        while (startIndex1 < input.Length && input.Substring(startIndex1, 1).IndexOfAny(" \r\n\t/>".ToCharArray()) == -1)
                        {
                            ++startIndex1;
                        }
                        stringCollection.Add(input.Substring(startIndex5, startIndex1 - startIndex5));
                        while (startIndex1 < input.Length && input.Substring(startIndex1, 1).IndexOfAny(HtmlParser.WHITESPACE_CHARS) != -1)
                        {
                            ++startIndex1;
                        }
                        parseStatus = HtmlParser.ParseStatus.ReadAttributeName;
                    }
                    if (startIndex1 + 1 < input.Length && input.Substring(startIndex1, 2).Equals("/>"))
                    {
                        stringCollection.Add("/>");
                        parseStatus  = HtmlParser.ParseStatus.ReadText;
                        startIndex1 += 2;
                    }
                    else if (startIndex1 < input.Length && input.Substring(startIndex1, 1).Equals(">"))
                    {
                        stringCollection.Add(">");
                        ++startIndex1;
                        parseStatus = HtmlParser.ParseStatus.ReadText;
                    }
                    break;
                }
            }
            return(stringCollection);
        }
Пример #2
0
        private StringCollection GetTokens(string input)
        {
            StringCollection stringCollection = new StringCollection();
            int i = 0;

            HtmlParser.ParseStatus parseStatus = HtmlParser.ParseStatus.ReadText;
            StringCollection       result;

            while (i < input.Length)
            {
                switch (parseStatus)
                {
                case HtmlParser.ParseStatus.ReadText:
                    if (i + 2 < input.Length && input.Substring(i, 2).Equals("</"))
                    {
                        i += 2;
                        stringCollection.Add("</");
                        parseStatus = HtmlParser.ParseStatus.ReadEndTag;
                    }
                    else if (input.Substring(i, 1).Equals("<"))
                    {
                        i++;
                        stringCollection.Add("<");
                        parseStatus = HtmlParser.ParseStatus.ReadStartTag;
                    }
                    else
                    {
                        int num = input.IndexOf("<", i);
                        if (num == -1)
                        {
                            stringCollection.Add(input.Substring(i));
                            result = stringCollection;
                            return(result);
                        }
                        stringCollection.Add(input.Substring(i, num - i));
                        i = num;
                    }
                    break;

                case HtmlParser.ParseStatus.ReadEndTag:
                {
                    while (i < input.Length && input.Substring(i, 1).IndexOfAny(HtmlParser.WHITESPACE_CHARS) != -1)
                    {
                        i++;
                    }
                    int num2 = i;
                    while (i < input.Length && input.Substring(i, 1).IndexOfAny(" \r\n\t>".ToCharArray()) == -1)
                    {
                        i++;
                    }
                    stringCollection.Add(input.Substring(num2, i - num2));
                    while (i < input.Length && input.Substring(i, 1).IndexOfAny(HtmlParser.WHITESPACE_CHARS) != -1)
                    {
                        i++;
                    }
                    if (i < input.Length && input.Substring(i, 1).Equals(">"))
                    {
                        stringCollection.Add(">");
                        parseStatus = HtmlParser.ParseStatus.ReadText;
                        i++;
                    }
                    break;
                }

                case HtmlParser.ParseStatus.ReadStartTag:
                {
                    while (i < input.Length && input.Substring(i, 1).IndexOfAny(HtmlParser.WHITESPACE_CHARS) != -1)
                    {
                        i++;
                    }
                    int num2 = i;
                    while (i < input.Length && input.Substring(i, 1).IndexOfAny(" \r\n\t/>".ToCharArray()) == -1)
                    {
                        i++;
                    }
                    stringCollection.Add(input.Substring(num2, i - num2));
                    while (i < input.Length && input.Substring(i, 1).IndexOfAny(HtmlParser.WHITESPACE_CHARS) != -1)
                    {
                        i++;
                    }
                    if (i + 1 < input.Length && input.Substring(i, 1).Equals("/>"))
                    {
                        stringCollection.Add("/>");
                        parseStatus = HtmlParser.ParseStatus.ReadText;
                        i          += 2;
                    }
                    else if (i < input.Length && input.Substring(i, 1).Equals(">"))
                    {
                        stringCollection.Add(">");
                        parseStatus = HtmlParser.ParseStatus.ReadText;
                        i++;
                    }
                    else
                    {
                        parseStatus = HtmlParser.ParseStatus.ReadAttributeName;
                    }
                    break;
                }

                case HtmlParser.ParseStatus.ReadAttributeName:
                {
                    while (i < input.Length && input.Substring(i, 1).IndexOfAny(HtmlParser.WHITESPACE_CHARS) != -1)
                    {
                        i++;
                    }
                    int num3 = i;
                    while (i < input.Length && input.Substring(i, 1).IndexOfAny(" \r\n\t/>=".ToCharArray()) == -1)
                    {
                        i++;
                    }
                    stringCollection.Add(input.Substring(num3, i - num3));
                    while (i < input.Length && input.Substring(i, 1).IndexOfAny(HtmlParser.WHITESPACE_CHARS) != -1)
                    {
                        i++;
                    }
                    if (i + 1 < input.Length && input.Substring(i, 2).Equals("/>"))
                    {
                        stringCollection.Add("/>");
                        parseStatus = HtmlParser.ParseStatus.ReadText;
                        i          += 2;
                    }
                    else if (i < input.Length && input.Substring(i, 1).Equals(">"))
                    {
                        stringCollection.Add(">");
                        parseStatus = HtmlParser.ParseStatus.ReadText;
                        i++;
                    }
                    else if (i < input.Length && input.Substring(i, 1).Equals("="))
                    {
                        stringCollection.Add("=");
                        i++;
                        parseStatus = HtmlParser.ParseStatus.ReadAttributeValue;
                    }
                    else if (i < input.Length && input.Substring(i, 1).Equals("/"))
                    {
                        i++;
                    }
                    break;
                }

                default:
                    if (parseStatus == HtmlParser.ParseStatus.ReadAttributeValue)
                    {
                        while (i < input.Length && input.Substring(i, 1).IndexOfAny(HtmlParser.WHITESPACE_CHARS) != -1)
                        {
                            i++;
                        }
                        if (i < input.Length && input.Substring(i, 1).Equals("\""))
                        {
                            int num4 = i;
                            i++;
                            while (i < input.Length && !input.Substring(i, 1).Equals("\""))
                            {
                                i++;
                            }
                            if (i < input.Length && input.Substring(i, 1).Equals("\""))
                            {
                                i++;
                            }
                            stringCollection.Add(input.Substring(num4 + 1, i - num4 - 2));
                            parseStatus = HtmlParser.ParseStatus.ReadAttributeName;
                        }
                        else if (i < input.Length && input.Substring(i, 1).Equals("'"))
                        {
                            int num4 = i;
                            i++;
                            while (i < input.Length && !input.Substring(i, 1).Equals("'"))
                            {
                                i++;
                            }
                            if (i < input.Length && input.Substring(i, 1).Equals("'"))
                            {
                                i++;
                            }
                            stringCollection.Add(input.Substring(num4 + 1, i - num4 - 2));
                            parseStatus = HtmlParser.ParseStatus.ReadAttributeName;
                        }
                        else
                        {
                            int num4 = i;
                            while (i < input.Length && input.Substring(i, 1).IndexOfAny(" \r\n\t/>".ToCharArray()) == -1)
                            {
                                i++;
                            }
                            stringCollection.Add(input.Substring(num4, i - num4));
                            while (i < input.Length && input.Substring(i, 1).IndexOfAny(HtmlParser.WHITESPACE_CHARS) != -1)
                            {
                                i++;
                            }
                            parseStatus = HtmlParser.ParseStatus.ReadAttributeName;
                        }
                        if (i + 1 < input.Length && input.Substring(i, 2).Equals("/>"))
                        {
                            stringCollection.Add("/>");
                            parseStatus = HtmlParser.ParseStatus.ReadText;
                            i          += 2;
                        }
                        else if (i < input.Length && input.Substring(i, 1).Equals(">"))
                        {
                            stringCollection.Add(">");
                            i++;
                            parseStatus = HtmlParser.ParseStatus.ReadText;
                        }
                    }
                    break;
                }
            }
            result = stringCollection;
            return(result);
        }