/// <summary> /// Utility for printing the correct XHTML for a given MarkupContext. /// </summary> /// <param name="writer"></param> /// <param name="context"></param> /// <param name="text"></param> private static void printContext(HtmlWriter writer, MarkupContext context, string text, MarkupRange range) { switch (context.Context) { case _MARKUP_CONTEXT_TYPE.CONTEXT_TYPE_EnterScope: printElementStart(writer, context.Element); if (HtmlLinebreakStripper.IsPreserveWhitespaceTag(context.Element.tagName)) { // <pre> was losing whitespace using the normal markup pointer traversal method writer.WriteString(BalanceHtml(context.Element.innerHTML)); printElementEnd(writer, context.Element); range.End.MoveAdjacentToElement(context.Element, _ELEMENT_ADJACENCY.ELEM_ADJ_AfterEnd); break; } else { if (text != null) { writer.WriteString(trimHtmlText(text)); } break; } case _MARKUP_CONTEXT_TYPE.CONTEXT_TYPE_ExitScope: if (text != null) { writer.WriteString(trimHtmlText(text)); } printElementEnd(writer, context.Element); break; case _MARKUP_CONTEXT_TYPE.CONTEXT_TYPE_None: break; case _MARKUP_CONTEXT_TYPE.CONTEXT_TYPE_NoScope: if (context.Element is IHTMLCommentElement || context.Element is IHTMLUnknownElement) { //bugfix: 1777 - comments should just be inserted raw. string html = context.Element.outerHTML; // bugfix: 534222 - embed tag markup generation issues if (html != null && html.ToUpper(CultureInfo.InvariantCulture) != "</EMBED>") { writer.WriteString(html); } } else { printElementStart(writer, context.Element); if (text == null && context.Element.innerHTML != null) { //Avoid MSHTML bug: in some cases (like title or script elements), MSHTML improperly //reports a tag as being NoScope, even through it clearly has a start and end tag with //text in between. To cover this case, we look for text in a noscope element, and add //it to the XML stream if it is detected. writer.WriteString(context.Element.innerHTML); } printElementEnd(writer, context.Element); } break; case _MARKUP_CONTEXT_TYPE.CONTEXT_TYPE_Text: if (text != null) { writer.WriteString(trimHtmlText(text)); } break; default: break; } }
/// <summary> /// Utility for printing the correct XHTML for a given MarkupContext. /// </summary> /// <param name="writer"></param> /// <param name="context"></param> /// <param name="text"></param> private static void printContext(HtmlWriter writer, MarkupContext context, string text, MarkupRange range) { switch (context.Context) { case _MARKUP_CONTEXT_TYPE.CONTEXT_TYPE_EnterScope: printElementStart(writer, context.Element); if (HtmlLinebreakStripper.IsPreserveWhitespaceTag(context.Element.tagName)) { // <pre> was losing whitespace using the normal markup pointer traversal method writer.WriteString(BalanceHtml(context.Element.innerHTML)); printElementEnd(writer, context.Element); range.End.MoveAdjacentToElement(context.Element, _ELEMENT_ADJACENCY.ELEM_ADJ_AfterEnd); break; } else { if (text != null) writer.WriteString(trimHtmlText(text)); break; } case _MARKUP_CONTEXT_TYPE.CONTEXT_TYPE_ExitScope: if (text != null) writer.WriteString(trimHtmlText(text)); printElementEnd(writer, context.Element); break; case _MARKUP_CONTEXT_TYPE.CONTEXT_TYPE_None: break; case _MARKUP_CONTEXT_TYPE.CONTEXT_TYPE_NoScope: if (context.Element is IHTMLCommentElement || context.Element is IHTMLUnknownElement) { //bugfix: 1777 - comments should just be inserted raw. string html = context.Element.outerHTML; // bugfix: 534222 - embed tag markup generation issues if (html != null && html.ToUpper(CultureInfo.InvariantCulture) != "</EMBED>") writer.WriteString(html); } else { printElementStart(writer, context.Element); if (text == null && context.Element.innerHTML != null) { //Avoid MSHTML bug: in some cases (like title or script elements), MSHTML improperly //reports a tag as being NoScope, even through it clearly has a start and end tag with //text in between. To cover this case, we look for text in a noscope element, and add //it to the XML stream if it is detected. writer.WriteString(context.Element.innerHTML); } printElementEnd(writer, context.Element); } break; case _MARKUP_CONTEXT_TYPE.CONTEXT_TYPE_Text: if (text != null) writer.WriteString(trimHtmlText(text)); break; default: break; } }