154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius/* 254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius******************************************************************************* 354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius* 4fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius* Copyright (C) 2012-2014, International Business Machines 554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius* Corporation and others. All Rights Reserved. 654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius* 754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius******************************************************************************* 854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius* file name: listformatter.h 954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius* encoding: US-ASCII 1054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius* tab size: 8 (not used) 1154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius* indentation:4 1254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius* 1354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius* created on: 20120426 1454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius* created by: Umesh P. Nair 1554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius*/ 1654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 1754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#ifndef __LISTFORMATTER_H__ 1854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#define __LISTFORMATTER_H__ 1954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 208393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius#include "unicode/utypes.h" 218393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 2254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#include "unicode/unistr.h" 2354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#include "unicode/locid.h" 2454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 2554dcd9b6a06071f647dac967e9e267abb9410720Craig CorneliusU_NAMESPACE_BEGIN 2654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 2754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius/** @internal */ 2854dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusclass Hashtable; 2954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 30fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius/** @internal */ 31fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusstruct ListFormatInternal; 32fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 33fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius/* The following can't be #ifndef U_HIDE_INTERNAL_API, needed for other .h file declarations */ 3454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius/** @internal */ 3554dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusstruct ListFormatData : public UMemory { 3654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString twoPattern; 3754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString startPattern; 3854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString middlePattern; 3954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString endPattern; 4054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 4154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ListFormatData(const UnicodeString& two, const UnicodeString& start, const UnicodeString& middle, const UnicodeString& end) : 4254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius twoPattern(two), startPattern(start), middlePattern(middle), endPattern(end) {} 4354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius}; 4454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 4554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 4654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius/** 4754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * \file 4854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * \brief C++ API: API for formatting a list. 4954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius */ 5054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 5154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 5254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius/** 5354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * An immutable class for formatting a list, using data from CLDR (or supplied 5454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * separately). 5554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * 5654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * Example: Input data ["Alice", "Bob", "Charlie", "Delta"] will be formatted 5754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * as "Alice, Bob, Charlie and Delta" in English. 5854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * 5954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * The ListFormatter class is not intended for public subclassing. 60fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius * @stable ICU 50 6154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius */ 6254dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusclass U_COMMON_API ListFormatter : public UObject{ 6354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 6454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius public: 6559d709d503bab6e2b61931737e662dd293b40578ccornelius 6659d709d503bab6e2b61931737e662dd293b40578ccornelius /** 6759d709d503bab6e2b61931737e662dd293b40578ccornelius * Copy constructor. 6859d709d503bab6e2b61931737e662dd293b40578ccornelius * @draft ICU 52 6959d709d503bab6e2b61931737e662dd293b40578ccornelius */ 7059d709d503bab6e2b61931737e662dd293b40578ccornelius ListFormatter(const ListFormatter&); 7159d709d503bab6e2b61931737e662dd293b40578ccornelius 7259d709d503bab6e2b61931737e662dd293b40578ccornelius /** 7359d709d503bab6e2b61931737e662dd293b40578ccornelius * Assignment operator. 7459d709d503bab6e2b61931737e662dd293b40578ccornelius * @draft ICU 52 7559d709d503bab6e2b61931737e662dd293b40578ccornelius */ 7659d709d503bab6e2b61931737e662dd293b40578ccornelius ListFormatter& operator=(const ListFormatter& other); 7759d709d503bab6e2b61931737e662dd293b40578ccornelius 7854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius /** 7954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * Creates a ListFormatter appropriate for the default locale. 8054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * 8154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * @param errorCode ICU error code, set if no data available for default locale. 8254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * @return Pointer to a ListFormatter object for the default locale, 8354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * created from internal data derived from CLDR data. 84fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius * @stable ICU 50 8554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius */ 8654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius static ListFormatter* createInstance(UErrorCode& errorCode); 8754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 8854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius /** 8954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * Creates a ListFormatter appropriate for a locale. 9054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * 9154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * @param locale The locale. 9254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * @param errorCode ICU error code, set if no data available for the given locale. 9354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * @return A ListFormatter object created from internal data derived from 9454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * CLDR data. 95fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius * @stable ICU 50 9654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius */ 9754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius static ListFormatter* createInstance(const Locale& locale, UErrorCode& errorCode); 9854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 9959d709d503bab6e2b61931737e662dd293b40578ccornelius#ifndef U_HIDE_INTERNAL_API 10059d709d503bab6e2b61931737e662dd293b40578ccornelius /** 10159d709d503bab6e2b61931737e662dd293b40578ccornelius * Creates a ListFormatter appropriate for a locale and style. 10259d709d503bab6e2b61931737e662dd293b40578ccornelius * 10359d709d503bab6e2b61931737e662dd293b40578ccornelius * @param locale The locale. 10459d709d503bab6e2b61931737e662dd293b40578ccornelius * @param style the style, either "standard", "duration", or "duration-short" 10559d709d503bab6e2b61931737e662dd293b40578ccornelius * @param errorCode ICU error code, set if no data available for the given locale. 10659d709d503bab6e2b61931737e662dd293b40578ccornelius * @return A ListFormatter object created from internal data derived from 10759d709d503bab6e2b61931737e662dd293b40578ccornelius * CLDR data. 10859d709d503bab6e2b61931737e662dd293b40578ccornelius * @internal 10959d709d503bab6e2b61931737e662dd293b40578ccornelius */ 11059d709d503bab6e2b61931737e662dd293b40578ccornelius static ListFormatter* createInstance(const Locale& locale, const char* style, UErrorCode& errorCode); 11159d709d503bab6e2b61931737e662dd293b40578ccornelius#endif /* U_HIDE_INTERNAL_API */ 11254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 11354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius /** 11454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * Destructor. 11554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * 116fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius * @stable ICU 50 11754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius */ 11854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius virtual ~ListFormatter(); 11954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 12054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 12154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius /** 12254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * Formats a list of strings. 12354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * 12454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * @param items An array of strings to be combined and formatted. 12554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * @param n_items Length of the array items. 12654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * @param appendTo The string to which the result should be appended to. 12754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * @param errorCode ICU error code, set if there is an error. 12854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * @return Formatted string combining the elements of items, appended to appendTo. 129fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius * @stable ICU 50 13054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius */ 13154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString& format(const UnicodeString items[], int32_t n_items, 13254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString& appendTo, UErrorCode& errorCode) const; 13354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 13459d709d503bab6e2b61931737e662dd293b40578ccornelius#ifndef U_HIDE_INTERNAL_API 13554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius /** 136fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius @internal for MeasureFormat 137fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius */ 138fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UnicodeString& format( 139fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius const UnicodeString items[], 140fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius int32_t n_items, 141fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UnicodeString& appendTo, 142fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius int32_t index, 143fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius int32_t &offset, 144fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UErrorCode& errorCode) const; 145fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius /** 146fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius * @internal constructor made public for testing. 147fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius */ 148fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius ListFormatter(const ListFormatData &data); 149fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius /** 15054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * @internal constructor made public for testing. 15154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius */ 152fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius ListFormatter(const ListFormatInternal* listFormatterInternal); 15359d709d503bab6e2b61931737e662dd293b40578ccornelius#endif /* U_HIDE_INTERNAL_API */ 15454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 15554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius private: 15654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius static void initializeHash(UErrorCode& errorCode); 157fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius static const ListFormatInternal* getListFormatInternal(const Locale& locale, const char *style, UErrorCode& errorCode); 15854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 15954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ListFormatter(); 16054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 161fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius ListFormatInternal* owned; 162fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius const ListFormatInternal* data; 16354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius}; 16454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 16554dcd9b6a06071f647dac967e9e267abb9410720Craig CorneliusU_NAMESPACE_END 16654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 16754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#endif 168