void TryProcessCDATA() { tempBuilder.Clear(); if (TryParse("[CDATA[", true, tempBuilder)) { var contentPosition = GetSourceLocation(); int endPosition = position - 1; while (true) { if (c == ']') { c = NextChar(); if (c == ']') { c = NextChar(); if (c == '>') { c = NextChar(); break; } } } else if (c == 0) { goto onerror; } endPosition = position; c = NextChar(); } tempBuilder.Clear(); var tag = new HtmlCDATA() { Location = startTagLocation, Slice = new StringSlice(text, contentPosition.Position, endPosition) }; CurrentParent.AppendChild(tag); return; } onerror: tempBuilder.Clear(); Error(c == 0 ? $"Invalid EOF found while parsing <![CDATA[" : $"Invalid character '{c}' found while parsing <![CDATA["); GetTextNode(startTagLocation).Append(text, startTagLocation.Position, position - 1); }
protected override void Write(HtmlCDATA node) { }
protected virtual void Write(HtmlCDATA node) { Write("<![CDATA["); Write(node.Slice.ToString()); Write("]]>"); }
protected override void Write(HtmlCDATA node) { Start("!cda"); base.Write(node); FlushDOM(); }