OLD | NEW |
(Empty) | |
| 1 /* |
| 2 ********************************************************************************
********* |
| 3 * Copyright (C) 2015, International Business Machines |
| 4 * Corporation and others. All Rights Reserved. |
| 5 ********************************************************************************
********* |
| 6 */ |
| 7 |
| 8 #include "unicode/utypes.h" |
| 9 |
| 10 #if !UCONFIG_NO_FORMATTING |
| 11 |
| 12 #include "unicode/ulistformatter.h" |
| 13 #include "unicode/listformatter.h" |
| 14 #include "unicode/localpointer.h" |
| 15 #include "cmemory.h" |
| 16 |
| 17 U_NAMESPACE_USE |
| 18 |
| 19 U_CAPI UListFormatter* U_EXPORT2 |
| 20 ulistfmt_open(const char* locale, |
| 21 UErrorCode* status) |
| 22 { |
| 23 if (U_FAILURE(*status)) { |
| 24 return NULL; |
| 25 } |
| 26 LocalPointer<ListFormatter> listfmt(ListFormatter::createInstance(Locale(loc
ale), *status)); |
| 27 if (U_FAILURE(*status)) { |
| 28 return NULL; |
| 29 } |
| 30 return (UListFormatter*)listfmt.orphan(); |
| 31 } |
| 32 |
| 33 |
| 34 U_CAPI void U_EXPORT2 |
| 35 ulistfmt_close(UListFormatter *listfmt) |
| 36 { |
| 37 delete (ListFormatter*)listfmt; |
| 38 } |
| 39 |
| 40 |
| 41 U_CAPI int32_t U_EXPORT2 |
| 42 ulistfmt_format(const UListFormatter* listfmt, |
| 43 const UChar* const strings[], |
| 44 const int32_t * stringLengths, |
| 45 int32_t stringCount, |
| 46 UChar* result, |
| 47 int32_t resultCapacity, |
| 48 UErrorCode* status) |
| 49 { |
| 50 if (U_FAILURE(*status)) { |
| 51 return -1; |
| 52 } |
| 53 if (stringCount < 0 || (strings == NULL && stringCount > 0) || ((result == N
ULL)? resultCapacity != 0 : resultCapacity < 0)) { |
| 54 *status = U_ILLEGAL_ARGUMENT_ERROR; |
| 55 return -1; |
| 56 } |
| 57 UnicodeString ustringsStackBuf[4]; |
| 58 UnicodeString* ustrings = ustringsStackBuf; |
| 59 if (stringCount > UPRV_LENGTHOF(ustringsStackBuf)) { |
| 60 ustrings = new UnicodeString[stringCount]; |
| 61 if (ustrings == NULL) { |
| 62 *status = U_MEMORY_ALLOCATION_ERROR; |
| 63 return -1; |
| 64 } |
| 65 } |
| 66 if (stringLengths == NULL) { |
| 67 for (int32_t stringIndex = 0; stringIndex < stringCount; stringIndex++)
{ |
| 68 ustrings[stringIndex].setTo(TRUE, strings[stringIndex], -1); |
| 69 } |
| 70 } else { |
| 71 for (int32_t stringIndex = 0; stringIndex < stringCount; stringIndex++)
{ |
| 72 ustrings[stringIndex].setTo(stringLengths[stringIndex] < 0, strings[
stringIndex], stringLengths[stringIndex]); |
| 73 } |
| 74 } |
| 75 UnicodeString res; |
| 76 if (result != NULL) { |
| 77 // NULL destination for pure preflighting: empty dummy string |
| 78 // otherwise, alias the destination buffer (copied from udat_format) |
| 79 res.setTo(result, 0, resultCapacity); |
| 80 } |
| 81 ((const ListFormatter*)listfmt)->format( ustrings, stringCount, res, *status
); |
| 82 if (ustrings != ustringsStackBuf) { |
| 83 delete[] ustrings; |
| 84 } |
| 85 return res.extract(result, resultCapacity, *status); |
| 86 } |
| 87 |
| 88 |
| 89 #endif /* #if !UCONFIG_NO_FORMATTING */ |
OLD | NEW |