Ejemplo n.º 1
0
        void AssignPropertyWithExpression <T> (CodeMemberMethod method, string name, MainDirectiveAttribute <T> value, ILocation location)
        {
            if (value == null)
            {
                return;
            }
            CodeAssignStatement assign;
            CodeExpression      rhs = null;

            if (value.IsExpression)
            {
                var pi = GetFieldOrProperty(typeof(Page), name) as PropertyInfo;
                if (pi != null)
                {
                    rhs = CompileExpression(pi, pi.PropertyType, value.UnparsedValue, false);
                }
            }

            if (rhs != null)
            {
                assign = CreatePropertyAssign(thisRef, name, rhs);
            }
            else
            {
                assign = CreatePropertyAssign(name, value.Value);
            }

            method.Statements.Add(AddLinePragma(assign, location));
        }
Ejemplo n.º 2
0
        protected override void CreateConstructor(CodeStatementCollection localVars,
                                                  CodeStatementCollection trueStmt)
        {
            MainDirectiveAttribute <string> masterPageFile = pageParser.MasterPageFile;

            if (masterPageFile != null && !masterPageFile.IsExpression)
            {
                // This is here just to trigger master page build, so that its type
                // is available when compiling the page itself.
                BuildManager.GetCompiledType(masterPageFile.Value);
            }

            MainDirectiveAttribute <string> clientTarget;

            clientTarget = pageParser.ClientTarget;
            if (clientTarget != null)
            {
                CodeExpression prop;
                prop = new CodePropertyReferenceExpression(thisRef, "ClientTarget");
                CodeExpression ct = null;

                if (clientTarget.IsExpression)
                {
                    var pi = GetFieldOrProperty(typeof(Page), "ClientTarget") as PropertyInfo;
                    if (pi != null)
                    {
                        ct = CompileExpression(pi, pi.PropertyType, clientTarget.UnparsedValue, false);
                    }
                }

                if (ct == null)
                {
                    ct = new CodePrimitiveExpression(clientTarget.Value);
                }
                if (localVars == null)
                {
                    localVars = new CodeStatementCollection();
                }
                localVars.Add(new CodeAssignStatement(prop, ct));
            }

            List <string> deps      = pageParser.Dependencies;
            int           depsCount = deps != null ? deps.Count : 0;

            if (depsCount > 0)
            {
                if (localVars == null)
                {
                    localVars = new CodeStatementCollection();
                }
                if (trueStmt == null)
                {
                    trueStmt = new CodeStatementCollection();
                }

                CodeAssignStatement assign;
                localVars.Add(
                    new CodeVariableDeclarationStatement(
                        typeof(string[]),
                        "dependencies")
                    );

                CodeVariableReferenceExpression dependencies = new CodeVariableReferenceExpression("dependencies");
                trueStmt.Add(
                    new CodeAssignStatement(dependencies, new CodeArrayCreateExpression(typeof(string), depsCount))
                    );

                CodeArrayIndexerExpression arrayIndex;
                object o;

                for (int i = 0; i < depsCount; i++)
                {
                    o          = deps [i];
                    arrayIndex = new CodeArrayIndexerExpression(dependencies, new CodeExpression[] { new CodePrimitiveExpression(i) });
                    assign     = new CodeAssignStatement(arrayIndex, new CodePrimitiveExpression(o));
                    trueStmt.Add(assign);
                }

                CodeMethodInvokeExpression getDepsCall = new CodeMethodInvokeExpression(
                    thisRef,
                    "GetWrappedFileDependencies",
                    new CodeExpression[] { dependencies }
                    );
                assign = new CodeAssignStatement(GetMainClassFieldReferenceExpression("__fileDependencies"), getDepsCall);

                trueStmt.Add(assign);
            }

            base.CreateConstructor(localVars, trueStmt);
        }
Ejemplo n.º 3
0
		internal override void LoadConfigDefaults ()
		{
			base.LoadConfigDefaults ();
			PagesSection ps = PagesConfig;

			notBuffer = !ps.Buffer;
			enableSessionState = ps.EnableSessionState;
			enableViewStateMac = ps.EnableViewStateMac;
			smartNavigation = ps.SmartNavigation;
			validateRequest = ps.ValidateRequest;

			string value = ps.MasterPageFile;
			if (value.Length > 0)
				masterPage = new MainDirectiveAttribute <string> (value, true);
			
			enable_event_validation = ps.EnableEventValidation;
			maxPageStateFieldLength = ps.MaxPageStateFieldLength;
			value = ps.Theme;
			if (value.Length > 0)
				theme = new MainDirectiveAttribute <string> (value, true);
			
			styleSheetTheme = ps.StyleSheetTheme;
			if (styleSheetTheme.Length == 0)
				styleSheetTheme = null;
			maintainScrollPositionOnPostBack = ps.MaintainScrollPositionOnPostBack;
		}
Ejemplo n.º 4
0
		internal override void ProcessMainAttributes (IDictionary atts)
		{
			// note: the 'enableSessionState' configuration property is
			// processed in a case-sensitive manner while the page-level
			// attribute is processed case-insensitive
			string enabless = GetString (atts, "EnableSessionState", null);
			if (enabless != null) {
				if (String.Compare (enabless, "readonly", true, Helpers.InvariantCulture) == 0)
					enableSessionState = PagesEnableSessionState.ReadOnly;
				else if (String.Compare (enabless, "true", true, Helpers.InvariantCulture) == 0)
					enableSessionState = PagesEnableSessionState.True;
				else if (String.Compare (enabless, "false", true, Helpers.InvariantCulture) == 0)
					enableSessionState = PagesEnableSessionState.False;
				else
					ThrowParseException ("Invalid value for enableSessionState: " + enabless);
			}

			string value = GetString (atts, "CodePage", null);
			if (value != null) {
				if (responseEncoding != null)
					ThrowParseException ("CodePage and ResponseEncoding are mutually exclusive.");
				
				if (!BaseParser.IsExpression (value)) {
					int cpval = -1;

					try {
						cpval = (int) UInt32.Parse (value);
					} catch {
						ThrowParseException ("Invalid value for CodePage: " + value);
					}

					try {
						Encoding.GetEncoding (cpval);
					} catch {
						ThrowParseException ("Unsupported codepage: " + value);
					}
					codepage = new MainDirectiveAttribute <int> (cpval, true);
				} else
					codepage = new MainDirectiveAttribute <int> (value);
			}
			
			value = GetString (atts, "ResponseEncoding", null);
			if (value != null) {
				if (codepage != null)
					ThrowParseException ("CodePage and ResponseEncoding are mutually exclusive.");

				if (!BaseParser.IsExpression (value)) {
					try {
						Encoding.GetEncoding (value);
					} catch {
						ThrowParseException ("Unsupported encoding: " + value);
					}
					responseEncoding = new MainDirectiveAttribute <string> (value, true);
				} else
					responseEncoding = new MainDirectiveAttribute <string> (value);
			}
			
			contentType = GetString (atts, "ContentType", null);

			value = GetString (atts, "LCID", null);
			if (value != null) {
				if (!BaseParser.IsExpression (value)) {
					int parsedLcid = -1;
					try {
						parsedLcid = (int) UInt32.Parse (value);
					} catch {
						ThrowParseException ("Invalid value for LCID: " + value);
					}

					CultureInfo ci = null;
					try {
						ci = new CultureInfo (parsedLcid);
					} catch {
						ThrowParseException ("Unsupported LCID: " + value);
					}

					if (ci.IsNeutralCulture) {
						string suggestedCulture = SuggestCulture (ci.Name);
						string fmt = "LCID attribute must be set to a non-neutral Culture.";
						if (suggestedCulture != null) {
							ThrowParseException (fmt + " Please try one of these: " +
									     suggestedCulture);
						} else {
							ThrowParseException (fmt);
						}
					}
					lcid = new MainDirectiveAttribute <int> (parsedLcid, true);
				} else
					lcid = new MainDirectiveAttribute <int> (value);
			}

			culture = GetString (atts, "Culture", null);
			if (culture != null) {
				if (lcid != null) 
					ThrowParseException ("Culture and LCID are mutually exclusive.");
				
				CultureInfo ci = null;
				try {
					if (!culture.StartsWith ("auto"))
						ci = new CultureInfo (culture);
				} catch {
					ThrowParseException ("Unsupported Culture: " + culture);
				}

				if (ci != null && ci.IsNeutralCulture) {
					string suggestedCulture = SuggestCulture (culture);
					string fmt = "Culture attribute must be set to a non-neutral Culture.";
					if (suggestedCulture != null)
						ThrowParseException (fmt +
								" Please try one of these: " + suggestedCulture);
					else
						ThrowParseException (fmt);
				}
			}

			uiculture = GetString (atts, "UICulture", null);
			if (uiculture != null) {
				CultureInfo ci = null;
				try {
					if (!uiculture.StartsWith ("auto"))
						ci = new CultureInfo (uiculture);
				} catch {
					ThrowParseException ("Unsupported Culture: " + uiculture);
				}

				if (ci != null && ci.IsNeutralCulture) {
					string suggestedCulture = SuggestCulture (uiculture);
					string fmt = "UICulture attribute must be set to a non-neutral Culture.";
					if (suggestedCulture != null)
						ThrowParseException (fmt +
								" Please try one of these: " + suggestedCulture);
					else
						ThrowParseException (fmt);
				}
			}

			string tracestr = GetString (atts, "Trace", null);
			if (tracestr != null) {
				haveTrace = true;
				atts ["Trace"] = tracestr;
				trace = GetBool (atts, "Trace", false);
			}

			string tracemodes = GetString (atts, "TraceMode", null);
			if (tracemodes != null) {
				bool valid = true;
				try {
					tracemode = (TraceMode) Enum.Parse (typeof (TraceMode), tracemodes, false);
				} catch {
					valid = false;
				}

				if (!valid || tracemode == TraceMode.Default)
					ThrowParseException ("The 'tracemode' attribute is case sensitive and must be " +
							"one of the following values: SortByTime, SortByCategory.");
			}

			errorPage = GetString (atts, "ErrorPage", null);
			validateRequest = GetBool (atts, "ValidateRequest", validateRequest);
			value = GetString (atts, "ClientTarget", null);
			if (value != null) {				
				if (!BaseParser.IsExpression (value)) {
					value = value.Trim ();
					
					ClientTargetSection sec = GetConfigSection <ClientTargetSection> ("system.web/clientTarget");
					ClientTarget ct = null;
				
					if ((ct = sec.ClientTargets [value]) == null)
						value = value.ToLowerInvariant ();
				
					if (ct == null && (ct = sec.ClientTargets [value]) == null) {
						ThrowParseException (String.Format (
									     "ClientTarget '{0}' is an invalid alias. See the " +
									     "documentation for <clientTarget> config. section.",
									     clientTarget));
					}
					value = ct.UserAgent;
					clientTarget = new MainDirectiveAttribute <string> (value, true);
				} else
					clientTarget = new MainDirectiveAttribute <string> (value);
			}

			notBuffer = !GetBool (atts, "Buffer", true);
			async = GetBool (atts, "Async", false);
			string asyncTimeoutVal = GetString (atts, "AsyncTimeout", null);
			if (asyncTimeoutVal != null) {
				try {
					asyncTimeout = Int32.Parse (asyncTimeoutVal);
				} catch (Exception) {
					ThrowParseException ("AsyncTimeout must be an integer value");
				}
			}
			
			value = GetString (atts, "MasterPageFile", masterPage != null ? masterPage.Value : null);
			if (!String.IsNullOrEmpty (value)) {
				if (!BaseParser.IsExpression (value)) {
					if (!HostingEnvironment.VirtualPathProvider.FileExists (value))
						ThrowParseFileNotFound (value);
					AddDependency (value);
					masterPage = new MainDirectiveAttribute <string> (value, true);
				} else
					masterPage = new MainDirectiveAttribute <string> (value);
			}
			
			value = GetString(atts, "Title", null);
			if (value != null) {
				if (!BaseParser.IsExpression (value))
					title = new MainDirectiveAttribute <string> (value, true);
				else
					title = new MainDirectiveAttribute <string> (value);
			}
			
			value = GetString (atts, "Theme", theme != null ? theme.Value : null);
			if (value != null) {
				if (!BaseParser.IsExpression (value))
					theme = new MainDirectiveAttribute <string> (value, true);
				else
					theme = new MainDirectiveAttribute <string> (value);
			}
			
			styleSheetTheme = GetString (atts, "StyleSheetTheme", styleSheetTheme);
			enable_event_validation = GetBool (atts, "EnableEventValidation", enable_event_validation);
			maintainScrollPositionOnPostBack = GetBool (atts, "MaintainScrollPositionOnPostBack", maintainScrollPositionOnPostBack);

			if (atts.Contains ("EnableViewState")) {
				enableViewStateMac = GetBool (atts, "EnableViewStateMac", enableViewStateMac);
				enableViewStateMacSet = true;
			}
#if NET_4_0
			value = GetString (atts, "MetaDescription", null);
			if (value != null) {
				if (!BaseParser.IsExpression (value))
					metaDescription = new MainDirectiveAttribute <string> (value, true);
				else
					metaDescription = new MainDirectiveAttribute <string> (value);
			}

			value = GetString (atts, "MetaKeywords", null);
			if (value != null) {
				if (!BaseParser.IsExpression (value))
					metaKeywords = new MainDirectiveAttribute <string> (value, true);
				else
					metaKeywords = new MainDirectiveAttribute <string> (value);
			}
#endif
			// Ignored by now
			GetString (atts, "SmartNavigation", null);

			base.ProcessMainAttributes (atts);
		}
Ejemplo n.º 5
0
 void AssignPropertyWithExpression <T> (CodeMemberMethod method, string name, MainDirectiveAttribute <T> value, ILocation location)