public static IHttpHandler GetCompiledPageInstance (string virtualPath, string inputFile, HttpContext context) { PageParser pp = new PageParser (virtualPath, inputFile, context); IHttpHandler h = (IHttpHandler) pp.GetCompiledInstance (); return h; }
private static TemplateParser InitParser (DesignTimeParseData data) { // TODO create the parser and set data TemplateParser NewParser = new PageParser(); // see FIXME in PageParser // = data.DesignerHost; // = data.DataBindingHandler; // = data.ParseText; // Parse data return NewParser; }
public PageCompiler (PageParser pageParser) : base (pageParser) { this.pageParser = pageParser; }
public static Type CompilePageType (PageParser pageParser) { PageCompiler compiler = new PageCompiler (pageParser); return compiler.GetCompiledType (); }
internal PageCodeDomTreeGenerator(PageParser pageParser) : base(pageParser) { _pageParser = pageParser; }
internal override void AddDirective (string directive, Hashtable atts) { int cmp = String.Compare ("Register", directive, true, Helpers.InvariantCulture); if (cmp == 0) { string tagprefix = GetString (atts, "TagPrefix", null); if (tagprefix == null || tagprefix.Trim () == "") ThrowParseException ("No TagPrefix attribute found."); string ns = GetString (atts, "Namespace", null); string assembly = GetString (atts, "Assembly", null); #if !NET_2_0 if (ns != null && assembly == null) ThrowParseException ("Need an Assembly attribute with Namespace."); #endif if (ns == null && assembly != null) ThrowParseException ("Need a Namespace attribute with Assembly."); if (ns != null) { if (atts.Count != 0) ThrowParseException ("Unknown attribute: " + GetOneKey (atts)); RegisterNamespace (tagprefix, ns, assembly); return; } string tagname = GetString (atts, "TagName", null); string src = GetString (atts, "Src", null); if (tagname == null && src != null) ThrowParseException ("Need a TagName attribute with Src."); if (tagname != null && src == null) ThrowParseException ("Need a Src attribute with TagName."); #if !NET_2_0 if (!StrUtils.EndsWith (src, ".ascx", true)) ThrowParseException ("Source file extension for controls must be .ascx"); #endif RegisterCustomControl (tagprefix, tagname, src); return; } cmp = String.Compare ("Reference", directive, true, Helpers.InvariantCulture); if (cmp == 0) { string vp = null; string page = GetString (atts, "Page", null); bool is_page = (page != null); if (is_page) vp = page; bool dupe = false; string control = GetString (atts, "Control", null); if (control != null) if (is_page) dupe = true; else vp = control; #if NET_2_0 string virtualPath = GetString (atts, "VirtualPath", null); if (virtualPath != null) if (vp != null) dupe = true; else vp = virtualPath; #endif if (vp == null) { #if NET_2_0 ThrowParseException ("Must provide one of the 'page', 'control' or 'virtualPath' attributes"); #else ThrowParseException ("Must provide one of the 'page' or 'control' attributes"); #endif } if (dupe) ThrowParseException ("Only one attribute can be specified."); AddDependency (vp); Type ctype; #if NET_2_0 ctype = BuildManager.GetCompiledType (vp); #else string filepath = MapPath (vp); if (is_page) { PageParser pp = new PageParser (page, filepath, Context); ctype = pp.CompileIntoType (); } else { ctype = UserControlParser.GetCompiledType (vp, filepath, Dependencies, Context); } #endif AddAssembly (ctype.Assembly, true); if (atts.Count != 0) ThrowParseException ("Unknown attribute: " + GetOneKey (atts)); return; } base.AddDirective (directive, atts); }
private static Control[] ParseControlsInternalHelper(DesignTimeParseData data, bool returnFirst) { TemplateParser parser = new PageParser(); parser.FInDesigner = true; parser.DesignerHost = data.DesignerHost; parser.DesignTimeDataBindHandler = data.DataBindingHandler; parser.Text = data.ParseText; parser.Parse(); ArrayList parsedControls = new ArrayList(); ArrayList subBuilders = parser.RootBuilder.SubBuilders; if (subBuilders != null) { // Look for the first control builder IEnumerator en = subBuilders.GetEnumerator(); for (int i = 0; en.MoveNext(); i++) { object cur = en.Current; if ((cur is ControlBuilder) && !(cur is CodeBlockBuilder)) { // Instantiate the control ControlBuilder controlBuilder = (ControlBuilder)cur; System.Diagnostics.Debug.Assert(controlBuilder.CurrentFilterResolutionService == null); IServiceProvider builderServiceProvider = null; // If there's a designer host, use it as the service provider if (data.DesignerHost != null) { builderServiceProvider = data.DesignerHost; } // If it doesn't exist, use a default ---- filter resolution service else { ServiceContainer serviceContainer = new ServiceContainer(); serviceContainer.AddService(typeof(IFilterResolutionService), new SimpleDesignTimeFilterResolutionService(data.Filter)); builderServiceProvider = serviceContainer; } controlBuilder.SetServiceProvider(builderServiceProvider); try { Control control = (Control)controlBuilder.BuildObject(data.ShouldApplyTheme); parsedControls.Add(control); } finally { controlBuilder.SetServiceProvider(null); } if (returnFirst) { break; } } // To preserve backwards compatibility, we don't add LiteralControls // to the control collection when parsing for a single control else if (!returnFirst && (cur is string)) { LiteralControl literalControl = new LiteralControl(cur.ToString()); parsedControls.Add(literalControl); } } } data.SetUserControlRegisterEntries(parser.UserControlRegisterEntries, parser.TagRegisterEntries); return (Control[])parsedControls.ToArray(typeof(Control)); }
public virtual IHttpHandler GetHandler(HttpContext context, string requestType, string url, string path) { return(PageParser.GetCompiledPageInstance(url, path, context)); }
public static ITemplate ParseTemplate(DesignTimeParseData data) { TemplateParser parser = new PageParser(); parser.FInDesigner = true; parser.DesignerHost = data.DesignerHost; parser.DesignTimeDataBindHandler = data.DataBindingHandler; parser.Text = data.ParseText; parser.Parse(); // Set the Text property of the TemplateBuilder to the input text parser.RootBuilder.Text = data.ParseText; parser.RootBuilder.SetDesignerHost(data.DesignerHost); return parser.RootBuilder; }
internal override void AddDirective (string directive, Hashtable atts) { int cmp = String.Compare ("Register", directive, true); if (cmp == 0) { string tagprefix = GetString (atts, "TagPrefix", null); if (tagprefix == null || tagprefix.Trim () == "") ThrowParseException ("No TagPrefix attribute found."); string ns = GetString (atts, "Namespace", null); string assembly = GetString (atts, "Assembly", null); if (ns != null && assembly == null) ThrowParseException ("Need an Assembly attribute with Namespace."); if (ns == null && assembly != null) ThrowParseException ("Need a Namespace attribute with Assembly."); if (ns != null) { if (atts.Count != 0) ThrowParseException ("Unknown attribute: " + GetOneKey (atts)); AddImport (ns); Assembly ass = AddAssemblyByName (assembly); AddDependency (ass.Location); RootBuilder.Foundry.RegisterFoundry (tagprefix, ass, ns); return; } string tagname = GetString (atts, "TagName", null); string src = GetString (atts, "Src", null); if (tagname == null && src != null) ThrowParseException ("Need a TagName attribute with Src."); if (tagname != null && src == null) ThrowParseException ("Need a Src attribute with TagName."); if (!src.EndsWith (".ascx")) ThrowParseException ("Source file extension for controls must be .ascx"); string realpath = MapPath (src); if (!File.Exists (realpath)) throw new ParseException (Location, "Could not find file \"" + realpath + "\"."); string vpath = UrlUtils.Combine (BaseVirtualDir, src); Type type = null; try { type = UserControlParser.GetCompiledType (vpath, realpath, Dependencies, Context); } catch (ParseException pe) { if (this is UserControlParser) throw new ParseException (Location, pe.Message, pe); throw; } AddAssembly (type.Assembly, true); RootBuilder.Foundry.RegisterFoundry (tagprefix, tagname, type); return; } cmp = String.Compare ("Reference", directive, true); if (cmp == 0) { string page = GetString (atts, "Page", null); string control = GetString (atts, "Control", null); bool is_page = (page != null); if (!is_page && control == null) ThrowParseException ("Must provide 'page' or 'control' attribute"); if (is_page && control != null) ThrowParseException ("'page' and 'control' are mutually exclusive"); string filepath = (!is_page) ? control : page; filepath = MapPath (filepath); AddDependency (filepath); Type ctype; if (is_page) { PageParser pp = new PageParser (page, filepath, Context); ctype = pp.CompileIntoType (); } else { ctype = UserControlParser.GetCompiledType (control, filepath, Dependencies, Context); } AddAssembly (ctype.Assembly, true); if (atts.Count != 0) ThrowParseException ("Unknown attribute: " + GetOneKey (atts)); return; } base.AddDirective (directive, atts); }
public static Type GetCompiledPageType (string virtualPath, string inputFile, HttpContext context) { #if NET_2_0 return BuildManager.GetCompiledType (virtualPath); #else PageParser pp = new PageParser (virtualPath, inputFile, context); return pp.CompileIntoType (); #endif }
public static IHttpHandler GetCompiledPageInstance (string virtualPath, string inputFile, HttpContext context) { #if NET_2_0 bool isFake = false; if (!String.IsNullOrEmpty (inputFile)) isFake = !inputFile.StartsWith (HttpRuntime.AppDomainAppPath); return BuildManager.CreateInstanceFromVirtualPath (new VirtualPath (virtualPath, inputFile, isFake), typeof (IHttpHandler)) as IHttpHandler; #else PageParser pp = new PageParser (virtualPath, inputFile, context); IHttpHandler h = (IHttpHandler) pp.GetCompiledInstance (); return h; #endif }
private static Control[] ParseControlsInternalHelper(DesignTimeParseData data, bool returnFirst) { TemplateParser parser = new PageParser(); parser.FInDesigner = true; parser.DesignerHost = data.DesignerHost; parser.DesignTimeDataBindHandler = data.DataBindingHandler; parser.Text = data.ParseText; parser.Parse(); ArrayList parsedControls = new ArrayList(); ArrayList subBuilders = parser.RootBuilder.SubBuilders; if (subBuilders != null) { // Look for the first control builder IEnumerator en = subBuilders.GetEnumerator(); for (int i = 0; en.MoveNext(); i++) { object cur = en.Current; if ((cur is ControlBuilder) && !(cur is CodeBlockBuilder)) { // Instantiate the control ControlBuilder controlBuilder = (ControlBuilder)cur; System.Diagnostics.Debug.Assert(controlBuilder.CurrentFilterResolutionService == null); IServiceProvider builderServiceProvider = null; // If there's a designer host, use it as the service provider if (data.DesignerHost != null) { builderServiceProvider = data.DesignerHost; } // If it doesn't exist, use a default ---- filter resolution service else { ServiceContainer serviceContainer = new ServiceContainer(); serviceContainer.AddService(typeof(IFilterResolutionService), new SimpleDesignTimeFilterResolutionService(data.Filter)); builderServiceProvider = serviceContainer; } controlBuilder.SetServiceProvider(builderServiceProvider); try { Control control = (Control)controlBuilder.BuildObject(data.ShouldApplyTheme); parsedControls.Add(control); } finally { controlBuilder.SetServiceProvider(null); } if (returnFirst) { break; } } // To preserve backwards compatibility, we don't add LiteralControls // to the control collection when parsing for a single control else if (!returnFirst && (cur is string)) { LiteralControl literalControl = new LiteralControl(cur.ToString()); parsedControls.Add(literalControl); } } } data.SetUserControlRegisterEntries(parser.UserControlRegisterEntries, parser.TagRegisterEntries); return((Control[])parsedControls.ToArray(typeof(Control))); }