Example #1
0
            private static void EmitCreateDocument(ILGenerator il, IHtmlDocument document)
            {
                //create document

                //dup            document, document
                //st container   document

                //begin create element

                //ld provider    document, provider
                //ld container   document, provider, document
                //ld ElementName document, provider, document, name
                //create element document, element

                //dup            document, element, element
                //st container   document, element

                //begin create textNode

                //ld provider    document, element, provider
                //ld container   document, element, provider, element
                //ld text        document, element, provider, element, text
                //create text    document, element, textNode
                //pop            document, element

                //end create textNode

                //end create element
                //pop            document
                //dup            document, document
                //st container   document


                //end create document
                //complete   document
                //ret


                if (document.DocumentUri == null)
                {
                    il.Emit(OpCodes.Ldnull);
                }
                else
                {
                    il.Emit(OpCodes.Ldstr, document.DocumentUri.AbsoluteUri);
                    il.Emit(OpCodes.Newobj, NewUri);
                }


                il.Emit(OpCodes.Callvirt, CreateDocument);

                il.Emit(OpCodes.Dup);
                il.Emit(OpCodes.Stloc_0);// set container;

                foreach (var node in document.Nodes())
                {
                    EmitCreateNode(il, node);
                }
            }
Example #2
0
        /// <summary>
        /// 创建文档的副本
        /// </summary>
        /// <param name="provider">用于创建副本文档的 IHtmlDomProvider 对象</param>
        /// <param name="document">要创建副本的文档</param>
        /// <returns>文档的副本</returns>
        public static IHtmlDocument MakeCopy(this IHtmlDomProvider provider, IHtmlDocument document)
        {
            var copy = provider.CreateDocument(document.DocumentUri);


            copy.AddCopy(provider, document.Nodes());

            return(copy);
        }
            private static void EmitCreateDocument( ILGenerator il, IHtmlDocument document )
            {
                //init           provider

                //CreateDocument document
                //dup            document, document
                //st container   document

                //ld provider    document, provider
                //ld container   document, provider, document
                //ld spec        document, provider, document, specS
                //SetHtmlSpecifi document, spec
                //pop            document

                //begin create element

                //ld provider    document, provider
                //ld container   document, provider, document
                //ld ElementName document, provider, document, name
                //create element document, element

                //dup            document, element, element
                //st container   document, element

                //begin create textNode

                //ld provider    document, element, provider
                //ld container   document, element, provider, element
                //ld text        document, element, provider, element, text
                //create text    document, element, textNode
                //pop            document, element

                //end create textNode

                //end create element
                //pop            document
                //dup            document, document
                //st container   document

                //end create document
                //complete   document
                //ret

                if ( document.DocumentUri == null )
                  il.Emit( OpCodes.Ldnull );
                else
                {
                  il.Emit( OpCodes.Ldstr, document.DocumentUri.AbsoluteUri );
                  il.Emit( OpCodes.Newobj, NewUri );
                }

                il.Emit( OpCodes.Callvirt, CreateDocument );

                il.Emit( OpCodes.Dup );
                il.Emit( OpCodes.Stloc_0 );// set container;

                il.Emit( OpCodes.Ldarg_0 );
                il.Emit( OpCodes.Ldloc_0 );
                il.Emit( OpCodes.Castclass, typeof( IHtmlDocument ) );
                il.Emit( OpCodes.Ldstr, document.HtmlSpecification.ToString() );
                il.Emit( OpCodes.Callvirt, SetHtmlSpecification );
                il.Emit( OpCodes.Pop );

                foreach ( var node in document.Nodes() )
                  EmitCreateNode( il, node );
            }
            private static void EmitCreateDocument(ILGenerator il, IHtmlDocument document)
            {
                //init           provider

                //CreateDocument document
                //dup            document, document
                //st container   document

                //ld provider    document, provider
                //ld container   document, provider, document
                //ld spec        document, provider, document, specS
                //SetHtmlSpecifi document, spec
                //pop            document



                //begin create element

                //ld provider    document, provider
                //ld container   document, provider, document
                //ld ElementName document, provider, document, name
                //create element document, element

                //dup            document, element, element
                //st container   document, element

                //begin create textNode

                //ld provider    document, element, provider
                //ld container   document, element, provider, element
                //ld text        document, element, provider, element, text
                //create text    document, element, textNode
                //pop            document, element

                //end create textNode

                //end create element
                //pop            document
                //dup            document, document
                //st container   document


                //end create document
                //complete   document
                //ret


                if (document.DocumentUri == null)
                {
                    il.Emit(OpCodes.Ldnull);
                }
                else
                {
                    il.Emit(OpCodes.Ldstr, document.DocumentUri.AbsoluteUri);
                    il.Emit(OpCodes.Newobj, NewUri);
                }


                il.Emit(OpCodes.Callvirt, CreateDocument);

                il.Emit(OpCodes.Dup);
                il.Emit(OpCodes.Stloc_0);// set container;


                il.Emit(OpCodes.Ldarg_0);
                il.Emit(OpCodes.Ldloc_0);
                il.Emit(OpCodes.Castclass, typeof(IHtmlDocument));
                il.Emit(OpCodes.Ldstr, document.HtmlSpecification.ToString());
                il.Emit(OpCodes.Callvirt, SetHtmlSpecification);
                il.Emit(OpCodes.Pop);



                foreach (var node in document.Nodes())
                {
                    EmitCreateNode(il, node);
                }
            }