Index: devel/icu/Makefile =================================================================== --- devel/icu/Makefile +++ devel/icu/Makefile @@ -2,8 +2,8 @@ # $FreeBSD$ PORTNAME= icu -DISTVERSION= 58_2 -PORTREVISION?= 3 # keep for icu-lx +DISTVERSION= 59_1 +PORTREVISION?= 0 # keep for icu-lx PORTEPOCH?= 1 CATEGORIES?= devel MASTER_SITES= http://download.icu-project.org/files/icu4c/${PORTVERSION}/ @@ -26,7 +26,7 @@ CPPFLAGS+= -DICU_NO_USER_DATA_OVERRIDE MAKE_ARGS= VERBOSE=1 TEST_TARGET= check -USES+= compiler:c++0x gmake pathfix tar:tgz +USES+= compiler:c++11-lib gmake pathfix tar:tgz USE_LDCONFIG= yes WRKSRC= ${WRKDIR}/icu/source Index: devel/icu/distinfo =================================================================== --- devel/icu/distinfo +++ devel/icu/distinfo @@ -1,3 +1,3 @@ -TIMESTAMP = 1481218489 -SHA256 (icu4c-58_2-src.tgz) = 2b0a4410153a9b20de0e20c7d8b66049a72aef244b53683d0d7521371683da0c -SIZE (icu4c-58_2-src.tgz) = 23369902 +TIMESTAMP = 1491550830 +SHA256 (icu4c-59_1-src.tgz) = 7132fdaf9379429d004005217f10e00b7d2319d0fea22bdfddef8991c45b75fe +SIZE (icu4c-59_1-src.tgz) = 22706578 Index: devel/icu/files/patch-common_unicode_platform.h =================================================================== --- devel/icu/files/patch-common_unicode_platform.h +++ devel/icu/files/patch-common_unicode_platform.h @@ -1,6 +1,6 @@ ---- common/unicode/platform.h.orig 2016-03-23 20:49:58 UTC +--- common/unicode/platform.h.orig 2017-03-22 19:06:26 UTC +++ common/unicode/platform.h -@@ -379,8 +379,8 @@ +@@ -382,8 +382,8 @@ */ #ifdef U_IS_BIG_ENDIAN /* Use the predefined value. */ @@ -11,3 +11,21 @@ #elif defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) /* gcc */ # define U_IS_BIG_ENDIAN (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__) +@@ -498,11 +498,15 @@ + # define U_CPLUSPLUS_VERSION 1 + #endif + +-#if (U_PLATFORM == U_PF_AIX || U_PLATFORM == U_PF_OS390) && defined(__cplusplus) &&(U_CPLUSPLUS_VERSION < 11) ++#if defined(__cplusplus) && (U_CPLUSPLUS_VERSION < 11) + // add in std::nullptr_t + namespace std { ++#if (U_PLATFORM == U_PF_AIX || U_PLATFORM == U_PF_OS390) + typedef decltype(nullptr) nullptr_t; +-}; ++#elif defined(__GNUC__) && !defined(__clang__) ++ typedef __decltype(__null) nullptr_t; ++#endif ++} + #endif + + /** Index: devel/icu/files/patch-common_unicode_umachine.h =================================================================== --- /dev/null +++ devel/icu/files/patch-common_unicode_umachine.h @@ -0,0 +1,11 @@ +--- common/unicode/umachine.h.orig 2017-03-16 19:01:12 UTC ++++ common/unicode/umachine.h +@@ -295,7 +295,7 @@ typedef int8_t UBool; + * If 1, then char16_t is a typedef and not a real type (yet) + * @internal + */ +-#if (U_PLATFORM == U_PF_AIX) && defined(__cplusplus) &&(U_CPLUSPLUS_VERSION < 11) ++#if defined(__cplusplus) && (U_CPLUSPLUS_VERSION < 11) + // for AIX, uchar.h needs to be included + # include + # define U_CHAR16_IS_TYPEDEF 1 Index: devel/icu/files/patch-common_unicode_unistr.h =================================================================== --- /dev/null +++ devel/icu/files/patch-common_unicode_unistr.h @@ -0,0 +1,33 @@ +--- common/unicode/unistr.h.orig 2017-03-29 04:44:37 UTC ++++ common/unicode/unistr.h +@@ -117,12 +117,20 @@ class UnicodeStringAppendable; // unicode/appendable. + * The string parameter must be a C string literal. + * The length of the string, not including the terminating + * NUL, must be specified as a constant. ++ * The U_STRING_DECL macro should be invoked exactly once for one ++ * such string variable before it is used. + * @stable ICU 2.0 + */ + #if !U_CHAR16_IS_TYPEDEF + # define UNICODE_STRING(cs, _length) icu::UnicodeString(TRUE, u ## cs, _length) ++#elif defined(U_DECLARE_UTF16) ++# define UNICODE_STRING(cs, _length) icu::UnicodeString(TRUE, (const char16_t *)U_DECLARE_UTF16(cs), _length) ++#elif U_SIZEOF_WCHAR_T==U_SIZEOF_UCHAR && (U_CHARSET_FAMILY==U_ASCII_FAMILY || (U_SIZEOF_UCHAR == 2 && defined(U_WCHAR_IS_UTF16))) ++# define UNICODE_STRING(cs, _length) icu::UnicodeString(TRUE, (const char16_t *)L ## cs, _length) ++#elif U_SIZEOF_UCHAR==1 && U_CHARSET_FAMILY==U_ASCII_FAMILY ++# define UNICODE_STRING(cs, _length) icu::UnicodeString(TRUE, (const char16_t *)cs, _length) + #else +-# define UNICODE_STRING(cs, _length) icu::UnicodeString(TRUE, (const char16_t*)u ## cs, _length) ++# define UNICODE_STRING(cs, _length) icu::UnicodeString(cs, _length, US_INV) + #endif + + /** +@@ -3985,7 +3993,7 @@ UnicodeString::isBufferWritable() const + inline const char16_t * + UnicodeString::getBuffer() const { + if(fUnion.fFields.fLengthAndFlags&(kIsBogus|kOpenGetBuffer)) { +- return nullptr; ++ return NULL; + } else if(fUnion.fFields.fLengthAndFlags&kUsingStackBuffer) { + return fUnion.fStackFields.fBuffer; + } else { Index: devel/icu/files/patch-common_unicode_uvernum.h =================================================================== --- /dev/null +++ devel/icu/files/patch-common_unicode_uvernum.h @@ -0,0 +1,11 @@ +--- common/unicode/uvernum.h.orig 2017-03-21 01:03:49 UTC ++++ common/unicode/uvernum.h +@@ -125,7 +125,7 @@ + * This value will change in the subsequent releases of ICU + * @stable ICU 2.6 + */ +-#if U_PLATFORM_HAS_WINUWP_API == 0 ++#ifndef U_PLATFORM_HAS_WINUWP_API + #define U_ICU_VERSION_SHORT "59" + #else + // U_DISABLE_RENAMING does not impact dat file name Index: devel/icu/files/patch-r39484 =================================================================== --- devel/icu/files/patch-r39484 +++ /dev/null @@ -1,148 +0,0 @@ -https://ssl.icu-project.org/trac/ticket/12827 - -Index: test/intltest/apicoll.h -=================================================================== ---- test/intltest/apicoll.h (revision 39483) -+++ test/intltest/apicoll.h (revision 39484) -@@ -35,6 +35,7 @@ class CollationAPITest: public IntlTestCollator { - * - displayable name in the desired locale - */ - void TestProperty(/* char* par */); -+ void TestKeywordValues(); - - /** - * This tests the RuleBasedCollator -Index: test/intltest/apicoll.cpp -=================================================================== ---- test/intltest/apicoll.cpp (revision 39483) -+++ test/intltest/apicoll.cpp (revision 39484) -@@ -81,17 +81,10 @@ CollationAPITest::TestProperty(/* char* par */) - logln("Test ctors : "); - col = Collator::createInstance(Locale::getEnglish(), success); - if (U_FAILURE(success)){ -- errcheckln(success, "Default Collator creation failed. - %s", u_errorName(success)); -+ errcheckln(success, "English Collator creation failed. - %s", u_errorName(success)); - return; - } - -- StringEnumeration* kwEnum = col->getKeywordValuesForLocale("", Locale::getEnglish(),true,success); -- if (U_FAILURE(success)){ -- errcheckln(success, "Get Keyword Values for Locale failed. - %s", u_errorName(success)); -- return; -- } -- delete kwEnum; -- - col->getVersion(versionArray); - // Check for a version greater than some value rather than equality - // so that we need not update the expected version each time. -@@ -231,6 +224,29 @@ CollationAPITest::TestProperty(/* char* par */) - delete junk; - } - -+void CollationAPITest::TestKeywordValues() { -+ IcuTestErrorCode errorCode(*this, "TestKeywordValues"); -+ LocalPointer col(Collator::createInstance(Locale::getEnglish(), errorCode)); -+ if (errorCode.logIfFailureAndReset("English Collator creation failed")) { -+ return; -+ } -+ -+ LocalPointer kwEnum( -+ col->getKeywordValuesForLocale("collation", Locale::getEnglish(), TRUE, errorCode)); -+ if (errorCode.logIfFailureAndReset("Get Keyword Values for English Collator failed")) { -+ return; -+ } -+ assertTrue("expect at least one collation tailoring for English", kwEnum->count(errorCode) > 0); -+ const char *kw; -+ UBool hasStandard = FALSE; -+ while ((kw = kwEnum->next(NULL, errorCode)) != NULL) { -+ if (strcmp(kw, "standard") == 0) { -+ hasStandard = TRUE; -+ } -+ } -+ assertTrue("expect at least the 'standard' collation tailoring for English", hasStandard); -+} -+ - void - CollationAPITest::TestRuleBasedColl() - { -@@ -2466,6 +2482,7 @@ void CollationAPITest::runIndexedTest( int32_t ind - if (exec) logln("TestSuite CollationAPITest: "); - TESTCASE_AUTO_BEGIN; - TESTCASE_AUTO(TestProperty); -+ TESTCASE_AUTO(TestKeywordValues); - TESTCASE_AUTO(TestOperators); - TESTCASE_AUTO(TestDuplicate); - TESTCASE_AUTO(TestCompare); -Index: i18n/ucol_res.cpp -=================================================================== ---- i18n/ucol_res.cpp (revision 39483) -+++ i18n/ucol_res.cpp (revision 39484) -@@ -680,6 +680,7 @@ ucol_getKeywordValuesForLocale(const char* /*key*/ - return NULL; - } - memcpy(en, &defaultKeywordValues, sizeof(UEnumeration)); -+ ulist_resetList(sink.values); // Initialize the iterator. - en->context = sink.values; - sink.values = NULL; // Avoid deletion in the sink destructor. - return en; -Index: common/ulist.c -=================================================================== ---- common/ulist.c (revision 39483) -+++ common/ulist.c (revision 39484) -@@ -29,7 +29,6 @@ struct UList { - UListNode *tail; - - int32_t size; -- int32_t currentIndex; - }; - - static void ulist_addFirstItem(UList *list, UListNode *newItem); -@@ -51,7 +50,6 @@ U_CAPI UList *U_EXPORT2 ulist_createEmptyList(UErr - newList->head = NULL; - newList->tail = NULL; - newList->size = 0; -- newList->currentIndex = -1; - - return newList; - } -@@ -80,8 +78,9 @@ static void ulist_removeItem(UList *list, UListNod - } else { - p->next->previous = p->previous; - } -- list->curr = NULL; -- list->currentIndex = 0; -+ if (p == list->curr) { -+ list->curr = p->next; -+ } - --list->size; - if (p->forceDelete) { - uprv_free(p->data); -@@ -150,7 +149,6 @@ U_CAPI void U_EXPORT2 ulist_addItemBeginList(UList - newItem->next = list->head; - list->head->previous = newItem; - list->head = newItem; -- list->currentIndex++; - } - - list->size++; -@@ -193,7 +191,6 @@ U_CAPI void *U_EXPORT2 ulist_getNext(UList *list) - - curr = list->curr; - list->curr = curr->next; -- list->currentIndex++; - - return curr->data; - } -@@ -209,7 +206,6 @@ U_CAPI int32_t U_EXPORT2 ulist_getListSize(const U - U_CAPI void U_EXPORT2 ulist_resetList(UList *list) { - if (list != NULL) { - list->curr = list->head; -- list->currentIndex = 0; - } - } - -@@ -272,4 +268,3 @@ U_CAPI void U_EXPORT2 ulist_reset_keyword_values_i - U_CAPI UList * U_EXPORT2 ulist_getListFromEnum(UEnumeration *en) { - return (UList *)(en->context); - } -- Index: devel/icu/files/patch-r39671 =================================================================== --- devel/icu/files/patch-r39671 +++ /dev/null @@ -1,176 +0,0 @@ -Index: test/intltest/utxttest.h -=================================================================== ---- test/intltest/utxttest.h (revision 39670) -+++ test/intltest/utxttest.h (revision 39671) -@@ -38,6 +38,7 @@ class UTextTest : public IntlTest { - void Ticket10562(); - void Ticket10983(); - void Ticket12130(); -+ void Ticket12888(); - - private: - struct m { // Map between native indices & code points. -Index: test/intltest/utxttest.cpp -=================================================================== ---- test/intltest/utxttest.cpp (revision 39670) -+++ test/intltest/utxttest.cpp (revision 39671) -@@ -67,6 +67,8 @@ UTextTest::runIndexedTest(int32_t index, UBool exe - if (exec) Ticket10983(); break; - case 7: name = "Ticket12130"; - if (exec) Ticket12130(); break; -+ case 8: name = "Ticket12888"; -+ if (exec) Ticket12888(); break; - default: name = ""; break; - } - } -@@ -1583,3 +1585,63 @@ void UTextTest::Ticket12130() { - } - utext_close(&ut); - } -+ -+// Ticket 12888: bad handling of illegal utf-8 containing many instances of the archaic, now illegal, -+// six byte utf-8 forms. Original implementation had an assumption that -+// there would be at most three utf-8 bytes per UTF-16 code unit. -+// The five and six byte sequences map to a single replacement character. -+ -+void UTextTest::Ticket12888() { -+ const char *badString = -+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80" -+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80" -+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80" -+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80" -+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80" -+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80" -+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80" -+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80" -+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80" -+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80" -+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80" -+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80" -+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80" -+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80" -+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80" -+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80" -+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80" -+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80" -+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80" -+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"; -+ -+ UErrorCode status = U_ZERO_ERROR; -+ LocalUTextPointer ut(utext_openUTF8(NULL, badString, -1, &status)); -+ TEST_SUCCESS(status); -+ for (;;) { -+ UChar32 c = utext_next32(ut.getAlias()); -+ if (c == U_SENTINEL) { -+ break; -+ } -+ } -+ int32_t endIdx = utext_getNativeIndex(ut.getAlias()); -+ if (endIdx != (int32_t)strlen(badString)) { -+ errln("%s:%d expected=%d, actual=%d", __FILE__, __LINE__, strlen(badString), endIdx); -+ return; -+ } -+ -+ for (int32_t prevIndex = endIdx; prevIndex>0;) { -+ UChar32 c = utext_previous32(ut.getAlias()); -+ int32_t currentIndex = utext_getNativeIndex(ut.getAlias()); -+ if (c != 0xfffd) { -+ errln("%s:%d (expected, actual, index) = (%d, %d, %d)\n", -+ __FILE__, __LINE__, 0xfffd, c, currentIndex); -+ break; -+ } -+ if (currentIndex != prevIndex - 6) { -+ errln("%s:%d: wrong index. Expected, actual = %d, %d", -+ __FILE__, __LINE__, prevIndex - 6, currentIndex); -+ break; -+ } -+ prevIndex = currentIndex; -+ } -+} -Index: common/utext.cpp -=================================================================== ---- common/utext.cpp (revision 39670) -+++ common/utext.cpp (revision 39671) -@@ -847,9 +847,15 @@ U_CDECL_END - //------------------------------------------------------------------------------ - - // Chunk size. --// Must be less than 85, because of byte mapping from UChar indexes to native indexes. --// Worst case is three native bytes to one UChar. (Supplemenaries are 4 native bytes --// to two UChars.) -+// Must be less than 42 (256/6), because of byte mapping from UChar indexes to native indexes. -+// Worst case there are six UTF-8 bytes per UChar. -+// obsolete 6 byte form fd + 5 trails maps to fffd -+// obsolete 5 byte form fc + 4 trails maps to fffd -+// non-shortest 4 byte forms maps to fffd -+// normal supplementaries map to a pair of utf-16, two utf8 bytes per utf-16 unit -+// mapToUChars array size must allow for the worst case, 6. -+// This could be brought down to 4, by treating fd and fc as pure illegal, -+// rather than obsolete lead bytes. But that is not compatible with the utf-8 access macros. - // - enum { UTF8_TEXT_CHUNK_SIZE=32 }; - -@@ -889,7 +895,7 @@ struct UTF8Buf { - // Requires two extra slots, - // one for a supplementary starting in the last normal position, - // and one for an entry for the buffer limit position. -- uint8_t mapToUChars[UTF8_TEXT_CHUNK_SIZE*3+6]; // Map native offset from bufNativeStart to -+ uint8_t mapToUChars[UTF8_TEXT_CHUNK_SIZE*6+6]; // Map native offset from bufNativeStart to - // correspoding offset in filled part of buf. - int32_t align; - }; -@@ -1032,6 +1038,7 @@ utf8TextAccess(UText *ut, int64_t index, UBool for - // Requested index is in this buffer. - u8b = (UTF8Buf *)ut->p; // the current buffer - mapIndex = ix - u8b->toUCharsMapStart; -+ U_ASSERT(mapIndex < (int32_t)sizeof(UTF8Buf::mapToUChars)); - ut->chunkOffset = u8b->mapToUChars[mapIndex] - u8b->bufStartIdx; - return TRUE; - -@@ -1298,6 +1305,10 @@ fillReverse: - // Can only do this if the incoming index is somewhere in the interior of the string. - // If index is at the end, there is no character there to look at. - if (ix != ut->b) { -+ // Note: this function will only move the index back if it is on a trail byte -+ // and there is a preceding lead byte and the sequence from the lead -+ // through this trail could be part of a valid UTF-8 sequence -+ // Otherwise the index remains unchanged. - U8_SET_CP_START(s8, 0, ix); - } - -@@ -1311,7 +1322,10 @@ fillReverse: - UChar *buf = u8b->buf; - uint8_t *mapToNative = u8b->mapToNative; - uint8_t *mapToUChars = u8b->mapToUChars; -- int32_t toUCharsMapStart = ix - (UTF8_TEXT_CHUNK_SIZE*3 + 1); -+ int32_t toUCharsMapStart = ix - sizeof(UTF8Buf::mapToUChars) + 1; -+ // Note that toUCharsMapStart can be negative. Happens when the remaining -+ // text from current position to the beginning is less than the buffer size. -+ // + 1 because mapToUChars must have a slot at the end for the bufNativeLimit entry. - int32_t destIx = UTF8_TEXT_CHUNK_SIZE+2; // Start in the overflow region - // at end of buffer to leave room - // for a surrogate pair at the -@@ -1338,6 +1352,7 @@ fillReverse: - if (c<0x80) { - // Special case ASCII range for speed. - buf[destIx] = (UChar)c; -+ U_ASSERT(toUCharsMapStart <= srcIx); - mapToUChars[srcIx - toUCharsMapStart] = (uint8_t)destIx; - mapToNative[destIx] = (uint8_t)(srcIx - toUCharsMapStart); - } else { -@@ -1367,6 +1382,7 @@ fillReverse: - do { - mapToUChars[sIx-- - toUCharsMapStart] = (uint8_t)destIx; - } while (sIx >= srcIx); -+ U_ASSERT(toUCharsMapStart <= (srcIx+1)); - - // Set native indexing limit to be the current position. - // We are processing a non-ascii, non-native-indexing char now; -@@ -1541,6 +1557,7 @@ utf8TextMapIndexToUTF16(const UText *ut, int64_t i - U_ASSERT(index>=ut->chunkNativeStart+ut->nativeIndexingLimit); - U_ASSERT(index<=ut->chunkNativeLimit); - int32_t mapIndex = index - u8b->toUCharsMapStart; -+ U_ASSERT(mapIndex < (int32_t)sizeof(UTF8Buf::mapToUChars)); - int32_t offset = u8b->mapToUChars[mapIndex] - u8b->bufStartIdx; - U_ASSERT(offset>=0 && offset<=ut->chunkLength); - return offset; Index: devel/icu/pkg-plist =================================================================== --- devel/icu/pkg-plist +++ devel/icu/pkg-plist @@ -1,3 +1,4 @@ +sbin/escapesrc sbin/icupkg sbin/gensprep sbin/gennorm2 @@ -44,6 +45,8 @@ include/unicode/bytestriebuilder.h include/unicode/calendar.h include/unicode/caniter.h +include/unicode/casemap.h +include/unicode/char16ptr.h include/unicode/chariter.h include/unicode/choicfmt.h include/unicode/coleitr.h @@ -63,6 +66,7 @@ include/unicode/dtitvinf.h include/unicode/dtptngen.h include/unicode/dtrule.h +include/unicode/edits.h include/unicode/enumset.h include/unicode/errorcode.h include/unicode/fieldpos.h