00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef __LISTFORMATTER_H__
00020 #define __LISTFORMATTER_H__
00021
00022 #include "unicode/utypes.h"
00023
00024 #include "unicode/unistr.h"
00025 #include "unicode/locid.h"
00026
00027 U_NAMESPACE_BEGIN
00028
00029 class FieldPositionIterator;
00030 class FieldPositionHandler;
00031
00033 class Hashtable;
00034
00036 struct ListFormatInternal;
00037
00038
00043 struct ListFormatData : public UMemory {
00044 UnicodeString twoPattern;
00045 UnicodeString startPattern;
00046 UnicodeString middlePattern;
00047 UnicodeString endPattern;
00048
00049 ListFormatData(const UnicodeString& two, const UnicodeString& start, const UnicodeString& middle, const UnicodeString& end) :
00050 twoPattern(two), startPattern(start), middlePattern(middle), endPattern(end) {}
00051 };
00071 class U_I18N_API ListFormatter : public UObject{
00072
00073 public:
00074
00079 ListFormatter(const ListFormatter&);
00080
00085 ListFormatter& operator=(const ListFormatter& other);
00086
00095 static ListFormatter* createInstance(UErrorCode& errorCode);
00096
00106 static ListFormatter* createInstance(const Locale& locale, UErrorCode& errorCode);
00107
00108 #ifndef U_HIDE_INTERNAL_API
00109
00119 static ListFormatter* createInstance(const Locale& locale, const char* style, UErrorCode& errorCode);
00120 #endif
00121
00127 virtual ~ListFormatter();
00128
00129
00140 UnicodeString& format(const UnicodeString items[], int32_t n_items,
00141 UnicodeString& appendTo, UErrorCode& errorCode) const;
00142
00143 #ifndef U_HIDE_DRAFT_API
00144
00159 UnicodeString& format(const UnicodeString items[], int32_t n_items,
00160 UnicodeString & appendTo, FieldPositionIterator* posIter,
00161 UErrorCode& errorCode) const;
00162 #endif
00163
00164 #ifndef U_HIDE_INTERNAL_API
00165
00168 UnicodeString& format(
00169 const UnicodeString items[],
00170 int32_t n_items,
00171 UnicodeString& appendTo,
00172 int32_t index,
00173 int32_t &offset,
00174 UErrorCode& errorCode) const;
00178 ListFormatter(const ListFormatData &data, UErrorCode &errorCode);
00182 ListFormatter(const ListFormatInternal* listFormatterInternal);
00183 #endif
00184
00185 private:
00186 static void initializeHash(UErrorCode& errorCode);
00187 static const ListFormatInternal* getListFormatInternal(const Locale& locale, const char *style, UErrorCode& errorCode);
00188 struct ListPatternsSink;
00189 static ListFormatInternal* loadListFormatInternal(const Locale& locale, const char* style, UErrorCode& errorCode);
00190
00191 UnicodeString& format_(
00192 const UnicodeString items[], int32_t n_items, UnicodeString& appendTo,
00193 int32_t index, int32_t &offset, FieldPositionHandler* handler, UErrorCode& errorCode) const;
00194
00195 ListFormatter();
00196
00197 ListFormatInternal* owned;
00198 const ListFormatInternal* data;
00199 };
00200
00201 U_NAMESPACE_END
00202
00203 #endif