From ea970109f85a85e720c9259f101ec33be6e9d912 Mon Sep 17 00:00:00 2001 From: Henri Sivonen Date: Wed, 3 Nov 2021 12:28:07 +0200 Subject: [PATCH] ICU-22028 Export collation and normalization data for ICU4X --- .ci-builds/.azure-pipelines.yml | 16 +- icu4c/source/common/udatamem.h | 2 +- icu4c/source/common/umapfile.h | 2 +- .../in/coll/ucadata-implicithan-icu4x.icu | Bin 0 -> 178036 bytes .../data/in/coll/ucadata-unihan-icu4x.icu | Bin 0 -> 539224 bytes icu4c/source/data/unidata/generate.sh | 3 + icu4c/source/i18n/collation.h | 5 +- icu4c/source/i18n/collationbuilder.cpp | 39 +- icu4c/source/i18n/collationbuilder.h | 2 + icu4c/source/i18n/collationdatabuilder.cpp | 168 ++++- icu4c/source/i18n/collationdatabuilder.h | 3 +- icu4c/source/i18n/collationroot.cpp | 48 +- icu4c/source/i18n/collationroot.h | 5 +- icu4c/source/tools/genrb/genrb.cpp | 22 +- icu4c/source/tools/genrb/parse.cpp | 359 ++++++++++- icu4c/source/tools/genrb/parse.h | 2 +- .../tools/icuexportdata/icuexportdata.cpp | 602 +++++++++++++++++- icu4c/source/tools/toolutil/writesrc.cpp | 13 +- icu4c/source/tools/toolutil/writesrc.h | 2 +- .../c/genuca/collationbasedatabuilder.cpp | 15 +- .../c/genuca/collationbasedatabuilder.h | 2 +- tools/unicode/c/genuca/genuca.cpp | 41 +- 22 files changed, 1275 insertions(+), 76 deletions(-) create mode 100644 icu4c/source/data/in/coll/ucadata-implicithan-icu4x.icu create mode 100644 icu4c/source/data/in/coll/ucadata-unihan-icu4x.icu diff --git a/.ci-builds/.azure-pipelines.yml b/.ci-builds/.azure-pipelines.yml index 811b531365a..70d711504df 100644 --- a/.ci-builds/.azure-pipelines.yml +++ b/.ci-builds/.azure-pipelines.yml @@ -445,7 +445,7 @@ jobs: timeoutInMinutes: 30 pool: vmImage: 'windows-2019' - demands: + demands: - msbuild - visualstudio - Cmd @@ -606,6 +606,8 @@ jobs: cd icu4c/source LD_LIBRARY_PATH=lib ./bin/icuexportdata --mode uprops --index --copyright --verbose --destdir icuexportdata_uprops_full/fast --trie-type fast --all LD_LIBRARY_PATH=lib ./bin/icuexportdata --mode uprops --index --copyright --verbose --destdir icuexportdata_uprops_full/small --trie-type small --all + LD_LIBRARY_PATH=lib ./bin/icuexportdata --mode norm --copyright --verbose --destdir icuexportdata_uprops_full/fast --trie-type fast --all + LD_LIBRARY_PATH=lib ./bin/icuexportdata --mode norm --copyright --verbose --destdir icuexportdata_uprops_full/small --trie-type small --all displayName: 'Build Unicode property data export file (Full)' # In the sample file, include: # - Basic binary properties: AHex WSpace @@ -619,6 +621,18 @@ jobs: LD_LIBRARY_PATH=lib ./bin/icuexportdata --mode uprops --index --copyright --verbose --destdir icuexportdata_uprops_sample/fast --trie-type fast AHex gc nt Basic_Emoji sc WSpace blank LD_LIBRARY_PATH=lib ./bin/icuexportdata --mode uprops --index --copyright --verbose --destdir icuexportdata_uprops_sample/small --trie-type small AHex gc nt Basic_Emoji sc WSpace blank displayName: 'Build Unicode property data export file (Sample)' + - script: | + mkdir -p icu4c/source/icuexportdata_uprops_full/collation_unihan + mkdir -p icu4c/source/icuexportdata_uprops_full/collation_implicithan + cd icu4c/source + cd data/coll + FILES=`echo *.txt` + cd - + LD_LIBRARY_PATH=lib ./bin/genrb -X -s data/coll/ -d icuexportdata_uprops_full/collation_unihan --ucadata data/in/coll/ucadata-unihan-icu4x.icu $FILES + LD_LIBRARY_PATH=lib ./bin/genrb -X -s data/coll/ -d icuexportdata_uprops_full/collation_implicithan --ucadata data/in/coll/ucadata-implicithan-icu4x.icu $FILES + rm icuexportdata_uprops_full/collation_unihan/*.res + rm icuexportdata_uprops_full/collation_implicithan/*.res + displayName: 'Build collation data export file' - task: PublishBuildArtifacts@1 displayName: 'Publish Artifact: icuexportdata_uprops_full' inputs: diff --git a/icu4c/source/common/udatamem.h b/icu4c/source/common/udatamem.h index a05dd697568..3db2af43aad 100644 --- a/icu4c/source/common/udatamem.h +++ b/icu4c/source/common/udatamem.h @@ -44,7 +44,7 @@ struct UDataMemory { int32_t length; /* Length of the data in bytes; -1 if unknown. */ }; -U_CFUNC UDataMemory *UDataMemory_createNewInstance(UErrorCode *pErr); +U_CAPI UDataMemory* U_EXPORT2 UDataMemory_createNewInstance(UErrorCode *pErr); U_CFUNC void UDatamemory_assign (UDataMemory *dest, UDataMemory *source); U_CFUNC void UDataMemory_init (UDataMemory *This); U_CFUNC UBool UDataMemory_isLoaded(const UDataMemory *This); diff --git a/icu4c/source/common/umapfile.h b/icu4c/source/common/umapfile.h index adc265203dc..042e71374c1 100644 --- a/icu4c/source/common/umapfile.h +++ b/icu4c/source/common/umapfile.h @@ -29,7 +29,7 @@ #include "unicode/udata.h" #include "putilimp.h" -U_CFUNC UBool uprv_mapFile(UDataMemory *pdm, const char *path, UErrorCode *status); +U_CAPI UBool U_EXPORT2 uprv_mapFile(UDataMemory *pdm, const char *path, UErrorCode *status); U_CFUNC void uprv_unmapFile(UDataMemory *pData); /* MAP_NONE: no memory mapping, no file access at all */ diff --git a/icu4c/source/data/in/coll/ucadata-implicithan-icu4x.icu b/icu4c/source/data/in/coll/ucadata-implicithan-icu4x.icu new file mode 100644 index 0000000000000000000000000000000000000000..5c1a111424d0ffecc4a0097a24538add7b6a2daf GIT binary patch literal 178036 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≷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 literal 0 HcmV?d00001 diff --git a/icu4c/source/data/in/coll/ucadata-unihan-icu4x.icu b/icu4c/source/data/in/coll/ucadata-unihan-icu4x.icu new file mode 100644 index 0000000000000000000000000000000000000000..29e5b00e14cb583afac3918b2dd8f099d61c8a91 GIT binary patch literal 539224 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�oBIvQxEg;v_>qMKnx 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�i1DypfWmO5V1LMv^w^B~*r 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�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 z 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

b@1#{Mvg`Uw^Nf_dg-^fD_f+`;^e){C!X1 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 literal 0 HcmV?d00001 diff --git a/icu4c/source/data/unidata/generate.sh b/icu4c/source/data/unidata/generate.sh index 9782cd14d2e..f13492b2dd6 100755 --- a/icu4c/source/data/unidata/generate.sh +++ b/icu4c/source/data/unidata/generate.sh @@ -44,3 +44,6 @@ bazelisk run //tools/unicode/c/genprops $ICU_SRC/icu4c # We run it twice for different versions of the CLDR root sort order. bazelisk run //tools/unicode/c/genuca -- --hanOrder implicit $ICU_SRC/icu4c bazelisk run //tools/unicode/c/genuca -- --hanOrder radical-stroke $ICU_SRC/icu4c +# Also generate the ICU4X versions +bazelisk run //tools/unicode/c/genuca -- --icu4x --hanOrder implicit $ICU_SRC/icu4c +bazelisk run //tools/unicode/c/genuca -- --icu4x --hanOrder radical-stroke $ICU_SRC/icu4c diff --git a/icu4c/source/i18n/collation.h b/icu4c/source/i18n/collation.h index 6a449a3eb69..034cb76a3c2 100644 --- a/icu4c/source/i18n/collation.h +++ b/icu4c/source/i18n/collation.h @@ -221,7 +221,8 @@ public: /** * Points to contraction data. * Bits 31..13: Index into prefix/contraction data. - * Bits 12..11: Unused, 0. + * Bit 12: Unused, 0. + * Bit 11: CONTRACT_HAS_STARTER flag. (Used by ICU4X only.) * Bit 10: CONTRACT_TRAILING_CCC flag. * Bit 9: CONTRACT_NEXT_CCC flag. * Bit 8: CONTRACT_SINGLE_CP_NO_MATCH flag. @@ -298,6 +299,8 @@ public: static const uint32_t CONTRACT_NEXT_CCC = 0x200; /** Set if any contraction suffix ends with lccc!=0. */ static const uint32_t CONTRACT_TRAILING_CCC = 0x400; + /** Set if any contraction suffix contains a starter. (Used by ICU4X only.) */ + static const uint32_t CONTRACT_HAS_STARTER = 0x800; /** For HANGUL_TAG: None of its Jamo CE32s isSpecialCE32(). */ static const uint32_t HANGUL_NO_SPECIAL_JAMO = 0x100; diff --git a/icu4c/source/i18n/collationbuilder.cpp b/icu4c/source/i18n/collationbuilder.cpp index 5d4611b851d..97de83c6ccf 100644 --- a/icu4c/source/i18n/collationbuilder.cpp +++ b/icu4c/source/i18n/collationbuilder.cpp @@ -198,7 +198,7 @@ const int32_t CollationBuilder::HAS_BEFORE2; const int32_t CollationBuilder::HAS_BEFORE3; #endif -CollationBuilder::CollationBuilder(const CollationTailoring *b, UErrorCode &errorCode) +CollationBuilder::CollationBuilder(const CollationTailoring *b, UBool icu4xMode, UErrorCode &errorCode) : nfd(*Normalizer2::getNFDInstance(errorCode)), fcd(*Normalizer2Factory::getFCDInstance(errorCode)), nfcImpl(*Normalizer2Factory::getNFCImpl(errorCode)), @@ -206,7 +206,8 @@ CollationBuilder::CollationBuilder(const CollationTailoring *b, UErrorCode &erro baseData(b->data), rootElements(b->data->rootElements, b->data->rootElementsLength), variableTop(0), - dataBuilder(new CollationDataBuilder(errorCode)), fastLatinEnabled(TRUE), + dataBuilder(new CollationDataBuilder(icu4xMode, errorCode)), fastLatinEnabled(TRUE), + icu4xMode(icu4xMode), errorReason(NULL), cesLength(0), rootPrimaryIndexes(errorCode), nodes(errorCode) { @@ -225,6 +226,10 @@ CollationBuilder::CollationBuilder(const CollationTailoring *b, UErrorCode &erro } } +CollationBuilder::CollationBuilder(const CollationTailoring *b, UErrorCode &errorCode) + : CollationBuilder(b, FALSE, errorCode) +{} + CollationBuilder::~CollationBuilder() { delete dataBuilder; } @@ -262,15 +267,19 @@ CollationBuilder::parseAndBuild(const UnicodeString &ruleString, if(U_FAILURE(errorCode)) { return NULL; } if(dataBuilder->hasMappings()) { makeTailoredCEs(errorCode); - closeOverComposites(errorCode); + if (!icu4xMode) { + closeOverComposites(errorCode); + } finalizeCEs(errorCode); - // Copy all of ASCII, and Latin-1 letters, into each tailoring. - optimizeSet.add(0, 0x7f); - optimizeSet.add(0xc0, 0xff); - // Hangul is decomposed on the fly during collation, - // and the tailoring data is always built with HANGUL_TAG specials. - optimizeSet.remove(Hangul::HANGUL_BASE, Hangul::HANGUL_END); - dataBuilder->optimize(optimizeSet, errorCode); + if (!icu4xMode) { + // Copy all of ASCII, and Latin-1 letters, into each tailoring. + optimizeSet.add(0, 0x7f); + optimizeSet.add(0xc0, 0xff); + // Hangul is decomposed on the fly during collation, + // and the tailoring data is always built with HANGUL_TAG specials. + optimizeSet.remove(Hangul::HANGUL_BASE, Hangul::HANGUL_END); + dataBuilder->optimize(optimizeSet, errorCode); + } tailoring->ensureOwnedData(errorCode); if(U_FAILURE(errorCode)) { return NULL; } if(fastLatinEnabled) { dataBuilder->enableFastLatin(); } @@ -743,14 +752,18 @@ CollationBuilder::addRelation(int32_t strength, const UnicodeString &prefix, } } uint32_t ce32 = Collation::UNASSIGNED_CE32; - if((prefix != nfdPrefix || str != nfdString) && + if(!icu4xMode && (prefix != nfdPrefix || str != nfdString) && !ignorePrefix(prefix, errorCode) && !ignoreString(str, errorCode)) { // Map from the original input to the CEs. // We do this in case the canonical closure is incomplete, // so that it is possible to explicitly provide the missing mappings. ce32 = addIfDifferent(prefix, str, ces, cesLength, ce32, errorCode); } - addWithClosure(nfdPrefix, nfdString, ces, cesLength, ce32, errorCode); + if (!icu4xMode) { + addWithClosure(nfdPrefix, nfdString, ces, cesLength, ce32, errorCode); + } else { + addIfDifferent(nfdPrefix, nfdString, ces, cesLength, ce32, errorCode); + } if(U_FAILURE(errorCode)) { parserErrorReason = "writing collation elements"; return; @@ -1608,7 +1621,7 @@ CEFinalizer::~CEFinalizer() {} void CollationBuilder::finalizeCEs(UErrorCode &errorCode) { if(U_FAILURE(errorCode)) { return; } - LocalPointer newBuilder(new CollationDataBuilder(errorCode), errorCode); + LocalPointer newBuilder(new CollationDataBuilder(icu4xMode, errorCode), errorCode); if(U_FAILURE(errorCode)) { return; } diff --git a/icu4c/source/i18n/collationbuilder.h b/icu4c/source/i18n/collationbuilder.h index 59d3c5d24b0..22e24ddb813 100644 --- a/icu4c/source/i18n/collationbuilder.h +++ b/icu4c/source/i18n/collationbuilder.h @@ -39,6 +39,7 @@ class Normalizer2Impl; class U_I18N_API CollationBuilder : public CollationRuleParser::Sink { public: + CollationBuilder(const CollationTailoring *b, UBool icu4xMode, UErrorCode &errorCode); CollationBuilder(const CollationTailoring *base, UErrorCode &errorCode); virtual ~CollationBuilder(); @@ -302,6 +303,7 @@ private: CollationDataBuilder *dataBuilder; UBool fastLatinEnabled; + UBool icu4xMode; UnicodeSet optimizeSet; const char *errorReason; diff --git a/icu4c/source/i18n/collationdatabuilder.cpp b/icu4c/source/i18n/collationdatabuilder.cpp index b10de993c27..e2eb554f7c2 100644 --- a/icu4c/source/i18n/collationdatabuilder.cpp +++ b/icu4c/source/i18n/collationdatabuilder.cpp @@ -283,16 +283,19 @@ DataBuilderCollationIterator::getCE32FromBuilderData(uint32_t ce32, UErrorCode & // ------------------------------------------------------------------------- *** -CollationDataBuilder::CollationDataBuilder(UErrorCode &errorCode) +CollationDataBuilder::CollationDataBuilder(UBool icu4xMode, UErrorCode &errorCode) : nfcImpl(*Normalizer2Factory::getNFCImpl(errorCode)), base(NULL), baseSettings(NULL), trie(NULL), ce32s(errorCode), ce64s(errorCode), conditionalCE32s(errorCode), modified(FALSE), + icu4xMode(icu4xMode), fastLatinEnabled(FALSE), fastLatinBuilder(NULL), collIter(NULL) { // Reserve the first CE32 for U+0000. - ce32s.addElement(0, errorCode); + if (!icu4xMode) { + ce32s.addElement(0, errorCode); + } conditionalCE32s.setDeleter(uprv_deleteConditionalCE32); } @@ -316,28 +319,32 @@ CollationDataBuilder::initForTailoring(const CollationData *b, UErrorCode &error base = b; // For a tailoring, the default is to fall back to the base. - trie = utrie2_open(Collation::FALLBACK_CE32, Collation::FFFD_CE32, &errorCode); + // For ICU4X, use the same value for fallback as for the default + // to avoid having to have different blocks for the two. + trie = utrie2_open(Collation::FALLBACK_CE32, icu4xMode ? Collation::FALLBACK_CE32 : Collation::FFFD_CE32, &errorCode); - // Set the Latin-1 letters block so that it is allocated first in the data array, - // to try to improve locality of reference when sorting Latin-1 text. - // Do not use utrie2_setRange32() since that will not actually allocate blocks - // that are filled with the default value. - // ASCII (0..7F) is already preallocated anyway. - for(UChar32 c = 0xc0; c <= 0xff; ++c) { - utrie2_set32(trie, c, Collation::FALLBACK_CE32, &errorCode); + if (!icu4xMode) { + // Set the Latin-1 letters block so that it is allocated first in the data array, + // to try to improve locality of reference when sorting Latin-1 text. + // Do not use utrie2_setRange32() since that will not actually allocate blocks + // that are filled with the default value. + // ASCII (0..7F) is already preallocated anyway. + for(UChar32 c = 0xc0; c <= 0xff; ++c) { + utrie2_set32(trie, c, Collation::FALLBACK_CE32, &errorCode); + } + + // Hangul syllables are not tailorable (except via tailoring Jamos). + // Always set the Hangul tag to help performance. + // Do this here, rather than in buildMappings(), + // so that we see the HANGUL_TAG in various assertions. + uint32_t hangulCE32 = Collation::makeCE32FromTagAndIndex(Collation::HANGUL_TAG, 0); + utrie2_setRange32(trie, Hangul::HANGUL_BASE, Hangul::HANGUL_END, hangulCE32, TRUE, &errorCode); + + // Copy the set contents but don't copy/clone the set as a whole because + // that would copy the isFrozen state too. + unsafeBackwardSet.addAll(*b->unsafeBackwardSet); } - // Hangul syllables are not tailorable (except via tailoring Jamos). - // Always set the Hangul tag to help performance. - // Do this here, rather than in buildMappings(), - // so that we see the HANGUL_TAG in various assertions. - uint32_t hangulCE32 = Collation::makeCE32FromTagAndIndex(Collation::HANGUL_TAG, 0); - utrie2_setRange32(trie, Hangul::HANGUL_BASE, Hangul::HANGUL_END, hangulCE32, TRUE, &errorCode); - - // Copy the set contents but don't copy/clone the set as a whole because - // that would copy the isFrozen state too. - unsafeBackwardSet.addAll(*b->unsafeBackwardSet); - if(U_FAILURE(errorCode)) { return; } } @@ -554,6 +561,98 @@ CollationDataBuilder::addCE32(const UnicodeString &prefix, const UnicodeString & int32_t cLength = U16_LENGTH(c); uint32_t oldCE32 = utrie2_get32(trie, c); UBool hasContext = !prefix.isEmpty() || s.length() > cLength; + + if (icu4xMode) { + if (base && c >= 0x1100 && c < 0x1200) { + // Omit jamo tailorings. + // TODO(https://github.com/unicode-org/icu4x/issues/1941). + } + const Normalizer2* nfdNormalizer = Normalizer2::getNFDInstance(errorCode); + UnicodeString sInNfd; + nfdNormalizer->normalize(s, sInNfd, errorCode); + if (s != sInNfd) { + // s is not in NFD, so it cannot match in ICU4X, since ICU4X only + // does NFD lookups. + // Now check that we're only rejecting known cases. + if (s.length() == 2) { + char16_t second = s.charAt(1); + if (second == 0x0F73 || second == 0x0F75 || second == 0x0F81) { + // Second is a special decomposing Tibetan vowel sign. + // These also get added in the decomposed form, so ignoring + // this instance is OK. + return; + } + if (c == 0xFDD1 && second == 0xAC00) { + // This strange contraction exists in the root and + // doesn't have a decomposed counterpart there. + // This won't match in ICU4X anyway and is very strange: + // Unassigned Arabic presentation form contracting with + // the very first Hangul syllable. Let's ignore this + // explicitly. + return; + } + } + // Unknown case worth investigating if ever found. + errorCode = U_UNSUPPORTED_ERROR; + return; + } + + if (!prefix.isEmpty()) { + UnicodeString prefixInNfd; + nfdNormalizer->normalize(prefix, prefixInNfd, errorCode); + if (prefix != prefixInNfd) { + errorCode = U_UNSUPPORTED_ERROR; + return; + } + + int32_t count = prefix.countChar32(); + if (count > 2) { + // Prefix too long for ICU4X. + errorCode = U_UNSUPPORTED_ERROR; + return; + } + UChar32 utf32[4]; + int32_t len = prefix.toUTF32(utf32, 4, errorCode); + if (len != count) { + errorCode = U_INVALID_STATE_ERROR; + return; + } + UChar32 c = utf32[0]; + if (u_getCombiningClass(c)) { + // Prefix must start with as starter for ICU4X. + errorCode = U_UNSUPPORTED_ERROR; + return; + } + // XXX: Korean searchjl has jamo in prefix, so commenting out this + // check for now. ICU4X currently ignores non-root jamo tables anyway. + // searchjl was added in + // https://unicode-org.atlassian.net/browse/CLDR-3560 + // Contractions were changed to prefixes in + // https://unicode-org.atlassian.net/browse/CLDR-6546 + // + // if ((c >= 0x1100 && c < 0x1200) || (c >= 0xAC00 && c < 0xD7A4)) { + // errorCode = U_UNSUPPORTED_ERROR; + // return; + // } + if ((len > 1) && !(utf32[1] == 0x3099 || utf32[1] == 0x309A)) { + // Second character in prefix, if present, must be a kana voicing mark for ICU4X. + errorCode = U_UNSUPPORTED_ERROR; + return; + } + } + + if (s.length() > cLength) { + // Check that there's no modern Hangul in contractions. + for (int32_t i = 0; i < s.length(); ++i) { + UChar c = s.charAt(i); + if ((c >= 0x1100 && c < 0x1100 + 19) || (c >= 0x1161 && c < 0x1161 + 21) || (c >= 0x11A7 && c < 0x11A7 + 28) || (c >= 0xAC00 && c < 0xD7A4)) { + errorCode = U_UNSUPPORTED_ERROR; + return; + } + } + } + } + if(oldCE32 == Collation::FALLBACK_CE32) { // First tailoring for c. // If c has contextual base mappings or if we add a contextual mapping, @@ -675,8 +774,11 @@ CollationDataBuilder::encodeCEs(const int64_t ces[], int32_t cesLength, return encodeOneCEAsCE32(0); } else if(cesLength == 1) { return encodeOneCE(ces[0], errorCode); - } else if(cesLength == 2) { + } else if(cesLength == 2 && !icu4xMode) { // Try to encode two CEs as one CE32. + // Turn this off for ICU4X, because without the canonical closure + // these are so rare that it doesn't make sense to spend a branch + // on checking this tag when using the data. int64_t ce0 = ces[0]; int64_t ce1 = ces[1]; uint32_t p0 = (uint32_t)(ce0 >> 32); @@ -1284,9 +1386,11 @@ CollationDataBuilder::buildMappings(CollationData &data, UErrorCode &errorCode) setDigitTags(errorCode); setLeadSurrogates(errorCode); - // For U+0000, move its normal ce32 into CE32s[0] and set U0000_TAG. - ce32s.setElementAt((int32_t)utrie2_get32(trie, 0), 0); - utrie2_set32(trie, 0, Collation::makeCE32FromTagAndIndex(Collation::U0000_TAG, 0), &errorCode); + if (!icu4xMode) { + // For U+0000, move its normal ce32 into CE32s[0] and set U0000_TAG. + ce32s.setElementAt((int32_t)utrie2_get32(trie, 0), 0); + utrie2_set32(trie, 0, Collation::makeCE32FromTagAndIndex(Collation::U0000_TAG, 0), &errorCode); + } utrie2_freeze(trie, UTRIE2_32_VALUE_BITS, &errorCode); if(U_FAILURE(errorCode)) { return; } @@ -1428,6 +1532,20 @@ CollationDataBuilder::buildContext(ConditionalCE32 *head, UErrorCode &errorCode) // The last suffix character has lccc!=0, allowing for discontiguous contractions. flags |= Collation::CONTRACT_TRAILING_CCC; } + if (icu4xMode && (flags & Collation::CONTRACT_HAS_STARTER) == 0) { + for (int32_t i = 0; i < suffix.length();) { + UChar32 c = suffix.char32At(i); + if (!u_getCombiningClass(c)) { + flags |= Collation::CONTRACT_HAS_STARTER; + break; + } + if (c > 0xFFFF) { + i += 2; + } else { + ++i; + } + } + } contractionBuilder.add(suffix, (int32_t)cond->ce32, errorCode); if(cond == lastCond) { break; } cond = getConditionalCE32(cond->next); diff --git a/icu4c/source/i18n/collationdatabuilder.h b/icu4c/source/i18n/collationdatabuilder.h index 6ae77772fd5..c272118a577 100644 --- a/icu4c/source/i18n/collationdatabuilder.h +++ b/icu4c/source/i18n/collationdatabuilder.h @@ -60,7 +60,7 @@ public: virtual int64_t modifyCE(int64_t ce) const = 0; }; - CollationDataBuilder(UErrorCode &errorCode); + CollationDataBuilder(UBool icu4xMode, UErrorCode &errorCode); virtual ~CollationDataBuilder(); @@ -246,6 +246,7 @@ protected: UnicodeString contexts; UnicodeSet unsafeBackwardSet; UBool modified; + UBool icu4xMode; UBool fastLatinEnabled; CollationFastLatinBuilder *fastLatinBuilder; diff --git a/icu4c/source/i18n/collationroot.cpp b/icu4c/source/i18n/collationroot.cpp index 71753bd6f4b..62bee63c3f4 100644 --- a/icu4c/source/i18n/collationroot.cpp +++ b/icu4c/source/i18n/collationroot.cpp @@ -27,6 +27,7 @@ #include "ucln_in.h" #include "udatamem.h" #include "umutex.h" +#include "umapfile.h" U_NAMESPACE_BEGIN @@ -47,17 +48,46 @@ static UBool U_CALLCONV uprv_collation_root_cleanup() { U_CDECL_END +UDataMemory* +CollationRoot::loadFromFile(const char* ucadataPath, UErrorCode &errorCode) { + UDataMemory dataMemory; + UDataMemory *rDataMem = NULL; + if (U_FAILURE(errorCode)) { + return NULL; + } + if (uprv_mapFile(&dataMemory, ucadataPath, &errorCode)) { + if (dataMemory.pHeader->dataHeader.magic1 == 0xda && + dataMemory.pHeader->dataHeader.magic2 == 0x27 && + CollationDataReader::isAcceptable(NULL, "icu", "ucadata", &dataMemory.pHeader->info)) { + rDataMem = UDataMemory_createNewInstance(&errorCode); + if (U_FAILURE(errorCode)) { + return NULL; + } + rDataMem->pHeader = dataMemory.pHeader; + rDataMem->mapAddr = dataMemory.mapAddr; + rDataMem->map = dataMemory.map; + return rDataMem; + } + errorCode = U_INVALID_FORMAT_ERROR; + return NULL; + } + errorCode = U_MISSING_RESOURCE_ERROR; + return NULL; +} + void U_CALLCONV -CollationRoot::load(UErrorCode &errorCode) { +CollationRoot::load(const char* ucadataPath, UErrorCode &errorCode) { if(U_FAILURE(errorCode)) { return; } LocalPointer t(new CollationTailoring(NULL)); if(t.isNull() || t->isBogus()) { errorCode = U_MEMORY_ALLOCATION_ERROR; return; } - t->memory = udata_openChoice(U_ICUDATA_NAME U_TREE_SEPARATOR_STRING "coll", - "icu", "ucadata", - CollationDataReader::isAcceptable, t->version, &errorCode); + t->memory = ucadataPath ? CollationRoot::loadFromFile(ucadataPath, errorCode) : + udata_openChoice(U_ICUDATA_NAME U_TREE_SEPARATOR_STRING "coll", + "icu", "ucadata", + CollationDataReader::isAcceptable, + t->version, &errorCode); if(U_FAILURE(errorCode)) { return; } const uint8_t *inBytes = static_cast(udata_getMemory(t->memory)); CollationDataReader::read(NULL, inBytes, udata_getLength(t->memory), *t, errorCode); @@ -73,14 +103,14 @@ CollationRoot::load(UErrorCode &errorCode) { const CollationCacheEntry * CollationRoot::getRootCacheEntry(UErrorCode &errorCode) { - umtx_initOnce(initOnce, CollationRoot::load, errorCode); + umtx_initOnce(initOnce, CollationRoot::load, static_cast(NULL), errorCode); if(U_FAILURE(errorCode)) { return NULL; } return rootSingleton; } const CollationTailoring * CollationRoot::getRoot(UErrorCode &errorCode) { - umtx_initOnce(initOnce, CollationRoot::load, errorCode); + umtx_initOnce(initOnce, CollationRoot::load, static_cast(NULL), errorCode); if(U_FAILURE(errorCode)) { return NULL; } return rootSingleton->tailoring; } @@ -99,6 +129,12 @@ CollationRoot::getSettings(UErrorCode &errorCode) { return root->settings; } +void +CollationRoot::forceLoadFromFile(const char* ucadataPath, UErrorCode &errorCode) { + umtx_initOnce(initOnce, CollationRoot::load, ucadataPath, errorCode); +} + + U_NAMESPACE_END #endif // !UCONFIG_NO_COLLATION diff --git a/icu4c/source/i18n/collationroot.h b/icu4c/source/i18n/collationroot.h index 8cd3046cdf1..b203f612b35 100644 --- a/icu4c/source/i18n/collationroot.h +++ b/icu4c/source/i18n/collationroot.h @@ -15,6 +15,7 @@ #define __COLLATIONROOT_H__ #include "unicode/utypes.h" +#include "unicode/udata.h" #if !UCONFIG_NO_COLLATION @@ -34,9 +35,11 @@ public: static const CollationTailoring *getRoot(UErrorCode &errorCode); static const CollationData *getData(UErrorCode &errorCode); static const CollationSettings *getSettings(UErrorCode &errorCode); + static void U_EXPORT2 forceLoadFromFile(const char* ucadataPath, UErrorCode &errorCode); private: - static void U_CALLCONV load(UErrorCode &errorCode); + static void U_CALLCONV load(const char* ucadataPath, UErrorCode &errorCode); + static UDataMemory* loadFromFile(const char* ucadataPath, UErrorCode &errorCode); }; U_NAMESPACE_END diff --git a/icu4c/source/tools/genrb/genrb.cpp b/icu4c/source/tools/genrb/genrb.cpp index a739b91143c..319484213ee 100644 --- a/icu4c/source/tools/genrb/genrb.cpp +++ b/icu4c/source/tools/genrb/genrb.cpp @@ -33,6 +33,7 @@ #include "filterrb.h" #include "reslist.h" #include "ucmndata.h" /* TODO: for reading the pool bundle */ +#include "collationroot.h" U_NAMESPACE_USE @@ -84,7 +85,9 @@ enum WRITE_POOL_BUNDLE, USE_POOL_BUNDLE, INCLUDE_UNIHAN_COLL, - FILTERDIR + FILTERDIR, + ICU4X_MODE, + UCADATA }; UOption options[]={ @@ -111,6 +114,8 @@ UOption options[]={ UOPTION_DEF("usePoolBundle", '\x01', UOPT_OPTIONAL_ARG),/* 20 */ UOPTION_DEF("includeUnihanColl", '\x01', UOPT_NO_ARG),/* 21 */ /* temporary, don't display in usage info */ UOPTION_DEF("filterDir", '\x01', UOPT_OPTIONAL_ARG), /* 22 */ + UOPTION_DEF("icu4xMode", 'X', UOPT_NO_ARG),/* 23 */ + UOPTION_DEF("ucadata", '\x01', UOPT_REQUIRES_ARG),/* 24 */ }; static UBool write_java = FALSE; @@ -152,6 +157,10 @@ main(int argc, fprintf(stderr, "%s: cannot combine --writePoolBundle and --usePoolBundle\n", argv[0]); illegalArg = TRUE; } + if (options[ICU4X_MODE].doesOccur && !options[UCADATA].doesOccur) { + fprintf(stderr, "%s: --icu4xMode requires --ucadata\n", argv[0]); + illegalArg = TRUE; + } if(options[FORMAT_VERSION].doesOccur) { const char *s = options[FORMAT_VERSION].value; if(uprv_strlen(s) != 1 || (s[0] < '1' && '3' < s[0])) { @@ -302,6 +311,15 @@ main(int argc, } } + if (options[UCADATA].doesOccur) { +#if !UCONFIG_NO_COLLATION + CollationRoot::forceLoadFromFile(options[UCADATA].value, status); +#else + fprintf(stderr, "--ucadata was used with UCONFIG_NO_COLLATION\n"); + return status; +#endif + } + initParser(); /*added by Jing*/ @@ -656,7 +674,7 @@ processFile(const char *filename, const char *cp, } /* Parse the data into an SRBRoot */ data.adoptInstead(parse(ucbuf.getAlias(), inputDir, outputDir, filename, - !omitBinaryCollation, options[NO_COLLATION_RULES].doesOccur, &status)); + !omitBinaryCollation, options[NO_COLLATION_RULES].doesOccur, options[ICU4X_MODE].doesOccur, &status)); if (data.isNull() || U_FAILURE(status)) { fprintf(stderr, "couldn't parse the file %s. Error:%s\n", filename, u_errorName(status)); diff --git a/icu4c/source/tools/genrb/parse.cpp b/icu4c/source/tools/genrb/parse.cpp index 7d5ffe1fc78..a66f8ef914a 100644 --- a/icu4c/source/tools/genrb/parse.cpp +++ b/icu4c/source/tools/genrb/parse.cpp @@ -21,6 +21,8 @@ */ // Safer use of UnicodeString. +#include +#include #ifndef UNISTR_FROM_CHAR_EXPLICIT # define UNISTR_FROM_CHAR_EXPLICIT explicit #endif @@ -42,6 +44,7 @@ #include "reslist.h" #include "rbt_pars.h" #include "genrb.h" +#include "unicode/normalizer2.h" #include "unicode/stringpiece.h" #include "unicode/unistr.h" #include "unicode/ustring.h" @@ -59,6 +62,7 @@ #include "collationruleparser.h" #include "collationtailoring.h" #include +#include "writesrc.h" /* Number of tokens to read ahead of the current stream position */ #define MAX_LOOKAHEAD 3 @@ -76,6 +80,9 @@ #define OPENSQBRACKET 0x005B #define CLOSESQBRACKET 0x005D +#define ICU4X_DIACRITIC_BASE 0x0300 +#define ICU4X_DIACRITIC_LIMIT 0x034F + using icu::CharString; using icu::LocalMemory; using icu::LocalPointer; @@ -119,6 +126,7 @@ typedef struct { const char *filename; UBool makeBinaryCollation; UBool omitCollationRules; + UBool icu4xMode; } ParseState; typedef struct SResource * @@ -764,7 +772,7 @@ GenrbImporter::getRules( /* Parse the data into an SRBRoot */ LocalPointer data( - parse(ucbuf.getAlias(), inputDir, outputDir, filename.data(), FALSE, FALSE, &errorCode)); + parse(ucbuf.getAlias(), inputDir, outputDir, filename.data(), FALSE, FALSE, FALSE, &errorCode)); if (U_FAILURE(errorCode)) { return; } @@ -807,6 +815,333 @@ escape(const UChar *s, char *buffer) { } // namespace +static FILE* +openTOML(const char* outputdir, const char* name, const char* collationType, const char* structType, UErrorCode *status) { + CharString baseName; + baseName.append(name, *status); + baseName.append("_", *status); + baseName.append(collationType, *status); + baseName.append("_", *status); + baseName.append(structType, *status); + + CharString outFileName; + if (outputdir && *outputdir) { + outFileName.append(outputdir, *status).ensureEndsWithFileSeparator(*status); + } + outFileName.append(baseName, *status); + outFileName.append(".toml", *status); + if (U_FAILURE(*status)) { + return NULL; + } + + FILE* f = fopen(outFileName.data(), "w"); + if (!f) { + *status = U_FILE_ACCESS_ERROR; + return NULL; + } + usrc_writeFileNameGeneratedBy(f, "#", baseName.data(), "genrb -X"); + + return f; +} + +static void +writeCollationMetadataTOML(const char* outputdir, const char* name, const char* collationType, const uint32_t metadataBits, UErrorCode *status) { + FILE* f = openTOML(outputdir, name, collationType, "meta", status); + if (!f) { + return; + } + // printf("writeCollationMetadataTOML %s %s\n", name, collationType); + fprintf(f, "bits = 0x%X\n", metadataBits); + fclose(f); +} + +static UChar32 +writeCollationDiacriticsTOML(const char* outputdir, const char* name, const char* collationType, const icu::CollationData* data, UErrorCode *status) { + UChar32 limit = ICU4X_DIACRITIC_LIMIT; + FILE* f = openTOML(outputdir, name, collationType, "dia", status); + if (!f) { + return limit; + } + // printf("writeCollationDiacriticsTOML %s %s\n", name, collationType); + uint16_t secondaries[ICU4X_DIACRITIC_LIMIT-ICU4X_DIACRITIC_BASE]; + for (UChar32 c = ICU4X_DIACRITIC_BASE; c < ICU4X_DIACRITIC_LIMIT; ++c) { + uint16_t secondary = 0; + uint32_t ce32 = data->getCE32(c); + if (ce32 == icu::Collation::FALLBACK_CE32) { + ce32 = data->base->getCE32(c); + } + if (c == 0x0340 || c == 0x0341 || c == 0x0343 || c == 0x0344) { + // These never occur in NFD data + } else if (!icu::Collation::isSimpleOrLongCE32(ce32)) { + if (uprv_strcmp(name, "root") == 0) { + printf("UNSUPPORTED DIACRITIC CE32 in root: TAG: %X CE32: %X char: %X\n", icu::Collation::tagFromCE32(ce32), ce32, c); + fclose(f); + *status = U_INTERNAL_PROGRAM_ERROR; + return limit; + } + limit = c; + break; + } else { + uint64_t ce = uint64_t(icu::Collation::ceFromCE32(ce32)); + if ((ce & 0xFFFFFFFF0000FFFF) != uint64_t(icu::Collation::COMMON_TERTIARY_CE)) { + // Not a CE where only the secondary weight differs from the expected + // pattern. + limit = c; + break; + } + secondary = uint16_t(ce >> 16); + } + secondaries[c - ICU4X_DIACRITIC_BASE] = secondary; + + } + usrc_writeArray(f, "secondaries = [\n ", secondaries, 16, limit-ICU4X_DIACRITIC_BASE, " ", "\n]\n"); + fclose(f); + return limit; +} + +static void +writeCollationReorderingTOML(const char* outputdir, const char* name, const char* collationType, const icu::CollationSettings* settings, UErrorCode *status) { + FILE* f = openTOML(outputdir, name, collationType, "reord", status); + if (!f) { + return; + } + // printf("writeCollationReorderingTOML %s %s\n", name, collationType); + fprintf(f, "min_high_no_reorder = 0x%X\n", settings->minHighNoReorder); + usrc_writeArray(f, "reorder_table = [\n ", settings->reorderTable, 8, 256, " ", "\n]\n"); + usrc_writeArray(f, "reorder_ranges = [\n ", settings->reorderRanges, 32, settings->reorderRangesLength, " ", "\n]\n"); + fclose(f); +} + + +static void +writeCollationJamoTOML(const char* outputdir, const char* name, const char* collationType, const icu::CollationData* data, UErrorCode *status) { + FILE* f = openTOML(outputdir, name, collationType, "jamo", status); + if (!f) { + printf("writeCollationJamoTOML FAILED TO OPEN FILE %s %s\n", name, collationType); + return; + } + uint32_t jamo[0x1200-0x1100]; + for (UChar32 c = 0x1100; c < 0x1200; ++c) { + uint32_t ce32 = data->getCE32(c); + if (ce32 == icu::Collation::FALLBACK_CE32) { + ce32 = data->base->getCE32(c); + } + // Can't reject complex CE32s, because search collations have expansions. + // These expansions refer to the tailoring, which foils the reuse of the + // these jamo tables. + // XXX Figure out what to do. Perhaps instead of having Latin mini expansions, + // there should be Hangul mini expansions. + // XXX in any case, validate that modern jamo are self-contained. + jamo[c - 0x1100] = ce32; + + } + usrc_writeArray(f, "ce32s = [\n ", jamo, 32, 0x1200-0x1100, " ", "\n]\n"); + fclose(f); +} + +static UBool +convertTrie(const void *context, UChar32 start, UChar32 end, uint32_t value) { + if (start >= 0x1100 && start < 0x1200 && end >= 0x1100 && end < 0x1200) { + // Range entirely in conjoining jamo block. + return TRUE; + } + icu::IcuToolErrorCode status("genrb: convertTrie"); + umutablecptrie_setRange((UMutableCPTrie*)context, start, end, value, status); + return !U_FAILURE(*status); +} + +static void +writeCollationDataTOML(const char* outputdir, const char* name, const char* collationType, const icu::CollationData* data, UBool root, UChar32 diacriticLimit, UErrorCode *status) { + FILE* f = openTOML(outputdir, name, collationType, "data", status); + if (!f) { + return; + } + // printf("writeCollationDataTOML %s %s\n", name, collationType); + + icu::UnicodeSet tailoringSet; + + if (data->base) { + tailoringSet.addAll(*(data->unsafeBackwardSet)); + tailoringSet.removeAll(*(data->base->unsafeBackwardSet)); + } else { + tailoringSet.addAll(*(data->unsafeBackwardSet)); + } + + // Use the same value for out-of-range and default in the hope of not having to allocate + // different blocks, since ICU4X never does out-of-range queries. + uint32_t trieDefault = root ? icu::Collation::UNASSIGNED_CE32 : icu::Collation::FALLBACK_CE32; + icu::LocalUMutableCPTriePointer builder(umutablecptrie_open(trieDefault, trieDefault, status)); + + utrie2_enum(data->trie, NULL, &convertTrie, builder.getAlias()); + + // If the diacritic table was cut short, copy CE32s between the lowered + // limit and the max limit from the root to the tailoring. As of June 2022, + // no collation in CLDR needs this. + for (UChar32 c = diacriticLimit; c < ICU4X_DIACRITIC_LIMIT; ++c) { + if (c == 0x0340 || c == 0x0341 || c == 0x0343 || c == 0x0344) { + // These never occur in NFD data. + continue; + } + uint32_t ce32 = data->getCE32(c); + if (ce32 == icu::Collation::FALLBACK_CE32) { + ce32 = data->base->getCE32(c); + umutablecptrie_set(builder.getAlias(), c, ce32, status); + } + } + + // Ensure that the range covered by the diacritic table isn't duplicated + // in the trie. + for (UChar32 c = ICU4X_DIACRITIC_BASE; c < diacriticLimit; ++c) { + if (umutablecptrie_get(builder.getAlias(), c) != trieDefault) { + umutablecptrie_set(builder.getAlias(), c, trieDefault, status); + } + } + + icu::LocalUCPTriePointer utrie(umutablecptrie_buildImmutable( + builder.getAlias(), + UCPTRIE_TYPE_SMALL, + UCPTRIE_VALUE_BITS_32, + status)); + usrc_writeArray(f, "contexts = [\n ", data->contexts, 16, data->contextsLength, " ", "\n]\n"); + usrc_writeArray(f, "ce32s = [\n ", data->ce32s, 32, data->ce32sLength, " ", "\n]\n"); + usrc_writeArray(f, "ces = [\n ", data->ces, 64, data->cesLength, " ", "\n]\n"); + fprintf(f, "[trie]\n"); + usrc_writeUCPTrie(f, "trie", utrie.getAlias(), UPRV_TARGET_SYNTAX_TOML); + + fclose(f); +} + +static void +writeCollationSpecialPrimariesTOML(const char* outputdir, const char* name, const char* collationType, const icu::CollationData* data, UErrorCode *status) { + FILE* f = openTOML(outputdir, name, collationType, "prim", status); + if (!f) { + return; + } + // printf("writeCollationSpecialPrimariesTOML %s %s\n", name, collationType); + + uint16_t lastPrimaries[4]; + for (int32_t i = 0; i < 4; ++i) { + // getLastPrimaryForGroup subtracts one from a 16-bit value, so we add one + // back to get a value that fits in 16 bits. + lastPrimaries[i] = (uint16_t)((data->getLastPrimaryForGroup(UCOL_REORDER_CODE_FIRST + i) + 1) >> 16); + } + + uint32_t numericPrimary = data->numericPrimary; + if (numericPrimary & 0xFFFFFF) { + printf("Lower 24 bits set in numeric primary"); + *status = U_INTERNAL_PROGRAM_ERROR; + return; + } + + usrc_writeArray(f, "last_primaries = [\n ", lastPrimaries, 16, 4, " ", "\n]\n"); + fprintf(f, "numeric_primary = 0x%X\n", numericPrimary >> 24); + fclose(f); +} + +static void +writeCollationTOML(const char* outputdir, const char* name, const char* collationType, const icu::CollationData* data, const icu::CollationSettings* settings, UErrorCode *status) { + UBool tailored = FALSE; + UBool tailoredDiacritics = FALSE; + UBool lithuanianDotAbove = (uprv_strcmp(name, "lt") == 0); + UBool reordering = FALSE; + UBool isRoot = uprv_strcmp(name, "root") == 0; + UChar32 diacriticLimit = ICU4X_DIACRITIC_LIMIT; + if (!data->base && isRoot) { + diacriticLimit = writeCollationDiacriticsTOML(outputdir, name, collationType, data, status); + if (U_FAILURE(*status)) { + return; + } + writeCollationJamoTOML(outputdir, name, collationType, data, status); + if (U_FAILURE(*status)) { + return; + } + writeCollationSpecialPrimariesTOML(outputdir, name, collationType, data, status); + if (U_FAILURE(*status)) { + return; + } + } else if (data->base && !lithuanianDotAbove) { + for (UChar32 c = ICU4X_DIACRITIC_BASE; c < ICU4X_DIACRITIC_LIMIT; ++c) { + if (c == 0x0340 || c == 0x0341 || c == 0x0343 || c == 0x0344) { + // These never occur in NFD data. + continue; + } + uint32_t ce32 = data->getCE32(c); + if ((ce32 != icu::Collation::FALLBACK_CE32) && (ce32 != data->base->getCE32(c))) { + tailoredDiacritics = TRUE; + diacriticLimit = writeCollationDiacriticsTOML(outputdir, name, collationType, data, status); + if (U_FAILURE(*status)) { + return; + } + break; + } + } + } + + if (settings->hasReordering()) { + reordering = TRUE; + // Note: There are duplicate reorderings. Expecting the ICU4X provider + // to take care of deduplication. + writeCollationReorderingTOML(outputdir, name, collationType, settings, status); + if (U_FAILURE(*status)) { + return; + } + } + + // Write collation data if either base is non-null or the name is root. + // Languages that only reorder scripts are otherwise root-like and have + // null base. + if (data->base || isRoot) { + tailored = !isRoot; + writeCollationDataTOML(outputdir, name, collationType, data, (!data->base && isRoot), diacriticLimit, status); + if (U_FAILURE(*status)) { + return; + } + } + + uint32_t maxVariable = (uint32_t)settings->getMaxVariable(); + if (maxVariable >= 4) { + printf("Max variable out of range"); + *status = U_INTERNAL_PROGRAM_ERROR; + return; + } + + uint32_t metadataBits = maxVariable; + if (tailored) { + metadataBits |= (1 << 3); + } + if (tailoredDiacritics) { + metadataBits |= (1 << 4); + } + if (reordering) { + metadataBits |= (1 << 5); + } + if (lithuanianDotAbove) { + metadataBits |= (1 << 6); + } + if ((settings->options & icu::CollationSettings::BACKWARD_SECONDARY) != 0) { + metadataBits |= (1 << 7); + } + if (settings->getAlternateHandling() == UCOL_SHIFTED) { + metadataBits |= (1 << 8); + } + switch (settings->getCaseFirst()) { + case UCOL_OFF: + break; + case UCOL_UPPER_FIRST: + metadataBits |= (1 << 9); + metadataBits |= (1 << 10); + break; + case UCOL_LOWER_FIRST: + metadataBits |= (1 << 9); + break; + default: + *status = U_INTERNAL_PROGRAM_ERROR; + return; + } + + writeCollationMetadataTOML(outputdir, name, collationType, metadataBits, status); +} + #endif // !UCONFIG_NO_COLLATION static TableResource * @@ -952,9 +1287,9 @@ addCollation(ParseState* state, TableResource *result, const char *collationTyp res_close(result); return NULL; // TODO: use LocalUResourceBundlePointer for result } - icu::CollationBuilder builder(base, intStatus); - if(uprv_strncmp(collationType, "search", 6) == 0) { - builder.disableFastLatin(); // build fast-Latin table unless search collator + icu::CollationBuilder builder(base, state->icu4xMode, intStatus); + if(state->icu4xMode || (uprv_strncmp(collationType, "search", 6) == 0)) { + builder.disableFastLatin(); // build fast-Latin table unless search collator or ICU4X } LocalPointer t( builder.parseAndBuild(rules, version, &importer, &parseError, intStatus)); @@ -977,6 +1312,19 @@ addCollation(ParseState* state, TableResource *result, const char *collationTyp return NULL; } } + if (state->icu4xMode) { + char *nameWithoutSuffix = static_cast(uprv_malloc(uprv_strlen(state->filename) + 1)); + if (nameWithoutSuffix == NULL) { + *status = U_MEMORY_ALLOCATION_ERROR; + res_close(result); + return NULL; + } + uprv_strcpy(nameWithoutSuffix, state->filename); + *uprv_strrchr(nameWithoutSuffix, '.') = 0; + + writeCollationTOML(state->outputdir, nameWithoutSuffix, collationType, t->data, t->settings, status); + uprv_free(nameWithoutSuffix); + } icu::LocalMemory buffer; int32_t capacity = 100000; uint8_t *dest = buffer.allocateInsteadAndCopy(capacity); @@ -1966,7 +2314,7 @@ parseResource(ParseState* state, char *tag, const struct UString *comment, UErro /* parse the top-level resource */ struct SRBRoot * parse(UCHARBUF *buf, const char *inputDir, const char *outputDir, const char *filename, - UBool makeBinaryCollation, UBool omitCollationRules, UErrorCode *status) + UBool makeBinaryCollation, UBool omitCollationRules, UBool icu4xMode, UErrorCode *status) { struct UString *tokenValue; struct UString comment; @@ -1992,6 +2340,7 @@ parse(UCHARBUF *buf, const char *inputDir, const char *outputDir, const char *fi state.filename = filename; state.makeBinaryCollation = makeBinaryCollation; state.omitCollationRules = omitCollationRules; + state.icu4xMode = icu4xMode; ustr_init(&comment); expect(&state, TOK_STRING, &tokenValue, &comment, NULL, status); diff --git a/icu4c/source/tools/genrb/parse.h b/icu4c/source/tools/genrb/parse.h index bcd8e798f9a..fa90ede9d20 100644 --- a/icu4c/source/tools/genrb/parse.h +++ b/icu4c/source/tools/genrb/parse.h @@ -31,7 +31,7 @@ void initParser(); /* Parse a ResourceBundle text file */ struct SRBRoot* parse(UCHARBUF *buf, const char* inputDir, const char* outputDir, const char *filename, - UBool makeBinaryCollation, UBool omitCollationRules, UErrorCode *status); + UBool makeBinaryCollation, UBool omitCollationRules, UBool icu4xMode, UErrorCode *status); U_CDECL_END diff --git a/icu4c/source/tools/icuexportdata/icuexportdata.cpp b/icu4c/source/tools/icuexportdata/icuexportdata.cpp index 7431ac74ab8..20ec0324738 100644 --- a/icu4c/source/tools/icuexportdata/icuexportdata.cpp +++ b/icu4c/source/tools/icuexportdata/icuexportdata.cpp @@ -1,7 +1,15 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html +#include +#include +#include #include +#include +#include +#include +#include +#include #include #include #include "toolutil.h" @@ -15,7 +23,10 @@ #include "unicode/uscript.h" #include "unicode/putil.h" #include "unicode/umutablecptrie.h" +#include "unicode/ucharstriebuilder.h" #include "ucase.h" +#include "unicode/normalizer2.h" +#include "normalizer2impl.h" #include "writesrc.h" U_NAMESPACE_USE @@ -299,6 +310,470 @@ FILE* prepareOutputFile(const char* basename) { return f; } +#if !UCONFIG_NO_NORMALIZATION + +struct PendingDescriptor { + UChar32 scalar; + uint32_t descriptor; + UBool supplementary; +}; + +void writeCanonicalCompositions(USet* backwardCombiningStarters) { + IcuToolErrorCode status("icuexportdata: computeCanonicalCompositions"); + const char* basename = "compositions"; + FILE* f = prepareOutputFile(basename); + + LocalPointer backwardBuilder(new UCharsTrieBuilder(status), status); + + const int32_t DECOMPOSITION_BUFFER_SIZE = 20; + UChar32 utf32[DECOMPOSITION_BUFFER_SIZE]; + + const Normalizer2* nfc = Normalizer2::getNFCInstance(status); + for (UChar32 c = 0; c <= 0x10FFFF; ++c) { + if (c >= 0xD800 && c < 0xE000) { + // Surrogate + continue; + } + UnicodeString decomposition; + if (!nfc->getRawDecomposition(c, decomposition)) { + continue; + } + int32_t len = decomposition.toUTF32(utf32, DECOMPOSITION_BUFFER_SIZE, status); + if (len != 2) { + continue; + } + UChar32 starter = utf32[0]; + UChar32 second = utf32[1]; + UChar32 composite = nfc->composePair(starter, second); + if (composite < 0) { + continue; + } + if (c != composite) { + status.set(U_INTERNAL_PROGRAM_ERROR); + handleError(status, basename); + } + if (!u_getCombiningClass(second)) { + uset_add(backwardCombiningStarters, second); + } + if (composite >= 0xAC00 && composite <= 0xD7A3) { + // Hangul syllable + continue; + } + + UnicodeString backward; + backward.append(second); + backward.append(starter); + backwardBuilder->add(backward, int32_t(composite), status); + } + UnicodeString canonicalCompositionTrie; + backwardBuilder->buildUnicodeString(USTRINGTRIE_BUILD_SMALL, canonicalCompositionTrie, status); + + usrc_writeArray(f, "compositions = [\n ", canonicalCompositionTrie.getBuffer(), 16, canonicalCompositionTrie.length(), " ", "\n]\n"); + fclose(f); + handleError(status, basename); +} + +void writeDecompositionTables(const char* basename, const uint16_t* ptr16, size_t len16, const uint32_t* ptr32, size_t len32) { + FILE* f = prepareOutputFile(basename); + usrc_writeArray(f, "scalars16 = [\n ", ptr16, 16, len16, " ", "\n]\n"); + usrc_writeArray(f, "scalars32 = [\n ", ptr32, 32, len32, " ", "\n]\n"); + fclose(f); +} + +void writeDecompositionData(const char* basename, uint32_t baseSize16, uint32_t baseSize32, uint32_t supplementSize16, USet* uset, USet* reference, const std::vector& pendingTrieInsertions) { + IcuToolErrorCode status("icuexportdata: writeDecompositionData"); + FILE* f = prepareOutputFile(basename); + + // Zero is a magic number that means the character decomposes to itself. + LocalUMutableCPTriePointer builder(umutablecptrie_open(0, 0, status)); + + // Iterate backwards to insert lower code points in the trie first in case it matters + // for trie block allocation. + for (int32_t i = pendingTrieInsertions.size() - 1; i >= 0; --i) { + const PendingDescriptor& pending = pendingTrieInsertions[i]; + uint32_t additional = 0; + if (!(pending.descriptor & 0xFFFF0000)) { + uint32_t offset = pending.descriptor & 0xFFF; + if (!pending.supplementary) { + if (offset >= baseSize16) { + // This is a offset to supplementary 16-bit data. We have + // 16-bit base data and 32-bit base data before. However, + // the 16-bit base data length is already part of offset. + additional = baseSize32; + } + } else { + if (offset >= baseSize32) { + // This is an offset to supplementary 32-bit data. We have 16-bit + // base data, 32-bit base data, and 16-bit supplementary data before. + // However, the 32-bit base data length is already part + // of offset. + additional = baseSize16 + supplementSize16; + } else { + // This is an offset to 32-bit base data. We have 16-bit + // base data before. + additional = baseSize16; + } + } + if (offset + additional > 0xFFF) { + status.set(U_INTERNAL_PROGRAM_ERROR); + handleError(status, basename); + } + } + umutablecptrie_set(builder.getAlias(), pending.scalar, pending.descriptor + additional, status); + } + LocalUCPTriePointer utrie(umutablecptrie_buildImmutable( + builder.getAlias(), + trieType, + UCPTRIE_VALUE_BITS_32, + status)); + handleError(status, basename); + + if (!reference) { + usrc_writeUnicodeSet(f, uset, UPRV_TARGET_SYNTAX_TOML); + } else { + if (uset_contains(reference, 0xFF9E) || uset_contains(reference, 0xFF9F) || !uset_contains(reference, 0x0345)) { + // NFD expectations don't hold. The set must not contain the half-width + // kana voicing marks and must contain iota subscript. + status.set(U_INTERNAL_PROGRAM_ERROR); + handleError(status, basename); + } + + USet* halfWidthVoicing = uset_openEmpty(); + uset_add(halfWidthVoicing, 0xFF9E); + uset_add(halfWidthVoicing, 0xFF9F); + + USet* iotaSubscript = uset_openEmpty(); + uset_add(iotaSubscript, 0x0345); + + uint8_t flags = 0; + + USet* halfWidthCheck = uset_cloneAsThawed(uset); + uset_removeAll(halfWidthCheck, reference); + if (uset_equals(halfWidthCheck, halfWidthVoicing)) { + flags |= 1; + } else if (!uset_isEmpty(halfWidthCheck)) { + // The result was neither empty nor contained exactly + // the two half-width voicing marks. The ICU4X + // normalizer doesn't know how to deal with this case. + status.set(U_INTERNAL_PROGRAM_ERROR); + handleError(status, basename); + } + uset_close(halfWidthCheck); + + USet* iotaCheck = uset_cloneAsThawed(reference); + uset_removeAll(iotaCheck, uset); + if (uset_equals(iotaCheck, iotaSubscript)) { + flags |= (1 << 1); + } else if (!uset_isEmpty(iotaCheck)) { + // The result was neither empty nor contained exactly + // the iota subscript. The ICU4X normalizer doesn't + // know how to deal with this case. + status.set(U_INTERNAL_PROGRAM_ERROR); + handleError(status, basename); + } + uset_close(halfWidthCheck); + + uset_close(iotaSubscript); + uset_close(halfWidthVoicing); + + fprintf(f, "flags = 0x%X\n", flags); + } + fprintf(f, "[trie]\n"); + usrc_writeUCPTrie(f, "trie", utrie.getAlias(), UPRV_TARGET_SYNTAX_TOML); + fclose(f); + handleError(status, basename); +} + +void writePotentialCompositionPassThrough(const char* basename, const Normalizer2* norm, const USet* decompositionStartsWithNonStarter, const USet* decompositionStartsWithBackwardCombiningStarter, USet* potentialPassthroughAndNotBackwardCombining) { + IcuToolErrorCode status("icuexportdata: writePotentialCompositionPassThrough"); + FILE* f = prepareOutputFile(basename); + + const Normalizer2* nfc = nullptr; + if (!norm) { + // UTS 46 case + norm = Normalizer2::getInstance(NULL, "uts46", UNORM2_COMPOSE, status); + nfc = Normalizer2::getNFCInstance(status); + } + for (UChar32 c = 0; c <= 0x10FFFF; ++c) { + if (c >= 0xD800 && c < 0xE000) { + // Surrogate + continue; + } + if (uset_contains(decompositionStartsWithNonStarter, c) || uset_contains(decompositionStartsWithBackwardCombiningStarter, c)) { + continue; + } + UnicodeString src; + UnicodeString dst; + src.append(c); + norm->normalize(src, dst, status); + if (nfc && (dst.isEmpty() || (dst == u"\uFFFD" && c != 0xFFFD))) { + // UTS 46 ignored and disallowed fall back to NFC for data + // overlap. + dst.truncate(0); + nfc->normalize(src, dst, status); + } + if (src == dst) { + uset_add(potentialPassthroughAndNotBackwardCombining, c); + } + } + + // The surrogate range forms a useless discontinuity. The code + // that reads from the set never looks up by surrage, so let's + // put the surrogate range in the set as a micro-optimization. + uset_addRange(potentialPassthroughAndNotBackwardCombining, 0xD800, 0xDFFF); + + usrc_writeUnicodeSet(f, potentialPassthroughAndNotBackwardCombining, UPRV_TARGET_SYNTAX_TOML); + fclose(f); + handleError(status, basename); +} + +// Computes data for canonical decompositions +void computeDecompositions(const char* basename, const USet* backwardCombiningStarters, std::vector& storage16, std::vector& storage32, USet* decompositionStartsWithNonStarter, USet* decompositionStartsWithBackwardCombiningStarter, std::vector& pendingTrieInsertions) { + IcuToolErrorCode status("icuexportdata: computeDecompositions"); + const Normalizer2* mainNormalizer; + const Normalizer2* nfdNormalizer = Normalizer2::getNFDInstance(status); + if (uprv_strcmp(basename, "nfkd") == 0) { + mainNormalizer = Normalizer2::getNFKDInstance(status); + } else if (uprv_strcmp(basename, "uts46d") == 0) { + mainNormalizer = Normalizer2::getInstance(NULL, "uts46", UNORM2_COMPOSE, status); + } else { + mainNormalizer = nfdNormalizer; + } + + // Max length as of Unicode 14 is 4 for NFD. For NFKD the max + // is 18 (U+FDFA; special-cased), and the next longest is 8 (U+FDFB). + const int32_t LONGEST_ENCODABLE_LENGTH_16 = 9; + const int32_t LONGEST_ENCODABLE_LENGTH_32 = 8; + const int32_t DECOMPOSITION_BUFFER_SIZE = 20; + UChar32 utf32[DECOMPOSITION_BUFFER_SIZE]; + + // Iterate over all scalar values excluding Hangul syllables. + // + // We go backwards in order to better find overlapping decompositions. + // + // As of Unicode 14: + // Iterate forward without overlap search: + // nfd: 16 size: 896, 32 size: 173 + // nfkd: 16 size: 3854, 32 size: 179 + // + // Iterate forward with overlap search: + // nfd: 16 size: 888, 32 size: 173 + // nfkd: 16 size: 3266, 32 size: 179 + // + // Iterate backward with overlap search: + // nfd: 16 size: 776, 32 size: 173 + // nfkd: 16 size: 2941, 32 size: 179 + // + // UChar32 is signed! + for (UChar32 c = 0x10FFFF; c >= 0; --c) { + if (c >= 0xAC00 && c <= 0xD7A3) { + // Hangul syllable + continue; + } + if (c >= 0xD800 && c < 0xE000) { + // Surrogate + continue; + } + UnicodeString src; + UnicodeString dst; + src.append(c); + if (mainNormalizer != nfdNormalizer) { + UnicodeString inter; + mainNormalizer->normalize(src, inter, status); + nfdNormalizer->normalize(inter, dst, status); + } else { + nfdNormalizer->normalize(src, dst, status); + } + int32_t len = dst.toUTF32(utf32, DECOMPOSITION_BUFFER_SIZE, status); + if (!len || (len == 1 && utf32[0] == 0xFFFD && c != 0xFFFD)) { + // Characters that normalize to nothing or to U+FFFD (without the + // input being U+FFFD) in ICU4C's UTS 46 normalization normalize + // as in NFD in ICU4X's UTF 46 normalization in the interest + // of data size and ICU4X's normalizer being unable to handle + // normalizing to nothing. + // When UTS 46 is implemented on top of ICU4X, a preprocessing + // step is supposed to remove these characters before the + // normalization step. + if (uprv_strcmp(basename, "uts46d") != 0) { + status.set(U_INTERNAL_PROGRAM_ERROR); + handleError(status, basename); + } + nfdNormalizer->normalize(src, dst, status); + len = dst.toUTF32(utf32, DECOMPOSITION_BUFFER_SIZE, status); + if (!len || (len == 1 && utf32[0] == 0xFFFD && c != 0xFFFD)) { + status.set(U_INTERNAL_PROGRAM_ERROR); + handleError(status, basename); + } + } + if (len > DECOMPOSITION_BUFFER_SIZE) { + status.set(U_INTERNAL_PROGRAM_ERROR); + handleError(status, basename); + } + bool startsWithNonStarter = u_getCombiningClass(utf32[0]); + if (startsWithNonStarter) { + uset_add(decompositionStartsWithNonStarter, c); + } else if (uset_contains(backwardCombiningStarters, c)) { + uset_add(decompositionStartsWithBackwardCombiningStarter, c); + } + if (mainNormalizer != nfdNormalizer) { + UnicodeString nfd; + nfdNormalizer->normalize(src, nfd, status); + if (dst == nfd) { + continue; + } + } else { + if (src == dst) { + continue; + } + } + if (startsWithNonStarter && !(c == 0x0340 || c == 0x0341 || c == 0x0343 || c == 0x0344 || c == 0x0F73 || c == 0x0F75 || c == 0x0F81 || c == 0xFF9E || c == 0xFF9F)) { + // A character whose decomposition starts with a non-starter and isn't the same as the character itself and isn't already hard-coded into ICU4X. + status.set(U_INTERNAL_PROGRAM_ERROR); + handleError(status, basename); + } + if (len == 1 && utf32[0] <= 0xFFFF) { + if (utf32[0] == 1) { + // 1 is reserved as a marker for the expansion of U+FDFA. + status.set(U_INTERNAL_PROGRAM_ERROR); + handleError(status, basename); + } + pendingTrieInsertions.push_back({c, uint32_t(utf32[0]) << 16, FALSE}); + } else if (len == 2 && utf32[0] <= 0xFFFF && utf32[1] <= 0xFFFF && !u_getCombiningClass(utf32[0]) && u_getCombiningClass(utf32[1])) { + pendingTrieInsertions.push_back({c, (uint32_t(utf32[0]) << 16) | uint32_t(utf32[1]), FALSE}); + } else { + UBool supplementary = FALSE; + UBool nonInitialStarter = FALSE; + for (int32_t i = 0; i < len; ++i) { + if (utf32[i] > 0xFFFF) { + supplementary = TRUE; + } + if (utf32[i] == 0) { + status.set(U_INTERNAL_PROGRAM_ERROR); + handleError(status, basename); + } + if (i != 0 && !u_getCombiningClass(utf32[i])) { + nonInitialStarter = TRUE; + } + } + if (!supplementary) { + if (len > LONGEST_ENCODABLE_LENGTH_16 || !len || len == 1) { + if (len == 18 && c == 0xFDFA) { + // Special marker for the one character whose decomposition + // is too long. + pendingTrieInsertions.push_back({c, 1 << 16, supplementary}); + continue; + } else { + status.set(U_INTERNAL_PROGRAM_ERROR); + handleError(status, basename); + } + } + } else if (len > LONGEST_ENCODABLE_LENGTH_32 || !len) { + status.set(U_INTERNAL_PROGRAM_ERROR); + handleError(status, basename); + } + // Complex decomposition + // Format for 16-bit value: + // 15..13: length minus two for 16-bit case and length minus one for + // the 32-bit case. Length 8 needs to fit in three bits in + // the 16-bit case, and this way the value is future-proofed + // up to 9 in the 16-bit case. Zero is unused and length one + // in the 16-bit case goes directly into the trie. + // 12: 1 if all trailing characters are guaranteed non-starters, + // 0 if no guarantees about non-starterness. + // Note: The bit choice is this way around to allow for + // dynamically falling back to not having this but instead + // having one more bit for length by merely choosing + // different masks. + // 11..0: Start offset in storage. The offset is to the logical + // sequence of scalars16, scalars32, supplementary_scalars16, + // supplementary_scalars32. + uint32_t descriptor = uint32_t(!nonInitialStarter) << 12; + if (!supplementary) { + descriptor |= (uint32_t(len) - 2) << 13; + } else { + descriptor |= (uint32_t(len) - 1) << 13; + } + if (descriptor & 0xFFF) { + status.set(U_INTERNAL_PROGRAM_ERROR); + handleError(status, basename); + } + size_t index = 0; + bool writeToStorage = FALSE; + // Sadly, C++ lacks break and continue by label, so using goto in the + // inner loops to break or continue the outer loop. + if (!supplementary) { + outer16: for (;;) { + if (index == storage16.size()) { + writeToStorage = TRUE; + break; + } + if (storage16[index] == utf32[0]) { + for (int32_t i = 1; i < len; ++i) { + if (storage16[index + i] != uint32_t(utf32[i])) { + ++index; + // continue outer + goto outer16; + } + } + // break outer + goto after; + } + ++index; + } + } else { + outer32: for (;;) { + if (index == storage32.size()) { + writeToStorage = TRUE; + break; + } + if (storage32[index] == uint32_t(utf32[0])) { + for (int32_t i = 1; i < len; ++i) { + if (storage32[index + i] != uint32_t(utf32[i])) { + ++index; + // continue outer + goto outer32; + } + } + // break outer + goto after; + } + ++index; + } + } + after: + if (index > 0xFFF) { + status.set(U_INTERNAL_PROGRAM_ERROR); + handleError(status, basename); + } + descriptor |= uint32_t(index); + if (!descriptor || descriptor > 0xFFFF) { + // > 0xFFFF should never happen if the code above is correct. + // == 0 should not happen due to the nature of the data. + status.set(U_INTERNAL_PROGRAM_ERROR); + handleError(status, basename); + } + if (writeToStorage) { + if (!supplementary) { + for (int32_t i = 0; i < len; ++i) { + storage16.push_back(uint16_t(utf32[i])); + } + } else { + for (int32_t i = 0; i < len; ++i) { + storage32.push_back(uint32_t(utf32[i])); + } + } + } + pendingTrieInsertions.push_back({c, descriptor, supplementary}); + } + } + if (storage16.size() + storage32.size() > 0xFFF) { + status.set(U_INTERNAL_PROGRAM_ERROR); + } + handleError(status, basename); +} + +#endif // !UCONFIG_NO_NORMALIZATION + enum { OPT_HELP_H, OPT_HELP_QUESTION_MARK, @@ -341,7 +816,7 @@ void printHelp(FILE* stdfile, const char* program) { "options:\n" "\t-h or -? or --help this usage text\n" "\t-V or --version show a version message\n" - "\t-m or --mode mode: currently only 'uprops' and 'ucase', but more may be added\n" + "\t-m or --mode mode: currently only 'uprops', 'ucase', and 'norm', but more may be added\n" "\t --trie-type set the trie type (small or fast, default small)\n" "\t-d or --destdir destination directory, followed by the path\n" "\t --all write out all properties known to icuexportdata\n" @@ -387,6 +862,46 @@ int exportUprops(int argc, char* argv[]) { } } + if (propNames.empty() + || options[OPT_HELP_H].doesOccur + || options[OPT_HELP_QUESTION_MARK].doesOccur + || !options[OPT_MODE].doesOccur) { + FILE *stdfile=argc<0 ? stderr : stdout; + fprintf(stdfile, + "usage: %s -m uprops [-options] [--all | properties...]\n" + "\tdump Unicode property data to .toml files\n" + "options:\n" + "\t-h or -? or --help this usage text\n" + "\t-V or --version show a version message\n" + "\t-m or --mode mode: currently only 'uprops', but more may be added\n" + "\t --trie-type set the trie type (small or fast, default small)\n" + "\t-d or --destdir destination directory, followed by the path\n" + "\t --all write out all properties known to icuexportdata\n" + "\t --index write an _index.toml summarizing all data exported\n" + "\t-c or --copyright include a copyright notice\n" + "\t-v or --verbose Turn on verbose output\n" + "\t-q or --quiet do not display warnings and progress\n", + argv[0]); + return argc<0 ? U_ILLEGAL_ARGUMENT_ERROR : U_ZERO_ERROR; + } + + const char* mode = options[OPT_MODE].value; + if (uprv_strcmp(mode, "uprops") != 0) { + fprintf(stderr, "Invalid option for --mode (must be uprops)\n"); + return U_ILLEGAL_ARGUMENT_ERROR; + } + + if (options[OPT_TRIE_TYPE].doesOccur) { + if (uprv_strcmp(options[OPT_TRIE_TYPE].value, "fast") == 0) { + trieType = UCPTRIE_TYPE_FAST; + } else if (uprv_strcmp(options[OPT_TRIE_TYPE].value, "small") == 0) { + trieType = UCPTRIE_TYPE_SMALL; + } else { + fprintf(stderr, "Invalid option for --trie-type (must be small or fast)\n"); + return U_ILLEGAL_ARGUMENT_ERROR; + } + } + for (const char* propName : propNames) { UProperty propEnum = u_getPropertyEnum(propName); if (propEnum == UCHAR_INVALID_CODE) { @@ -505,6 +1020,81 @@ int exportCase(int argc, char* argv[]) { return 0; } +#if !UCONFIG_NO_NORMALIZATION + +int exportNorm() { + IcuToolErrorCode status("icuexportdata: exportNorm"); + USet* backwardCombiningStarters = uset_openEmpty(); + writeCanonicalCompositions(backwardCombiningStarters); + + std::vector storage16; + std::vector storage32; + + USet* nfdDecompositionStartsWithNonStarter = uset_openEmpty(); + USet* nfdDecompositionStartsWithBackwardCombiningStarter = uset_openEmpty(); + std::vector nfdPendingTrieInsertions; + computeDecompositions("nfd", backwardCombiningStarters, storage16, storage32, nfdDecompositionStartsWithNonStarter, nfdDecompositionStartsWithBackwardCombiningStarter, nfdPendingTrieInsertions); + + uint32_t baseSize16 = storage16.size(); + uint32_t baseSize32 = storage32.size(); + + USet* nfkdDecompositionStartsWithNonStarter = uset_openEmpty(); + USet* nfkdDecompositionStartsWithBackwardCombiningStarter = uset_openEmpty(); + std::vector nfkdPendingTrieInsertions; + computeDecompositions("nfkd", backwardCombiningStarters, storage16, storage32, nfkdDecompositionStartsWithNonStarter, nfkdDecompositionStartsWithBackwardCombiningStarter, nfkdPendingTrieInsertions); + + USet* uts46DecompositionStartsWithNonStarter = uset_openEmpty(); + USet* uts46DecompositionStartsWithBackwardCombiningStarter = uset_openEmpty(); + std::vector uts46PendingTrieInsertions; + computeDecompositions("uts46d", backwardCombiningStarters, storage16, storage32, uts46DecompositionStartsWithNonStarter, uts46DecompositionStartsWithBackwardCombiningStarter, uts46PendingTrieInsertions); + + uint32_t supplementSize16 = storage16.size() - baseSize16; + uint32_t supplementSize32 = storage32.size() - baseSize32; + + writeDecompositionData("nfd", baseSize16, baseSize32, supplementSize16, nfdDecompositionStartsWithNonStarter, nullptr, nfdPendingTrieInsertions); + writeDecompositionData("nfkd", baseSize16, baseSize32, supplementSize16, nfkdDecompositionStartsWithNonStarter, nfdDecompositionStartsWithNonStarter, nfkdPendingTrieInsertions); + writeDecompositionData("uts46d", baseSize16, baseSize32, supplementSize16, uts46DecompositionStartsWithNonStarter, nfdDecompositionStartsWithNonStarter, uts46PendingTrieInsertions); + + writeDecompositionTables("nfdex", storage16.data(), baseSize16, storage32.data(), baseSize32); + writeDecompositionTables("nfkdex", storage16.data() + baseSize16, supplementSize16, storage32.data() + baseSize32, supplementSize32); + + USet* nfcPotentialPassthroughAndNotBackwardCombining = uset_openEmpty(); + const Normalizer2* nfc = Normalizer2::getNFCInstance(status); + writePotentialCompositionPassThrough("nfc", nfc, nfdDecompositionStartsWithNonStarter, nfdDecompositionStartsWithBackwardCombiningStarter, nfcPotentialPassthroughAndNotBackwardCombining); + + USet* nfkcPotentialPassthroughAndNotBackwardCombining = uset_openEmpty(); + const Normalizer2* nfkc = Normalizer2::getNFKCInstance(status); + writePotentialCompositionPassThrough("nfkc", nfkc, nfkdDecompositionStartsWithNonStarter, nfkdDecompositionStartsWithBackwardCombiningStarter, nfkcPotentialPassthroughAndNotBackwardCombining); + + USet* uts46PotentialPassthroughAndNotBackwardCombining = uset_openEmpty(); + writePotentialCompositionPassThrough("uts46", nullptr, uts46DecompositionStartsWithNonStarter, uts46DecompositionStartsWithBackwardCombiningStarter, uts46PotentialPassthroughAndNotBackwardCombining); + + // Check that NFKC set has no characters that NFC doesn't also have. + uset_removeAll(nfkcPotentialPassthroughAndNotBackwardCombining, nfcPotentialPassthroughAndNotBackwardCombining); + if (!uset_isEmpty(nfkcPotentialPassthroughAndNotBackwardCombining)) { + status.set(U_INTERNAL_PROGRAM_ERROR); + handleError(status, "exportNorm"); + } + + uset_close(nfcPotentialPassthroughAndNotBackwardCombining); + uset_close(nfkcPotentialPassthroughAndNotBackwardCombining); + uset_close(uts46PotentialPassthroughAndNotBackwardCombining); + + uset_close(nfdDecompositionStartsWithNonStarter); + uset_close(nfkdDecompositionStartsWithNonStarter); + uset_close(uts46DecompositionStartsWithNonStarter); + + uset_close(nfdDecompositionStartsWithBackwardCombiningStarter); + uset_close(nfkdDecompositionStartsWithBackwardCombiningStarter); + uset_close(uts46DecompositionStartsWithBackwardCombiningStarter); + + uset_close(backwardCombiningStarters); + handleError(status, "exportNorm"); + return 0; +} + +#endif // !UCONFIG_NO_NORMALIZATION + int main(int argc, char* argv[]) { U_MAIN_INIT_ARGS(argc, argv); @@ -553,12 +1143,20 @@ int main(int argc, char* argv[]) { } const char* mode = options[OPT_MODE].value; + if (uprv_strcmp(mode, "norm") == 0) { +#if !UCONFIG_NO_NORMALIZATION + return exportNorm(); +#else + fprintf(stderr, "Exporting normalization data not supported when compiling without normalization support.\n"); + return U_ILLEGAL_ARGUMENT_ERROR; +#endif + } if (uprv_strcmp(mode, "uprops") == 0) { return exportUprops(argc, argv); } else if (uprv_strcmp(mode, "ucase") == 0) { return exportCase(argc, argv); } - fprintf(stderr, "Invalid option for --mode (must be uprops or ucase)\n"); + fprintf(stderr, "Invalid option for --mode (must be uprops, ucase, or norm)\n"); return U_ILLEGAL_ARGUMENT_ERROR; } diff --git a/icu4c/source/tools/toolutil/writesrc.cpp b/icu4c/source/tools/toolutil/writesrc.cpp index 143254a7f34..4e8989a02c2 100644 --- a/icu4c/source/tools/toolutil/writesrc.cpp +++ b/icu4c/source/tools/toolutil/writesrc.cpp @@ -19,6 +19,7 @@ */ #include +#include #include #include "unicode/utypes.h" #include "unicode/putil.h" @@ -143,12 +144,14 @@ usrc_writeArray(FILE *f, const uint8_t *p8; const uint16_t *p16; const uint32_t *p32; - uint32_t value; + const int64_t *p64; // Signed due to TOML! + int64_t value; // Signed due to TOML! int32_t i, col; p8=NULL; p16=NULL; p32=NULL; + p64=NULL; switch(width) { case 8: p8=(const uint8_t *)p; @@ -159,6 +162,9 @@ usrc_writeArray(FILE *f, case 32: p32=(const uint32_t *)p; break; + case 64: + p64=(const int64_t *)p; + break; default: fprintf(stderr, "usrc_writeArray(width=%ld) unrecognized width\n", (long)width); return; @@ -186,11 +192,14 @@ usrc_writeArray(FILE *f, case 32: value=p32[i]; break; + case 64: + value=p64[i]; + break; default: value=0; /* unreachable */ break; } - fprintf(f, value<=9 ? "%lu" : "0x%lx", (unsigned long)value); + fprintf(f, value<=9 ? "%" PRId64 : "0x%" PRIx64, value); } if(postfix!=NULL) { fputs(postfix, f); diff --git a/icu4c/source/tools/toolutil/writesrc.h b/icu4c/source/tools/toolutil/writesrc.h index 784a9b9c7a7..9c0be5a1007 100644 --- a/icu4c/source/tools/toolutil/writesrc.h +++ b/icu4c/source/tools/toolutil/writesrc.h @@ -69,7 +69,7 @@ usrc_writeFileNameGeneratedBy( const char *generator); /** - * Writes the contents of an array of 8/16/32-bit words. + * Writes the contents of an array of 8/16/32/64-bit words. * The prefix and postfix are optional (can be NULL) and are written first/last. * The prefix may contain a %ld or similar field for the array length. * The {} and declaration etc. need to be included in prefix/postfix or diff --git a/tools/unicode/c/genuca/collationbasedatabuilder.cpp b/tools/unicode/c/genuca/collationbasedatabuilder.cpp index c92ebd9aadc..b20d0310e89 100644 --- a/tools/unicode/c/genuca/collationbasedatabuilder.cpp +++ b/tools/unicode/c/genuca/collationbasedatabuilder.cpp @@ -83,14 +83,15 @@ binarySearch(const UVector64 &list, int64_t ce) { } // namespace -CollationBaseDataBuilder::CollationBaseDataBuilder(UErrorCode &errorCode) - : CollationDataBuilder(errorCode), +CollationBaseDataBuilder::CollationBaseDataBuilder(UBool icu4xMode, UErrorCode &errorCode) + : CollationDataBuilder(icu4xMode, errorCode), numericPrimary(0x12000000), firstHanPrimary(0), lastHanPrimary(0), hanStep(2), rootElements(errorCode), scriptStartsLength(1) { uprv_memset(scriptsIndex, 0, sizeof(scriptsIndex)); uprv_memset(scriptStarts, 0, sizeof(scriptStarts)); + this->icu4xMode = icu4xMode; } CollationBaseDataBuilder::~CollationBaseDataBuilder() { @@ -119,7 +120,9 @@ CollationBaseDataBuilder::init(UErrorCode &errorCode) { trie = utrie2_open(Collation::UNASSIGNED_CE32, Collation::FFFD_CE32, &errorCode); // Preallocate trie blocks for Latin in the hope that proximity helps with CPU caches. - for(UChar32 c = 0; c < 0x180; ++c) { + // In the ICU4X case, only preallocate ASCII, because we don't store CE32s for + // precomposed characters. + for(UChar32 c = 0; c < (icu4xMode ? 0x80 : 0x180); ++c) { utrie2_set32(trie, c, Collation::UNASSIGNED_CE32, &errorCode); } @@ -128,8 +131,10 @@ CollationBaseDataBuilder::init(UErrorCode &errorCode) { // Some code assumes that the root first primary CE is the "space first primary" // from FractionalUCA.txt. - uint32_t hangulCE32 = Collation::makeCE32FromTagAndIndex(Collation::HANGUL_TAG, 0); - utrie2_setRange32(trie, Hangul::HANGUL_BASE, Hangul::HANGUL_END, hangulCE32, true, &errorCode); + if (!icu4xMode) { + uint32_t hangulCE32 = Collation::makeCE32FromTagAndIndex(Collation::HANGUL_TAG, 0); + utrie2_setRange32(trie, Hangul::HANGUL_BASE, Hangul::HANGUL_END, hangulCE32, true, &errorCode); + } // Add a mapping for the first-unassigned boundary, // which is the AlphabeticIndex overflow boundary. diff --git a/tools/unicode/c/genuca/collationbasedatabuilder.h b/tools/unicode/c/genuca/collationbasedatabuilder.h index c2c9564bae9..6d57b9c43f0 100644 --- a/tools/unicode/c/genuca/collationbasedatabuilder.h +++ b/tools/unicode/c/genuca/collationbasedatabuilder.h @@ -37,7 +37,7 @@ U_NAMESPACE_BEGIN */ class U_I18N_API CollationBaseDataBuilder : public CollationDataBuilder { public: - CollationBaseDataBuilder(UErrorCode &errorCode); + CollationBaseDataBuilder(UBool icu4xMode, UErrorCode &errorCode); virtual ~CollationBaseDataBuilder(); diff --git a/tools/unicode/c/genuca/genuca.cpp b/tools/unicode/c/genuca/genuca.cpp index baa27c3f2ed..41e253f3cd1 100644 --- a/tools/unicode/c/genuca/genuca.cpp +++ b/tools/unicode/c/genuca/genuca.cpp @@ -24,6 +24,7 @@ #define U_NO_DEFAULT_INCLUDE_UTF_HEADERS 1 #include +#include #include "unicode/utypes.h" #include "unicode/errorcode.h" #include "unicode/localpointer.h" @@ -69,7 +70,7 @@ enum HanOrderValue { HAN_RADICAL_STROKE }; -static UBool beVerbose=FALSE, withCopyright=TRUE; +static UBool beVerbose=FALSE, withCopyright=TRUE, icu4xMode=FALSE; static HanOrderValue hanOrder = HAN_NO_ORDER; @@ -832,6 +833,11 @@ parseFractionalUCA(const char *filename, int32_t lineNumber = 0; char buffer[30000]; + const Normalizer2* norm = nullptr; + if (icu4xMode) { + norm = Normalizer2::getNFDInstance(*status); + } + UChar32 maxCodePoint = 0; while(!feof(data)) { if(U_FAILURE(*status)) { @@ -889,6 +895,24 @@ parseFractionalUCA(const char *filename, // CollationBaseDataBuilder::init() maps them to special CEs. // Except for U+FFFE, these have higher primaries in v2 than in FractionalUCA.txt. if(0xfffd <= c && c <= 0xffff) { continue; } + if (icu4xMode) { + if (c >= 0xAC00 && c <= 0xD7A3) { + // Hangul syllable + continue; + } + if (c >= 0xD800 && c < 0xE000) { + // Surrogate + continue; + } + UnicodeString src; + UnicodeString dst; + src.append(c); + norm->normalize(src, dst, *status); + if (src != dst) { + // c decomposed, skip it + continue; + } + } if(s.length() >= 2 && c == 0xFDD1) { UChar32 c2 = s.char32At(1); int32_t script = getCharScript(c2); @@ -923,7 +947,6 @@ parseFractionalUCA(const char *filename, (int)lineNumber, filename, line); exit(U_INVALID_FORMAT_ERROR); } - builder.add(prefix, s, ces, cesLength, *status); } } @@ -1126,8 +1149,9 @@ buildAndWriteBaseData(CollationBaseDataBuilder &builder, CollationTailoring::makeBaseVersion(UCAVersion, ucaDataInfo.dataVersion); const char *dataName = - hanOrder == HAN_IMPLICIT ? "ucadata-implicithan" : - "ucadata-unihan"; + hanOrder == HAN_IMPLICIT ? + (icu4xMode ? "ucadata-implicithan-icu4x" : "ucadata-implicithan") : + (icu4xMode ? "ucadata-unihan-icu4x" : "ucadata-unihan"); UNewDataMemory *pData=udata_create(path, "icu", dataName, &ucaDataInfo, withCopyright ? U_COPYRIGHT_STRING : NULL, &errorCode); if(U_FAILURE(errorCode)) { @@ -1275,7 +1299,7 @@ parseAndWriteCollationRootData( const char *sourceCodePath, UErrorCode &errorCode) { if(U_FAILURE(errorCode)) { return; } - CollationBaseDataBuilder builder(errorCode); + CollationBaseDataBuilder builder(icu4xMode, errorCode); builder.init(errorCode); parseFractionalUCA(fracUCAPath, builder, &errorCode); buildAndWriteBaseData(builder, binaryDataPath, errorCode); @@ -1289,7 +1313,8 @@ enum { HELP_QUESTION_MARK, VERBOSE, COPYRIGHT, - HAN_ORDER + HAN_ORDER, + ICU4X }; static UOption options[]={ @@ -1297,7 +1322,8 @@ static UOption options[]={ UOPTION_HELP_QUESTION_MARK, UOPTION_VERBOSE, UOPTION_COPYRIGHT, - UOPTION_DEF("hanOrder", '\x01', UOPT_REQUIRES_ARG) + UOPTION_DEF("hanOrder", '\x01', UOPT_REQUIRES_ARG), + UOPTION_DEF("icu4x", 'X', UOPT_NO_ARG) }; extern "C" int @@ -1348,6 +1374,7 @@ main(int argc, char* argv[]) { beVerbose=options[VERBOSE].doesOccur; withCopyright=options[COPYRIGHT].doesOccur; + icu4xMode=options[ICU4X].doesOccur; IcuToolErrorCode errorCode("genuca");