ソースを参照

2004-09-07 Atsushi Enomoto <[email protected]>

	* XmlReader.cs, XmlTextReader.cs :
	  Added NET_2_0 CheckCharacters support.

svn path=/trunk/mcs/; revision=33475
Atsushi Eno 21 年 前
コミット
e8a49299fd

+ 5 - 0
mcs/class/System.XML/System.Xml/ChangeLog

@@ -1,3 +1,8 @@
+2004-09-07  Atsushi Enomoto  <[email protected]>
+
+	* XmlReader.cs, XmlTextReader.cs :
+	  Added NET_2_0 CheckCharacters support.
+
 2004-09-06  Atsushi Enomoto  <[email protected]>
 2004-09-06  Atsushi Enomoto  <[email protected]>
 
 
 	* XmlNode.cs : GetEnumerator() does not have to create ChildNodes
 	* XmlNode.cs : GetEnumerator() does not have to create ChildNodes

+ 16 - 7
mcs/class/System.XML/System.Xml/XmlReader.cs

@@ -204,41 +204,50 @@ namespace System.Xml
 			return Create (reader, new XmlUrlResolver (), settings);
 			return Create (reader, new XmlUrlResolver (), settings);
 		}
 		}
 
 
-		[MonoTODO ("CheckCharacters, ConformanceLevel, IgnoreSchemaXXX etc.")]
+		[MonoTODO ("ConformanceLevel, IgnoreSchemaXXX etc.")]
 		public static XmlReader Create (XmlReader reader, XmlResolver resolver, XmlReaderSettings settings)
 		public static XmlReader Create (XmlReader reader, XmlResolver resolver, XmlReaderSettings settings)
 		{
 		{
 			return CreateFilteredXmlReader (reader, resolver, settings);
 			return CreateFilteredXmlReader (reader, resolver, settings);
 		}
 		}
 
 
-		[MonoTODO ("CheckCharacters, ConformanceLevel, IgnoreSchemaXXX etc.; Encoding")]
+		[MonoTODO ("ConformanceLevel, IgnoreSchemaXXX etc.; Encoding")]
 		public static XmlReader Create (string url, Encoding encoding, XmlResolver resolver, XmlReaderSettings settings)
 		public static XmlReader Create (string url, Encoding encoding, XmlResolver resolver, XmlReaderSettings settings)
 		{
 		{
 			return CreateCustomizedTextReader (new XmlTextReader (url), resolver, settings);
 			return CreateCustomizedTextReader (new XmlTextReader (url), resolver, settings);
 		}
 		}
 
 
-		[MonoTODO ("CheckCharacters, ConformanceLevel, IgnoreSchemaXXX etc.")]
+		[MonoTODO ("ConformanceLevel, IgnoreSchemaXXX etc.")]
 		public static XmlReader Create (TextReader reader, string baseUri, XmlResolver resolver, XmlReaderSettings settings)
 		public static XmlReader Create (TextReader reader, string baseUri, XmlResolver resolver, XmlReaderSettings settings)
 		{
 		{
 			return CreateCustomizedTextReader (new XmlTextReader (baseUri, reader), resolver, settings);
 			return CreateCustomizedTextReader (new XmlTextReader (baseUri, reader), resolver, settings);
 		}
 		}
 
 
-		[MonoTODO ("CheckCharacters, ConformanceLevel, IgnoreSchemaXXX etc.")]
+		[MonoTODO ("ConformanceLevel, IgnoreSchemaXXX etc.")]
 		public static XmlReader Create (Stream stream, string baseUri, Encoding encoding, XmlResolver resolver, XmlReaderSettings settings)
 		public static XmlReader Create (Stream stream, string baseUri, Encoding encoding, XmlResolver resolver, XmlReaderSettings settings)
 		{
 		{
-			return CreateCustomizedTextReader (encoding == null ? new XmlTextReader (baseUri, stream) : new XmlTextReader (baseUri, new StreamReader (stream, encoding)), resolver, settings);
+			return CreateCustomizedTextReader (
+				encoding == null ?
+					new XmlTextReader (baseUri, stream) :
+					new XmlTextReader (baseUri, new StreamReader (stream, encoding)),
+				resolver,
+				settings);
 		}
 		}
 
 
 		private static XmlReader CreateCustomizedTextReader (XmlTextReader reader, XmlResolver resolver, XmlReaderSettings settings)
 		private static XmlReader CreateCustomizedTextReader (XmlTextReader reader, XmlResolver resolver, XmlReaderSettings settings)
 		{
 		{
 			reader.XmlResolver = resolver;
 			reader.XmlResolver = resolver;
+			// Normalization is set true by default.
+			reader.Normalization = true;
 
 
 			if (settings == null)
 			if (settings == null)
 				settings = new XmlReaderSettings ();
 				settings = new XmlReaderSettings ();
 
 
 			if (settings.ProhibitDtd)
 			if (settings.ProhibitDtd)
 				reader.ProhibitDtd = true;
 				reader.ProhibitDtd = true;
+
 			if (!settings.CheckCharacters)
 			if (!settings.CheckCharacters)
-				throw new NotImplementedException ();
+				reader.CharacterChecking = false;
+
 			// I guess it might be changed in 2.0 RTM to set true
 			// I guess it might be changed in 2.0 RTM to set true
 			// as default, or just disappear. It goes against
 			// as default, or just disappear. It goes against
 			// XmlTextReader's default usage and users will have 
 			// XmlTextReader's default usage and users will have 
@@ -741,7 +750,7 @@ namespace System.Xml
 		[MonoTODO]
 		[MonoTODO]
 		public virtual object ReadTypedValue ()
 		public virtual object ReadTypedValue ()
 		{
 		{
-			throw new NotImplementedException ();
+			return ReadAsObject (ValueType);
 		}
 		}
 
 
 		[MonoTODO]
 		[MonoTODO]

+ 28 - 16
mcs/class/System.XML/System.Xml/XmlTextReader.cs

@@ -162,8 +162,14 @@ namespace System.Xml
 		public override bool CanResolveEntity {
 		public override bool CanResolveEntity {
 			get { return true; }
 			get { return true; }
 		}
 		}
+
 #endif
 #endif
 
 
+		internal bool CharacterChecking {
+			get { return checkCharacters && normalization; }
+			set { checkCharacters = false; }
+		}
+
 		// for XmlReaderSettings.CloseInput support
 		// for XmlReaderSettings.CloseInput support
 		internal bool CloseInput {
 		internal bool CloseInput {
 			get { return closeInput; }
 			get { return closeInput; }
@@ -1112,6 +1118,7 @@ namespace System.Xml
 		private XmlResolver resolver = new XmlUrlResolver ();
 		private XmlResolver resolver = new XmlUrlResolver ();
 		private bool normalization = false;
 		private bool normalization = false;
 
 
+		private bool checkCharacters;
 		private bool prohibitDtd = false;
 		private bool prohibitDtd = false;
 		private bool closeInput = true;
 		private bool closeInput = true;
 		private EntityHandling entityHandling; // 2.0
 		private EntityHandling entityHandling; // 2.0
@@ -1168,6 +1175,13 @@ namespace System.Xml
 			shouldSkipUntilEndTag = false;
 			shouldSkipUntilEndTag = false;
 			base64CacheStartsAt = -1;
 			base64CacheStartsAt = -1;
 
 
+			checkCharacters = true;
+#if NET_2_0
+if (Settings != null)
+Console.WriteLine ("Settings.CheckCharacters = " + Settings.CheckCharacters);
+			if (Settings != null)
+				checkCharacters = Settings.CheckCharacters;
+#endif
 			prohibitDtd = false;
 			prohibitDtd = false;
 			closeInput = true;
 			closeInput = true;
 			entityHandling = EntityHandling.ExpandCharEntities;
 			entityHandling = EntityHandling.ExpandCharEntities;
@@ -1801,9 +1815,9 @@ namespace System.Xml
 			ReadChar (); // ';'
 			ReadChar (); // ';'
 
 
 			// There is no way to save surrogate pairs...
 			// There is no way to save surrogate pairs...
-			if (normalization && XmlChar.IsInvalid (value))
+			if (CharacterChecking && XmlChar.IsInvalid (value))
 				throw new XmlException (this as IXmlLineInfo,
 				throw new XmlException (this as IXmlLineInfo,
-					"Referenced character was not allowed in XML.");
+					"Referenced character was not allowed in XML. Normalization is " + normalization + ", checkCharacters = " + checkCharacters);
 			return value;
 			return value;
 		}
 		}
 
 
@@ -1966,7 +1980,7 @@ namespace System.Xml
 					if (PeekChar () == '#') {
 					if (PeekChar () == '#') {
 						ReadChar ();
 						ReadChar ();
 						ch = ReadCharacterReference ();
 						ch = ReadCharacterReference ();
-						if (normalization && XmlChar.IsInvalid (ch))
+						if (CharacterChecking && XmlChar.IsInvalid (ch))
 							throw new XmlException (this as IXmlLineInfo,
 							throw new XmlException (this as IXmlLineInfo,
 								"Not allowed character was found.");
 								"Not allowed character was found.");
 						AppendValueChar (ch);
 						AppendValueChar (ch);
@@ -1991,7 +2005,7 @@ namespace System.Xml
 						AppendValueChar (predefined);
 						AppendValueChar (predefined);
 					break;
 					break;
 				default:
 				default:
-					if (normalization && XmlChar.IsInvalid (ch))
+					if (CharacterChecking && XmlChar.IsInvalid (ch))
 						throw new XmlException (this, "Invalid character was found.");
 						throw new XmlException (this, "Invalid character was found.");
 					AppendValueChar (ch);
 					AppendValueChar (ch);
 					break;
 					break;
@@ -2057,7 +2071,7 @@ namespace System.Xml
 					break;
 					break;
 				}
 				}
 
 
-				if (normalization && XmlChar.IsInvalid (ch))
+				if (CharacterChecking && XmlChar.IsInvalid (ch))
 					throw new XmlException (this, "Invalid character was found.");
 					throw new XmlException (this, "Invalid character was found.");
 				AppendValueChar (ch);
 				AppendValueChar (ch);
 			}
 			}
@@ -2302,18 +2316,16 @@ namespace System.Xml
 						skip = true;
 						skip = true;
 					}
 					}
 				}
 				}
-				if (normalization) {
-					if (ch == '\r') {
-						ch = PeekChar ();
-						if (ch != '\n')
-							// append '\n' instead of '\r'.
-							AppendValueChar ('\n');
-						// otherwise, discard '\r'.
-						continue;
-					}
-					else if (XmlChar.IsInvalid (ch))
-						throw new XmlException (this, "Invalid character was found.");
+				if (normalization && ch == '\r') {
+					ch = PeekChar ();
+					if (ch != '\n')
+						// append '\n' instead of '\r'.
+						AppendValueChar ('\n');
+					// otherwise, discard '\r'.
+					continue;
 				}
 				}
+				if (CharacterChecking && XmlChar.IsInvalid (ch))
+					throw new XmlException (this, "Invalid character was found.");
 
 
 				AppendValueChar (ch);
 				AppendValueChar (ch);
 			}
 			}