示例#1
0
        /// <summary>
        /// Strips non-relevant line breaks from a chunk of HTML
        /// </summary>
        /// <param name="html"></param>
        /// <returns></returns>
        public static string RemoveLinebreaks(string html)
        {
            HtmlLinebreakStripper converter = new HtmlLinebreakStripper(html);

            converter.Parse();
            return(converter.GetHtml());
        }
示例#2
0
        /// <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>
 /// Strips non-relevant line breaks from a chunk of HTML
 /// </summary>
 /// <param name="html"></param>
 /// <returns></returns>
 public static string RemoveLinebreaks(string html)
 {
     HtmlLinebreakStripper converter = new HtmlLinebreakStripper(html);
     converter.Parse();
     return converter.GetHtml();
 }