]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/wxchar.h
Added windowing and scrolling logic to generic
[wxWidgets.git] / include / wx / wxchar.h
index 93d8a76918bcabd91f2d2e6ffaca6f9a8e24d3c3..6a262007cf1d26a730c3bfe86b076a92e1be3bc6 100644 (file)
@@ -14,7 +14,9 @@
 #ifndef _WX_WXCHAR_H_
 #define _WX_WXCHAR_H_
 
-#include "wx/defs.h"        /* for wxUSE_UNICODE */
+/* defs.h indirectly includes this file, so don't include it here */
+#include "wx/platform.h"
+#include "wx/dlimpexp.h"
 
 #if defined(HAVE_STRTOK_R) && defined(__DARWIN__) && defined(_MSL_USING_MW_C_HEADERS) && _MSL_USING_MW_C_HEADERS
     char *strtok_r(char *, const char *, char **);
@@ -48,7 +50,7 @@
 /*
     Standard headers we need here.
 
-    NB: don't include any wxWidgets headers here because almost of them include
+    NB: don't include any wxWidgets headers here because almost all of them include
         this one!
  */
 
@@ -57,7 +59,9 @@
 
 /* Almost all compiler have strdup(), but not quite all: CodeWarrior under Mac */
 /* and VC++ for Windows CE don't provide it */
-#if !(defined(__MWERKS__) && defined(__WXMAC__)) && !defined(__WXWINCE__)
+#if defined(__VISUALC__) && __VISUALC__ >= 1400
+    #define wxStrdupA _strdup
+#elif !(defined(__MWERKS__) && defined(__WXMAC__)) && !defined(__WXWINCE__)
     /* use #define, not inline wrapper, as it is tested with #ifndef below */
     #define wxStrdupA strdup
 #endif
     #define wxHAVE_TCHAR_SUPPORT
 #endif /* compilers with (good) TCHAR support */
 
-#ifdef __MWERKS__
-    #define HAVE_WPRINTF
-#endif
+#if defined(__MWERKS__)
+    /* Metrowerks only has wide char support for OS X >= 10.3 */
+    #if !defined(__DARWIN__) || \
+         (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_3)
+        #define wxHAVE_MWERKS_UNICODE
+    #endif
+
+    #ifdef wxHAVE_MWERKS_UNICODE
+        #define HAVE_WPRINTF
+    #endif
+#endif /* __MWERKS__ */
 
 #ifdef wxHAVE_TCHAR_SUPPORT
     /* get TCHAR definition if we've got it */
     /*     char wchar_t is always unsigned) and (b) was how the previous */
     /*     definitions worked so keep it like this */
 
+    /* Sun's SunPro compiler supports the wchar_t type and wide character */
+    /* functions, but does not define __WCHAR_TYPE__. Define it here to */
+    /* allow unicode enabled builds. */
+    #if defined(__SUNPRO_CC) || defined(__SUNPRO_C)
+    #define __WCHAR_TYPE__ wxchar_t
+    #endif
+
     /* GNU libc has __WCHAR_TYPE__ which requires special treatment, see */
     /* comment below */
     #if !defined(__WCHAR_TYPE__) || \
     #if !wxUSE_UNICODE
         #define _T(x) x
     #else /* Unicode */
-        #define _T(x) L ## x
+        /* use wxCONCAT_HELPER so that x could be expanded if it's a macro */
+        #define _T(x) wxCONCAT_HELPER(L, x)
     #endif /* ASCII/Unicode */
 #endif /* !defined(_T) */
 
         #define wxWcstombs wcstombs
     #endif
 
-    /* No UNICODE in the c library except wchar_t typedef on mac OSX 10.2 and less - roll our own */
-    #if !defined(__MWERKS__) && wxUSE_UNICODE && defined(__DARWIN__) && ( MAC_OS_X_VERSION_MAX_ALLOWED <= MAC_OS_X_VERSION_10_2 )
-
+    /* 
+       The system C library on Mac OS X 10.2 and below does not support
+       unicode: in other words all wide-character functions such as towupper et
+       al. do simply not exist so we need to provide our own in that context,
+       except for the wchar_t definition/typedef itself.
+       
+       We need to do this for both project builder and CodeWarrior as
+       the latter uses the system C library in Mach builds for wide character
+       support, which as mentioned does not exist on 10.2 and below.
+    */
+    #if wxUSE_UNICODE && \
+        defined(__DARWIN__) && \
+            ( MAC_OS_X_VERSION_MAX_ALLOWED <= MAC_OS_X_VERSION_10_2 )
         /* we need everything! */
         #define wxNEED_WX_STRING_H
         #define wxNEED_WX_CTYPE_H
@@ -839,18 +869,19 @@ WXDLLIMPEXP_BASE bool wxOKlibc(); /* for internal use */
  */
 #ifndef wxVsnprintf_
     #if wxUSE_UNICODE
-        #if defined(__MWERKS__)
+        #ifdef wxHAVE_MWERKS_UNICODE
             #define HAVE_WCSRTOMBS 1
             #define HAVE_VSWPRINTF 1
-        #endif
+        #endif /* Metrowerks with Unicode support */
         #if defined(__WATCOMC__)
             #define wxVsnprintf_    _vsnwprintf
             #define wxSnprintf_     _snwprintf
-        #endif
+        #endif /* Watcom */
         #if defined(HAVE__VSNWPRINTF)
             #define wxVsnprintf_    _vsnwprintf
         /* MinGW?MSVCRT has the wrong vswprintf */
-        #elif defined(HAVE_VSWPRINTF) && !defined(__MINGW32__)
+               /* Mac OS X has a somehow buggy vswprintf */
+        #elif defined(HAVE_VSWPRINTF) && !defined(__MINGW32__) && !defined(__DARWIN__)
             #define wxVsnprintf_    vswprintf
         #endif
     #else /* ASCII */