private void AddNode(UfDataNode node, UfElementDescriber elementDescriber, XhtmlTextWriter writer)
        {
            if (node.Name != string.Empty)
            {
                indentNum++;
                writer.Indent = indentNum;

                UfElementDescriber currentDescriber = elementDescriber;
                foreach (UfElementDescriber childElementDescriber in elementDescriber.Elements)
                {
                    if (node.Name == childElementDescriber.Name || node.Name == childElementDescriber.CompoundName)
                    {
                        currentDescriber = childElementDescriber;
                    }
                }

                if (currentDescriber.Attribute == "class")
                {

                    writer.WriteBeginTag("div");
                    if (currentDescriber.CompoundName == "")
                        writer.WriteAttribute("class", node.Name);
                    else
                        writer.WriteAttribute("class", node.Name + " " + currentDescriber.Name);

                    if (!string.IsNullOrEmpty(node.ElementId))
                        writer.WriteAttribute("id", node.ElementId);

                    writer.Write(HtmlTextWriter.TagRightChar);
                    writer.WriteEncodedText(node.Value);

                    foreach (UfDataNode child in node.Nodes)
                    {
                        writer.WriteLine();
                        AddNode(child, currentDescriber, writer);
                    }

                    if (node.Name != string.Empty)
                    {
                        writer.WriteEndTag("div");
                        writer.WriteLine();
                    }
                }

                if (currentDescriber.Attribute == "rel")
                {
                    writer.WriteBeginTag("a");
                    writer.WriteAttribute("href", node.DescendantValue("link"));
                    writer.WriteAttribute("rel", node.Name);
                    writer.Write(HtmlTextWriter.TagRightChar);

                    writer.WriteEncodedText(node.DescendantValue("text"));
                    writer.WriteEndTag("a");
                    writer.WriteLine();
                }

                indentNum--;
                writer.Indent = indentNum;

            }
        }
Пример #2
0
        private void Reformat()
        {
            //
            // Write out the HTML document lead.
            //

            StringWriter sw = new StringWriter();
            XhtmlTextWriter htmlWriter = new XhtmlTextWriter(sw, "  ");
            htmlWriter.WriteLine("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">");
            htmlWriter.AddAttribute("xmlns", "http://www.w3.org/1999/xhtml");
            htmlWriter.RenderBeginTag(HtmlTextWriterTag.Html);
            htmlWriter.RenderBeginTag(HtmlTextWriterTag.Head);
            htmlWriter.RenderBeginTag(HtmlTextWriterTag.Title);
            htmlWriter.WriteEncodedText(Path.GetFileNameWithoutExtension(Mask.EmptyString(DocumentPath, _defaultFileName)));
            htmlWriter.RenderEndTag();
            htmlWriter.AddAttribute(HtmlTextWriterAttribute.Type, "text/css");
            htmlWriter.RenderBeginTag(HtmlTextWriterTag.Style);
            htmlWriter.Write(@"a:link{ color:#00c}
              body{ background:#fff;  font-size:83%;  font-family:arial,sans-serif}
              td, th{ font-size:100%}
              td{ border:solid 1px #aaa;  padding:5px}
              table{ border-collapse:separate}
              h1{ font-size:x-large;  margin-top:0px}
              h2{ font-size:large}
              h3{ font-size:medium}
              h4{ font-size:small}
              img{ border:0}
              pre{ margin-left:2em;  padding:0.5em;  border-left:3px solid #ccc}");
            htmlWriter.RenderEndTag(/* style */);
            htmlWriter.RenderEndTag(/* head */);
            htmlWriter.RenderBeginTag(HtmlTextWriterTag.Body);

            //
            // Format the wiki into the HTML body.
            //

            new HtmlFormatter().Format(new WikiParser().Parse(new StringReader(_wikiBox.Text)), htmlWriter);

            //
            // Conclude the HTML document.
            //

            htmlWriter.RenderEndTag(/* body */);
            htmlWriter.RenderEndTag(/* html */);

            string html = sw.GetStringBuilder().ToString().Replace("\r", string.Empty);

            //
            // Update the WebBrowser with the HTML preview.
            //

            _webBrowser.AllowNavigation = true;
            _webBrowser.DocumentText = html;

            //
            // Update the RichTextBox with the HTML source and highlight
            // the markup.
            //

            _htmlBox.Clear();
            _htmlBox.Text = html;
            HighlightMarkup(_htmlBox);

            //
            // The preview is now up to date with the wiki changes.
            //

            _wikiChanged = false;
        }