System.Web.UI.PageParser.ProcessMainAttributes C# (CSharp) Method

ProcessMainAttributes() private method

private ProcessMainAttributes ( IDictionary atts ) : void
atts IDictionary
return void
		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)) {
					value = System.Web.VirtualPathUtility.Combine(BaseVirtualDir, 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 ("EnableViewStateMac")) {
				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);
		}