blob: a69e9eb74e08eaf2390b4ea652156500f85ad81b [file] [log] [blame]
/* CFNumberFormatter.h
Copyright (c) 2003-2016, Apple Inc. and the Swift project authors
Portions Copyright (c) 2014-2016 Apple Inc. and the Swift project authors
Licensed under Apache License v2.0 with Runtime Library Exception
See http://swift.org/LICENSE.txt for license information
See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
*/
#if !defined(__COREFOUNDATION_CFNUMBERFORMATTER__)
#define __COREFOUNDATION_CFNUMBERFORMATTER__ 1
#include <CoreFoundation/CFBase.h>
#include <CoreFoundation/CFNumber.h>
#include <CoreFoundation/CFLocale.h>
CF_IMPLICIT_BRIDGING_ENABLED
CF_EXTERN_C_BEGIN
typedef CFStringRef CFNumberFormatterKey CF_STRING_ENUM;
typedef struct CF_BRIDGED_MUTABLE_TYPE(id) __CFNumberFormatter *CFNumberFormatterRef;
// CFNumberFormatters are not thread-safe. Do not use one from multiple threads!
CF_EXPORT
CFTypeID CFNumberFormatterGetTypeID(void);
typedef CF_ENUM(CFIndex, CFNumberFormatterStyle) { // number format styles
kCFNumberFormatterNoStyle = 0,
kCFNumberFormatterDecimalStyle = 1,
kCFNumberFormatterCurrencyStyle = 2,
kCFNumberFormatterPercentStyle = 3,
kCFNumberFormatterScientificStyle = 4,
kCFNumberFormatterSpellOutStyle = 5,
kCFNumberFormatterOrdinalStyle CF_ENUM_AVAILABLE(10_11, 9_0) = 6,
kCFNumberFormatterCurrencyISOCodeStyle CF_ENUM_AVAILABLE(10_11, 9_0) = 8,
kCFNumberFormatterCurrencyPluralStyle CF_ENUM_AVAILABLE(10_11, 9_0) = 9,
kCFNumberFormatterCurrencyAccountingStyle CF_ENUM_AVAILABLE(10_11, 9_0) = 10,
};
CF_EXPORT
CFNumberFormatterRef CFNumberFormatterCreate(CFAllocatorRef allocator, CFLocaleRef locale, CFNumberFormatterStyle style);
// Returns a CFNumberFormatter, localized to the given locale, which
// will format numbers to the given style.
CF_EXPORT
CFLocaleRef CFNumberFormatterGetLocale(CFNumberFormatterRef formatter);
CF_EXPORT
CFNumberFormatterStyle CFNumberFormatterGetStyle(CFNumberFormatterRef formatter);
// Get the properties with which the number formatter was created.
CF_EXPORT
CFStringRef CFNumberFormatterGetFormat(CFNumberFormatterRef formatter);
CF_EXPORT
void CFNumberFormatterSetFormat(CFNumberFormatterRef formatter, CFStringRef formatString);
// Set the format description string of the number formatter. This
// overrides the style settings. The format of the format string
// is as defined by the ICU library, and is similar to that found
// in Microsoft Excel and NSNumberFormatter.
// The number formatter starts with a default format string defined
// by the style argument with which it was created.
CF_EXPORT
CFStringRef CFNumberFormatterCreateStringWithNumber(CFAllocatorRef allocator, CFNumberFormatterRef formatter, CFNumberRef number);
CF_EXPORT
CFStringRef CFNumberFormatterCreateStringWithValue(CFAllocatorRef allocator, CFNumberFormatterRef formatter, CFNumberType numberType, const void *valuePtr);
// Create a string representation of the given number or value
// using the current state of the number formatter.
typedef CF_OPTIONS(CFOptionFlags, CFNumberFormatterOptionFlags) {
kCFNumberFormatterParseIntegersOnly = 1 /* only parse integers */
};
CF_EXPORT
CFNumberRef CFNumberFormatterCreateNumberFromString(CFAllocatorRef allocator, CFNumberFormatterRef formatter, CFStringRef string, CFRange *rangep, CFOptionFlags options);
CF_EXPORT
Boolean CFNumberFormatterGetValueFromString(CFNumberFormatterRef formatter, CFStringRef string, CFRange *rangep, CFNumberType numberType, void *valuePtr);
// Parse a string representation of a number using the current state
// of the number formatter. The range parameter specifies the range
// of the string in which the parsing should occur in input, and on
// output indicates the extent that was used; this parameter can
// be NULL, in which case the whole string may be used. The
// return value indicates whether some number was computed and
// (if valuePtr is not NULL) stored at the location specified by
// valuePtr. The numberType indicates the type of value pointed
// to by valuePtr.
CF_EXPORT
void CFNumberFormatterSetProperty(CFNumberFormatterRef formatter, CFNumberFormatterKey key, CFTypeRef value);
CF_EXPORT
CFTypeRef CFNumberFormatterCopyProperty(CFNumberFormatterRef formatter, CFNumberFormatterKey key);
// Set and get various properties of the number formatter, the set of
// which may be expanded in the future.
CF_EXPORT const CFNumberFormatterKey kCFNumberFormatterCurrencyCode; // CFString
CF_EXPORT const CFNumberFormatterKey kCFNumberFormatterDecimalSeparator; // CFString
CF_EXPORT const CFNumberFormatterKey kCFNumberFormatterCurrencyDecimalSeparator; // CFString
CF_EXPORT const CFNumberFormatterKey kCFNumberFormatterAlwaysShowDecimalSeparator; // CFBoolean
CF_EXPORT const CFNumberFormatterKey kCFNumberFormatterGroupingSeparator; // CFString
CF_EXPORT const CFNumberFormatterKey kCFNumberFormatterUseGroupingSeparator; // CFBoolean
CF_EXPORT const CFNumberFormatterKey kCFNumberFormatterPercentSymbol; // CFString
CF_EXPORT const CFNumberFormatterKey kCFNumberFormatterZeroSymbol; // CFString
CF_EXPORT const CFNumberFormatterKey kCFNumberFormatterNaNSymbol; // CFString
CF_EXPORT const CFNumberFormatterKey kCFNumberFormatterInfinitySymbol; // CFString
CF_EXPORT const CFNumberFormatterKey kCFNumberFormatterMinusSign; // CFString
CF_EXPORT const CFNumberFormatterKey kCFNumberFormatterPlusSign; // CFString
CF_EXPORT const CFNumberFormatterKey kCFNumberFormatterCurrencySymbol; // CFString
CF_EXPORT const CFNumberFormatterKey kCFNumberFormatterExponentSymbol; // CFString
CF_EXPORT const CFNumberFormatterKey kCFNumberFormatterMinIntegerDigits; // CFNumber
CF_EXPORT const CFNumberFormatterKey kCFNumberFormatterMaxIntegerDigits; // CFNumber
CF_EXPORT const CFNumberFormatterKey kCFNumberFormatterMinFractionDigits; // CFNumber
CF_EXPORT const CFNumberFormatterKey kCFNumberFormatterMaxFractionDigits; // CFNumber
CF_EXPORT const CFNumberFormatterKey kCFNumberFormatterGroupingSize; // CFNumber
CF_EXPORT const CFNumberFormatterKey kCFNumberFormatterSecondaryGroupingSize; // CFNumber
CF_EXPORT const CFNumberFormatterKey kCFNumberFormatterRoundingMode; // CFNumber
CF_EXPORT const CFNumberFormatterKey kCFNumberFormatterRoundingIncrement; // CFNumber
CF_EXPORT const CFNumberFormatterKey kCFNumberFormatterFormatWidth; // CFNumber
CF_EXPORT const CFNumberFormatterKey kCFNumberFormatterPaddingPosition; // CFNumber
CF_EXPORT const CFNumberFormatterKey kCFNumberFormatterPaddingCharacter; // CFString
CF_EXPORT const CFNumberFormatterKey kCFNumberFormatterDefaultFormat; // CFString
CF_EXPORT const CFNumberFormatterKey kCFNumberFormatterMultiplier; // CFNumber
CF_EXPORT const CFNumberFormatterKey kCFNumberFormatterPositivePrefix; // CFString
CF_EXPORT const CFNumberFormatterKey kCFNumberFormatterPositiveSuffix; // CFString
CF_EXPORT const CFNumberFormatterKey kCFNumberFormatterNegativePrefix; // CFString
CF_EXPORT const CFNumberFormatterKey kCFNumberFormatterNegativeSuffix; // CFString
CF_EXPORT const CFNumberFormatterKey kCFNumberFormatterPerMillSymbol; // CFString
CF_EXPORT const CFNumberFormatterKey kCFNumberFormatterInternationalCurrencySymbol; // CFString
CF_EXPORT const CFNumberFormatterKey kCFNumberFormatterCurrencyGroupingSeparator CF_AVAILABLE(10_5, 2_0); // CFString
CF_EXPORT const CFNumberFormatterKey kCFNumberFormatterIsLenient CF_AVAILABLE(10_5, 2_0); // CFBoolean
CF_EXPORT const CFNumberFormatterKey kCFNumberFormatterUseSignificantDigits CF_AVAILABLE(10_5, 2_0); // CFBoolean
CF_EXPORT const CFNumberFormatterKey kCFNumberFormatterMinSignificantDigits CF_AVAILABLE(10_5, 2_0); // CFNumber
CF_EXPORT const CFNumberFormatterKey kCFNumberFormatterMaxSignificantDigits CF_AVAILABLE(10_5, 2_0); // CFNumber
typedef CF_ENUM(CFIndex, CFNumberFormatterRoundingMode) {
kCFNumberFormatterRoundCeiling = 0,
kCFNumberFormatterRoundFloor = 1,
kCFNumberFormatterRoundDown = 2,
kCFNumberFormatterRoundUp = 3,
kCFNumberFormatterRoundHalfEven = 4,
kCFNumberFormatterRoundHalfDown = 5,
kCFNumberFormatterRoundHalfUp = 6
};
typedef CF_ENUM(CFIndex, CFNumberFormatterPadPosition) {
kCFNumberFormatterPadBeforePrefix = 0,
kCFNumberFormatterPadAfterPrefix = 1,
kCFNumberFormatterPadBeforeSuffix = 2,
kCFNumberFormatterPadAfterSuffix = 3
};
CF_EXPORT
Boolean CFNumberFormatterGetDecimalInfoForCurrencyCode(CFStringRef currencyCode, int32_t *defaultFractionDigits, double *roundingIncrement);
// Returns the number of fraction digits that should be displayed, and
// the rounding increment (or 0.0 if no rounding is done by the currency)
// for the given currency. Returns false if the currency code is unknown
// or the information is not available.
// Not localized because these are properties of the currency.
CF_EXTERN_C_END
CF_IMPLICIT_BRIDGING_DISABLED
#endif /* ! __COREFOUNDATION_CFNUMBERFORMATTER__ */