2005-05-13 Peter Bartok <pbartok@novell.com>
authorPeter Dennis Bartok <pbartok@mono-cvs.ximian.com>
Fri, 13 May 2005 08:49:08 +0000 (08:49 -0000)
committerPeter Dennis Bartok <pbartok@mono-cvs.ximian.com>
Fri, 13 May 2005 08:49:08 +0000 (08:49 -0000)
* ResXResourceWriter.cs:
  - Fixed/Improved AddResource(), now only uses string converter if
    the converter supports both directions
  - Added ability for AddResource(string, object) to detect if
    a byte[] converter is supported for the object, if so it now calls
    AddResource(string, byte[]) for those
  - WriteBytes: Changed to write it's base64 output as pretty
    as Microsoft's, inserting newlines every 80 chars
  - WriteBytes: Added output of mimetype even if type is specified

svn path=/trunk/mcs/; revision=44488

mcs/class/Managed.Windows.Forms/System.Resources/ChangeLog
mcs/class/Managed.Windows.Forms/System.Resources/ResXResourceWriter.cs

index 1b3153ac1fcd93235d425948dbb8513663a220ac..5240ac199c4fdc32d6682b6160beea9969ada57d 100644 (file)
@@ -1,3 +1,15 @@
+2005-05-13  Peter Bartok  <pbartok@novell.com>
+
+       * ResXResourceWriter.cs: 
+         - Fixed/Improved AddResource(), now only uses string converter if 
+           the converter supports both directions
+         - Added ability for AddResource(string, object) to detect if
+           a byte[] converter is supported for the object, if so it now calls
+           AddResource(string, byte[]) for those
+         - WriteBytes: Changed to write it's base64 output as pretty 
+           as Microsoft's, inserting newlines every 80 chars
+         - WriteBytes: Added output of mimetype even if type is specified
+
 2005-05-11  Peter Bartok  <pbartok@novell.com>
 
        * ResXResourceSet.cs: Implemented
index 38e73fd02c786d05e5f3a7e8a7936eaf6365de3d..496cb67d9c88c7c0c337a57aaf32036f70f3f8a0 100755 (executable)
@@ -116,19 +116,45 @@ namespace System.Resources
                        writer.WriteEndElement ();
                }
 
+               void WriteNiceBase64(byte[] value, int offset, int length) {
+                       string          b64;
+                       StringBuilder   sb;
+                       int             pos;
+                       int             inc;
+                       string          ins;
+
+                       b64 = Convert.ToBase64String(value, offset, length);
+
+                       // Wild guess; two extra newlines, and one newline/tab pair for every 80 chars
+                       sb = new StringBuilder(b64, b64.Length + ((b64.Length + 160) / 80) * 3);
+                       pos = 0;
+                       inc = 80 + Environment.NewLine.Length + 1;
+                       ins = Environment.NewLine + "\t";
+                       while (pos < sb.Length) {
+                               sb.Insert(pos, ins);
+                               pos += inc;
+                       }
+                       sb.Insert(sb.Length, Environment.NewLine);
+                       writer.WriteString(sb.ToString());
+               }
+
                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);
+                               writer.WriteAttributeString ("mimetype", "application/x-microsoft.net.object.bytearray.base64");
+                               writer.WriteStartElement ("value");
+                               WriteNiceBase64(value, offset, length);
                        } else {
                                writer.WriteAttributeString ("mimetype",
                                                "application/x-microsoft.net.object.binary.base64");
+                               writer.WriteStartElement ("value");
+                               writer.WriteBase64 (value, offset, length);
                        }
 
-                       writer.WriteStartElement ("value");
-                       writer.WriteBase64 (value, offset, length);
                        writer.WriteEndElement ();
                        writer.WriteEndElement ();
                }
@@ -181,12 +207,18 @@ namespace System.Resources
                                InitWriter ();
 
                        TypeConverter converter = TypeDescriptor.GetConverter (value);
-                       if (converter != null && converter.CanConvertTo (typeof (string))) {
+                       if (converter != null && converter.CanConvertTo (typeof (string)) && converter.CanConvertFrom (typeof (string))) {
                                string str = (string) converter.ConvertTo (value, typeof (string));
                                WriteString (name, str);
                                return;
                        }
                        
+                       if (converter != null && converter.CanConvertTo (typeof (byte[])) && converter.CanConvertFrom (typeof (byte[]))) {
+                               byte[] b = (byte[]) converter.ConvertTo (value, typeof (byte[]));
+                               WriteBytes (name, value.GetType().AssemblyQualifiedName, b);
+                               return;
+                       }
+                       
                        MemoryStream ms = new MemoryStream ();
                        BinaryFormatter fmt = new BinaryFormatter ();
                        try {