public void AddMetadata()

in tools/simpleresgen/mono/ResXResourceWriter.cs [501:593]


		public void AddMetadata (string name, object value)
		{
			if (value is string) {
				AddMetadata (name, (string)value);
				return;
			}

			if (value is byte[]) {
				AddMetadata (name, (byte[])value);
				return;
			}

			if (name == null)
				throw new ArgumentNullException ("name");

			if (value == null)
				throw new ArgumentNullException ("value");

			if (!value.GetType ().IsSerializable)
				throw new InvalidOperationException (String.Format ("The element '{0}' of type '{1}' is not serializable.", name, value.GetType ().Name));

			if (written)
				throw new InvalidOperationException ("The resource is already generated.");

			if (writer == null)
				InitWriter ();

			Type type = value.GetType ();
			
			TypeConverter converter = TypeDescriptor.GetConverter (value);
			if (converter != null && converter.CanConvertTo (typeof (string)) && converter.CanConvertFrom (typeof (string))) {
				string str = (string)converter.ConvertToInvariantString (value);
				writer.WriteStartElement ("metadata");
				writer.WriteAttributeString ("name", name);
				if (type != null)
					writer.WriteAttributeString ("type", type.AssemblyQualifiedName);
				writer.WriteStartElement ("value");
				writer.WriteString (str);
				writer.WriteEndElement ();
				writer.WriteEndElement ();
				writer.WriteWhitespace ("\n  ");
				return;
			}

			if (converter != null && converter.CanConvertTo (typeof (byte[])) && converter.CanConvertFrom (typeof (byte[]))) {
				byte[] b = (byte[])converter.ConvertTo (value, typeof (byte[]));
				writer.WriteStartElement ("metadata");
				writer.WriteAttributeString ("name", name);

				if (type != null) {
					writer.WriteAttributeString ("type", type.AssemblyQualifiedName);
					writer.WriteAttributeString ("mimetype", ByteArraySerializedObjectMimeType);
					writer.WriteStartElement ("value");
					WriteNiceBase64 (b, 0, b.Length);
				} else {
					writer.WriteAttributeString ("mimetype", BinSerializedObjectMimeType);
					writer.WriteStartElement ("value");
					writer.WriteBase64 (b, 0, b.Length);
				}

				writer.WriteEndElement ();
				writer.WriteEndElement ();
				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);
			}

			writer.WriteStartElement ("metadata");
			writer.WriteAttributeString ("name", name);

			if (type != null) {
				writer.WriteAttributeString ("type", type.AssemblyQualifiedName);
				writer.WriteAttributeString ("mimetype", ByteArraySerializedObjectMimeType);
				writer.WriteStartElement ("value");
				WriteNiceBase64 (ms.GetBuffer (), 0, ms.GetBuffer ().Length);
			} else {
				writer.WriteAttributeString ("mimetype", BinSerializedObjectMimeType);
				writer.WriteStartElement ("value");
				writer.WriteBase64 (ms.GetBuffer (), 0, ms.GetBuffer ().Length);
			}

			writer.WriteEndElement ();
			writer.WriteEndElement ();
			ms.Close ();
		}