GNUstep CoreBase Library 0.2
CFString.h
1/* CFString.h
2
3 Copyright (C) 2010 Free Software Foundation, Inc.
4
5 Written by: Stefan Bidigaray
6 Date: January, 2010
7
8 This file is part of CoreBase.
9
10 This library is free software; you can redistribute it and/or
11 modify it under the terms of the GNU Lesser General Public
12 License as published by the Free Software Foundation; either
13 version 2.1 of the License, or (at your option) any later version.
14
15 This library is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 Lesser General Public License for more details.
19
20 You should have received a copy of the GNU Lesser General Public
21 License along with this library; see the file COPYING.LIB.
22 If not, see <http://www.gnu.org/licenses/> or write to the
23 Free Software Foundation, 51 Franklin Street, Fifth Floor,
24 Boston, MA 02110-1301, USA.
25*/
26
27#ifndef __COREFOUNDATION_CFSTRING_H__
28#define __COREFOUNDATION_CFSTRING_H__
29
30#include <CoreFoundation/CFBase.h>
31#include <CoreFoundation/CFArray.h>
32#include <CoreFoundation/CFCharacterSet.h>
33#include <CoreFoundation/CFData.h>
34#include <CoreFoundation/CFDictionary.h>
35#include <CoreFoundation/CFLocale.h>
36
37#include <stdarg.h>
38
39CF_EXTERN_C_BEGIN
40
49/*
50 * Data Types
51 */
52typedef UInt32 CFStringEncoding;
53
54/*
55 * Constants
56 */
57typedef enum
58{
59 kCFCompareCaseInsensitive = 1,
60 kCFCompareBackwards = 4,
61 kCFCompareAnchored = 8,
62 kCFCompareNonliteral = 16,
63 kCFCompareLocalized = 32,
64 kCFCompareNumerically = 64,
65#if OS_API_VERSION(MAC_OS_X_VERSION_10_5, GS_API_LATEST)
66 kCFCompareDiacriticInsensitive = 128,
67 kCFCompareWidthInsensitive = 256,
68 kCFCompareForcedOrdering = 512
69#endif
70} CFStringCompareFlags;
71
72enum CFStringBuiltInEncodings
73{
74 kCFStringEncodingMacRoman = 0,
75 kCFStringEncodingWindowsLatin1 = 0x0500,
76 kCFStringEncodingISOLatin1 = 0x0201,
77 kCFStringEncodingNextStepLatin = 0x0B01,
78 kCFStringEncodingASCII = 0x0600,
79 kCFStringEncodingUnicode = 0x0100,
80 kCFStringEncodingUTF8 = 0x08000100,
81 kCFStringEncodingNonLossyASCII = 0x0BFF,
82#if OS_API_VERSION(MAC_OS_X_VERSION_10_4, GS_API_LATEST)
83 kCFStringEncodingUTF16 = 0x0100,
84 kCFStringEncodingUTF16BE = 0x10000100,
85 kCFStringEncodingUTF16LE = 0x14000100,
86 kCFStringEncodingUTF32 = 0x0c000100,
87 kCFStringEncodingUTF32BE = 0x18000100,
88 kCFStringEncodingUTF32LE = 0x1c000100
89#endif
90};
91
92#if OS_API_VERSION(MAC_OS_X_VERSION_10_2, GS_API_LATEST)
93# define kCFStringEncodingInvalidId (0xffffffffU)
94#endif
95
101/* The 'pure' attribute tells the compiler that this function will always
102 return the same result with the same input. If it has any skill, then
103 constant propagation passes will magically make sure that this function is
104 called as few times as possible. */
105CF_EXPORT CFStringRef
106__CFStringMakeConstantString (const char *str) GS_PURE_FUNCTION;
107#define CFSTR(x) __CFStringMakeConstantString("" x "")
108
112CF_EXPORT CFArrayRef
113CFStringCreateArrayBySeparatingStrings (CFAllocatorRef alloc,
114 CFStringRef theString, CFStringRef separatorString);
115
116CF_EXPORT CFStringRef
117CFStringCreateByCombiningStrings (CFAllocatorRef alloc, CFArrayRef theArray,
118 CFStringRef separatorString);
119
120CF_EXPORT CFStringRef
121CFStringCreateCopy (CFAllocatorRef alloc, CFStringRef theString);
122
123CF_EXPORT CFStringRef
124CFStringCreateFromExternalRepresentation (CFAllocatorRef alloc, CFDataRef data,
125 CFStringEncoding encoding);
126
127CF_EXPORT CFStringRef
128CFStringCreateWithBytes (CFAllocatorRef alloc, const UInt8 *bytes,
129 CFIndex numBytes, CFStringEncoding encoding, Boolean isExternalRepresentation);
130
131CF_EXPORT CFStringRef
132CFStringCreateWithCharacters (CFAllocatorRef alloc, const UniChar *chars,
133 CFIndex numChars);
134
135CF_EXPORT CFStringRef
136CFStringCreateWithCharactersNoCopy (CFAllocatorRef alloc, const UniChar *chars,
137 CFIndex numChars, CFAllocatorRef contentsDeallocator);
138
139CF_EXPORT CFStringRef
140CFStringCreateWithCString (CFAllocatorRef alloc, const char *cStr,
141 CFStringEncoding encoding);
142
143CF_EXPORT CFStringRef
144CFStringCreateWithCStringNoCopy (CFAllocatorRef alloc, const char *cStr,
145 CFStringEncoding encoding, CFAllocatorRef contentsDeallocator);
146
147CF_EXPORT CFStringRef
148CFStringCreateWithFormat (CFAllocatorRef alloc, CFDictionaryRef formatOptions,
149 CFStringRef format, ...);
150
151CF_EXPORT CFStringRef
152CFStringCreateWithFormatAndArguments (CFAllocatorRef alloc,
153 CFDictionaryRef formatOptions, CFStringRef format, va_list arguments);
154
155CF_EXPORT CFStringRef
156CFStringCreateWithSubstring (CFAllocatorRef alloc, CFStringRef str,
157 CFRange range);
158
159#if OS_API_VERSION(MAC_OS_X_VERSION_10_4, GS_API_LATEST)
160CF_EXPORT CFStringRef
161CFStringCreateWithFileSystemRepresentation (CFAllocatorRef alloc,
162 const char *buffer);
163#endif
164
165#if OS_API_VERSION(MAC_OS_X_VERSION_10_5, GS_API_LATEST)
166CF_EXPORT CFStringRef
167CFStringCreateWithBytesNoCopy (CFAllocatorRef alloc, const UInt8 *bytes,
168 CFIndex numBytes, CFStringEncoding encoding, Boolean isExternalReprentation,
169 CFAllocatorRef contentsDeallocator);
170#endif
176CF_EXPORT CFArrayRef
177CFStringCreateArrayWithFindResults (CFAllocatorRef alloc, CFStringRef theString,
178 CFStringRef stringToFind, CFRange rangeToSearch,
179 CFStringCompareFlags compareOptions);
180
181CF_EXPORT CFRange
182CFStringFind (CFStringRef theString, CFStringRef stringToFind,
183 CFStringCompareFlags compareOptions);
184
185CF_EXPORT Boolean
186CFStringFindWithOptions (CFStringRef theString, CFStringRef stringToFind,
187 CFRange rangeToSearch, CFStringCompareFlags searchOptions, CFRange *result);
188
189CF_EXPORT Boolean
190CFStringFindWithOptionsAndLocale (CFStringRef theString,CFStringRef stringToFind,
191 CFRange rangeToSearch, CFStringCompareFlags searchOptions,
192 CFLocaleRef locale, CFRange *result);
193
194CF_EXPORT void
195CFStringGetLineBounds (CFStringRef theString, CFRange range,
196 CFIndex *lineBeginIndex, CFIndex *lineEndIndex, CFIndex *contentsEndIndex);
197
198#if OS_API_VERSION(MAC_OS_X_VERSION_10_2, GS_API_LATEST)
199CF_EXPORT Boolean
200CFStringFindCharacterFromSet (CFStringRef theString, CFCharacterSetRef theSet,
201 CFRange rangeToSearch, CFStringCompareFlags searchOptions, CFRange *result);
202#endif
203
204#if OS_API_VERSION(MAC_OS_X_VERSION_10_5, GS_API_LATEST)
205CF_EXPORT void
206CFStringGetParagraphBounds (CFStringRef string, CFRange range,
207 CFIndex *parBeginIndex, CFIndex *parEndIndex, CFIndex *contentsEndIndex);
208#endif
214CF_EXPORT CFComparisonResult
215CFStringCompare (CFStringRef theString1, CFStringRef theString2,
216 CFStringCompareFlags compareOptions);
217
218CF_EXPORT CFComparisonResult
219CFStringCompareWithOptions (CFStringRef theString1, CFStringRef theString2,
220 CFRange rangeToCOmpare, CFStringCompareFlags compareOptions);
221
222CF_EXPORT Boolean
223CFStringHasPrefix (CFStringRef theString, CFStringRef prefix);
224
225CF_EXPORT Boolean
226CFStringHasSuffix (CFStringRef theString, CFStringRef suffix);
227
228#if OS_API_VERSION(MAC_OS_X_VERSION_10_5, GS_API_LATEST)
229CF_EXPORT CFComparisonResult
230CFStringCompareWithOptionsAndLocale (CFStringRef theString1,
231 CFStringRef theString2, CFRange rangeToCOmpare,
232 CFStringCompareFlags compareOptions, CFLocaleRef locale);
233#endif
239CF_EXPORT CFDataRef
240CFStringCreateExternalRepresentation (CFAllocatorRef alloc,
241 CFStringRef theString, CFStringEncoding encoding, UInt8 lossByte);
242
243CF_EXPORT CFIndex
244CFStringGetBytes (CFStringRef theString, CFRange range,
245 CFStringEncoding encoding, UInt8 lossByte, Boolean isExternalRepresentation,
246 UInt8 *buffer, CFIndex maxBufLen, CFIndex *usedBufLen);
247
248CF_EXPORT UniChar
249CFStringGetCharacterAtIndex (CFStringRef theString, CFIndex idx);
250
251CF_EXPORT void
252CFStringGetCharacters (CFStringRef theString, CFRange range, UniChar *buffer);
253
254CF_EXPORT const UniChar *
255CFStringGetCharactersPtr (CFStringRef theString);
256
257CF_EXPORT Boolean
258CFStringGetCString (CFStringRef theString, char *buffer, CFIndex bufferSize,
259 CFStringEncoding encoding);
260
261CF_EXPORT const char *
262CFStringGetCStringPtr (CFStringRef theString, CFStringEncoding encoding);
263
264CF_EXPORT CFIndex
265CFStringGetLength (CFStringRef str);
266
267CF_EXPORT CFRange
268CFStringGetRangeOfComposedCharactersAtIndex (CFStringRef theString,
269 CFIndex theIndex);
270
271#if OS_API_VERSION(MAC_OS_X_VERSION_10_6, GS_API_LATEST)
272CF_EXPORT UTF32Char
273CFStringGetLongCharacterForSurrogatePair (UniChar surrogateHigh,
274 UniChar surrogateLow);
275
276CF_EXPORT Boolean
277CFStringGetSurrogatePairForLongCharacter (UTF32Char character,
278 UniChar *surrogates);
279
280CF_EXPORT Boolean
281CFStringIsSurrogateHighCharacter (UniChar character);
282
283CF_EXPORT Boolean
284CFStringIsSurrogateLowCharacter (UniChar character);
285#endif
291CF_EXPORT CFStringRef
292CFStringConvertEncodingToIANACharSetName (CFStringEncoding encoding);
293
294CF_EXPORT unsigned long
295CFStringConvertEncodingToNSStringEncoding (CFStringEncoding encoding);
296
297UInt32
298CFStringConvertEncodingToWindowsCodepage (CFStringEncoding encoding);
299
300CF_EXPORT CFStringEncoding
301CFStringConvertIANACharSetNameToEncoding (CFStringRef theString);
302
303CF_EXPORT CFStringEncoding
304CFStringConvertNSStringEncodingToEncoding (unsigned long encoding);
305
306CF_EXPORT CFStringEncoding
307CFStringConvertWindowsCodepageToEncoding (UInt32 codepage);
308
309CF_EXPORT CFStringEncoding
310CFStringGetFastestEncoding (CFStringRef theString);
311
312CF_EXPORT const CFStringEncoding *
313CFStringGetListOfAvailableEncodings (void);
314
315CF_EXPORT CFIndex
316CFStringGetMaximumSizeForEncoding (CFIndex length, CFStringEncoding encoding);
317
318CF_EXPORT CFStringEncoding
319CFStringGetMostCompatibleMacStringEncoding (CFStringEncoding encoding);
320
321CF_EXPORT CFStringRef
322CFStringGetNameOfEncoding (CFStringEncoding encoding);
323
324CF_EXPORT CFStringEncoding
325CFStringGetSmallestEncoding (CFStringRef theString);
326
327CF_EXPORT CFStringEncoding
328CFStringGetSystemEncoding (void);
329
330CF_EXPORT Boolean
331CFStringIsEncodingAvailable (CFStringEncoding encoding);
332
333#if OS_API_VERSION(MAC_OS_X_VERSION_10_4, GS_API_LATEST)
334CF_EXPORT Boolean
335CFStringGetFileSystemRepresentation (CFStringRef string, char *buffer,
336 CFIndex maxBufLen);
337
338CF_EXPORT CFIndex
339CFStringGetMaximumSizeOfFileSystemRepresentation (CFStringRef string);
340#endif
346CF_EXPORT double
347CFStringGetDoubleValue (CFStringRef str);
348
349CF_EXPORT SInt32
350CFStringGetIntValue (CFStringRef str);
356CF_EXPORT void
357CFShow (CFTypeRef obj);
358
359CF_EXPORT void
360CFShowStr (CFStringRef str);
361
362CF_EXPORT CFTypeID
363CFStringGetTypeID (void);
371CF_EXPORT CFStringRef
372CFStringCreateWithPascalString (CFAllocatorRef alloc, ConstStr255Param pStr,
373 CFStringEncoding encoding);
374
375CF_EXPORT CFStringRef
376CFStringCreateWithPascalStringNoCopy (CFAllocatorRef alloc,
377 ConstStr255Param pStr, CFStringEncoding encoding,
378 CFAllocatorRef contentsDeallocate);
379
380CF_EXPORT Boolean
381CFStringGetPascalString (CFStringRef theString, StringPtr buffer,
382 CFIndex bufferSize, CFStringEncoding encoding);
383
384CF_EXPORT ConstStringPtr
385CFStringGetPascalStringPtr (CFStringRef theString, CFStringEncoding encoding);
394#if OS_API_VERSION(MAC_OS_X_VERSION_10_2, GS_API_LATEST)
395typedef enum
396{
397 kCFStringNormalizationFormD = 0,
398 kCFStringNormalizationFormKD = 1,
399 kCFStringNormalizationFormC = 2,
400 kCFStringNormalizationFormKC = 3
401} CFStringNormalizationForm;
402#endif
403
404#if OS_API_VERSION(MAC_OS_X_VERSION_10_4, GS_API_LATEST)
405CF_EXPORT const CFStringRef kCFStringTransformStripCombiningMarks;
406CF_EXPORT const CFStringRef kCFStringTransformToLatin;
407CF_EXPORT const CFStringRef kCFStringTransformFullwidthHalfwidth;
408CF_EXPORT const CFStringRef kCFStringTransformLatinKatakana;
409CF_EXPORT const CFStringRef kCFStringTransformLatinHiragana;
410CF_EXPORT const CFStringRef kCFStringTransformHiraganaKatakana;
411CF_EXPORT const CFStringRef kCFStringTransformMandarinLatin;
412CF_EXPORT const CFStringRef kCFStringTransformLatinHangul;
413CF_EXPORT const CFStringRef kCFStringTransformLatinArabic;
414CF_EXPORT const CFStringRef kCFStringTransformLatinHebrew;
415CF_EXPORT const CFStringRef kCFStringTransformLatinThai;
416CF_EXPORT const CFStringRef kCFStringTransformLatinCyrillic;
417CF_EXPORT const CFStringRef kCFStringTransformLatinGreek;
418CF_EXPORT const CFStringRef kCFStringTransformToXMLHex;
419CF_EXPORT const CFStringRef kCFStringTransformToUnicodeName;
420#endif
421#if OS_API_VERSION(MAC_OS_X_VERSION_10_5, GS_API_LATEST)
422CF_EXPORT const CFStringRef kCFStringTransformStripDiacritics;
423#endif
424
425CF_EXPORT void
426CFStringAppend (CFMutableStringRef theString, CFStringRef appendedString);
427
428CF_EXPORT void
429CFStringAppendCharacters (CFMutableStringRef theString,
430 const UniChar *chars, CFIndex numChars);
431
432CF_EXPORT void
433CFStringAppendCString (CFMutableStringRef theString, const char *cStr,
434 CFStringEncoding encoding);
435
436CF_EXPORT void
437CFStringAppendFormat (CFMutableStringRef theString,
438 CFDictionaryRef formatOptions, CFStringRef format, ...);
439
440CF_EXPORT void
441CFStringAppendFormatAndArguments (CFMutableStringRef theString,
442 CFDictionaryRef formatOptions, CFStringRef format, va_list arguments);
443
444CF_EXPORT void
445CFStringAppendPascalString (CFMutableStringRef theString,
446 ConstStr255Param pStr, CFStringEncoding encoding);
447
448CF_EXPORT void
449CFStringCapitalize (CFMutableStringRef theString, CFLocaleRef locale);
450
451CF_EXPORT CFMutableStringRef
452CFStringCreateMutable (CFAllocatorRef alloc, CFIndex maxLength);
453
454CF_EXPORT CFMutableStringRef
455CFStringCreateMutableCopy (CFAllocatorRef alloc, CFIndex maxLength,
456 CFStringRef theString);
457
458CF_EXPORT CFMutableStringRef
459CFStringCreateMutableWithExternalCharactersNoCopy (CFAllocatorRef alloc,
460 UniChar *chars, CFIndex numChars, CFIndex capacity,
461 CFAllocatorRef externalCharactersAllocator);
462
463CF_EXPORT void
464CFStringDelete (CFMutableStringRef theString, CFRange range);
465
466CF_EXPORT void
467CFStringInsert (CFMutableStringRef str, CFIndex idx, CFStringRef insertedStr);
468
469CF_EXPORT void
470CFStringLowercase (CFMutableStringRef theString, CFLocaleRef locale);
471
472CF_EXPORT void
473CFStringPad (CFMutableStringRef theString, CFStringRef padString,
474 CFIndex length, CFIndex indexIntoPad);
475
476CF_EXPORT void
477CFStringReplace (CFMutableStringRef theString, CFRange range,
478 CFStringRef replacement);
479
480CF_EXPORT void
481CFStringReplaceAll (CFMutableStringRef theString, CFStringRef replacement);
482
483CF_EXPORT void
484CFStringSetExternalCharactersNoCopy (CFMutableStringRef theString,
485 UniChar *chars, CFIndex length, CFIndex capacity);
486
487CF_EXPORT void
488CFStringTrim (CFMutableStringRef theString, CFStringRef trimString);
489
490CF_EXPORT void
491CFStringTrimWhitespace (CFMutableStringRef theString);
492
493CF_EXPORT void
494CFStringUppercase (CFMutableStringRef theString, CFLocaleRef locale);
495
496#if OS_API_VERSION(MAC_OS_X_VERSION_10_2, GS_API_LATEST)
497CF_EXPORT CFIndex
498CFStringFindAndReplace (CFMutableStringRef theString,
499 CFStringRef stringToFind, CFStringRef replacementString,
500 CFRange rangeToSearch, CFOptionFlags compareOptions);
501
502CF_EXPORT void
503CFStringNormalize (CFMutableStringRef theString,
504 CFStringNormalizationForm theForm);
505#endif
506
507#if OS_API_VERSION(MAC_OS_X_VERSION_10_4, GS_API_LATEST)
508CF_EXPORT Boolean
509CFStringTransform (CFMutableStringRef string, CFRange *range,
510 CFStringRef transform, Boolean reverse);
511#endif
512
513#if OS_API_VERSION(MAC_OS_X_VERSION_10_5, GS_API_LATEST)
514CF_EXPORT void
515CFStringFold (CFMutableStringRef theString, CFOptionFlags theFlags,
516 CFLocaleRef theLocale);
517#endif
526#define __kCFStringInlineBufferLength 64
528{
529 UniChar buffer[__kCFStringInlineBufferLength];
530 CFStringRef theString;
531 const UniChar *directBuffer;
532 CFRange rangeToBuffer;
533 CFIndex bufferedRangeStart;
534 CFIndex bufferedRangeEnd;
535};
537
538CF_INLINE void
539CFStringInitInlineBuffer (CFStringRef str, CFStringInlineBuffer *buf,
540 CFRange range)
541{
542 buf->theString = str;
543 buf->rangeToBuffer = range;
544 buf->directBuffer = CFStringGetCharactersPtr (str);
545 buf->bufferedRangeStart = 0;
546 buf->bufferedRangeEnd = 0;
547}
548
549CF_INLINE UniChar
550CFStringGetCharacterFromInlineBuffer (CFStringInlineBuffer *buf, CFIndex idx)
551{
552 if (buf->directBuffer)
553 {
554 if (idx < 0 || idx >= buf->rangeToBuffer.length)
555 return 0;
556 return buf->directBuffer[idx + buf->rangeToBuffer.location];
557 }
558 else if (idx >= buf->bufferedRangeEnd || idx < buf->bufferedRangeStart)
559 {
560 CFRange range;
561
562 if (idx < 0 || idx >= buf->rangeToBuffer.length)
563 return 0;
564
565 /* Use 16 here so it's efficient to go backwards, too */
566 buf->bufferedRangeStart = idx - 16;
567 if (buf->bufferedRangeStart < 0)
568 buf->bufferedRangeStart = 0;
569 buf->bufferedRangeEnd =
570 buf->bufferedRangeStart + __kCFStringInlineBufferLength;
571 if (buf->bufferedRangeEnd > buf->rangeToBuffer.length)
572 buf->bufferedRangeEnd = buf->rangeToBuffer.length;
573
574 range = CFRangeMake (buf->rangeToBuffer.location + buf->bufferedRangeStart,
575 buf->bufferedRangeEnd - buf->bufferedRangeStart);
576
577 CFStringGetCharacters (buf->theString, range, buf->buffer);
578 }
579
580 return buf->buffer[(idx - buf->bufferedRangeStart)];
581}
584CF_EXTERN_C_END
585
586#endif /* __COREFOUNDATION_CFSTRING_H__ */
587
CFIndex location
Definition CFBase.h:173
CFIndex length
Definition CFBase.h:175
unsigned long CFOptionFlags
Definition CFBase.h:163
signed long CFIndex
Definition CFBase.h:165
CFRange CFRangeMake(CFIndex location, CFIndex length)
Definition CFBase.h:185
Definition CFBase.h:172
const struct __CFAllocator * CFAllocatorRef
A reference to a CFAllocator object.
Definition CFBase.h:301
const struct __CFArray * CFArrayRef
Reference to an immutable array object.
Definition CFArray.h:37
Definition CFString.h:528