+2004-05-11 Gonzalo Paniagua Javier <gonzalo@ximian.com>
+
+ * System.Resources/ResXResourceWriter.cs: implemented.
+
2004-03-15 Andreas Nahr <ClassDevelopment@A-SoftTech.com>
* System.Windows.Forms.dll.sources: Added files
-2004-01-22 Gonzalo Paniagua Javier <gonzalo@ximian.com>\r
-\r
- * System.Resources/ResXResourceReader.cs: read empty tags properly.\r
- Fixes bug #53174. Patch by Tomasz Kaszuba.\r
-\r
-2003-08-31 Jerome Laban <jlaban@wanadoo.fr>\r
- * Label.cs: Fixed Text property not redrawing the label correctly.\r
-\r
-2003-08-31 Jerome Laban <jlaban@wanadoo.fr>\r
- * win32functions.cs: Added GetUpdateRect function. \r
- * Control.cs: Make sure to call OnPaint even if UserPaint style is not\r
- enabled. Get the appropriate DC for WM_PAINT operations.\r
-\r
-2003-07-16 Peter Williams <peter@newton.cx>\r
-\r
- * System.Windows.Forms.dll.sources: Don't build with two\r
- AssemblyInfo.cs files.\r
-\r
-2003-07-07 Martin Willemoes Hansen <mwh@sysrq.dk>\r
-\r
- * System.Windows.Forms.Design/AnchorEditor.cs\r
- System.Windows.Forms.Design/AxImporter.cs\r
- System.Windows.Forms.Design/ComponentDocumentDesigner.cs\r
- System.Windows.Forms.Design/ComponentTray.cs\r
- System.Windows.Forms.Design/ControlDesigner.cs\r
- System.Windows.Forms.Design/DocumentDesigner.cs\r
- System.Windows.Forms.Design/FileNameEditor.cs\r
- System.Windows.Forms.Design/IMenuEditorService.cs\r
- System.Windows.Forms.Design/MenusCommands.cs\r
- System.Windows.Forms.Design/ParentControlDesigner.cs\r
- System.Windows.Forms.Design/ScrollableControlDesigner.cs\r
- System.Windows.Forms.Design/SelectionRules.cs: Moved to System.Design assembly\r
- \r
-2003-05-31 Paolo Molaro <lupus@ximian.com>\r
-\r
- * System.Resources/ResXResourceReader.cs: get simple reading and error\r
- checks working.\r
-\r
-2003-03-31 Alan Tam <Tam@SiuLung.com>\r
-\r
- * UITypeEditor.cs: Removed.\r
-\r
-2003-03-29 Martin Willemoes Hansen <mwh@sysrq.dk>\r
- * Added stub for System.Windows.Forms/IWindowsFormsEditorService.cs\r
-\r
-2003-02-07 Alexandre Pigokine <pigolkine@gmx.de>\r
- * list.unix removed System.Windows.Forms\Font.cs\r
-\r
-2003-01-31 John Sohn <jsohn@columbus.rr.com>\r
- * README: updated for latest WineLib and Mono\r
-\r
-2003-01-15 Duncan Mak <duncan@ximian.com>\r
-\r
- * Make it not spam all those warnings. Blocking errors 0108 and also\r
- 0114.\r
-\r
-2002-12-10 Jeroen Janssen <japj@darius.demon.nl>\r
- \r
- * added ChangeLog\r
- * fixed MonoTodo compile errors with csc\r
+2004-01-22 Gonzalo Paniagua Javier <gonzalo@ximian.com>
+
+ * System.Resources/ResXResourceReader.cs: read empty tags properly.
+ Fixes bug #53174. Patch by Tomasz Kaszuba.
+
+2003-08-31 Jerome Laban <jlaban@wanadoo.fr>
+ * Label.cs: Fixed Text property not redrawing the label correctly.
+
+2003-08-31 Jerome Laban <jlaban@wanadoo.fr>
+ * win32functions.cs: Added GetUpdateRect function.
+ * Control.cs: Make sure to call OnPaint even if UserPaint style is not
+ enabled. Get the appropriate DC for WM_PAINT operations.
+
+2003-07-16 Peter Williams <peter@newton.cx>
+
+ * System.Windows.Forms.dll.sources: Don't build with two
+ AssemblyInfo.cs files.
+
+2003-07-07 Martin Willemoes Hansen <mwh@sysrq.dk>
+
+ * System.Windows.Forms.Design/AnchorEditor.cs
+ System.Windows.Forms.Design/AxImporter.cs
+ System.Windows.Forms.Design/ComponentDocumentDesigner.cs
+ System.Windows.Forms.Design/ComponentTray.cs
+ System.Windows.Forms.Design/ControlDesigner.cs
+ System.Windows.Forms.Design/DocumentDesigner.cs
+ System.Windows.Forms.Design/FileNameEditor.cs
+ System.Windows.Forms.Design/IMenuEditorService.cs
+ System.Windows.Forms.Design/MenusCommands.cs
+ System.Windows.Forms.Design/ParentControlDesigner.cs
+ System.Windows.Forms.Design/ScrollableControlDesigner.cs
+ System.Windows.Forms.Design/SelectionRules.cs: Moved to System.Design assembly
+
+2003-05-31 Paolo Molaro <lupus@ximian.com>
+
+ * System.Resources/ResXResourceReader.cs: get simple reading and error
+ checks working.
+
+2003-03-31 Alan Tam <Tam@SiuLung.com>
+
+ * UITypeEditor.cs: Removed.
+
+2003-03-29 Martin Willemoes Hansen <mwh@sysrq.dk>
+ * Added stub for System.Windows.Forms/IWindowsFormsEditorService.cs
+
+2003-02-07 Alexandre Pigokine <pigolkine@gmx.de>
+ * list.unix removed System.Windows.Forms\Font.cs
+
+2003-01-31 John Sohn <jsohn@columbus.rr.com>
+ * README: updated for latest WineLib and Mono
+
+2003-01-15 Duncan Mak <duncan@ximian.com>
+
+ * Make it not spam all those warnings. Blocking errors 0108 and also
+ 0114.
+
+2002-12-10 Jeroen Janssen <japj@darius.demon.nl>
+
+ * added ChangeLog
+ * fixed MonoTodo compile errors with csc
//
// System.Resources.ResXResourceWriter.cs
//
-// Author:
+// Authors:
// Duncan Mak <duncan@ximian.com>
+// Gonzalo Paniagua Javier (gonzalo@ximian.com)
//
// 2001 (C) Ximian, Inc. http://www.ximian.com
+// (c) 2004 Novell, Inc. (http://www.novell.com)
//
+using System.ComponentModel;
using System.IO;
+using System.Runtime.Serialization.Formatters.Binary;
+using System.Text;
+using System.Xml;
namespace System.Resources
{
- public sealed class ResXResourceWriter : IResourceWriter
+ public sealed class ResXResourceWriter : IResourceWriter, IDisposable
{
- [MonoTODO]
+ string filename;
+ Stream stream;
+ TextWriter textwriter;
+ XmlTextWriter writer;
+ bool written;
+
public ResXResourceWriter (Stream stream)
{
if (stream == null)
- throw new ArgumentNullException ("stream is null");
+ throw new ArgumentNullException ("stream");
+
if (stream.CanWrite == false)
- throw new ArgumentException ("stream is not writable.");
+ throw new ArgumentException ("stream is not writable.", "stream");
+
+ this.stream = stream;
+ }
+
+ public ResXResourceWriter (TextWriter textwriter)
+ {
+ if (textwriter == null)
+ throw new ArgumentNullException ("textwriter");
+
+ this.textwriter = textwriter;
}
- [MonoTODO]
- public ResXResourceWriter (String fileName)
+ public ResXResourceWriter (string fileName)
{
if (fileName == null)
- throw new ArgumentNullException ("fileName is null.");
+ throw new ArgumentNullException ("fileName");
+
+ this.filename = fileName;
}
- [MonoTODO]
- public void AddResource (string name, byte[] value)
+ void InitWriter ()
{
- if (name == null || value == null)
- throw new ArgumentNullException ("Parameter is a null reference.");
+ if (filename != null) {
+ stream = File.OpenWrite (filename);
+ textwriter = new StreamWriter (stream, Encoding.UTF8);
+ }
+
+ writer = new XmlTextWriter (textwriter);
+ writer.Formatting = Formatting.Indented;
+ writer.WriteStartDocument ();
+ writer.WriteStartElement ("root");
+ writer.WriteRaw (schema);
+ WriteHeader ("resmimetype", "text/microsoft-resx");
+ WriteHeader ("version", "1.3");
+ WriteHeader ("reader", typeof (ResXResourceReader).AssemblyQualifiedName);
+ WriteHeader ("writer", typeof (ResXResourceWriter).AssemblyQualifiedName);
}
-
- [MonoTODO]
+
+ void WriteHeader (string name, string value)
+ {
+ writer.WriteStartElement ("resheader");
+ writer.WriteAttributeString ("name", name);
+ writer.WriteStartElement ("value");
+ writer.WriteString (value);
+ writer.WriteEndElement ();
+ writer.WriteEndElement ();
+ }
+
+ void WriteBytes (string name, string typename, byte [] value, int offset, int length)
+ {
+ writer.WriteStartElement ("data");
+ writer.WriteAttributeString ("name", name);
+ if (typename != null) {
+ writer.WriteAttributeString ("type", typename);
+ } else {
+ writer.WriteAttributeString ("mimetype",
+ "application/x-microsoft.net.object.binary.base64");
+ }
+
+ writer.WriteStartElement ("value");
+ writer.WriteBase64 (value, offset, length);
+ writer.WriteEndElement ();
+ writer.WriteEndElement ();
+ }
+
+ void WriteBytes (string name, string typename, byte [] value)
+ {
+ WriteBytes (name, typename, value, 0, value.Length);
+ }
+
+ void WriteString (string name, string value)
+ {
+ writer.WriteStartElement ("data");
+ writer.WriteAttributeString ("name", name);
+ writer.WriteStartElement ("value");
+ writer.WriteString (value);
+ writer.WriteEndElement ();
+ writer.WriteEndElement ();
+ writer.WriteWhitespace ("\n ");
+ }
+
+ public void AddResource (string name, byte [] value)
+ {
+ if (name == null)
+ throw new ArgumentNullException ("name");
+
+ if (value == null)
+ throw new ArgumentNullException ("value");
+
+ if (written)
+ throw new InvalidOperationException ("The resource is already generated.");
+
+ if (writer == null)
+ InitWriter ();
+
+ WriteBytes (name, value.GetType ().AssemblyQualifiedName, value);
+ }
+
public void AddResource (string name, object value)
- {
- if (name == null || value == null)
- throw new ArgumentNullException ("Parameter is a null reference.");
+ {
+ if (name == null)
+ throw new ArgumentNullException ("name");
+
+ if (value == null)
+ throw new ArgumentNullException ("value");
+
+ if (written)
+ throw new InvalidOperationException ("The resource is already generated.");
+
+ if (writer == null)
+ InitWriter ();
+
+ TypeConverter converter = TypeDescriptor.GetConverter (value);
+ if (converter != null && converter.CanConvertTo (typeof (string))) {
+ string str = (string) converter.ConvertTo (value, typeof (string));
+ WriteString (name, str);
+ return;
+ }
+
+ MemoryStream ms = new MemoryStream ();
+ BinaryFormatter fmt = new BinaryFormatter ();
+ try {
+ fmt.Serialize (ms, value);
+ } catch (Exception e) {
+ throw new InvalidOperationException ("Cannot add a " + value.GetType () +
+ "because it cannot be serialized: " +
+ e.Message);
+ }
+
+ WriteBytes (name, null, ms.GetBuffer (), 0, (int) ms.Length);
+ ms.Close ();
}
- [MonoTODO]
public void AddResource (string name, string value)
{
- if (name == null || value == null)
- throw new ArgumentNullException ("Parameter is a null reference.");
+ if (name == null)
+ throw new ArgumentNullException ("name");
+
+ if (value == null)
+ throw new ArgumentNullException ("value");
+
+ if (written)
+ throw new InvalidOperationException ("The resource is already generated.");
+
+ if (writer == null)
+ InitWriter ();
+
+ WriteString (name, value);
}
- [MonoTODO]
- public void Close () {}
+ public void Close ()
+ {
+ if (!written) {
+ Generate ();
+ }
+
+ if (writer != null) {
+ writer.Close ();
+ stream = null;
+ filename = null;
+ textwriter = null;
+ }
+ }
public void Dispose ()
{
- Close();
+ Close ();
+ }
+
+ public void Generate ()
+ {
+ if (written)
+ throw new InvalidOperationException ("The resource is already generated.");
+
+ written = true;
+ writer.WriteEndElement ();
+ writer.Flush ();
}
- [MonoTODO]
- public void Generate () {}
+ static string schema = @"
+ <xsd:schema id='root' xmlns='' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:msdata='urn:schemas-microsoft-com:xml-msdata'>
+ <xsd:element name='root' msdata:IsDataSet='true'>
+ <xsd:complexType>
+ <xsd:choice maxOccurs='unbounded'>
+ <xsd:element name='data'>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name='value' type='xsd:string' minOccurs='0' msdata:Ordinal='1' />
+ <xsd:element name='comment' type='xsd:string' minOccurs='0' msdata:Ordinal='2' />
+ </xsd:sequence>
+ <xsd:attribute name='name' type='xsd:string' msdata:Ordinal='1' />
+ <xsd:attribute name='type' type='xsd:string' msdata:Ordinal='3' />
+ <xsd:attribute name='mimetype' type='xsd:string' msdata:Ordinal='4' />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name='resheader'>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name='value' type='xsd:string' minOccurs='0' msdata:Ordinal='1' />
+ </xsd:sequence>
+ <xsd:attribute name='name' type='xsd:string' use='required' />
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:choice>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:schema>
+".Replace ("'", "\"");
}
}
+