Răsfoiți Sursa

2003-08-18 Ben Maurer <[email protected]>

	* XslOutput.cs: add support for encoding.
	* ManagedXslTransform.cs, XslTransformImpl.cs: Add support for
	encoding.

svn path=/trunk/mcs/; revision=17395
Ben Maurer 22 ani în urmă
părinte
comite
014b09acff

+ 4 - 0
mcs/class/System.XML/Mono.Xml.Xsl/ChangeLog

@@ -1,3 +1,7 @@
+2003-08-18 Ben Maurer  <[email protected]>
+
+	* XslOutput.cs: add support for encoding.
+
 2003-08-18 Ben Maurer  <[email protected]>
 
 	* *.cs: Support for xsl:output. (Oleg)

+ 5 - 4
mcs/class/System.XML/Mono.Xml.Xsl/XslOutput.cs

@@ -17,7 +17,8 @@ using System.Collections;
 using System.Xml;
 using System.Xml.Schema;
 using System.Xml.XPath;
-using System.Xml.Xsl;
+using System.Xml.Xsl;
+using System.Text;
 
 namespace Mono.Xml.Xsl
 {
@@ -36,7 +37,7 @@ namespace Mono.Xml.Xsl
 		QName customMethod;
 		OutputMethod method = OutputMethod.XML; 
 		string version;
-		string encoding;
+		Encoding encoding = System.Text.Encoding.UTF8;
 		bool omitXmlDeclaration;
 		string standalone;
 		string doctypePublic;
@@ -65,7 +66,7 @@ namespace Mono.Xml.Xsl
 			get { return version; }
 		}
 
-		public string Encoding {
+		public Encoding Encoding {
 			get { return encoding; }
 		}
 
@@ -166,7 +167,7 @@ namespace Mono.Xml.Xsl
 
 			att = nav.GetAttribute ("encoding", "");
 			if (att != String.Empty)
-				this.encoding = att;
+				this.encoding = System.Text.Encoding.GetEncoding (att);
 
 			att = nav.GetAttribute ("standalone", "");
 			if (att != String.Empty)

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

@@ -1,3 +1,8 @@
+2003-08-18 Ben Maurer  <[email protected]>
+
+	* ManagedXslTransform.cs, XslTransformImpl.cs: Add support for
+	encoding.
+
 2003-08-18 Ben Maurer  <[email protected]>
 
 	* *.cs: Support for xsl:output. (Oleg)

+ 15 - 2
mcs/class/System.XML/System.Xml.Xsl/ManagedXslTransform.cs

@@ -43,12 +43,16 @@ namespace System.Xml.Xsl {
 			XslOutput xslOutput = (XslOutput)s.Style.Outputs[String.Empty];
 			if (xslOutput == null) {
 				//No xsl:output - subject to output method autodetection, XML for a while
-				Transform(input, args, new XmlTextWriter(output), resolver);
+				XmlWriter w = new XmlTextWriter(output);
+				Transform(input, args, w, resolver);
+				w.Close ();
 				return;
 			}				
 			switch (xslOutput.Method) {
 				case OutputMethod.XML:
-					Transform(input, args, new XmlTextWriter(output), resolver);
+					XmlWriter w = new XmlTextWriter(output);
+					Transform(input, args, w, resolver);
+					w.Close ();
 					break;
 				case OutputMethod.HTML:
 					throw new NotImplementedException("HTML output method is not implemented yet.");
@@ -59,5 +63,14 @@ namespace System.Xml.Xsl {
 					throw new NotImplementedException("Custom output method is not implemented yet.");
 			}
 		}
+		
+		public override void Transform (XPathNavigator input, XsltArgumentList args, Stream output, XmlResolver resolver)
+		{
+			XslOutput xslOutput = (XslOutput)s.Style.Outputs[String.Empty];
+			if (xslOutput == null)
+				Transform (input, args, new StreamWriter (output), resolver);
+			else
+				Transform (input, args, new StreamWriter (output, xslOutput.Encoding), resolver);
+		}
 	}
 }

+ 6 - 3
mcs/class/System.XML/System.Xml.Xsl/XslTransformImpl.cs

@@ -31,13 +31,16 @@ namespace System.Xml.Xsl {
 		public abstract void Load (XPathNavigator stylesheet, XmlResolver resolver, Evidence evidence);	
 
 		public abstract void Transform (XPathNavigator input, XsltArgumentList args, XmlWriter output, XmlResolver resolver);
-
 		public abstract void Transform (XPathNavigator input, XsltArgumentList args, TextWriter output, XmlResolver resolver);
+		public virtual void Transform (XPathNavigator input, XsltArgumentList args, Stream output, XmlResolver resolver)
+		{
+			Transform (input, args, new StreamWriter (output), resolver);
+		}
 
 		public virtual void Transform (string inputfile, string outputfile, XmlResolver resolver)
 		{
-			using (StreamWriter w = new StreamWriter (outputfile)) {
-				Transform(new XPathDocument (inputfile).CreateNavigator (), null, w, resolver);
+			using (Stream s =  new FileStream (outputfile, FileMode.Create, FileAccess.ReadWrite)) {
+				Transform(new XPathDocument (inputfile).CreateNavigator (), null, s, resolver);
 			}
 		}
 	}