private HtmlElement.HtmlElementType ReadElementType(bool isEndElement) { this.m_sb.Length = 0; bool flag = true; char c = default(char); while (flag && this.m_htmlReader.Peek(out c)) { switch (c) { case ' ': if (isEndElement && this.m_sb.Length == 0) { this.m_htmlReader.Advance(); break; } goto case '>'; case '/': if (isEndElement) { this.m_htmlReader.Advance(); break; } goto case '>'; case '>': if (this.m_sb.Length == 0) { return(HtmlElement.HtmlElementType.Unsupported); } return(HtmlLexer.GetElementType(this.m_sb.ToString())); default: this.m_htmlReader.Advance(); this.m_sb.Append(c); break; } } return(HtmlElement.HtmlElementType.Unsupported); }
protected override void InternalParse(string richText) { this.m_htmlLexer = new HtmlLexer(richText); int num = 0; FunctionalList <ListStyle> functionalList = FunctionalList <ListStyle> .Empty; HtmlElement.HtmlNodeType htmlNodeType = HtmlElement.HtmlNodeType.Element; HtmlElement.HtmlNodeType htmlNodeType2 = HtmlElement.HtmlNodeType.Element; HtmlElement.HtmlElementType htmlElementType = HtmlElement.HtmlElementType.None; HtmlElement.HtmlElementType htmlElementType2 = HtmlElement.HtmlElementType.None; while (this.m_htmlLexer.Read()) { this.m_currentHtmlElement = this.m_htmlLexer.CurrentElement; htmlElementType2 = this.m_currentHtmlElement.ElementType; htmlNodeType2 = this.m_currentHtmlElement.NodeType; switch (htmlNodeType2) { case HtmlElement.HtmlNodeType.Element: if (num != 0 && htmlElementType2 != HtmlElement.HtmlElementType.TITLE) { break; } switch (htmlElementType2) { case HtmlElement.HtmlElementType.TITLE: if (!this.m_currentHtmlElement.IsEmptyElement) { num++; } htmlElementType2 = htmlElementType; htmlNodeType2 = htmlNodeType; break; case HtmlElement.HtmlElementType.P: case HtmlElement.HtmlElementType.DIV: case HtmlElement.HtmlElementType.LI: case HtmlElement.HtmlElementType.H1: case HtmlElement.HtmlElementType.H2: case HtmlElement.HtmlElementType.H3: case HtmlElement.HtmlElementType.H4: case HtmlElement.HtmlElementType.H5: case HtmlElement.HtmlElementType.H6: this.ParseParagraphElement(htmlElementType2, functionalList); break; case HtmlElement.HtmlElementType.UL: case HtmlElement.HtmlElementType.OL: { this.FlushPendingLI(); this.CloseParagraph(); ListStyle listStyleForElement2 = this.GetListStyleForElement(htmlElementType2); functionalList = functionalList.Add(listStyleForElement2); base.m_currentParagraph.ListLevel = functionalList.Count; break; } case HtmlElement.HtmlElementType.SPAN: case HtmlElement.HtmlElementType.FONT: case HtmlElement.HtmlElementType.STRONG: case HtmlElement.HtmlElementType.STRIKE: case HtmlElement.HtmlElementType.B: case HtmlElement.HtmlElementType.I: case HtmlElement.HtmlElementType.U: case HtmlElement.HtmlElementType.S: case HtmlElement.HtmlElementType.EM: this.ParseTextRunElement(htmlElementType2); break; case HtmlElement.HtmlElementType.A: this.ParseActionElement(functionalList.Count); break; case HtmlElement.HtmlElementType.BR: if (htmlNodeType != HtmlElement.HtmlNodeType.EndElement) { this.AppendText(Environment.NewLine); } else { this.SetTextRunValue(Environment.NewLine); } break; default: htmlElementType2 = htmlElementType; htmlNodeType2 = htmlNodeType; break; } break; case HtmlElement.HtmlNodeType.Text: if (num == 0) { string text = this.m_currentHtmlElement.Value; if (htmlNodeType == HtmlElement.HtmlNodeType.Text) { this.AppendText(text); } else if (htmlElementType == HtmlElement.HtmlElementType.BR) { this.AppendText(this.HtmlTrimStart(text)); } else { if (base.m_currentParagraphInstance == null) { text = this.HtmlTrimStart(text); } if (!string.IsNullOrEmpty(text)) { this.SetTextRunValue(text); } else { htmlElementType2 = htmlElementType; htmlNodeType2 = htmlNodeType; } } } break; case HtmlElement.HtmlNodeType.EndElement: if (num != 0 && htmlElementType2 != HtmlElement.HtmlElementType.TITLE) { break; } switch (htmlElementType2) { case HtmlElement.HtmlElementType.TITLE: if (num > 0) { num--; } htmlElementType2 = htmlElementType; htmlNodeType2 = htmlNodeType; break; case HtmlElement.HtmlElementType.UL: case HtmlElement.HtmlElementType.OL: this.FlushPendingLI(); this.CloseParagraph(); if (functionalList.Count > 0) { ListStyle listStyleForElement = this.GetListStyleForElement(htmlElementType2); bool flag = false; FunctionalList <ListStyle> functionalList2 = functionalList; do { flag = (functionalList2.First == listStyleForElement); functionalList2 = functionalList2.Rest; }while (!flag && functionalList2.Count > 0); if (flag) { functionalList = functionalList2; base.m_currentParagraph.ListLevel = functionalList.Count; } } break; case HtmlElement.HtmlElementType.LI: this.CloseParagraph(); break; case HtmlElement.HtmlElementType.P: case HtmlElement.HtmlElementType.DIV: case HtmlElement.HtmlElementType.H1: case HtmlElement.HtmlElementType.H2: case HtmlElement.HtmlElementType.H3: case HtmlElement.HtmlElementType.H4: case HtmlElement.HtmlElementType.H5: case HtmlElement.HtmlElementType.H6: this.CloseParagraph(); base.m_currentParagraph = base.m_currentParagraph.RemoveParagraph(htmlElementType2); goto case HtmlElement.HtmlElementType.SPAN; case HtmlElement.HtmlElementType.SPAN: case HtmlElement.HtmlElementType.FONT: case HtmlElement.HtmlElementType.STRONG: case HtmlElement.HtmlElementType.STRIKE: case HtmlElement.HtmlElementType.B: case HtmlElement.HtmlElementType.I: case HtmlElement.HtmlElementType.U: case HtmlElement.HtmlElementType.S: case HtmlElement.HtmlElementType.EM: base.m_currentStyle = base.m_currentStyle.RemoveStyle(htmlElementType2); break; case HtmlElement.HtmlElementType.A: this.RevertActionElement(htmlElementType2); break; default: htmlElementType2 = htmlElementType; htmlNodeType2 = htmlNodeType; break; } break; } htmlNodeType = htmlNodeType2; htmlElementType = htmlElementType2; } if (base.m_paragraphInstanceCollection.Count == 0) { this.CreateTextRunInstance(); } base.m_currentParagraph = base.m_currentParagraph.RemoveAll(); }