]> git.saurik.com Git - wxWidgets.git/blame - include/wx/convauto.h
support SDK < 10.6, fixes #14902
[wxWidgets.git] / include / wx / convauto.h
CommitLineData
830f8f11
VZ
1///////////////////////////////////////////////////////////////////////////////
2// Name: wx/convauto.h
3// Purpose: wxConvAuto class declaration
4// Author: Vadim Zeitlin
5// Created: 2006-04-03
6// RCS-ID: $Id$
7// Copyright: (c) 2006 Vadim Zeitlin
8// Licence: wxWindows licence
9///////////////////////////////////////////////////////////////////////////////
10
11#ifndef _WX_CONVAUTO_H_
12#define _WX_CONVAUTO_H_
13
14#include "wx/strconv.h"
01a9232b 15#include "wx/fontenc.h"
830f8f11 16
830f8f11
VZ
17// ----------------------------------------------------------------------------
18// wxConvAuto: uses BOM to automatically detect input encoding
19// ----------------------------------------------------------------------------
20
038809c2
VZ
21// All currently recognized BOM values.
22enum wxBOM
23{
24 wxBOM_Unknown = -1,
25 wxBOM_None,
26 wxBOM_UTF32BE,
27 wxBOM_UTF32LE,
28 wxBOM_UTF16BE,
29 wxBOM_UTF16LE,
30 wxBOM_UTF8
31};
32
830f8f11
VZ
33class WXDLLIMPEXP_BASE wxConvAuto : public wxMBConv
34{
35public:
36 // default ctor, the real conversion will be created on demand
01a9232b
VZ
37 wxConvAuto(wxFontEncoding enc = wxFONTENCODING_DEFAULT)
38 {
088dd4c9
VZ
39 Init();
40
01a9232b
VZ
41 m_encDefault = enc;
42 }
830f8f11
VZ
43
44 // copy ctor doesn't initialize anything neither as conversion can only be
45 // deduced on first use
01a9232b
VZ
46 wxConvAuto(const wxConvAuto& other) : wxMBConv()
47 {
088dd4c9
VZ
48 Init();
49
01a9232b
VZ
50 m_encDefault = other.m_encDefault;
51 }
52
53 virtual ~wxConvAuto()
54 {
55 if ( m_ownsConv )
56 delete m_conv;
57 }
58
59 // get/set the fall-back encoding used when the input text doesn't have BOM
60 // and isn't UTF-8
61 //
62 // special values are wxFONTENCODING_MAX meaning not to use any fall back
63 // at all (but just fail to convert in this case) and wxFONTENCODING_SYSTEM
64 // meaning to use the encoding of the system locale
65 static wxFontEncoding GetFallbackEncoding() { return ms_defaultMBEncoding; }
66 static void SetFallbackEncoding(wxFontEncoding enc);
67 static void DisableFallbackEncoding()
68 {
69 SetFallbackEncoding(wxFONTENCODING_MAX);
70 }
830f8f11 71
830f8f11
VZ
72
73 // override the base class virtual function(s) to use our m_conv
74 virtual size_t ToWChar(wchar_t *dst, size_t dstLen,
467e0479 75 const char *src, size_t srcLen = wxNO_LEN) const;
830f8f11
VZ
76
77 virtual size_t FromWChar(char *dst, size_t dstLen,
467e0479 78 const wchar_t *src, size_t srcLen = wxNO_LEN) const;
830f8f11
VZ
79
80 virtual size_t GetMBNulLen() const { return m_conv->GetMBNulLen(); }
81
d36c9347
VZ
82 virtual wxMBConv *Clone() const { return new wxConvAuto(*this); }
83
830f8f11 84 // return the BOM type of this buffer
038809c2 85 static wxBOM DetectBOM(const char *src, size_t srcLen);
830f8f11 86
64b91e2d
VZ
87 // return the characters composing the given BOM.
88 static const char* GetBOMChars(wxBOM bomType, size_t* count);
89
038809c2
VZ
90 wxBOM GetBOM() const
91 {
92 return m_bomType;
93 }
94
95private:
088dd4c9
VZ
96 // common part of all ctors
97 void Init()
98 {
038809c2
VZ
99 // We don't initialize m_encDefault here as different ctors do it
100 // differently.
088dd4c9 101 m_conv = NULL;
038809c2 102 m_bomType = wxBOM_Unknown;
088dd4c9 103 m_ownsConv = false;
038809c2 104 m_consumedBOM = false;
088dd4c9
VZ
105 }
106
01a9232b
VZ
107 // initialize m_conv with the UTF-8 conversion
108 void InitWithUTF8()
830f8f11
VZ
109 {
110 m_conv = &wxConvUTF8;
111 m_ownsConv = false;
112 }
113
114 // create the correct conversion object for the given BOM type
038809c2 115 void InitFromBOM(wxBOM bomType);
830f8f11
VZ
116
117 // create the correct conversion object for the BOM present in the
4ca97396 118 // beginning of the buffer
4cb0e8d0
VZ
119 //
120 // return false if the buffer is too short to allow us to determine if we
121 // have BOM or not
4ca97396 122 bool InitFromInput(const char *src, size_t len);
830f8f11
VZ
123
124 // adjust src and len to skip over the BOM (identified by m_bomType) at the
125 // start of the buffer
126 void SkipBOM(const char **src, size_t *len) const;
127
128
01a9232b
VZ
129 // fall-back multibyte encoding to use, may be wxFONTENCODING_SYSTEM or
130 // wxFONTENCODING_MAX but not wxFONTENCODING_DEFAULT
131 static wxFontEncoding ms_defaultMBEncoding;
132
830f8f11
VZ
133 // conversion object which we really use, NULL until the first call to
134 // either ToWChar() or FromWChar()
135 wxMBConv *m_conv;
136
01a9232b
VZ
137 // the multibyte encoding to use by default if input isn't Unicode
138 wxFontEncoding m_encDefault;
139
830f8f11 140 // our BOM type
038809c2 141 wxBOM m_bomType;
830f8f11
VZ
142
143 // true if we allocated m_conv ourselves, false if we just use an existing
144 // global conversion
145 bool m_ownsConv;
146
147 // true if we already skipped BOM when converting (and not just calculating
148 // the size)
149 bool m_consumedBOM;
150
151
c0c133e1 152 wxDECLARE_NO_ASSIGN_CLASS(wxConvAuto);
830f8f11
VZ
153};
154
830f8f11
VZ
155#endif // _WX_CONVAUTO_H_
156