diff java/src/java/lang/Character.d @ 21:9b96950f2c3c

the 'java' tree compiles on both D1-Tango and D2-Phobos
author Frank Benoit <benoit@tionex.de>
date Thu, 19 Mar 2009 20:38:55 +0100
parents 950d84783eac
children
line wrap: on
line diff
--- a/java/src/java/lang/Character.d	Wed Mar 18 12:10:17 2009 +0100
+++ b/java/src/java/lang/Character.d	Thu Mar 19 20:38:55 2009 +0100
@@ -2,7 +2,15 @@
 
 import java.lang.exceptions;
 import java.lang.util;
-import tango.text.Unicode;
+
+version(Tango){
+    static import tango.text.Unicode;
+} else { // Phobos
+    static import std.utf;
+    static import std.uni;
+    static import std.ctype;
+    static import std.string;
+}
 
 class Character {
     public static bool isUpperCase( dchar c ){
@@ -10,45 +18,87 @@
         return false;
     }
     public static dchar toUpperCase( wchar c ){
-        wchar[1] src;
-        src[0] = c;
-        dchar[1] buf;
-        uint ate;
-        dchar[] res = tango.text.convert.Utf.toString32( src, buf, &ate );
-        dchar[] r = tango.text.Unicode.toUpper( res );
-        return r[0];
+        version(Tango){
+            wchar[1] src;
+            src[0] = c;
+            dchar[1] buf;
+            uint ate;
+            dchar[] darr = tango.text.convert.Utf.toString32( src, buf, &ate );
+        } else { // Phobos
+            wchar[1] src;
+            src[0] = c;
+            auto darr = std.utf.toUTF32(src);
+        }
+        return toUpperCase( darr[0] );
     }
     public static dchar toUpperCase( dchar c ){
-        dchar[] r = tango.text.Unicode.toUpper( [c] );
-        return r[0];
+        version(Tango){
+            dchar[1] src;
+            src[0] = c;
+            dchar[] r = tango.text.Unicode.toUpper( src );
+            return r[0];
+        } else { // Phobos
+            return std.uni.toUniUpper( c );
+        }
     }
     public static dchar toLowerCase( wchar c ){
-        wchar[1] src;
-        src[0] = c;
-        dchar[1] buf;
-        uint ate;
-        dchar[] res = tango.text.convert.Utf.toString32( src, buf, &ate );
-        dchar[] r = tango.text.Unicode.toLower( res );
-        return r[0];
+        version(Tango){
+            wchar[1] src;
+            src[0] = c;
+            dchar[1] buf;
+            uint ate;
+            dchar[] darr = tango.text.convert.Utf.toString32( src, buf, &ate );
+        } else { // Phobos
+            wchar[1] src;
+            src[0] = c;
+            auto darr = std.utf.toUTF32(src);
+        }
+        return toLowerCase( darr[0] );
     }
     public static dchar toLowerCase( dchar c ){
-        dchar[] r = tango.text.Unicode.toLower( [c] );
-        return r[0];
+        version(Tango){
+            dchar[1] src;
+            src[0] = c;
+            dchar[] r = tango.text.Unicode.toLower( src );
+            return r[0];
+        } else { // Phobos
+            return std.uni.toUniLower( c );
+        }
     }
     public static bool isWhitespace( dchar c ){
-        return tango.text.Unicode.isWhitespace( c );
+        version(Tango){
+            return tango.text.Unicode.isWhitespace( c );
+        } else { // Phobos
+            return std.string.iswhite(c);
+        }
     }
     public static bool isDigit( dchar c ){
-        return tango.text.Unicode.isDigit( c );
+        version(Tango){
+            return tango.text.Unicode.isDigit( c );
+        } else { // Phobos
+            return cast(bool)std.ctype.isdigit(c);
+        }
     }
     public static bool isLetter( dchar c ){
-        return tango.text.Unicode.isLetter(c);
+        version(Tango){
+            return tango.text.Unicode.isLetter(c);
+        } else { // Phobos
+            return cast(bool)std.ctype.isalpha(c);
+        }
     }
     public static bool isSpace( dchar c ){
-        return tango.text.Unicode.isSpace(c);
+        version(Tango){
+            return tango.text.Unicode.isSpace(c);
+        } else { // Phobos
+            return cast(bool)std.ctype.isspace(c);
+        }
     }
     public static bool isWhiteSpace( dchar c ){
-        return tango.text.Unicode.isWhitespace(c);
+        version(Tango){
+            return tango.text.Unicode.isWhitespace(c);
+        } else { // Phobos
+            return std.string.iswhite(c);
+        }
     }
     public static bool isLetterOrDigit( dchar c ){
         return isDigit(c) || isLetter(c);
@@ -75,3 +125,73 @@
         implMissing( __FILE__, __LINE__);
     }
 }
+
+bool CharacterIsDefined( dchar ch ){
+    version(Tango){
+        return (ch in tango.text.UnicodeData.unicodeData) !is null;
+    } else { // Phobos
+        implMissing( __FILE__, __LINE__);
+        return false;
+    }
+}
+
+dchar CharacterFirstToLower( String str ){
+    int consumed;
+    return CharacterFirstToLower( str, consumed );
+}
+
+dchar CharacterFirstToLower( String str, out int consumed ){
+    version(Tango){
+        dchar[1] buf;
+        buf[0] = firstCodePoint( str, consumed );
+        dchar[] r = tango.text.Unicode.toLower( buf );
+        return r[0];
+    } else { // Phobos
+        implMissing( __FILE__, __LINE__);
+        return 0;
+    }
+}
+
+dchar CharacterToLower( dchar c ){
+    version(Tango){
+        dchar[] r = tango.text.Unicode.toLower( [c] );
+        return r[0];
+    } else { // Phobos
+        implMissing( __FILE__, __LINE__);
+        return 0;
+    }
+}
+dchar CharacterToUpper( dchar c ){
+    version(Tango){
+        dchar[] r = tango.text.Unicode.toUpper( [c] );
+        return r[0];
+    } else { // Phobos
+        implMissing( __FILE__, __LINE__);
+        return 0;
+    }
+}
+bool CharacterIsWhitespace( dchar c ){
+    version(Tango){
+        return tango.text.Unicode.isWhitespace( c );
+    } else { // Phobos
+        implMissing( __FILE__, __LINE__);
+        return false;
+    }
+}
+bool CharacterIsDigit( dchar c ){
+    version(Tango){
+        return tango.text.Unicode.isDigit( c );
+    } else { // Phobos
+        implMissing( __FILE__, __LINE__);
+        return false;
+    }
+}
+bool CharacterIsLetter( dchar c ){
+    version(Tango){
+        return tango.text.Unicode.isLetter( c );
+    } else { // Phobos
+        implMissing( __FILE__, __LINE__);
+        return false;
+    }
+}
+