/// <summary>
        /// Inserts a new Component in the container
        /// </summary>
        /// <param name="container"></param>
        /// <param name="index"></param>
        /// <param name="ele"></param>
        private void InsertComponentInContainer(IPDFContainerComponent container, int index, IPDFComponent ele, PDFInitContext init, PDFLoadContext load)
        {
            ele.Init(init);
            IPDFComponentList list = container.Content as IPDFComponentList;

            list.Insert(index, ele);
            _addedonbind.Add(ele);
            ele.Load(load);
        }
예제 #2
0
        protected virtual void ParseHtmlContents(string source, string html, IPDFContainerComponent container, int insertIndex)
        {
            HTMLParserSettings settings = GetParserSettings();

            if (this.Format == HtmlFormatType.Markdown)
            {
                Markdown md = new Markdown();
                html = md.Transform(html);
            }
            HTMLParser parser = new HTMLParser(html, settings);

            Stack <IPDFComponent> route = new Stack <IPDFComponent>();

            IPDFComponentList contents = container.Content;

            //int codeDepth = 0;
            foreach (Scryber.Html.Parsing.HTMLParserResult result in parser)
            {
                if (result.Valid && null != result.Parsed)
                {
                    IPDFComponent parsed = result.Parsed;

                    if (result.IsEnd)
                    {
                        route.Pop();
                    }
                    else
                    {
                        if (route.Count == 0)
                        {
                            _added.Add(parsed);
                            contents.Insert(insertIndex, parsed);
                            insertIndex++;
                            if (parsed is IPDFLoadableComponent)
                            {
                                ((IPDFLoadableComponent)parsed).LoadedSource = source;
                            }
                        }
                        else
                        {
                            IPDFContainerComponent parent = (IPDFContainerComponent)route.Peek();
                            ((IPDFComponentList)parent.Content).Add(parsed);
                        }
                        route.Push(result.Parsed);
                    }
                }
            }
        }
 /// <summary>
 /// Adds the inner object to the collection.
 /// </summary>
 /// <param name="collection"></param>
 /// <param name="inner"></param>
 internal void AddToCollection(object collection, object inner)
 {
     if (collection is System.Collections.IList)
     {
         ((System.Collections.IList)collection).Add(inner);
     }
     else if (collection is IPDFComponentWrappingList)
     {
         IPDFComponentList list = ((IPDFComponentWrappingList)collection).InnerList;
         if (!(inner is IPDFComponent))
         {
             throw new InvalidCastException(string.Format(Errors.CannotConvertObjectToType, inner.GetType(), typeof(IPDFComponent)));
         }
         list.Add((IPDFComponent)inner);
     }
     else
     {
         if (null == _add)
         {
             MethodInfo[] all = this.PropertyInfo.PropertyType.GetMethods(BindingFlags.Public | BindingFlags.Instance);
             foreach (MethodInfo one in all)
             {
                 if (one.Name == "Add")
                 {
                     ParameterInfo[] param = one.GetParameters();
                     if (param.Length == 1 && param[0].ParameterType == this.ContentType)
                     {
                         _add = one;
                         break;
                     }
                 }
             }
             if (null == _add)
             {
                 throw new NullReferenceException(String.Format(Errors.NoAddMethodFoundOnCollection, this.ValueType, this.ContentType));
             }
         }
         _add.Invoke(collection, new object[] { inner });
     }
 }
예제 #4
0
        public void InstantiateTemplate(IPDFTemplate template, PDFLayoutContext context, PDFRect available, int pageindex)
        {
            if (null == template)
            {
                throw new ArgumentNullException("template");
            }
            if (null == context)
            {
                throw new ArgumentNullException("context");
            }

            List <IPDFComponent> generated = new List <IPDFComponent>(template.Instantiate(GeneratedCount, this));

            if (generated.Count == 0)
            {
                return;
            }

            PDFInitContext init = new PDFInitContext(context.Items, context.TraceLog, context.PerformanceMonitor, this.Document)
            {
                Compression  = context.Compression,
                OutputFormat = context.OutputFormat,
                Conformance  = context.Conformance
            };

            PDFLoadContext load = new PDFLoadContext(context.Items, context.TraceLog, context.PerformanceMonitor, this.Document)
            {
                Compression  = context.Compression,
                OutputFormat = context.OutputFormat,
                Conformance  = context.Conformance
            };

            PDFDataContext data = new PDFDataContext(context.Items, context.TraceLog, context.PerformanceMonitor, this.Document)
            {
                Compression  = context.Compression,
                OutputFormat = context.OutputFormat,
                Conformance  = context.Conformance
            };


            IPDFContainerComponent container  = this;
            IPDFComponentList      components = container.Content as IPDFComponentList;

            for (int index = 0; index < generated.Count; index++)
            {
                IPDFComponent comp = generated[index];
                components.Insert(index, comp);
                comp.Init(init);
            }

            foreach (IPDFComponent comp in generated)
            {
                comp.Load(load);
            }
            foreach (IPDFComponent comp in generated)
            {
                if (comp is IPDFBindableComponent)
                {
                    (comp as IPDFBindableComponent).DataBind(data);
                }
            }
            this.GeneratedCount++;
        }