]> git.saurik.com Git - apple/cf.git/blob - CFNumberFormatter.h
CF-744.tar.gz
[apple/cf.git] / CFNumberFormatter.h
1 /*
2 * Copyright (c) 2012 Apple Inc. All rights reserved.
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. Please obtain a copy of the License at
10 * http://www.opensource.apple.com/apsl/ and read it before using this
11 * file.
12 *
13 * The Original Code and all software distributed under the License are
14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
18 * Please see the License for the specific language governing rights and
19 * limitations under the License.
20 *
21 * @APPLE_LICENSE_HEADER_END@
22 */
23
24 /* CFNumberFormatter.h
25 Copyright (c) 2003-2012, Apple Inc. All rights reserved.
26 */
27
28 #if !defined(__COREFOUNDATION_CFNUMBERFORMATTER__)
29 #define __COREFOUNDATION_CFNUMBERFORMATTER__ 1
30
31 #include <CoreFoundation/CFBase.h>
32 #include <CoreFoundation/CFNumber.h>
33 #include <CoreFoundation/CFLocale.h>
34
35 CF_EXTERN_C_BEGIN
36
37 typedef struct __CFNumberFormatter *CFNumberFormatterRef;
38
39 // CFNumberFormatters are not thread-safe. Do not use one from multiple threads!
40
41 CF_EXPORT
42 CFTypeID CFNumberFormatterGetTypeID(void);
43
44 typedef CF_ENUM(CFIndex, CFNumberFormatterStyle) { // number format styles
45 kCFNumberFormatterNoStyle = 0,
46 kCFNumberFormatterDecimalStyle = 1,
47 kCFNumberFormatterCurrencyStyle = 2,
48 kCFNumberFormatterPercentStyle = 3,
49 kCFNumberFormatterScientificStyle = 4,
50 kCFNumberFormatterSpellOutStyle = 5
51 };
52
53
54 CF_EXPORT
55 CFNumberFormatterRef CFNumberFormatterCreate(CFAllocatorRef allocator, CFLocaleRef locale, CFNumberFormatterStyle style);
56 // Returns a CFNumberFormatter, localized to the given locale, which
57 // will format numbers to the given style.
58
59 CF_EXPORT
60 CFLocaleRef CFNumberFormatterGetLocale(CFNumberFormatterRef formatter);
61
62 CF_EXPORT
63 CFNumberFormatterStyle CFNumberFormatterGetStyle(CFNumberFormatterRef formatter);
64 // Get the properties with which the number formatter was created.
65
66 CF_EXPORT
67 CFStringRef CFNumberFormatterGetFormat(CFNumberFormatterRef formatter);
68
69 CF_EXPORT
70 void CFNumberFormatterSetFormat(CFNumberFormatterRef formatter, CFStringRef formatString);
71 // Set the format description string of the number formatter. This
72 // overrides the style settings. The format of the format string
73 // is as defined by the ICU library, and is similar to that found
74 // in Microsoft Excel and NSNumberFormatter.
75 // The number formatter starts with a default format string defined
76 // by the style argument with which it was created.
77
78
79 CF_EXPORT
80 CFStringRef CFNumberFormatterCreateStringWithNumber(CFAllocatorRef allocator, CFNumberFormatterRef formatter, CFNumberRef number);
81
82 CF_EXPORT
83 CFStringRef CFNumberFormatterCreateStringWithValue(CFAllocatorRef allocator, CFNumberFormatterRef formatter, CFNumberType numberType, const void *valuePtr);
84 // Create a string representation of the given number or value
85 // using the current state of the number formatter.
86
87
88 typedef CF_OPTIONS(CFOptionFlags, CFNumberFormatterOptionFlags) {
89 kCFNumberFormatterParseIntegersOnly = 1 /* only parse integers */
90 };
91
92 CF_EXPORT
93 CFNumberRef CFNumberFormatterCreateNumberFromString(CFAllocatorRef allocator, CFNumberFormatterRef formatter, CFStringRef string, CFRange *rangep, CFOptionFlags options);
94
95 CF_EXPORT
96 Boolean CFNumberFormatterGetValueFromString(CFNumberFormatterRef formatter, CFStringRef string, CFRange *rangep, CFNumberType numberType, void *valuePtr);
97 // Parse a string representation of a number using the current state
98 // of the number formatter. The range parameter specifies the range
99 // of the string in which the parsing should occur in input, and on
100 // output indicates the extent that was used; this parameter can
101 // be NULL, in which case the whole string may be used. The
102 // return value indicates whether some number was computed and
103 // (if valuePtr is not NULL) stored at the location specified by
104 // valuePtr. The numberType indicates the type of value pointed
105 // to by valuePtr.
106
107
108 CF_EXPORT
109 void CFNumberFormatterSetProperty(CFNumberFormatterRef formatter, CFStringRef key, CFTypeRef value);
110
111 CF_EXPORT
112 CFTypeRef CFNumberFormatterCopyProperty(CFNumberFormatterRef formatter, CFStringRef key);
113 // Set and get various properties of the number formatter, the set of
114 // which may be expanded in the future.
115
116 CF_EXPORT const CFStringRef kCFNumberFormatterCurrencyCode; // CFString
117 CF_EXPORT const CFStringRef kCFNumberFormatterDecimalSeparator; // CFString
118 CF_EXPORT const CFStringRef kCFNumberFormatterCurrencyDecimalSeparator; // CFString
119 CF_EXPORT const CFStringRef kCFNumberFormatterAlwaysShowDecimalSeparator; // CFBoolean
120 CF_EXPORT const CFStringRef kCFNumberFormatterGroupingSeparator; // CFString
121 CF_EXPORT const CFStringRef kCFNumberFormatterUseGroupingSeparator; // CFBoolean
122 CF_EXPORT const CFStringRef kCFNumberFormatterPercentSymbol; // CFString
123 CF_EXPORT const CFStringRef kCFNumberFormatterZeroSymbol; // CFString
124 CF_EXPORT const CFStringRef kCFNumberFormatterNaNSymbol; // CFString
125 CF_EXPORT const CFStringRef kCFNumberFormatterInfinitySymbol; // CFString
126 CF_EXPORT const CFStringRef kCFNumberFormatterMinusSign; // CFString
127 CF_EXPORT const CFStringRef kCFNumberFormatterPlusSign; // CFString
128 CF_EXPORT const CFStringRef kCFNumberFormatterCurrencySymbol; // CFString
129 CF_EXPORT const CFStringRef kCFNumberFormatterExponentSymbol; // CFString
130 CF_EXPORT const CFStringRef kCFNumberFormatterMinIntegerDigits; // CFNumber
131 CF_EXPORT const CFStringRef kCFNumberFormatterMaxIntegerDigits; // CFNumber
132 CF_EXPORT const CFStringRef kCFNumberFormatterMinFractionDigits; // CFNumber
133 CF_EXPORT const CFStringRef kCFNumberFormatterMaxFractionDigits; // CFNumber
134 CF_EXPORT const CFStringRef kCFNumberFormatterGroupingSize; // CFNumber
135 CF_EXPORT const CFStringRef kCFNumberFormatterSecondaryGroupingSize; // CFNumber
136 CF_EXPORT const CFStringRef kCFNumberFormatterRoundingMode; // CFNumber
137 CF_EXPORT const CFStringRef kCFNumberFormatterRoundingIncrement; // CFNumber
138 CF_EXPORT const CFStringRef kCFNumberFormatterFormatWidth; // CFNumber
139 CF_EXPORT const CFStringRef kCFNumberFormatterPaddingPosition; // CFNumber
140 CF_EXPORT const CFStringRef kCFNumberFormatterPaddingCharacter; // CFString
141 CF_EXPORT const CFStringRef kCFNumberFormatterDefaultFormat; // CFString
142 CF_EXPORT const CFStringRef kCFNumberFormatterMultiplier; // CFNumber
143 CF_EXPORT const CFStringRef kCFNumberFormatterPositivePrefix; // CFString
144 CF_EXPORT const CFStringRef kCFNumberFormatterPositiveSuffix; // CFString
145 CF_EXPORT const CFStringRef kCFNumberFormatterNegativePrefix; // CFString
146 CF_EXPORT const CFStringRef kCFNumberFormatterNegativeSuffix; // CFString
147 CF_EXPORT const CFStringRef kCFNumberFormatterPerMillSymbol; // CFString
148 CF_EXPORT const CFStringRef kCFNumberFormatterInternationalCurrencySymbol; // CFString
149 CF_EXPORT const CFStringRef kCFNumberFormatterCurrencyGroupingSeparator CF_AVAILABLE(10_5, 2_0); // CFString
150 CF_EXPORT const CFStringRef kCFNumberFormatterIsLenient CF_AVAILABLE(10_5, 2_0); // CFBoolean
151 CF_EXPORT const CFStringRef kCFNumberFormatterUseSignificantDigits CF_AVAILABLE(10_5, 2_0); // CFBoolean
152 CF_EXPORT const CFStringRef kCFNumberFormatterMinSignificantDigits CF_AVAILABLE(10_5, 2_0); // CFNumber
153 CF_EXPORT const CFStringRef kCFNumberFormatterMaxSignificantDigits CF_AVAILABLE(10_5, 2_0); // CFNumber
154
155 typedef CF_ENUM(CFIndex, CFNumberFormatterRoundingMode) {
156 kCFNumberFormatterRoundCeiling = 0,
157 kCFNumberFormatterRoundFloor = 1,
158 kCFNumberFormatterRoundDown = 2,
159 kCFNumberFormatterRoundUp = 3,
160 kCFNumberFormatterRoundHalfEven = 4,
161 kCFNumberFormatterRoundHalfDown = 5,
162 kCFNumberFormatterRoundHalfUp = 6
163 };
164
165 typedef CF_ENUM(CFIndex, CFNumberFormatterPadPosition) {
166 kCFNumberFormatterPadBeforePrefix = 0,
167 kCFNumberFormatterPadAfterPrefix = 1,
168 kCFNumberFormatterPadBeforeSuffix = 2,
169 kCFNumberFormatterPadAfterSuffix = 3
170 };
171
172
173 CF_EXPORT
174 Boolean CFNumberFormatterGetDecimalInfoForCurrencyCode(CFStringRef currencyCode, int32_t *defaultFractionDigits, double *roundingIncrement);
175 // Returns the number of fraction digits that should be displayed, and
176 // the rounding increment (or 0.0 if no rounding is done by the currency)
177 // for the given currency. Returns false if the currency code is unknown
178 // or the information is not available.
179 // Not localized because these are properties of the currency.
180
181 CF_EXTERN_C_END
182
183 #endif /* ! __COREFOUNDATION_CFNUMBERFORMATTER__ */
184