protected internal override BlogEditingTemplate GenerateBlogTemplate(IHTMLDocument3 doc, IHTMLElement titleElement, IHTMLElement[] allTitleElements, IHTMLElement bodyElement) { // if title is containing with a link then strip the link CleanupContainingAnchorTag(titleElement); string templateHtml = ""; StyleBuilder styleBuilder = new StyleBuilder(); IMarkupServicesRaw rawMarkupServices = doc as IMarkupServicesRaw; MshtmlMarkupServices markupServices = new MshtmlMarkupServices(rawMarkupServices); MarkupPointer startPointer = markupServices.CreateMarkupPointer(titleElement, _ELEMENT_ADJACENCY.ELEM_ADJ_AfterBegin); MarkupPointer endPointer = markupServices.CreateMarkupPointer(bodyElement, _ELEMENT_ADJACENCY.ELEM_ADJ_AfterEnd); MarkupRange range = markupServices.CreateMarkupRange(startPointer, endPointer); IHTMLElement stopElement = range.ParentElement(); IHTMLElement currElement; string titleTemplateText = WrapInHiddenHtml(postTitleClass, BlogEditingTemplate.POST_TITLE_MARKER); AddTitleStyles(titleElement, styleBuilder); currElement = titleElement; while (currElement != null && currElement.sourceIndex != stopElement.sourceIndex) { string className = currElement.tagName + currElement.sourceIndex; titleTemplateText = WriteStartTag(currElement, className) + titleTemplateText + WriteEndTag(currElement); AddFrameStyles(currElement, "." + className, styleBuilder); currElement = currElement.parentElement; } string bodyTemplateText = WrapInHiddenHtml(postBodyClass, BlogEditingTemplate.POST_BODY_MARKER); AddBodyStyles(bodyElement, styleBuilder); currElement = bodyElement; while (currElement != null && currElement.sourceIndex != stopElement.sourceIndex) { string className = currElement.tagName + currElement.sourceIndex; bodyTemplateText = WriteStartTag(currElement, className) + bodyTemplateText + WriteEndTag(currElement); AddFrameStyles(currElement, "." + className, styleBuilder); currElement = currElement.parentElement; } templateHtml = titleTemplateText + bodyTemplateText; currElement = range.ParentElement(); while (currElement != null) { string className = null; if (currElement.tagName == "HTML") { MarkupPointer bodyPointer = markupServices.CreateMarkupPointer(((IHTMLDocument2)doc).body, _ELEMENT_ADJACENCY.ELEM_ADJ_BeforeBegin); MarkupPointer docPointer = markupServices.CreateMarkupPointer(currElement, _ELEMENT_ADJACENCY.ELEM_ADJ_AfterBegin); MarkupRange headRange = markupServices.CreateMarkupRange(docPointer, bodyPointer); IHTMLElement[] elements = headRange.GetTopLevelElements(new IHTMLElementFilter(IsHeadElement)); if (elements.Length > 0) { //string head = elements[0].innerHTML; string head = ""; //string defaultStyles = "<style>p, h1, h2, h3, h4, h5, h6, blockquote, pre{ padding-top: 1px; }</style>"; styleBuilder.Dispose(); head = String.Format(CultureInfo.InvariantCulture, "<head>{0}<style>{1}</style></head>", head, styleBuilder.ToString()); templateHtml = head + templateHtml; } } else { className = currElement.tagName + currElement.sourceIndex; AddFrameStyles(currElement, "." + className, styleBuilder); } templateHtml = WriteStartTag(currElement, className) + templateHtml + WriteEndTag(currElement); currElement = currElement.parentElement; } //prepend the doctype of the document - this prevents styles in the document from rendering improperly string docType = HTMLDocumentHelper.GetSpecialHeaders((IHTMLDocument2)doc).DocType; //string docType = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\"[]>"; if (docType != null) templateHtml = docType + "\r\n" + templateHtml; return new BlogEditingTemplate(templateHtml); }