home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / wxos2240.zip / wxWindows-2.4.0 / include / wx / strconv.h < prev    next >
C/C++ Source or Header  |  2002-11-09  |  7KB  |  202 lines

  1. ///////////////////////////////////////////////////////////////////////////////
  2. // Name:        strconv.h
  3. // Purpose:     conversion routines for char sets any Unicode
  4. // Author:      Robert Roebling, Ove Kaaven
  5. // Modified by:
  6. // Created:     29/01/98
  7. // RCS-ID:      $Id: strconv.h,v 1.11.2.2 2002/11/06 13:12:42 VS Exp $
  8. // Copyright:   (c) 1998 Ove Kaaven, Robert Roebling, Vadim Zeitlin
  9. // Licence:     wxWindows license
  10. ///////////////////////////////////////////////////////////////////////////////
  11.  
  12. #ifndef _WX_WXSTRCONVH__
  13. #define _WX_WXSTRCONVH__
  14.  
  15. #if defined(__GNUG__) && !defined(__APPLE__)
  16.   #pragma interface "strconv.h"
  17. #endif
  18.  
  19. #include "wx/defs.h"
  20. #include "wx/wxchar.h"
  21. #include "wx/buffer.h"
  22.  
  23. #if defined(__VISAGECPP__) && __IBMCPP__ >= 400
  24. #  undef __BSEXCPT__
  25. #endif
  26.  
  27. #include <stdlib.h>
  28.  
  29. #if wxUSE_WCHAR_T
  30.  
  31. // ----------------------------------------------------------------------------
  32. // wxMBConv (base class for conversions, using libc conversion itself)
  33. // ----------------------------------------------------------------------------
  34.  
  35. class WXDLLEXPORT wxMBConv
  36. {
  37. public:
  38.     // the actual conversion takes place here
  39.     virtual size_t MB2WC(wchar_t *buf, const char *psz, size_t n) const;
  40.     virtual size_t WC2MB(char *buf, const wchar_t *psz, size_t n) const;
  41.  
  42.     // No longer inline since BC++ complains.
  43.     const wxWCharBuffer cMB2WC(const char *psz) const;
  44.     const wxCharBuffer cWC2MB(const wchar_t *psz) const;
  45.  
  46. #if wxUSE_UNICODE
  47.     const wxWCharBuffer cMB2WX(const char *psz) const { return cMB2WC(psz); }
  48.     const wxCharBuffer cWX2MB(const wchar_t *psz) const { return cWC2MB(psz); }
  49.     const wchar_t* cWC2WX(const wchar_t *psz) const { return psz; }
  50.     const wchar_t* cWX2WC(const wchar_t *psz) const { return psz; }
  51. #else // ANSI
  52.     const char* cMB2WX(const char *psz) const { return psz; }
  53.     const char* cWX2MB(const char *psz) const { return psz; }
  54.     const wxCharBuffer cWC2WX(const wchar_t *psz) const { return cWC2MB(psz); }
  55.     const wxWCharBuffer cWX2WC(const char *psz) const { return cMB2WC(psz); }
  56. #endif // Unicode/ANSI
  57.  
  58.     // virtual dtor for any base class
  59.     virtual ~wxMBConv();
  60. };
  61.  
  62. WXDLLEXPORT_DATA(extern wxMBConv) wxConvLibc;
  63.  
  64. // ----------------------------------------------------------------------------
  65. // wxMBConvUTF7 (for conversion using UTF7 encoding)
  66. // ----------------------------------------------------------------------------
  67.  
  68. class WXDLLEXPORT wxMBConvUTF7 : public wxMBConv
  69. {
  70. public:
  71.     virtual size_t MB2WC(wchar_t *buf, const char *psz, size_t n) const;
  72.     virtual size_t WC2MB(char *buf, const wchar_t *psz, size_t n) const;
  73. };
  74.  
  75. WXDLLEXPORT_DATA(extern wxMBConvUTF7) wxConvUTF7;
  76.  
  77. // ----------------------------------------------------------------------------
  78. // wxMBConvUTF8 (for conversion using UTF8 encoding)
  79. // ----------------------------------------------------------------------------
  80.  
  81. class WXDLLEXPORT wxMBConvUTF8 : public wxMBConv
  82. {
  83. public:
  84.     virtual size_t MB2WC(wchar_t *buf, const char *psz, size_t n) const;
  85.     virtual size_t WC2MB(char *buf, const wchar_t *psz, size_t n) const;
  86. };
  87.  
  88. WXDLLEXPORT_DATA(extern wxMBConvUTF8) wxConvUTF8;
  89.  
  90. #ifdef __WXGTK12__
  91.  
  92. // ----------------------------------------------------------------------------
  93. // wxMBConvUTF8 (for conversion using GDK's internal converions)
  94. // ----------------------------------------------------------------------------
  95.  
  96. class WXDLLEXPORT wxMBConvGdk : public wxMBConv
  97. {
  98. public:
  99.     virtual size_t MB2WC(wchar_t *buf, const char *psz, size_t n) const;
  100.     virtual size_t WC2MB(char *buf, const wchar_t *psz, size_t n) const;
  101. };
  102.  
  103. WXDLLEXPORT_DATA(extern wxMBConvGdk) wxConvGdk;
  104.  
  105. #endif // wxGTK 1.2
  106.  
  107. // ----------------------------------------------------------------------------
  108. // wxCSConv (for conversion based on loadable char sets)
  109. // ----------------------------------------------------------------------------
  110.  
  111. class WXDLLEXPORT wxCharacterSet;
  112.  
  113. class WXDLLEXPORT wxCSConv : public wxMBConv
  114. {
  115. public:
  116.     wxCSConv(const wxChar *charset);
  117.     wxCSConv(const wxCSConv& conv);
  118.     virtual ~wxCSConv();
  119.  
  120.     wxCSConv& operator=(const wxCSConv& conv);
  121.  
  122.     void LoadNow();
  123.  
  124.     virtual size_t MB2WC(wchar_t *buf, const char *psz, size_t n) const;
  125.     virtual size_t WC2MB(char *buf, const wchar_t *psz, size_t n) const;
  126.  
  127.     void Clear() ;
  128.  
  129. private:
  130.     void SetName(const wxChar *charset);
  131.  
  132.     // note that we can't use wxString here because of compilation
  133.     // dependencies: we're included from wx/string.h
  134.     wxChar *m_name;
  135.     wxCharacterSet *m_cset;
  136.     bool m_deferred;
  137. };
  138.  
  139. #define wxConvFile wxConvLocal
  140. WXDLLEXPORT_DATA(extern wxCSConv) wxConvLocal;
  141. WXDLLEXPORT_DATA(extern wxCSConv) wxConvISO8859_1;
  142. WXDLLEXPORT_DATA(extern wxMBConv *) wxConvCurrent;
  143.  
  144. // ----------------------------------------------------------------------------
  145. // filename conversion macros
  146. // ----------------------------------------------------------------------------
  147.  
  148. // filenames are multibyte on Unix and probably widechar on Windows?
  149. #if defined(__UNIX__) || defined(__BORLANDC__)
  150.     #define wxMBFILES 1
  151. #else
  152.     #define wxMBFILES 0
  153. #endif
  154.  
  155. #if wxMBFILES && wxUSE_UNICODE
  156.     #define wxFNCONV(name) wxConvFile.cWX2MB(name)
  157.     #define wxFNSTRINGCAST wxMBSTRINGCAST
  158. #else
  159.     #define wxFNCONV(name) name
  160.     #define wxFNSTRINGCAST WXSTRINGCAST
  161. #endif
  162.  
  163. #else
  164.   // !wxUSE_WCHAR_T
  165.  
  166. // ----------------------------------------------------------------------------
  167. // stand-ins in absence of wchar_t
  168. // ----------------------------------------------------------------------------
  169.  
  170. class WXDLLEXPORT wxMBConv
  171. {
  172. public:
  173.     const char* cMB2WX(const char *psz) const { return psz; }
  174.     const char* cWX2MB(const char *psz) const { return psz; }
  175. };
  176.  
  177. WXDLLEXPORT_DATA(extern wxMBConv) wxConvLibc, wxConvFile, wxConvLocal, wxConvISO8859_1;
  178. WXDLLEXPORT_DATA(extern wxMBConv *) wxConvCurrent;
  179.  
  180. #define wxFNCONV(name) name
  181. #define wxFNSTRINGCAST WXSTRINGCAST
  182.  
  183. #endif
  184.   // wxUSE_WCHAR_T
  185.  
  186. // ----------------------------------------------------------------------------
  187. // macros for the most common conversions
  188. // ----------------------------------------------------------------------------
  189.  
  190. #if wxUSE_UNICODE
  191.     #define wxConvertWX2MB(s)   wxConvCurrent->cWX2MB(s)
  192.     #define wxConvertMB2WX(s)   wxConvCurrent->cMB2WX(s)
  193. #else // ANSI
  194.     // no conversions to do
  195.     #define wxConvertWX2MB(s)   (s)
  196.     #define wxConvertMB2WX(s)   (s)
  197. #endif // Unicode/ANSI
  198.  
  199. #endif
  200.   // _WX_WXSTRCONVH__
  201.  
  202.