Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGonzalo Paniagua Javier <gonzalo.mono@gmail.com>2002-09-19 11:11:24 +0400
committerGonzalo Paniagua Javier <gonzalo.mono@gmail.com>2002-09-19 11:11:24 +0400
commit7faec3f1be8ec3d6698184058749d35f9dc44927 (patch)
tree0e46cb1fd9316f153c764580f830b8d79c8a4b60 /mcs/class/System.XML/System.Xml
parentf6e3aaa0b10e3cae2f45c4647a3d5d88c883c14c (diff)
2002-09-19 Gonzalo Paniagua Javier <gonzalo@ximian.com>
* XmlConvert.cs: finished implementation. svn path=/trunk/mcs/; revision=7610
Diffstat (limited to 'mcs/class/System.XML/System.Xml')
-rw-r--r--mcs/class/System.XML/System.Xml/ChangeLog4
-rwxr-xr-xmcs/class/System.XML/System.Xml/XmlConvert.cs111
2 files changed, 97 insertions, 18 deletions
diff --git a/mcs/class/System.XML/System.Xml/ChangeLog b/mcs/class/System.XML/System.Xml/ChangeLog
index c67cefbff75..e95ae501341 100644
--- a/mcs/class/System.XML/System.Xml/ChangeLog
+++ b/mcs/class/System.XML/System.Xml/ChangeLog
@@ -1,3 +1,7 @@
+2002-09-19 Gonzalo Paniagua Javier <gonzalo@ximian.com>
+
+ * XmlConvert.cs: finished implementation.
+
2002-09-15 Gonzalo Paniagua Javier <gonzalo@ximian.com>
* XmlTextReader.cs: line and position begin with 1.
diff --git a/mcs/class/System.XML/System.Xml/XmlConvert.cs b/mcs/class/System.XML/System.Xml/XmlConvert.cs
index 5c3e278b9b4..cc078e21fdc 100755
--- a/mcs/class/System.XML/System.Xml/XmlConvert.cs
+++ b/mcs/class/System.XML/System.Xml/XmlConvert.cs
@@ -1,37 +1,111 @@
-// Author: Dwivedi, Ajay kumar
-// Adwiv@Yahoo.com
-// XmlConvert.cs: Xml data type conversion
-//
+//
+// System.Xml.XmlConvert
+//
+// Authors:
+// Dwivedi, Ajay kumar (Adwiv@Yahoo.com)
+// Gonzalo Paniagua Javier (gonzalo@ximian.com)
+//
+// (C) 2002 Ximian, Inc (http://www.ximian.com)
+//
using System;
+using System.Text;
using System.Globalization;
namespace System.Xml {
public class XmlConvert {
+ static string encodedColon = "_x003A_";
+
public XmlConvert()
{}
- // Methods
- [MonoTODO]
- public static string DecodeName(string name)
+ private static string TryDecoding (string s)
+ {
+ if (s == null || s.Length < 6)
+ return s;
+
+ char c = '\uFFFF';
+ try {
+ c = (char) Int32.Parse (s.Substring (1, 4), NumberStyles.HexNumber);
+ } catch {
+ return s [0] + DecodeName (s.Substring (1));
+ }
+
+ if (s.Length == 6)
+ return c.ToString ();
+ return c + DecodeName (s.Substring (6));
+ }
+
+ public static string DecodeName (string name)
+ {
+ if (name == null || name.Length == 0)
+ return name;
+
+ int pos = name.IndexOf ('_');
+ if (pos == -1 || pos + 6 >= name.Length)
+ return name;
+
+ if (Char.ToUpper (name [pos + 1]) != 'X' || name [pos + 6] != '_')
+ return name [0] + DecodeName (name.Substring (1));
+
+ return name.Substring (0, pos) + TryDecoding (name.Substring (pos + 1));
+ }
+
+ public static string EncodeLocalName (string name)
{
- return null;
+ string encoded = EncodeName (name);
+ int pos = encoded.IndexOf (':');
+ if (pos == -1)
+ return encoded;
+ return encoded.Replace (":", encodedColon);
}
- [MonoTODO]
- public static string EncodeLocalName(string name)
+
+ private static bool IsInvalid (char c, bool firstOnlyLetter)
{
- return null;
+ if (c == ':') // Special case. allowed in EncodeName, but encoded in EncodeLocalName
+ return false;
+
+ if (firstOnlyLetter && !Char.IsLetter (c) && c != '_')
+ return false;
+
+ return !Char.IsLetterOrDigit (c);
+ }
+
+ private static string EncodeName (string name, bool nmtoken)
+ {
+ StringBuilder sb = new StringBuilder ();
+ int length = name.Length;
+ for (int i = 0; i < length; i++) {
+ char c = name [i];
+ if (c != '_' || i + 6 >= length) {
+ bool firstOnlyLetter = (i == 0 && !nmtoken);
+ if (IsInvalid (c, firstOnlyLetter)) {
+ sb.AppendFormat ("_x{0:X4}_", (int) c);
+ continue;
+ }
+ } else {
+ if (Char.ToUpper (name [i + 1]) == 'X' && name [i + 6] == '_') {
+ string decoded = TryDecoding (name.Substring (i + 1, 6));
+ if (decoded.Length == 1) {
+ sb.AppendFormat ("_x{0:X4}_", (int) c);
+ continue;
+ }
+ }
+ }
+ sb.Append (c);
+ }
+ return sb.ToString ();
}
- [MonoTODO]
- public static string EncodeName(string name)
+
+ public static string EncodeName (string name)
{
- return null;
+ return EncodeName (name, false);
}
- [MonoTODO]
+
public static string EncodeNmToken(string name)
{
- return null;
+ return EncodeName (name, true);
}
// {true, false, 1, 0}
@@ -75,10 +149,11 @@ namespace System.Xml {
return DateTime.Parse(s, d);
}
- [MonoTODO]
public static DateTime ToDateTime(string s, string[] formats)
{
- return DateTime.Parse(s);
+ DateTimeStyles style = DateTimeStyles.AllowLeadingWhite |
+ DateTimeStyles.AllowTrailingWhite;
+ return DateTime.ParseExact (s, formats, DateTimeFormatInfo.InvariantInfo, style);
}
public static Decimal ToDecimal(string s)