2004-01-07 Atsushi Enomoto <atsushi@ximian.com>
authorAtsushi Eno <atsushieno@gmail.com>
Wed, 7 Jan 2004 12:26:28 +0000 (12:26 -0000)
committerAtsushi Eno <atsushieno@gmail.com>
Wed, 7 Jan 2004 12:26:28 +0000 (12:26 -0000)
* XmlAttribute.cs, XmlDocument.cs, XmlElement.cs :
  set_Prefix should atomize to name table.
  Avoided extraneous atomization attempt a bit.

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

mcs/class/System.XML/System.Xml/ChangeLog
mcs/class/System.XML/System.Xml/XmlAttribute.cs
mcs/class/System.XML/System.Xml/XmlDocument.cs
mcs/class/System.XML/System.Xml/XmlElement.cs

index 10620d7a08d181c9a1d594c82282eaae1cb0314c..87a08fca9c91e837b4c9588faa8343b8dee9b065 100644 (file)
@@ -1,3 +1,9 @@
+2004-01-07  Atsushi Enomoto  <atsushi@ximian.com>
+
+       * XmlAttribute.cs, XmlDocument.cs, XmlElement.cs :
+         set_Prefix should atomize to name table.
+         Avoided extraneous atomization attempt a bit.
+
 2004-01-07  Atsushi Enomoto  <atsushi@ximian.com>
 
        * DTDObjectModel.cs, DTDReader.cs, XmlSecureResolver.cs :
index dd1906646d9b278cd2f1f8e51aab21b5e123807f..e590040b04338a95a627640d02e0c9a654b6e642 100644 (file)
@@ -34,7 +34,8 @@ namespace System.Xml
                        string prefix, 
                        string localName, 
                        string namespaceURI,
-                       XmlDocument doc) : base (doc)
+                       XmlDocument doc,
+                       bool atomizedNames) : base (doc)
                {
                        if (prefix == null)
                                prefix = String.Empty;
@@ -56,9 +57,15 @@ namespace System.Xml
                        else if (!XmlChar.IsName (localName))
                                throw new ArgumentException ("Invalid attribute local name.");
 
-                       this.prefix = doc.NameTable.Add (prefix);
-                       this.localName = doc.NameTable.Add (localName);
-                       this.namespaceURI = doc.NameTable.Add (namespaceURI);
+                       if (atomizedNames) {
+                               this.prefix = prefix;
+                               this.localName = localName;
+                               this.namespaceURI = namespaceURI;
+                       } else {
+                               this.prefix = doc.NameTable.Add (prefix);
+                               this.localName = doc.NameTable.Add (localName);
+                               this.namespaceURI = doc.NameTable.Add (namespaceURI);
+                       }
                }
 
                #endregion
@@ -164,7 +171,7 @@ namespace System.Xml
                                if (prefix == "xmlns" && value != "xmlns")
                                        throw new ArgumentException ("Cannot bind to the reserved namespace.");
 
-                               prefix = value;
+                               prefix = OwnerDocument.NameTable.Add (value);
                        }
                        
                        get {
@@ -214,7 +221,7 @@ namespace System.Xml
                public override XmlNode CloneNode (bool deep)
                {
                        XmlNode node = new XmlAttribute (prefix, localName, namespaceURI,
-                                                        OwnerDocument);
+                                                        OwnerDocument, true);
                        if (deep) {
                                foreach (XmlNode child in this.ChildNodes)
                                        node.AppendChild (child.CloneNode (deep));
index 0a46b79370d75a7c4b6060c0a4856ad7975ee1a7..313a5ea59c7bc875ccd3e7ade6ec78aeff226a1c 100644 (file)
@@ -257,7 +257,7 @@ namespace System.Xml
                        if ((localName == null) || (localName == String.Empty))
                                throw new ArgumentException ("The attribute local name cannot be empty.");
 
-                       return new XmlAttribute (prefix, localName, namespaceURI, this);
+                       return new XmlAttribute (prefix, localName, namespaceURI, this, false);
                }
 
                public virtual XmlCDataSection CreateCDataSection (string data)
@@ -322,7 +322,7 @@ namespace System.Xml
                        // I leave it as it is.
                        if (!XmlChar.IsName (localName))
                                throw new ArgumentException ("Invalid name.", "localName");
-                       return new XmlElement (prefix != null ? prefix : String.Empty, localName, namespaceURI != null ? namespaceURI : String.Empty, this);
+                       return new XmlElement (prefix != null ? prefix : String.Empty, localName, namespaceURI != null ? namespaceURI : String.Empty, this, false);
                }
 
                public virtual XmlEntityReference CreateEntityReference (string name)
index 2b4e6ef288a9376e713a130647f65e7e5f0cde77..18d6f9716cf7d8f225616aab3b86ee96fc173ff6 100644 (file)
@@ -36,11 +36,18 @@ namespace System.Xml
                        string prefix, 
                        string localName, 
                        string namespaceURI, 
-                       XmlDocument doc) : base (doc)
+                       XmlDocument doc,
+                       bool atomizedNames) : base (doc)
                {
-                       this.prefix = doc.NameTable.Add (prefix);
-                       this.localName = doc.NameTable.Add (localName);
-                       this.namespaceURI = doc.NameTable.Add (namespaceURI);
+                       if (atomizedNames) {
+                               this.prefix = prefix;
+                               this.localName = localName;
+                               this.namespaceURI = namespaceURI;
+                       } else {
+                               this.prefix = doc.NameTable.Add (prefix);
+                               this.localName = doc.NameTable.Add (localName);
+                               this.namespaceURI = doc.NameTable.Add (namespaceURI);
+                       }
 
                        attributes = new XmlAttributeCollection (this);
 
@@ -177,7 +184,7 @@ namespace System.Xml
                                if (!XmlChar.IsNCName (value))
                                        throw new ArgumentException ("Specified name is not a valid NCName: " + value);
 
-                               prefix = value;
+                               prefix = OwnerDocument.NameTable.Add (value);
                        }
                }
 
@@ -188,7 +195,7 @@ namespace System.Xml
                public override XmlNode CloneNode (bool deep)
                {
                        XmlElement node = new XmlElement (
-                               prefix, localName, namespaceURI, OwnerDocument);
+                               prefix, localName, namespaceURI, OwnerDocument, true);
 
                        for (int i = 0; i < Attributes.Count; i++)
                                node.SetAttributeNode ((XmlAttribute) 
@@ -329,7 +336,7 @@ namespace System.Xml
                public virtual XmlAttribute SetAttributeNode (string localName, string namespaceURI)
                {
                        XmlDocument xmlDoc = this.OwnerDocument;
-                       XmlAttribute xmlAttribute = new XmlAttribute (String.Empty, localName, namespaceURI, xmlDoc);
+                       XmlAttribute xmlAttribute = new XmlAttribute (String.Empty, localName, namespaceURI, xmlDoc, false);
                        return this.attributes.Append (xmlAttribute);
                }