示例#1
0
        /// <summary>
        /// 渲染元素和其子节点
        /// </summary>
        /// <param name="element">要渲染的元素</param>
        /// <param name="context">渲染上下文</param>
        private static void RenderElementAndChilds(IHtmlElement element, HtmlRenderContext context)
        {
            var writer = context.Writer;

            var specification = element.Document.HtmlSpecification;

            if (specification.IsForbiddenEndTag(element.Name))
            {
                var builder = new StringBuilder();

                builder.Append(GenerateTagHtml(element, true));

                if (element.Nodes().Any())
                {
                    throw new FormatException(string.Format(CultureInfo.InvariantCulture, "HTML元素 {0} 不能有任何内容", element.Name));
                }


                writer.Write(builder);
            }
            else
            {
                writer.Write(GenerateTagHtml(element, false));
                RenderChilds(element, context);
                writer.Write("</{0}>", element.Name);
            }
        }
示例#2
0
        /// <summary>
        /// 将节点呈现为 HTML
        /// </summary>
        /// <param name="node">要呈现的节点</param>
        /// <param name="context">渲染上下文</param>
        public static void Render(this IHtmlNode node, HtmlRenderContext context)
        {
            if (node == null)
            {
                throw new ArgumentNullException("node");
            }


            foreach (var a in context.Adapters)
            {
                if (a.Render(node, context))
                {
                    return;
                }
            }


            var renderable = node as IHtmlRenderableNode;

            if (renderable != null)
            {
                renderable.Render(context);
                return;
            }

            var element = node as IHtmlElement;

            if (element != null)
            {
                RenderElementAndChilds(element, context);
                return;
            }

            context.Write(node.OuterHtml());
        }
示例#3
0
 /// <summary>
 /// 渲染所有的子节点
 /// </summary>
 /// <param name="container">要渲染子节点的容器</param>
 /// <param name="context">渲染上下文</param>
 public static void RenderChilds(this IHtmlContainer container, HtmlRenderContext context)
 {
     foreach (var node in container.Nodes())
     {
         Render(node, context);
     }
 }
示例#4
0
        bool IHtmlRenderAdapter.Render( IHtmlNode node, HtmlRenderContext context )
        {
            var element = node as IHtmlElement;

              if ( element == null )
            return false;

              if ( !IsEligible( element ) )
            return false;

              Render( element, context );
              return true;
        }
示例#5
0
        bool IHtmlRenderAdapter.Render(IHtmlNode node, HtmlRenderContext context)
        {
            var element = node as IHtmlElement;

            if (element == null)
            {
                return(false);
            }

            if (!IsEligible(element))
            {
                return(false);
            }

            Render(element, context);
            return(true);
        }
示例#6
0
    bool IHtmlRenderAdapter.Render( IHtmlNode node, HtmlRenderContext context )
    {
      var term = Terms.FirstOrDefault( t => t.TextNode.Equals( node ) );
      if ( term != null )
      {
        context.Write( term.TranslatedTerm );
        return true;
      }

      return false;

    }
示例#7
0
 /// <summary>
 /// 派生类实现此方法提供自定义的渲染规则。
 /// </summary>
 /// <param name="element">要渲染的元素</param>
 /// <param name="context">渲染上下文</param>
 protected abstract void Render( IHtmlElement element, HtmlRenderContext context );
示例#8
0
 /// <summary>
 /// 派生类实现此方法提供自定义的渲染规则。
 /// </summary>
 /// <param name="element">要渲染的元素</param>
 /// <param name="context">渲染上下文</param>
 protected abstract void Render(IHtmlElement element, HtmlRenderContext context);
示例#9
0
        /// <summary>
        /// 渲染元素和其子节点
        /// </summary>
        /// <param name="element">要渲染的元素</param>
        /// <param name="context">渲染上下文</param>
        private static void RenderElementAndChilds( IHtmlElement element, HtmlRenderContext context )
        {
            var writer = context.Writer;

              var specification = element.Document.HtmlSpecification;

              if ( specification.IsForbiddenEndTag( element.Name ) )
              {
            var builder = new StringBuilder();

            builder.Append( GenerateTagHtml( element, true ) );

            if ( element.Nodes().Any() )
              throw new FormatException( string.Format( CultureInfo.InvariantCulture, "HTML元素 {0} 不能有任何内容", element.Name ) );

            writer.Write( builder );
              }
              else
              {

            writer.Write( GenerateTagHtml( element, false ) );
            RenderChilds( element, context );
            writer.Write( "</{0}>", element.Name );

              }
        }
示例#10
0
 /// <summary>
 /// 渲染所有的子节点
 /// </summary>
 /// <param name="container">要渲染子节点的容器</param>
 /// <param name="context">渲染上下文</param>
 public static void RenderChilds( this IHtmlContainer container, HtmlRenderContext context )
 {
     foreach ( var node in container.Nodes() )
       {
     Render( node, context );
       }
 }
示例#11
0
        /// <summary>
        /// 将节点呈现为 HTML
        /// </summary>
        /// <param name="node">要呈现的节点</param>
        /// <param name="context">渲染上下文</param>
        public static void Render( this IHtmlNode node, HtmlRenderContext context )
        {
            if ( node == null )
            throw new ArgumentNullException( "node" );

              foreach ( var a in context.Adapters )
              {
            if ( a.Render( node, context ) )
              return;
              }

              var renderable = node as IHtmlRenderableNode;

              if ( renderable != null )
              {
            renderable.Render( context );
            return;
              }

              var element = node as IHtmlElement;
              if ( element != null )
              {
            RenderElementAndChilds( element, context );
            return;
              }

              context.Write( node.OuterHtml() );
        }