From 08b89b0a244153b9f5bbb2f49c55ab0f7298122e Mon Sep 17 00:00:00 2001 From: Apple Date: Tue, 10 Mar 2015 17:57:33 +0000 Subject: [PATCH] ICU-531.48.tar.gz --- icuSources/common/brkiter.cpp | 14 +- icuSources/common/ualoc.cpp | 8 +- icuSources/common/ubidi_props_data.h | 58 +- icuSources/common/uchar_props_data.h | 12 +- icuSources/data/brkitr/brkfiles.mk | 6 +- icuSources/data/brkitr/char.txt | 86 +- icuSources/data/brkitr/fi.txt | 3 + icuSources/data/brkitr/ja.txt | 5 +- icuSources/data/brkitr/line.txt | 30 +- icuSources/data/brkitr/line_fi.txt | 32 +- icuSources/data/brkitr/line_ja.txt | 27 +- icuSources/data/brkitr/line_loose.txt | 717 +++++++++++++++++ icuSources/data/brkitr/line_loose_cj.txt | 750 ++++++++++++++++++ icuSources/data/brkitr/line_loose_fi.txt | 725 +++++++++++++++++ icuSources/data/brkitr/line_normal.txt | 705 ++++++++++++++++ icuSources/data/brkitr/line_normal_cj.txt | 719 +++++++++++++++++ icuSources/data/brkitr/line_normal_fi.txt | 715 +++++++++++++++++ icuSources/data/brkitr/root.txt | 3 + icuSources/data/brkitr/word.txt | 82 +- icuSources/data/brkitr/word_POSIX.txt | 82 +- icuSources/data/brkitr/zh.txt | 17 + icuSources/data/brkitr/zh_Hant.txt | 17 + icuSources/data/curr/supplementalData.txt | 13 +- icuSources/data/in/ubidi.icu | Bin 21776 -> 21768 bytes icuSources/data/in/unames.icu | Bin 204196 -> 204196 bytes icuSources/data/in/uprops.icu | Bin 103512 -> 103524 bytes icuSources/data/locales/da.txt | 12 +- icuSources/data/locales/en.txt | 2 +- icuSources/data/locales/es.txt | 36 +- icuSources/data/locales/es_419.txt | 9 + icuSources/data/locales/es_MX.txt | 34 +- icuSources/data/locales/fr.txt | 4 +- icuSources/data/locales/hu.txt | 14 + icuSources/data/locales/it.txt | 44 +- icuSources/data/locales/it_CH.txt | 4 +- icuSources/data/locales/ms.txt | 4 +- icuSources/data/locales/pl.txt | 8 + icuSources/data/locales/sv.txt | 28 + icuSources/data/locales/tr.txt | 14 + icuSources/data/locales/zh_Hans_HK.txt | 14 +- icuSources/data/locales/zh_Hans_MO.txt | 4 +- icuSources/data/locales/zh_Hant.txt | 30 +- icuSources/data/locales/zh_Hant_HK.txt | 14 +- icuSources/data/locales/zh_Hant_MO.txt | 12 +- icuSources/data/misc/metaZones.txt | 19 +- icuSources/data/misc/windowsZones.txt | 10 +- icuSources/data/misc/zoneinfo64.txt | 126 ++- icuSources/data/unidata/ApplePUApatch.txt | 52 +- .../data/unidata/DerivedCoreProperties.txt | 2 +- icuSources/data/unidata/UnicodeData.txt | 5 + icuSources/data/unidata/ppucd.txt | 8 +- icuSources/i18n/decimfmt.cpp | 2 +- icuSources/i18n/smpdtfmt.cpp | 42 +- icuSources/test/cintltst/cloctst.c | 77 ++ icuSources/test/intltest/dcfmapts.cpp | 8 + icuSources/test/intltest/measfmttest.cpp | 6 +- icuSources/test/intltest/rbbitst.cpp | 2 +- icuSources/test/intltest/tztest.cpp | 6 +- icuSources/test/testdata/rbbitst.txt | 109 ++- makefile | 4 +- 60 files changed, 5242 insertions(+), 349 deletions(-) create mode 100644 icuSources/data/brkitr/line_loose.txt create mode 100644 icuSources/data/brkitr/line_loose_cj.txt create mode 100644 icuSources/data/brkitr/line_loose_fi.txt create mode 100644 icuSources/data/brkitr/line_normal.txt create mode 100644 icuSources/data/brkitr/line_normal_cj.txt create mode 100644 icuSources/data/brkitr/line_normal_fi.txt create mode 100644 icuSources/data/brkitr/zh.txt create mode 100644 icuSources/data/brkitr/zh_Hant.txt diff --git a/icuSources/common/brkiter.cpp b/icuSources/common/brkiter.cpp index 5931ebf7..b6ff490c 100644 --- a/icuSources/common/brkiter.cpp +++ b/icuSources/common/brkiter.cpp @@ -389,6 +389,7 @@ BreakIterator::createInstance(const Locale& loc, int32_t kind, UErrorCode& statu } // ------------------------------------- +enum { kLBTypeLenMax = 32 }; BreakIterator* BreakIterator::makeInstance(const Locale& loc, int32_t kind, UErrorCode& status) @@ -397,6 +398,7 @@ BreakIterator::makeInstance(const Locale& loc, int32_t kind, UErrorCode& status) if (U_FAILURE(status)) { return NULL; } + char lbType[kLBTypeLenMax]; BreakIterator *result = NULL; switch (kind) { @@ -407,7 +409,17 @@ BreakIterator::makeInstance(const Locale& loc, int32_t kind, UErrorCode& status) result = BreakIterator::buildInstance(loc, "word", kind, status); break; case UBRK_LINE: - result = BreakIterator::buildInstance(loc, "line", kind, status); + uprv_strcpy(lbType, "line"); + { + char lbKeyValue[kLBTypeLenMax]; + UErrorCode kvStatus = U_ZERO_ERROR; + loc.getKeywordValue("lb", lbKeyValue, kLBTypeLenMax, kvStatus); + if (U_SUCCESS(kvStatus) && (uprv_strcmp(lbKeyValue,"strict")==0 || uprv_strcmp(lbKeyValue,"normal")==0 || uprv_strcmp(lbKeyValue,"loose")==0)) { + uprv_strcat(lbType, "_"); + uprv_strcat(lbType, lbKeyValue); + } + } + result = BreakIterator::buildInstance(loc, lbType, kind, status); break; case UBRK_SENTENCE: result = BreakIterator::buildInstance(loc, "sentence", kind, status); diff --git a/icuSources/common/ualoc.cpp b/icuSources/common/ualoc.cpp index 21a0ec9a..d61accb2 100644 --- a/icuSources/common/ualoc.cpp +++ b/icuSources/common/ualoc.cpp @@ -188,6 +188,7 @@ ualoc_getAppleParent(const char* localeID, int32_t len; UErrorCode tempStatus; char locbuf[ULOC_FULLNAME_CAPACITY+1]; + char * foundDoubleUnderscore; if (U_FAILURE(*err)) { return 0; @@ -196,7 +197,7 @@ ualoc_getAppleParent(const char* localeID, *err = U_ILLEGAL_ARGUMENT_ERROR; return 0; } - len = uloc_canonicalize(localeID, locbuf, ULOC_FULLNAME_CAPACITY, err); + len = uloc_getBaseName(localeID, locbuf, ULOC_FULLNAME_CAPACITY, err); /* canonicalize and strip keywords */ if (U_FAILURE(*err)) { return 0; } @@ -204,6 +205,11 @@ ualoc_getAppleParent(const char* localeID, locbuf[ULOC_FULLNAME_CAPACITY] = 0; *err = U_ZERO_ERROR; } + foundDoubleUnderscore = uprv_strstr(locbuf, "__"); /* __ comes from bad/missing subtag or variant */ + if (foundDoubleUnderscore != NULL) { + *foundDoubleUnderscore = 0; /* terminate at the __ */ + len = uprv_strlen(locbuf); + } if (len >= 2 && uprv_strncmp(locbuf, "zh", 2) == 0) { const char ** forceParentPtr = forceParent; const char * testCurLoc; diff --git a/icuSources/common/ubidi_props_data.h b/icuSources/common/ubidi_props_data.h index 7c66df44..3beb207d 100644 --- a/icuSources/common/ubidi_props_data.h +++ b/icuSources/common/ubidi_props_data.h @@ -16,13 +16,13 @@ static const UVersionInfo ubidi_props_dataVersion={6,3,0,0}; #if !U_PLATFORM_IS_DARWIN_BASED static const int32_t ubidi_props_indexes[UBIDI_IX_TOP]={0x10,0x53f0,0x50b8,0x1a,0x620,0x8b0,0,0,0,0,0,0,0,0,0,0x3902b6}; #else /* !U_PLATFORM_IS_DARWIN_BASED */ -static const int32_t ubidi_props_indexes[UBIDI_IX_TOP]={0x10,0x54f0,0x51b8,0x1a,0x620,0x8b0,0,0,0,0,0,0,0,0,0,0x3902b6}; +static const int32_t ubidi_props_indexes[UBIDI_IX_TOP]={0x10,0x54e8,0x51b0,0x1a,0x620,0x8b0,0,0,0,0,0,0,0,0,0,0x3902b6}; #endif /* !U_PLATFORM_IS_DARWIN_BASED */ #if !U_PLATFORM_IS_DARWIN_BASED static const uint16_t ubidi_props_trieIndex[10324]={ #else /* !U_PLATFORM_IS_DARWIN_BASED */ -static const uint16_t ubidi_props_trieIndex[10452]={ +static const uint16_t ubidi_props_trieIndex[10448]={ #endif /* !U_PLATFORM_IS_DARWIN_BASED */ 0x320,0x328,0x330,0x338,0x350,0x358,0x360,0x368,0x340,0x348,0x340,0x348,0x340,0x348,0x340,0x348, 0x340,0x348,0x340,0x348,0x36e,0x376,0x37e,0x386,0x38e,0x396,0x392,0x39a,0x3a2,0x3aa,0x3a5,0x3ad, @@ -256,8 +256,8 @@ static const uint16_t ubidi_props_trieIndex[10452]={ 0x3d5,0x3d5,0x3d5,0x43f,0x43f,0x43f,0x43f,0x43f,0x43f,0x43f,0x9a7,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, 0x3d5,0x3d5,0x3d5,0x5ee,0x7b9,0x5ee,0x5ee,0x5f1,0x9b7,0x9bf,0x340,0x9af,0x340,0x340,0x9c7,0x340, 0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x5ee,0x9cf,0x5ee,0x9d5,0x5f1, -0x5ee,0x9dd,0x9e5,0x5ee,0x9ed,0x9f5,0x5ee,0x5ee,0x5ee,0x5ee,0x9f7,0x5ee,0x9ff,0xa07,0x7f0,0x340, -0x340,0x340,0x6fb,0x5ee,0x5ee,0xa0f,0x340,0x5ee,0x5ee,0x6f9,0x340,0x5ee,0x5ee,0x5ee,0x5f1,0x340, +0x5ee,0x9dd,0x9e5,0x5ee,0x9ec,0x9f4,0x5ee,0x5ee,0x5ee,0x5ee,0x9f6,0x5ee,0x9fe,0xa06,0x7f0,0x340, +0x340,0x340,0x6fb,0x5ee,0x5ee,0xa0e,0x340,0x5ee,0x5ee,0x6f9,0x340,0x5ee,0x5ee,0x5ee,0x5f1,0x340, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ 0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340, 0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340, @@ -270,12 +270,12 @@ static const uint16_t ubidi_props_trieIndex[10452]={ 0xa04,0xa04,0xa04,0xa04,0xa04,0xa04,0xa04,0xa04,0xa04,0xa04,0xa04,0xa04,0xa04,0xa04,0xa04,0xa04, 0xa04,0xa04,0xa04,0xa04,0xa04,0xa04,0xa04,0xa04,0xa04,0xa04,0xa04,0xa04,0xa04,0xa04,0xa04,0x31f, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0xa13,0xa23, -0xa1b,0xa1b,0xa1b,0xa24,0xa24,0xa24,0xa24,0x38e,0x38e,0x38e,0x38e,0x38e,0x38e,0x38e,0xa2c,0xa24, -0xa24,0xa24,0xa24,0xa24,0xa24,0xa24,0xa24,0xa24,0xa24,0xa24,0xa24,0xa24,0xa24,0xa24,0xa24,0xa24, -0xa24,0xa24,0xa24,0xa24,0xa24,0xa24,0xa24,0xa24,0xa24,0xa24,0xa24,0xa24,0xa24,0xa24,0xa24,0xa24, -0xa24,0xa24,0xa24,0xa24,0xa24,0xa24,0xa24,0xa24,0xa24,0xa24,0xa24,0xa24,0xa24,0xa24,0xa24,0xa24, -0xa24,0xa24,0xa24,0xa24,0xa24,0xa24,0xa24,0xa24,0xa24,0xa24,0xa24,0xa24,0xa24,0xa24,0xa24,0x31f, +0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0x340,0xa12,0xa22, +0xa1a,0xa1a,0xa1a,0xa23,0xa23,0xa23,0xa23,0x38e,0x38e,0x38e,0x38e,0x38e,0x38e,0x38e,0xa2b,0xa23, +0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23, +0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23, +0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23, +0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0x31f, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,8,7,8,9,7,0x12,0x12, 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,7,7,7,8, @@ -715,26 +715,60 @@ static const uint16_t ubidi_props_trieIndex[10452]={ 0xa,0,0,0,0xa,0xa,0xa,0xa,0xa,0,0xa,0xa,0xa,0xa,0xa,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +#if !U_PLATFORM_IS_DARWIN_BASED 0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0xa, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ 0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +#if !U_PLATFORM_IS_DARWIN_BASED 0xa,0xa,0xa,0,0xa,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0, +0xa,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ 0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +#if !U_PLATFORM_IS_DARWIN_BASED 0xa,0xa,0xa,0xa,0,0xa,0xa,0xa,0xa,0,0,0,0xa,0xa,0xa,0xa, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0,0xa,0xa,0xa,0xa,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ 0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +#if !U_PLATFORM_IS_DARWIN_BASED 0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0xa,0xa,0xa,0xa, 0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa, 0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0, 0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0xa,0xa,0xa,0xa,0xa,0xa,0,0,0xa,0xa,0xa,0xa,0,0,0,0, +0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +#if !U_PLATFORM_IS_DARWIN_BASED 0,0,0,0,0,0,0,0,0,0,0x12,0x12,0xb2,0xb2,0xb2,0xb2, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0,0,0,0,0,0,0x12,0x12,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ 0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2, +#if !U_PLATFORM_IS_DARWIN_BASED 0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0x12,0xb2,0x12,0x12, 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, 0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0x12,0xb2,0x12,0x12,0x12,0x12,0x12,0x12, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, +#if !U_PLATFORM_IS_DARWIN_BASED 0,0,0,0 +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0x12,0x12,0x12,0x12, +0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0,0,0,0 +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ }; static const uint32_t ubidi_props_mirrors[26]={ @@ -799,7 +833,7 @@ static const UBiDiProps ubidi_props_singleton={ #if !U_PLATFORM_IS_DARWIN_BASED 7124, #else /* !U_PLATFORM_IS_DARWIN_BASED */ - 7252, + 7248, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ 0x1a0, 0xd00, @@ -809,7 +843,7 @@ static const UBiDiProps ubidi_props_singleton={ #if !U_PLATFORM_IS_DARWIN_BASED 0x2850, #else /* !U_PLATFORM_IS_DARWIN_BASED */ - 0x28d0, + 0x28cc, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ NULL, 0, FALSE, FALSE, 0, NULL }, diff --git a/icuSources/common/uchar_props_data.h b/icuSources/common/uchar_props_data.h index 902e02df..60af4306 100644 --- a/icuSources/common/uchar_props_data.h +++ b/icuSources/common/uchar_props_data.h @@ -1480,7 +1480,7 @@ static const uint16_t propsTrie_index[18064]={ 0x1b,0,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b, 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0x1b,0,0x1b,0x1b, +0,0,0,0,0,0,0,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0,0x1b,0x1b, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, #if !U_PLATFORM_IS_DARWIN_BASED @@ -3386,7 +3386,7 @@ static const uint16_t propsVectorsTrie_index[23612]={ 0x1266,0x1266,0x1266,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3, 0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266, 0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3, -0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266, +0x1b3,0x1b3,0x1b3,0x136b,0x136b,0x136b,0x136b,0x136b,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266, 0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266, 0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1b3,0x1266,0x1b3,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266, 0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266, @@ -4643,7 +4643,7 @@ static const UTrie2 propsVectorsTrie={ #if !U_PLATFORM_IS_DARWIN_BASED static const uint32_t propsVectors[4917]={ #else /* !U_PLATFORM_IS_DARWIN_BASED */ -static const uint32_t propsVectors[4971]={ +static const uint32_t propsVectors[4974]={ #endif /* !U_PLATFORM_IS_DARWIN_BASED */ 0x67,0,0,0x67,0x80000,0x20,0x867,0,0,0xa67,0,0,0xb67,0,0,0xc67, 0,0,0xd67,0,0,0xe67,0,0,0xf67,0,0,0x1067,0,0,0x1167,0, @@ -5184,13 +5184,13 @@ static const uint32_t propsVectors[4971]={ 0x6804400,0x962540,0x6100d997,0x7c00100,0x230400,0x6100d997,0xc000010,0x448000,0x6100da98,0x6800000,0x1329800,0x6100da98,0x7c00100,0x230400,0x6100db71,0x4000000, 0x200000,0x6100dc99,0x2802100,0x962460,0x6100dc99,0x2802400,0x962460,0x6100dc99,0x6800000,0x1329800,0x6100dc99,0x6800100,0x962540,0x6100dc99,0x6804400,0x962540, 0x6100dc99,0x7c00100,0x230400,0x610a4711,0x7c40300,0xe30000,0x610a4f11,0x7c00300,0xe30001,0x6140af2d,0x6800100,0x962540,0x6180af2d,0x2802400,0x962460,0x62002a00, -0x4000000,0x1600000,0x63002800,0x80000,0x918820,0x63c00c09,0x80000,0x918820,0x70002a00,0x4000000,0x1600000}; +0x4000000,0x1600000,0x63002800,0x80000,0x918820,0x63c00c09,0x80000,0x918820,0x70002a00,0x4000000,0x1600000,0x8000cd00,0x4000000,0xe00000}; #endif /* !U_PLATFORM_IS_DARWIN_BASED */ #if !U_PLATFORM_IS_DARWIN_BASED static const int32_t countPropsVectors=4917; #else /* !U_PLATFORM_IS_DARWIN_BASED */ -static const int32_t countPropsVectors=4971; +static const int32_t countPropsVectors=4974; #endif /* !U_PLATFORM_IS_DARWIN_BASED */ static const int32_t propsVectorsColumns=3; static const uint16_t scriptExtensions[74]={ @@ -5203,6 +5203,6 @@ static const uint16_t scriptExtensions[74]={ #if !U_PLATFORM_IS_DARWIN_BASED static const int32_t indexes[UPROPS_INDEX_COUNT]={0x231a,0x231a,0x231a,0x231a,0x50da,3,0x640f,0x6434,0x6434,0x6434,0xadca0,0x2774191,0,0,0,0}; #else /* !U_PLATFORM_IS_DARWIN_BASED */ -static const int32_t indexes[UPROPS_INDEX_COUNT]={0x235c,0x235c,0x235c,0x235c,0x517e,3,0x64e9,0x650e,0x650e,0x650e,0xadca0,0x2774191,0,0,0,0}; +static const int32_t indexes[UPROPS_INDEX_COUNT]={0x235c,0x235c,0x235c,0x235c,0x517e,3,0x64ec,0x6511,0x6511,0x6511,0xadca0,0x2774191,0,0,0,0}; #endif /* !U_PLATFORM_IS_DARWIN_BASED */ diff --git a/icuSources/data/brkitr/brkfiles.mk b/icuSources/data/brkitr/brkfiles.mk index 54e44a8d..681e8dfd 100644 --- a/icuSources/data/brkitr/brkfiles.mk +++ b/icuSources/data/brkitr/brkfiles.mk @@ -38,12 +38,14 @@ BRK_DICT_SOURCE = cjdict.txt khmerdict.txt laodict.txt thaidict.txt # List of break iterator files (brk). -BRK_SOURCE = char.txt line.txt line_fi.txt line_ja.txt\ +BRK_SOURCE = char.txt line.txt line_fi.txt\ + line_loose.txt line_loose_cj.txt line_loose_fi.txt\ + line_normal.txt line_normal_cj.txt line_normal_fi.txt\ sent.txt sent_el.txt title.txt word.txt word_POSIX.txt # Ordinary resources BRK_RES_SOURCE = de.txt el.txt en.txt en_US.txt\ en_US_POSIX.txt es.txt fi.txt fr.txt it.txt\ - ja.txt pt.txt ru.txt + ja.txt pt.txt ru.txt zh.txt zh_Hant.txt diff --git a/icuSources/data/brkitr/char.txt b/icuSources/data/brkitr/char.txt index 58f09ba3..aa5d906c 100644 --- a/icuSources/data/brkitr/char.txt +++ b/icuSources/data/brkitr/char.txt @@ -1,5 +1,5 @@ # -# Copyright (C) 2002-2013, International Business Machines Corporation and others. +# Copyright (C) 2002-2015, International Business Machines Corporation and others. # All Rights Reserved. # # file: char.txt @@ -19,47 +19,58 @@ $Control = [\p{Grapheme_Cluster_Break = Control}]; $Extend = [\p{Grapheme_Cluster_Break = Extend}]; $SpacingMark = [\p{Grapheme_Cluster_Break = SpacingMark}]; -$RI_A = \U0001F1E6; # Trail ERTU -$RI_B = \U0001F1E7; # Trail EGR -$RI_C = \U0001F1E8; # Trail AHLNZ +$RI_A = \U0001F1E6; # Trail ETU +$RI_B = \U0001F1E7; # Trail ER +$RI_C = \U0001F1E8; # Trail AHLNO $RI_D = \U0001F1E9; # Trail EK -$RI_E = \U0001F1EA; # Trail GS +$RI_E = \U0001F1EA; # Trail S $RI_F = \U0001F1EB; # Trail IR -$RI_G = \U0001F1EC; # Trail BR -$RI_H = \U0001F1ED; # Trail KU -$RI_I = \U0001F1EE; # Trail DLNT +$RI_G = \U0001F1EC; # Trail B +$RI_H = \U0001F1ED; # Trail K +$RI_I = \U0001F1EE; # Trail DELNT $RI_J = \U0001F1EF; # Trail OP $RI_K = \U0001F1F0; # Trail R -$RI_L = \U0001F1F1; # Trail B $RI_M = \U0001F1F2; # Trail OXY -$RI_N = \U0001F1F3; # Trail LO -$RI_P = \U0001F1F5; # Trail LT -$RI_R = \U0001F1F7; # Trail OU -$RI_S = \U0001F1F8; # Trail AEGK -$RI_T = \U0001F1F9; # Trail HRW -$RI_U = \U0001F1FA; # Trail AS +$RI_N = \U0001F1F3; # Trail LOZ +$RI_P = \U0001F1F5; # Trail HLRT +$RI_R = \U0001F1F7; # Trail U +$RI_S = \U0001F1F8; # Trail AEG +$RI_T = \U0001F1F9; # Trail R +$RI_U = \U0001F1FA; # Trail S $RI_V = \U0001F1FB; # Trail N +$RI_Z = \U0001F1FF; # Trail A +# unused trail values, safe as addl lead: C F J M Q V W +# unused lead values, safe as addl trail: L O Q W X Y -$RI_A_End = [\U0001F1EA \U0001F1F7 \U0001F1F9 \U0001F1FA]; # ERTU -$RI_B_End = [\U0001F1EA \U0001F1EC \U0001F1F7]; # EGR -$RI_C_End = [\U0001F1E6 \U0001F1ED \U0001F1F1 \U0001F1F3 \U0001F1FF]; # AHLNZ +$RI_A_End = [\U0001F1EA \U0001F1F9 \U0001F1FA]; # ETU +$RI_B_End = [\U0001F1EA \U0001F1F7]; # ER +$RI_C_End = [\U0001F1E6 \U0001F1ED \U0001F1F1 \U0001F1F3 \U0001F1F4]; # AHLNO $RI_D_End = [\U0001F1EA \U0001F1F0]; # EK -$RI_E_End = [\U0001F1EC \U0001F1F8]; # GS +$RI_E_End = \U0001F1F8; # S $RI_F_End = [\U0001F1EE \U0001F1F7]; # IR -$RI_G_End = [\U0001F1E7 \U0001F1F7]; # BR -$RI_H_End = [\U0001F1F0 \U0001F1FA]; # KU -$RI_I_End = [\U0001F1E9 \U0001F1F1 \U0001F1F3 \U0001F1F9]; # DLNT -$RI_J_End = [\U0001F1F4 \U0001F1F5]; # OP +$RI_G_End = \U0001F1E7; # B +$RI_H_End = \U0001F1F0; # K +$RI_I_End = [\U0001F1E9 \U0001F1EA \U0001F1F1 \U0001F1F3 \U0001F1F9]; # DELNT +$RI_J_End = [\U0001F1F5 \U0001F1F4]; # OP $RI_K_End = \U0001F1F7; # R -$RI_L_End = \U0001F1E7; # B $RI_M_End = [\U0001F1F4 \U0001F1FD \U0001F1FE]; # OXY -$RI_N_End = [\U0001F1F1 \U0001F1F4]; # LO -$RI_P_End = [\U0001F1F1 \U0001F1F9]; # LT -$RI_R_End = [\U0001F1F4 \U0001F1FA]; # OU -$RI_S_End = [\U0001F1E6 \U0001F1EA \U0001F1EC \U0001F1F0]; # AEGK -$RI_T_End = [\U0001F1ED \U0001F1F7 \U0001F1FC]; # HRW -$RI_U_End = [\U0001F1E6 \U0001F1F8]; # AS +$RI_N_End = [\U0001F1F1 \U0001F1F4 \U0001F1FF]; # LOZ +$RI_P_End = [\U0001F1ED \U0001F1F1 \U0001F1F7 \U0001F1F9]; # HLRT +$RI_R_End = \U0001F1FA; # U +$RI_S_End = [\U0001F1E6 \U0001F1EA \U0001F1EC]; # AEG +$RI_T_End = \U0001F1F7; # R +$RI_U_End = \U0001F1F8; # S $RI_V_End = \U0001F1F3; # N +$RI_Z_End = \U0001F1E6; # A + +# Special character classes for people & body part emoji: +# Subsets of $Extend: +$ZWJ = \u200D; +$EmojiVar = [\uFE0F]; +# The following are subsets of \p{Grapheme_Cluster_Break = Other} which is not otherwise used here +$EmojiForSeqs = [\u2764 \U0001F466-\U0001F469 \U0001F48B]; +$EmojiForMods = [\u261D \u270A-\u270C \U0001F385 \U0001F3C3-\U0001F3C4 \U0001F3C7 \U0001F3CA \U0001F442-\U0001F443 \U0001F446-\U0001F450 \U0001F466-\U0001F469 \U0001F46E-\U0001F478 \U0001F47C \U0001F481-\U0001F483 \U0001F485-\U0001F487 \U0001F4AA \U0001F596 \U0001F645-\U0001F647 \U0001F64B-\U0001F64F \U0001F6A3 \U0001F6B4-\U0001F6B6 \U0001F6C0]; +$EmojiMods = [\U0001F3FB-\U0001F3FF]; # # Korean Syllable Definitions @@ -94,7 +105,6 @@ $RI_H $RI_H_End; $RI_I $RI_I_End; $RI_J $RI_J_End; $RI_K $RI_K_End; -$RI_L $RI_L_End; $RI_M $RI_M_End; $RI_N $RI_N_End; $RI_P $RI_P_End; @@ -103,12 +113,18 @@ $RI_S $RI_S_End; $RI_T $RI_T_End; $RI_U $RI_U_End; $RI_V $RI_V_End; +$RI_Z $RI_Z_End; [^$Control $CR $LF] $Extend; [^$Control $CR $LF] $SpacingMark; # TODO: Restore if the Prepend set becomes non-empty again: $Prepend [^$Control $CR $LF]; +# Special forward rules for people & body part emoji: +# don't break $ZWJ from subsequent $EmojiForSeqs; don't break between relevant emoji and $EmojiMods +$ZWJ $EmojiForSeqs; +$EmojiForMods $EmojiVar? $EmojiMods; + ## ------------------------------------------------- @@ -129,7 +145,6 @@ $RI_H_End $RI_H; $RI_I_End $RI_I; $RI_J_End $RI_J; $RI_K_End $RI_K; -$RI_L_End $RI_L; $RI_M_End $RI_M; $RI_N_End $RI_N; $RI_P_End $RI_P; @@ -138,11 +153,16 @@ $RI_S_End $RI_S; $RI_T_End $RI_T; $RI_U_End $RI_U; $RI_V_End $RI_V; +$RI_Z_End $RI_Z; $Extend [^$Control $CR $LF]; $SpacingMark [^$Control $CR $LF]; # TODO: Restore if the Prepend set becomes non-empty again: [^$Control $CR $LF] $Prepend; +# Special reverse rules for people & body part emoji: +# don't break $ZWJ from subsequent $EmojiForSeqs; don't break between relevant emoji and $EmojiMods +$EmojiForSeqs $ZWJ; +$EmojiMods $EmojiVar? $EmojiForMods; ## ------------------------------------------------- # We don't logically need safe char break rules, but if we don't provide any at all @@ -151,9 +171,11 @@ $SpacingMark [^$Control $CR $LF]; !!safe_reverse; $LF $CR; +[$EmojiVar $EmojiMods]+ $EmojiForMods; ## ------------------------------------------------- !!safe_forward; $CR $LF; +$EmojiForMods [$EmojiVar $EmojiMods]+; diff --git a/icuSources/data/brkitr/fi.txt b/icuSources/data/brkitr/fi.txt index 4287a892..1a7aba33 100644 --- a/icuSources/data/brkitr/fi.txt +++ b/icuSources/data/brkitr/fi.txt @@ -10,5 +10,8 @@ fi{ Version{"2.0.82.42"} boundaries{ line:process(dependency){"line_fi.brk"} + line_loose:process(dependency){"line_loose_fi.brk"} + line_normal:process(dependency){"line_normal_fi.brk"} + line_strict:process(dependency){"line_fi.brk"} } } diff --git a/icuSources/data/brkitr/ja.txt b/icuSources/data/brkitr/ja.txt index 3eb81d0b..76c39b7b 100644 --- a/icuSources/data/brkitr/ja.txt +++ b/icuSources/data/brkitr/ja.txt @@ -9,6 +9,9 @@ ja{ Version{"2.0.82.42"} boundaries{ - line:process(dependency){"line_ja.brk"} + line:process(dependency){"line_normal.brk"} + line_loose:process(dependency){"line_loose_cj.brk"} + line_normal:process(dependency){"line_normal_cj.brk"} + line_strict:process(dependency){"line.brk"} } } diff --git a/icuSources/data/brkitr/line.txt b/icuSources/data/brkitr/line.txt index 74560af0..8447d514 100644 --- a/icuSources/data/brkitr/line.txt +++ b/icuSources/data/brkitr/line.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2002-2013 International Business Machines Corporation and +# Copyright (c) 2002-2015 International Business Machines Corporation and # others. All Rights Reserved. # # file: line.txt @@ -11,6 +11,9 @@ # TODO: Rule LB 8 remains as it was in Unicode 5.2 # This is only because of a limitation of ICU break engine implementation, # not because the older behavior is desirable. +# +# This corresponds to CSS line-break=strict (BCP47 -u-lb-strict). +# It sets characters of class CJ to behave like NS. # # Character Classes defined by TR 14. @@ -97,6 +100,15 @@ $WJ = [:LineBreak = Word_Joiner:]; $XX = [:LineBreak = Unknown:]; $ZW = [:LineBreak = ZWSpace:]; +# Special character classes for people & body part emoji: +# Subsets of $CM: +$ZWJ = \u200D; +$EmojiVar = \uFE0F; +# The following are subsets of $ID +$EmojiForSeqs = [\u2764 \U0001F466-\U0001F469 \U0001F48B]; +$EmojiForMods = [\u261D \u270A-\u270C \U0001F385 \U0001F3C3-\U0001F3C4 \U0001F3C7 \U0001F3CA \U0001F442-\U0001F443 \U0001F446-\U0001F450 \U0001F466-\U0001F469 \U0001F46E-\U0001F478 \U0001F47C \U0001F481-\U0001F483 \U0001F485-\U0001F487 \U0001F4AA \U0001F596 \U0001F645-\U0001F647 \U0001F64B-\U0001F64F \U0001F6A3 \U0001F6B4-\U0001F6B6 \U0001F6C0]; +$EmojiMods = [\U0001F3FB-\U0001F3FF]; + # Dictionary character set, for triggering language-based break engines. Currently # limited to LineBreak=Complex_Context. Note that this set only works in Unicode # 5.0 or later as the definition of Complex_Context was corrected to include all @@ -231,6 +243,10 @@ $LB8Breaks = [$LB4Breaks $ZW]; $LB8NonBreaks = [[$LB4NonBreaks] - [$ZW]]; +# Special forward rule for people & body part emoji: +# don't break $ZWJ from subsequent $EmojiForSeqs +$EmojiForSeqs $EmojiVar? $EmojiMods? $ZWJ $EmojiForSeqs; + # LB 9 Combining marks. X $CM needs to behave like X, where X is not $SP, $BK $CR $LF $NL # $CM not covered by the above needs to behave like $AL # See definition of $CAN_CM. @@ -402,6 +418,10 @@ $CPcm ($ALcm | $HLcm | $NUcm); # LB 30a Do not break between regional indicators. $RIcm $RIcm; +# Special forward rule for people & body part emoji: +# don't break between relevant emoji and $EmojiMods +$EmojiForMods $EmojiVar? $EmojiMods; + # # Reverse Rules. # @@ -484,6 +504,10 @@ $LF $CR; # Requires an engine enhancement. # / $SP* $ZW +# Special reverse rule for people & body part emoji: +# don't break $ZWJ from subsequent $EmojiForSeqs +$EmojiForSeqs $ZWJ $EmojiMods? $EmojiVar? $EmojiForSeqs; + # LB 9,10 Combining marks. # X $CM needs to behave like X, where X is not $SP or controls. # $CM not covered by the above needs to behave like $AL @@ -626,6 +650,10 @@ $CM* ($ALPlus | $HL | $NU) $CM* $CP; # LB 30a $CM* $RI $CM* $RI; +# Special reverse rule for people & body part emoji: +# don't break between relevant emoji and $EmojiMods +$EmojiMods $EmojiVar? $EmojiForMods; + ## ------------------------------------------------- !!safe_reverse; diff --git a/icuSources/data/brkitr/line_fi.txt b/icuSources/data/brkitr/line_fi.txt index adf78bd3..8a6287bc 100644 --- a/icuSources/data/brkitr/line_fi.txt +++ b/icuSources/data/brkitr/line_fi.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2002-2013 International Business Machines Corporation and +# Copyright (c) 2002-2015 International Business Machines Corporation and # others. All Rights Reserved. # # file: line_fi.txt @@ -7,10 +7,15 @@ # Implement default line breaking as defined by # Unicode Standard Annex #14 Revision 29 for Unicode 6.2 # http://www.unicode.org/reports/tr14/ +# tailored as noted in 2nd paragraph below.. # # TODO: Rule LB 8 remains as it was in Unicode 5.2 # This is only because of a limitation of ICU break engine implementation, # not because the older behavior is desirable. +# +# This tailors the line break behavior for Finnish, while otherwise behaving +# per UAX 14 which corresponds to CSS line-break=strict (BCP47 -u-lb-strict). +# It sets characters of class CJ to behave like NS. # # Character Classes defined by TR 14. @@ -98,6 +103,15 @@ $WJ = [:LineBreak = Word_Joiner:]; $XX = [:LineBreak = Unknown:]; $ZW = [:LineBreak = ZWSpace:]; +# Special character classes for people & body part emoji: +# Subsets of $CM: +$ZWJ = \u200D; +$EmojiVar = \uFE0F; +# The following are subsets of $ID +$EmojiForSeqs = [\u2764 \U0001F466-\U0001F469 \U0001F48B]; +$EmojiForMods = [\u261D \u270A-\u270C \U0001F385 \U0001F3C3-\U0001F3C4 \U0001F3C7 \U0001F3CA \U0001F442-\U0001F443 \U0001F446-\U0001F450 \U0001F466-\U0001F469 \U0001F46E-\U0001F478 \U0001F47C \U0001F481-\U0001F483 \U0001F485-\U0001F487 \U0001F4AA \U0001F596 \U0001F645-\U0001F647 \U0001F64B-\U0001F64F \U0001F6A3 \U0001F6B4-\U0001F6B6 \U0001F6C0]; +$EmojiMods = [\U0001F3FB-\U0001F3FF]; + # Dictionary character set, for triggering language-based break engines. Currently # limited to LineBreak=Complex_Context. Note that this set only works in Unicode # 5.0 or later as the definition of Complex_Context was corrected to include all @@ -234,6 +248,10 @@ $LB8Breaks = [$LB4Breaks $ZW]; $LB8NonBreaks = [[$LB4NonBreaks] - [$ZW]]; +# Special forward rule for people & body part emoji: +# don't break $ZWJ from subsequent $EmojiForSeqs +$EmojiForSeqs $EmojiVar? $EmojiMods? $ZWJ $EmojiForSeqs; + # LB 9 Combining marks. X $CM needs to behave like X, where X is not $SP, $BK $CR $LF $NL # $CM not covered by the above needs to behave like $AL # See definition of $CAN_CM. @@ -408,6 +426,10 @@ $CPcm ($ALcm | $HLcm | $NUcm); # LB 30a Do not break between regional indicators. $RIcm $RIcm; +# Special forward rule for people & body part emoji: +# don't break between relevant emoji and $EmojiMods +$EmojiForMods $EmojiVar? $EmojiMods; + # # Reverse Rules. # @@ -491,6 +513,10 @@ $LF $CR; # Requires an engine enhancement. # / $SP* $ZW +# Special reverse rule for people & body part emoji: +# don't break $ZWJ from subsequent $EmojiForSeqs +$EmojiForSeqs $ZWJ $EmojiMods? $EmojiVar? $EmojiForSeqs; + # LB 9,10 Combining marks. # X $CM needs to behave like X, where X is not $SP or controls. # $CM not covered by the above needs to behave like $AL @@ -636,6 +662,10 @@ $CM* ($ALPlus | $HL | $NU) $CM* $CP; # LB 30a $CM* $RI $CM* $RI; +# Special reverse rule for people & body part emoji: +# don't break between relevant emoji and $EmojiMods +$EmojiMods $EmojiVar? $EmojiForMods; + ## ------------------------------------------------- !!safe_reverse; diff --git a/icuSources/data/brkitr/line_ja.txt b/icuSources/data/brkitr/line_ja.txt index 70b203d1..ef364c14 100644 --- a/icuSources/data/brkitr/line_ja.txt +++ b/icuSources/data/brkitr/line_ja.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2002-2013 International Business Machines Corporation and +# Copyright (c) 2002-2015 International Business Machines Corporation and # others. All Rights Reserved. # # file: line_ja.txt @@ -97,6 +97,15 @@ $WJ = [:LineBreak = Word_Joiner:]; $XX = [:LineBreak = Unknown:]; $ZW = [:LineBreak = ZWSpace:]; +# Special character classes for people & body part emoji: +# Subsets of $CM: +$ZWJ = \u200D; +$EmojiVar = \uFE0F; +# The following are subsets of $ID +$EmojiForSeqs = [\u2764 \U0001F466-\U0001F469 \U0001F48B]; +$EmojiForMods = [\u261D \u270A-\u270C \U0001F385 \U0001F3C3-\U0001F3C4 \U0001F3C7 \U0001F3CA \U0001F442-\U0001F443 \U0001F446-\U0001F450 \U0001F466-\U0001F469 \U0001F46E-\U0001F478 \U0001F47C \U0001F481-\U0001F483 \U0001F485-\U0001F487 \U0001F4AA \U0001F596 \U0001F645-\U0001F647 \U0001F64B-\U0001F64F \U0001F6A3 \U0001F6B4-\U0001F6B6 \U0001F6C0]; +$EmojiMods = [\U0001F3FB-\U0001F3FF]; + # Dictionary character set, for triggering language-based break engines. Currently # limited to LineBreak=Complex_Context. Note that this set only works in Unicode # 5.0 or later as the definition of Complex_Context was corrected to include all @@ -231,6 +240,10 @@ $LB8Breaks = [$LB4Breaks $ZW]; $LB8NonBreaks = [[$LB4NonBreaks] - [$ZW]]; +# Special forward rule for people & body part emoji: +# don't break $ZWJ from subsequent $EmojiForSeqs +$EmojiForSeqs $EmojiVar? $EmojiMods? $ZWJ $EmojiForSeqs; + # LB 9 Combining marks. X $CM needs to behave like X, where X is not $SP, $BK $CR $LF $NL # $CM not covered by the above needs to behave like $AL # See definition of $CAN_CM. @@ -402,6 +415,10 @@ $CPcm ($ALcm | $HLcm | $NUcm); # LB 30a Do not break between regional indicators. $RIcm $RIcm; +# Special forward rule for people & body part emoji: +# don't break between relevant emoji and $EmojiMods +$EmojiForMods $EmojiVar? $EmojiMods; + # # Reverse Rules. # @@ -484,6 +501,10 @@ $LF $CR; # Requires an engine enhancement. # / $SP* $ZW +# Special reverse rule for people & body part emoji: +# don't break $ZWJ from subsequent $EmojiForSeqs +$EmojiForSeqs $ZWJ $EmojiMods? $EmojiVar? $EmojiForSeqs; + # LB 9,10 Combining marks. # X $CM needs to behave like X, where X is not $SP or controls. # $CM not covered by the above needs to behave like $AL @@ -626,6 +647,10 @@ $CM* ($ALPlus | $HL | $NU) $CM* $CP; # LB 30a $CM* $RI $CM* $RI; +# Special reverse rule for people & body part emoji: +# don't break between relevant emoji and $EmojiMods +$EmojiMods $EmojiVar? $EmojiForMods; + ## ------------------------------------------------- !!safe_reverse; diff --git a/icuSources/data/brkitr/line_loose.txt b/icuSources/data/brkitr/line_loose.txt new file mode 100644 index 00000000..e2f07651 --- /dev/null +++ b/icuSources/data/brkitr/line_loose.txt @@ -0,0 +1,717 @@ +# Copyright (c) 2002-2015 International Business Machines Corporation and +# others. All Rights Reserved. +# +# file: line_loose.txt +# +# Line Breaking Rules +# Implement default line breaking as defined by +# Unicode Standard Annex #14 Revision 29 for Unicode 6.2 +# http://www.unicode.org/reports/tr14/ +# tailored as noted in 2nd paragraph below.. +# +# TODO: Rule LB 8 remains as it was in Unicode 5.2 +# This is only because of a limitation of ICU break engine implementation, +# not because the older behavior is desirable. +# +# This tailors the line break behavior to correspond to CSS +# line-break=loose (BCP47 -u-lb-loose) as defined for languages other than +# Chinese & Japanese. +# It sets characters of class CJ to behave like ID. +# In addition, it allows breaks: +# * before iteration marks 3005, 303B, 309D, 309E, 30FD, 30FE (all NS) +# * between characters of LineBreak class IN + +# +# Character Classes defined by TR 14. +# + +!!chain; +!!LBCMNoChain; + + +!!lookAheadHardBreak; +# +# !!lookAheadHardBreak Described here because it is (as yet) undocumented elsewhere +# and only used for the line break rules. +# +# It is used in the implementation of rule LB 10 +# which says to treat any combining mark that is not attached to a base +# character as if it were of class AL (alphabetic). +# +# The problem occurs in the reverse rules. +# +# Consider a sequence like, with correct breaks as shown +# LF ID CM AL AL +# ^ ^ ^ +# Then consider the sequence without the initial ID (ideographic) +# LF CM AL AL +# ^ ^ +# Our CM, which in the first example was attached to the ideograph, +# is now unattached, becomes an alpha, and joins in with the other +# alphas. +# +# When iterating forwards, these sequences do not present any problems +# When iterating backwards, we need to look ahead when encountering +# a CM to see whether it attaches to something further on or not. +# (Look-ahead in a reverse rule is looking towards the start) +# +# If the CM is unattached, we need to force a break. +# +# !!lookAheadHardBreak forces the run time state machine to +# stop immediately when a look ahead rule ( '/' operator) matches, +# and set the match position to that of the look-ahead operator, +# no matter what other rules may be in play at the time. +# +# See rule LB 19 for an example. +# + +$AI = [:LineBreak = Ambiguous:]; +$AL = [:LineBreak = Alphabetic:]; +$BA = [:LineBreak = Break_After:]; +$BB = [:LineBreak = Break_Before:]; +$BK = [:LineBreak = Mandatory_Break:]; +$B2 = [:LineBreak = Break_Both:]; +$CB = [:LineBreak = Contingent_Break:]; +$CJ = [:LineBreak = Conditional_Japanese_Starter:]; +$CL = [:LineBreak = Close_Punctuation:]; +$CM = [:LineBreak = Combining_Mark:]; +$CP = [:LineBreak = Close_Parenthesis:]; +$CR = [:LineBreak = Carriage_Return:]; +$EX = [:LineBreak = Exclamation:]; +$GL = [:LineBreak = Glue:]; +$HL = [:LineBreak = Hebrew_Letter:]; +$HY = [:LineBreak = Hyphen:]; +$H2 = [:LineBreak = H2:]; +$H3 = [:LineBreak = H3:]; +$ID = [[:LineBreak = Ideographic:] $CJ]; +$IN = [:LineBreak = Inseperable:]; +$IS = [:LineBreak = Infix_Numeric:]; +$JL = [:LineBreak = JL:]; +$JV = [:LineBreak = JV:]; +$JT = [:LineBreak = JT:]; +$LF = [:LineBreak = Line_Feed:]; +$NL = [:LineBreak = Next_Line:]; +$NSX = [\u3005 \u303B \u309D \u309E \u30FD \u30FE]; +$NS = [[:LineBreak = Nonstarter:] - $NSX]; +$NU = [:LineBreak = Numeric:]; +$OP = [:LineBreak = Open_Punctuation:]; +$PO = [:LineBreak = Postfix_Numeric:]; +$PR = [:LineBreak = Prefix_Numeric:]; +$QU = [:LineBreak = Quotation:]; +$RI = [:LineBreak = Regional_Indicator:]; +$SA = [:LineBreak = Complex_Context:]; +$SG = [:LineBreak = Surrogate:]; +$SP = [:LineBreak = Space:]; +$SY = [:LineBreak = Break_Symbols:]; +$WJ = [:LineBreak = Word_Joiner:]; +$XX = [:LineBreak = Unknown:]; +$ZW = [:LineBreak = ZWSpace:]; + +# Special character classes for people & body part emoji: +# Subsets of $CM: +$ZWJ = \u200D; +$EmojiVar = \uFE0F; +# The following are subsets of $ID +$EmojiForSeqs = [\u2764 \U0001F466-\U0001F469 \U0001F48B]; +$EmojiForMods = [\u261D \u270A-\u270C \U0001F385 \U0001F3C3-\U0001F3C4 \U0001F3C7 \U0001F3CA \U0001F442-\U0001F443 \U0001F446-\U0001F450 \U0001F466-\U0001F469 \U0001F46E-\U0001F478 \U0001F47C \U0001F481-\U0001F483 \U0001F485-\U0001F487 \U0001F4AA \U0001F596 \U0001F645-\U0001F647 \U0001F64B-\U0001F64F \U0001F6A3 \U0001F6B4-\U0001F6B6 \U0001F6C0]; +$EmojiMods = [\U0001F3FB-\U0001F3FF]; + +# Dictionary character set, for triggering language-based break engines. Currently +# limited to LineBreak=Complex_Context. Note that this set only works in Unicode +# 5.0 or later as the definition of Complex_Context was corrected to include all +# characters requiring dictionary break. + +$dictionary = [:LineBreak = Complex_Context:]; + +# +# Rule LB1. By default, treat AI (characters with ambiguous east Asian width), +# SA (South East Asian: Thai, Lao, Khmer) +# SG (Unpaired Surrogates) +# XX (Unknown, unassigned) +# as $AL (Alphabetic) +# +$ALPlus = [$AL $AI $SA $SG $XX]; + +# +# Combining Marks. X $CM* behaves as if it were X. Rule LB6. +# +$ALcm = $ALPlus $CM*; +$BAcm = $BA $CM*; +$BBcm = $BB $CM*; +$B2cm = $B2 $CM*; +$CLcm = $CL $CM*; +$CPcm = $CP $CM*; +$EXcm = $EX $CM*; +$GLcm = $GL $CM*; +$HLcm = $HL $CM*; +$HYcm = $HY $CM*; +$H2cm = $H2 $CM*; +$H3cm = $H3 $CM*; +$IDcm = $ID $CM*; +$INcm = $IN $CM*; +$IScm = $IS $CM*; +$JLcm = $JL $CM*; +$JVcm = $JV $CM*; +$JTcm = $JT $CM*; +$NScm = $NS $CM*; +$NSXcm = $NSX $CM*; +$NUcm = $NU $CM*; +$OPcm = $OP $CM*; +$POcm = $PO $CM*; +$PRcm = $PR $CM*; +$QUcm = $QU $CM*; +$RIcm = $RI $CM*; +$SYcm = $SY $CM*; +$WJcm = $WJ $CM*; + +## ------------------------------------------------- + +!!forward; + +# +# Each class of character can stand by itself as an unbroken token, with trailing combining stuff +# +$ALPlus $CM+; +$BA $CM+; +$BB $CM+; +$B2 $CM+; +$CL $CM+; +$CP $CM+; +$EX $CM+; +$GL $CM+; +$HL $CM+; +$HY $CM+; +$H2 $CM+; +$H3 $CM+; +$ID $CM+; +$IN $CM+; +$IS $CM+; +$JL $CM+; +$JV $CM+; +$JT $CM+; +$NS $CM+; +$NSX $CM+; +$NU $CM+; +$OP $CM+; +$PO $CM+; +$PR $CM+; +$QU $CM+; +$RI $CM+; +$SY $CM+; +$WJ $CM+; + +# +# CAN_CM is the set of characters that may combine with CM combining chars. +# Note that Linebreak UAX 14's concept of a combining char and the rules +# for what they can combine with are _very_ different from the rest of Unicode. +# +# Note that $CM itself is left out of this set. If CM is needed as a base +# it must be listed separately in the rule. +# +$CAN_CM = [^$SP $BK $CR $LF $NL $ZW $CM]; # Bases that can take CMs +$CANT_CM = [ $SP $BK $CR $LF $NL $ZW $CM]; # Bases that can't take CMs + +# +# AL_FOLLOW set of chars that can unconditionally follow an AL +# Needed in rules where stand-alone $CM s are treated as AL. +# Chaining is disabled with CM because it causes other failures, +# so for this one case we need to manually list out longer sequences. +# +$AL_FOLLOW_NOCM = [$BK $CR $LF $NL $ZW $SP]; +$AL_FOLLOW_CM = [$CL $CP $EX $HL $IS $SY $WJ $GL $OP $QU $BA $HY $NS $NSX $IN $NU $ALPlus]; +$AL_FOLLOW = [$AL_FOLLOW_NOCM $AL_FOLLOW_CM]; + + +# +# Rule LB 4, 5 Mandatory (Hard) breaks. +# +$LB4Breaks = [$BK $CR $LF $NL]; +$LB4NonBreaks = [^$BK $CR $LF $NL]; +$CR $LF {100}; + +# +# LB 6 Do not break before hard line breaks. +# +$LB4NonBreaks? $LB4Breaks {100}; # LB 5 do not break before hard breaks. +$CAN_CM $CM* $LB4Breaks {100}; +$CM+ $LB4Breaks {100}; + +# LB 7 x SP +# x ZW +$LB4NonBreaks [$SP $ZW]; +$CAN_CM $CM* [$SP $ZW]; +$CM+ [$SP $ZW]; + +# +# LB 8 Break after zero width space +# TODO: ZW SP* +# An engine change is required to write the reverse rule for this. +# For now, leave the Unicode 5.2 rule, ZW +# +$LB8Breaks = [$LB4Breaks $ZW]; +$LB8NonBreaks = [[$LB4NonBreaks] - [$ZW]]; + + +# Special forward rule for people & body part emoji: +# don't break $ZWJ from subsequent $EmojiForSeqs +$EmojiForSeqs $EmojiVar? $EmojiMods? $ZWJ $EmojiForSeqs; + +# LB 9 Combining marks. X $CM needs to behave like X, where X is not $SP, $BK $CR $LF $NL +# $CM not covered by the above needs to behave like $AL +# See definition of $CAN_CM. + +$CAN_CM $CM+; # Stick together any combining sequences that don't match other rules. +$CM+; + +# +# LB 11 Do not break before or after WORD JOINER & related characters. +# +$CAN_CM $CM* $WJcm; +$LB8NonBreaks $WJcm; +$CM+ $WJcm; + +$WJcm $CANT_CM; +$WJcm $CAN_CM $CM*; + +# +# LB 12 Do not break after NBSP and related characters. +# GL x +# +$GLcm $CAN_CM $CM*; +$GLcm $CANT_CM; + +# +# LB 12a Do not break before NBSP and related characters ... +# [^SP BA HY] x GL +# +[[$LB8NonBreaks] - [$SP $BA $HY]] $CM* $GLcm; +$CM+ GLcm; + + + +# +# LB 13 Don't break before ']' or '!' or ';' or '/', even after spaces. +# +$LB8NonBreaks $CL; +$CAN_CM $CM* $CL; +$CM+ $CL; # by rule 10, stand-alone CM behaves as AL + +$LB8NonBreaks $CP; +$CAN_CM $CM* $CP; +$CM+ $CP; # by rule 10, stand-alone CM behaves as AL + +$LB8NonBreaks $EX; +$CAN_CM $CM* $EX; +$CM+ $EX; # by rule 10, stand-alone CM behaves as AL + +$LB8NonBreaks $IS; +$CAN_CM $CM* $IS; +$CM+ $IS; # by rule 10, stand-alone CM behaves as AL + +$LB8NonBreaks $SY; +$CAN_CM $CM* $SY; +$CM+ $SY; # by rule 10, stand-alone CM behaves as AL + + +# +# LB 14 Do not break after OP, even after spaces +# +$OPcm $SP* $CAN_CM $CM*; +$OPcm $SP* $CANT_CM; + +$OPcm $SP+ $CM+ $AL_FOLLOW?; # by rule 10, stand-alone CM behaves as AL + +# LB 15 +$QUcm $SP* $OPcm; + +# LB 16 +# Do not break between closing punctuation and $NS, even with intervening spaces +# But DO allow a break between closing punctuation and $NSX, don't include it here +($CLcm | $CPcm) $SP* $NScm; + +# LB 17 +$B2cm $SP* $B2cm; + +# +# LB 18 Break after spaces. +# +$LB18NonBreaks = [$LB8NonBreaks - [$SP]]; +$LB18Breaks = [$LB8Breaks $SP]; + + +# LB 19 +# x QU +$LB18NonBreaks $CM* $QUcm; +$CM+ $QUcm; + +# QU x +$QUcm .?; +$QUcm $LB18NonBreaks $CM*; # Don't let a combining mark go onto $CR, $BK, etc. + # TODO: I don't think this rule is needed. + + +# LB 20 +# $CB +# $CB + +$LB20NonBreaks = [$LB18NonBreaks - $CB]; + +# LB 21 x (BA | HY | NS) +# BB x +# +# DO allow breaks here before NSXcm, so don't include it +$LB20NonBreaks $CM* ($BAcm | $HYcm | $NScm); + +$BBcm [^$CB]; # $BB x +$BBcm $LB20NonBreaks $CM*; + +# LB 21a Don't break after Hebrew + Hyphen +# HL (HY | BA) x +# +$HLcm ($HYcm | $BAcm) [^$CB]?; + +# LB 21b (forward) Don't break between SY and HL +# (break between HL and SY already disallowed by LB 13 above) +$SYcm $HLcm; + +# LB 22 +($ALcm | $HLcm) $INcm; +$CM+ $INcm; # by rule 10, any otherwise unattached CM behaves as AL +$IDcm $INcm; +# $INcm $INcm; # delete this rule for CSS loose +$NUcm $INcm; + + +# $LB 23 +$IDcm $POcm; +$ALcm $NUcm; # includes $LB19 +$HLcm $NUcm; +$CM+ $NUcm; # Rule 10, any otherwise unattached CM behaves as AL +$NUcm $ALcm; +$NUcm $HLcm; + +# +# LB 24 +# +$PRcm $IDcm; +$PRcm ($ALcm | $HLcm); +$POcm ($ALcm | $HLcm); + +# +# LB 25 Numbers. +# +($PRcm | $POcm)? ($OPcm | $HYcm)? $NUcm ($NUcm | $SYcm | $IScm)* ($CLcm | $CPcm)? ($PRcm | $POcm)?; + +# LB 26 Do not break a Korean syllable +# +$JLcm ($JLcm | $JVcm | $H2cm | $H3cm); +($JVcm | $H2cm) ($JVcm | $JTcm); +($JTcm | $H3cm) $JTcm; + +# LB 27 Treat korean Syllable Block the same as ID (don't break it) +($JLcm | $JVcm | $JTcm | $H2cm | $H3cm) $INcm; +($JLcm | $JVcm | $JTcm | $H2cm | $H3cm) $POcm; +$PRcm ($JLcm | $JVcm | $JTcm | $H2cm | $H3cm); + + +# LB 28 Do not break between alphabetics +# +($ALcm | $HLcm) ($ALcm | $HLcm); +$CM+ ($ALcm | $HLcm); # The $CM+ is from rule 10, an unattached CM is treated as AL + +# LB 29 +$IScm ($ALcm | $HLcm); + +# LB 30 +($ALcm | $HLcm | $NUcm) $OPcm; +$CM+ $OPcm; # The $CM+ is from rule 10, an unattached CM is treated as AL. +$CPcm ($ALcm | $HLcm | $NUcm); + +# LB 30a Do not break between regional indicators. +$RIcm $RIcm; + +# Special forward rule for people & body part emoji: +# don't break between relevant emoji and $EmojiMods +$EmojiForMods $EmojiVar? $EmojiMods; + +# +# Reverse Rules. +# +## ------------------------------------------------- + +!!reverse; + +$CM+ $ALPlus; +$CM+ $BA; +$CM+ $BB; +$CM+ $B2; +$CM+ $CL; +$CM+ $CP; +$CM+ $EX; +$CM+ $GL; +$CM+ $HL; +$CM+ $HY; +$CM+ $H2; +$CM+ $H3; +$CM+ $ID; +$CM+ $IN; +$CM+ $IS; +$CM+ $JL; +$CM+ $JV; +$CM+ $JT; +$CM+ $NS; +$CM+ $NSX; +$CM+ $NU; +$CM+ $OP; +$CM+ $PO; +$CM+ $PR; +$CM+ $QU; +$CM+ $RI; +$CM+ $SY; +$CM+ $WJ; +$CM+; + + +# +# Sequences of the form (shown forwards) +# [CANT_CM] [CM] [whatever] +# The CM needs to behave as an AL +# +$AL_FOLLOW $CM+ / ( + [$BK $CR $LF $NL $ZW {eof}] | + $SP+ $CM+ $SP | + $SP+ $CM* ([^$OP $CM $SP] | [$AL {eof}])); # if LB 14 will match, need to surpress this break. + # LB14 says OP SP* x . + # becomes OP SP* x AL + # becomes OP SP* x CM+ AL_FOLLOW + # + # Further note: the $AL in [$AL {eof}] is only to work around + # a rule compiler bug which complains about + # empty sets otherwise. + +# +# Sequences of the form (shown forwards) +# [CANT_CM] [CM] [PR] +# The CM needs to behave as an AL +# This rule is concerned about getting the second of the two in place. +# + +[$PR ] / $CM+ [$BK $CR $LF $NL $ZW $SP {eof}]; + + + +# LB 4, 5, 5 + +$LB4Breaks [$LB4NonBreaks-$CM]; +$LB4Breaks $CM+ $CAN_CM; +$LF $CR; + + +# LB 7 x SP +# x ZW +[$SP $ZW] [$LB4NonBreaks-$CM]; +[$SP $ZW] $CM+ $CAN_CM; + +# LB 8 ZW SP* +# TODO: to implement this, we need more than one look-ahead hard break in play at a time. +# Requires an engine enhancement. +# / $SP* $ZW + +# Special reverse rule for people & body part emoji: +# don't break $ZWJ from subsequent $EmojiForSeqs +$EmojiForSeqs $ZWJ $EmojiMods? $EmojiVar? $EmojiForSeqs; + +# LB 9,10 Combining marks. +# X $CM needs to behave like X, where X is not $SP or controls. +# $CM not covered by the above needs to behave like $AL +# Stick together any combining sequences that don't match other rules. +$CM+ $CAN_CM; + + +# LB 11 +$CM* $WJ $CM* $CAN_CM; +$CM* $WJ [$LB8NonBreaks-$CM]; + + $CANT_CM $CM* $WJ; +$CM* $CAN_CM $CM* $WJ; + +# LB 12a +# [^SP BA HY] x GL +# +$CM* $GL $CM* [$LB8NonBreaks-[$CM $SP $BA $HY]]; + +# LB 12 +# GL x +# +$CANT_CM $CM* $GL; +$CM* $CAN_CM $CM* $GL; + + +# LB 13 +$CL $CM+ $CAN_CM; +$CP $CM+ $CAN_CM; +$EX $CM+ $CAN_CM; +$IS $CM+ $CAN_CM; +$SY $CM+ $CAN_CM; + +$CL [$LB8NonBreaks-$CM]; +$CP [$LB8NonBreaks-$CM]; +$EX [$LB8NonBreaks-$CM]; +$IS [$LB8NonBreaks-$CM]; +$SY [$LB8NonBreaks-$CM]; + +# Rule 13 & 14 taken together for an edge case. +# Match this, shown forward +# OP SP+ ($CM+ behaving as $AL) (CL | CP | EX | IS | IY) +# This really wants to chain at the $CM+ (which is acting as an $AL) +# except for $CM chaining being disabled. +[$CL $CP $EX $IS $SY] $CM+ $SP+ $CM* $OP; + +# LB 14 OP SP* x +# +$CM* $CAN_CM $SP* $CM* $OP; + $CANT_CM $SP* $CM* $OP; +$AL_FOLLOW? $CM+ $SP $SP* $CM* $OP; # by LB 10, behaves like $AL_FOLLOW? $AL $SP* $CM* $OP + + $AL_FOLLOW_NOCM $CM+ $SP+ $CM* $OP; +$CM* $AL_FOLLOW_CM $CM+ $SP+ $CM* $OP; +$SY $CM $SP+ $OP; # TODO: Experiment. Remove. + + + +# LB 15 +$CM* $OP $SP* $CM* $QU; + +# LB 16 +# Don't include $NSX here +$CM* $NS $SP* $CM* ($CL | $CP); + +# LB 17 +$CM* $B2 $SP* $CM* $B2; + +# LB 18 break after spaces +# Nothing explicit needed here. + + +# +# LB 19 +# +$CM* $QU $CM* $CAN_CM; # . x QU +$CM* $QU $LB18NonBreaks; + + +$CM* $CAN_CM $CM* $QU; # QU x . + $CANT_CM $CM* $QU; + +# +# LB 20 Break before and after CB. +# nothing needed here. +# + +# LB 21 +# Don't include $NSX here +$CM* ($BA | $HY | $NS) $CM* [$LB20NonBreaks-$CM]; # . x (BA | HY | NS) + +$CM* [$LB20NonBreaks-$CM] $CM* $BB; # BB x . +[^$CB] $CM* $BB; # + +# LB21a +[^$CB] $CM* ($HY | $BA) $CM* $HL; + +# LB21b (reverse) +$CM* $HL $CM* $SY; + +# LB 22 +$CM* $IN $CM* ($ALPlus | $HL); +$CM* $IN $CM* $ID; +# $CM* $IN $CM* $IN; # delete this rule for CSS loose +$CM* $IN $CM* $NU; + +# LB 23 +$CM* $PO $CM* $ID; +$CM* $NU $CM* ($ALPlus | $HL); +$CM* ($ALPlus | $HL) $CM* $NU; + +# LB 24 +$CM* $ID $CM* $PR; +$CM* ($ALPlus | $HL) $CM* $PR; +$CM* ($ALPlus | $HL) $CM* $PO; + + +# LB 25 +($CM* ($PR | $PO))? ($CM* ($CL | $CP))? ($CM* ($NU | $IS | $SY))* $CM* $NU ($CM* ($OP | $HY))? ($CM* ($PR | $PO))?; + +# LB 26 +$CM* ($H3 | $H2 | $JV | $JL) $CM* $JL; +$CM* ($JT | $JV) $CM* ($H2 | $JV); +$CM* $JT $CM* ($H3 | $JT); + +# LB 27 +$CM* $IN $CM* ($H3 | $H2 | $JT | $JV | $JL); +$CM* $PO $CM* ($H3 | $H2 | $JT | $JV | $JL); +$CM* ($H3 | $H2 | $JT | $JV | $JL) $CM* $PR; + +# LB 28 +$CM* ($ALPlus | $HL) $CM* ($ALPlus | $HL); + + +# LB 29 +$CM* ($ALPlus | $HL) $CM* $IS; + +# LB 30 +$CM* $OP $CM* ($ALPlus | $HL | $NU); +$CM* ($ALPlus | $HL | $NU) $CM* $CP; + +# LB 30a +$CM* $RI $CM* $RI; + +# Special reverse rule for people & body part emoji: +# don't break between relevant emoji and $EmojiMods +$EmojiMods $EmojiVar? $EmojiForMods; + +## ------------------------------------------------- + +!!safe_reverse; + +# LB 9 +$CM+ [^$CM $BK $CR $LF $NL $ZW $SP]; +$CM+ $SP / .; + +# LB 14 +$SP+ $CM* $OP; + +# LB 15 +$SP+ $CM* $QU; + +# LB 16 +$SP+ $CM* ($CL | $CP); + +# LB 17 +$SP+ $CM* $B2; + +# LB 21 +$CM* ($HY | $BA) $CM* $HL; + +# LB 25 +($CM* ($IS | $SY))+ $CM* $NU; +($CL | $CP) $CM* ($NU | $IS | $SY); + +# For dictionary-based break +$dictionary $dictionary; + +## ------------------------------------------------- + +!!safe_forward; + +# Skip forward over all character classes that are involved in +# rules containing patterns with possibly more than one char +# of context. +# +# It might be slightly more efficient to have specific rules +# instead of one generic one, but only if we could +# turn off rule chaining. We don't want to move more +# than necessary. +# +[$CM $OP $QU $CL $CP $B2 $PR $HY $BA $SP $dictionary]+ [^$CM $OP $QU $CL $CP $B2 $PR $HY $BA $dictionary]; +$dictionary $dictionary; + diff --git a/icuSources/data/brkitr/line_loose_cj.txt b/icuSources/data/brkitr/line_loose_cj.txt new file mode 100644 index 00000000..3943d36a --- /dev/null +++ b/icuSources/data/brkitr/line_loose_cj.txt @@ -0,0 +1,750 @@ +# Copyright (c) 2002-2015 International Business Machines Corporation and +# others. All Rights Reserved. +# +# file: line_loose_cj.txt +# +# Line Breaking Rules +# Implement default line breaking as defined by +# Unicode Standard Annex #14 Revision 29 for Unicode 6.2 +# http://www.unicode.org/reports/tr14/ +# tailored as noted in 2nd paragraph below.. +# +# TODO: Rule LB 8 remains as it was in Unicode 5.2 +# This is only because of a limitation of ICU break engine implementation, +# not because the older behavior is desirable. +# +# This tailors the line break behavior to correspond to CSS +# line-break=loose (BCP47 -u-lb-loose) as defined for Chinese & Japanese. +# It sets characters of class CJ to behave like ID. +# In addition, it allows breaks: +# * before hyphens 2010 & 2013 (both BA) and 301C, 30A0 (both NS) +# * before iteration marks 3005, 303B, 309D, 309E, 30FD, 30FE (all NS) +# * between characters of LineBreak class IN such as 2026 +# * before some centered punct 203C, 2047, 2048, 2049, 30FB, FF1A, FF1B, +# FF65 (all NS) and FF01, FF1F (both EX). +# * before suffix characters with LineBreak class PO and EastAsianWidth A,F,W; +# this includes: 00B0 2030 2032 2033 2035 2103 2109 FE6A FF05 FFE0 +# * after prefix characters with LineBreak class PR and EastAsianWidth A,F,W; +# this includes: 00A4 00B1 20AC 2116 FE69 FF04 FFE1 FFE5 FFE6 + + +# +# Character Classes defined by TR 14. +# + +!!chain; +!!LBCMNoChain; + + +!!lookAheadHardBreak; +# +# !!lookAheadHardBreak Described here because it is (as yet) undocumented elsewhere +# and only used for the line break rules. +# +# It is used in the implementation of rule LB 10 +# which says to treat any combining mark that is not attached to a base +# character as if it were of class AL (alphabetic). +# +# The problem occurs in the reverse rules. +# +# Consider a sequence like, with correct breaks as shown +# LF ID CM AL AL +# ^ ^ ^ +# Then consider the sequence without the initial ID (ideographic) +# LF CM AL AL +# ^ ^ +# Our CM, which in the first example was attached to the ideograph, +# is now unattached, becomes an alpha, and joins in with the other +# alphas. +# +# When iterating forwards, these sequences do not present any problems +# When iterating backwards, we need to look ahead when encountering +# a CM to see whether it attaches to something further on or not. +# (Look-ahead in a reverse rule is looking towards the start) +# +# If the CM is unattached, we need to force a break. +# +# !!lookAheadHardBreak forces the run time state machine to +# stop immediately when a look ahead rule ( '/' operator) matches, +# and set the match position to that of the look-ahead operator, +# no matter what other rules may be in play at the time. +# +# See rule LB 19 for an example. +# + +$AI = [:LineBreak = Ambiguous:]; +$AL = [:LineBreak = Alphabetic:]; +$BAX = [\u2010 \u2013]; +$BA = [[:LineBreak = Break_After:] - $BAX]; +$BB = [:LineBreak = Break_Before:]; +$BK = [:LineBreak = Mandatory_Break:]; +$B2 = [:LineBreak = Break_Both:]; +$CB = [:LineBreak = Contingent_Break:]; +$CJ = [:LineBreak = Conditional_Japanese_Starter:]; +$CL = [:LineBreak = Close_Punctuation:]; +$CM = [:LineBreak = Combining_Mark:]; +$CP = [:LineBreak = Close_Parenthesis:]; +$CR = [:LineBreak = Carriage_Return:]; +$EXX = [\uFF01 \uFF1F]; +$EX = [[:LineBreak = Exclamation:] - $EXX]; +$GL = [:LineBreak = Glue:]; +$HL = [:LineBreak = Hebrew_Letter:]; +$HY = [:LineBreak = Hyphen:]; +$H2 = [:LineBreak = H2:]; +$H3 = [:LineBreak = H3:]; +$ID = [[:LineBreak = Ideographic:] $CJ]; +$IN = [:LineBreak = Inseperable:]; +$IS = [:LineBreak = Infix_Numeric:]; +$JL = [:LineBreak = JL:]; +$JV = [:LineBreak = JV:]; +$JT = [:LineBreak = JT:]; +$LF = [:LineBreak = Line_Feed:]; +$NL = [:LineBreak = Next_Line:]; +$NSX = [\u301C \u30A0 \u3005 \u303B \u309D \u309E \u30FD \u30FE \u203C \u2047 \u2048 \u2049 \u30FB \uFF1A \uFF1B \uFF65]; +$NS = [[:LineBreak = Nonstarter:] - $NSX]; +$NU = [:LineBreak = Numeric:]; +$OP = [:LineBreak = Open_Punctuation:]; +$POX = [\u00B0 \u2030 \u2032 \u2033 \u2035 \u2103 \u2109 \uFE6A \uFF05 \uFFE0]; +$PO = [[:LineBreak = Postfix_Numeric:] - $POX]; +$PRX = [\u00A4 \u00B1 \u20AC \u2116 \uFE69 \uFF04 \uFFE1 \uFFE5 \uFFE6]; +$PR = [[:LineBreak = Prefix_Numeric:] - $PRX]; +$QU = [:LineBreak = Quotation:]; +$RI = [:LineBreak = Regional_Indicator:]; +$SA = [:LineBreak = Complex_Context:]; +$SG = [:LineBreak = Surrogate:]; +$SP = [:LineBreak = Space:]; +$SY = [:LineBreak = Break_Symbols:]; +$WJ = [:LineBreak = Word_Joiner:]; +$XX = [:LineBreak = Unknown:]; +$ZW = [:LineBreak = ZWSpace:]; + +# Special character classes for people & body part emoji: +# Subsets of $CM: +$ZWJ = \u200D; +$EmojiVar = \uFE0F; +# The following are subsets of $ID +$EmojiForSeqs = [\u2764 \U0001F466-\U0001F469 \U0001F48B]; +$EmojiForMods = [\u261D \u270A-\u270C \U0001F385 \U0001F3C3-\U0001F3C4 \U0001F3C7 \U0001F3CA \U0001F442-\U0001F443 \U0001F446-\U0001F450 \U0001F466-\U0001F469 \U0001F46E-\U0001F478 \U0001F47C \U0001F481-\U0001F483 \U0001F485-\U0001F487 \U0001F4AA \U0001F596 \U0001F645-\U0001F647 \U0001F64B-\U0001F64F \U0001F6A3 \U0001F6B4-\U0001F6B6 \U0001F6C0]; +$EmojiMods = [\U0001F3FB-\U0001F3FF]; + +# Dictionary character set, for triggering language-based break engines. Currently +# limited to LineBreak=Complex_Context. Note that this set only works in Unicode +# 5.0 or later as the definition of Complex_Context was corrected to include all +# characters requiring dictionary break. + +$dictionary = [:LineBreak = Complex_Context:]; + +# +# Rule LB1. By default, treat AI (characters with ambiguous east Asian width), +# SA (South East Asian: Thai, Lao, Khmer) +# SG (Unpaired Surrogates) +# XX (Unknown, unassigned) +# as $AL (Alphabetic) +# +$ALPlus = [$AL $AI $SA $SG $XX]; + +# +# Combining Marks. X $CM* behaves as if it were X. Rule LB6. +# +$ALcm = $ALPlus $CM*; +$BAcm = $BA $CM*; +$BAXcm = $BAX $CM*; +$BBcm = $BB $CM*; +$B2cm = $B2 $CM*; +$CLcm = $CL $CM*; +$CPcm = $CP $CM*; +$EXcm = $EX $CM*; +$EXXcm = $EXX $CM*; +$GLcm = $GL $CM*; +$HLcm = $HL $CM*; +$HYcm = $HY $CM*; +$H2cm = $H2 $CM*; +$H3cm = $H3 $CM*; +$IDcm = $ID $CM*; +$INcm = $IN $CM*; +$IScm = $IS $CM*; +$JLcm = $JL $CM*; +$JVcm = $JV $CM*; +$JTcm = $JT $CM*; +$NScm = $NS $CM*; +$NSXcm = $NSX $CM*; +$NUcm = $NU $CM*; +$OPcm = $OP $CM*; +$POcm = $PO $CM*; +$POXcm = $POX $CM*; +$PRcm = $PR $CM*; +$PRXcm = $PRX $CM*; +$QUcm = $QU $CM*; +$RIcm = $RI $CM*; +$SYcm = $SY $CM*; +$WJcm = $WJ $CM*; + +## ------------------------------------------------- + +!!forward; + +# +# Each class of character can stand by itself as an unbroken token, with trailing combining stuff +# +$ALPlus $CM+; +$BA $CM+; +$BAX $CM+; +$BB $CM+; +$B2 $CM+; +$CL $CM+; +$CP $CM+; +$EX $CM+; +$EXX $CM+; +$GL $CM+; +$HL $CM+; +$HY $CM+; +$H2 $CM+; +$H3 $CM+; +$ID $CM+; +$IN $CM+; +$IS $CM+; +$JL $CM+; +$JV $CM+; +$JT $CM+; +$NS $CM+; +$NSX $CM+; +$NU $CM+; +$OP $CM+; +$PO $CM+; +$POX $CM+; +$PR $CM+; +$PRX $CM+; +$QU $CM+; +$RI $CM+; +$SY $CM+; +$WJ $CM+; + +# +# CAN_CM is the set of characters that may combine with CM combining chars. +# Note that Linebreak UAX 14's concept of a combining char and the rules +# for what they can combine with are _very_ different from the rest of Unicode. +# +# Note that $CM itself is left out of this set. If CM is needed as a base +# it must be listed separately in the rule. +# +$CAN_CM = [^$SP $BK $CR $LF $NL $ZW $CM]; # Bases that can take CMs +$CANT_CM = [ $SP $BK $CR $LF $NL $ZW $CM]; # Bases that can't take CMs + +# +# AL_FOLLOW set of chars that can unconditionally follow an AL +# Needed in rules where stand-alone $CM s are treated as AL. +# Chaining is disabled with CM because it causes other failures, +# so for this one case we need to manually list out longer sequences. +# +$AL_FOLLOW_NOCM = [$BK $CR $LF $NL $ZW $SP]; +$AL_FOLLOW_CM = [$CL $CP $EX $EXX $HL $IS $SY $WJ $GL $OP $QU $BA $BAX $HY $NS $NSX $IN $NU $ALPlus]; +$AL_FOLLOW = [$AL_FOLLOW_NOCM $AL_FOLLOW_CM]; + + +# +# Rule LB 4, 5 Mandatory (Hard) breaks. +# +$LB4Breaks = [$BK $CR $LF $NL]; +$LB4NonBreaks = [^$BK $CR $LF $NL]; +$CR $LF {100}; + +# +# LB 6 Do not break before hard line breaks. +# +$LB4NonBreaks? $LB4Breaks {100}; # LB 5 do not break before hard breaks. +$CAN_CM $CM* $LB4Breaks {100}; +$CM+ $LB4Breaks {100}; + +# LB 7 x SP +# x ZW +$LB4NonBreaks [$SP $ZW]; +$CAN_CM $CM* [$SP $ZW]; +$CM+ [$SP $ZW]; + +# +# LB 8 Break after zero width space +# TODO: ZW SP* +# An engine change is required to write the reverse rule for this. +# For now, leave the Unicode 5.2 rule, ZW +# +$LB8Breaks = [$LB4Breaks $ZW]; +$LB8NonBreaks = [[$LB4NonBreaks] - [$ZW]]; + + +# Special forward rule for people & body part emoji: +# don't break $ZWJ from subsequent $EmojiForSeqs +$EmojiForSeqs $EmojiVar? $EmojiMods? $ZWJ $EmojiForSeqs; + +# LB 9 Combining marks. X $CM needs to behave like X, where X is not $SP, $BK $CR $LF $NL +# $CM not covered by the above needs to behave like $AL +# See definition of $CAN_CM. + +$CAN_CM $CM+; # Stick together any combining sequences that don't match other rules. +$CM+; + +# +# LB 11 Do not break before or after WORD JOINER & related characters. +# +$CAN_CM $CM* $WJcm; +$LB8NonBreaks $WJcm; +$CM+ $WJcm; + +$WJcm $CANT_CM; +$WJcm $CAN_CM $CM*; + +# +# LB 12 Do not break after NBSP and related characters. +# GL x +# +$GLcm $CAN_CM $CM*; +$GLcm $CANT_CM; + +# +# LB 12a Do not break before NBSP and related characters ... +# [^SP BA HY] x GL +# +[[$LB8NonBreaks] - [$SP $BA $BAX $HY]] $CM* $GLcm; +$CM+ GLcm; + + + +# +# LB 13 Don't break before ']' or '!' or ';' or '/', even after spaces. +# +# Do not include $EXX here +$LB8NonBreaks $CL; +$CAN_CM $CM* $CL; +$CM+ $CL; # by rule 10, stand-alone CM behaves as AL + +$LB8NonBreaks $CP; +$CAN_CM $CM* $CP; +$CM+ $CP; # by rule 10, stand-alone CM behaves as AL + +$LB8NonBreaks $EX; +$CAN_CM $CM* $EX; +$CM+ $EX; # by rule 10, stand-alone CM behaves as AL + +$LB8NonBreaks $IS; +$CAN_CM $CM* $IS; +$CM+ $IS; # by rule 10, stand-alone CM behaves as AL + +$LB8NonBreaks $SY; +$CAN_CM $CM* $SY; +$CM+ $SY; # by rule 10, stand-alone CM behaves as AL + + +# +# LB 14 Do not break after OP, even after spaces +# +$OPcm $SP* $CAN_CM $CM*; +$OPcm $SP* $CANT_CM; + +$OPcm $SP+ $CM+ $AL_FOLLOW?; # by rule 10, stand-alone CM behaves as AL + +# LB 15 +$QUcm $SP* $OPcm; + +# LB 16 +# Do not break between closing punctuation and $NS, even with intervening spaces +# But DO allow a break between closing punctuation and $NSX, don't include it here +($CLcm | $CPcm) $SP* $NScm; + +# LB 17 +$B2cm $SP* $B2cm; + +# +# LB 18 Break after spaces. +# +$LB18NonBreaks = [$LB8NonBreaks - [$SP]]; +$LB18Breaks = [$LB8Breaks $SP]; + + +# LB 19 +# x QU +$LB18NonBreaks $CM* $QUcm; +$CM+ $QUcm; + +# QU x +$QUcm .?; +$QUcm $LB18NonBreaks $CM*; # Don't let a combining mark go onto $CR, $BK, etc. + # TODO: I don't think this rule is needed. + + +# LB 20 +# $CB +# $CB + +$LB20NonBreaks = [$LB18NonBreaks - $CB]; + +# LB 21 x (BA | HY | NS) +# BB x +# +# DO allow breaks here before $BAXcm and $NSXcm, so don't include them +$LB20NonBreaks $CM* ($BAcm | $HYcm | $NScm); + +$BBcm [^$CB]; # $BB x +$BBcm $LB20NonBreaks $CM*; + +# LB 21a Don't break after Hebrew + Hyphen +# HL (HY | BA) x +# +$HLcm ($HYcm | $BAcm | $BAXcm) [^$CB]?; + +# LB 21b (forward) Don't break between SY and HL +# (break between HL and SY already disallowed by LB 13 above) +$SYcm $HLcm; + +# LB 22 +($ALcm | $HLcm) $INcm; +$CM+ $INcm; # by rule 10, any otherwise unattached CM behaves as AL +$IDcm $INcm; +# $INcm $INcm; # delete this rule for CSS loose +$NUcm $INcm; + + +# LB 23 +# Do not include $POX here +$IDcm $POcm; +$ALcm $NUcm; # includes $LB19 +$HLcm $NUcm; +$CM+ $NUcm; # Rule 10, any otherwise unattached CM behaves as AL +$NUcm $ALcm; +$NUcm $HLcm; + +# +# LB 24 +# +# Do not include $PRX here +$PRcm $IDcm; +$PRcm ($ALcm | $HLcm); +($POcm | $POXcm) ($ALcm | $HLcm); + +# +# LB 25 Numbers. +# +# Here do not include $PRX at the beginning or $POX at the end +($PRcm | $POcm | $POXcm)? ($OPcm | $HYcm)? $NUcm ($NUcm | $SYcm | $IScm)* ($CLcm | $CPcm)? ($PRcm | $PRXcm | $POcm)?; + +# LB 26 Do not break a Korean syllable +# +$JLcm ($JLcm | $JVcm | $H2cm | $H3cm); +($JVcm | $H2cm) ($JVcm | $JTcm); +($JTcm | $H3cm) $JTcm; + +# LB 27 Treat korean Syllable Block the same as ID (don't break it) +# Do not include $POX or $PRX here +($JLcm | $JVcm | $JTcm | $H2cm | $H3cm) $INcm; +($JLcm | $JVcm | $JTcm | $H2cm | $H3cm) $POcm; +$PRcm ($JLcm | $JVcm | $JTcm | $H2cm | $H3cm); + + +# LB 28 Do not break between alphabetics +# +($ALcm | $HLcm) ($ALcm | $HLcm); +$CM+ ($ALcm | $HLcm); # The $CM+ is from rule 10, an unattached CM is treated as AL + +# LB 29 +$IScm ($ALcm | $HLcm); + +# LB 30 +($ALcm | $HLcm | $NUcm) $OPcm; +$CM+ $OPcm; # The $CM+ is from rule 10, an unattached CM is treated as AL. +$CPcm ($ALcm | $HLcm | $NUcm); + +# LB 30a Do not break between regional indicators. +$RIcm $RIcm; + +# Special forward rule for people & body part emoji: +# don't break between relevant emoji and $EmojiMods +$EmojiForMods $EmojiVar? $EmojiMods; + +# +# Reverse Rules. +# +## ------------------------------------------------- + +!!reverse; + +$CM+ $ALPlus; +$CM+ $BA; +$CM+ $BAX; +$CM+ $BB; +$CM+ $B2; +$CM+ $CL; +$CM+ $CP; +$CM+ $EX; +$CM+ $EXX; +$CM+ $GL; +$CM+ $HL; +$CM+ $HY; +$CM+ $H2; +$CM+ $H3; +$CM+ $ID; +$CM+ $IN; +$CM+ $IS; +$CM+ $JL; +$CM+ $JV; +$CM+ $JT; +$CM+ $NS; +$CM+ $NSX; +$CM+ $NU; +$CM+ $OP; +$CM+ $PO; +$CM+ $POX; +$CM+ $PR; +$CM+ $PRX; +$CM+ $QU; +$CM+ $RI; +$CM+ $SY; +$CM+ $WJ; +$CM+; + + +# +# Sequences of the form (shown forwards) +# [CANT_CM] [CM] [whatever] +# The CM needs to behave as an AL +# +$AL_FOLLOW $CM+ / ( + [$BK $CR $LF $NL $ZW {eof}] | + $SP+ $CM+ $SP | + $SP+ $CM* ([^$OP $CM $SP] | [$AL {eof}])); # if LB 14 will match, need to surpress this break. + # LB14 says OP SP* x . + # becomes OP SP* x AL + # becomes OP SP* x CM+ AL_FOLLOW + # + # Further note: the $AL in [$AL {eof}] is only to work around + # a rule compiler bug which complains about + # empty sets otherwise. + +# +# Sequences of the form (shown forwards) +# [CANT_CM] [CM] [PR] +# The CM needs to behave as an AL +# This rule is concerned about getting the second of the two in place. +# + +[$PR $PRX ] / $CM+ [$BK $CR $LF $NL $ZW $SP {eof}]; + + + +# LB 4, 5, 5 + +$LB4Breaks [$LB4NonBreaks-$CM]; +$LB4Breaks $CM+ $CAN_CM; +$LF $CR; + + +# LB 7 x SP +# x ZW +[$SP $ZW] [$LB4NonBreaks-$CM]; +[$SP $ZW] $CM+ $CAN_CM; + +# LB 8 ZW SP* +# TODO: to implement this, we need more than one look-ahead hard break in play at a time. +# Requires an engine enhancement. +# / $SP* $ZW + +# Special reverse rule for people & body part emoji: +# don't break $ZWJ from subsequent $EmojiForSeqs +$EmojiForSeqs $ZWJ $EmojiMods? $EmojiVar? $EmojiForSeqs; + +# LB 9,10 Combining marks. +# X $CM needs to behave like X, where X is not $SP or controls. +# $CM not covered by the above needs to behave like $AL +# Stick together any combining sequences that don't match other rules. +$CM+ $CAN_CM; + + +# LB 11 +$CM* $WJ $CM* $CAN_CM; +$CM* $WJ [$LB8NonBreaks-$CM]; + + $CANT_CM $CM* $WJ; +$CM* $CAN_CM $CM* $WJ; + +# LB 12a +# [^SP BA HY] x GL +# +$CM* $GL $CM* [$LB8NonBreaks-[$CM $SP $BA $BAX $HY]]; + +# LB 12 +# GL x +# +$CANT_CM $CM* $GL; +$CM* $CAN_CM $CM* $GL; + + +# LB 13 +# Do not include $EXX here +$CL $CM+ $CAN_CM; +$CP $CM+ $CAN_CM; +$EX $CM+ $CAN_CM; +$IS $CM+ $CAN_CM; +$SY $CM+ $CAN_CM; + +$CL [$LB8NonBreaks-$CM]; +$CP [$LB8NonBreaks-$CM]; +$EX [$LB8NonBreaks-$CM]; +$IS [$LB8NonBreaks-$CM]; +$SY [$LB8NonBreaks-$CM]; + +# Rule 13 & 14 taken together for an edge case. +# Match this, shown forward +# OP SP+ ($CM+ behaving as $AL) (CL | CP | EX | IS | IY) +# This really wants to chain at the $CM+ (which is acting as an $AL) +# except for $CM chaining being disabled. +[$CL $CP $EX $IS $SY] $CM+ $SP+ $CM* $OP; + +# LB 14 OP SP* x +# +$CM* $CAN_CM $SP* $CM* $OP; + $CANT_CM $SP* $CM* $OP; +$AL_FOLLOW? $CM+ $SP $SP* $CM* $OP; # by LB 10, behaves like $AL_FOLLOW? $AL $SP* $CM* $OP + + $AL_FOLLOW_NOCM $CM+ $SP+ $CM* $OP; +$CM* $AL_FOLLOW_CM $CM+ $SP+ $CM* $OP; +$SY $CM $SP+ $OP; # TODO: Experiment. Remove. + + + +# LB 15 +$CM* $OP $SP* $CM* $QU; + +# LB 16 +# Don't include $NSX here +$CM* $NS $SP* $CM* ($CL | $CP); + +# LB 17 +$CM* $B2 $SP* $CM* $B2; + +# LB 18 break after spaces +# Nothing explicit needed here. + + +# +# LB 19 +# +$CM* $QU $CM* $CAN_CM; # . x QU +$CM* $QU $LB18NonBreaks; + + +$CM* $CAN_CM $CM* $QU; # QU x . + $CANT_CM $CM* $QU; + +# +# LB 20 Break before and after CB. +# nothing needed here. +# + +# LB 21 +# Don't include $BAX or $NSX here +$CM* ($BA | $HY | $NS) $CM* [$LB20NonBreaks-$CM]; # . x (BA | HY | NS) + +$CM* [$LB20NonBreaks-$CM] $CM* $BB; # BB x . +[^$CB] $CM* $BB; # + +# LB21a +[^$CB] $CM* ($HY | $BA | $BAX) $CM* $HL; + +# LB21b (reverse) +$CM* $HL $CM* $SY; + +# LB 22 +$CM* $IN $CM* ($ALPlus | $HL); +$CM* $IN $CM* $ID; +# $CM* $IN $CM* $IN; # delete this rule for CSS loose +$CM* $IN $CM* $NU; + +# LB 23 +# Do not include $POX here +$CM* $PO $CM* $ID; +$CM* $NU $CM* ($ALPlus | $HL); +$CM* ($ALPlus | $HL) $CM* $NU; + +# LB 24 +# Do not include $PRX here +$CM* $ID $CM* $PR; +$CM* ($ALPlus | $HL) $CM* $PR; +$CM* ($ALPlus | $HL) $CM* ($PO | $POX); + + +# LB 25 +# Here do not include $POX at the beginning or $PRX at the end +($CM* ($PR | $PRX | $PO))? ($CM* ($CL | $CP))? ($CM* ($NU | $IS | $SY))* $CM* $NU ($CM* ($OP | $HY))? ($CM* ($PR | $PO | $POX))?; + +# LB 26 +$CM* ($H3 | $H2 | $JV | $JL) $CM* $JL; +$CM* ($JT | $JV) $CM* ($H2 | $JV); +$CM* $JT $CM* ($H3 | $JT); + +# LB 27 +# Do not include $POX or $PRX here +$CM* $IN $CM* ($H3 | $H2 | $JT | $JV | $JL); +$CM* $PO $CM* ($H3 | $H2 | $JT | $JV | $JL); +$CM* ($H3 | $H2 | $JT | $JV | $JL) $CM* $PR; + +# LB 28 +$CM* ($ALPlus | $HL) $CM* ($ALPlus | $HL); + + +# LB 29 +$CM* ($ALPlus | $HL) $CM* $IS; + +# LB 30 +$CM* $OP $CM* ($ALPlus | $HL | $NU); +$CM* ($ALPlus | $HL | $NU) $CM* $CP; + +# LB 30a +$CM* $RI $CM* $RI; + +# Special reverse rule for people & body part emoji: +# don't break between relevant emoji and $EmojiMods +$EmojiMods $EmojiVar? $EmojiForMods; + +## ------------------------------------------------- + +!!safe_reverse; + +# LB 9 +$CM+ [^$CM $BK $CR $LF $NL $ZW $SP]; +$CM+ $SP / .; + +# LB 14 +$SP+ $CM* $OP; + +# LB 15 +$SP+ $CM* $QU; + +# LB 16 +$SP+ $CM* ($CL | $CP); + +# LB 17 +$SP+ $CM* $B2; + +# LB 21 +$CM* ($HY | $BA) $CM* $HL; + +# LB 25 +($CM* ($IS | $SY))+ $CM* $NU; +($CL | $CP) $CM* ($NU | $IS | $SY); + +# For dictionary-based break +$dictionary $dictionary; + +## ------------------------------------------------- + +!!safe_forward; + +# Skip forward over all character classes that are involved in +# rules containing patterns with possibly more than one char +# of context. +# +# It might be slightly more efficient to have specific rules +# instead of one generic one, but only if we could +# turn off rule chaining. We don't want to move more +# than necessary. +# +[$CM $OP $QU $CL $CP $B2 $PR $PRX $HY $BA $SP $dictionary]+ [^$CM $OP $QU $CL $CP $B2 $PR $PRX $HY $BA $dictionary]; +$dictionary $dictionary; + diff --git a/icuSources/data/brkitr/line_loose_fi.txt b/icuSources/data/brkitr/line_loose_fi.txt new file mode 100644 index 00000000..94e2c4d9 --- /dev/null +++ b/icuSources/data/brkitr/line_loose_fi.txt @@ -0,0 +1,725 @@ +# Copyright (c) 2002-2015 International Business Machines Corporation and +# others. All Rights Reserved. +# +# file: line_loose_fi.txt +# +# Line Breaking Rules +# Implement default line breaking as defined by +# Unicode Standard Annex #14 Revision 29 for Unicode 6.2 +# http://www.unicode.org/reports/tr14/ +# tailored as noted in 2nd paragraph below.. +# +# TODO: Rule LB 8 remains as it was in Unicode 5.2 +# This is only because of a limitation of ICU break engine implementation, +# not because the older behavior is desirable. +# +# This tailors the line break behavior both for Finnish and to correpond to CSS +# line-break=loose (BCP47 -u-lb-loose) as defined for languages other than +# Chinese & Japanese. +# It sets characters of class CJ to behave like ID. +# In addition, it allows breaks before 3005, 303B, 309D, 309E, 30FD, 30FE (all NS). + +# +# Character Classes defined by TR 14. +# + +!!chain; +!!LBCMNoChain; + + +!!lookAheadHardBreak; +# +# !!lookAheadHardBreak Described here because it is (as yet) undocumented elsewhere +# and only used for the line break rules. +# +# It is used in the implementation of rule LB 10 +# which says to treat any combining mark that is not attached to a base +# character as if it were of class AL (alphabetic). +# +# The problem occurs in the reverse rules. +# +# Consider a sequence like, with correct breaks as shown +# LF ID CM AL AL +# ^ ^ ^ +# Then consider the sequence without the initial ID (ideographic) +# LF CM AL AL +# ^ ^ +# Our CM, which in the first example was attached to the ideograph, +# is now unattached, becomes an alpha, and joins in with the other +# alphas. +# +# When iterating forwards, these sequences do not present any problems +# When iterating backwards, we need to look ahead when encountering +# a CM to see whether it attaches to something further on or not. +# (Look-ahead in a reverse rule is looking towards the start) +# +# If the CM is unattached, we need to force a break. +# +# !!lookAheadHardBreak forces the run time state machine to +# stop immediately when a look ahead rule ( '/' operator) matches, +# and set the match position to that of the look-ahead operator, +# no matter what other rules may be in play at the time. +# +# See rule LB 19 for an example. +# + +$AI = [:LineBreak = Ambiguous:]; +$AL = [:LineBreak = Alphabetic:]; +$BA = [[:LineBreak = Break_After:] - [\u2010]]; +$HH = [\u2010]; +$BB = [:LineBreak = Break_Before:]; +$BK = [:LineBreak = Mandatory_Break:]; +$B2 = [:LineBreak = Break_Both:]; +$CB = [:LineBreak = Contingent_Break:]; +$CJ = [:LineBreak = Conditional_Japanese_Starter:]; +$CL = [:LineBreak = Close_Punctuation:]; +$CM = [:LineBreak = Combining_Mark:]; +$CP = [:LineBreak = Close_Parenthesis:]; +$CR = [:LineBreak = Carriage_Return:]; +$EX = [:LineBreak = Exclamation:]; +$GL = [:LineBreak = Glue:]; +$HL = [:LineBreak = Hebrew_Letter:]; +$HY = [:LineBreak = Hyphen:]; +$H2 = [:LineBreak = H2:]; +$H3 = [:LineBreak = H3:]; +$ID = [[:LineBreak = Ideographic:] $CJ]; +$IN = [:LineBreak = Inseperable:]; +$IS = [:LineBreak = Infix_Numeric:]; +$JL = [:LineBreak = JL:]; +$JV = [:LineBreak = JV:]; +$JT = [:LineBreak = JT:]; +$LF = [:LineBreak = Line_Feed:]; +$NL = [:LineBreak = Next_Line:]; +$NSX = [\u3005 \u303B \u309D \u309E \u30FD \u30FE]; +$NS = [[:LineBreak = Nonstarter:] - $NSX]; +$NU = [:LineBreak = Numeric:]; +$OP = [:LineBreak = Open_Punctuation:]; +$PO = [:LineBreak = Postfix_Numeric:]; +$PR = [:LineBreak = Prefix_Numeric:]; +$QU = [:LineBreak = Quotation:]; +$RI = [:LineBreak = Regional_Indicator:]; +$SA = [:LineBreak = Complex_Context:]; +$SG = [:LineBreak = Surrogate:]; +$SP = [:LineBreak = Space:]; +$SY = [:LineBreak = Break_Symbols:]; +$WJ = [:LineBreak = Word_Joiner:]; +$XX = [:LineBreak = Unknown:]; +$ZW = [:LineBreak = ZWSpace:]; + +# Special character classes for people & body part emoji: +# Subsets of $CM: +$ZWJ = \u200D; +$EmojiVar = \uFE0F; +# The following are subsets of $ID +$EmojiForSeqs = [\u2764 \U0001F466-\U0001F469 \U0001F48B]; +$EmojiForMods = [\u261D \u270A-\u270C \U0001F385 \U0001F3C3-\U0001F3C4 \U0001F3C7 \U0001F3CA \U0001F442-\U0001F443 \U0001F446-\U0001F450 \U0001F466-\U0001F469 \U0001F46E-\U0001F478 \U0001F47C \U0001F481-\U0001F483 \U0001F485-\U0001F487 \U0001F4AA \U0001F596 \U0001F645-\U0001F647 \U0001F64B-\U0001F64F \U0001F6A3 \U0001F6B4-\U0001F6B6 \U0001F6C0]; +$EmojiMods = [\U0001F3FB-\U0001F3FF]; + +# Dictionary character set, for triggering language-based break engines. Currently +# limited to LineBreak=Complex_Context. Note that this set only works in Unicode +# 5.0 or later as the definition of Complex_Context was corrected to include all +# characters requiring dictionary break. + +$dictionary = [:LineBreak = Complex_Context:]; + +# +# Rule LB1. By default, treat AI (characters with ambiguous east Asian width), +# SA (South East Asian: Thai, Lao, Khmer) +# SG (Unpaired Surrogates) +# XX (Unknown, unassigned) +# as $AL (Alphabetic) +# +$ALPlus = [$AL $AI $SA $SG $XX]; + +# +# Combining Marks. X $CM* behaves as if it were X. Rule LB6. +# +$ALcm = $ALPlus $CM*; +$BAcm = $BA $CM*; +$HHcm = $HH $CM*; +$BBcm = $BB $CM*; +$B2cm = $B2 $CM*; +$CLcm = $CL $CM*; +$CPcm = $CP $CM*; +$EXcm = $EX $CM*; +$GLcm = $GL $CM*; +$HLcm = $HL $CM*; +$HYcm = $HY $CM*; +$H2cm = $H2 $CM*; +$H3cm = $H3 $CM*; +$IDcm = $ID $CM*; +$INcm = $IN $CM*; +$IScm = $IS $CM*; +$JLcm = $JL $CM*; +$JVcm = $JV $CM*; +$JTcm = $JT $CM*; +$NScm = $NS $CM*; +$NSXcm = $NSX $CM*; +$NUcm = $NU $CM*; +$OPcm = $OP $CM*; +$POcm = $PO $CM*; +$PRcm = $PR $CM*; +$QUcm = $QU $CM*; +$RIcm = $RI $CM*; +$SYcm = $SY $CM*; +$WJcm = $WJ $CM*; + +## ------------------------------------------------- + +!!forward; + +# +# Each class of character can stand by itself as an unbroken token, with trailing combining stuff +# +$ALPlus $CM+; +$BA $CM+; +$HH $CM+; +$BB $CM+; +$B2 $CM+; +$CL $CM+; +$CP $CM+; +$EX $CM+; +$GL $CM+; +$HL $CM+; +$HY $CM+; +$H2 $CM+; +$H3 $CM+; +$ID $CM+; +$IN $CM+; +$IS $CM+; +$JL $CM+; +$JV $CM+; +$JT $CM+; +$NS $CM+; +$NSX $CM+; +$NU $CM+; +$OP $CM+; +$PO $CM+; +$PR $CM+; +$QU $CM+; +$RI $CM+; +$SY $CM+; +$WJ $CM+; + +# +# CAN_CM is the set of characters that may combine with CM combining chars. +# Note that Linebreak UAX 14's concept of a combining char and the rules +# for what they can combine with are _very_ different from the rest of Unicode. +# +# Note that $CM itself is left out of this set. If CM is needed as a base +# it must be listed separately in the rule. +# +$CAN_CM = [^$SP $BK $CR $LF $NL $ZW $CM]; # Bases that can take CMs +$CANT_CM = [ $SP $BK $CR $LF $NL $ZW $CM]; # Bases that can't take CMs + +# +# AL_FOLLOW set of chars that can unconditionally follow an AL +# Needed in rules where stand-alone $CM s are treated as AL. +# Chaining is disabled with CM because it causes other failures, +# so for this one case we need to manually list out longer sequences. +# +$AL_FOLLOW_NOCM = [$BK $CR $LF $NL $ZW $SP]; +$AL_FOLLOW_CM = [$CL $CP $EX $HL $IS $SY $WJ $GL $OP $QU $BA $HH $HY $NS $NSX $IN $NU $ALPlus]; +$AL_FOLLOW = [$AL_FOLLOW_NOCM $AL_FOLLOW_CM]; + + +# +# Rule LB 4, 5 Mandatory (Hard) breaks. +# +$LB4Breaks = [$BK $CR $LF $NL]; +$LB4NonBreaks = [^$BK $CR $LF $NL]; +$CR $LF {100}; + +# +# LB 6 Do not break before hard line breaks. +# +$LB4NonBreaks? $LB4Breaks {100}; # LB 5 do not break before hard breaks. +$CAN_CM $CM* $LB4Breaks {100}; +$CM+ $LB4Breaks {100}; + +# LB 7 x SP +# x ZW +$LB4NonBreaks [$SP $ZW]; +$CAN_CM $CM* [$SP $ZW]; +$CM+ [$SP $ZW]; + +# +# LB 8 Break after zero width space +# TODO: ZW SP* +# An engine change is required to write the reverse rule for this. +# For now, leave the Unicode 5.2 rule, ZW +# +$LB8Breaks = [$LB4Breaks $ZW]; +$LB8NonBreaks = [[$LB4NonBreaks] - [$ZW]]; + + +# Special forward rule for people & body part emoji: +# don't break $ZWJ from subsequent $EmojiForSeqs +$EmojiForSeqs $EmojiVar? $EmojiMods? $ZWJ $EmojiForSeqs; + +# LB 9 Combining marks. X $CM needs to behave like X, where X is not $SP, $BK $CR $LF $NL +# $CM not covered by the above needs to behave like $AL +# See definition of $CAN_CM. + +$CAN_CM $CM+; # Stick together any combining sequences that don't match other rules. +$CM+; + +# +# LB 11 Do not break before or after WORD JOINER & related characters. +# +$CAN_CM $CM* $WJcm; +$LB8NonBreaks $WJcm; +$CM+ $WJcm; + +$WJcm $CANT_CM; +$WJcm $CAN_CM $CM*; + +# +# LB 12 Do not break after NBSP and related characters. +# GL x +# +$GLcm $CAN_CM $CM*; +$GLcm $CANT_CM; + +# +# LB 12a Do not break before NBSP and related characters ... +# [^SP BA HY] x GL +# +[[$LB8NonBreaks] - [$SP $BA $HH $HY]] $CM* $GLcm; +$CM+ GLcm; + + + +# +# LB 13 Don't break before ']' or '!' or ';' or '/', even after spaces. +# +$LB8NonBreaks $CL; +$CAN_CM $CM* $CL; +$CM+ $CL; # by rule 10, stand-alone CM behaves as AL + +$LB8NonBreaks $CP; +$CAN_CM $CM* $CP; +$CM+ $CP; # by rule 10, stand-alone CM behaves as AL + +$LB8NonBreaks $EX; +$CAN_CM $CM* $EX; +$CM+ $EX; # by rule 10, stand-alone CM behaves as AL + +$LB8NonBreaks $IS; +$CAN_CM $CM* $IS; +$CM+ $IS; # by rule 10, stand-alone CM behaves as AL + +$LB8NonBreaks $SY; +$CAN_CM $CM* $SY; +$CM+ $SY; # by rule 10, stand-alone CM behaves as AL + + +# +# LB 14 Do not break after OP, even after spaces +# +$OPcm $SP* $CAN_CM $CM*; +$OPcm $SP* $CANT_CM; + +$OPcm $SP+ $CM+ $AL_FOLLOW?; # by rule 10, stand-alone CM behaves as AL + +# LB 15 +$QUcm $SP* $OPcm; + +# LB 16 +# Do not break between closing punctuation and $NS, even with intervening spaces +# But DO allow a break between closing punctuation and $NSX, don't include it here +($CLcm | $CPcm) $SP* $NScm; + +# LB 17 +$B2cm $SP* $B2cm; + +# +# LB 18 Break after spaces. +# +$LB18NonBreaks = [$LB8NonBreaks - [$SP]]; +$LB18Breaks = [$LB8Breaks $SP]; + + +# LB 19 +# x QU +$LB18NonBreaks $CM* $QUcm; +$CM+ $QUcm; + +# QU x +$QUcm .?; +$QUcm $LB18NonBreaks $CM*; # Don't let a combining mark go onto $CR, $BK, etc. + # TODO: I don't think this rule is needed. + + +# LB 20 +# $CB +# $CB + +$LB20NonBreaks = [$LB18NonBreaks - $CB]; + +# LB 20.09 added rule for Finnish tailoring +# LB 21 x (BA | HY | NS) +# BB x +# +# DO allow breaks here before NSXcm, so don't include it +$LB20NonBreaks $CM* ($BAcm | $HHcm | $HYcm | $NScm) / $AL; +$LB20NonBreaks $CM* ($BAcm | $HHcm | $HYcm | $NScm); +($HY | $HH) $AL; + +$BBcm [^$CB]; # $BB x +$BBcm $LB20NonBreaks $CM*; + +# LB 21a Don't break after Hebrew + Hyphen +# HL (HY | BA) x +# +$HLcm ($HYcm | $BAcm | $HHcm) [^$CB]?; + +# LB 21b (forward) Don't break between SY and HL +# (break between HL and SY already disallowed by LB 13 above) +$SYcm $HLcm; + +# LB 22 +($ALcm | $HLcm) $INcm; +$CM+ $INcm; # by rule 10, any otherwise unattached CM behaves as AL +$IDcm $INcm; +$INcm $INcm; +$NUcm $INcm; + + +# $LB 23 +$IDcm $POcm; +$ALcm $NUcm; # includes $LB19 +$HLcm $NUcm; +$CM+ $NUcm; # Rule 10, any otherwise unattached CM behaves as AL +$NUcm $ALcm; +$NUcm $HLcm; + +# +# LB 24 +# +$PRcm $IDcm; +$PRcm ($ALcm | $HLcm); +$POcm ($ALcm | $HLcm); + +# +# LB 25 Numbers. +# +($PRcm | $POcm)? ($OPcm | $HYcm)? $NUcm ($NUcm | $SYcm | $IScm)* ($CLcm | $CPcm)? ($PRcm | $POcm)?; + +# LB 26 Do not break a Korean syllable +# +$JLcm ($JLcm | $JVcm | $H2cm | $H3cm); +($JVcm | $H2cm) ($JVcm | $JTcm); +($JTcm | $H3cm) $JTcm; + +# LB 27 Treat korean Syllable Block the same as ID (don't break it) +($JLcm | $JVcm | $JTcm | $H2cm | $H3cm) $INcm; +($JLcm | $JVcm | $JTcm | $H2cm | $H3cm) $POcm; +$PRcm ($JLcm | $JVcm | $JTcm | $H2cm | $H3cm); + + +# LB 28 Do not break between alphabetics +# +($ALcm | $HLcm) ($ALcm | $HLcm); +$CM+ ($ALcm | $HLcm); # The $CM+ is from rule 10, an unattached CM is treated as AL + +# LB 29 +$IScm ($ALcm | $HLcm); + +# LB 30 +($ALcm | $HLcm | $NUcm) $OPcm; +$CM+ $OPcm; # The $CM+ is from rule 10, an unattached CM is treated as AL. +$CPcm ($ALcm | $HLcm | $NUcm); + +# LB 30a Do not break between regional indicators. +$RIcm $RIcm; + +# Special forward rule for people & body part emoji: +# don't break between relevant emoji and $EmojiMods +$EmojiForMods $EmojiVar? $EmojiMods; + +# +# Reverse Rules. +# +## ------------------------------------------------- + +!!reverse; + +$CM+ $ALPlus; +$CM+ $BA; +$CM+ $HH; +$CM+ $BB; +$CM+ $B2; +$CM+ $CL; +$CM+ $CP; +$CM+ $EX; +$CM+ $GL; +$CM+ $HL; +$CM+ $HY; +$CM+ $H2; +$CM+ $H3; +$CM+ $ID; +$CM+ $IN; +$CM+ $IS; +$CM+ $JL; +$CM+ $JV; +$CM+ $JT; +$CM+ $NS; +$CM+ $NSX; +$CM+ $NU; +$CM+ $OP; +$CM+ $PO; +$CM+ $PR; +$CM+ $QU; +$CM+ $RI; +$CM+ $SY; +$CM+ $WJ; +$CM+; + + +# +# Sequences of the form (shown forwards) +# [CANT_CM] [CM] [whatever] +# The CM needs to behave as an AL +# +$AL_FOLLOW $CM+ / ( + [$BK $CR $LF $NL $ZW {eof}] | + $SP+ $CM+ $SP | + $SP+ $CM* ([^$OP $CM $SP] | [$AL {eof}])); # if LB 14 will match, need to surpress this break. + # LB14 says OP SP* x . + # becomes OP SP* x AL + # becomes OP SP* x CM+ AL_FOLLOW + # + # Further note: the $AL in [$AL {eof}] is only to work around + # a rule compiler bug which complains about + # empty sets otherwise. + +# +# Sequences of the form (shown forwards) +# [CANT_CM] [CM] [PR] +# The CM needs to behave as an AL +# This rule is concerned about getting the second of the two in place. +# + +[$PR ] / $CM+ [$BK $CR $LF $NL $ZW $SP {eof}]; + + + +# LB 4, 5, 5 + +$LB4Breaks [$LB4NonBreaks-$CM]; +$LB4Breaks $CM+ $CAN_CM; +$LF $CR; + + +# LB 7 x SP +# x ZW +[$SP $ZW] [$LB4NonBreaks-$CM]; +[$SP $ZW] $CM+ $CAN_CM; + +# LB 8 ZW SP* +# TODO: to implement this, we need more than one look-ahead hard break in play at a time. +# Requires an engine enhancement. +# / $SP* $ZW + +# Special reverse rule for people & body part emoji: +# don't break $ZWJ from subsequent $EmojiForSeqs +$EmojiForSeqs $ZWJ $EmojiMods? $EmojiVar? $EmojiForSeqs; + +# LB 9,10 Combining marks. +# X $CM needs to behave like X, where X is not $SP or controls. +# $CM not covered by the above needs to behave like $AL +# Stick together any combining sequences that don't match other rules. +$CM+ $CAN_CM; + + +# LB 11 +$CM* $WJ $CM* $CAN_CM; +$CM* $WJ [$LB8NonBreaks-$CM]; + + $CANT_CM $CM* $WJ; +$CM* $CAN_CM $CM* $WJ; + +# LB 12a +# [^SP BA HY] x GL +# +$CM* $GL $CM* [$LB8NonBreaks-[$CM $SP $BA $HH $HY]]; + +# LB 12 +# GL x +# +$CANT_CM $CM* $GL; +$CM* $CAN_CM $CM* $GL; + + +# LB 13 +$CL $CM+ $CAN_CM; +$CP $CM+ $CAN_CM; +$EX $CM+ $CAN_CM; +$IS $CM+ $CAN_CM; +$SY $CM+ $CAN_CM; + +$CL [$LB8NonBreaks-$CM]; +$CP [$LB8NonBreaks-$CM]; +$EX [$LB8NonBreaks-$CM]; +$IS [$LB8NonBreaks-$CM]; +$SY [$LB8NonBreaks-$CM]; + +# Rule 13 & 14 taken together for an edge case. +# Match this, shown forward +# OP SP+ ($CM+ behaving as $AL) (CL | CP | EX | IS | IY) +# This really wants to chain at the $CM+ (which is acting as an $AL) +# except for $CM chaining being disabled. +[$CL $CP $EX $IS $SY] $CM+ $SP+ $CM* $OP; + +# LB 14 OP SP* x +# +$CM* $CAN_CM $SP* $CM* $OP; + $CANT_CM $SP* $CM* $OP; +$AL_FOLLOW? $CM+ $SP $SP* $CM* $OP; # by LB 10, behaves like $AL_FOLLOW? $AL $SP* $CM* $OP + + $AL_FOLLOW_NOCM $CM+ $SP+ $CM* $OP; +$CM* $AL_FOLLOW_CM $CM+ $SP+ $CM* $OP; +$SY $CM $SP+ $OP; # TODO: Experiment. Remove. + + + +# LB 15 +$CM* $OP $SP* $CM* $QU; + +# LB 16 +# Don't include $NSX here +$CM* $NS $SP* $CM* ($CL | $CP); + +# LB 17 +$CM* $B2 $SP* $CM* $B2; + +# LB 18 break after spaces +# Nothing explicit needed here. + + +# +# LB 19 +# +$CM* $QU $CM* $CAN_CM; # . x QU +$CM* $QU $LB18NonBreaks; + + +$CM* $CAN_CM $CM* $QU; # QU x . + $CANT_CM $CM* $QU; + +# +# LB 20 Break before and after CB. +# nothing needed here. +# + +# LB 20.09 added rule for Finnish tailoring +$AL ($HY | $HH) / $SP; + +# LB 21 +# Don't include $NSX here +$CM* ($BA | $HH | $HY | $NS) $CM* [$LB20NonBreaks-$CM]; # . x (BA | HY | NS) + +$CM* [$LB20NonBreaks-$CM] $CM* $BB; # BB x . +[^$CB] $CM* $BB; # + +# LB21a +[^$CB] $CM* ($HY | $BA | $HH) $CM* $HL; + +# LB21b (reverse) +$CM* $HL $CM* $SY; + +# LB 22 +$CM* $IN $CM* ($ALPlus | $HL); +$CM* $IN $CM* $ID; +$CM* $IN $CM* $IN; +$CM* $IN $CM* $NU; + +# LB 23 +$CM* $PO $CM* $ID; +$CM* $NU $CM* ($ALPlus | $HL); +$CM* ($ALPlus | $HL) $CM* $NU; + +# LB 24 +$CM* $ID $CM* $PR; +$CM* ($ALPlus | $HL) $CM* $PR; +$CM* ($ALPlus | $HL) $CM* $PO; + + +# LB 25 +($CM* ($PR | $PO))? ($CM* ($CL | $CP))? ($CM* ($NU | $IS | $SY))* $CM* $NU ($CM* ($OP | $HY))? ($CM* ($PR | $PO))?; + +# LB 26 +$CM* ($H3 | $H2 | $JV | $JL) $CM* $JL; +$CM* ($JT | $JV) $CM* ($H2 | $JV); +$CM* $JT $CM* ($H3 | $JT); + +# LB 27 +$CM* $IN $CM* ($H3 | $H2 | $JT | $JV | $JL); +$CM* $PO $CM* ($H3 | $H2 | $JT | $JV | $JL); +$CM* ($H3 | $H2 | $JT | $JV | $JL) $CM* $PR; + +# LB 28 +$CM* ($ALPlus | $HL) $CM* ($ALPlus | $HL); + + +# LB 29 +$CM* ($ALPlus | $HL) $CM* $IS; + +# LB 30 +$CM* $OP $CM* ($ALPlus | $HL | $NU); +$CM* ($ALPlus | $HL | $NU) $CM* $CP; + +# LB 30a +$CM* $RI $CM* $RI; + +# Special reverse rule for people & body part emoji: +# don't break between relevant emoji and $EmojiMods +$EmojiMods $EmojiVar? $EmojiForMods; + +## ------------------------------------------------- + +!!safe_reverse; + +# LB 9 +$CM+ [^$CM $BK $CR $LF $NL $ZW $SP]; +$CM+ $SP / .; + +# LB 14 +$SP+ $CM* $OP; + +# LB 15 +$SP+ $CM* $QU; + +# LB 16 +$SP+ $CM* ($CL | $CP); + +# LB 17 +$SP+ $CM* $B2; + +# LB 21 +$CM* ($HY | $BA | $HH) $CM* $HL; + +# LB 25 +($CM* ($IS | $SY))+ $CM* $NU; +($CL | $CP) $CM* ($NU | $IS | $SY); + +# For dictionary-based break +$dictionary $dictionary; + +## ------------------------------------------------- + +!!safe_forward; + +# Skip forward over all character classes that are involved in +# rules containing patterns with possibly more than one char +# of context. +# +# It might be slightly more efficient to have specific rules +# instead of one generic one, but only if we could +# turn off rule chaining. We don't want to move more +# than necessary. +# +[$CM $OP $QU $CL $CP $B2 $PR $HY $BA $SP $dictionary]+ [^$CM $OP $QU $CL $CP $B2 $PR $HY $BA $dictionary]; +$dictionary $dictionary; + diff --git a/icuSources/data/brkitr/line_normal.txt b/icuSources/data/brkitr/line_normal.txt new file mode 100644 index 00000000..1c637f25 --- /dev/null +++ b/icuSources/data/brkitr/line_normal.txt @@ -0,0 +1,705 @@ +# Copyright (c) 2002-2015 International Business Machines Corporation and +# others. All Rights Reserved. +# +# file: line_normal.txt +# +# Line Breaking Rules +# Implement default line breaking as defined by +# Unicode Standard Annex #14 Revision 29 for Unicode 6.2 +# http://www.unicode.org/reports/tr14/ +# tailored as noted in 2nd paragraph below.. +# +# TODO: Rule LB 8 remains as it was in Unicode 5.2 +# This is only because of a limitation of ICU break engine implementation, +# not because the older behavior is desirable. +# +# This tailors the line break behavior to correspond to CSS +# line-break=normal (BCP47 -u-lb-normal) as defined for languages other than +# Chinese & Japanese. +# It sets characters of class CJ to behave like ID. + +# +# Character Classes defined by TR 14. +# + +!!chain; +!!LBCMNoChain; + + +!!lookAheadHardBreak; +# +# !!lookAheadHardBreak Described here because it is (as yet) undocumented elsewhere +# and only used for the line break rules. +# +# It is used in the implementation of rule LB 10 +# which says to treat any combining mark that is not attached to a base +# character as if it were of class AL (alphabetic). +# +# The problem occurs in the reverse rules. +# +# Consider a sequence like, with correct breaks as shown +# LF ID CM AL AL +# ^ ^ ^ +# Then consider the sequence without the initial ID (ideographic) +# LF CM AL AL +# ^ ^ +# Our CM, which in the first example was attached to the ideograph, +# is now unattached, becomes an alpha, and joins in with the other +# alphas. +# +# When iterating forwards, these sequences do not present any problems +# When iterating backwards, we need to look ahead when encountering +# a CM to see whether it attaches to something further on or not. +# (Look-ahead in a reverse rule is looking towards the start) +# +# If the CM is unattached, we need to force a break. +# +# !!lookAheadHardBreak forces the run time state machine to +# stop immediately when a look ahead rule ( '/' operator) matches, +# and set the match position to that of the look-ahead operator, +# no matter what other rules may be in play at the time. +# +# See rule LB 19 for an example. +# + +$AI = [:LineBreak = Ambiguous:]; +$AL = [:LineBreak = Alphabetic:]; +$BA = [:LineBreak = Break_After:]; +$BB = [:LineBreak = Break_Before:]; +$BK = [:LineBreak = Mandatory_Break:]; +$B2 = [:LineBreak = Break_Both:]; +$CB = [:LineBreak = Contingent_Break:]; +$CJ = [:LineBreak = Conditional_Japanese_Starter:]; +$CL = [:LineBreak = Close_Punctuation:]; +$CM = [:LineBreak = Combining_Mark:]; +$CP = [:LineBreak = Close_Parenthesis:]; +$CR = [:LineBreak = Carriage_Return:]; +$EX = [:LineBreak = Exclamation:]; +$GL = [:LineBreak = Glue:]; +$HL = [:LineBreak = Hebrew_Letter:]; +$HY = [:LineBreak = Hyphen:]; +$H2 = [:LineBreak = H2:]; +$H3 = [:LineBreak = H3:]; +$ID = [[:LineBreak = Ideographic:] $CJ]; +$IN = [:LineBreak = Inseperable:]; +$IS = [:LineBreak = Infix_Numeric:]; +$JL = [:LineBreak = JL:]; +$JV = [:LineBreak = JV:]; +$JT = [:LineBreak = JT:]; +$LF = [:LineBreak = Line_Feed:]; +$NL = [:LineBreak = Next_Line:]; +$NS = [:LineBreak = Nonstarter:]; +$NU = [:LineBreak = Numeric:]; +$OP = [:LineBreak = Open_Punctuation:]; +$PO = [:LineBreak = Postfix_Numeric:]; +$PR = [:LineBreak = Prefix_Numeric:]; +$QU = [:LineBreak = Quotation:]; +$RI = [:LineBreak = Regional_Indicator:]; +$SA = [:LineBreak = Complex_Context:]; +$SG = [:LineBreak = Surrogate:]; +$SP = [:LineBreak = Space:]; +$SY = [:LineBreak = Break_Symbols:]; +$WJ = [:LineBreak = Word_Joiner:]; +$XX = [:LineBreak = Unknown:]; +$ZW = [:LineBreak = ZWSpace:]; + +# Special character classes for people & body part emoji: +# Subsets of $CM: +$ZWJ = \u200D; +$EmojiVar = \uFE0F; +# The following are subsets of $ID +$EmojiForSeqs = [\u2764 \U0001F466-\U0001F469 \U0001F48B]; +$EmojiForMods = [\u261D \u270A-\u270C \U0001F385 \U0001F3C3-\U0001F3C4 \U0001F3C7 \U0001F3CA \U0001F442-\U0001F443 \U0001F446-\U0001F450 \U0001F466-\U0001F469 \U0001F46E-\U0001F478 \U0001F47C \U0001F481-\U0001F483 \U0001F485-\U0001F487 \U0001F4AA \U0001F596 \U0001F645-\U0001F647 \U0001F64B-\U0001F64F \U0001F6A3 \U0001F6B4-\U0001F6B6 \U0001F6C0]; +$EmojiMods = [\U0001F3FB-\U0001F3FF]; + +# Dictionary character set, for triggering language-based break engines. Currently +# limited to LineBreak=Complex_Context. Note that this set only works in Unicode +# 5.0 or later as the definition of Complex_Context was corrected to include all +# characters requiring dictionary break. + +$dictionary = [:LineBreak = Complex_Context:]; + +# +# Rule LB1. By default, treat AI (characters with ambiguous east Asian width), +# SA (South East Asian: Thai, Lao, Khmer) +# SG (Unpaired Surrogates) +# XX (Unknown, unassigned) +# as $AL (Alphabetic) +# +$ALPlus = [$AL $AI $SA $SG $XX]; + +# +# Combining Marks. X $CM* behaves as if it were X. Rule LB6. +# +$ALcm = $ALPlus $CM*; +$BAcm = $BA $CM*; +$BBcm = $BB $CM*; +$B2cm = $B2 $CM*; +$CLcm = $CL $CM*; +$CPcm = $CP $CM*; +$EXcm = $EX $CM*; +$GLcm = $GL $CM*; +$HLcm = $HL $CM*; +$HYcm = $HY $CM*; +$H2cm = $H2 $CM*; +$H3cm = $H3 $CM*; +$IDcm = $ID $CM*; +$INcm = $IN $CM*; +$IScm = $IS $CM*; +$JLcm = $JL $CM*; +$JVcm = $JV $CM*; +$JTcm = $JT $CM*; +$NScm = $NS $CM*; +$NUcm = $NU $CM*; +$OPcm = $OP $CM*; +$POcm = $PO $CM*; +$PRcm = $PR $CM*; +$QUcm = $QU $CM*; +$RIcm = $RI $CM*; +$SYcm = $SY $CM*; +$WJcm = $WJ $CM*; + +## ------------------------------------------------- + +!!forward; + +# +# Each class of character can stand by itself as an unbroken token, with trailing combining stuff +# +$ALPlus $CM+; +$BA $CM+; +$BB $CM+; +$B2 $CM+; +$CL $CM+; +$CP $CM+; +$EX $CM+; +$GL $CM+; +$HL $CM+; +$HY $CM+; +$H2 $CM+; +$H3 $CM+; +$ID $CM+; +$IN $CM+; +$IS $CM+; +$JL $CM+; +$JV $CM+; +$JT $CM+; +$NS $CM+; +$NU $CM+; +$OP $CM+; +$PO $CM+; +$PR $CM+; +$QU $CM+; +$RI $CM+; +$SY $CM+; +$WJ $CM+; + +# +# CAN_CM is the set of characters that may combine with CM combining chars. +# Note that Linebreak UAX 14's concept of a combining char and the rules +# for what they can combine with are _very_ different from the rest of Unicode. +# +# Note that $CM itself is left out of this set. If CM is needed as a base +# it must be listed separately in the rule. +# +$CAN_CM = [^$SP $BK $CR $LF $NL $ZW $CM]; # Bases that can take CMs +$CANT_CM = [ $SP $BK $CR $LF $NL $ZW $CM]; # Bases that can't take CMs + +# +# AL_FOLLOW set of chars that can unconditionally follow an AL +# Needed in rules where stand-alone $CM s are treated as AL. +# Chaining is disabled with CM because it causes other failures, +# so for this one case we need to manually list out longer sequences. +# +$AL_FOLLOW_NOCM = [$BK $CR $LF $NL $ZW $SP]; +$AL_FOLLOW_CM = [$CL $CP $EX $HL $IS $SY $WJ $GL $OP $QU $BA $HY $NS $IN $NU $ALPlus]; +$AL_FOLLOW = [$AL_FOLLOW_NOCM $AL_FOLLOW_CM]; + + +# +# Rule LB 4, 5 Mandatory (Hard) breaks. +# +$LB4Breaks = [$BK $CR $LF $NL]; +$LB4NonBreaks = [^$BK $CR $LF $NL]; +$CR $LF {100}; + +# +# LB 6 Do not break before hard line breaks. +# +$LB4NonBreaks? $LB4Breaks {100}; # LB 5 do not break before hard breaks. +$CAN_CM $CM* $LB4Breaks {100}; +$CM+ $LB4Breaks {100}; + +# LB 7 x SP +# x ZW +$LB4NonBreaks [$SP $ZW]; +$CAN_CM $CM* [$SP $ZW]; +$CM+ [$SP $ZW]; + +# +# LB 8 Break after zero width space +# TODO: ZW SP* +# An engine change is required to write the reverse rule for this. +# For now, leave the Unicode 5.2 rule, ZW +# +$LB8Breaks = [$LB4Breaks $ZW]; +$LB8NonBreaks = [[$LB4NonBreaks] - [$ZW]]; + + +# Special forward rule for people & body part emoji: +# don't break $ZWJ from subsequent $EmojiForSeqs +$EmojiForSeqs $EmojiVar? $EmojiMods? $ZWJ $EmojiForSeqs; + +# LB 9 Combining marks. X $CM needs to behave like X, where X is not $SP, $BK $CR $LF $NL +# $CM not covered by the above needs to behave like $AL +# See definition of $CAN_CM. + +$CAN_CM $CM+; # Stick together any combining sequences that don't match other rules. +$CM+; + +# +# LB 11 Do not break before or after WORD JOINER & related characters. +# +$CAN_CM $CM* $WJcm; +$LB8NonBreaks $WJcm; +$CM+ $WJcm; + +$WJcm $CANT_CM; +$WJcm $CAN_CM $CM*; + +# +# LB 12 Do not break after NBSP and related characters. +# GL x +# +$GLcm $CAN_CM $CM*; +$GLcm $CANT_CM; + +# +# LB 12a Do not break before NBSP and related characters ... +# [^SP BA HY] x GL +# +[[$LB8NonBreaks] - [$SP $BA $HY]] $CM* $GLcm; +$CM+ GLcm; + + + +# +# LB 13 Don't break before ']' or '!' or ';' or '/', even after spaces. +# +$LB8NonBreaks $CL; +$CAN_CM $CM* $CL; +$CM+ $CL; # by rule 10, stand-alone CM behaves as AL + +$LB8NonBreaks $CP; +$CAN_CM $CM* $CP; +$CM+ $CP; # by rule 10, stand-alone CM behaves as AL + +$LB8NonBreaks $EX; +$CAN_CM $CM* $EX; +$CM+ $EX; # by rule 10, stand-alone CM behaves as AL + +$LB8NonBreaks $IS; +$CAN_CM $CM* $IS; +$CM+ $IS; # by rule 10, stand-alone CM behaves as AL + +$LB8NonBreaks $SY; +$CAN_CM $CM* $SY; +$CM+ $SY; # by rule 10, stand-alone CM behaves as AL + + +# +# LB 14 Do not break after OP, even after spaces +# +$OPcm $SP* $CAN_CM $CM*; +$OPcm $SP* $CANT_CM; + +$OPcm $SP+ $CM+ $AL_FOLLOW?; # by rule 10, stand-alone CM behaves as AL + +# LB 15 +$QUcm $SP* $OPcm; + +# LB 16 +($CLcm | $CPcm) $SP* $NScm; + +# LB 17 +$B2cm $SP* $B2cm; + +# +# LB 18 Break after spaces. +# +$LB18NonBreaks = [$LB8NonBreaks - [$SP]]; +$LB18Breaks = [$LB8Breaks $SP]; + + +# LB 19 +# x QU +$LB18NonBreaks $CM* $QUcm; +$CM+ $QUcm; + +# QU x +$QUcm .?; +$QUcm $LB18NonBreaks $CM*; # Don't let a combining mark go onto $CR, $BK, etc. + # TODO: I don't think this rule is needed. + + +# LB 20 +# $CB +# $CB + +$LB20NonBreaks = [$LB18NonBreaks - $CB]; + +# LB 21 x (BA | HY | NS) +# BB x +# +$LB20NonBreaks $CM* ($BAcm | $HYcm | $NScm); + +$BBcm [^$CB]; # $BB x +$BBcm $LB20NonBreaks $CM*; + +# LB 21a Don't break after Hebrew + Hyphen +# HL (HY | BA) x +# +$HLcm ($HYcm | $BAcm) [^$CB]?; + +# LB 21b (forward) Don't break between SY and HL +# (break between HL and SY already disallowed by LB 13 above) +$SYcm $HLcm; + +# LB 22 +($ALcm | $HLcm) $INcm; +$CM+ $INcm; # by rule 10, any otherwise unattached CM behaves as AL +$IDcm $INcm; +$INcm $INcm; +$NUcm $INcm; + + +# $LB 23 +$IDcm $POcm; +$ALcm $NUcm; # includes $LB19 +$HLcm $NUcm; +$CM+ $NUcm; # Rule 10, any otherwise unattached CM behaves as AL +$NUcm $ALcm; +$NUcm $HLcm; + +# +# LB 24 +# +$PRcm $IDcm; +$PRcm ($ALcm | $HLcm); +$POcm ($ALcm | $HLcm); + +# +# LB 25 Numbers. +# +($PRcm | $POcm)? ($OPcm | $HYcm)? $NUcm ($NUcm | $SYcm | $IScm)* ($CLcm | $CPcm)? ($PRcm | $POcm)?; + +# LB 26 Do not break a Korean syllable +# +$JLcm ($JLcm | $JVcm | $H2cm | $H3cm); +($JVcm | $H2cm) ($JVcm | $JTcm); +($JTcm | $H3cm) $JTcm; + +# LB 27 Treat korean Syllable Block the same as ID (don't break it) +($JLcm | $JVcm | $JTcm | $H2cm | $H3cm) $INcm; +($JLcm | $JVcm | $JTcm | $H2cm | $H3cm) $POcm; +$PRcm ($JLcm | $JVcm | $JTcm | $H2cm | $H3cm); + + +# LB 28 Do not break between alphabetics +# +($ALcm | $HLcm) ($ALcm | $HLcm); +$CM+ ($ALcm | $HLcm); # The $CM+ is from rule 10, an unattached CM is treated as AL + +# LB 29 +$IScm ($ALcm | $HLcm); + +# LB 30 +($ALcm | $HLcm | $NUcm) $OPcm; +$CM+ $OPcm; # The $CM+ is from rule 10, an unattached CM is treated as AL. +$CPcm ($ALcm | $HLcm | $NUcm); + +# LB 30a Do not break between regional indicators. +$RIcm $RIcm; + +# Special forward rule for people & body part emoji: +# don't break between relevant emoji and $EmojiMods +$EmojiForMods $EmojiVar? $EmojiMods; + +# +# Reverse Rules. +# +## ------------------------------------------------- + +!!reverse; + +$CM+ $ALPlus; +$CM+ $BA; +$CM+ $BB; +$CM+ $B2; +$CM+ $CL; +$CM+ $CP; +$CM+ $EX; +$CM+ $GL; +$CM+ $HL; +$CM+ $HY; +$CM+ $H2; +$CM+ $H3; +$CM+ $ID; +$CM+ $IN; +$CM+ $IS; +$CM+ $JL; +$CM+ $JV; +$CM+ $JT; +$CM+ $NS; +$CM+ $NU; +$CM+ $OP; +$CM+ $PO; +$CM+ $PR; +$CM+ $QU; +$CM+ $RI; +$CM+ $SY; +$CM+ $WJ; +$CM+; + + +# +# Sequences of the form (shown forwards) +# [CANT_CM] [CM] [whatever] +# The CM needs to behave as an AL +# +$AL_FOLLOW $CM+ / ( + [$BK $CR $LF $NL $ZW {eof}] | + $SP+ $CM+ $SP | + $SP+ $CM* ([^$OP $CM $SP] | [$AL {eof}])); # if LB 14 will match, need to surpress this break. + # LB14 says OP SP* x . + # becomes OP SP* x AL + # becomes OP SP* x CM+ AL_FOLLOW + # + # Further note: the $AL in [$AL {eof}] is only to work around + # a rule compiler bug which complains about + # empty sets otherwise. + +# +# Sequences of the form (shown forwards) +# [CANT_CM] [CM] [PR] +# The CM needs to behave as an AL +# This rule is concerned about getting the second of the two in place. +# + +[$PR ] / $CM+ [$BK $CR $LF $NL $ZW $SP {eof}]; + + + +# LB 4, 5, 5 + +$LB4Breaks [$LB4NonBreaks-$CM]; +$LB4Breaks $CM+ $CAN_CM; +$LF $CR; + + +# LB 7 x SP +# x ZW +[$SP $ZW] [$LB4NonBreaks-$CM]; +[$SP $ZW] $CM+ $CAN_CM; + +# LB 8 ZW SP* +# TODO: to implement this, we need more than one look-ahead hard break in play at a time. +# Requires an engine enhancement. +# / $SP* $ZW + +# Special reverse rule for people & body part emoji: +# don't break $ZWJ from subsequent $EmojiForSeqs +$EmojiForSeqs $ZWJ $EmojiMods? $EmojiVar? $EmojiForSeqs; + +# LB 9,10 Combining marks. +# X $CM needs to behave like X, where X is not $SP or controls. +# $CM not covered by the above needs to behave like $AL +# Stick together any combining sequences that don't match other rules. +$CM+ $CAN_CM; + + +# LB 11 +$CM* $WJ $CM* $CAN_CM; +$CM* $WJ [$LB8NonBreaks-$CM]; + + $CANT_CM $CM* $WJ; +$CM* $CAN_CM $CM* $WJ; + +# LB 12a +# [^SP BA HY] x GL +# +$CM* $GL $CM* [$LB8NonBreaks-[$CM $SP $BA $HY]]; + +# LB 12 +# GL x +# +$CANT_CM $CM* $GL; +$CM* $CAN_CM $CM* $GL; + + +# LB 13 +$CL $CM+ $CAN_CM; +$CP $CM+ $CAN_CM; +$EX $CM+ $CAN_CM; +$IS $CM+ $CAN_CM; +$SY $CM+ $CAN_CM; + +$CL [$LB8NonBreaks-$CM]; +$CP [$LB8NonBreaks-$CM]; +$EX [$LB8NonBreaks-$CM]; +$IS [$LB8NonBreaks-$CM]; +$SY [$LB8NonBreaks-$CM]; + +# Rule 13 & 14 taken together for an edge case. +# Match this, shown forward +# OP SP+ ($CM+ behaving as $AL) (CL | CP | EX | IS | IY) +# This really wants to chain at the $CM+ (which is acting as an $AL) +# except for $CM chaining being disabled. +[$CL $CP $EX $IS $SY] $CM+ $SP+ $CM* $OP; + +# LB 14 OP SP* x +# +$CM* $CAN_CM $SP* $CM* $OP; + $CANT_CM $SP* $CM* $OP; +$AL_FOLLOW? $CM+ $SP $SP* $CM* $OP; # by LB 10, behaves like $AL_FOLLOW? $AL $SP* $CM* $OP + + $AL_FOLLOW_NOCM $CM+ $SP+ $CM* $OP; +$CM* $AL_FOLLOW_CM $CM+ $SP+ $CM* $OP; +$SY $CM $SP+ $OP; # TODO: Experiment. Remove. + + + +# LB 15 +$CM* $OP $SP* $CM* $QU; + +# LB 16 +$CM* $NS $SP* $CM* ($CL | $CP); + +# LB 17 +$CM* $B2 $SP* $CM* $B2; + +# LB 18 break after spaces +# Nothing explicit needed here. + + +# +# LB 19 +# +$CM* $QU $CM* $CAN_CM; # . x QU +$CM* $QU $LB18NonBreaks; + + +$CM* $CAN_CM $CM* $QU; # QU x . + $CANT_CM $CM* $QU; + +# +# LB 20 Break before and after CB. +# nothing needed here. +# + +# LB 21 +$CM* ($BA | $HY | $NS) $CM* [$LB20NonBreaks-$CM]; # . x (BA | HY | NS) + +$CM* [$LB20NonBreaks-$CM] $CM* $BB; # BB x . +[^$CB] $CM* $BB; # + +# LB21a +[^$CB] $CM* ($HY | $BA) $CM* $HL; + +# LB21b (reverse) +$CM* $HL $CM* $SY; + +# LB 22 +$CM* $IN $CM* ($ALPlus | $HL); +$CM* $IN $CM* $ID; +$CM* $IN $CM* $IN; +$CM* $IN $CM* $NU; + +# LB 23 +$CM* $PO $CM* $ID; +$CM* $NU $CM* ($ALPlus | $HL); +$CM* ($ALPlus | $HL) $CM* $NU; + +# LB 24 +$CM* $ID $CM* $PR; +$CM* ($ALPlus | $HL) $CM* $PR; +$CM* ($ALPlus | $HL) $CM* $PO; + + +# LB 25 +($CM* ($PR | $PO))? ($CM* ($CL | $CP))? ($CM* ($NU | $IS | $SY))* $CM* $NU ($CM* ($OP | $HY))? ($CM* ($PR | $PO))?; + +# LB 26 +$CM* ($H3 | $H2 | $JV | $JL) $CM* $JL; +$CM* ($JT | $JV) $CM* ($H2 | $JV); +$CM* $JT $CM* ($H3 | $JT); + +# LB 27 +$CM* $IN $CM* ($H3 | $H2 | $JT | $JV | $JL); +$CM* $PO $CM* ($H3 | $H2 | $JT | $JV | $JL); +$CM* ($H3 | $H2 | $JT | $JV | $JL) $CM* $PR; + +# LB 28 +$CM* ($ALPlus | $HL) $CM* ($ALPlus | $HL); + + +# LB 29 +$CM* ($ALPlus | $HL) $CM* $IS; + +# LB 30 +$CM* $OP $CM* ($ALPlus | $HL | $NU); +$CM* ($ALPlus | $HL | $NU) $CM* $CP; + +# LB 30a +$CM* $RI $CM* $RI; + +# Special reverse rule for people & body part emoji: +# don't break between relevant emoji and $EmojiMods +$EmojiMods $EmojiVar? $EmojiForMods; + +## ------------------------------------------------- + +!!safe_reverse; + +# LB 9 +$CM+ [^$CM $BK $CR $LF $NL $ZW $SP]; +$CM+ $SP / .; + +# LB 14 +$SP+ $CM* $OP; + +# LB 15 +$SP+ $CM* $QU; + +# LB 16 +$SP+ $CM* ($CL | $CP); + +# LB 17 +$SP+ $CM* $B2; + +# LB 21 +$CM* ($HY | $BA) $CM* $HL; + +# LB 25 +($CM* ($IS | $SY))+ $CM* $NU; +($CL | $CP) $CM* ($NU | $IS | $SY); + +# For dictionary-based break +$dictionary $dictionary; + +## ------------------------------------------------- + +!!safe_forward; + +# Skip forward over all character classes that are involved in +# rules containing patterns with possibly more than one char +# of context. +# +# It might be slightly more efficient to have specific rules +# instead of one generic one, but only if we could +# turn off rule chaining. We don't want to move more +# than necessary. +# +[$CM $OP $QU $CL $CP $B2 $PR $HY $BA $SP $dictionary]+ [^$CM $OP $QU $CL $CP $B2 $PR $HY $BA $dictionary]; +$dictionary $dictionary; + diff --git a/icuSources/data/brkitr/line_normal_cj.txt b/icuSources/data/brkitr/line_normal_cj.txt new file mode 100644 index 00000000..9f365b84 --- /dev/null +++ b/icuSources/data/brkitr/line_normal_cj.txt @@ -0,0 +1,719 @@ +# Copyright (c) 2002-2015 International Business Machines Corporation and +# others. All Rights Reserved. +# +# file: line_normal_cj.txt +# +# Line Breaking Rules +# Implement default line breaking as defined by +# Unicode Standard Annex #14 Revision 29 for Unicode 6.2 +# http://www.unicode.org/reports/tr14/ +# tailored as noted in 2nd paragraph below.. +# +# TODO: Rule LB 8 remains as it was in Unicode 5.2 +# This is only because of a limitation of ICU break engine implementation, +# not because the older behavior is desirable. +# +# This tailors the line break behavior to correspond to CSS +# line-break=normal (BCP47 -u-lb-normal) as defined for Chinese & Japanese. +# It sets characters of class CJ to behave like ID. +# In addition, it allows breaks: +# * before hyphens 2010 & 2013 (both BA) and 301C, 30A0 (both NS) + +# +# Character Classes defined by TR 14. +# + +!!chain; +!!LBCMNoChain; + + +!!lookAheadHardBreak; +# +# !!lookAheadHardBreak Described here because it is (as yet) undocumented elsewhere +# and only used for the line break rules. +# +# It is used in the implementation of rule LB 10 +# which says to treat any combining mark that is not attached to a base +# character as if it were of class AL (alphabetic). +# +# The problem occurs in the reverse rules. +# +# Consider a sequence like, with correct breaks as shown +# LF ID CM AL AL +# ^ ^ ^ +# Then consider the sequence without the initial ID (ideographic) +# LF CM AL AL +# ^ ^ +# Our CM, which in the first example was attached to the ideograph, +# is now unattached, becomes an alpha, and joins in with the other +# alphas. +# +# When iterating forwards, these sequences do not present any problems +# When iterating backwards, we need to look ahead when encountering +# a CM to see whether it attaches to something further on or not. +# (Look-ahead in a reverse rule is looking towards the start) +# +# If the CM is unattached, we need to force a break. +# +# !!lookAheadHardBreak forces the run time state machine to +# stop immediately when a look ahead rule ( '/' operator) matches, +# and set the match position to that of the look-ahead operator, +# no matter what other rules may be in play at the time. +# +# See rule LB 19 for an example. +# + +$AI = [:LineBreak = Ambiguous:]; +$AL = [:LineBreak = Alphabetic:]; +$BAX = [\u2010 \u2013]; +$BA = [[:LineBreak = Break_After:] - $BAX]; +$BB = [:LineBreak = Break_Before:]; +$BK = [:LineBreak = Mandatory_Break:]; +$B2 = [:LineBreak = Break_Both:]; +$CB = [:LineBreak = Contingent_Break:]; +$CJ = [:LineBreak = Conditional_Japanese_Starter:]; +$CL = [:LineBreak = Close_Punctuation:]; +$CM = [:LineBreak = Combining_Mark:]; +$CP = [:LineBreak = Close_Parenthesis:]; +$CR = [:LineBreak = Carriage_Return:]; +$EX = [:LineBreak = Exclamation:]; +$GL = [:LineBreak = Glue:]; +$HL = [:LineBreak = Hebrew_Letter:]; +$HY = [:LineBreak = Hyphen:]; +$H2 = [:LineBreak = H2:]; +$H3 = [:LineBreak = H3:]; +$ID = [[:LineBreak = Ideographic:] $CJ]; +$IN = [:LineBreak = Inseperable:]; +$IS = [:LineBreak = Infix_Numeric:]; +$JL = [:LineBreak = JL:]; +$JV = [:LineBreak = JV:]; +$JT = [:LineBreak = JT:]; +$LF = [:LineBreak = Line_Feed:]; +$NL = [:LineBreak = Next_Line:]; +$NSX = [\u301C \u30A0]; +$NS = [[:LineBreak = Nonstarter:] - $NSX]; +$NU = [:LineBreak = Numeric:]; +$OP = [:LineBreak = Open_Punctuation:]; +$PO = [:LineBreak = Postfix_Numeric:]; +$PR = [:LineBreak = Prefix_Numeric:]; +$QU = [:LineBreak = Quotation:]; +$RI = [:LineBreak = Regional_Indicator:]; +$SA = [:LineBreak = Complex_Context:]; +$SG = [:LineBreak = Surrogate:]; +$SP = [:LineBreak = Space:]; +$SY = [:LineBreak = Break_Symbols:]; +$WJ = [:LineBreak = Word_Joiner:]; +$XX = [:LineBreak = Unknown:]; +$ZW = [:LineBreak = ZWSpace:]; + +# Special character classes for people & body part emoji: +# Subsets of $CM: +$ZWJ = \u200D; +$EmojiVar = \uFE0F; +# The following are subsets of $ID +$EmojiForSeqs = [\u2764 \U0001F466-\U0001F469 \U0001F48B]; +$EmojiForMods = [\u261D \u270A-\u270C \U0001F385 \U0001F3C3-\U0001F3C4 \U0001F3C7 \U0001F3CA \U0001F442-\U0001F443 \U0001F446-\U0001F450 \U0001F466-\U0001F469 \U0001F46E-\U0001F478 \U0001F47C \U0001F481-\U0001F483 \U0001F485-\U0001F487 \U0001F4AA \U0001F596 \U0001F645-\U0001F647 \U0001F64B-\U0001F64F \U0001F6A3 \U0001F6B4-\U0001F6B6 \U0001F6C0]; +$EmojiMods = [\U0001F3FB-\U0001F3FF]; + +# Dictionary character set, for triggering language-based break engines. Currently +# limited to LineBreak=Complex_Context. Note that this set only works in Unicode +# 5.0 or later as the definition of Complex_Context was corrected to include all +# characters requiring dictionary break. + +$dictionary = [:LineBreak = Complex_Context:]; + +# +# Rule LB1. By default, treat AI (characters with ambiguous east Asian width), +# SA (South East Asian: Thai, Lao, Khmer) +# SG (Unpaired Surrogates) +# XX (Unknown, unassigned) +# as $AL (Alphabetic) +# +$ALPlus = [$AL $AI $SA $SG $XX]; + +# +# Combining Marks. X $CM* behaves as if it were X. Rule LB6. +# +$ALcm = $ALPlus $CM*; +$BAcm = $BA $CM*; +$BAXcm = $BAX $CM*; +$BBcm = $BB $CM*; +$B2cm = $B2 $CM*; +$CLcm = $CL $CM*; +$CPcm = $CP $CM*; +$EXcm = $EX $CM*; +$GLcm = $GL $CM*; +$HLcm = $HL $CM*; +$HYcm = $HY $CM*; +$H2cm = $H2 $CM*; +$H3cm = $H3 $CM*; +$IDcm = $ID $CM*; +$INcm = $IN $CM*; +$IScm = $IS $CM*; +$JLcm = $JL $CM*; +$JVcm = $JV $CM*; +$JTcm = $JT $CM*; +$NScm = $NS $CM*; +$NSXcm = $NSX $CM*; +$NUcm = $NU $CM*; +$OPcm = $OP $CM*; +$POcm = $PO $CM*; +$PRcm = $PR $CM*; +$QUcm = $QU $CM*; +$RIcm = $RI $CM*; +$SYcm = $SY $CM*; +$WJcm = $WJ $CM*; + +## ------------------------------------------------- + +!!forward; + +# +# Each class of character can stand by itself as an unbroken token, with trailing combining stuff +# +$ALPlus $CM+; +$BA $CM+; +$BAX $CM+; +$BB $CM+; +$B2 $CM+; +$CL $CM+; +$CP $CM+; +$EX $CM+; +$GL $CM+; +$HL $CM+; +$HY $CM+; +$H2 $CM+; +$H3 $CM+; +$ID $CM+; +$IN $CM+; +$IS $CM+; +$JL $CM+; +$JV $CM+; +$JT $CM+; +$NS $CM+; +$NSX $CM+; +$NU $CM+; +$OP $CM+; +$PO $CM+; +$PR $CM+; +$QU $CM+; +$RI $CM+; +$SY $CM+; +$WJ $CM+; + +# +# CAN_CM is the set of characters that may combine with CM combining chars. +# Note that Linebreak UAX 14's concept of a combining char and the rules +# for what they can combine with are _very_ different from the rest of Unicode. +# +# Note that $CM itself is left out of this set. If CM is needed as a base +# it must be listed separately in the rule. +# +$CAN_CM = [^$SP $BK $CR $LF $NL $ZW $CM]; # Bases that can take CMs +$CANT_CM = [ $SP $BK $CR $LF $NL $ZW $CM]; # Bases that can't take CMs + +# +# AL_FOLLOW set of chars that can unconditionally follow an AL +# Needed in rules where stand-alone $CM s are treated as AL. +# Chaining is disabled with CM because it causes other failures, +# so for this one case we need to manually list out longer sequences. +# +$AL_FOLLOW_NOCM = [$BK $CR $LF $NL $ZW $SP]; +$AL_FOLLOW_CM = [$CL $CP $EX $HL $IS $SY $WJ $GL $OP $QU $BA $BAX $HY $NS $NSX $IN $NU $ALPlus]; +$AL_FOLLOW = [$AL_FOLLOW_NOCM $AL_FOLLOW_CM]; + + +# +# Rule LB 4, 5 Mandatory (Hard) breaks. +# +$LB4Breaks = [$BK $CR $LF $NL]; +$LB4NonBreaks = [^$BK $CR $LF $NL]; +$CR $LF {100}; + +# +# LB 6 Do not break before hard line breaks. +# +$LB4NonBreaks? $LB4Breaks {100}; # LB 5 do not break before hard breaks. +$CAN_CM $CM* $LB4Breaks {100}; +$CM+ $LB4Breaks {100}; + +# LB 7 x SP +# x ZW +$LB4NonBreaks [$SP $ZW]; +$CAN_CM $CM* [$SP $ZW]; +$CM+ [$SP $ZW]; + +# +# LB 8 Break after zero width space +# TODO: ZW SP* +# An engine change is required to write the reverse rule for this. +# For now, leave the Unicode 5.2 rule, ZW +# +$LB8Breaks = [$LB4Breaks $ZW]; +$LB8NonBreaks = [[$LB4NonBreaks] - [$ZW]]; + + +# Special forward rule for people & body part emoji: +# don't break $ZWJ from subsequent $EmojiForSeqs +$EmojiForSeqs $EmojiVar? $EmojiMods? $ZWJ $EmojiForSeqs; + +# LB 9 Combining marks. X $CM needs to behave like X, where X is not $SP, $BK $CR $LF $NL +# $CM not covered by the above needs to behave like $AL +# See definition of $CAN_CM. + +$CAN_CM $CM+; # Stick together any combining sequences that don't match other rules. +$CM+; + +# +# LB 11 Do not break before or after WORD JOINER & related characters. +# +$CAN_CM $CM* $WJcm; +$LB8NonBreaks $WJcm; +$CM+ $WJcm; + +$WJcm $CANT_CM; +$WJcm $CAN_CM $CM*; + +# +# LB 12 Do not break after NBSP and related characters. +# GL x +# +$GLcm $CAN_CM $CM*; +$GLcm $CANT_CM; + +# +# LB 12a Do not break before NBSP and related characters ... +# [^SP BA HY] x GL +# +[[$LB8NonBreaks] - [$SP $BA $BAX $HY]] $CM* $GLcm; +$CM+ GLcm; + + + +# +# LB 13 Don't break before ']' or '!' or ';' or '/', even after spaces. +# +$LB8NonBreaks $CL; +$CAN_CM $CM* $CL; +$CM+ $CL; # by rule 10, stand-alone CM behaves as AL + +$LB8NonBreaks $CP; +$CAN_CM $CM* $CP; +$CM+ $CP; # by rule 10, stand-alone CM behaves as AL + +$LB8NonBreaks $EX; +$CAN_CM $CM* $EX; +$CM+ $EX; # by rule 10, stand-alone CM behaves as AL + +$LB8NonBreaks $IS; +$CAN_CM $CM* $IS; +$CM+ $IS; # by rule 10, stand-alone CM behaves as AL + +$LB8NonBreaks $SY; +$CAN_CM $CM* $SY; +$CM+ $SY; # by rule 10, stand-alone CM behaves as AL + + +# +# LB 14 Do not break after OP, even after spaces +# +$OPcm $SP* $CAN_CM $CM*; +$OPcm $SP* $CANT_CM; + +$OPcm $SP+ $CM+ $AL_FOLLOW?; # by rule 10, stand-alone CM behaves as AL + +# LB 15 +$QUcm $SP* $OPcm; + +# LB 16 +# Do not break between closing punctuation and $NS, even with intervening spaces +# But DO allow a break between closing punctuation and $NSX, don't include it here +($CLcm | $CPcm) $SP* $NScm; + +# LB 17 +$B2cm $SP* $B2cm; + +# +# LB 18 Break after spaces. +# +$LB18NonBreaks = [$LB8NonBreaks - [$SP]]; +$LB18Breaks = [$LB8Breaks $SP]; + + +# LB 19 +# x QU +$LB18NonBreaks $CM* $QUcm; +$CM+ $QUcm; + +# QU x +$QUcm .?; +$QUcm $LB18NonBreaks $CM*; # Don't let a combining mark go onto $CR, $BK, etc. + # TODO: I don't think this rule is needed. + + +# LB 20 +# $CB +# $CB + +$LB20NonBreaks = [$LB18NonBreaks - $CB]; + +# LB 21 x (BA | HY | NS) +# BB x +# +# DO allow breaks here before $BAXcm and $NSXcm, so don't include them +$LB20NonBreaks $CM* ($BAcm | $HYcm | $NScm); + +$BBcm [^$CB]; # $BB x +$BBcm $LB20NonBreaks $CM*; + +# LB 21a Don't break after Hebrew + Hyphen +# HL (HY | BA) x +# +$HLcm ($HYcm | $BAcm | $BAXcm) [^$CB]?; + +# LB 21b (forward) Don't break between SY and HL +# (break between HL and SY already disallowed by LB 13 above) +$SYcm $HLcm; + +# LB 22 +($ALcm | $HLcm) $INcm; +$CM+ $INcm; # by rule 10, any otherwise unattached CM behaves as AL +$IDcm $INcm; +$INcm $INcm; +$NUcm $INcm; + + +# $LB 23 +$IDcm $POcm; +$ALcm $NUcm; # includes $LB19 +$HLcm $NUcm; +$CM+ $NUcm; # Rule 10, any otherwise unattached CM behaves as AL +$NUcm $ALcm; +$NUcm $HLcm; + +# +# LB 24 +# +$PRcm $IDcm; +$PRcm ($ALcm | $HLcm); +$POcm ($ALcm | $HLcm); + +# +# LB 25 Numbers. +# +($PRcm | $POcm)? ($OPcm | $HYcm)? $NUcm ($NUcm | $SYcm | $IScm)* ($CLcm | $CPcm)? ($PRcm | $POcm)?; + +# LB 26 Do not break a Korean syllable +# +$JLcm ($JLcm | $JVcm | $H2cm | $H3cm); +($JVcm | $H2cm) ($JVcm | $JTcm); +($JTcm | $H3cm) $JTcm; + +# LB 27 Treat korean Syllable Block the same as ID (don't break it) +($JLcm | $JVcm | $JTcm | $H2cm | $H3cm) $INcm; +($JLcm | $JVcm | $JTcm | $H2cm | $H3cm) $POcm; +$PRcm ($JLcm | $JVcm | $JTcm | $H2cm | $H3cm); + + +# LB 28 Do not break between alphabetics +# +($ALcm | $HLcm) ($ALcm | $HLcm); +$CM+ ($ALcm | $HLcm); # The $CM+ is from rule 10, an unattached CM is treated as AL + +# LB 29 +$IScm ($ALcm | $HLcm); + +# LB 30 +($ALcm | $HLcm | $NUcm) $OPcm; +$CM+ $OPcm; # The $CM+ is from rule 10, an unattached CM is treated as AL. +$CPcm ($ALcm | $HLcm | $NUcm); + +# LB 30a Do not break between regional indicators. +$RIcm $RIcm; + +# Special forward rule for people & body part emoji: +# don't break between relevant emoji and $EmojiMods +$EmojiForMods $EmojiVar? $EmojiMods; + +# +# Reverse Rules. +# +## ------------------------------------------------- + +!!reverse; + +$CM+ $ALPlus; +$CM+ $BA; +$CM+ $BAX; +$CM+ $BB; +$CM+ $B2; +$CM+ $CL; +$CM+ $CP; +$CM+ $EX; +$CM+ $GL; +$CM+ $HL; +$CM+ $HY; +$CM+ $H2; +$CM+ $H3; +$CM+ $ID; +$CM+ $IN; +$CM+ $IS; +$CM+ $JL; +$CM+ $JV; +$CM+ $JT; +$CM+ $NS; +$CM+ $NSX; +$CM+ $NU; +$CM+ $OP; +$CM+ $PO; +$CM+ $PR; +$CM+ $QU; +$CM+ $RI; +$CM+ $SY; +$CM+ $WJ; +$CM+; + + +# +# Sequences of the form (shown forwards) +# [CANT_CM] [CM] [whatever] +# The CM needs to behave as an AL +# +$AL_FOLLOW $CM+ / ( + [$BK $CR $LF $NL $ZW {eof}] | + $SP+ $CM+ $SP | + $SP+ $CM* ([^$OP $CM $SP] | [$AL {eof}])); # if LB 14 will match, need to surpress this break. + # LB14 says OP SP* x . + # becomes OP SP* x AL + # becomes OP SP* x CM+ AL_FOLLOW + # + # Further note: the $AL in [$AL {eof}] is only to work around + # a rule compiler bug which complains about + # empty sets otherwise. + +# +# Sequences of the form (shown forwards) +# [CANT_CM] [CM] [PR] +# The CM needs to behave as an AL +# This rule is concerned about getting the second of the two in place. +# + +[$PR ] / $CM+ [$BK $CR $LF $NL $ZW $SP {eof}]; + + + +# LB 4, 5, 5 + +$LB4Breaks [$LB4NonBreaks-$CM]; +$LB4Breaks $CM+ $CAN_CM; +$LF $CR; + + +# LB 7 x SP +# x ZW +[$SP $ZW] [$LB4NonBreaks-$CM]; +[$SP $ZW] $CM+ $CAN_CM; + +# LB 8 ZW SP* +# TODO: to implement this, we need more than one look-ahead hard break in play at a time. +# Requires an engine enhancement. +# / $SP* $ZW + +# Special reverse rule for people & body part emoji: +# don't break $ZWJ from subsequent $EmojiForSeqs +$EmojiForSeqs $ZWJ $EmojiMods? $EmojiVar? $EmojiForSeqs; + +# LB 9,10 Combining marks. +# X $CM needs to behave like X, where X is not $SP or controls. +# $CM not covered by the above needs to behave like $AL +# Stick together any combining sequences that don't match other rules. +$CM+ $CAN_CM; + + +# LB 11 +$CM* $WJ $CM* $CAN_CM; +$CM* $WJ [$LB8NonBreaks-$CM]; + + $CANT_CM $CM* $WJ; +$CM* $CAN_CM $CM* $WJ; + +# LB 12a +# [^SP BA HY] x GL +# +$CM* $GL $CM* [$LB8NonBreaks-[$CM $SP $BA $BAX $HY]]; + +# LB 12 +# GL x +# +$CANT_CM $CM* $GL; +$CM* $CAN_CM $CM* $GL; + + +# LB 13 +$CL $CM+ $CAN_CM; +$CP $CM+ $CAN_CM; +$EX $CM+ $CAN_CM; +$IS $CM+ $CAN_CM; +$SY $CM+ $CAN_CM; + +$CL [$LB8NonBreaks-$CM]; +$CP [$LB8NonBreaks-$CM]; +$EX [$LB8NonBreaks-$CM]; +$IS [$LB8NonBreaks-$CM]; +$SY [$LB8NonBreaks-$CM]; + +# Rule 13 & 14 taken together for an edge case. +# Match this, shown forward +# OP SP+ ($CM+ behaving as $AL) (CL | CP | EX | IS | IY) +# This really wants to chain at the $CM+ (which is acting as an $AL) +# except for $CM chaining being disabled. +[$CL $CP $EX $IS $SY] $CM+ $SP+ $CM* $OP; + +# LB 14 OP SP* x +# +$CM* $CAN_CM $SP* $CM* $OP; + $CANT_CM $SP* $CM* $OP; +$AL_FOLLOW? $CM+ $SP $SP* $CM* $OP; # by LB 10, behaves like $AL_FOLLOW? $AL $SP* $CM* $OP + + $AL_FOLLOW_NOCM $CM+ $SP+ $CM* $OP; +$CM* $AL_FOLLOW_CM $CM+ $SP+ $CM* $OP; +$SY $CM $SP+ $OP; # TODO: Experiment. Remove. + + + +# LB 15 +$CM* $OP $SP* $CM* $QU; + +# LB 16 +# Don't include $NSX here +$CM* $NS $SP* $CM* ($CL | $CP); + +# LB 17 +$CM* $B2 $SP* $CM* $B2; + +# LB 18 break after spaces +# Nothing explicit needed here. + + +# +# LB 19 +# +$CM* $QU $CM* $CAN_CM; # . x QU +$CM* $QU $LB18NonBreaks; + + +$CM* $CAN_CM $CM* $QU; # QU x . + $CANT_CM $CM* $QU; + +# +# LB 20 Break before and after CB. +# nothing needed here. +# + +# LB 21 +# Don't include $BAX or $NSX here +$CM* ($BA | $HY | $NS) $CM* [$LB20NonBreaks-$CM]; # . x (BA | HY | NS) + +$CM* [$LB20NonBreaks-$CM] $CM* $BB; # BB x . +[^$CB] $CM* $BB; # + +# LB21a +[^$CB] $CM* ($HY | $BA | $BAX) $CM* $HL; + +# LB21b (reverse) +$CM* $HL $CM* $SY; + +# LB 22 +$CM* $IN $CM* ($ALPlus | $HL); +$CM* $IN $CM* $ID; +$CM* $IN $CM* $IN; +$CM* $IN $CM* $NU; + +# LB 23 +$CM* $PO $CM* $ID; +$CM* $NU $CM* ($ALPlus | $HL); +$CM* ($ALPlus | $HL) $CM* $NU; + +# LB 24 +$CM* $ID $CM* $PR; +$CM* ($ALPlus | $HL) $CM* $PR; +$CM* ($ALPlus | $HL) $CM* $PO; + + +# LB 25 +($CM* ($PR | $PO))? ($CM* ($CL | $CP))? ($CM* ($NU | $IS | $SY))* $CM* $NU ($CM* ($OP | $HY))? ($CM* ($PR | $PO))?; + +# LB 26 +$CM* ($H3 | $H2 | $JV | $JL) $CM* $JL; +$CM* ($JT | $JV) $CM* ($H2 | $JV); +$CM* $JT $CM* ($H3 | $JT); + +# LB 27 +$CM* $IN $CM* ($H3 | $H2 | $JT | $JV | $JL); +$CM* $PO $CM* ($H3 | $H2 | $JT | $JV | $JL); +$CM* ($H3 | $H2 | $JT | $JV | $JL) $CM* $PR; + +# LB 28 +$CM* ($ALPlus | $HL) $CM* ($ALPlus | $HL); + + +# LB 29 +$CM* ($ALPlus | $HL) $CM* $IS; + +# LB 30 +$CM* $OP $CM* ($ALPlus | $HL | $NU); +$CM* ($ALPlus | $HL | $NU) $CM* $CP; + +# LB 30a +$CM* $RI $CM* $RI; + +# Special reverse rule for people & body part emoji: +# don't break between relevant emoji and $EmojiMods +$EmojiMods $EmojiVar? $EmojiForMods; + +## ------------------------------------------------- + +!!safe_reverse; + +# LB 9 +$CM+ [^$CM $BK $CR $LF $NL $ZW $SP]; +$CM+ $SP / .; + +# LB 14 +$SP+ $CM* $OP; + +# LB 15 +$SP+ $CM* $QU; + +# LB 16 +$SP+ $CM* ($CL | $CP); + +# LB 17 +$SP+ $CM* $B2; + +# LB 21 +$CM* ($HY | $BA) $CM* $HL; + +# LB 25 +($CM* ($IS | $SY))+ $CM* $NU; +($CL | $CP) $CM* ($NU | $IS | $SY); + +# For dictionary-based break +$dictionary $dictionary; + +## ------------------------------------------------- + +!!safe_forward; + +# Skip forward over all character classes that are involved in +# rules containing patterns with possibly more than one char +# of context. +# +# It might be slightly more efficient to have specific rules +# instead of one generic one, but only if we could +# turn off rule chaining. We don't want to move more +# than necessary. +# +[$CM $OP $QU $CL $CP $B2 $PR $HY $BA $SP $dictionary]+ [^$CM $OP $QU $CL $CP $B2 $PR $HY $BA $dictionary]; +$dictionary $dictionary; + diff --git a/icuSources/data/brkitr/line_normal_fi.txt b/icuSources/data/brkitr/line_normal_fi.txt new file mode 100644 index 00000000..f84e8b64 --- /dev/null +++ b/icuSources/data/brkitr/line_normal_fi.txt @@ -0,0 +1,715 @@ +# Copyright (c) 2002-2015 International Business Machines Corporation and +# others. All Rights Reserved. +# +# file: line_normal_fi.txt +# +# Line Breaking Rules +# Implement default line breaking as defined by +# Unicode Standard Annex #14 Revision 29 for Unicode 6.2 +# http://www.unicode.org/reports/tr14/ +# tailored as noted in 2nd paragraph below.. +# +# TODO: Rule LB 8 remains as it was in Unicode 5.2 +# This is only because of a limitation of ICU break engine implementation, +# not because the older behavior is desirable. +# +# This tailors the line break behavior both for Finnish and to correpond to CSS +# line-break=normal (BCP47 -u-lb-normal) as defined for languages other than +# Chinese & Japanese. +# It sets characters of class CJ to behave like ID. + +# +# Character Classes defined by TR 14. +# + +!!chain; +!!LBCMNoChain; + + +!!lookAheadHardBreak; +# +# !!lookAheadHardBreak Described here because it is (as yet) undocumented elsewhere +# and only used for the line break rules. +# +# It is used in the implementation of rule LB 10 +# which says to treat any combining mark that is not attached to a base +# character as if it were of class AL (alphabetic). +# +# The problem occurs in the reverse rules. +# +# Consider a sequence like, with correct breaks as shown +# LF ID CM AL AL +# ^ ^ ^ +# Then consider the sequence without the initial ID (ideographic) +# LF CM AL AL +# ^ ^ +# Our CM, which in the first example was attached to the ideograph, +# is now unattached, becomes an alpha, and joins in with the other +# alphas. +# +# When iterating forwards, these sequences do not present any problems +# When iterating backwards, we need to look ahead when encountering +# a CM to see whether it attaches to something further on or not. +# (Look-ahead in a reverse rule is looking towards the start) +# +# If the CM is unattached, we need to force a break. +# +# !!lookAheadHardBreak forces the run time state machine to +# stop immediately when a look ahead rule ( '/' operator) matches, +# and set the match position to that of the look-ahead operator, +# no matter what other rules may be in play at the time. +# +# See rule LB 19 for an example. +# + +$AI = [:LineBreak = Ambiguous:]; +$AL = [:LineBreak = Alphabetic:]; +$BA = [[:LineBreak = Break_After:] - [\u2010]]; +$HH = [\u2010]; +$BB = [:LineBreak = Break_Before:]; +$BK = [:LineBreak = Mandatory_Break:]; +$B2 = [:LineBreak = Break_Both:]; +$CB = [:LineBreak = Contingent_Break:]; +$CJ = [:LineBreak = Conditional_Japanese_Starter:]; +$CL = [:LineBreak = Close_Punctuation:]; +$CM = [:LineBreak = Combining_Mark:]; +$CP = [:LineBreak = Close_Parenthesis:]; +$CR = [:LineBreak = Carriage_Return:]; +$EX = [:LineBreak = Exclamation:]; +$GL = [:LineBreak = Glue:]; +$HL = [:LineBreak = Hebrew_Letter:]; +$HY = [:LineBreak = Hyphen:]; +$H2 = [:LineBreak = H2:]; +$H3 = [:LineBreak = H3:]; +$ID = [[:LineBreak = Ideographic:] $CJ]; +$IN = [:LineBreak = Inseperable:]; +$IS = [:LineBreak = Infix_Numeric:]; +$JL = [:LineBreak = JL:]; +$JV = [:LineBreak = JV:]; +$JT = [:LineBreak = JT:]; +$LF = [:LineBreak = Line_Feed:]; +$NL = [:LineBreak = Next_Line:]; +$NS = [:LineBreak = Nonstarter:]; +$NU = [:LineBreak = Numeric:]; +$OP = [:LineBreak = Open_Punctuation:]; +$PO = [:LineBreak = Postfix_Numeric:]; +$PR = [:LineBreak = Prefix_Numeric:]; +$QU = [:LineBreak = Quotation:]; +$RI = [:LineBreak = Regional_Indicator:]; +$SA = [:LineBreak = Complex_Context:]; +$SG = [:LineBreak = Surrogate:]; +$SP = [:LineBreak = Space:]; +$SY = [:LineBreak = Break_Symbols:]; +$WJ = [:LineBreak = Word_Joiner:]; +$XX = [:LineBreak = Unknown:]; +$ZW = [:LineBreak = ZWSpace:]; + +# Special character classes for people & body part emoji: +# Subsets of $CM: +$ZWJ = \u200D; +$EmojiVar = \uFE0F; +# The following are subsets of $ID +$EmojiForSeqs = [\u2764 \U0001F466-\U0001F469 \U0001F48B]; +$EmojiForMods = [\u261D \u270A-\u270C \U0001F385 \U0001F3C3-\U0001F3C4 \U0001F3C7 \U0001F3CA \U0001F442-\U0001F443 \U0001F446-\U0001F450 \U0001F466-\U0001F469 \U0001F46E-\U0001F478 \U0001F47C \U0001F481-\U0001F483 \U0001F485-\U0001F487 \U0001F4AA \U0001F596 \U0001F645-\U0001F647 \U0001F64B-\U0001F64F \U0001F6A3 \U0001F6B4-\U0001F6B6 \U0001F6C0]; +$EmojiMods = [\U0001F3FB-\U0001F3FF]; + +# Dictionary character set, for triggering language-based break engines. Currently +# limited to LineBreak=Complex_Context. Note that this set only works in Unicode +# 5.0 or later as the definition of Complex_Context was corrected to include all +# characters requiring dictionary break. + +$dictionary = [:LineBreak = Complex_Context:]; + +# +# Rule LB1. By default, treat AI (characters with ambiguous east Asian width), +# SA (South East Asian: Thai, Lao, Khmer) +# SG (Unpaired Surrogates) +# XX (Unknown, unassigned) +# as $AL (Alphabetic) +# +$ALPlus = [$AL $AI $SA $SG $XX]; + +# +# Combining Marks. X $CM* behaves as if it were X. Rule LB6. +# +$ALcm = $ALPlus $CM*; +$BAcm = $BA $CM*; +$HHcm = $HH $CM*; +$BBcm = $BB $CM*; +$B2cm = $B2 $CM*; +$CLcm = $CL $CM*; +$CPcm = $CP $CM*; +$EXcm = $EX $CM*; +$GLcm = $GL $CM*; +$HLcm = $HL $CM*; +$HYcm = $HY $CM*; +$H2cm = $H2 $CM*; +$H3cm = $H3 $CM*; +$IDcm = $ID $CM*; +$INcm = $IN $CM*; +$IScm = $IS $CM*; +$JLcm = $JL $CM*; +$JVcm = $JV $CM*; +$JTcm = $JT $CM*; +$NScm = $NS $CM*; +$NUcm = $NU $CM*; +$OPcm = $OP $CM*; +$POcm = $PO $CM*; +$PRcm = $PR $CM*; +$QUcm = $QU $CM*; +$RIcm = $RI $CM*; +$SYcm = $SY $CM*; +$WJcm = $WJ $CM*; + +## ------------------------------------------------- + +!!forward; + +# +# Each class of character can stand by itself as an unbroken token, with trailing combining stuff +# +$ALPlus $CM+; +$BA $CM+; +$HH $CM+; +$BB $CM+; +$B2 $CM+; +$CL $CM+; +$CP $CM+; +$EX $CM+; +$GL $CM+; +$HL $CM+; +$HY $CM+; +$H2 $CM+; +$H3 $CM+; +$ID $CM+; +$IN $CM+; +$IS $CM+; +$JL $CM+; +$JV $CM+; +$JT $CM+; +$NS $CM+; +$NU $CM+; +$OP $CM+; +$PO $CM+; +$PR $CM+; +$QU $CM+; +$RI $CM+; +$SY $CM+; +$WJ $CM+; + +# +# CAN_CM is the set of characters that may combine with CM combining chars. +# Note that Linebreak UAX 14's concept of a combining char and the rules +# for what they can combine with are _very_ different from the rest of Unicode. +# +# Note that $CM itself is left out of this set. If CM is needed as a base +# it must be listed separately in the rule. +# +$CAN_CM = [^$SP $BK $CR $LF $NL $ZW $CM]; # Bases that can take CMs +$CANT_CM = [ $SP $BK $CR $LF $NL $ZW $CM]; # Bases that can't take CMs + +# +# AL_FOLLOW set of chars that can unconditionally follow an AL +# Needed in rules where stand-alone $CM s are treated as AL. +# Chaining is disabled with CM because it causes other failures, +# so for this one case we need to manually list out longer sequences. +# +$AL_FOLLOW_NOCM = [$BK $CR $LF $NL $ZW $SP]; +$AL_FOLLOW_CM = [$CL $CP $EX $HL $IS $SY $WJ $GL $OP $QU $BA $HH $HY $NS $IN $NU $ALPlus]; +$AL_FOLLOW = [$AL_FOLLOW_NOCM $AL_FOLLOW_CM]; + + +# +# Rule LB 4, 5 Mandatory (Hard) breaks. +# +$LB4Breaks = [$BK $CR $LF $NL]; +$LB4NonBreaks = [^$BK $CR $LF $NL]; +$CR $LF {100}; + +# +# LB 6 Do not break before hard line breaks. +# +$LB4NonBreaks? $LB4Breaks {100}; # LB 5 do not break before hard breaks. +$CAN_CM $CM* $LB4Breaks {100}; +$CM+ $LB4Breaks {100}; + +# LB 7 x SP +# x ZW +$LB4NonBreaks [$SP $ZW]; +$CAN_CM $CM* [$SP $ZW]; +$CM+ [$SP $ZW]; + +# +# LB 8 Break after zero width space +# TODO: ZW SP* +# An engine change is required to write the reverse rule for this. +# For now, leave the Unicode 5.2 rule, ZW +# +$LB8Breaks = [$LB4Breaks $ZW]; +$LB8NonBreaks = [[$LB4NonBreaks] - [$ZW]]; + + +# Special forward rule for people & body part emoji: +# don't break $ZWJ from subsequent $EmojiForSeqs +$EmojiForSeqs $EmojiVar? $EmojiMods? $ZWJ $EmojiForSeqs; + +# LB 9 Combining marks. X $CM needs to behave like X, where X is not $SP, $BK $CR $LF $NL +# $CM not covered by the above needs to behave like $AL +# See definition of $CAN_CM. + +$CAN_CM $CM+; # Stick together any combining sequences that don't match other rules. +$CM+; + +# +# LB 11 Do not break before or after WORD JOINER & related characters. +# +$CAN_CM $CM* $WJcm; +$LB8NonBreaks $WJcm; +$CM+ $WJcm; + +$WJcm $CANT_CM; +$WJcm $CAN_CM $CM*; + +# +# LB 12 Do not break after NBSP and related characters. +# GL x +# +$GLcm $CAN_CM $CM*; +$GLcm $CANT_CM; + +# +# LB 12a Do not break before NBSP and related characters ... +# [^SP BA HY] x GL +# +[[$LB8NonBreaks] - [$SP $BA $HH $HY]] $CM* $GLcm; +$CM+ GLcm; + + + +# +# LB 13 Don't break before ']' or '!' or ';' or '/', even after spaces. +# +$LB8NonBreaks $CL; +$CAN_CM $CM* $CL; +$CM+ $CL; # by rule 10, stand-alone CM behaves as AL + +$LB8NonBreaks $CP; +$CAN_CM $CM* $CP; +$CM+ $CP; # by rule 10, stand-alone CM behaves as AL + +$LB8NonBreaks $EX; +$CAN_CM $CM* $EX; +$CM+ $EX; # by rule 10, stand-alone CM behaves as AL + +$LB8NonBreaks $IS; +$CAN_CM $CM* $IS; +$CM+ $IS; # by rule 10, stand-alone CM behaves as AL + +$LB8NonBreaks $SY; +$CAN_CM $CM* $SY; +$CM+ $SY; # by rule 10, stand-alone CM behaves as AL + + +# +# LB 14 Do not break after OP, even after spaces +# +$OPcm $SP* $CAN_CM $CM*; +$OPcm $SP* $CANT_CM; + +$OPcm $SP+ $CM+ $AL_FOLLOW?; # by rule 10, stand-alone CM behaves as AL + +# LB 15 +$QUcm $SP* $OPcm; + +# LB 16 +($CLcm | $CPcm) $SP* $NScm; + +# LB 17 +$B2cm $SP* $B2cm; + +# +# LB 18 Break after spaces. +# +$LB18NonBreaks = [$LB8NonBreaks - [$SP]]; +$LB18Breaks = [$LB8Breaks $SP]; + + +# LB 19 +# x QU +$LB18NonBreaks $CM* $QUcm; +$CM+ $QUcm; + +# QU x +$QUcm .?; +$QUcm $LB18NonBreaks $CM*; # Don't let a combining mark go onto $CR, $BK, etc. + # TODO: I don't think this rule is needed. + + +# LB 20 +# $CB +# $CB + +$LB20NonBreaks = [$LB18NonBreaks - $CB]; + +# LB 20.09 added rule for Finnish tailoring +# LB 21 x (BA | HY | NS) +# BB x +# +$LB20NonBreaks $CM* ($BAcm | $HHcm | $HYcm | $NScm) / $AL; +$LB20NonBreaks $CM* ($BAcm | $HHcm | $HYcm | $NScm); +($HY | $HH) $AL; + +$BBcm [^$CB]; # $BB x +$BBcm $LB20NonBreaks $CM*; + +# LB 21a Don't break after Hebrew + Hyphen +# HL (HY | BA) x +# +$HLcm ($HYcm | $BAcm | $HHcm) [^$CB]?; + +# LB 21b (forward) Don't break between SY and HL +# (break between HL and SY already disallowed by LB 13 above) +$SYcm $HLcm; + +# LB 22 +($ALcm | $HLcm) $INcm; +$CM+ $INcm; # by rule 10, any otherwise unattached CM behaves as AL +$IDcm $INcm; +$INcm $INcm; +$NUcm $INcm; + + +# $LB 23 +$IDcm $POcm; +$ALcm $NUcm; # includes $LB19 +$HLcm $NUcm; +$CM+ $NUcm; # Rule 10, any otherwise unattached CM behaves as AL +$NUcm $ALcm; +$NUcm $HLcm; + +# +# LB 24 +# +$PRcm $IDcm; +$PRcm ($ALcm | $HLcm); +$POcm ($ALcm | $HLcm); + +# +# LB 25 Numbers. +# +($PRcm | $POcm)? ($OPcm | $HYcm)? $NUcm ($NUcm | $SYcm | $IScm)* ($CLcm | $CPcm)? ($PRcm | $POcm)?; + +# LB 26 Do not break a Korean syllable +# +$JLcm ($JLcm | $JVcm | $H2cm | $H3cm); +($JVcm | $H2cm) ($JVcm | $JTcm); +($JTcm | $H3cm) $JTcm; + +# LB 27 Treat korean Syllable Block the same as ID (don't break it) +($JLcm | $JVcm | $JTcm | $H2cm | $H3cm) $INcm; +($JLcm | $JVcm | $JTcm | $H2cm | $H3cm) $POcm; +$PRcm ($JLcm | $JVcm | $JTcm | $H2cm | $H3cm); + + +# LB 28 Do not break between alphabetics +# +($ALcm | $HLcm) ($ALcm | $HLcm); +$CM+ ($ALcm | $HLcm); # The $CM+ is from rule 10, an unattached CM is treated as AL + +# LB 29 +$IScm ($ALcm | $HLcm); + +# LB 30 +($ALcm | $HLcm | $NUcm) $OPcm; +$CM+ $OPcm; # The $CM+ is from rule 10, an unattached CM is treated as AL. +$CPcm ($ALcm | $HLcm | $NUcm); + +# LB 30a Do not break between regional indicators. +$RIcm $RIcm; + +# Special forward rule for people & body part emoji: +# don't break between relevant emoji and $EmojiMods +$EmojiForMods $EmojiVar? $EmojiMods; + +# +# Reverse Rules. +# +## ------------------------------------------------- + +!!reverse; + +$CM+ $ALPlus; +$CM+ $BA; +$CM+ $HH; +$CM+ $BB; +$CM+ $B2; +$CM+ $CL; +$CM+ $CP; +$CM+ $EX; +$CM+ $GL; +$CM+ $HL; +$CM+ $HY; +$CM+ $H2; +$CM+ $H3; +$CM+ $ID; +$CM+ $IN; +$CM+ $IS; +$CM+ $JL; +$CM+ $JV; +$CM+ $JT; +$CM+ $NS; +$CM+ $NU; +$CM+ $OP; +$CM+ $PO; +$CM+ $PR; +$CM+ $QU; +$CM+ $RI; +$CM+ $SY; +$CM+ $WJ; +$CM+; + + +# +# Sequences of the form (shown forwards) +# [CANT_CM] [CM] [whatever] +# The CM needs to behave as an AL +# +$AL_FOLLOW $CM+ / ( + [$BK $CR $LF $NL $ZW {eof}] | + $SP+ $CM+ $SP | + $SP+ $CM* ([^$OP $CM $SP] | [$AL {eof}])); # if LB 14 will match, need to surpress this break. + # LB14 says OP SP* x . + # becomes OP SP* x AL + # becomes OP SP* x CM+ AL_FOLLOW + # + # Further note: the $AL in [$AL {eof}] is only to work around + # a rule compiler bug which complains about + # empty sets otherwise. + +# +# Sequences of the form (shown forwards) +# [CANT_CM] [CM] [PR] +# The CM needs to behave as an AL +# This rule is concerned about getting the second of the two in place. +# + +[$PR ] / $CM+ [$BK $CR $LF $NL $ZW $SP {eof}]; + + + +# LB 4, 5, 5 + +$LB4Breaks [$LB4NonBreaks-$CM]; +$LB4Breaks $CM+ $CAN_CM; +$LF $CR; + + +# LB 7 x SP +# x ZW +[$SP $ZW] [$LB4NonBreaks-$CM]; +[$SP $ZW] $CM+ $CAN_CM; + +# LB 8 ZW SP* +# TODO: to implement this, we need more than one look-ahead hard break in play at a time. +# Requires an engine enhancement. +# / $SP* $ZW + +# Special reverse rule for people & body part emoji: +# don't break $ZWJ from subsequent $EmojiForSeqs +$EmojiForSeqs $ZWJ $EmojiMods? $EmojiVar? $EmojiForSeqs; + +# LB 9,10 Combining marks. +# X $CM needs to behave like X, where X is not $SP or controls. +# $CM not covered by the above needs to behave like $AL +# Stick together any combining sequences that don't match other rules. +$CM+ $CAN_CM; + + +# LB 11 +$CM* $WJ $CM* $CAN_CM; +$CM* $WJ [$LB8NonBreaks-$CM]; + + $CANT_CM $CM* $WJ; +$CM* $CAN_CM $CM* $WJ; + +# LB 12a +# [^SP BA HY] x GL +# +$CM* $GL $CM* [$LB8NonBreaks-[$CM $SP $BA $HH $HY]]; + +# LB 12 +# GL x +# +$CANT_CM $CM* $GL; +$CM* $CAN_CM $CM* $GL; + + +# LB 13 +$CL $CM+ $CAN_CM; +$CP $CM+ $CAN_CM; +$EX $CM+ $CAN_CM; +$IS $CM+ $CAN_CM; +$SY $CM+ $CAN_CM; + +$CL [$LB8NonBreaks-$CM]; +$CP [$LB8NonBreaks-$CM]; +$EX [$LB8NonBreaks-$CM]; +$IS [$LB8NonBreaks-$CM]; +$SY [$LB8NonBreaks-$CM]; + +# Rule 13 & 14 taken together for an edge case. +# Match this, shown forward +# OP SP+ ($CM+ behaving as $AL) (CL | CP | EX | IS | IY) +# This really wants to chain at the $CM+ (which is acting as an $AL) +# except for $CM chaining being disabled. +[$CL $CP $EX $IS $SY] $CM+ $SP+ $CM* $OP; + +# LB 14 OP SP* x +# +$CM* $CAN_CM $SP* $CM* $OP; + $CANT_CM $SP* $CM* $OP; +$AL_FOLLOW? $CM+ $SP $SP* $CM* $OP; # by LB 10, behaves like $AL_FOLLOW? $AL $SP* $CM* $OP + + $AL_FOLLOW_NOCM $CM+ $SP+ $CM* $OP; +$CM* $AL_FOLLOW_CM $CM+ $SP+ $CM* $OP; +$SY $CM $SP+ $OP; # TODO: Experiment. Remove. + + + +# LB 15 +$CM* $OP $SP* $CM* $QU; + +# LB 16 +$CM* $NS $SP* $CM* ($CL | $CP); + +# LB 17 +$CM* $B2 $SP* $CM* $B2; + +# LB 18 break after spaces +# Nothing explicit needed here. + + +# +# LB 19 +# +$CM* $QU $CM* $CAN_CM; # . x QU +$CM* $QU $LB18NonBreaks; + + +$CM* $CAN_CM $CM* $QU; # QU x . + $CANT_CM $CM* $QU; + +# +# LB 20 Break before and after CB. +# nothing needed here. +# + +# LB 20.09 added rule for Finnish tailoring +$AL ($HY | $HH) / $SP; + +# LB 21 +$CM* ($BA | $HH | $HY | $NS) $CM* [$LB20NonBreaks-$CM]; # . x (BA | HY | NS) + +$CM* [$LB20NonBreaks-$CM] $CM* $BB; # BB x . +[^$CB] $CM* $BB; # + +# LB21a +[^$CB] $CM* ($HY | $BA | $HH) $CM* $HL; + +# LB21b (reverse) +$CM* $HL $CM* $SY; + +# LB 22 +$CM* $IN $CM* ($ALPlus | $HL); +$CM* $IN $CM* $ID; +$CM* $IN $CM* $IN; +$CM* $IN $CM* $NU; + +# LB 23 +$CM* $PO $CM* $ID; +$CM* $NU $CM* ($ALPlus | $HL); +$CM* ($ALPlus | $HL) $CM* $NU; + +# LB 24 +$CM* $ID $CM* $PR; +$CM* ($ALPlus | $HL) $CM* $PR; +$CM* ($ALPlus | $HL) $CM* $PO; + + +# LB 25 +($CM* ($PR | $PO))? ($CM* ($CL | $CP))? ($CM* ($NU | $IS | $SY))* $CM* $NU ($CM* ($OP | $HY))? ($CM* ($PR | $PO))?; + +# LB 26 +$CM* ($H3 | $H2 | $JV | $JL) $CM* $JL; +$CM* ($JT | $JV) $CM* ($H2 | $JV); +$CM* $JT $CM* ($H3 | $JT); + +# LB 27 +$CM* $IN $CM* ($H3 | $H2 | $JT | $JV | $JL); +$CM* $PO $CM* ($H3 | $H2 | $JT | $JV | $JL); +$CM* ($H3 | $H2 | $JT | $JV | $JL) $CM* $PR; + +# LB 28 +$CM* ($ALPlus | $HL) $CM* ($ALPlus | $HL); + + +# LB 29 +$CM* ($ALPlus | $HL) $CM* $IS; + +# LB 30 +$CM* $OP $CM* ($ALPlus | $HL | $NU); +$CM* ($ALPlus | $HL | $NU) $CM* $CP; + +# LB 30a +$CM* $RI $CM* $RI; + +# Special reverse rule for people & body part emoji: +# don't break between relevant emoji and $EmojiMods +$EmojiMods $EmojiVar? $EmojiForMods; + +## ------------------------------------------------- + +!!safe_reverse; + +# LB 9 +$CM+ [^$CM $BK $CR $LF $NL $ZW $SP]; +$CM+ $SP / .; + +# LB 14 +$SP+ $CM* $OP; + +# LB 15 +$SP+ $CM* $QU; + +# LB 16 +$SP+ $CM* ($CL | $CP); + +# LB 17 +$SP+ $CM* $B2; + +# LB 21 +$CM* ($HY | $BA | $HH) $CM* $HL; + +# LB 25 +($CM* ($IS | $SY))+ $CM* $NU; +($CL | $CP) $CM* ($NU | $IS | $SY); + +# For dictionary-based break +$dictionary $dictionary; + +## ------------------------------------------------- + +!!safe_forward; + +# Skip forward over all character classes that are involved in +# rules containing patterns with possibly more than one char +# of context. +# +# It might be slightly more efficient to have specific rules +# instead of one generic one, but only if we could +# turn off rule chaining. We don't want to move more +# than necessary. +# +[$CM $OP $QU $CL $CP $B2 $PR $HY $BA $SP $dictionary]+ [^$CM $OP $QU $CL $CP $B2 $PR $HY $BA $dictionary]; +$dictionary $dictionary; + diff --git a/icuSources/data/brkitr/root.txt b/icuSources/data/brkitr/root.txt index ce05d5b4..3cfa8014 100644 --- a/icuSources/data/brkitr/root.txt +++ b/icuSources/data/brkitr/root.txt @@ -11,6 +11,9 @@ root{ boundaries{ grapheme:process(dependency){"char.brk"} line:process(dependency){"line.brk"} + line_loose:process(dependency){"line_loose.brk"} + line_normal:process(dependency){"line_normal.brk"} + line_strict:process(dependency){"line.brk"} sentence:process(dependency){"sent.brk"} title:process(dependency){"title.brk"} word:process(dependency){"word.brk"} diff --git a/icuSources/data/brkitr/word.txt b/icuSources/data/brkitr/word.txt index 06c07df4..8d37f031 100644 --- a/icuSources/data/brkitr/word.txt +++ b/icuSources/data/brkitr/word.txt @@ -1,5 +1,5 @@ # -# Copyright (C) 2002-2013, International Business Machines Corporation +# Copyright (C) 2002-2015, International Business Machines Corporation # and others. All Rights Reserved. # # file: word.txt @@ -43,48 +43,56 @@ $ExtendNumLet = [\p{Word_Break = ExtendNumLet}]; $Han = [:Han:]; $Hiragana = [:Hiragana:]; -$RI_A = \U0001F1E6; # Trail ERTU -$RI_B = \U0001F1E7; # Trail EGR -$RI_C = \U0001F1E8; # Trail AHLNZ +$RI_A = \U0001F1E6; # Trail ETU +$RI_B = \U0001F1E7; # Trail ER +$RI_C = \U0001F1E8; # Trail AHLNO $RI_D = \U0001F1E9; # Trail EK -$RI_E = \U0001F1EA; # Trail GS +$RI_E = \U0001F1EA; # Trail S $RI_F = \U0001F1EB; # Trail IR -$RI_G = \U0001F1EC; # Trail BR -$RI_H = \U0001F1ED; # Trail KU -$RI_I = \U0001F1EE; # Trail DLNT +$RI_G = \U0001F1EC; # Trail B +$RI_H = \U0001F1ED; # Trail K +$RI_I = \U0001F1EE; # Trail DELNT $RI_J = \U0001F1EF; # Trail OP $RI_K = \U0001F1F0; # Trail R -$RI_L = \U0001F1F1; # Trail B $RI_M = \U0001F1F2; # Trail OXY -$RI_N = \U0001F1F3; # Trail LO -$RI_P = \U0001F1F5; # Trail LT -$RI_R = \U0001F1F7; # Trail OU -$RI_S = \U0001F1F8; # Trail AEGK -$RI_T = \U0001F1F9; # Trail HRW -$RI_U = \U0001F1FA; # Trail AS +$RI_N = \U0001F1F3; # Trail LOZ +$RI_P = \U0001F1F5; # Trail HLRT +$RI_R = \U0001F1F7; # Trail U +$RI_S = \U0001F1F8; # Trail AEG +$RI_T = \U0001F1F9; # Trail R +$RI_U = \U0001F1FA; # Trail S $RI_V = \U0001F1FB; # Trail N +$RI_Z = \U0001F1FF; # Trail A -$RI_A_End = [\U0001F1EA \U0001F1F7 \U0001F1F9 \U0001F1FA]; # ERTU -$RI_B_End = [\U0001F1EA \U0001F1EC \U0001F1F7]; # EGR -$RI_C_End = [\U0001F1E6 \U0001F1ED \U0001F1F1 \U0001F1F3 \U0001F1FF]; # AHLNZ +$RI_A_End = [\U0001F1EA \U0001F1F9 \U0001F1FA]; # ETU +$RI_B_End = [\U0001F1EA \U0001F1F7]; # ER +$RI_C_End = [\U0001F1E6 \U0001F1ED \U0001F1F1 \U0001F1F3 \U0001F1F4]; # AHLNO $RI_D_End = [\U0001F1EA \U0001F1F0]; # EK -$RI_E_End = [\U0001F1EC \U0001F1F8]; # GS +$RI_E_End = \U0001F1F8; # S $RI_F_End = [\U0001F1EE \U0001F1F7]; # IR -$RI_G_End = [\U0001F1E7 \U0001F1F7]; # BR -$RI_H_End = [\U0001F1F0 \U0001F1FA]; # KU -$RI_I_End = [\U0001F1E9 \U0001F1F1 \U0001F1F3 \U0001F1F9]; # DLNT -$RI_J_End = [\U0001F1F4 \U0001F1F5]; # OP +$RI_G_End = \U0001F1E7; # B +$RI_H_End = \U0001F1F0; # K +$RI_I_End = [\U0001F1E9 \U0001F1EA \U0001F1F1 \U0001F1F3 \U0001F1F9]; # DELNT +$RI_J_End = [\U0001F1F5 \U0001F1F4]; # OP $RI_K_End = \U0001F1F7; # R -$RI_L_End = \U0001F1E7; # B $RI_M_End = [\U0001F1F4 \U0001F1FD \U0001F1FE]; # OXY -$RI_N_End = [\U0001F1F1 \U0001F1F4]; # LO -$RI_P_End = [\U0001F1F1 \U0001F1F9]; # LT -$RI_R_End = [\U0001F1F4 \U0001F1FA]; # OU -$RI_S_End = [\U0001F1E6 \U0001F1EA \U0001F1EC \U0001F1F0]; # AEGK -$RI_T_End = [\U0001F1ED \U0001F1F7 \U0001F1FC]; # HRW -$RI_U_End = [\U0001F1E6 \U0001F1F8]; # AS +$RI_N_End = [\U0001F1F1 \U0001F1F4 \U0001F1FF]; # LOZ +$RI_P_End = [\U0001F1ED \U0001F1F1 \U0001F1F7 \U0001F1F9]; # HLRT +$RI_R_End = \U0001F1FA; # U +$RI_S_End = [\U0001F1E6 \U0001F1EA \U0001F1EC]; # AEG +$RI_T_End = \U0001F1F7; # R +$RI_U_End = \U0001F1F8; # S $RI_V_End = \U0001F1F3; # N +$RI_Z_End = \U0001F1E6; # A +# Special character classes for people & body part emoji: +# Subsets of $Extend: +$ZWJ = \u200D; +$EmojiVar = \uFE0F; +# The following are subsets of \p{Word_Break = Other} +$EmojiForSeqs = [\u2764 \U0001F466-\U0001F469 \U0001F48B]; +$EmojiForMods = [\u261D \u270A-\u270C \U0001F385 \U0001F3C3-\U0001F3C4 \U0001F3C7 \U0001F3CA \U0001F442-\U0001F443 \U0001F446-\U0001F450 \U0001F466-\U0001F469 \U0001F46E-\U0001F478 \U0001F47C \U0001F481-\U0001F483 \U0001F485-\U0001F487 \U0001F4AA \U0001F596 \U0001F645-\U0001F647 \U0001F64B-\U0001F64F \U0001F6A3 \U0001F6B4-\U0001F6B6 \U0001F6C0]; +$EmojiMods = [\U0001F3FB-\U0001F3FF]; # Dictionary character set, for triggering language-based break engines. Currently # limited to LineBreak=Complex_Context. Note that this set only works in Unicode @@ -209,7 +217,6 @@ $RI_H ($Extend|$Format)* $RI_H_End ($Extend|$Format)*; $RI_I ($Extend|$Format)* $RI_I_End ($Extend|$Format)*; $RI_J ($Extend|$Format)* $RI_J_End ($Extend|$Format)*; $RI_K ($Extend|$Format)* $RI_K_End ($Extend|$Format)*; -$RI_L ($Extend|$Format)* $RI_L_End ($Extend|$Format)*; $RI_M ($Extend|$Format)* $RI_M_End ($Extend|$Format)*; $RI_N ($Extend|$Format)* $RI_N_End ($Extend|$Format)*; $RI_P ($Extend|$Format)* $RI_P_End ($Extend|$Format)*; @@ -218,6 +225,12 @@ $RI_S ($Extend|$Format)* $RI_S_End ($Extend|$Format)*; $RI_T ($Extend|$Format)* $RI_T_End ($Extend|$Format)*; $RI_U ($Extend|$Format)* $RI_U_End ($Extend|$Format)*; $RI_V ($Extend|$Format)* $RI_V_End ($Extend|$Format)*; +$RI_Z ($Extend|$Format)* $RI_Z_End ($Extend|$Format)*; + +# Special forward rules for people & body part emoji: +# don't break $ZWJ from subsequent $EmojiForSeqs; don't break between relevant emoji and $EmojiMods +$ZWJ $EmojiForSeqs; +$EmojiForMods $EmojiVar? $EmojiMods; # special handling for CJK characters: chain for later dictionary segmentation $HangulSyllable $HangulSyllable {200}; @@ -298,7 +311,6 @@ $BackExtendNumLetEx ($BackALetterEx | $BackHebrew_LetterEx | $BackNumericEx | $B ($Format|$Extend)* $RI_I_End ($Format|$Extend)* $RI_I; ($Format|$Extend)* $RI_J_End ($Format|$Extend)* $RI_J; ($Format|$Extend)* $RI_K_End ($Format|$Extend)* $RI_K; -($Format|$Extend)* $RI_L_End ($Format|$Extend)* $RI_L; ($Format|$Extend)* $RI_M_End ($Format|$Extend)* $RI_M; ($Format|$Extend)* $RI_N_End ($Format|$Extend)* $RI_N; ($Format|$Extend)* $RI_P_End ($Format|$Extend)* $RI_P; @@ -307,6 +319,12 @@ $BackExtendNumLetEx ($BackALetterEx | $BackHebrew_LetterEx | $BackNumericEx | $B ($Format|$Extend)* $RI_T_End ($Format|$Extend)* $RI_T; ($Format|$Extend)* $RI_U_End ($Format|$Extend)* $RI_U; ($Format|$Extend)* $RI_V_End ($Format|$Extend)* $RI_V; +($Format|$Extend)* $RI_Z_End ($Format|$Extend)* $RI_Z; + +# Special reverse rules for people & body part emoji: +# don't break $ZWJ from subsequent $EmojiForSeqs; don't break between relevant emoji and $EmojiMods +$EmojiForSeqs $ZWJ; +$EmojiMods $EmojiVar? $EmojiForMods; # special handling for CJK characters: chain for later dictionary segmentation $HangulSyllable $HangulSyllable; diff --git a/icuSources/data/brkitr/word_POSIX.txt b/icuSources/data/brkitr/word_POSIX.txt index 50ddb812..fe582b00 100644 --- a/icuSources/data/brkitr/word_POSIX.txt +++ b/icuSources/data/brkitr/word_POSIX.txt @@ -1,5 +1,5 @@ # -# Copyright (C) 2002-2013, International Business Machines Corporation +# Copyright (C) 2002-2015, International Business Machines Corporation # and others. All Rights Reserved. # # file: word_POSIX.txt @@ -43,48 +43,56 @@ $ExtendNumLet = [\p{Word_Break = ExtendNumLet}]; $Han = [:Han:]; $Hiragana = [:Hiragana:]; -$RI_A = \U0001F1E6; # Trail ERTU -$RI_B = \U0001F1E7; # Trail EGR -$RI_C = \U0001F1E8; # Trail AHLNZ +$RI_A = \U0001F1E6; # Trail ETU +$RI_B = \U0001F1E7; # Trail ER +$RI_C = \U0001F1E8; # Trail AHLNO $RI_D = \U0001F1E9; # Trail EK -$RI_E = \U0001F1EA; # Trail GS +$RI_E = \U0001F1EA; # Trail S $RI_F = \U0001F1EB; # Trail IR -$RI_G = \U0001F1EC; # Trail BR -$RI_H = \U0001F1ED; # Trail KU -$RI_I = \U0001F1EE; # Trail DLNT +$RI_G = \U0001F1EC; # Trail B +$RI_H = \U0001F1ED; # Trail K +$RI_I = \U0001F1EE; # Trail DELNT $RI_J = \U0001F1EF; # Trail OP $RI_K = \U0001F1F0; # Trail R -$RI_L = \U0001F1F1; # Trail B $RI_M = \U0001F1F2; # Trail OXY -$RI_N = \U0001F1F3; # Trail LO -$RI_P = \U0001F1F5; # Trail LT -$RI_R = \U0001F1F7; # Trail OU -$RI_S = \U0001F1F8; # Trail AEGK -$RI_T = \U0001F1F9; # Trail HRW -$RI_U = \U0001F1FA; # Trail AS +$RI_N = \U0001F1F3; # Trail LOZ +$RI_P = \U0001F1F5; # Trail HLRT +$RI_R = \U0001F1F7; # Trail U +$RI_S = \U0001F1F8; # Trail AEG +$RI_T = \U0001F1F9; # Trail R +$RI_U = \U0001F1FA; # Trail S $RI_V = \U0001F1FB; # Trail N +$RI_Z = \U0001F1FF; # Trail A -$RI_A_End = [\U0001F1EA \U0001F1F7 \U0001F1F9 \U0001F1FA]; # ERTU -$RI_B_End = [\U0001F1EA \U0001F1EC \U0001F1F7]; # EGR -$RI_C_End = [\U0001F1E6 \U0001F1ED \U0001F1F1 \U0001F1F3 \U0001F1FF]; # AHLNZ +$RI_A_End = [\U0001F1EA \U0001F1F9 \U0001F1FA]; # ETU +$RI_B_End = [\U0001F1EA \U0001F1F7]; # ER +$RI_C_End = [\U0001F1E6 \U0001F1ED \U0001F1F1 \U0001F1F3 \U0001F1F4]; # AHLNO $RI_D_End = [\U0001F1EA \U0001F1F0]; # EK -$RI_E_End = [\U0001F1EC \U0001F1F8]; # GS +$RI_E_End = \U0001F1F8; # S $RI_F_End = [\U0001F1EE \U0001F1F7]; # IR -$RI_G_End = [\U0001F1E7 \U0001F1F7]; # BR -$RI_H_End = [\U0001F1F0 \U0001F1FA]; # KU -$RI_I_End = [\U0001F1E9 \U0001F1F1 \U0001F1F3 \U0001F1F9]; # DLNT -$RI_J_End = [\U0001F1F4 \U0001F1F5]; # OP +$RI_G_End = \U0001F1E7; # B +$RI_H_End = \U0001F1F0; # K +$RI_I_End = [\U0001F1E9 \U0001F1EA \U0001F1F1 \U0001F1F3 \U0001F1F9]; # DELNT +$RI_J_End = [\U0001F1F5 \U0001F1F4]; # OP $RI_K_End = \U0001F1F7; # R -$RI_L_End = \U0001F1E7; # B $RI_M_End = [\U0001F1F4 \U0001F1FD \U0001F1FE]; # OXY -$RI_N_End = [\U0001F1F1 \U0001F1F4]; # LO -$RI_P_End = [\U0001F1F1 \U0001F1F9]; # LT -$RI_R_End = [\U0001F1F4 \U0001F1FA]; # OU -$RI_S_End = [\U0001F1E6 \U0001F1EA \U0001F1EC \U0001F1F0]; # AEGK -$RI_T_End = [\U0001F1ED \U0001F1F7 \U0001F1FC]; # HRW -$RI_U_End = [\U0001F1E6 \U0001F1F8]; # AS +$RI_N_End = [\U0001F1F1 \U0001F1F4 \U0001F1FF]; # LOZ +$RI_P_End = [\U0001F1ED \U0001F1F1 \U0001F1F7 \U0001F1F9]; # HLRT +$RI_R_End = \U0001F1FA; # U +$RI_S_End = [\U0001F1E6 \U0001F1EA \U0001F1EC]; # AEG +$RI_T_End = \U0001F1F7; # R +$RI_U_End = \U0001F1F8; # S $RI_V_End = \U0001F1F3; # N +$RI_Z_End = \U0001F1E6; # A +# Special character classes for people & body part emoji: +# Subsets of $Extend: +$ZWJ = \u200D; +$EmojiVar = \uFE0F; +# The following are subsets of \p{Word_Break = Other} +$EmojiForSeqs = [\u2764 \U0001F466-\U0001F469 \U0001F48B]; +$EmojiForMods = [\u261D \u270A-\u270C \U0001F385 \U0001F3C3-\U0001F3C4 \U0001F3C7 \U0001F3CA \U0001F442-\U0001F443 \U0001F446-\U0001F450 \U0001F466-\U0001F469 \U0001F46E-\U0001F478 \U0001F47C \U0001F481-\U0001F483 \U0001F485-\U0001F487 \U0001F4AA \U0001F596 \U0001F645-\U0001F647 \U0001F64B-\U0001F64F \U0001F6A3 \U0001F6B4-\U0001F6B6 \U0001F6C0]; +$EmojiMods = [\U0001F3FB-\U0001F3FF]; # Dictionary character set, for triggering language-based break engines. Currently # limited to LineBreak=Complex_Context. Note that this set only works in Unicode @@ -209,7 +217,6 @@ $RI_H ($Extend|$Format)* $RI_H_End ($Extend|$Format)*; $RI_I ($Extend|$Format)* $RI_I_End ($Extend|$Format)*; $RI_J ($Extend|$Format)* $RI_J_End ($Extend|$Format)*; $RI_K ($Extend|$Format)* $RI_K_End ($Extend|$Format)*; -$RI_L ($Extend|$Format)* $RI_L_End ($Extend|$Format)*; $RI_M ($Extend|$Format)* $RI_M_End ($Extend|$Format)*; $RI_N ($Extend|$Format)* $RI_N_End ($Extend|$Format)*; $RI_P ($Extend|$Format)* $RI_P_End ($Extend|$Format)*; @@ -218,6 +225,12 @@ $RI_S ($Extend|$Format)* $RI_S_End ($Extend|$Format)*; $RI_T ($Extend|$Format)* $RI_T_End ($Extend|$Format)*; $RI_U ($Extend|$Format)* $RI_U_End ($Extend|$Format)*; $RI_V ($Extend|$Format)* $RI_V_End ($Extend|$Format)*; +$RI_Z ($Extend|$Format)* $RI_Z_End ($Extend|$Format)*; + +# Special forward rules for people & body part emoji: +# don't break $ZWJ from subsequent $EmojiForSeqs; don't break between relevant emoji and $EmojiMods +$ZWJ $EmojiForSeqs; +$EmojiForMods $EmojiVar? $EmojiMods; # special handling for CJK characters: chain for later dictionary segmentation $HangulSyllable $HangulSyllable {200}; @@ -298,7 +311,6 @@ $BackExtendNumLetEx ($BackALetterEx | $BackHebrew_LetterEx | $BackNumericEx | $B ($Format|$Extend)* $RI_I_End ($Format|$Extend)* $RI_I; ($Format|$Extend)* $RI_J_End ($Format|$Extend)* $RI_J; ($Format|$Extend)* $RI_K_End ($Format|$Extend)* $RI_K; -($Format|$Extend)* $RI_L_End ($Format|$Extend)* $RI_L; ($Format|$Extend)* $RI_M_End ($Format|$Extend)* $RI_M; ($Format|$Extend)* $RI_N_End ($Format|$Extend)* $RI_N; ($Format|$Extend)* $RI_P_End ($Format|$Extend)* $RI_P; @@ -307,6 +319,12 @@ $BackExtendNumLetEx ($BackALetterEx | $BackHebrew_LetterEx | $BackNumericEx | $B ($Format|$Extend)* $RI_T_End ($Format|$Extend)* $RI_T; ($Format|$Extend)* $RI_U_End ($Format|$Extend)* $RI_U; ($Format|$Extend)* $RI_V_End ($Format|$Extend)* $RI_V; +($Format|$Extend)* $RI_Z_End ($Format|$Extend)* $RI_Z; + +# Special reverse rules for people & body part emoji: +# don't break $ZWJ from subsequent $EmojiForSeqs; don't break between relevant emoji and $EmojiMods +$EmojiForSeqs $ZWJ; +$EmojiMods $EmojiVar? $EmojiForMods; # special handling for CJK characters: chain for later dictionary segmentation $HangulSyllable $HangulSyllable; diff --git a/icuSources/data/brkitr/zh.txt b/icuSources/data/brkitr/zh.txt new file mode 100644 index 00000000..04e9ba38 --- /dev/null +++ b/icuSources/data/brkitr/zh.txt @@ -0,0 +1,17 @@ +// *************************************************************************** +// * +// * Copyright (C) 2014 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: org.unicode.cldr.icu.NewLdml2IcuConverter +// * Source File: /common/segments/zh.xml ../../xml/brkitr/zh.xml +// * +// *************************************************************************** +zh{ + Version{"2.0.82.42"} + boundaries{ + line:process(dependency){"line.brk"} + line_loose:process(dependency){"line_loose_cj.brk"} + line_normal:process(dependency){"line_normal_cj.brk"} + line_strict:process(dependency){"line.brk"} + } +} diff --git a/icuSources/data/brkitr/zh_Hant.txt b/icuSources/data/brkitr/zh_Hant.txt new file mode 100644 index 00000000..752278f2 --- /dev/null +++ b/icuSources/data/brkitr/zh_Hant.txt @@ -0,0 +1,17 @@ +// *************************************************************************** +// * +// * Copyright (C) 2014 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: org.unicode.cldr.icu.NewLdml2IcuConverter +// * Source File: /common/segments/zh_Hant.xml ../../xml/brkitr/zh_Hant.xml +// * +// *************************************************************************** +zh_Hant{ + Version{"2.0.82.42"} + boundaries{ + line:process(dependency){"line.brk"} + line_loose:process(dependency){"line_loose_cj.brk"} + line_normal:process(dependency){"line_normal_cj.brk"} + line_strict:process(dependency){"line.brk"} + } +} diff --git a/icuSources/data/curr/supplementalData.txt b/icuSources/data/curr/supplementalData.txt index 7ed00d2e..e36ae425 100644 --- a/icuSources/data/curr/supplementalData.txt +++ b/icuSources/data/curr/supplementalData.txt @@ -1,6 +1,6 @@ // *************************************************************************** // * -// * Copyright (C) 2014 International Business Machines +// * Copyright (C) 2015 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: org.unicode.cldr.icu.NewLdml2IcuConverter // * Source File: /supplementalData.xml @@ -2459,12 +2459,23 @@ supplementalData:table(nofallback){ } } LT{ + { + from:intvector{ + 330, + -1563774976, + } + id{"EUR"} + } { from:intvector{ 172, -2062942208, } id{"LTL"} + to:intvector{ + 330, + -1563774977, + } } { from:intvector{ diff --git a/icuSources/data/in/ubidi.icu b/icuSources/data/in/ubidi.icu index 6d898137818e9c586e1db25690255a8ca6ae9c71..9a4888dbe23158f95eb89cce2af9ce3fe45b3c76 100644 GIT binary patch delta 244 zcmbQRim_uA;{+Af7ajS$3GYI}>1Bvrb zww9P!FU+OPB@KouToBmDj0|<4qA*!1(@KPm-<&I%Xg1lvSYYyp03g=am>dwmGFimm OVe&p1j?Ga4>sSC{@HJ=v diff --git a/icuSources/data/in/unames.icu b/icuSources/data/in/unames.icu index 2f6fb0cd83e8c7d388f36a7fff9bdbc68d2c587a..a723e493ade81da2eec7176bc2e38eea75794da4 100644 GIT binary patch literal 204196 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 z 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 Z3=FJz!eu!VgUNRMY8-&_vODmr0RUK@Bvt?b literal 204196 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%0DI=VKdAZ-K?s`4oFHM!XL;CrZf?@2shzWa`FC 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 Gs{sH4!74QX diff --git a/icuSources/data/in/uprops.icu b/icuSources/data/in/uprops.icu index 6dddb506dc9bf6ad49b153b90d3a4a65c890e0d4..f47bd7e5aa7ddd565bd34d2a6dbcad78619cbefc 100644 GIT binary patch delta 77 zcmcbyg6+u)wh0!zZ&DZ-1XH1SqwCC$$qC6^la)H0CJVH4Y&Pl)DdNf&hQZAfew)nT WVK~dsz`(%3!ocu=VfvBDj8g#NYZ&1G delta 69 zcmaE|g6+l%wh0!zFH;y8_)?*GqwCC$$q5Qvla)H0CJVH4Y&Pl)DVpr?n`?5wZ>7l# We#uN0_`|aK((g~xr(c-NI0XQ1eH^3! diff --git a/icuSources/data/locales/da.txt b/icuSources/data/locales/da.txt index a82d4fa8..4ad70221 100644 --- a/icuSources/data/locales/da.txt +++ b/icuSources/data/locales/da.txt @@ -1133,8 +1133,8 @@ da{ other{"{0} unser"} } pound{ - one{"{0} skålpund"} - other{"{0} skålpund"} + one{"{0} pund"} + other{"{0} pund"} } stone{ one{"{0} stone"} @@ -1348,8 +1348,8 @@ da{ other{"{0} unser"} } pound{ - one{"{0} pund"} - other{"{0} pund"} + one{"{0} lb"} + other{"{0} lb"} } } power{ @@ -1581,8 +1581,8 @@ da{ other{"{0} unser"} } pound{ - one{"{0} skålpund"} - other{"{0} skålpund"} + one{"{0} pund"} + other{"{0} pund"} } stone{ one{"{0} st"} diff --git a/icuSources/data/locales/en.txt b/icuSources/data/locales/en.txt index ec56cce3..cfc44f3e 100644 --- a/icuSources/data/locales/en.txt +++ b/icuSources/data/locales/en.txt @@ -1780,7 +1780,7 @@ en{ } minute{ one{"{0} min"} - other{"{0} mins"} + other{"{0} min"} } month{ one{"{0} mth"} diff --git a/icuSources/data/locales/es.txt b/icuSources/data/locales/es.txt index c5f58d34..6316f4b2 100644 --- a/icuSources/data/locales/es.txt +++ b/icuSources/data/locales/es.txt @@ -1043,6 +1043,12 @@ es{ middle{"{0}, {1}"} start{"{0}, {1}"} } + unit-narrow{ + 2{"{0} {1}"} + end{"{0} {1}"} + middle{"{0} {1}"} + start{"{0} {1}"} + } unit-short{ 2{"{0} y {1}"} end{"{0}, {1}"} @@ -1352,36 +1358,36 @@ es{ } duration{ day{ - one{"{0} d"} - other{"{0} d"} + one{"{0}d"} + other{"{0}d"} } hour{ - one{"{0} h"} - other{"{0} h"} + one{"{0}h"} + other{"{0}h"} } millisecond{ - one{"{0} ms"} - other{"{0} ms"} + one{"{0}ms"} + other{"{0}ms"} } minute{ - one{"{0} min"} - other{"{0} min"} + one{"{0}min"} + other{"{0}min"} } month{ - one{"{0} m"} - other{"{0} m"} + one{"{0}m"} + other{"{0}m"} } second{ - one{"{0} s"} - other{"{0} s"} + one{"{0}s"} + other{"{0}s"} } week{ - one{"{0} semana"} - other{"{0} sem"} + one{"{0}sem"} + other{"{0}sem"} } year{ one{"{0}a"} - other{"{0} a"} + other{"{0}a"} } } energy{ diff --git a/icuSources/data/locales/es_419.txt b/icuSources/data/locales/es_419.txt index 7f56fae4..3ff34927 100644 --- a/icuSources/data/locales/es_419.txt +++ b/icuSources/data/locales/es_419.txt @@ -98,6 +98,15 @@ es_419{ "vie", "sáb", } + narrow{ + "D", + "L", + "M", + "M", + "J", + "V", + "S", + } short{ "DO", "LU", diff --git a/icuSources/data/locales/es_MX.txt b/icuSources/data/locales/es_MX.txt index 0403a508..351536f4 100644 --- a/icuSources/data/locales/es_MX.txt +++ b/icuSources/data/locales/es_MX.txt @@ -795,10 +795,10 @@ es_MX{ start{"{0}, {1}"} } unit-narrow{ - 2{"{0} y {1}"} - end{"{0}, {1}"} - middle{"{0}, {1}"} - start{"{0}, {1}"} + 2{"{0} {1}"} + end{"{0} {1}"} + middle{"{0} {1}"} + start{"{0} {1}"} } unit-short{ 2{"{0} y {1}"} @@ -1043,32 +1043,32 @@ es_MX{ } duration{ day{ - one{"{0} d"} - other{"{0} d"} + one{"{0}d"} + other{"{0}d"} } hour{ - one{"{0} h"} - other{"{0} h"} + one{"{0}h"} + other{"{0}h"} } millisecond{ - one{"{0} ms"} - other{"{0} ms"} + one{"{0}ms"} + other{"{0}ms"} } minute{ - one{"{0} min"} - other{"{0} min"} + one{"{0}min"} + other{"{0}min"} } month{ - one{"{0} m"} - other{"{0} m"} + one{"{0}m"} + other{"{0}m"} } week{ - one{"{0} sem"} - other{"{0} sem"} + one{"{0}sem"} + other{"{0}sem"} } year{ one{"{0}a"} - other{"{0} a"} + other{"{0}a"} } } } diff --git a/icuSources/data/locales/fr.txt b/icuSources/data/locales/fr.txt index e51f356e..ed3cb9cc 100644 --- a/icuSources/data/locales/fr.txt +++ b/icuSources/data/locales/fr.txt @@ -1943,8 +1943,8 @@ fr{ other{"{0} ms"} } minute{ - one{"{0} min"} - other{"{0} min"} + one{"{0} mn"} + other{"{0} mn"} } month{ one{"{0} m"} diff --git a/icuSources/data/locales/hu.txt b/icuSources/data/locales/hu.txt index 19729478..7275f27f 100644 --- a/icuSources/data/locales/hu.txt +++ b/icuSources/data/locales/hu.txt @@ -1085,6 +1085,20 @@ hu{ } } stand-alone{ + abbreviated{ + "Moh.", + "Saf.", + "Rébi I", + "Rébi II", + "Dsem. I", + "Dsem. II", + "Red.", + "Sab.", + "Ram.", + "Sev.", + "Dsül k.", + "Dsül h.", + } narrow{ "1", "2", diff --git a/icuSources/data/locales/it.txt b/icuSources/data/locales/it.txt index 554a33af..0ae03fcd 100644 --- a/icuSources/data/locales/it.txt +++ b/icuSources/data/locales/it.txt @@ -355,10 +355,10 @@ it{ Timezone{"{0} {1}"} } availableFormats{ - EHm{"E HH.mm"} + EHm{"E HH:mm"} EHms{"E HH:mm:ss"} Ed{"E d"} - Ehm{"E h.mm a"} + Ehm{"E h:mm a"} Ehms{"E h:mm:ss a"} Gy{"y G"} GyMMM{"MMM y G"} @@ -975,10 +975,10 @@ it{ start{"{0}, {1}"} } unit-narrow{ - 2{"{0}, {1}"} - end{"{0}, e {1}"} - middle{"{0}, {1}"} - start{"{0}, {1}"} + 2{"{0} {1}"} + end{"{0} {1}"} + middle{"{0} {1}"} + start{"{0} {1}"} } unit-short{ 2{"{0}, {1}"} @@ -1289,36 +1289,36 @@ it{ } duration{ day{ - one{"{0} gg"} - other{"{0} gg"} + one{"{0}gg"} + other{"{0}gg"} } hour{ - one{"{0} h"} - other{"{0} h"} + one{"{0}h"} + other{"{0}h"} } millisecond{ - one{"{0} ms"} - other{"{0} ms"} + one{"{0}ms"} + other{"{0}ms"} } minute{ - one{"{0} m"} - other{"{0} m"} + one{"{0}min"} + other{"{0}min"} } month{ - one{"{0} mesi"} - other{"{0} mesi"} + one{"{0}mesi"} + other{"{0}mesi"} } second{ - one{"{0} s"} - other{"{0} s"} + one{"{0}s"} + other{"{0}s"} } week{ - one{"{0} sett."} - other{"{0} sett."} + one{"{0}sett."} + other{"{0}sett."} } year{ - one{"{0} anno"} - other{"{0} anni"} + one{"{0}anno"} + other{"{0}anni"} } } energy{ diff --git a/icuSources/data/locales/it_CH.txt b/icuSources/data/locales/it_CH.txt index c1bdcebe..ea5164b0 100644 --- a/icuSources/data/locales/it_CH.txt +++ b/icuSources/data/locales/it_CH.txt @@ -22,7 +22,7 @@ it_CH{ calendar{ generic{ DateTimePatterns{ - "HH.mm:ss 'h' zzzz", + "HH:mm:ss 'h' zzzz", "HH:mm:ss z", "HH:mm:ss", "HH:mm", @@ -39,7 +39,7 @@ it_CH{ } gregorian{ DateTimePatterns{ - "HH.mm:ss 'h' zzzz", + "HH:mm:ss 'h' zzzz", "HH:mm:ss z", "HH:mm:ss", "HH:mm", diff --git a/icuSources/data/locales/ms.txt b/icuSources/data/locales/ms.txt index 7d3e5eeb..2c89fb02 100644 --- a/icuSources/data/locales/ms.txt +++ b/icuSources/data/locales/ms.txt @@ -1291,7 +1291,7 @@ ms{ } length{ centimeter{ - other{"{0} sm"} + other{"{0} cm"} } foot{ other{"{0}'"} @@ -1476,7 +1476,7 @@ ms{ } length{ centimeter{ - other{"{0} sm"} + other{"{0} cm"} } foot{ other{"{0} ka"} diff --git a/icuSources/data/locales/pl.txt b/icuSources/data/locales/pl.txt index 0c8753a7..b7d6f0fb 100644 --- a/icuSources/data/locales/pl.txt +++ b/icuSources/data/locales/pl.txt @@ -1277,6 +1277,14 @@ pl{ } } contextTransforms{ + day-format-except-narrow:intvector{ + 0, + 1, + } + day-standalone-except-narrow:intvector{ + 0, + 1, + } month-format-except-narrow:intvector{ 0, 1, diff --git a/icuSources/data/locales/sv.txt b/icuSources/data/locales/sv.txt index 97d74335..b349d55c 100644 --- a/icuSources/data/locales/sv.txt +++ b/icuSources/data/locales/sv.txt @@ -1056,6 +1056,20 @@ sv{ } monthNames{ format{ + abbreviated{ + "muharram", + "safar", + "rabi’ al-awwal", + "rabi’ al-akhir", + "jumada-l-ula", + "jumada-l-akhira", + "rajab", + "sha’ban", + "ramadan", + "shawwal", + "dhu-l-ga’da", + "dhu-l-hijja", + } wide{ "muharram", "safar", @@ -1072,6 +1086,20 @@ sv{ } } stand-alone{ + abbreviated{ + "Muharram", + "Safar", + "Rabi’ al-awwal", + "Rabi’ al-akhir", + "Jumada-l-ula", + "Jumada-l-akhira", + "Rajab", + "Sha’ban", + "Ramadan", + "Shawwal", + "Dhu-l-ga’da", + "Dhu-l-hijja", + } wide{ "Muharram", "Safar", diff --git a/icuSources/data/locales/tr.txt b/icuSources/data/locales/tr.txt index 13b9f063..1b2c4e5f 100644 --- a/icuSources/data/locales/tr.txt +++ b/icuSources/data/locales/tr.txt @@ -801,6 +801,20 @@ tr{ } } stand-alone{ + abbreviated{ + "Muharrem", + "Safer", + "Rebiülevvel", + "Rebiülahir", + "Cemaziyelevvel", + "Cemaziyelahir", + "Recep", + "Şaban", + "Ramazan", + "Şevval", + "Zilkade", + "Zilhicce", + } narrow{ "1", "2", diff --git a/icuSources/data/locales/zh_Hans_HK.txt b/icuSources/data/locales/zh_Hans_HK.txt index ba31ca94..82625a66 100755 --- a/icuSources/data/locales/zh_Hans_HK.txt +++ b/icuSources/data/locales/zh_Hans_HK.txt @@ -128,11 +128,11 @@ zh_Hans_HK{ "Gy年M月d日", "Gy年M月d日", "d/M/yyGGGGG", - "{1}{0}", - "{1}{0}", - "{1}{0}", - "{1}{0}", - "{1}{0}", + "{1} {0}", + "{1} {0}", + "{1} {0}", + "{1} {0}", + "{1} {0}", } availableFormats{ HHmm{"HH:mm"} @@ -189,8 +189,8 @@ zh_Hans_HK{ "y年M月d日", "d/M/yy", "{1} {0}", - "{1}{0}", - "{1}{0}", + "{1} {0}", + "{1} {0}", "{1} {0}", "{1} {0}", } diff --git a/icuSources/data/locales/zh_Hans_MO.txt b/icuSources/data/locales/zh_Hans_MO.txt index 6d5f431a..b4257f63 100755 --- a/icuSources/data/locales/zh_Hans_MO.txt +++ b/icuSources/data/locales/zh_Hans_MO.txt @@ -91,8 +91,8 @@ zh_Hans_MO{ "y年M月d日", "d/M/yy", "{1} {0}", - "{1}{0}", - "{1}{0}", + "{1} {0}", + "{1} {0}", "{1} {0}", "{1} {0}", } diff --git a/icuSources/data/locales/zh_Hant.txt b/icuSources/data/locales/zh_Hant.txt index 3e22ca00..4a1e971b 100644 --- a/icuSources/data/locales/zh_Hant.txt +++ b/icuSources/data/locales/zh_Hant.txt @@ -2273,16 +2273,22 @@ zh_Hant{ start{"{0}、{1}"} } unit{ + 2{"{0} {1}"} + end{"{0} {1}"} + middle{"{0} {1}"} + start{"{0} {1}"} + } + unit-narrow{ 2{"{0}{1}"} end{"{0}{1}"} middle{"{0}{1}"} start{"{0}{1}"} } unit-short{ - 2{"{0}{1}"} - end{"{0}{1}"} - middle{"{0}{1}"} - start{"{0}{1}"} + 2{"{0} {1}"} + end{"{0} {1}"} + middle{"{0} {1}"} + start{"{0} {1}"} } } measurementSystemNames{ @@ -2529,28 +2535,28 @@ zh_Hant{ } duration{ day{ - other{"{0} 天"} + other{"{0}天"} } hour{ - other{"{0} 小時"} + other{"{0}時"} } millisecond{ - other{"{0} 毫秒"} + other{"{0}毫秒"} } minute{ - other{"{0} 分鐘"} + other{"{0}分"} } month{ - other{"{0} 個月"} + other{"{0}個月"} } second{ - other{"{0} 秒"} + other{"{0}秒"} } week{ - other{"{0} 週"} + other{"{0}週"} } year{ - other{"{0} 年"} + other{"{0}年"} } } energy{ diff --git a/icuSources/data/locales/zh_Hant_HK.txt b/icuSources/data/locales/zh_Hant_HK.txt index bbca9d72..10b3b01b 100644 --- a/icuSources/data/locales/zh_Hant_HK.txt +++ b/icuSources/data/locales/zh_Hant_HK.txt @@ -125,11 +125,11 @@ zh_Hant_HK{ "Gy年M月d日", "Gy年M月d日", "d/M/yGGGGG", - "{1}{0}", "{1} {0}", "{1} {0}", - "{1}{0}", - "{1}{0}", + "{1} {0}", + "{1} {0}", + "{1} {0}", } availableFormats{ Ed{"d E"} @@ -199,11 +199,11 @@ zh_Hant_HK{ "y年M月d日", "y年M月d日", "d/M/y", - "{1}{0}", "{1} {0}", "{1} {0}", - "{1}{0}", - "{1}{0}", + "{1} {0}", + "{1} {0}", + "{1} {0}", } availableFormats{ Ed{"d E"} @@ -358,7 +358,7 @@ zh_Hant_HK{ } duration{ week{ - other{"{0}星期"} + other{"{0} 星期"} } } energy{ diff --git a/icuSources/data/locales/zh_Hant_MO.txt b/icuSources/data/locales/zh_Hant_MO.txt index 5c229918..a3db6ba8 100644 --- a/icuSources/data/locales/zh_Hant_MO.txt +++ b/icuSources/data/locales/zh_Hant_MO.txt @@ -20,11 +20,11 @@ zh_Hant_MO{ "Gy年M月d日", "Gy年M月d日", "d/M/yGGGGG", - "{1}{0}", "{1} {0}", "{1} {0}", - "{1}{0}", - "{1}{0}", + "{1} {0}", + "{1} {0}", + "{1} {0}", } availableFormats{ Ed{"d E"} @@ -52,11 +52,11 @@ zh_Hant_MO{ "y年M月d日", "y年M月d日", "d/M/y", - "{1}{0}", "{1} {0}", "{1} {0}", - "{1}{0}", - "{1}{0}", + "{1} {0}", + "{1} {0}", + "{1} {0}", } availableFormats{ Ed{"d E"} diff --git a/icuSources/data/misc/metaZones.txt b/icuSources/data/misc/metaZones.txt index 939d9241..a65629f9 100644 --- a/icuSources/data/misc/metaZones.txt +++ b/icuSources/data/misc/metaZones.txt @@ -1,6 +1,6 @@ // *************************************************************************** // * -// * Copyright (C) 2014 International Business Machines +// * Copyright (C) 2015 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: org.unicode.cldr.icu.NewLdml2IcuConverter // * Source File: /metaZones.xml @@ -1412,6 +1412,11 @@ metaZones:table(nofallback){ { "America_Central", "1998-08-02 06:00", + "2015-02-01 08:00", + } + { + "America_Eastern", + "2015-02-01 08:00", "9999-12-31 23:59", } } @@ -2874,13 +2879,6 @@ metaZones:table(nofallback){ "Asia:Kamchatka"{ { "Kamchatka", - "1970-01-01 00:00", - "2010-03-27 14:00", - } - { - "Magadan", - "2010-03-27 14:00", - "9999-12-31 23:59", } } "Asia:Karachi"{ @@ -3740,11 +3738,6 @@ metaZones:table(nofallback){ { "Samara", "1991-10-20 00:00", - "2010-03-27 22:00", - } - { - "Moscow", - "2010-03-27 22:00", "9999-12-31 23:59", } } diff --git a/icuSources/data/misc/windowsZones.txt b/icuSources/data/misc/windowsZones.txt index 4a9b9f21..8706eac8 100644 --- a/icuSources/data/misc/windowsZones.txt +++ b/icuSources/data/misc/windowsZones.txt @@ -1,6 +1,6 @@ // *************************************************************************** // * -// * Copyright (C) 2014 International Business Machines +// * Copyright (C) 2015 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: org.unicode.cldr.icu.NewLdml2IcuConverter // * Source File: /windowsZones.xml @@ -145,6 +145,7 @@ windowsZones:table(nofallback){ AU{"Antarctica/Macquarie"} FM{"Pacific/Ponape Pacific/Kosrae"} NC{"Pacific/Noumea"} + PG{"Pacific/Bougainville"} SB{"Pacific/Guadalcanal"} VU{"Pacific/Efate"} ZZ{"Etc/GMT-11"} @@ -152,8 +153,8 @@ windowsZones:table(nofallback){ "Central Standard Time (Mexico)"{ 001{"America/Mexico_City"} MX{ - "America/Mexico_City America/Bahia_Banderas America/Cancun America/Me" - "rida America/Monterrey" + "America/Mexico_City America/Bahia_Banderas America/Merida America/Mo" + "nterrey" } } "Central Standard Time"{ @@ -467,6 +468,7 @@ windowsZones:table(nofallback){ EC{"America/Guayaquil"} JM{"America/Jamaica"} KY{"America/Cayman"} + MX{"America/Cancun"} PA{"America/Panama"} PE{"America/Lima"} ZZ{"Etc/GMT+5"} @@ -686,7 +688,7 @@ windowsZones:table(nofallback){ FM{"Pacific/Truk"} GU{"Pacific/Guam"} MP{"Pacific/Saipan"} - PG{"Pacific/Port_Moresby Pacific/Bougainville"} + PG{"Pacific/Port_Moresby"} ZZ{"Etc/GMT-10"} } "Yakutsk Standard Time"{ diff --git a/icuSources/data/misc/zoneinfo64.txt b/icuSources/data/misc/zoneinfo64.txt index e619ccba..c131c738 100644 --- a/icuSources/data/misc/zoneinfo64.txt +++ b/icuSources/data/misc/zoneinfo64.txt @@ -1,11 +1,11 @@ //--------------------------------------------------------- -// Copyright (C) 2003-2014, International Business Machines +// Copyright (C) 2003-2015, International Business Machines // Corporation and others. All Rights Reserved. //--------------------------------------------------------- // Build tool: tz2icu -// Build date: Tue Nov 11 12:33:07 2014 +// Build date: Tue Feb 3 16:54:37 2015 // tz database: ftp://ftp.iana.org/tz/ -// tz version: 2014j +// tz version: 2015a // ICU version: 55.0.1 //--------------------------------------------------------- // >> !!! >> THIS IS A MACHINE-GENERATED FILE << !!! << @@ -13,7 +13,7 @@ //--------------------------------------------------------- zoneinfo64:table(nofallback) { - TZVersion { "2014j" } + TZVersion { "2015a" } Zones:array { /* ACT */ :int { 347 } //Z#0 /* AET */ :int { 359 } //Z#1 @@ -374,12 +374,9 @@ zoneinfo64:table(nofallback) { finalYear:int { 2039 } } //Z#92 /* America/Cancun */ :table { - trans:intvector { -1514743200, 377935200, 828860400, 846396000, 860310000, 877845600, 891759600, 902037600, 909298800, 923212800, 941353200, 954662400, 972802800, 989136000, 1001833200, 1018166400, 1035702000 } + trans:intvector { -1514743200, 377935200, 828860400, 846396000, 860310000, 877845600, 891759600, 902037600, 909298800, 923212800, 941353200, 954662400, 972802800, 989136000, 1001833200, 1018166400, 1035702000, 1049616000, 1067151600, 1081065600, 1099206000, 1112515200, 1130655600, 1143964800, 1162105200, 1175414400, 1193554800, 1207468800, 1225004400, 1238918400, 1256454000, 1270368000, 1288508400, 1301817600, 1319958000, 1333267200, 1351407600, 1365321600, 1382857200, 1396771200, 1414306800, 1422777600 } typeOffsets:intvector { -20824, 0, -21600, 0, -21600, 3600, -18000, 0, -18000, 3600 } - typeMap:bin { "0103040304030402010201020102010201" } - finalRule { "Mexico" } - finalRaw:int { -21600 } - finalYear:int { 2003 } + typeMap:bin { "010304030403040201020102010201020102010201020102010201020102010201020102010201020103" } } //Z#93 /* America/Caracas */ :table { transPre32:intvector { -1, 1770461760 } @@ -1039,12 +1036,9 @@ zoneinfo64:table(nofallback) { typeMap:bin { "010201020102010201020102010201020102010201020102010201020103" } } //Z#197 /* America/Santiago */ :table { - trans:intvector { -1893439034, -1688410800, -1619983034, -1593806400, -1335986234, -1317585600, -1304362800, -1286049600, -1272826800, -1254513600, -1241290800, -1222977600, -1209754800, -1191355200, -1178132400, -870552000, -865278000, -736376400, -713646000, -36619200, -23922000, -3355200, 7527600, 24465600, 37767600, 55915200, 69217200, 87969600, 100666800, 118209600, 132116400, 150868800, 163566000, 182318400, 195620400, 213768000, 227070000, 245217600, 258519600, 277272000, 289969200, 308721600, 321418800, 340171200, 353473200, 371620800, 384922800, 403070400, 416372400, 434520000, 447822000, 466574400, 479271600, 498024000, 510721200, 529473600, 545194800, 560923200, 574225200, 591768000, 605674800, 624427200, 637729200, 653457600, 668574000, 687326400, 700628400, 718776000, 732078000, 750225600, 763527600, 781675200, 794977200, 813729600, 826426800, 845179200, 859690800, 876628800, 889930800, 906868800, 923194800, 939528000, 952830000, 971582400, 984279600, 1003032000, 1015729200, 1034481600, 1047178800, 1065931200, 1079233200, 1097380800, 1110682800, 1128830400, 1142132400, 1160884800, 1173582000, 1192334400, 1206846000, 1223784000, 1237086000, 1255233600, 1270350000, 1286683200, 1304823600, 1313899200, 1335668400, 1346558400 } - typeOffsets:intvector { -16966, 0, -18000, 0, -18000, 3600, -14400, 0, -14400, 3600 } - typeMap:bin { "010003000201020102010201020102010201030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304" } - finalRule { "Chile" } - finalRaw:int { -14400 } - finalYear:int { 2013 } + trans:intvector { -1893439034, -1688410800, -1619983034, -1593806400, -1335986234, -1317585600, -1304362800, -1286049600, -1272826800, -1254513600, -1241290800, -1222977600, -1209754800, -1191355200, -1178132400, -870552000, -865278000, -736376400, -713646000, -36619200, -23922000, -3355200, 7527600, 24465600, 37767600, 55915200, 69217200, 87969600, 100666800, 118209600, 132116400, 150868800, 163566000, 182318400, 195620400, 213768000, 227070000, 245217600, 258519600, 277272000, 289969200, 308721600, 321418800, 340171200, 353473200, 371620800, 384922800, 403070400, 416372400, 434520000, 447822000, 466574400, 479271600, 498024000, 510721200, 529473600, 545194800, 560923200, 574225200, 591768000, 605674800, 624427200, 637729200, 653457600, 668574000, 687326400, 700628400, 718776000, 732078000, 750225600, 763527600, 781675200, 794977200, 813729600, 826426800, 845179200, 859690800, 876628800, 889930800, 906868800, 923194800, 939528000, 952830000, 971582400, 984279600, 1003032000, 1015729200, 1034481600, 1047178800, 1065931200, 1079233200, 1097380800, 1110682800, 1128830400, 1142132400, 1160884800, 1173582000, 1192334400, 1206846000, 1223784000, 1237086000, 1255233600, 1270350000, 1286683200, 1304823600, 1313899200, 1335668400, 1346558400, 1367118000, 1378612800, 1398567600, 1410062400, 1430017200 } + typeOffsets:intvector { -16966, 0, -18000, 0, -18000, 3600, -14400, 0, -14400, 3600, -10800, 0 } + typeMap:bin { "0100030002010201020102010201020102010304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030405" } links:intvector { 198, 385 } } //Z#198 /* America/Santo_Domingo */ :table { @@ -1218,12 +1212,9 @@ zoneinfo64:table(nofallback) { } //Z#227 /* Antarctica/McMurdo */ :int { 540 } //Z#228 /* Antarctica/Palmer */ :table { - trans:intvector { -157766400, -152658000, -132955200, -121122000, -101419200, -86821200, -71092800, -54766800, -39038400, -23317200, -7588800, 128142000, 136605600, 389070000, 403070400, 416372400, 434520000, 447822000, 466574400, 479271600, 498024000, 510721200, 529473600, 545194800, 560923200, 574225200, 591768000, 605674800, 624427200, 637729200, 653457600, 668574000, 687326400, 700628400, 718776000, 732078000, 750225600, 763527600, 781675200, 794977200, 813729600, 826426800, 845179200, 859690800, 876628800, 889930800, 906868800, 923194800, 939528000, 952830000, 971582400, 984279600, 1003032000, 1015729200, 1034481600, 1047178800, 1065931200, 1079233200, 1097380800, 1110682800, 1128830400, 1142132400, 1160884800, 1173582000, 1192334400, 1206846000, 1223784000, 1237086000, 1255233600, 1270350000, 1286683200, 1304823600, 1313899200, 1335668400, 1346558400 } + trans:intvector { -157766400, -152658000, -132955200, -121122000, -101419200, -86821200, -71092800, -54766800, -39038400, -23317200, -7588800, 128142000, 136605600, 389070000, 403070400, 416372400, 434520000, 447822000, 466574400, 479271600, 498024000, 510721200, 529473600, 545194800, 560923200, 574225200, 591768000, 605674800, 624427200, 637729200, 653457600, 668574000, 687326400, 700628400, 718776000, 732078000, 750225600, 763527600, 781675200, 794977200, 813729600, 826426800, 845179200, 859690800, 876628800, 889930800, 906868800, 923194800, 939528000, 952830000, 971582400, 984279600, 1003032000, 1015729200, 1034481600, 1047178800, 1065931200, 1079233200, 1097380800, 1110682800, 1128830400, 1142132400, 1160884800, 1173582000, 1192334400, 1206846000, 1223784000, 1237086000, 1255233600, 1270350000, 1286683200, 1304823600, 1313899200, 1335668400, 1346558400, 1367118000, 1378612800, 1398567600, 1410062400, 1430017200 } typeOffsets:intvector { 0, 0, -14400, 0, -14400, 3600, -10800, 0, -10800, 3600 } - typeMap:bin { "020102010201020102010304030102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102" } - finalRule { "ChileAQ" } - finalRaw:int { -14400 } - finalYear:int { 2013 } + typeMap:bin { "0201020102010201020103040301020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010203" } } //Z#229 /* Antarctica/Rothera */ :table { trans:intvector { 218246400 } @@ -1250,11 +1241,7 @@ zoneinfo64:table(nofallback) { typeMap:bin { "01" } } //Z#234 /* Arctic/Longyearbyen */ :int { 464 } //Z#235 - /* Asia/Aden */ :table { - trans:intvector { -631162794 } - typeOffsets:intvector { 10794, 0, 10800, 0 } - typeMap:bin { "01" } - } //Z#236 + /* Asia/Aden */ :int { 303 } //Z#236 /* Asia/Almaty */ :table { trans:intvector { -1441170468, -1247547600, 354909600, 370717200, 386445600, 402253200, 417981600, 433789200, 449604000, 465336000, 481060800, 496785600, 512510400, 528235200, 543960000, 559684800, 575409600, 591134400, 606859200, 622584000, 638308800, 654638400, 701802000, 717523200, 733262400, 748987200, 764712000, 780436800, 796161600, 811886400, 828216000, 846360000, 859665600, 877809600, 891115200, 909259200, 922564800, 941313600, 954014400, 972763200, 985464000, 1004212800, 1017518400, 1035662400, 1048968000, 1067112000, 1080417600, 1099166400 } typeOffsets:intvector { 18468, 0, 18000, 0, 21600, 0, 21600, 3600 } @@ -1296,11 +1283,7 @@ zoneinfo64:table(nofallback) { typeOffsets:intvector { 10660, 0, 10656, 0, 10800, 0, 10800, 3600 } typeMap:bin { "010203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302" } } //Z#244 - /* Asia/Bahrain */ :table { - trans:intvector { -1577935340, 76190400 } - typeOffsets:intvector { 12140, 0, 10800, 0, 14400, 0 } - typeMap:bin { "0201" } - } //Z#245 + /* Asia/Bahrain */ :int { 300 } //Z#245 /* Asia/Baku */ :table { trans:intvector { -1441163964, -405140400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591141600, 606866400, 622591200, 638316000, 654645600, 670370400, 686098800, 701812800, 717534000, 828234000, 846378000, 859680000, 877824000 } typeOffsets:intvector { 11964, 0, 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 } @@ -1378,6 +1361,7 @@ zoneinfo64:table(nofallback) { trans:intvector { -1577936472 } typeOffsets:intvector { 13272, 0, 14400, 0 } typeMap:bin { "01" } + links:intvector { 261, 291 } } //Z#261 /* Asia/Dushanbe */ :table { trans:intvector { -1441168512, -1247547600, 354909600, 370717200, 386445600, 402253200, 417981600, 433789200, 449604000, 465336000, 481060800, 496785600, 512510400, 528235200, 543960000, 559684800, 575409600, 591134400, 606859200, 622584000, 638308800, 654638400, 670363200, 684363600 } @@ -1499,11 +1483,7 @@ zoneinfo64:table(nofallback) { typeOffsets:intvector { 26480, 0, 27000, 0, 28800, 0, 28800, 1200, 32400, 0 } typeMap:bin { "010203020302030203020302030203020402" } } //Z#284 - /* Asia/Kuwait */ :table { - trans:intvector { -631163516 } - typeOffsets:intvector { 11516, 0, 10800, 0 } - typeMap:bin { "01" } - } //Z#285 + /* Asia/Kuwait */ :int { 303 } //Z#285 /* Asia/Macao */ :int { 287 } //Z#286 /* Asia/Macau */ :table { trans:intvector { -1830411260, -277360200, -257405400, -245910600, -225955800, -214473600, -194506200, -182406600, -163056600, -150969600, -131619600, -117088200, -101367000, -85638600, -69312600, -53584200, -37863000, -22134600, -6413400, 9315000, 25036200, 40764600, 56485800, 72201600, 87922800, 103651200, 119977200, 135705600, 151439400, 167167800, 182889000, 198617400, 214338600, 230067000, 245788200, 261504000, 277225200, 292953600, 309279600, 325008000, 340729200 } @@ -1528,11 +1508,7 @@ zoneinfo64:table(nofallback) { typeOffsets:intvector { -57360, 0, 28800, 0, 28800, 3600, 29040, 0, 32400, 0 } typeMap:bin { "03010201040102010201" } } //Z#290 - /* Asia/Muscat */ :table { - trans:intvector { -1577937264 } - typeOffsets:intvector { 14064, 0, 14400, 0 } - typeMap:bin { "01" } - } //Z#291 + /* Asia/Muscat */ :int { 261 } //Z#291 /* Asia/Nicosia */ :table { trans:intvector { -1518920008, 166572000, 182293200, 200959200, 213829200, 228866400, 243982800, 260316000, 276123600, 291765600, 307486800, 323820000, 338936400, 354664800, 370386000, 386114400, 401835600, 417564000, 433285200, 449013600, 465339600, 481068000, 496789200, 512517600, 528238800, 543967200, 559688400, 575416800, 591138000, 606866400, 622587600, 638316000, 654642000, 670370400, 686091600, 701820000, 717541200, 733269600, 748990800, 764719200, 780440400, 796168800, 811890000, 828223200, 843944400, 859672800, 875394000, 891122400, 909277200, 922582800, 941331600 } typeOffsets:intvector { 8008, 0, 7200, 0, 7200, 3600 } @@ -1577,6 +1553,7 @@ zoneinfo64:table(nofallback) { trans:intvector { -1577935568, 76190400 } typeOffsets:intvector { 12368, 0, 10800, 0, 14400, 0 } typeMap:bin { "0201" } + links:intvector { 245, 300 } } //Z#300 /* Asia/Qyzylorda */ :table { trans:intvector { -1441167712, -1247544000, 354913200, 370720800, 386445600, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622587600, 638312400, 654642000, 695768400, 701802000, 717523200, 733262400, 748987200, 764712000, 780436800, 796161600, 811886400, 828216000, 846360000, 859665600, 877809600, 891115200, 909259200, 922564800, 941313600, 954014400, 972763200, 985464000, 1004212800, 1017518400, 1035662400, 1048968000, 1067112000, 1080417600, 1099166400 } @@ -1592,6 +1569,7 @@ zoneinfo64:table(nofallback) { trans:intvector { -719636812 } typeOffsets:intvector { 11212, 0, 10800, 0 } typeMap:bin { "01" } + links:intvector { 236, 285, 303 } } //Z#303 /* Asia/Saigon */ :int { 266 } //Z#304 /* Asia/Sakhalin */ :table { @@ -1757,10 +1735,9 @@ zoneinfo64:table(nofallback) { finalYear:int { 1997 } } //Z#336 /* Atlantic/Reykjavik */ :table { - transPre32:intvector { -1, 97919740 } - trans:intvector { -1956609132, -1668211200, -1647212400, -1636675200, -1613430000, -968025600, -949615200, -942008400, -920239200, -909957600, -888789600, -877903200, -857944800, -846453600, -826495200, -815004000, -795045600, -783554400, -762991200, -752104800, -731541600, -717631200, -700092000, -686181600, -668642400, -654732000, -636588000, -623282400, -605743200, -591832800, -573688800, -559778400, -542239200, -528328800, -510789600, -496879200, -479340000, -465429600, -447890400, -433980000, -415836000, -401925600, -384386400, -370476000, -352936800, -339026400, -321487200, -307576800, -290037600, -276127200, -258588000, -244677600, -226533600, -212623200, -195084000, -181173600, -163634400, -149724000, -132184800, -118274400, -100735200, -86824800, -68680800, -54770400 } - typeOffsets:intvector { -5244, 0, -5268, 0, -3600, 0, -3600, 3600, 0, 0 } - typeMap:bin { "0102030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030204" } + trans:intvector { -1956609120, -1668211200, -1647212400, -1636675200, -1613430000, -1605139200, -1581894000, -1539561600, -1531350000, -968025600, -952293600, -942008400, -920239200, -909957600, -888789600, -877903200, -857944800, -846453600, -826495200, -815004000, -795045600, -783554400, -762991200, -752104800, -731541600, -717631200, -700092000, -686181600, -668642400, -654732000, -636588000, -623282400, -605743200, -591832800, -573688800, -559778400, -542239200, -528328800, -510789600, -496879200, -479340000, -465429600, -447890400, -433980000, -415836000, -401925600, -384386400, -370476000, -352936800, -339026400, -321487200, -307576800, -290037600, -276127200, -258588000, -244677600, -226533600, -212623200, -195084000, -181173600, -163634400, -149724000, -132184800, -118274400, -100735200, -86824800, -68680800, -54770400 } + typeOffsets:intvector { -5280, 0, -3600, 0, -3600, 3600, 0, 0 } + typeMap:bin { "0102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020103" } links:intvector { 337, 502 } } //Z#337 /* Atlantic/South_Georgia */ :table { @@ -2575,12 +2552,9 @@ zoneinfo64:table(nofallback) { } //Z#543 /* Pacific/Easter */ :table { transPre32:intvector { -1, 1770471960 } - trans:intvector { -1178124152, -870552000, -865278000, -736376400, -36619200, -23922000, -3355200, 7527600, 24465600, 37767600, 55915200, 69217200, 87969600, 100666800, 118209600, 132116400, 150868800, 163566000, 182318400, 195620400, 213768000, 227070000, 245217600, 258519600, 277272000, 289969200, 308721600, 321418800, 340171200, 353473200, 371620800, 384922800, 403070400, 416372400, 434520000, 447822000, 466574400, 479271600, 498024000, 510721200, 529473600, 545194800, 560923200, 574225200, 591768000, 605674800, 624427200, 637729200, 653457600, 668574000, 687326400, 700628400, 718776000, 732078000, 750225600, 763527600, 781675200, 794977200, 813729600, 826426800, 845179200, 859690800, 876628800, 889930800, 906868800, 923194800, 939528000, 952830000, 971582400, 984279600, 1003032000, 1015729200, 1034481600, 1047178800, 1065931200, 1079233200, 1097380800, 1110682800, 1128830400, 1142132400, 1160884800, 1173582000, 1192334400, 1206846000, 1223784000, 1237086000, 1255233600, 1270350000, 1286683200, 1304823600, 1313899200, 1335668400, 1346558400 } - typeOffsets:intvector { -26264, 0, -26248, 0, -25200, 0, -25200, 3600, -21600, 0, -21600, 3600 } - typeMap:bin { "01030203020302030203020302030203020302030203020302030203020302030405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405" } - finalRule { "Chile" } - finalRaw:int { -21600 } - finalYear:int { 2013 } + trans:intvector { -1178124152, -870552000, -865278000, -736376400, -36619200, -23922000, -3355200, 7527600, 24465600, 37767600, 55915200, 69217200, 87969600, 100666800, 118209600, 132116400, 150868800, 163566000, 182318400, 195620400, 213768000, 227070000, 245217600, 258519600, 277272000, 289969200, 308721600, 321418800, 340171200, 353473200, 371620800, 384836400, 384922800, 403070400, 416372400, 434520000, 447822000, 466574400, 479271600, 498024000, 510721200, 529473600, 545194800, 560923200, 574225200, 591768000, 605674800, 624427200, 637729200, 653457600, 668574000, 687326400, 700628400, 718776000, 732078000, 750225600, 763527600, 781675200, 794977200, 813729600, 826426800, 845179200, 859690800, 876628800, 889930800, 906868800, 923194800, 939528000, 952830000, 971582400, 984279600, 1003032000, 1015729200, 1034481600, 1047178800, 1065931200, 1079233200, 1097380800, 1110682800, 1128830400, 1142132400, 1160884800, 1173582000, 1192334400, 1206846000, 1223784000, 1237086000, 1255233600, 1270350000, 1286683200, 1304823600, 1313899200, 1335668400, 1346558400, 1367118000, 1378612800, 1398567600, 1410062400, 1430017200 } + typeOffsets:intvector { -26264, 0, -26248, 0, -25200, 0, -25200, 3600, -21600, 0, -21600, 3600, -18000, 0 } + typeMap:bin { "01030203020302030203020302030203020302030203020302030203020302030504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040506" } links:intvector { 386, 544 } } //Z#544 /* Pacific/Efate */ :table { @@ -3092,81 +3066,75 @@ zoneinfo64:table(nofallback) { Chatham:intvector { 8, -30, -1, 9900, 1, 3, 1, -1, 9900, 1, 3600 } //_#8 - Chile:intvector { - 8, 2, -1, 14400, 2, 3, 23, -1, 10800, 2, 3600 - } //_#9 - ChileAQ:intvector { - 8, 2, -1, 14400, 2, 3, 23, -1, 10800, 2, 3600 - } //_#10 Cuba:intvector { 2, 8, -1, 0, 1, 10, 1, -1, 0, 1, 3600 - } //_#11 + } //_#9 EU:intvector { 2, -31, -1, 3600, 2, 9, -31, -1, 3600, 2, 3600 - } //_#12 + } //_#10 EUAsia:intvector { 2, -31, -1, 3600, 2, 9, -31, -1, 3600, 2, 3600 - } //_#13 + } //_#11 Egypt:intvector { 3, -30, -6, 0, 1, 8, -30, -5, 86400, 0, 3600 - } //_#14 + } //_#12 Fiji:intvector { 10, 1, -1, 7200, 0, 0, 18, -1, 10800, 0, 3600 - } //_#15 + } //_#13 Haiti:intvector { 2, 8, -1, 7200, 0, 10, 1, -1, 7200, 0, 3600 - } //_#16 + } //_#14 Jordan:intvector { 2, -31, -5, 86400, 0, 9, -31, -6, 0, 1, 3600 - } //_#17 + } //_#15 LH:intvector { 9, 1, -1, 7200, 0, 3, 1, -1, 7200, 0, 1800 - } //_#18 + } //_#16 Lebanon:intvector { 2, -31, -1, 0, 0, 9, -31, -1, 0, 0, 3600 - } //_#19 + } //_#17 Mexico:intvector { 3, 1, -1, 7200, 0, 9, -31, -1, 7200, 0, 3600 - } //_#20 + } //_#18 Morocco:intvector { 2, -31, -1, 7200, 0, 9, -31, -1, 10800, 0, 3600 - } //_#21 + } //_#19 NZ:intvector { 8, -30, -1, 7200, 1, 3, 1, -1, 7200, 1, 3600 - } //_#22 + } //_#20 Namibia:intvector { 8, 1, -1, 7200, 0, 3, 1, -1, 7200, 0, 3600 - } //_#23 + } //_#21 Palestine:intvector { 2, -31, -5, 86400, 0, 8, 21, -6, 0, 0, 3600 - } //_#24 + } //_#22 Para:intvector { 9, 1, -1, 0, 0, 2, 22, -1, 0, 0, 3600 - } //_#25 + } //_#23 Syria:intvector { 2, -31, -6, 0, 0, 9, -31, -6, 0, 0, 3600 - } //_#26 + } //_#24 SystemV:intvector { 3, -30, -1, 7200, 0, 9, -31, -1, 7200, 0, 3600 - } //_#27 + } //_#25 Thule:intvector { 2, 8, -1, 7200, 0, 10, 1, -1, 7200, 0, 3600 - } //_#28 + } //_#26 Troll:intvector { 2, -31, -1, 3600, 2, 9, -31, -1, 3600, 2, 7200 - } //_#29 + } //_#27 US:intvector { 2, 8, -1, 7200, 0, 10, 1, -1, 7200, 0, 3600 - } //_#30 + } //_#28 Uruguay:intvector { 9, 1, -1, 7200, 0, 2, 8, -1, 7200, 0, 3600 - } //_#31 + } //_#29 WS:intvector { 8, -30, -1, 10800, 0, 3, 1, -1, 14400, 0, 3600 - } //_#32 + } //_#30 Zion:intvector { 2, 23, -6, 7200, 0, 9, -31, -1, 7200, 0, 3600 - } //_#33 + } //_#31 } Regions:array { "AU", //Z#0 ACT diff --git a/icuSources/data/unidata/ApplePUApatch.txt b/icuSources/data/unidata/ApplePUApatch.txt index 473b1555..0b8b7652 100644 --- a/icuSources/data/unidata/ApplePUApatch.txt +++ b/icuSources/data/unidata/ApplePUApatch.txt @@ -1,5 +1,5 @@ ---- base_unidata/DerivedCoreProperties.txt 2014-03-09 16:20:00.000000000 -0700 -+++ DerivedCoreProperties.txt 2014-03-10 06:35:56.000000000 -0700 +--- base_unidata/DerivedCoreProperties.txt 2014-03-16 23:30:07.000000000 -0700 ++++ DerivedCoreProperties.txt 2014-10-31 21:56:40.000000000 -0700 @@ -162,6 +162,9 @@ 29FE..2AFF ; Math 2B30..2B44 ; Math @@ -90,6 +90,15 @@ F900..FA6D ; Grapheme_Base FA70..FAD9 ; Grapheme_Base FB00..FB06 ; Grapheme_Base +@@ -9979,7 +9998,7 @@ + 1F3A0..1F3C4 ; Grapheme_Base + 1F3C6..1F3CA ; Grapheme_Base + 1F3E0..1F3F0 ; Grapheme_Base +-1F400..1F43E ; Grapheme_Base ++1F3FB..1F43E ; Grapheme_Base + 1F440 ; Grapheme_Base + 1F442..1F4F7 ; Grapheme_Base + 1F4F9..1F4FC ; Grapheme_Base @@ -9995,7 +10014,7 @@ 2B740..2B81D ; Grapheme_Base 2F800..2FA1D ; Grapheme_Base @@ -99,8 +108,8 @@ # ================================================ ---- base_unidata/ppucd.txt 2014-03-09 16:20:00.000000000 -0700 -+++ ppucd.txt 2014-03-10 06:34:27.000000000 -0700 +--- base_unidata/ppucd.txt 2014-03-16 23:30:07.000000000 -0700 ++++ ppucd.txt 2014-10-31 22:12:22.000000000 -0700 @@ -17833,8 +17833,47 @@ block;DC00..DFFF;age=2.0;blk=Low_Surrogates;gc=Cs;GCB=CN;lb=SG # DC00..DFFF Low Surrogates @@ -151,8 +160,23 @@ block;F900..FAFF;age=1.1;Alpha;blk=CJK_Compat_Ideographs;Comp_Ex;CWKCF;dt=Can;ea=W;gc=Lo;Gr_Base;IDC;Ideo;IDS;lb=ID;NFC_QC=N;NFD_QC=N;NFKC_QC=N;NFKD_QC=N;SB=LE;sc=Hani;XIDC;XIDS # F900..FAFF CJK Compatibility Ideographs ---- base_unidata/UnicodeData.txt 2014-03-09 16:20:00.000000000 -0700 -+++ UnicodeData.txt 2014-03-09 16:20:01.000000000 -0700 +@@ -27053,7 +27092,13 @@ + cp;1F3EE;na=IZAKAYA LANTERN + cp;1F3EF;na=JAPANESE CASTLE + cp;1F3F0;na=EUROPEAN CASTLE +-cp;1F3F1..1F3FF;age=NA;bc=L;gc=Cn;-Gr_Base;lb=XX;sc=Zzzz ++cp;1F3F1..1F3FA;age=NA;bc=L;gc=Cn;-Gr_Base;lb=XX;sc=Zzzz ++# Early add of emoji modifiers for Fizpatrick types, slated for Unicode 8.0 ++cp;1F3FB;age=8.0;gc=Sk;na=EMOJI MODIFIER FITZPATRICK TYPE-1-2 ++cp;1F3FC;age=8.0;gc=Sk;na=EMOJI MODIFIER FITZPATRICK TYPE-3 ++cp;1F3FD;age=8.0;gc=Sk;na=EMOJI MODIFIER FITZPATRICK TYPE-4 ++cp;1F3FE;age=8.0;gc=Sk;na=EMOJI MODIFIER FITZPATRICK TYPE-5 ++cp;1F3FF;age=8.0;gc=Sk;na=EMOJI MODIFIER FITZPATRICK TYPE-6 + # Animal symbols + cp;1F400;na=RAT + cp;1F401;na=MOUSE +--- base_unidata/UnicodeData.txt 2014-03-16 23:30:07.000000000 -0700 ++++ UnicodeData.txt 2014-10-31 21:51:42.000000000 -0700 @@ -14443,7 +14443,65 @@ DC00;;Cs;0;L;;;;;N;;;;; DFFF;;Cs;0;L;;;;;N;;;;; @@ -220,8 +244,20 @@ F900;CJK COMPATIBILITY IDEOGRAPH-F900;Lo;0;L;8C48;;;;N;;;;; F901;CJK COMPATIBILITY IDEOGRAPH-F901;Lo;0;L;66F4;;;;N;;;;; F902;CJK COMPATIBILITY IDEOGRAPH-F902;Lo;0;L;8ECA;;;;N;;;;; ---- norm2/base_norm2/nfc.txt 2014-03-08 23:07:17.000000000 -0800 -+++ norm2/nfc.txt 2014-03-09 16:14:50.000000000 -0700 +@@ -22937,6 +22995,11 @@ + 1F3EE;IZAKAYA LANTERN;So;0;ON;;;;;N;;;;; + 1F3EF;JAPANESE CASTLE;So;0;ON;;;;;N;;;;; + 1F3F0;EUROPEAN CASTLE;So;0;ON;;;;;N;;;;; ++1F3FB;EMOJI MODIFIER FITZPATRICK TYPE-1-2;Sk;0;ON;;;;;N;;;;; ++1F3FC;EMOJI MODIFIER FITZPATRICK TYPE-3;Sk;0;ON;;;;;N;;;;; ++1F3FD;EMOJI MODIFIER FITZPATRICK TYPE-4;Sk;0;ON;;;;;N;;;;; ++1F3FE;EMOJI MODIFIER FITZPATRICK TYPE-5;Sk;0;ON;;;;;N;;;;; ++1F3FF;EMOJI MODIFIER FITZPATRICK TYPE-6;Sk;0;ON;;;;;N;;;;; + 1F400;RAT;So;0;ON;;;;;N;;;;; + 1F401;MOUSE;So;0;ON;;;;;N;;;;; + 1F402;OX;So;0;ON;;;;;N;;;;; +--- norm2/base_norm2/nfc.txt 2014-03-16 23:30:07.000000000 -0700 ++++ norm2/nfc.txt 2014-03-16 23:30:07.000000000 -0700 @@ -272,6 +272,8 @@ AAC1:230 AAF6:9 diff --git a/icuSources/data/unidata/DerivedCoreProperties.txt b/icuSources/data/unidata/DerivedCoreProperties.txt index 35ec6a10..9465d4cb 100644 --- a/icuSources/data/unidata/DerivedCoreProperties.txt +++ b/icuSources/data/unidata/DerivedCoreProperties.txt @@ -9998,7 +9998,7 @@ FFFC..FFFD ; Grapheme_Base 1F3A0..1F3C4 ; Grapheme_Base 1F3C6..1F3CA ; Grapheme_Base 1F3E0..1F3F0 ; Grapheme_Base -1F400..1F43E ; Grapheme_Base +1F3FB..1F43E ; Grapheme_Base 1F440 ; Grapheme_Base 1F442..1F4F7 ; Grapheme_Base 1F4F9..1F4FC ; Grapheme_Base diff --git a/icuSources/data/unidata/UnicodeData.txt b/icuSources/data/unidata/UnicodeData.txt index 5bdbce52..6d199f5b 100644 --- a/icuSources/data/unidata/UnicodeData.txt +++ b/icuSources/data/unidata/UnicodeData.txt @@ -22995,6 +22995,11 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1F3EE;IZAKAYA LANTERN;So;0;ON;;;;;N;;;;; 1F3EF;JAPANESE CASTLE;So;0;ON;;;;;N;;;;; 1F3F0;EUROPEAN CASTLE;So;0;ON;;;;;N;;;;; +1F3FB;EMOJI MODIFIER FITZPATRICK TYPE-1-2;Sk;0;ON;;;;;N;;;;; +1F3FC;EMOJI MODIFIER FITZPATRICK TYPE-3;Sk;0;ON;;;;;N;;;;; +1F3FD;EMOJI MODIFIER FITZPATRICK TYPE-4;Sk;0;ON;;;;;N;;;;; +1F3FE;EMOJI MODIFIER FITZPATRICK TYPE-5;Sk;0;ON;;;;;N;;;;; +1F3FF;EMOJI MODIFIER FITZPATRICK TYPE-6;Sk;0;ON;;;;;N;;;;; 1F400;RAT;So;0;ON;;;;;N;;;;; 1F401;MOUSE;So;0;ON;;;;;N;;;;; 1F402;OX;So;0;ON;;;;;N;;;;; diff --git a/icuSources/data/unidata/ppucd.txt b/icuSources/data/unidata/ppucd.txt index 21e00cf6..a8713d14 100644 --- a/icuSources/data/unidata/ppucd.txt +++ b/icuSources/data/unidata/ppucd.txt @@ -27092,7 +27092,13 @@ cp;1F3ED;na=FACTORY cp;1F3EE;na=IZAKAYA LANTERN cp;1F3EF;na=JAPANESE CASTLE cp;1F3F0;na=EUROPEAN CASTLE -cp;1F3F1..1F3FF;age=NA;bc=L;gc=Cn;-Gr_Base;lb=XX;sc=Zzzz +cp;1F3F1..1F3FA;age=NA;bc=L;gc=Cn;-Gr_Base;lb=XX;sc=Zzzz +# Early add of emoji modifiers for Fizpatrick types, slated for Unicode 8.0 +cp;1F3FB;age=8.0;gc=Sk;na=EMOJI MODIFIER FITZPATRICK TYPE-1-2 +cp;1F3FC;age=8.0;gc=Sk;na=EMOJI MODIFIER FITZPATRICK TYPE-3 +cp;1F3FD;age=8.0;gc=Sk;na=EMOJI MODIFIER FITZPATRICK TYPE-4 +cp;1F3FE;age=8.0;gc=Sk;na=EMOJI MODIFIER FITZPATRICK TYPE-5 +cp;1F3FF;age=8.0;gc=Sk;na=EMOJI MODIFIER FITZPATRICK TYPE-6 # Animal symbols cp;1F400;na=RAT cp;1F401;na=MOUSE diff --git a/icuSources/i18n/decimfmt.cpp b/icuSources/i18n/decimfmt.cpp index e9280bc6..207abaf7 100644 --- a/icuSources/i18n/decimfmt.cpp +++ b/icuSources/i18n/decimfmt.cpp @@ -4106,7 +4106,7 @@ void DecimalFormat::setExponentSignAlwaysShown(UBool expSignAlways) { int32_t DecimalFormat::getGroupingSize() const { - return fGroupingSize; + return isGroupingUsed() ? fGroupingSize : 0; } //------------------------------------------------------------------------------ diff --git a/icuSources/i18n/smpdtfmt.cpp b/icuSources/i18n/smpdtfmt.cpp index 9198b054..1e9d791b 100644 --- a/icuSources/i18n/smpdtfmt.cpp +++ b/icuSources/i18n/smpdtfmt.cpp @@ -2260,6 +2260,8 @@ int32_t SimpleDateFormat::matchQuarterString(const UnicodeString& text, } //---------------------------------------------------------------------- +#define IS_BIDI_MARK(c) (c==0x200E || c==0x200F || c==0x061C) + UBool SimpleDateFormat::matchLiterals(const UnicodeString &pattern, int32_t &patternOffset, const UnicodeString &text, @@ -2289,21 +2291,26 @@ UBool SimpleDateFormat::matchLiterals(const UnicodeString &pattern, } } - literal += ch; + if (!IS_BIDI_MARK(ch)) { + literal += ch; + } } - // at this point, literal contains the literal text + // at this point, literal contains the pattern literal text (without bidi marks) // and i is the index of the next non-literal pattern character. int32_t p; int32_t t = textOffset; if (whitespaceLenient) { - // trim leading, trailing whitespace from - // the literal text + // trim leading, trailing whitespace from the pattern literal literal.trim(); - // ignore any leading whitespace in the text - while (t < text.length() && u_isWhitespace(text.charAt(t))) { + // ignore any leading whitespace (or bidi marks) in the text + while (t < text.length()) { + UChar ch = text.charAt(t); + if (!u_isWhitespace(ch) && !IS_BIDI_MARK(ch)) { + break; + } t += 1; } } @@ -2311,18 +2318,26 @@ UBool SimpleDateFormat::matchLiterals(const UnicodeString &pattern, for (p = 0; p < literal.length() && t < text.length();) { UBool needWhitespace = FALSE; + // Skip any whitespace at current position in pattern, + // but remember whether we found whitespace in the pattern + // (we already deleted any bidi marks in the pattern). while (p < literal.length() && PatternProps::isWhiteSpace(literal.charAt(p))) { needWhitespace = TRUE; p += 1; } + // If the pattern has whitespace at this point, skip it in text as well + // (if the text does not have any, that may be an error for strict parsing) if (needWhitespace) { - int32_t tStart = t; + UBool whitespaceInText = FALSE; + // Skip any whitespace (or bidi marks) at current position in text, + // but remember whether we found whitespace in the text at this point. while (t < text.length()) { UChar tch = text.charAt(t); - - if (!u_isUWhiteSpace(tch) && !PatternProps::isWhiteSpace(tch)) { + if (u_isUWhiteSpace(tch) || PatternProps::isWhiteSpace(tch)) { + whitespaceInText = TRUE; + } else if (!IS_BIDI_MARK(tch)) { break; } @@ -2332,7 +2347,7 @@ UBool SimpleDateFormat::matchLiterals(const UnicodeString &pattern, // TODO: should we require internal spaces // in lenient mode? (There won't be any // leading or trailing spaces) - if (!whitespaceLenient && t == tStart) { + if (!whitespaceLenient && !whitespaceInText) { // didn't find matching whitespace: // an error in strict mode return FALSE; @@ -2343,6 +2358,11 @@ UBool SimpleDateFormat::matchLiterals(const UnicodeString &pattern, if (p >= literal.length()) { break; } + } else { + // Still need to skip any bidi marks in the text + while (t < text.length() && IS_BIDI_MARK(text.charAt(t))) { + ++t; + } } if (t >= text.length() || literal.charAt(p) != text.charAt(t)) { @@ -2387,7 +2407,7 @@ UBool SimpleDateFormat::matchLiterals(const UnicodeString &pattern, for (t = textOffset; t < text.length(); t += 1) { UChar ch = text.charAt(t); - if (ignorables == NULL || !ignorables->contains(ch)) { + if (!IS_BIDI_MARK(ch) && (ignorables == NULL || !ignorables->contains(ch))) { break; } } diff --git a/icuSources/test/cintltst/cloctst.c b/icuSources/test/cintltst/cloctst.c index feeaf766..a97f4ada 100644 --- a/icuSources/test/cintltst/cloctst.c +++ b/icuSources/test/cintltst/cloctst.c @@ -46,6 +46,8 @@ static void TestDisplayNameBrackets(void); static void TestUnicodeDefines(void); +static void TestGetAppleParent(void); + void PrintDataTable(); /*--------------------------------------------------- @@ -248,6 +250,7 @@ void addLocaleTest(TestNode** root) TESTCASE(TestUnicodeDefines); TESTCASE(TestEnglishExemplarCharacters); TESTCASE(TestDisplayNameBrackets); + TESTCASE(TestGetAppleParent); } @@ -5877,3 +5880,77 @@ static void TestUnicodeDefines(void) { TEST_UNICODE_DEFINE(ULOC_KEYWORD_ASSIGN, ULOC_KEYWORD_ASSIGN_UNICODE); TEST_UNICODE_DEFINE(ULOC_KEYWORD_ITEM_SEPARATOR, ULOC_KEYWORD_ITEM_SEPARATOR_UNICODE); } + +/* Apple-specific, test for Apple-specific function ualoc_getAppleParent */ +static const char* localesAndAppleParent[] = { + "en", "root", + "en-US", "en", + "en-CA", "en", + "en-001", "en", + "en_001", "en", + "en-GB", "en_001", + "en_GB", "en_001", + "en-IN", "en_GB", + "en-AU", "en_GB", + "es", "root", + "es-ES", "es", + "es-419", "es", + "es_419", "es", + "es-MX", "es_419", + "es-AR", "es_419", + "fr", "root", + "fr-CA", "fr", + "fr-CH", "fr", + "haw", "root", + "nl", "root", + "nl-BE", "nl", + "pt", "root", + "pt-BR", "pt", + "pt-PT", "pt", + "pt-MO", "pt_PT", + "sr", "root", + "sr-Cyrl", "sr", + "sr-Latn", "root", + "tlh", "root", + "zh_CN", "root", + "zh-CN", "root", + "zh", "zh_CN", + "zh-Hans", "zh", + "zh_TW", "root", + "zh-TW", "root", + "zh-Hant", "zh_TW", + "zh_Hant", "zh_TW", + "zh-Hant-HK", "zh_Hant", + "zh_Hant_HK", "zh_Hant", + "zh-Hant-MO", "zh_Hant_HK", + "zh-Hans-HK", "zh_Hans", + "root", "root", + "en-Latn", "en", + "en-Latn-US", "en_Latn", + "en_US_POSIX", "en_US", + "en_Latn_US_POSIX", "en_Latn_US", + "en-u-ca-hebrew", "root", + "en@calendar=hebrew", "root", + "en_@calendar=hebrew", "root", + "en-", "root", + "en_", "root", + "Default@2x", "root", + "default", "root", + NULL /* terminator */ +}; + +static void TestGetAppleParent() { + const char **localesPtr = localesAndAppleParent; + const char * locale; + while ((locale = *localesPtr++) != NULL) { + const char * expectParent = *localesPtr++; + UErrorCode status = U_ZERO_ERROR; + char getParent[ULOC_FULLNAME_CAPACITY]; + int32_t plen = ualoc_getAppleParent(locale, getParent, ULOC_FULLNAME_CAPACITY, &status); + if (U_FAILURE(status)) { + log_err("FAIL: ualoc_getAppleParent input \"%s\", status %s\n", locale, u_errorName(status)); + } else if (uprv_strcmp(expectParent, getParent) != 0) { + log_err("FAIL: ualoc_getAppleParent input \"%s\", expected parent \"%s\", got parent \"%s\"\n", locale, expectParent, getParent); + } + } +} diff --git a/icuSources/test/intltest/dcfmapts.cpp b/icuSources/test/intltest/dcfmapts.cpp index 850aa97d..5eea8833 100644 --- a/icuSources/test/intltest/dcfmapts.cpp +++ b/icuSources/test/intltest/dcfmapts.cpp @@ -103,6 +103,14 @@ void IntlTestDecimalFormatAPI::testAPI(/*char *par*/) return; } + // bug 10864 + status = U_ZERO_ERROR; + DecimalFormat noGrouping("###0.##", status); + if (noGrouping.getGroupingSize() != 0) { + errln("Grouping size should be 0 for no grouping."); + } + // end bug 10864 + status = U_ZERO_ERROR; const UnicodeString pattern("#,##0.# FF"); DecimalFormat pat(pattern, status); diff --git a/icuSources/test/intltest/measfmttest.cpp b/icuSources/test/intltest/measfmttest.cpp index afdb3e32..3665880b 100644 --- a/icuSources/test/intltest/measfmttest.cpp +++ b/icuSources/test/intltest/measfmttest.cpp @@ -375,10 +375,10 @@ void MeasureFormatTest::TestFormatPeriodEn() { ExpectedResult abbrevData[] = { {t_1m_59_9996s, LENGTHOF(t_1m_59_9996s), "1 min, 59.9996 secs"}, - {t_19m, LENGTHOF(t_19m), "19 mins"}, + {t_19m, LENGTHOF(t_19m), "19 min"}, {t_1h_23_5s, LENGTHOF(t_1h_23_5s), "1 hr, 23.5 secs"}, - {t_1h_23_5m, LENGTHOF(t_1h_23_5m), "1 hr, 23.5 mins"}, - {t_1h_0m_23s, LENGTHOF(t_1h_0m_23s), "1 hr, 0 mins, 23 secs"}, + {t_1h_23_5m, LENGTHOF(t_1h_23_5m), "1 hr, 23.5 min"}, + {t_1h_0m_23s, LENGTHOF(t_1h_0m_23s), "1 hr, 0 min, 23 secs"}, {t_2y_5M_3w_4d, LENGTHOF(t_2y_5M_3w_4d), "2 yrs, 5 mths, 3 wks, 4 days"}}; ExpectedResult narrowData[] = { diff --git a/icuSources/test/intltest/rbbitst.cpp b/icuSources/test/intltest/rbbitst.cpp index 86b5b6ce..7abf93c4 100644 --- a/icuSources/test/intltest/rbbitst.cpp +++ b/icuSources/test/intltest/rbbitst.cpp @@ -1017,7 +1017,7 @@ void RBBITest::TestExtended() { tp.srcLine = new UVector32(status); tp.srcCol = new UVector32(status); - RegexMatcher localeMatcher(UNICODE_STRING_SIMPLE(""), 0, status); + RegexMatcher localeMatcher(UNICODE_STRING_SIMPLE(""), 0, status); if (U_FAILURE(status)) { dataerrln("Failure in file %s, line %d, status = \"%s\"", __FILE__, __LINE__, u_errorName(status)); } diff --git a/icuSources/test/intltest/tztest.cpp b/icuSources/test/intltest/tztest.cpp index 715d1c1f..69695725 100644 --- a/icuSources/test/intltest/tztest.cpp +++ b/icuSources/test/intltest/tztest.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2014, International Business Machines Corporation + * Copyright (c) 1997-2015, International Business Machines Corporation * and others. All Rights Reserved. ***********************************************************************/ @@ -2028,7 +2028,11 @@ void TimeZoneTest::TestCanonicalID() { {"America/Virgin", "America/Anguilla"}, {"Antarctica/South_Pole", "Antarctica/McMurdo"}, {"Arctic/Longyearbyen", "Europe/Oslo"}, + {"Asia/Kuwait", "Asia/Aden"}, + {"Asia/Muscat", "Asia/Dubai"}, {"Asia/Phnom_Penh", "Asia/Bangkok"}, + {"Asia/Qatar", "Asia/Bahrain"}, + {"Asia/Riyadh", "Asia/Aden"}, {"Asia/Vientiane", "Asia/Bangkok"}, {"Atlantic/Jan_Mayen", "Europe/Oslo"}, {"Atlantic/St_Helena", "Africa/Abidjan"}, diff --git a/icuSources/test/testdata/rbbitst.txt b/icuSources/test/testdata/rbbitst.txt index 7e10d0c1..f5477d1f 100644 --- a/icuSources/test/testdata/rbbitst.txt +++ b/icuSources/test/testdata/rbbitst.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2001-2014 International Business Machines +# Copyright (c) 2001-2015 International Business Machines # Corporation and others. All Rights Reserved. # # RBBI Test Data @@ -886,3 +886,110 @@ Bangkok)• •abc/\u05D9 •def• •\u05E7\u05D7/\u05D9 •\u05DE\u05E2\u05D9\u05DC• •\u05D3\u05E8\u05D5\u05E9\u05D9\u05DD •\u05E9\u05D7\u05E7\u05E0\u05D9\u05DD/\u05D9\u05D5\u05EA• + +#################################################################################### +# +# Test CSS line break variants: strict, normal, loose +# +#################################################################################### + + + +# •no brk before 3063 •no brk before 301C•no brk btw 2026 •no brk before FF01• +•\u3084\u3063•\u3071•\u308A\u0020•\u0031\u301C\u0020•\u2026\u2026\u0020•\u30A2\uFF01\u0020• + + + +# •brk OK before 3063 •brk OK before 301C •no brk btw 2026 •no brk before FF01• +•\u3084•\u3063•\u3071•\u308A\u0020•\u0031•\u301C\u0020•\u2026\u2026\u0020•\u30A2\uFF01\u0020• + + + +# •brk OK before 3063 •brk OK before 301C •brk OK btw 2026 •brk OK before FF01• +•\u3084•\u3063•\u3071•\u308A\u0020•\u0031•\u301C\u0020•\u2026•\u2026\u0020•u30A2•\uFF01\u0020• + + + +# •no brk before 3063 •no brk before 301C•no brk btw 2026 •no brk before FF01• +•\u3084\u3063•\u3071•\u308A\u0020•\u0031\u301C\u0020•\u2026\u2026\u0020•\u30A2\uFF01\u0020• + + + +# •brk OK before 3063 •no brk before 301C •no brk btw 2026 •no brk before FF01• +•\u3084•\u3063•\u3071•\u308A\u0020•\u0031\u301C\u0020•\u2026\u2026\u0020•\u30A2\uFF01\u0020• + + + +# •brk OK before 3063 •no brk before 301C •brk OK btw 2026 •no brk before FF01• +•\u3084•\u3063•\u3071•\u308A\u0020•\u0031\u301C\u0020•\u2026•\u2026\u0020•u30A2\uFF01\u0020• + +#################################################################################### +# +# Test Apple breaks for emoji clusters (same for all locales and break types) +# +#################################################################################### + + + + +# woman zwj woman zwj girl zwj girl, woman/fitz-1-2 zwj woman/fitz-4 zwj boy/fitz-6 +•\U0001F469\u200D\U0001F469\u200D\U0001F467\u200D\U0001F467•\U0001F469\U0001F3FB\u200D\U0001F469\U0001F3FD\u200D\U0001F466\U0001F3FF• +# woman zwj, baby/fitz-3, older_woman/fitz-5, runner/fitz-4, raised_fist/fitz-3, fuel_pump, fitz-3 +•\U0001F469\u200D•\U0001F476\U0001F3FC•\U0001F475\U0001F3FE•\U0001F3C3\U0001F3FD•\u270A\U0001F3FC•\u26FD•\U0001F3FC• +# man zwj hvy_blk_heart zwj man, woman, man zwj hvy_blk_heart esel zwj man, woman +•\U0001F468\u200D\u2764\u200D\U0001F468•\U0001F469•\U0001F468\u200D\u2764\uFE0F\u200D\U0001F468•\U0001F469• +# woman zwj hvy_blk_heart/esel zwj kiss_mark zwj woman, man +•\U0001F469\u200D\u2764\uFE0F\u200D\U0001F48B\u200D\U0001F469•\U0001F468• +# victory_hand esel, victory_hand/esel/fitz-1-2, victory_hand/fitz-1-2, rowboat/fitz-4, vulcan_salute/fitz-5, space, +•\u270C\uFE0F•\u270C\uFE0F\U0001F3FB•\u270C\U0001F3FB•\U0001F6A3\U0001F3FD•\U0001F596\U0001F3FE•\u0020• +# flags1 AE AU AT BE BR CA CL +•\U0001F1E6\U0001F1EA•\U0001F1E6\U0001F1FA•\U0001F1E6\U0001F1F9•\U0001F1E7\U0001F1EA•\U0001F1E7\U0001F1F7•\U0001F1E8\U0001F1E6•\U0001F1E8\U0001F1F1• +# flags2 CN CO DK FI FR DE HK +•\U0001F1E8\U0001F1F3•\U0001F1E8\U0001F1F4•\U0001F1E9\U0001F1F0•\U0001F1EB\U0001F1EE•\U0001F1EB\U0001F1F7•\U0001F1E9\U0001F1EA•\U0001F1ED\U0001F1F0• +# flags3 IN ID IE IL IT JP KR +•\U0001F1EE\U0001F1F3•\U0001F1EE\U0001F1E9•\U0001F1EE\U0001F1EA•\U0001F1EE\U0001F1F1•\U0001F1EE\U0001F1F9•\U0001F1EF\U0001F1F5•\U0001F1F0\U0001F1F7• + + +# woman zwj woman zwj girl zwj girl, woman/fitz-1-2 zwj woman/fitz-4 zwj boy/fitz-6 +•\U0001F469\u200D\U0001F469\u200D\U0001F467\u200D\U0001F467•\U0001F469\U0001F3FB\u200D\U0001F469\U0001F3FD\u200D\U0001F466\U0001F3FF• +# woman zwj, baby/fitz-3, older_woman/fitz-5, runner/fitz-4, raised_fist/fitz-3, fuel_pump, fitz-3 +•\U0001F469\u200D•\U0001F476\U0001F3FC•\U0001F475\U0001F3FE•\U0001F3C3\U0001F3FD•\u270A\U0001F3FC•\u26FD•\U0001F3FC• +# man zwj hvy_blk_heart zwj man, woman, man zwj hvy_blk_heart esel zwj man, woman +•\U0001F468\u200D\u2764\u200D\U0001F468•\U0001F469•\U0001F468\u200D\u2764\uFE0F\u200D\U0001F468•\U0001F469• +# woman zwj hvy_blk_heart esel zwj kiss mark zwj woman, man +•\U0001F469\u200D\u2764\uFE0F\u200D\U0001F48B\u200D\U0001F469•\U0001F468• +# victory_hand esel, victory_hand/esel/fitz-1-2, victory_hand/fitz-1-2, rowboat/fitz-4, vulcan_salute/fitz-5, space, +•\u270C\uFE0F•\u270C\uFE0F\U0001F3FB•\u270C\U0001F3FB•\U0001F6A3\U0001F3FD•\U0001F596\U0001F3FE•\u0020• +# flags1 AE AU AT BE BR CA CL +•\U0001F1E6\U0001F1EA•\U0001F1E6\U0001F1FA•\U0001F1E6\U0001F1F9•\U0001F1E7\U0001F1EA•\U0001F1E7\U0001F1F7•\U0001F1E8\U0001F1E6•\U0001F1E8\U0001F1F1• +# flags2 CN CO DK FI FR DE HK +•\U0001F1E8\U0001F1F3•\U0001F1E8\U0001F1F4•\U0001F1E9\U0001F1F0•\U0001F1EB\U0001F1EE•\U0001F1EB\U0001F1F7•\U0001F1E9\U0001F1EA•\U0001F1ED\U0001F1F0• +# flags3 IN ID IE IL IT JP KR +•\U0001F1EE\U0001F1F3•\U0001F1EE\U0001F1E9•\U0001F1EE\U0001F1EA•\U0001F1EE\U0001F1F1•\U0001F1EE\U0001F1F9•\U0001F1EF\U0001F1F5•\U0001F1F0\U0001F1F7• + + +# woman zwj woman zwj girl zwj girl # (line, skip this for now, need safe rules and we don't generate it:) woman/fitz-1-2 zwj woman/fitz-4 zwj boy/fitz-6 +•\U0001F469\u200D\U0001F469\u200D\U0001F467\u200D\U0001F467• +# woman zwj, baby/fitz-3, older_woman/fitz-5, runner/fitz-4, raised_fist/fitz-3, fuel_pump, fitz-3 +•\U0001F469\u200D•\U0001F476\U0001F3FC•\U0001F475\U0001F3FE•\U0001F3C3\U0001F3FD•\u270A\U0001F3FC•\u26FD•\U0001F3FC• +# man zwj hvy_blk_heart zwj man, woman, man zwj hvy_blk_heart esel zwj man, woman +•\U0001F468\u200D\u2764\u200D\U0001F468•\U0001F469•\U0001F468\u200D\u2764\uFE0F\u200D\U0001F468•\U0001F469• +# woman zwj hvy_blk_heart esel zwj kiss mark zwj woman, man +•\U0001F469\u200D\u2764\uFE0F\u200D\U0001F48B\u200D\U0001F469•\U0001F468• +# victory_hand esel, victory_hand/esel/fitz-1-2, victory_hand/fitz-1-2, rowboat/fitz-4, vulcan_salute/fitz-5 space, +•\u270C\uFE0F•\u270C\uFE0F\U0001F3FB•\u270C\U0001F3FB•\U0001F6A3\U0001F3FD•\U0001F596\U0001F3FE\u0020• +# no special flags handling for line + + + +# woman zwj woman zwj girl zwj girl # (line, skip this for now, need safe rules and we don't generate it:) woman/fitz-1-2 zwj woman/fitz-4 zwj boy/fitz-6 +•\U0001F469\u200D\U0001F469\u200D\U0001F467\u200D\U0001F467• +# woman zwj, baby/fitz-3, older_woman/fitz-5, runner/fitz-4, raised_fist/fitz-3, fuel_pump, fitz-3 +•\U0001F469\u200D•\U0001F476\U0001F3FC•\U0001F475\U0001F3FE•\U0001F3C3\U0001F3FD•\u270A\U0001F3FC•\u26FD•\U0001F3FC• +# man zwj hvy_blk_heart zwj man, woman, man zwj hvy_blk_heart esel zwj man, woman +•\U0001F468\u200D\u2764\u200D\U0001F468•\U0001F469•\U0001F468\u200D\u2764\uFE0F\u200D\U0001F468•\U0001F469• +# woman zwj hvy_blk_heart esel zwj kiss mark zwj woman, man +•\U0001F469\u200D\u2764\uFE0F\u200D\U0001F48B\u200D\U0001F469•\U0001F468• +# victory_hand esel, victory_hand/esel/fitz-1-2, victory_hand/fitz-1-2, rowboat/fitz-4, vulcan_salute/fitz-5 space, +•\u270C\uFE0F•\u270C\uFE0F\U0001F3FB•\u270C\U0001F3FB•\U0001F6A3\U0001F3FD•\U0001F596\U0001F3FE\u0020• +# no special flags handling for line diff --git a/makefile b/makefile index a2d181b3..9f503e3e 100644 --- a/makefile +++ b/makefile @@ -239,7 +239,9 @@ else endif # even for a crossbuild host build, we want to use the target's latest tzdata as pointed to by latest_tzdata.tar.gz -export TZDATA:=$(SDKPATH)/usr/local/share/tz/$(shell readlink $(SDKPATH)/usr/local/share/tz/latest_tzdata.tar.gz) +ifeq "$(shell test -d $(SDKPATH)/usr/local/share/tz && echo YES )" "YES" + export TZDATA:=$(SDKPATH)/usr/local/share/tz/$(shell readlink $(SDKPATH)/usr/local/share/tz/latest_tzdata.tar.gz) +endif $(info # TZDATA=$(TZDATA)) ifeq "$(WINDOWS)" "YES" -- 2.45.2