public RootBuilder(TemplateParser parser)
 {
     foundry = new AspComponentFoundry();
     Line    = 1;
     if (parser != null)
     {
         FileName = parser.InputFile;
     }
     Init(parser, null, null, null, null, null);
 }
Ejemplo n.º 2
0
        void AddChild(object child)
        {
            if (children == null)
            {
                children = new ArrayList();
            }

            children.Add(child);
            ControlBuilder cb = child as ControlBuilder;

            if (cb != null && cb is TemplateBuilder)
            {
                if (templateChildren == null)
                {
                    templateChildren = new ArrayList();
                }
                templateChildren.Add(child);
            }

            if (parser == null)
            {
                return;
            }

            string tag = cb != null ? cb.TagName : null;

            if (String.IsNullOrEmpty(tag))
            {
                return;
            }

            RootBuilder         rb      = Root;
            AspComponentFoundry foundry = rb != null ? rb.Foundry : null;

            if (foundry == null)
            {
                return;
            }
            AspComponent component = foundry.GetComponent(tag);

            if (component == null || !component.FromConfig)
            {
                return;
            }

            parser.AddImport(component.Namespace);
            parser.AddDependency(component.Source);
        }
 public RootBuilder()
 {
     foundry = new AspComponentFoundry();
     Line    = 1;
 }
        public static Type GetCompiledType(string theme, HttpContext context)
        {
            string virtualPath  = "~/App_Themes/" + theme + "/";
            string physicalPath = context.Request.MapPath(virtualPath);

            if (!Directory.Exists(physicalPath))
            {
                throw new HttpException(String.Format("Theme '{0}' cannot be found in the application or global theme directories.", theme));
            }
            string [] skin_files = Directory.GetFiles(physicalPath, "*.skin");

            PageThemeParser ptp = new PageThemeParser(new VirtualPath(virtualPath), context);

            string[] css_files = Directory.GetFiles(physicalPath, "*.css");
            string[] css_urls  = new string[css_files.Length];
            for (int i = 0; i < css_files.Length; i++)
            {
                ptp.AddDependency(css_files [i]);
                css_urls [i] = virtualPath + Path.GetFileName(css_files [i]);
            }

            Array.Sort(css_urls, StringComparer.OrdinalIgnoreCase);
            ptp.LinkedStyleSheets = css_urls;

            AspComponentFoundry shared_foundry = new AspComponentFoundry();

            ptp.RootBuilder = new RootBuilder();

            string skin_file_url;

            for (int i = 0; i < skin_files.Length; i++)
            {
                skin_file_url = VirtualPathUtility.Combine(virtualPath, Path.GetFileName(skin_files [i]));
                PageThemeFileParser ptfp = new PageThemeFileParser(new VirtualPath(skin_file_url),
                                                                   skin_files[i],
                                                                   context);

                ptp.AddDependency(skin_files [i]);
                AspGenerator gen = new AspGenerator(ptfp);
                ptfp.RootBuilder.Foundry = shared_foundry;
                gen.Parse();

                if (ptfp.RootBuilder.Children != null)
                {
                    foreach (object o in ptfp.RootBuilder.Children)
                    {
                        if (!(o is ControlBuilder))
                        {
                            continue;
                        }
                        ptp.RootBuilder.AppendSubBuilder((ControlBuilder)o);
                    }
                }

                foreach (string ass in ptfp.Assemblies)
                {
                    if (!ptp.Assemblies.Contains(ass))
                    {
                        ptp.AddAssemblyByFileName(ass);
                    }
                }
            }

            PageThemeCompiler compiler = new PageThemeCompiler(ptp);

            return(compiler.GetCompiledType());
        }