2 // System.Web.Configuration.GlobalizationConfigurationHandler
5 // Gonzalo Paniagua Javier (gonzalo@ximian.com)
7 // (C) 2003 Ximian, Inc (http://www.ximian.com)
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:
19 // The above copyright notice and this permission notice shall be
20 // included in all copies or substantial portions of the Software.
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.
31 using System
.Configuration
;
32 using System
.Globalization
;
36 namespace System
.Web
.Configuration
38 class GlobalizationConfigurationHandler
: IConfigurationSectionHandler
40 static bool encoding_warning
;
41 static bool culture_warning
;
43 public object Create (object parent
, object configContext
, XmlNode section
)
45 GlobalizationConfiguration config
= new GlobalizationConfiguration (parent
);
47 if (section
.HasChildNodes
)
48 ThrowException ("No child nodes allowed here.", section
);
50 string attvalue
= AttValue ("requestEncoding", section
, true);
52 config
.RequestEncoding
= Encoding
.Default
;
54 config
.RequestEncoding
= GetEncoding (section
, "requestEncoding", attvalue
);
56 attvalue
= AttValue ("responseEncoding", section
, true);
58 config
.ResponseEncoding
= Encoding
.Default
;
60 config
.ResponseEncoding
= GetEncoding (section
, "responseEncoding", attvalue
);
62 attvalue
= AttValue ("fileEncoding", section
, true);
64 config
.FileEncoding
= Encoding
.Default
;
66 config
.FileEncoding
= GetEncoding (section
, "fileEncoding", attvalue
);
68 attvalue
= AttValue ("culture", section
, true);
70 config
.Culture
= GetCulture (section
, "culture", attvalue
);
72 attvalue
= AttValue ("uiculture", section
, true);
74 config
.UICulture
= GetCulture (section
, "uiculture", attvalue
);
76 if (section
.Attributes
== null || section
.Attributes
.Count
!= 0)
77 ThrowException ("Unknown attribute(s).", section
);
82 static Encoding
GetEncoding (XmlNode section
, string att
, string enc
)
84 Encoding encoding
= null;
86 switch (enc
.ToLower ()) {
91 case "iso-10646-ucs-2":
92 encoding
= new UnicodeEncoding (false, true);
96 encoding
= new UnicodeEncoding (true, true);
99 case "unicode-1-1-utf-8":
100 case "unicode-2-0-utf-8":
101 case "x-unicode-1-1-utf-8":
102 case "x-unicode-2-0-utf-8":
103 encoding
= new UTF8Encoding (false, false);
106 encoding
= Encoding
.GetEncoding (enc
);
110 EncodingFailed (section
, att
, enc
);
111 encoding
= new UTF8Encoding (false, false);
117 static CultureInfo
GetCulture (XmlNode section
, string att
, string cul
)
119 CultureInfo culture
= null;
121 culture
= new CultureInfo (cul
);
123 CultureFailed (section
, att
, cul
);
124 culture
= new CultureInfo (0x007f); // Invariant
130 static void EncodingFailed (XmlNode section
, string att
, string enc
)
132 if (encoding_warning
)
135 encoding_warning
= true;
136 Console
.WriteLine ("Encoding {1} cannot be loaded. Perhaps your runtime \n" +
137 "don't have ICU support?\n{0}=\"{1}\"\n", att
, enc
);
140 static void CultureFailed (XmlNode section
, string att
, string cul
)
145 culture_warning
= true;
146 Console
.WriteLine ("Culture {1} cannot be loaded. Perhaps your runtime \n" +
147 "don't have ICU support?\n{0}=\"{1}\"\n", att
, cul
);
150 // A few methods to save some typing
151 static string AttValue (string name
, XmlNode node
, bool optional
)
153 return HandlersUtil
.ExtractAttributeValue (name
, node
, optional
);
156 static string AttValue (string name
, XmlNode node
)
158 return HandlersUtil
.ExtractAttributeValue (name
, node
, true);
161 static void ThrowException (string message
, XmlNode node
)
163 HandlersUtil
.ThrowException (message
, node
);