150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* 250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho******************************************************************************* 350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho* 4f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius* Copyright (C) 2009-2014, International Business Machines 550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho* Corporation and others. All Rights Reserved. 650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho* 750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho******************************************************************************* 850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho* file name: n2builder.h 950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho* encoding: US-ASCII 1050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho* tab size: 8 (not used) 1150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho* indentation:4 1250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho* 1350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho* created on: 2009nov25 1450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho* created by: Markus W. Scherer 1550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho*/ 1650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 1750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#ifndef __N2BUILDER_H__ 1850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#define __N2BUILDER_H__ 1950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 2050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "unicode/utypes.h" 2150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 2250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#if !UCONFIG_NO_NORMALIZATION 2350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 2450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "unicode/errorcode.h" 2550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "unicode/unistr.h" 2650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "normalizer2impl.h" // for IX_COUNT 2750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "toolutil.h" 2850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "utrie2.h" 2950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 3050294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoU_NAMESPACE_BEGIN 3150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 3250294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoextern UBool beVerbose, haveCopyright; 3350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 3450294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehostruct Norm; 3550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 3650294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoclass BuilderReorderingBuffer; 3750294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoclass ExtraDataWriter; 3850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 3950294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoclass Normalizer2DataBuilder { 4050294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehopublic: 4150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho Normalizer2DataBuilder(UErrorCode &errorCode); 4250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ~Normalizer2DataBuilder(); 4350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 4450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho enum OverrideHandling { 4550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho OVERRIDE_NONE, 4650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho OVERRIDE_ANY, 4750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho OVERRIDE_PREVIOUS 4850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho }; 4950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 5050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho void setOverrideHandling(OverrideHandling oh); 5150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 5250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho enum Optimization { 5350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho OPTIMIZE_NORMAL, 5450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho OPTIMIZE_FAST 5550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho }; 5650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 5750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho void setOptimization(Optimization opt) { optimization=opt; } 5850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 5950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho void setCC(UChar32 c, uint8_t cc); 6050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho void setOneWayMapping(UChar32 c, const UnicodeString &m); 6150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho void setRoundTripMapping(UChar32 c, const UnicodeString &m); 6250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho void removeMapping(UChar32 c); 6350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 6450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho void setUnicodeVersion(const char *v); 6550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 6650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho void writeBinaryFile(const char *filename); 67f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius void writeCSourceFile(const char *filename); 6850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 6950294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoprivate: 7050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho friend class CompositionBuilder; 7150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho friend class Decomposer; 7250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho friend class ExtraDataWriter; 7350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho friend class Norm16Writer; 7450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 7550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // No copy constructor nor assignment operator. 7650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho Normalizer2DataBuilder(const Normalizer2DataBuilder &other); 7750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho Normalizer2DataBuilder &operator=(const Normalizer2DataBuilder &other); 7850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 7950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho Norm *allocNorm(); 8050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho Norm *getNorm(UChar32 c); 8150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho Norm *createNorm(UChar32 c); 8250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho Norm *checkNormForMapping(Norm *p, UChar32 c); // check for permitted overrides 8350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 8450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const Norm &getNormRef(UChar32 c) const; 8550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho uint8_t getCC(UChar32 c) const; 8650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UBool combinesWithCCBetween(const Norm &norm, uint8_t lowCC, uint8_t highCC) const; 8750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UChar32 combine(const Norm &norm, UChar32 trail) const; 8850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 8950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho void addComposition(UChar32 start, UChar32 end, uint32_t value); 9050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UBool decompose(UChar32 start, UChar32 end, uint32_t value); 9150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho void reorder(Norm *p, BuilderReorderingBuffer &buffer); 9250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UBool hasNoCompBoundaryAfter(BuilderReorderingBuffer &buffer); 9350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho void setHangulData(); 9483a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius int32_t writeMapping(UChar32 c, const Norm *p, UnicodeString &dataString); 9550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho void writeCompositions(UChar32 c, const Norm *p, UnicodeString &dataString); 9650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho void writeExtraData(UChar32 c, uint32_t value, ExtraDataWriter &writer); 9750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t getCenterNoNoDelta() { 9850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return indexes[Normalizer2Impl::IX_MIN_MAYBE_YES]-Normalizer2Impl::MAX_DELTA-1; 9950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 10050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho void writeNorm16(UChar32 start, UChar32 end, uint32_t value); 10150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho void processData(); 10250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 10350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UTrie2 *normTrie; 10450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UToolMemory *normMem; 10550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho Norm *norms; 10650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 10750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t phase; 10850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho OverrideHandling overrideHandling; 10950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 11050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho Optimization optimization; 11150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 11250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t indexes[Normalizer2Impl::IX_COUNT]; 11350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UTrie2 *norm16Trie; 114f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius int32_t norm16TrieLength; 11550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString extraData; 11683a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius uint8_t smallFCD[0x100]; 11750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 11850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UVersionInfo unicodeVersion; 11950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}; 12050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 12150294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoU_NAMESPACE_END 12250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 12350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif // #if !UCONFIG_NO_NORMALIZATION 12450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 12550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif // __N2BUILDER_H__ 126