X-Git-Url: https://git.saurik.com/apple/icu.git/blobdiff_plain/4388f060552cc537e71e957d32f35e9d75a61233..ef6cf650f4a75c3f97de06b51fa104f2069b9ea2:/icuSources/common/normalizer2impl.h diff --git a/icuSources/common/normalizer2impl.h b/icuSources/common/normalizer2impl.h index f44e8277..eb026dbe 100644 --- a/icuSources/common/normalizer2impl.h +++ b/icuSources/common/normalizer2impl.h @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 2009-2011, International Business Machines +* Copyright (C) 2009-2014, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -22,7 +22,6 @@ #if !UCONFIG_NO_NORMALIZATION #include "unicode/normalizer2.h" -#include "unicode/udata.h" #include "unicode/unistr.h" #include "unicode/unorm.h" #include "unicode/utf16.h" @@ -34,15 +33,19 @@ U_NAMESPACE_BEGIN struct CanonIterData; -class Hangul { +class U_COMMON_API Hangul { public: /* Korean Hangul and Jamo constants */ enum { JAMO_L_BASE=0x1100, /* "lead" jamo */ + JAMO_L_END=0x1112, JAMO_V_BASE=0x1161, /* "vowel" jamo */ + JAMO_V_END=0x1175, JAMO_T_BASE=0x11a7, /* "trail" jamo */ + JAMO_T_END=0x11c2, HANGUL_BASE=0xac00, + HANGUL_END=0xd7a3, JAMO_L_COUNT=19, JAMO_V_COUNT=21, @@ -110,7 +113,7 @@ private: class Normalizer2Impl; -class ReorderingBuffer : public UMemory { +class U_COMMON_API ReorderingBuffer : public UMemory { public: ReorderingBuffer(const Normalizer2Impl &ni, UnicodeString &dest) : impl(ni), str(dest), @@ -213,15 +216,17 @@ private: UChar *codePointStart, *codePointLimit; }; -class U_COMMON_API Normalizer2Impl : public UMemory { +class U_COMMON_API Normalizer2Impl : public UObject { public: - Normalizer2Impl() : memory(NULL), normTrie(NULL) { - canonIterDataSingleton.fInstance=NULL; + Normalizer2Impl() : normTrie(NULL), fCanonIterData(NULL) { + fCanonIterDataInitOnce.reset(); } - ~Normalizer2Impl(); + virtual ~Normalizer2Impl(); - void load(const char *packageName, const char *name, UErrorCode &errorCode); + void init(const int32_t *inIndexes, const UTrie2 *inTrie, + const uint16_t *inExtraData, const uint8_t *inSmallFCD); + void addLcccChars(UnicodeSet &set) const; void addPropertyStarts(const USetAdder *sa, UErrorCode &errorCode) const; void addCanonIterPropertyStarts(const USetAdder *sa, UErrorCode &errorCode) const; @@ -242,6 +247,7 @@ public: return UNORM_NO; } } + UBool isAlgorithmicNoNo(uint16_t norm16) const { return limitNoNo<=norm16 && norm16=minMaybeYes; } static UBool isInert(uint16_t norm16) { return norm16==0; } @@ -566,8 +581,7 @@ private: int32_t getCanonValue(UChar32 c) const; const UnicodeSet &getCanonStartSet(int32_t n) const; - UDataMemory *memory; - UVersionInfo dataVersion; + // UVersionInfo dataVersion; // Code point thresholds for quick check codes. UChar32 minDecompNoCP; @@ -580,13 +594,15 @@ private: uint16_t limitNoNo; uint16_t minMaybeYes; - UTrie2 *normTrie; + const UTrie2 *normTrie; const uint16_t *maybeYesCompositions; const uint16_t *extraData; // mappings and/or compositions for yesYes, yesNo & noNo characters const uint8_t *smallFCD; // [0x100] one bit per 32 BMP code points, set if any FCD!=0 uint8_t tccc180[0x180]; // tccc values for U+0000..U+017F - SimpleSingleton canonIterDataSingleton; +public: // CanonIterData is public to allow access from C callback functions. + UInitOnce fCanonIterDataInitOnce; + CanonIterData *fCanonIterData; }; // bits in canonIterData @@ -600,13 +616,8 @@ private: */ class U_COMMON_API Normalizer2Factory { public: - static const Normalizer2 *getNFCInstance(UErrorCode &errorCode); - static const Normalizer2 *getNFDInstance(UErrorCode &errorCode); static const Normalizer2 *getFCDInstance(UErrorCode &errorCode); static const Normalizer2 *getFCCInstance(UErrorCode &errorCode); - static const Normalizer2 *getNFKCInstance(UErrorCode &errorCode); - static const Normalizer2 *getNFKDInstance(UErrorCode &errorCode); - static const Normalizer2 *getNFKC_CFInstance(UErrorCode &errorCode); static const Normalizer2 *getNoopInstance(UErrorCode &errorCode); static const Normalizer2 *getInstance(UNormalizationMode mode, UErrorCode &errorCode);