]> git.saurik.com Git - wxWidgets.git/blame - include/wx/strconv.h
1. bug in wxString::find_first_of() fixed
[wxWidgets.git] / include / wx / strconv.h
CommitLineData
6001e347
RR
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$
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#ifdef __GNUG__
16 #pragma interface "strconv.h"
17#endif
18
19#include "wx/defs.h"
20#include "wx/wxchar.h"
21#include "wx/buffer.h"
22
9dea36ef
DW
23#if defined(__VISAGECPP__) && __IBMCPP__ >= 400
24# undef __BSEXCPT__
25#endif
6001e347
RR
26#include <stdlib.h>
27
28#if wxUSE_WCHAR_T
29
e90c1d2a 30// ----------------------------------------------------------------------------
6001e347 31// wxMBConv (base class for conversions, using libc conversion itself)
e90c1d2a 32// ----------------------------------------------------------------------------
6001e347
RR
33
34class WXDLLEXPORT wxMBConv
35{
36public:
e90c1d2a
VZ
37 // the actual conversion takes place here
38 virtual size_t MB2WC(wchar_t *buf, const char *psz, size_t n) const;
39 virtual size_t WC2MB(char *buf, const wchar_t *psz, size_t n) const;
40
41 // No longer inline since BC++ complains.
42 const wxWCharBuffer cMB2WC(const char *psz) const;
43 const wxCharBuffer cWC2MB(const wchar_t *psz) const;
6001e347 44
6001e347 45#if wxUSE_UNICODE
e90c1d2a
VZ
46 const wxWCharBuffer cMB2WX(const char *psz) const { return cMB2WC(psz); }
47 const wxCharBuffer cWX2MB(const wchar_t *psz) const { return cWC2MB(psz); }
48 const wchar_t* cWC2WX(const wchar_t *psz) const { return psz; }
49 const wchar_t* cMB2WC(const wchar_t *psz) const { return psz; }
50#else // ANSI
51 const char* cMB2WX(const char *psz) const { return psz; }
52 const char* cWX2MB(const char *psz) const { return psz; }
53 const wxCharBuffer cWC2WX(const wchar_t *psz) const { return cWC2MB(psz); }
54 const wxWCharBuffer cWX2WC(const char *psz) const { return cMB2WC(psz); }
55#endif // Unicode/ANSI
6001e347
RR
56};
57
58WXDLLEXPORT_DATA(extern wxMBConv) wxConvLibc;
59
e90c1d2a 60// ----------------------------------------------------------------------------
6001e347 61// wxMBConvFile (for conversion to filenames)
e90c1d2a 62// ----------------------------------------------------------------------------
6001e347 63
e90c1d2a 64class WXDLLEXPORT wxMBConvFile : public wxMBConv
6001e347
RR
65{
66public:
e90c1d2a
VZ
67 virtual size_t MB2WC(wchar_t *buf, const char *psz, size_t n) const;
68 virtual size_t WC2MB(char *buf, const wchar_t *psz, size_t n) const;
6001e347
RR
69};
70
71WXDLLEXPORT_DATA(extern wxMBConvFile) wxConvFile;
72
e90c1d2a 73// ----------------------------------------------------------------------------
6001e347 74// wxMBConvUTF7 (for conversion using UTF7 encoding)
e90c1d2a 75// ----------------------------------------------------------------------------
6001e347 76
e90c1d2a 77class WXDLLEXPORT wxMBConvUTF7 : public wxMBConv
6001e347
RR
78{
79public:
e90c1d2a
VZ
80 virtual size_t MB2WC(wchar_t *buf, const char *psz, size_t n) const;
81 virtual size_t WC2MB(char *buf, const wchar_t *psz, size_t n) const;
6001e347
RR
82};
83
84WXDLLEXPORT_DATA(extern wxMBConvUTF7) wxConvUTF7;
85
e90c1d2a 86// ----------------------------------------------------------------------------
6001e347 87// wxMBConvUTF8 (for conversion using UTF8 encoding)
e90c1d2a 88// ----------------------------------------------------------------------------
6001e347 89
e90c1d2a 90class WXDLLEXPORT wxMBConvUTF8 : public wxMBConv
6001e347
RR
91{
92public:
e90c1d2a
VZ
93 virtual size_t MB2WC(wchar_t *buf, const char *psz, size_t n) const;
94 virtual size_t WC2MB(char *buf, const wchar_t *psz, size_t n) const;
6001e347
RR
95};
96
97WXDLLEXPORT_DATA(extern wxMBConvUTF8) wxConvUTF8;
98
99#ifdef __WXGTK12__
e90c1d2a
VZ
100
101// ----------------------------------------------------------------------------
6001e347 102// wxMBConvUTF8 (for conversion using GDK's internal converions)
e90c1d2a 103// ----------------------------------------------------------------------------
6001e347 104
e90c1d2a 105class WXDLLEXPORT wxMBConvGdk : public wxMBConv
6001e347
RR
106{
107public:
e90c1d2a
VZ
108 virtual size_t MB2WC(wchar_t *buf, const char *psz, size_t n) const;
109 virtual size_t WC2MB(char *buf, const wchar_t *psz, size_t n) const;
6001e347
RR
110};
111
112WXDLLEXPORT_DATA(extern wxMBConvGdk) wxConvGdk;
6001e347 113
e90c1d2a 114#endif // wxGTK 1.2
6001e347 115
e90c1d2a
VZ
116// ----------------------------------------------------------------------------
117// wxCSConv (for conversion based on loadable char sets)
118// ----------------------------------------------------------------------------
6001e347 119
e90c1d2a
VZ
120class WXDLLEXPORT wxCharacterSet;
121
122class WXDLLEXPORT wxCSConv : public wxMBConv
6001e347 123{
6001e347 124public:
e90c1d2a
VZ
125 wxCSConv(const wxChar *charset);
126 virtual ~wxCSConv();
127
128 void LoadNow();
129
130 virtual size_t MB2WC(wchar_t *buf, const char *psz, size_t n) const;
131 virtual size_t WC2MB(char *buf, const wchar_t *psz, size_t n) const;
132
133private:
134 void SetName(const wxChar *charset);
135
136 wxChar *m_name;
137 wxCharacterSet *m_cset;
138 bool m_deferred;
6001e347
RR
139};
140
141WXDLLEXPORT_DATA(extern wxCSConv) wxConvLocal;
6001e347 142WXDLLEXPORT_DATA(extern wxMBConv *) wxConvCurrent;
6001e347 143
e90c1d2a 144// ----------------------------------------------------------------------------
6001e347 145// filename conversion macros
e90c1d2a 146// ----------------------------------------------------------------------------
6001e347
RR
147
148// filenames are multibyte on Unix and probably widechar on Windows?
149#if defined(__UNIX__) || defined(__BORLANDC__)
e90c1d2a 150 #define wxMBFILES 1
6001e347 151#else
e90c1d2a 152 #define wxMBFILES 0
6001e347
RR
153#endif
154
80df4d31 155#if wxMBFILES && wxUSE_UNICODE
e90c1d2a
VZ
156 #define wxFNCONV(name) wxConvFile.cWX2MB(name)
157 #define wxFNSTRINGCAST wxMBSTRINGCAST
6001e347 158#else
e90c1d2a
VZ
159 #define wxFNCONV(name) name
160 #define wxFNSTRINGCAST WXSTRINGCAST
6001e347
RR
161#endif
162
163#else
164 // !wxUSE_WCHAR_T
165
e90c1d2a 166// ----------------------------------------------------------------------------
6001e347 167// stand-ins in absence of wchar_t
e90c1d2a 168// ----------------------------------------------------------------------------
6001e347 169
e90c1d2a 170class WXDLLEXPORT wxMBConv
6001e347
RR
171{
172public:
e90c1d2a
VZ
173 const char* cMB2WX(const char *psz) const { return psz; }
174 const char* cWX2MB(const char *psz) const { return psz; }
6001e347 175};
e90c1d2a 176
6001e347
RR
177WXDLLEXPORT_DATA(extern wxMBConv) wxConvLibc, wxConvFile;
178WXDLLEXPORT_DATA(extern wxMBConv *) wxConvCurrent;
179
180#define wxFNCONV(name) name
e90c1d2a 181#define wxFNSTRINGCAST WXSTRINGCAST
6001e347
RR
182
183#endif
184 // wxUSE_WCHAR_T
185
e90c1d2a
VZ
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
6001e347
RR
200 // _WX_WXSTRCONVH__
201