Index: source/i18n/collationbasedatabuilder.h |
diff --git a/source/i18n/collationbasedatabuilder.h b/source/i18n/collationbasedatabuilder.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..aaa6be10fc3597eea5e63a7ea26c3735f6c5476a |
--- /dev/null |
+++ b/source/i18n/collationbasedatabuilder.h |
@@ -0,0 +1,95 @@ |
+/* |
+******************************************************************************* |
+* Copyright (C) 2012-2014, International Business Machines |
+* Corporation and others. All Rights Reserved. |
+******************************************************************************* |
+* collationbasedatabuilder.h |
+* |
+* created on: 2012aug11 |
+* created by: Markus W. Scherer |
+*/ |
+ |
+#ifndef __COLLATIONBASEDATABUILDER_H__ |
+#define __COLLATIONBASEDATABUILDER_H__ |
+ |
+#include "unicode/utypes.h" |
+ |
+#if !UCONFIG_NO_COLLATION |
+ |
+#include "unicode/uniset.h" |
+#include "unicode/unistr.h" |
+#include "collation.h" |
+#include "collationdata.h" |
+#include "collationdatabuilder.h" |
+#include "normalizer2impl.h" |
+#include "utrie2.h" |
+#include "uvectr32.h" |
+#include "uvectr64.h" |
+#include "uvector.h" |
+ |
+U_NAMESPACE_BEGIN |
+ |
+/** |
+ * Low-level base CollationData builder. |
+ */ |
+class U_I18N_API CollationBaseDataBuilder : public CollationDataBuilder { |
+public: |
+ CollationBaseDataBuilder(UErrorCode &errorCode); |
+ |
+ virtual ~CollationBaseDataBuilder(); |
+ |
+ void init(UErrorCode &errorCode); |
+ |
+ /** |
+ * Sets the Han ranges as ranges of offset CE32s. |
+ * Note: Unihan extension A sorts after the other BMP ranges. |
+ * See http://www.unicode.org/reports/tr10/#Implicit_Weights |
+ * |
+ * @param ranges array of ranges of [:Unified_Ideograph:] in collation order, |
+ * as (start, end) code point pairs |
+ * @param length number of code points (not pairs) |
+ * @param errorCode in/out error code |
+ */ |
+ void initHanRanges(const UChar32 ranges[], int32_t length, UErrorCode &errorCode); |
+ |
+ void setNumericPrimary(uint32_t np) { numericPrimary = np; } |
+ |
+ virtual UBool isCompressibleLeadByte(uint32_t b) const; |
+ |
+ void setCompressibleLeadByte(uint32_t b); |
+ |
+ static int32_t diffTwoBytePrimaries(uint32_t p1, uint32_t p2, UBool isCompressible); |
+ static int32_t diffThreeBytePrimaries(uint32_t p1, uint32_t p2, UBool isCompressible); |
+ |
+ virtual uint32_t encodeCEs(const int64_t ces[], int32_t cesLength, UErrorCode &errorCode); |
+ |
+ void addRootElements(const int64_t ces[], int32_t cesLength, UErrorCode &errorCode); |
+ void addRootElement(int64_t ce, UErrorCode &errorCode); |
+ |
+ void addReorderingGroup(uint32_t firstByte, uint32_t lastByte, |
+ const UnicodeString &groupScripts, |
+ UErrorCode &errorCode); |
+ |
+ virtual void build(CollationData &data, UErrorCode &errorCode); |
+ |
+ void buildRootElementsTable(UVector32 &table, UErrorCode &errorCode); |
+ |
+private: |
+ int32_t writeRootElementsRange( |
+ uint32_t prevPrimary, uint32_t p, int32_t i, |
+ UVector32 &table, UErrorCode &errorCode); |
+ |
+ // Flags for which primary-weight lead bytes are compressible. |
+ UBool compressibleBytes[256]; |
+ uint32_t numericPrimary; |
+ uint32_t firstHanPrimary; |
+ uint32_t lastHanPrimary; |
+ int32_t hanStep; |
+ UVector64 rootElements; |
+ UnicodeString scripts; |
+}; |
+ |
+U_NAMESPACE_END |
+ |
+#endif // !UCONFIG_NO_COLLATION |
+#endif // __COLLATIONBASEDATABUILDER_H__ |