You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
71 lines
2.2 KiB
71 lines
2.2 KiB
4 months ago
|
// © 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__
|