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); }
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); }