| // © 2017 and later: Unicode, Inc. and others. |
| // License & terms of use: http://www.unicode.org/copyright.html |
| |
| // extradata.h |
| // created: 2017jun04 Markus W. Scherer |
| // (pulled out of n2builder.cpp) |
| |
| // Write mappings and compositions in compact form for Normalizer2 "extra data", |
| // the data that does not fit into the trie itself. |
| |
| #ifndef __EXTRADATA_H__ |
| #define __EXTRADATA_H__ |
| |
| #include "unicode/utypes.h" |
| |
| #if !UCONFIG_NO_NORMALIZATION |
| |
| #include "unicode/errorcode.h" |
| #include "unicode/unistr.h" |
| #include "unicode/utf16.h" |
| #include "hash.h" |
| #include "norms.h" |
| #include "toolutil.h" |
| #include "utrie2.h" |
| #include "uvectr32.h" |
| |
| U_NAMESPACE_BEGIN |
| |
| class ExtraData : public Norms::Enumerator { |
| public: |
| ExtraData(Norms &n, UBool fast); |
| |
| void rangeHandler(UChar32 start, UChar32 end, Norm &norm) U_OVERRIDE; |
| |
| UnicodeString maybeYesCompositions; |
| UnicodeString yesYesCompositions; |
| UnicodeString yesNoMappingsAndCompositions; |
| UnicodeString yesNoMappingsOnly; |
| UnicodeString noNoMappingsCompYes; |
| UnicodeString noNoMappingsCompBoundaryBefore; |
| UnicodeString noNoMappingsCompNoMaybeCC; |
| UnicodeString noNoMappingsEmpty; |
| |
| private: |
| /** |
| * Requires norm.hasMapping(). |
| * Returns the offset of the "first unit" from the beginning of the extraData for c. |
| * That is the same as the length of the optional data |
| * for the raw mapping and the ccc/lccc word. |
| */ |
| int32_t writeMapping(UChar32 c, const Norm &norm, UnicodeString &dataString); |
| int32_t writeNoNoMapping(UChar32 c, const Norm &norm, |
| UnicodeString &dataString, Hashtable &previousMappings); |
| UBool setNoNoDelta(UChar32 c, Norm &norm) const; |
| /** Requires norm.compositions!=nullptr. */ |
| void writeCompositions(UChar32 c, const Norm &norm, UnicodeString &dataString); |
| void writeExtraData(UChar32 c, Norm &norm); |
| |
| UBool optimizeFast; |
| Hashtable previousNoNoMappingsCompYes; // If constructed in runtime code, pass in UErrorCode. |
| Hashtable previousNoNoMappingsCompBoundaryBefore; |
| Hashtable previousNoNoMappingsCompNoMaybeCC; |
| Hashtable previousNoNoMappingsEmpty; |
| }; |
| |
| U_NAMESPACE_END |
| |
| #endif // #if !UCONFIG_NO_NORMALIZATION |
| |
| #endif // __EXTRADATA_H__ |