1 // © 2017 and later: Unicode, Inc. and others. 2 // License & terms of use: http://www.unicode.org/copyright.html 3 4 // extradata.h 5 // created: 2017jun04 Markus W. Scherer 6 // (pulled out of n2builder.cpp) 7 8 // Write mappings and compositions in compact form for Normalizer2 "extra data", 9 // the data that does not fit into the trie itself. 10 11 #ifndef __EXTRADATA_H__ 12 #define __EXTRADATA_H__ 13 14 #include "unicode/utypes.h" 15 16 #if !UCONFIG_NO_NORMALIZATION 17 18 #include "unicode/errorcode.h" 19 #include "unicode/unistr.h" 20 #include "unicode/utf16.h" 21 #include "hash.h" 22 #include "norms.h" 23 #include "toolutil.h" 24 #include "utrie2.h" 25 #include "uvectr32.h" 26 27 U_NAMESPACE_BEGIN 28 29 class ExtraData : public Norms::Enumerator { 30 public: 31 ExtraData(Norms &n, UBool fast); 32 33 void rangeHandler(UChar32 start, UChar32 end, Norm &norm) U_OVERRIDE; 34 35 UnicodeString maybeYesCompositions; 36 UnicodeString yesYesCompositions; 37 UnicodeString yesNoMappingsAndCompositions; 38 UnicodeString yesNoMappingsOnly; 39 UnicodeString noNoMappingsCompYes; 40 UnicodeString noNoMappingsCompBoundaryBefore; 41 UnicodeString noNoMappingsCompNoMaybeCC; 42 UnicodeString noNoMappingsEmpty; 43 44 private: 45 /** 46 * Requires norm.hasMapping(). 47 * Returns the offset of the "first unit" from the beginning of the extraData for c. 48 * That is the same as the length of the optional data 49 * for the raw mapping and the ccc/lccc word. 50 */ 51 int32_t writeMapping(UChar32 c, const Norm &norm, UnicodeString &dataString); 52 int32_t writeNoNoMapping(UChar32 c, const Norm &norm, 53 UnicodeString &dataString, Hashtable &previousMappings); 54 UBool setNoNoDelta(UChar32 c, Norm &norm) const; 55 /** Requires norm.compositions!=nullptr. */ 56 void writeCompositions(UChar32 c, const Norm &norm, UnicodeString &dataString); 57 void writeExtraData(UChar32 c, Norm &norm); 58 59 UBool optimizeFast; 60 Hashtable previousNoNoMappingsCompYes; // If constructed in runtime code, pass in UErrorCode. 61 Hashtable previousNoNoMappingsCompBoundaryBefore; 62 Hashtable previousNoNoMappingsCompNoMaybeCC; 63 Hashtable previousNoNoMappingsEmpty; 64 }; 65 66 U_NAMESPACE_END 67 68 #endif // #if !UCONFIG_NO_NORMALIZATION 69 70 #endif // __EXTRADATA_H__ 71