Ver código fonte

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

	* XmlWriter.cs, XmlTextWriter.cs, XmlWriterSettings.cs :
	  Implemented CheckCharacters and CloseOutput support.

svn path=/trunk/mcs/; revision=33563
Atsushi Eno 21 anos atrás
pai
commit
616dba98f5

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

@@ -1,3 +1,8 @@
+2004-09-08  Atsushi Enomoto  <[email protected]>
+
+	* XmlWriter.cs, XmlTextWriter.cs, XmlWriterSettings.cs :
+	  Implemented CheckCharacters and CloseOutput support.
+
 2004-09-08  Atsushi Enomoto  <[email protected]>
 
 	* XmlReader.cs : evidence is always provided.

+ 18 - 7
mcs/class/System.XML/System.Xml/XmlTextWriter.cs

@@ -37,7 +37,7 @@ using System.Text;
 
 namespace System.Xml
 {
-	[MonoTODO ("CheckCharacters; NormalizeNewLines")]
+	[MonoTODO ("NormalizeNewLines")]
 	public class XmlTextWriter : XmlWriter
 	{
 		#region Fields
@@ -81,6 +81,7 @@ namespace System.Xml
 		bool shouldCheckElementXmlns;
 
 		// XmlWriterSettings support
+		bool checkCharacters;
 		bool closeOutput;
 		bool newLineOnAttributes;
 		string newLineChars;
@@ -173,6 +174,11 @@ openElements [openElementCount - 1]).IndentingOverriden;
 		}
 
 #if NET_2_0
+		internal bool CheckCharacters {
+			get { return checkCharacters; }
+			set { checkCharacters = value; }
+		}
+
 		internal bool CloseOutput {
 //			get { return closeOutput; }
 			set { closeOutput = value; }
@@ -360,8 +366,10 @@ openElements [openElementCount - 1]).IndentingOverriden;
 		{
 			CloseOpenAttributeAndElements ();
 
-			if (closeOutput)
-				w.Close();
+			w.Flush ();
+			if (closeOutput) {
+				w.Close ();
+			}
 			ws = WriteState.Closed;
 			openWriter = false;
 		}
@@ -964,6 +972,8 @@ openElements [openElementCount - 1]).IndentingOverriden;
 					pos = 6; break;
 				default:
 					if (XmlChar.IsInvalid (source [i])) {
+						if (checkCharacters)
+							throw new ArgumentException (String.Format ("Character hexadecimal value {0:4x} is invalid.", (int) source [i]));
 						invalid = source [i];
 						pos = -1;
 						break;
@@ -976,10 +986,11 @@ openElements [openElementCount - 1]).IndentingOverriden;
 				cachedStringBuilder.Append (source.Substring (start, i - start));
 				if (pos < 0) {
 					cachedStringBuilder.Append ("&#x");
-					if (invalid < (char) 255)
-						cachedStringBuilder.Append (((int) invalid).ToString ("X02", CultureInfo.InvariantCulture));
-					else
-						cachedStringBuilder.Append (((int) invalid).ToString ("X04", CultureInfo.InvariantCulture));
+//					if (invalid < (char) 255)
+//						cachedStringBuilder.Append (((int) invalid).ToString ("X02", CultureInfo.InvariantCulture));
+//					else
+//						cachedStringBuilder.Append (((int) invalid).ToString ("X04", CultureInfo.InvariantCulture));
+					cachedStringBuilder.Append (((int) invalid).ToString ("X", CultureInfo.InvariantCulture));
 					cachedStringBuilder.Append (";");
 				}
 				else

+ 2 - 1
mcs/class/System.XML/System.Xml/XmlWriter.cs

@@ -142,7 +142,6 @@ namespace System.Xml
 		{
 			if (settings == null)
 				settings = new XmlWriterSettings ();
-//			throw new NotImplementedException ();
 			writer.settings = settings;
 			return writer;
 		}
@@ -167,6 +166,8 @@ namespace System.Xml
 			xtw.ConformanceLevel = settings.ConformanceLevel;
 			// OmitXmlDeclaration
 			xtw.OmitXmlDeclaration = settings.OmitXmlDeclaration;
+			// CheckCharacters
+			xtw.CheckCharacters = settings.CheckCharacters;
 			return Create (xtw, settings);
 		}
 

+ 2 - 0
mcs/class/System.XML/System.Xml/XmlWriterSettings.cs

@@ -37,6 +37,8 @@ using System.Xml.Schema;
 
 namespace System.Xml
 {
+	// FIXME: this class SHOULD have QuoteChar property
+	// (feedback has done against Microsoft).
 	public sealed class XmlWriterSettings : ICloneable
 	{
 		private bool checkCharacters;