]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/chartype.h
Compilation fix after r62754.
[wxWidgets.git] / include / wx / chartype.h
index 5162b91dafa8ba9d5a95928c21187e7b92125371..480d1b1e2d003f7dc45b903f02085d0b7520014f 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Name:        wx/chartype.h
  * Purpose:     Declarations of wxChar and related types
- * Author:      Joel Farley, Ove Kåven
+ * Author:      Joel Farley, Ove Kåven
  * Modified by: Vadim Zeitlin, Robert Roebling, Ron Lee
  * Created:     1998/06/12
  * RCS-ID:      $Id$
@@ -38,8 +38,8 @@
 #endif /* !defined(wxUSE_WCHAR_T) */
 
 /* Unicode support requires wchar_t */
-#if wxUSE_UNICODE && !wxUSE_WCHAR_T
-    #error "wchar_t must be available in Unicode build"
+#if !wxUSE_WCHAR_T
+    #error "wchar_t must be available"
 #endif /* Unicode */
 
 /*
     typedef char wxChar;
     typedef signed char wxSChar;
     typedef unsigned char wxUChar;
-#else /* Unicode */
+#else
     /* VZ: note that VC++ defines _T[SU]CHAR simply as wchar_t and not as    */
     /*     signed/unsigned version of it which (a) makes sense to me (unlike */
     /*     char wchar_t is always unsigned) and (b) was how the previous     */
     /* 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
+    #if (defined(__SUNPRO_CC) || defined(__SUNPRO_C)) && !defined(__WCHAR_TYPE__)
+        #define __WCHAR_TYPE__ wxchar_t
     #endif
 
     /* GNU libc has __WCHAR_TYPE__ which requires special treatment, see */
 /* depending on the platform, Unicode build can either store wxStrings as
    wchar_t* or UTF-8 encoded char*: */
 #if wxUSE_UNICODE
-    // FIXME-UTF8: what would be better place for this?
+    /* FIXME-UTF8: what would be better place for this? */
     #if defined(wxUSE_UTF8_LOCALE_ONLY) && !defined(wxUSE_UNICODE_UTF8)
         #error "wxUSE_UTF8_LOCALE_ONLY only makes sense with wxUSE_UNICODE_UTF8"
     #endif
 #endif
 
 /* define char type used by wxString internal representation: */
-#if wxUSE_UNICODE_UTF8
-    typedef char wxStringCharType;
-#elif wxUSE_UNICODE_WCHAR
+#if wxUSE_UNICODE_WCHAR
     typedef wchar_t wxStringCharType;
-#else
+#else /* wxUSE_UNICODE_UTF8 || ANSI */
     typedef char wxStringCharType;
 #endif
 
 
 /* ------------------------------------------------------------------------- */
-/* define _T() and related macros                                            */
+/* define wxT() and related macros                                           */
 /* ------------------------------------------------------------------------- */
 
 /* BSD systems define _T() to be something different in ctype.h, override it */
     #undef _T
 #endif
 
-/* could already be defined by tchar.h (it's quasi standard) */
-#ifndef _T
+/*
+   wxT ("wx text") macro turns a literal string constant into a wide char
+   constant. It is mostly unnecessary with wx 2.9 but defined for
+   compatibility.
+ */
+#ifndef wxT
     #if !wxUSE_UNICODE
-        #define _T(x) x
+        #define wxT(x) x
     #else /* Unicode */
         /* use wxCONCAT_HELPER so that x could be expanded if it's a macro */
-        #define _T(x) wxCONCAT_HELPER(L, x)
+        #define wxT(x) wxCONCAT_HELPER(L, x)
     #endif /* ASCII/Unicode */
-#endif /* !defined(_T) */
+#endif /* !defined(wxT) */
 
-/* although global macros with such names are normally bad, we want to have  */
-/* another name for _T() which should be used to avoid confusion between     */
-/* _T() and _() in wxWidgets sources */
-#define wxT(x)       _T(x)
+/*
+   wxS ("wx string") macro can be used to create literals using the same
+   representation as wxString does internally, i.e. wchar_t in Unicode build
+   under Windows or char in UTF-8-based Unicode builds and (deprecated) ANSI
+   builds everywhere (see wxStringCharType definition above).
+ */
+#if wxUSE_UNICODE_WCHAR
+    #define wxS(x) wxCONCAT_HELPER(L, x)
+#else /* wxUSE_UNICODE_UTF8 || ANSI */
+    #define wxS(x) x
+#endif
+
+/*
+    _T() is a synonym for wxT() familiar to Windows programmers. As this macro
+    has even higher risk of conflicting with system headers, its use is
+    discouraged and you may predefine wxNO__T to disable it. Additionally, we
+    do it ourselves for Sun CC which is known to use it in its standard headers
+    (see #10660).
+ */
+#if defined(__SUNPRO_C) || defined(__SUNPRO_CC)
+    #ifndef wxNO__T
+        #define wxNO__T
+    #endif
+#endif
+
+#if !defined(_T) && !defined(wxNO__T)
+    #define _T(x) wxT(x)
+#endif
 
 /* a helper macro allowing to make another macro Unicode-friendly, see below */
-#define wxAPPLY_T(x) _T(x)
+#define wxAPPLY_T(x) wxT(x)
 
 /* Unicode-friendly __FILE__, __DATE__ and __TIME__ analogs */
 #ifndef __TFILE__