]> git.saurik.com Git - wxWidgets.git/blame - src/mac/corefoundation/cfstring.cpp
another fix for HP-UX 11.11 vsscanf, should have been in r51260
[wxWidgets.git] / src / mac / corefoundation / cfstring.cpp
CommitLineData
5185263f
DE
1/////////////////////////////////////////////////////////////////////////////
2// Name: src/mac/corefoundation/cfstring.cpp
3// Purpose: wxCFStringHolder and other string functions
4// Author: Stefan Csomor
5// Modified by:
6// Created: 2004-10-29 (from code in src/mac/carbon/utils.cpp)
7// RCS-ID: $Id$
8// Copyright: (c) Stefan Csomor
9// Licence: wxWindows licence
afc605b2 10// Usage: Darwin (base library)
5185263f
DE
11/////////////////////////////////////////////////////////////////////////////
12
13#include "wx/wxprec.h"
48a1108e 14
5185263f
DE
15#ifndef WX_PRECOMP
16 #include "wx/string.h"
17 #include "wx/intl.h"
48a1108e
WS
18 #if wxUSE_GUI
19 #include "wx/font.h"
20 #endif
5185263f 21#endif
5185263f 22
48a1108e 23#include "wx/mac/corefoundation/cfstring.h"
5185263f 24
504f8052 25#include <CoreServices/CoreServices.h>
5185263f
DE
26
27void wxMacConvertNewlines13To10( char * data )
28{
29 char * buf = data ;
30 while( (buf=strchr(buf,0x0d)) != NULL )
31 {
32 *buf = 0x0a ;
33 buf++ ;
34 }
35}
36
37void wxMacConvertNewlines10To13( char * data )
38{
39 char * buf = data ;
40 while( (buf=strchr(buf,0x0a)) != NULL )
41 {
42 *buf = 0x0d ;
43 buf++ ;
44 }
45}
46
3dccf96e
SC
47const wxString sCR((wxChar)13);
48const wxString sLF((wxChar)10);
49
5185263f
DE
50void wxMacConvertNewlines13To10( wxString * data )
51{
3dccf96e 52 data->Replace( sCR,sLF);
5185263f
DE
53}
54
55void wxMacConvertNewlines10To13( wxString * data )
56{
3dccf96e 57 data->Replace( sLF,sCR);
5185263f
DE
58}
59
5185263f
DE
60wxUint32 wxMacGetSystemEncFromFontEnc(wxFontEncoding encoding)
61{
62 TextEncodingBase enc = 0 ;
63 if ( encoding == wxFONTENCODING_DEFAULT )
64 {
65#if wxUSE_GUI
66 encoding = wxFont::GetDefaultEncoding() ;
67#else
a8d69700 68 encoding = wxFONTENCODING_SYSTEM; // to be set below
5185263f
DE
69#endif
70 }
a8d69700 71
a4ea2d8d
SC
72 if ( encoding == wxFONTENCODING_SYSTEM )
73 {
74 enc = CFStringGetSystemEncoding();
75 }
5185263f
DE
76
77 switch( encoding)
78 {
79 case wxFONTENCODING_ISO8859_1 :
80 enc = kTextEncodingISOLatin1 ;
81 break ;
82 case wxFONTENCODING_ISO8859_2 :
83 enc = kTextEncodingISOLatin2;
84 break ;
85 case wxFONTENCODING_ISO8859_3 :
86 enc = kTextEncodingISOLatin3 ;
87 break ;
88 case wxFONTENCODING_ISO8859_4 :
89 enc = kTextEncodingISOLatin4;
90 break ;
91 case wxFONTENCODING_ISO8859_5 :
92 enc = kTextEncodingISOLatinCyrillic;
93 break ;
94 case wxFONTENCODING_ISO8859_6 :
95 enc = kTextEncodingISOLatinArabic;
96 break ;
97 case wxFONTENCODING_ISO8859_7 :
98 enc = kTextEncodingISOLatinGreek;
99 break ;
100 case wxFONTENCODING_ISO8859_8 :
101 enc = kTextEncodingISOLatinHebrew;
102 break ;
103 case wxFONTENCODING_ISO8859_9 :
104 enc = kTextEncodingISOLatin5;
105 break ;
106 case wxFONTENCODING_ISO8859_10 :
107 enc = kTextEncodingISOLatin6;
108 break ;
109 case wxFONTENCODING_ISO8859_13 :
110 enc = kTextEncodingISOLatin7;
111 break ;
112 case wxFONTENCODING_ISO8859_14 :
113 enc = kTextEncodingISOLatin8;
114 break ;
115 case wxFONTENCODING_ISO8859_15 :
116 enc = kTextEncodingISOLatin9;
117 break ;
118
119 case wxFONTENCODING_KOI8 :
120 enc = kTextEncodingKOI8_R;
121 break ;
122 case wxFONTENCODING_ALTERNATIVE : // MS-DOS CP866
123 enc = kTextEncodingDOSRussian;
124 break ;
125/*
126 case wxFONTENCODING_BULGARIAN :
127 enc = ;
128 break ;
129*/
130 case wxFONTENCODING_CP437 :
131 enc =kTextEncodingDOSLatinUS ;
132 break ;
133 case wxFONTENCODING_CP850 :
134 enc = kTextEncodingDOSLatin1;
135 break ;
136 case wxFONTENCODING_CP852 :
137 enc = kTextEncodingDOSLatin2;
138 break ;
139 case wxFONTENCODING_CP855 :
140 enc = kTextEncodingDOSCyrillic;
141 break ;
142 case wxFONTENCODING_CP866 :
143 enc =kTextEncodingDOSRussian ;
144 break ;
145 case wxFONTENCODING_CP874 :
146 enc = kTextEncodingDOSThai;
147 break ;
148 case wxFONTENCODING_CP932 :
149 enc = kTextEncodingDOSJapanese;
150 break ;
151 case wxFONTENCODING_CP936 :
152 enc = kTextEncodingDOSChineseSimplif ;
153 break ;
154 case wxFONTENCODING_CP949 :
155 enc = kTextEncodingDOSKorean;
156 break ;
157 case wxFONTENCODING_CP950 :
158 enc = kTextEncodingDOSChineseTrad;
159 break ;
160
161 case wxFONTENCODING_CP1250 :
162 enc = kTextEncodingWindowsLatin2;
163 break ;
164 case wxFONTENCODING_CP1251 :
165 enc =kTextEncodingWindowsCyrillic ;
166 break ;
167 case wxFONTENCODING_CP1252 :
168 enc =kTextEncodingWindowsLatin1 ;
169 break ;
170 case wxFONTENCODING_CP1253 :
171 enc = kTextEncodingWindowsGreek;
172 break ;
173 case wxFONTENCODING_CP1254 :
174 enc = kTextEncodingWindowsLatin5;
175 break ;
176 case wxFONTENCODING_CP1255 :
177 enc =kTextEncodingWindowsHebrew ;
178 break ;
179 case wxFONTENCODING_CP1256 :
180 enc =kTextEncodingWindowsArabic ;
181 break ;
182 case wxFONTENCODING_CP1257 :
183 enc = kTextEncodingWindowsBalticRim;
184 break ;
185
186 case wxFONTENCODING_UTF7 :
187 enc = CreateTextEncoding(kTextEncodingUnicodeDefault,0,kUnicodeUTF7Format) ;
188 break ;
189 case wxFONTENCODING_UTF8 :
190 enc = CreateTextEncoding(kTextEncodingUnicodeDefault,0,kUnicodeUTF8Format) ;
191 break ;
192 case wxFONTENCODING_EUC_JP :
193 enc = kTextEncodingEUC_JP;
194 break ;
195 case wxFONTENCODING_UTF16BE :
196 enc = CreateTextEncoding(kTextEncodingUnicodeDefault,0,kUnicode16BitFormat) ;
197 break ;
198 case wxFONTENCODING_UTF16LE :
199 enc = CreateTextEncoding(kTextEncodingUnicodeDefault,0,kUnicode16BitFormat) ;
200 break ;
201 case wxFONTENCODING_UTF32BE :
202 enc = CreateTextEncoding(kTextEncodingUnicodeDefault,0,kUnicode32BitFormat) ;
203 break ;
204 case wxFONTENCODING_UTF32LE :
205 enc = CreateTextEncoding(kTextEncodingUnicodeDefault,0,kUnicode32BitFormat) ;
206 break ;
207
208 case wxFONTENCODING_MACROMAN :
209 enc = kTextEncodingMacRoman ;
210 break ;
211 case wxFONTENCODING_MACJAPANESE :
212 enc = kTextEncodingMacJapanese ;
213 break ;
214 case wxFONTENCODING_MACCHINESETRAD :
215 enc = kTextEncodingMacChineseTrad ;
216 break ;
217 case wxFONTENCODING_MACKOREAN :
218 enc = kTextEncodingMacKorean ;
219 break ;
220 case wxFONTENCODING_MACARABIC :
221 enc = kTextEncodingMacArabic ;
222 break ;
223 case wxFONTENCODING_MACHEBREW :
224 enc = kTextEncodingMacHebrew ;
225 break ;
226 case wxFONTENCODING_MACGREEK :
227 enc = kTextEncodingMacGreek ;
228 break ;
229 case wxFONTENCODING_MACCYRILLIC :
230 enc = kTextEncodingMacCyrillic ;
231 break ;
232 case wxFONTENCODING_MACDEVANAGARI :
233 enc = kTextEncodingMacDevanagari ;
234 break ;
235 case wxFONTENCODING_MACGURMUKHI :
236 enc = kTextEncodingMacGurmukhi ;
237 break ;
238 case wxFONTENCODING_MACGUJARATI :
239 enc = kTextEncodingMacGujarati ;
240 break ;
241 case wxFONTENCODING_MACORIYA :
242 enc = kTextEncodingMacOriya ;
243 break ;
244 case wxFONTENCODING_MACBENGALI :
245 enc = kTextEncodingMacBengali ;
246 break ;
247 case wxFONTENCODING_MACTAMIL :
248 enc = kTextEncodingMacTamil ;
249 break ;
250 case wxFONTENCODING_MACTELUGU :
251 enc = kTextEncodingMacTelugu ;
252 break ;
253 case wxFONTENCODING_MACKANNADA :
254 enc = kTextEncodingMacKannada ;
255 break ;
256 case wxFONTENCODING_MACMALAJALAM :
257 enc = kTextEncodingMacMalayalam ;
258 break ;
259 case wxFONTENCODING_MACSINHALESE :
260 enc = kTextEncodingMacSinhalese ;
261 break ;
262 case wxFONTENCODING_MACBURMESE :
263 enc = kTextEncodingMacBurmese ;
264 break ;
265 case wxFONTENCODING_MACKHMER :
266 enc = kTextEncodingMacKhmer ;
267 break ;
268 case wxFONTENCODING_MACTHAI :
269 enc = kTextEncodingMacThai ;
270 break ;
271 case wxFONTENCODING_MACLAOTIAN :
272 enc = kTextEncodingMacLaotian ;
273 break ;
274 case wxFONTENCODING_MACGEORGIAN :
275 enc = kTextEncodingMacGeorgian ;
276 break ;
277 case wxFONTENCODING_MACARMENIAN :
278 enc = kTextEncodingMacArmenian ;
279 break ;
280 case wxFONTENCODING_MACCHINESESIMP :
281 enc = kTextEncodingMacChineseSimp ;
282 break ;
283 case wxFONTENCODING_MACTIBETAN :
284 enc = kTextEncodingMacTibetan ;
285 break ;
286 case wxFONTENCODING_MACMONGOLIAN :
287 enc = kTextEncodingMacMongolian ;
288 break ;
289 case wxFONTENCODING_MACETHIOPIC :
290 enc = kTextEncodingMacEthiopic ;
291 break ;
292 case wxFONTENCODING_MACCENTRALEUR :
293 enc = kTextEncodingMacCentralEurRoman ;
294 break ;
295 case wxFONTENCODING_MACVIATNAMESE :
296 enc = kTextEncodingMacVietnamese ;
297 break ;
298 case wxFONTENCODING_MACARABICEXT :
299 enc = kTextEncodingMacExtArabic ;
300 break ;
301 case wxFONTENCODING_MACSYMBOL :
302 enc = kTextEncodingMacSymbol ;
303 break ;
304 case wxFONTENCODING_MACDINGBATS :
305 enc = kTextEncodingMacDingbats ;
306 break ;
307 case wxFONTENCODING_MACTURKISH :
308 enc = kTextEncodingMacTurkish ;
309 break ;
310 case wxFONTENCODING_MACCROATIAN :
311 enc = kTextEncodingMacCroatian ;
312 break ;
313 case wxFONTENCODING_MACICELANDIC :
314 enc = kTextEncodingMacIcelandic ;
315 break ;
316 case wxFONTENCODING_MACROMANIAN :
317 enc = kTextEncodingMacRomanian ;
318 break ;
319 case wxFONTENCODING_MACCELTIC :
320 enc = kTextEncodingMacCeltic ;
321 break ;
322 case wxFONTENCODING_MACGAELIC :
323 enc = kTextEncodingMacGaelic ;
324 break ;
325 case wxFONTENCODING_MACKEYBOARD :
326 enc = kTextEncodingMacKeyboardGlyphs ;
327 break ;
328 default : // to make gcc happy
329 break ;
330 };
331 return enc ;
332}
333
334wxFontEncoding wxMacGetFontEncFromSystemEnc(wxUint32 encoding)
335{
336 wxFontEncoding enc = wxFONTENCODING_DEFAULT ;
337
338 switch( encoding)
339 {
340 case kTextEncodingISOLatin1 :
341 enc = wxFONTENCODING_ISO8859_1 ;
342 break ;
343 case kTextEncodingISOLatin2 :
344 enc = wxFONTENCODING_ISO8859_2;
345 break ;
346 case kTextEncodingISOLatin3 :
347 enc = wxFONTENCODING_ISO8859_3 ;
348 break ;
349 case kTextEncodingISOLatin4 :
350 enc = wxFONTENCODING_ISO8859_4;
351 break ;
352 case kTextEncodingISOLatinCyrillic :
353 enc = wxFONTENCODING_ISO8859_5;
354 break ;
355 case kTextEncodingISOLatinArabic :
356 enc = wxFONTENCODING_ISO8859_6;
357 break ;
358 case kTextEncodingISOLatinGreek :
359 enc = wxFONTENCODING_ISO8859_7;
360 break ;
361 case kTextEncodingISOLatinHebrew :
362 enc = wxFONTENCODING_ISO8859_8;
363 break ;
364 case kTextEncodingISOLatin5 :
365 enc = wxFONTENCODING_ISO8859_9;
366 break ;
367 case kTextEncodingISOLatin6 :
368 enc = wxFONTENCODING_ISO8859_10;
369 break ;
370 case kTextEncodingISOLatin7 :
371 enc = wxFONTENCODING_ISO8859_13;
372 break ;
373 case kTextEncodingISOLatin8 :
374 enc = wxFONTENCODING_ISO8859_14;
375 break ;
376 case kTextEncodingISOLatin9 :
377 enc =wxFONTENCODING_ISO8859_15 ;
378 break ;
379
380 case kTextEncodingKOI8_R :
381 enc = wxFONTENCODING_KOI8;
382 break ;
383/*
384 case :
385 enc = wxFONTENCODING_BULGARIAN;
386 break ;
387*/
388 case kTextEncodingDOSLatinUS :
389 enc = wxFONTENCODING_CP437;
390 break ;
391 case kTextEncodingDOSLatin1 :
392 enc = wxFONTENCODING_CP850;
393 break ;
394 case kTextEncodingDOSLatin2 :
395 enc =wxFONTENCODING_CP852 ;
396 break ;
397 case kTextEncodingDOSCyrillic :
398 enc = wxFONTENCODING_CP855;
399 break ;
400 case kTextEncodingDOSRussian :
401 enc = wxFONTENCODING_CP866;
402 break ;
403 case kTextEncodingDOSThai :
404 enc =wxFONTENCODING_CP874 ;
405 break ;
406 case kTextEncodingDOSJapanese :
407 enc = wxFONTENCODING_CP932;
408 break ;
409 case kTextEncodingDOSChineseSimplif :
410 enc = wxFONTENCODING_CP936;
411 break ;
412 case kTextEncodingDOSKorean :
413 enc = wxFONTENCODING_CP949;
414 break ;
415 case kTextEncodingDOSChineseTrad :
416 enc = wxFONTENCODING_CP950;
417 break ;
418
419 case kTextEncodingWindowsLatin2 :
420 enc = wxFONTENCODING_CP1250;
421 break ;
422 case kTextEncodingWindowsCyrillic :
423 enc = wxFONTENCODING_CP1251;
424 break ;
425 case kTextEncodingWindowsLatin1 :
426 enc = wxFONTENCODING_CP1252;
427 break ;
428 case kTextEncodingWindowsGreek :
429 enc = wxFONTENCODING_CP1253;
430 break ;
431 case kTextEncodingWindowsLatin5 :
432 enc = wxFONTENCODING_CP1254;
433 break ;
434 case kTextEncodingWindowsHebrew :
435 enc = wxFONTENCODING_CP1255;
436 break ;
437 case kTextEncodingWindowsArabic :
438 enc = wxFONTENCODING_CP1256;
439 break ;
440 case kTextEncodingWindowsBalticRim :
441 enc =wxFONTENCODING_CP1257 ;
442 break ;
443 case kTextEncodingEUC_JP :
444 enc = wxFONTENCODING_EUC_JP;
445 break ;
446#if 0
447 case wxFONTENCODING_UTF7 :
448 enc = CreateTextEncoding(kTextEncodingUnicodeDefault,0,kUnicodeUTF7Format) ;
449 break ;
450 case wxFONTENCODING_UTF8 :
451 enc = CreateTextEncoding(kTextEncodingUnicodeDefault,0,kUnicodeUTF8Format) ;
452 break ;
453 case wxFONTENCODING_UTF16BE :
454 enc = CreateTextEncoding(kTextEncodingUnicodeDefault,0,kUnicode16BitFormat) ;
455 break ;
456 case wxFONTENCODING_UTF16LE :
457 enc = CreateTextEncoding(kTextEncodingUnicodeDefault,0,kUnicode16BitFormat) ;
458 break ;
459 case wxFONTENCODING_UTF32BE :
460 enc = CreateTextEncoding(kTextEncodingUnicodeDefault,0,kUnicode32BitFormat) ;
461 break ;
462 case wxFONTENCODING_UTF32LE :
463 enc = CreateTextEncoding(kTextEncodingUnicodeDefault,0,kUnicode32BitFormat) ;
464 break ;
465#endif
466 case kTextEncodingMacRoman :
467 enc = wxFONTENCODING_MACROMAN ;
468 break ;
469 case kTextEncodingMacJapanese :
470 enc = wxFONTENCODING_MACJAPANESE ;
471 break ;
472 case kTextEncodingMacChineseTrad :
473 enc = wxFONTENCODING_MACCHINESETRAD ;
474 break ;
475 case kTextEncodingMacKorean :
476 enc = wxFONTENCODING_MACKOREAN ;
477 break ;
478 case kTextEncodingMacArabic :
479 enc =wxFONTENCODING_MACARABIC ;
480 break ;
481 case kTextEncodingMacHebrew :
482 enc = wxFONTENCODING_MACHEBREW ;
483 break ;
484 case kTextEncodingMacGreek :
485 enc = wxFONTENCODING_MACGREEK ;
486 break ;
487 case kTextEncodingMacCyrillic :
488 enc = wxFONTENCODING_MACCYRILLIC ;
489 break ;
490 case kTextEncodingMacDevanagari :
491 enc = wxFONTENCODING_MACDEVANAGARI ;
492 break ;
493 case kTextEncodingMacGurmukhi :
494 enc = wxFONTENCODING_MACGURMUKHI ;
495 break ;
496 case kTextEncodingMacGujarati :
497 enc = wxFONTENCODING_MACGUJARATI ;
498 break ;
499 case kTextEncodingMacOriya :
500 enc =wxFONTENCODING_MACORIYA ;
501 break ;
502 case kTextEncodingMacBengali :
503 enc =wxFONTENCODING_MACBENGALI ;
504 break ;
505 case kTextEncodingMacTamil :
506 enc = wxFONTENCODING_MACTAMIL ;
507 break ;
508 case kTextEncodingMacTelugu :
509 enc = wxFONTENCODING_MACTELUGU ;
510 break ;
511 case kTextEncodingMacKannada :
512 enc = wxFONTENCODING_MACKANNADA ;
513 break ;
514 case kTextEncodingMacMalayalam :
515 enc = wxFONTENCODING_MACMALAJALAM ;
516 break ;
517 case kTextEncodingMacSinhalese :
518 enc = wxFONTENCODING_MACSINHALESE ;
519 break ;
520 case kTextEncodingMacBurmese :
521 enc = wxFONTENCODING_MACBURMESE ;
522 break ;
523 case kTextEncodingMacKhmer :
524 enc = wxFONTENCODING_MACKHMER ;
525 break ;
526 case kTextEncodingMacThai :
527 enc = wxFONTENCODING_MACTHAI ;
528 break ;
529 case kTextEncodingMacLaotian :
530 enc = wxFONTENCODING_MACLAOTIAN ;
531 break ;
532 case kTextEncodingMacGeorgian :
533 enc = wxFONTENCODING_MACGEORGIAN ;
534 break ;
535 case kTextEncodingMacArmenian :
536 enc = wxFONTENCODING_MACARMENIAN ;
537 break ;
538 case kTextEncodingMacChineseSimp :
539 enc = wxFONTENCODING_MACCHINESESIMP ;
540 break ;
541 case kTextEncodingMacTibetan :
542 enc = wxFONTENCODING_MACTIBETAN ;
543 break ;
544 case kTextEncodingMacMongolian :
545 enc = wxFONTENCODING_MACMONGOLIAN ;
546 break ;
547 case kTextEncodingMacEthiopic :
548 enc = wxFONTENCODING_MACETHIOPIC ;
549 break ;
550 case kTextEncodingMacCentralEurRoman:
551 enc = wxFONTENCODING_MACCENTRALEUR ;
552 break ;
553 case kTextEncodingMacVietnamese:
554 enc = wxFONTENCODING_MACVIATNAMESE ;
555 break ;
556 case kTextEncodingMacExtArabic :
557 enc = wxFONTENCODING_MACARABICEXT ;
558 break ;
559 case kTextEncodingMacSymbol :
560 enc = wxFONTENCODING_MACSYMBOL ;
561 break ;
562 case kTextEncodingMacDingbats :
563 enc = wxFONTENCODING_MACDINGBATS ;
564 break ;
565 case kTextEncodingMacTurkish :
566 enc = wxFONTENCODING_MACTURKISH ;
567 break ;
568 case kTextEncodingMacCroatian :
569 enc = wxFONTENCODING_MACCROATIAN ;
570 break ;
571 case kTextEncodingMacIcelandic :
572 enc = wxFONTENCODING_MACICELANDIC ;
573 break ;
574 case kTextEncodingMacRomanian :
575 enc = wxFONTENCODING_MACROMANIAN ;
576 break ;
577 case kTextEncodingMacCeltic :
578 enc = wxFONTENCODING_MACCELTIC ;
579 break ;
580 case kTextEncodingMacGaelic :
581 enc = wxFONTENCODING_MACGAELIC ;
582 break ;
583 case kTextEncodingMacKeyboardGlyphs :
584 enc = wxFONTENCODING_MACKEYBOARD ;
585 break ;
586 } ;
587 return enc ;
588}
589
590
591//
504f8052 592// CFStringRefs
5185263f
DE
593//
594
504f8052 595// converts this string into a core foundation string with optional pc 2 mac encoding
18d52fed 596
504f8052 597wxCFStringRef::wxCFStringRef( const wxString &st , wxFontEncoding WXUNUSED_IN_UNICODE(encoding) )
18d52fed 598{
a4ea2d8d 599 if (st.IsEmpty())
2539aa88 600 {
504f8052 601 reset( wxCFRetain( CFSTR("") ) );
2539aa88
SC
602 }
603 else
604 {
605 wxString str = st ;
606 wxMacConvertNewlines13To10( &str ) ;
5185263f
DE
607#if wxUSE_UNICODE
608#if SIZEOF_WCHAR_T == 2
504f8052
SC
609 reset( CFStringCreateWithCharacters( kCFAllocatorDefault,
610 (UniChar*)str.wc_str() , str.Len() ) );
5185263f 611#else
d9d488cf 612 wxMBConvUTF16 converter ;
2539aa88
SC
613 size_t unicharlen = converter.WC2MB( NULL , str.wc_str() , 0 ) ;
614 UniChar *unibuf = new UniChar[ unicharlen / sizeof(UniChar) + 1 ] ;
615 converter.WC2MB( (char*)unibuf , str.wc_str() , unicharlen ) ;
d39a744d
SC
616 reset( CFStringCreateWithCharacters( kCFAllocatorDefault ,
617 unibuf , unicharlen / sizeof(UniChar) ) );
2539aa88 618 delete[] unibuf ;
5185263f
DE
619#endif
620#else // not wxUSE_UNICODE
504f8052
SC
621 reset( CFStringCreateWithCString( kCFAllocatorSystemDefault , str.c_str() ,
622 wxMacGetSystemEncFromFontEnc( encoding ) ) );
5185263f 623#endif
2539aa88 624 }
5185263f
DE
625}
626
504f8052 627wxString wxCFStringRef::AsString(wxFontEncoding WXUNUSED_IN_UNICODE(encoding))
5185263f 628{
504f8052 629 if ( !get() )
3a2a17cd 630 return wxEmptyString ;
48a1108e 631
504f8052 632 Size cflen = CFStringGetLength( get() ) ;
5185263f
DE
633 size_t noChars ;
634 wxChar* buf = NULL ;
635
636#if wxUSE_UNICODE
637#if SIZEOF_WCHAR_T == 2
638 buf = new wxChar[ cflen + 1 ] ;
504f8052 639 CFStringGetCharacters( get() , CFRangeMake( 0 , cflen ) , (UniChar*) buf ) ;
5185263f
DE
640 noChars = cflen ;
641#else
642 UniChar* unibuf = new UniChar[ cflen + 1 ] ;
504f8052 643 CFStringGetCharacters( get() , CFRangeMake( 0 , cflen ) , (UniChar*) unibuf ) ;
5185263f 644 unibuf[cflen] = 0 ;
d9d488cf 645 wxMBConvUTF16 converter ;
5185263f 646 noChars = converter.MB2WC( NULL , (const char*)unibuf , 0 ) ;
f3097709 647 wxASSERT_MSG( noChars != wxCONV_FAILED, _T("Unable to count the number of characters in this string!") );
5185263f 648 buf = new wxChar[ noChars + 1 ] ;
f3097709
SC
649 noChars = converter.MB2WC( buf , (const char*)unibuf , noChars + 1 ) ;
650 wxASSERT_MSG( noChars != wxCONV_FAILED, _T("Conversion of string failed!") );
5185263f
DE
651 delete[] unibuf ;
652#endif
653#else
654 CFIndex cStrLen ;
504f8052 655 CFStringGetBytes( get() , CFRangeMake(0, cflen) , wxMacGetSystemEncFromFontEnc( encoding ) ,
5185263f
DE
656 '?' , false , NULL , 0 , &cStrLen ) ;
657 buf = new wxChar[ cStrLen + 1 ] ;
504f8052 658 CFStringGetBytes( get() , CFRangeMake(0, cflen) , wxMacGetSystemEncFromFontEnc( encoding ) ,
5185263f
DE
659 '?' , false , (unsigned char*) buf , cStrLen , &cStrLen) ;
660 noChars = cStrLen ;
661#endif
662
663 buf[noChars] = 0 ;
5185263f
DE
664 wxString result(buf) ;
665 delete[] buf ;
3dccf96e 666 wxMacConvertNewlines10To13( &result);
5185263f
DE
667 return result ;
668}
dfd468aa 669
504f8052
SC
670//
671// wxMacUniCharBuffer
672//
dfd468aa
SC
673
674wxMacUniCharBuffer::wxMacUniCharBuffer( const wxString &str )
675{
676 m_chars = str.length() ;
677 m_ubuf = NULL ;
678
679#if SIZEOF_WCHAR_T == 4
680 wxMBConvUTF16 converter ;
681#if wxUSE_UNICODE
682 size_t unicharlen = converter.WC2MB( NULL , str.wc_str() , 0 ) ;
683 m_ubuf = (UniChar*) malloc( unicharlen + 2 ) ;
684 converter.WC2MB( (char*) m_ubuf , str.wc_str(), unicharlen + 2 ) ;
685#else
686 const wxWCharBuffer wchar = str.wc_str( wxConvLocal ) ;
687 size_t unicharlen = converter.WC2MB( NULL , wchar.data() , 0 ) ;
688 m_ubuf = (UniChar*) malloc( unicharlen + 2 ) ;
689 converter.WC2MB( (char*) m_ubuf , wchar.data() , unicharlen + 2 ) ;
690#endif
691 m_chars = unicharlen / 2 ;
692#else // SIZEOF_WCHAR_T is then 2
693#if wxUSE_UNICODE
694 m_ubuf = malloc( m_chars * 2 + 2 ) ;
695 memcpy( m_ubuf , (UniChar*) str.wc_str() , m_chars * 2 + 2 ) ;
696#else
697 wxWCharBuffer wchar = str.wc_str( wxConvLocal ) ;
698 m_chars = wxWcslen( wchar.data() ) ;
699 m_ubuf = malloc( m_chars * 2 + 2 ) ;
700 memcpy( m_ubuf , (UniChar*) wchar.data() , m_chars * 2 + 2 ) ;
701#endif
702#endif
703}
704
705wxMacUniCharBuffer::~wxMacUniCharBuffer()
706{
707 free( m_ubuf ) ;
708}
709
710UniCharArrayPtr wxMacUniCharBuffer::GetBuffer()
711{
712 return m_ubuf ;
713}
714
715UniCharCount wxMacUniCharBuffer::GetChars()
716{
717 return m_chars ;
718}