| Index: source/common/ulistformatter.cpp
|
| diff --git a/source/common/ulistformatter.cpp b/source/common/ulistformatter.cpp
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..6931cddfe07c060196adca478e6e87b43682ec02
|
| --- /dev/null
|
| +++ b/source/common/ulistformatter.cpp
|
| @@ -0,0 +1,89 @@
|
| +/*
|
| +*****************************************************************************************
|
| +* Copyright (C) 2015, International Business Machines
|
| +* Corporation and others. All Rights Reserved.
|
| +*****************************************************************************************
|
| +*/
|
| +
|
| +#include "unicode/utypes.h"
|
| +
|
| +#if !UCONFIG_NO_FORMATTING
|
| +
|
| +#include "unicode/ulistformatter.h"
|
| +#include "unicode/listformatter.h"
|
| +#include "unicode/localpointer.h"
|
| +#include "cmemory.h"
|
| +
|
| +U_NAMESPACE_USE
|
| +
|
| +U_CAPI UListFormatter* U_EXPORT2
|
| +ulistfmt_open(const char* locale,
|
| + UErrorCode* status)
|
| +{
|
| + if (U_FAILURE(*status)) {
|
| + return NULL;
|
| + }
|
| + LocalPointer<ListFormatter> listfmt(ListFormatter::createInstance(Locale(locale), *status));
|
| + if (U_FAILURE(*status)) {
|
| + return NULL;
|
| + }
|
| + return (UListFormatter*)listfmt.orphan();
|
| +}
|
| +
|
| +
|
| +U_CAPI void U_EXPORT2
|
| +ulistfmt_close(UListFormatter *listfmt)
|
| +{
|
| + delete (ListFormatter*)listfmt;
|
| +}
|
| +
|
| +
|
| +U_CAPI int32_t U_EXPORT2
|
| +ulistfmt_format(const UListFormatter* listfmt,
|
| + const UChar* const strings[],
|
| + const int32_t * stringLengths,
|
| + int32_t stringCount,
|
| + UChar* result,
|
| + int32_t resultCapacity,
|
| + UErrorCode* status)
|
| +{
|
| + if (U_FAILURE(*status)) {
|
| + return -1;
|
| + }
|
| + if (stringCount < 0 || (strings == NULL && stringCount > 0) || ((result == NULL)? resultCapacity != 0 : resultCapacity < 0)) {
|
| + *status = U_ILLEGAL_ARGUMENT_ERROR;
|
| + return -1;
|
| + }
|
| + UnicodeString ustringsStackBuf[4];
|
| + UnicodeString* ustrings = ustringsStackBuf;
|
| + if (stringCount > UPRV_LENGTHOF(ustringsStackBuf)) {
|
| + ustrings = new UnicodeString[stringCount];
|
| + if (ustrings == NULL) {
|
| + *status = U_MEMORY_ALLOCATION_ERROR;
|
| + return -1;
|
| + }
|
| + }
|
| + if (stringLengths == NULL) {
|
| + for (int32_t stringIndex = 0; stringIndex < stringCount; stringIndex++) {
|
| + ustrings[stringIndex].setTo(TRUE, strings[stringIndex], -1);
|
| + }
|
| + } else {
|
| + for (int32_t stringIndex = 0; stringIndex < stringCount; stringIndex++) {
|
| + ustrings[stringIndex].setTo(stringLengths[stringIndex] < 0, strings[stringIndex], stringLengths[stringIndex]);
|
| + }
|
| + }
|
| + UnicodeString res;
|
| + if (result != NULL) {
|
| + // NULL destination for pure preflighting: empty dummy string
|
| + // otherwise, alias the destination buffer (copied from udat_format)
|
| + res.setTo(result, 0, resultCapacity);
|
| + }
|
| + ((const ListFormatter*)listfmt)->format( ustrings, stringCount, res, *status );
|
| + if (ustrings != ustringsStackBuf) {
|
| + delete[] ustrings;
|
| + }
|
| + return res.extract(result, resultCapacity, *status);
|
| +}
|
| +
|
| +
|
| +#endif /* #if !UCONFIG_NO_FORMATTING */
|
|
|