Normalize line endings.
[mono.git] / mcs / class / System.Web / System.Web.UI / UserControlParser.cs
1 //
2 // System.Web.UI.UserControlParser
3 //
4 // Authors:
5 //      Gonzalo Paniagua Javier (gonzalo@ximian.com)
6 //
7 // (C) 2002,2003 Ximian, Inc (http://www.ximian.com)
8 //
9
10 //
11 // Permission is hereby granted, free of charge, to any person obtaining
12 // a copy of this software and associated documentation files (the
13 // "Software"), to deal in the Software without restriction, including
14 // without limitation the rights to use, copy, modify, merge, publish,
15 // distribute, sublicense, and/or sell copies of the Software, and to
16 // permit persons to whom the Software is furnished to do so, subject to
17 // the following conditions:
18 // 
19 // The above copyright notice and this permission notice shall be
20 // included in all copies or substantial portions of the Software.
21 // 
22 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
23 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
25 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
26 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
27 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
28 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 //
30 using System;
31 using System.Collections;
32 using System.IO;
33 using System.Web;
34 using System.Web.Compilation;
35 using System.Web.Util;
36
37 namespace System.Web.UI
38 {
39         internal class UserControlParser : TemplateControlParser
40         {
41                 string masterPage;
42
43
44                 internal UserControlParser (VirtualPath virtualPath, string inputFile, HttpContext context)
45                         : this (virtualPath, inputFile, context, null)
46                 {
47                 }
48
49                 internal UserControlParser (VirtualPath virtualPath, string inputFile, ArrayList deps, HttpContext context)
50                         : this (virtualPath, inputFile, context, null)
51                 {
52                         this.Dependencies = deps;
53                 }
54
55                 internal UserControlParser (VirtualPath virtualPath, string inputFile, HttpContext context, string type)
56                 {
57                         VirtualPath = virtualPath;
58                         Context = context;
59                         BaseVirtualDir = virtualPath.DirectoryNoNormalize;
60                         InputFile = inputFile;
61                         SetBaseType (type);
62                         AddApplicationAssembly ();
63                         LoadConfigDefaults ();
64                 }
65
66                 internal UserControlParser (VirtualPath virtualPath, TextReader reader, HttpContext context)
67                         : this (virtualPath, null, reader, context)
68                 {
69                 }
70                 
71                 internal UserControlParser (VirtualPath virtualPath, string inputFile, TextReader reader, HttpContext context)
72                 {
73                         VirtualPath = virtualPath;
74                         Context = context;
75                         BaseVirtualDir = virtualPath.DirectoryNoNormalize;
76                         
77                         if (String.IsNullOrEmpty (inputFile))
78                                 InputFile = virtualPath.PhysicalPath;
79                         else
80                                 InputFile = inputFile;
81                         
82                         Reader = reader;
83                         SetBaseType (null);
84                         AddApplicationAssembly ();
85                         LoadConfigDefaults ();
86                 }
87
88                 internal UserControlParser (TextReader reader, int? uniqueSuffix, HttpContext context)
89                 {
90                         Context = context;
91
92                         string fpath = context.Request.FilePath;
93                         VirtualPath = new VirtualPath (fpath);
94                         BaseVirtualDir = VirtualPathUtility.GetDirectory (fpath, false);
95
96                         // We're probably being called by ParseControl - let's use the requested
97                         // control's path plus unique suffix as our input file, since that's the
98                         // context we're being invoked from.
99                         InputFile = VirtualPathUtility.GetFileName (fpath) + "#" + (uniqueSuffix != null ? ((int)uniqueSuffix).ToString ("x") : "0");
100                         Reader = reader;
101                         SetBaseType (null);
102                         AddApplicationAssembly ();
103                         LoadConfigDefaults ();
104                 }               
105
106                 internal static Type GetCompiledType (TextReader reader, int? inputHashCode, HttpContext context)
107                 {
108                         UserControlParser ucp = new UserControlParser (reader, inputHashCode, context);
109                         return ucp.CompileIntoType ();
110                 }
111                 
112                 internal static Type GetCompiledType (string virtualPath, string inputFile, ArrayList deps, HttpContext context)
113                 {
114                         UserControlParser ucp = new UserControlParser (new VirtualPath (virtualPath), inputFile, deps, context);
115
116                         return ucp.CompileIntoType ();
117                 }
118
119                 public static Type GetCompiledType (string virtualPath, string inputFile, HttpContext context)
120                 {
121                         UserControlParser ucp = new UserControlParser (new VirtualPath (virtualPath), inputFile, context);
122
123                         return ucp.CompileIntoType ();
124                 }
125
126                 protected override Type CompileIntoType ()
127                 {
128                         AspGenerator generator = new AspGenerator (this);
129                         return generator.GetCompiledType ();
130                 }
131
132                 internal override void ProcessMainAttributes (IDictionary atts)
133                 {
134                         masterPage = GetString (atts, "MasterPageFile", null);
135                         if (masterPage != null)
136                                 AddDependency (masterPage);
137
138                         base.ProcessMainAttributes (atts);
139                 }
140
141                 internal override string DefaultBaseTypeName {
142                         get { return PagesConfig.UserControlBaseType; }
143                 }
144
145                 internal override string DefaultDirectiveName {
146                         get { return "control"; }
147                 }
148
149                 internal string MasterPageFile {
150                         get { return masterPage; }
151                 }
152         }
153 }
154