// © 2017 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html #include "unicode/utypes.h" #if !UCONFIG_NO_FORMATTING #ifndef __NUMBER_AFFIXUTILS_H__ #define __NUMBER_AFFIXUTILS_H__ #include <cstdint> #include "number_types.h" #include "unicode/stringpiece.h" #include "unicode/unistr.h" #include "formatted_string_builder.h" #include "unicode/uniset.h" U_NAMESPACE_BEGIN namespace number { namespace impl { enum AffixPatternState { … }; // enum AffixPatternType defined in internals.h struct AffixTag { … }; class TokenConsumer { … }; // Exported as U_I18N_API because it is a base class for other exported types class U_I18N_API SymbolProvider { … }; /** * Performs manipulations on affix patterns: the prefix and suffix strings associated with a decimal * format pattern. For example: * * <table> * <tr><th>Affix Pattern</th><th>Example Unescaped (Formatted) String</th></tr> * <tr><td>abc</td><td>abc</td></tr> * <tr><td>ab-</td><td>ab−</td></tr> * <tr><td>ab'-'</td><td>ab-</td></tr> * <tr><td>ab''</td><td>ab'</td></tr> * </table> * * To manually iterate over tokens in a literal string, use the following pattern, which is designed * to be efficient. * * <pre> * long tag = 0L; * while (AffixPatternUtils.hasNext(tag, patternString)) { * tag = AffixPatternUtils.nextToken(tag, patternString); * int typeOrCp = AffixPatternUtils.getTypeOrCp(tag); * switch (typeOrCp) { * case AffixPatternUtils.TYPE_MINUS_SIGN: * // Current token is a minus sign. * break; * case AffixPatternUtils.TYPE_PLUS_SIGN: * // Current token is a plus sign. * break; * case AffixPatternUtils.TYPE_PERCENT: * // Current token is a percent sign. * break; * // ... other types ... * default: * // Current token is an arbitrary code point. * // The variable typeOrCp is the code point. * break; * } * } * </pre> */ class U_I18N_API AffixUtils { … }; } // namespace impl } // namespace number U_NAMESPACE_END #endif //__NUMBER_AFFIXUTILS_H__ #endif /* #if !UCONFIG_NO_FORMATTING */