// (C) 2004 Novell, Inc (http://www.novell.com)
//
+//
+// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
// Note about the ToString()'s. ECMA says there's only a ToString() method,
// BUT it is just a wrapper for ToString(null). However there is no other ToString
// in the docs. Turning to the NET framework sdk reveals that there is a
{
[Serializable]
public struct Char : IComparable, IConvertible
+#if NET_2_0
+ , IComparable <char>
+#endif
{
public const char MaxValue = (char) 0xffff;
public const char MinValue = (char) 0;
internal char m_value;
- static Char () {
+ static Char ()
+ {
unsafe {
- GetDataTablePointers (out category_data, out numeric_data,
- out numeric_data_values,
- out to_lower_data_low, out to_lower_data_high,
- out to_upper_data_low, out to_upper_data_high);
+ GetDataTablePointers (out category_data, out numeric_data, out numeric_data_values,
+ out to_lower_data_low, out to_lower_data_high, out to_upper_data_low, out to_upper_data_high);
}
}
return ((Char) o).m_value == m_value;
}
+#if NET_2_0
+ public int CompareTo (char value)
+ {
+ if (m_value == value)
+ return 0;
+
+ if (m_value > value)
+ return 1;
+ else
+ return -1;
+ }
+
+ public bool Equals (char value)
+ {
+ return m_value == value;
+ }
+#endif
+
public override int GetHashCode ()
{
return m_value;
public static double GetNumericValue (string str, int index)
{
if (str == null)
- throw new ArgumentNullException (Locale.GetText ("str is a null reference"));
+ throw new ArgumentNullException ("str");
if (index < 0 || index >= str.Length)
throw new ArgumentOutOfRangeException (Locale.GetText (
- "The value of index is less than zero, or greater than or equal to the length of str"));
-
+ "The value of index is less than zero, or greater than or equal to the length of str."));
return GetNumericValue (str[index]);
}
public static UnicodeCategory GetUnicodeCategory (string str, int index)
{
if (str == null)
- throw new ArgumentNullException (Locale.GetText ("str is a null reference"));
+ throw new ArgumentNullException ("str");
if (index < 0 || index >= str.Length)
- throw new ArgumentOutOfRangeException (Locale.GetText ("The value of index is less "+
- "than zero, or greater than or equal to the length of str"));
+ throw new ArgumentOutOfRangeException (Locale.GetText (
+ "The value of index is less than zero, or greater than or equal to the length of str."));
return GetUnicodeCategory (str[index]);
}
public static bool IsControl (string str, int index)
{
if (str == null)
- throw new ArgumentNullException (Locale.GetText ("Str is a null reference"));
+ throw new ArgumentNullException ("str");
if (index < 0 || index >= str.Length)
throw new ArgumentOutOfRangeException (Locale.GetText (
- "The value of index is less than zero, or greater than or equal to the length of str"));
+ "The value of index is less than zero, or greater than or equal to the length of str."));
return IsControl (str[index]);
}
public static bool IsDigit (string str, int index)
{
if (str == null)
- throw new ArgumentNullException (Locale.GetText ("Str is a null reference"));
+ throw new ArgumentNullException ("str");
if (index < 0 || index >= str.Length)
throw new ArgumentOutOfRangeException (Locale.GetText (
- "The value of index is less than zero, or greater than or equal to the length of str"));
+ "The value of index is less than zero, or greater than or equal to the length of str."));
return IsDigit (str[index]);
}
public static bool IsLetter (string str, int index)
{
if (str == null)
- throw new ArgumentNullException (Locale.GetText ("str is a null reference"));
+ throw new ArgumentNullException ("str");
if (index < 0 || index >= str.Length)
throw new ArgumentOutOfRangeException (Locale.GetText (
- "The value of index is less than zero, or greater than or equal to the length of str"));
+ "The value of index is less than zero, or greater than or equal to the length of str."));
return IsLetter (str[index]);
}
public static bool IsLetterOrDigit (string str, int index)
{
if (str == null)
- throw new ArgumentNullException (Locale.GetText ("str is a null reference"));
+ throw new ArgumentNullException ("str");
if (index < 0 || index >= str.Length)
throw new ArgumentOutOfRangeException (Locale.GetText (
- "The value of index is less than zero, or greater than or equal to the length of str"));
+ "The value of index is less than zero, or greater than or equal to the length of str."));
return IsLetterOrDigit (str[index]);
}
public static bool IsLower (string str, int index)
{
if (str == null)
- throw new ArgumentNullException (Locale.GetText ("str is a null reference"));
+ throw new ArgumentNullException ("str");
if (index < 0 || index >= str.Length)
throw new ArgumentOutOfRangeException (Locale.GetText (
- "The value of index is less than zero, or greater than or equal to the length of str"));
+ "The value of index is less than zero, or greater than or equal to the length of str."));
return IsLower (str[index]);
}
public static bool IsNumber (string str, int index)
{
if (str == null)
- throw new ArgumentNullException (Locale.GetText ("str is a null reference"));
+ throw new ArgumentNullException ("str");
if (index < 0 || index >= str.Length)
throw new ArgumentOutOfRangeException (Locale.GetText (
- "The value of index is less than zero, or greater than or equal to the length of str"));
+ "The value of index is less than zero, or greater than or equal to the length of str."));
return IsNumber (str[index]);
}
public static bool IsPunctuation (string str, int index)
{
if (str == null)
- throw new ArgumentNullException (Locale.GetText ("str is a null reference"));
+ throw new ArgumentNullException ("str");
if (index < 0 || index >= str.Length)
throw new ArgumentOutOfRangeException (Locale.GetText (
- "The value of index is less than zero, or greater than or equal to the length of str"));
+ "The value of index is less than zero, or greater than or equal to the length of str."));
return IsPunctuation (str[index]);
}
public static bool IsSeparator (string str, int index)
{
if (str == null)
- throw new ArgumentNullException (Locale.GetText ("str is a null reference"));
+ throw new ArgumentNullException ("str");
if (index < 0 || index >= str.Length)
throw new ArgumentOutOfRangeException (Locale.GetText (
- "The value of index is less than zero, or greater than or equal to the length of str"));
+ "The value of index is less than zero, or greater than or equal to the length of str."));
return IsSeparator (str[index]);
}
public static bool IsSurrogate (string str, int index)
{
if (str == null)
- throw new ArgumentNullException (Locale.GetText ("str is a null reference"));
+ throw new ArgumentNullException ("str");
if (index < 0 || index >= str.Length)
throw new ArgumentOutOfRangeException (Locale.GetText (
- "The value of index is less than zero, or greater than or equal to the length of str"));
+ "The value of index is less than zero, or greater than or equal to the length of str."));
return IsSurrogate (str[index]);
}
public static bool IsSymbol (string str, int index)
{
if (str == null)
- throw new ArgumentNullException (Locale.GetText ("str is a null reference"));
+ throw new ArgumentNullException ("str");
if (index < 0 || index >= str.Length)
throw new ArgumentOutOfRangeException (Locale.GetText (
- "The value of index is less than zero, or greater than or equal to the length of str"));
+ "The value of index is less than zero, or greater than or equal to the length of str."));
return IsSymbol (str[index]);
}
public static bool IsUpper (string str, int index)
{
if (str == null)
- throw new ArgumentNullException (Locale.GetText ("str is a null reference"));
+ throw new ArgumentNullException ("str");
if (index < 0 || index >= str.Length)
throw new ArgumentOutOfRangeException (Locale.GetText (
- "The value of index is less than zero, or greater than or equal to the length of str"));
+ "The value of index is less than zero, or greater than or equal to the length of str."));
return IsUpper (str[index]);
}
public static bool IsWhiteSpace (string str, int index)
{
if (str == null)
- throw new ArgumentNullException (Locale.GetText ("str is a null reference"));
+ throw new ArgumentNullException ("str");
if (index < 0 || index >= str.Length)
throw new ArgumentOutOfRangeException (Locale.GetText (
- "The value of index is less than zero, or greater than or equal to the length of str"));
+ "The value of index is less than zero, or greater than or equal to the length of str."));
return IsWhiteSpace (str[index]);
}
public static char Parse (string str)
{
- if (str == null)
- throw new ArgumentNullException (Locale.GetText ("str is a null reference"));
+ if (str == null)
+ throw new ArgumentNullException ("str");
if (str.Length != 1)
throw new FormatException ("string contains more than one character.");
}
public static char ToLower (char c)
+ {
+ return ToLower (c, CultureInfo.CurrentCulture);
+ }
+
+ internal static char ToLowerInvariant (char c)
{
unsafe {
if (c <= ((char)0x24cf))
return (char) to_lower_data_low [c];
- if (c >= ((char)0xff41))
- return (char) to_lower_data_high[c - 0xff41];
+ if (c >= ((char)0xff21))
+ return (char) to_lower_data_high[c - 0xff21];
}
return c;
}
- [MonoTODO]
public static char ToLower (char c, CultureInfo culture)
{
- //TODO ignored culture for now
- return ToLower (c);
+ if (culture == null)
+ throw new ArgumentNullException ("culture");
+ if (culture.LCID == 0x007F) // Invariant
+ return ToLowerInvariant (c);
+
+ return culture.TextInfo.ToLower (c);
}
public static char ToUpper (char c)
+ {
+ return ToUpper (c, CultureInfo.CurrentCulture);
+ }
+
+ internal static char ToUpperInvariant (char c)
{
unsafe {
- if (c <= ((char)0x24cf))
+ if (c <= ((char)0x24e9))
return (char) to_upper_data_low [c];
if (c >= ((char)0xff21))
return (char) to_upper_data_high [c - 0xff21];
return c;
}
- [MonoTODO]
- public static char ToUpper(char c, CultureInfo culture)
+ public static char ToUpper (char c, CultureInfo culture)
{
- //TODO ignored culture for now
- return ToUpper (c);
- }
+ if (culture == null)
+ throw new ArgumentNullException ("culture");
+ if (culture.LCID == 0x007F) // Invariant
+ return ToUpperInvariant (c);
+ return culture.TextInfo.ToUpper (c);
+ }
+
public override string ToString ()
{
// LAMESPEC: ECMA draft lists this as returning ToString (null),
return m_value;
}
- [CLSCompliant(false)]
DateTime IConvertible.ToDateTime (IFormatProvider provider)
{
throw new InvalidCastException();
return System.Convert.ToInt64(m_value);
}
- [CLSCompliant(false)]
sbyte IConvertible.ToSByte (IFormatProvider provider)
{
return System.Convert.ToSByte(m_value);
return ToString(provider);
}
- [CLSCompliant(false)]
ushort IConvertible.ToUInt16 (IFormatProvider provider)
{
return System.Convert.ToUInt16(m_value);
}
- [CLSCompliant(false)]
uint IConvertible.ToUInt32 (IFormatProvider provider)
{
return System.Convert.ToUInt32(m_value);
}
- [CLSCompliant(false)]
ulong IConvertible.ToUInt64 (IFormatProvider provider)
{
return System.Convert.ToUInt64(m_value);