| Index: source/tools/toolutil/collationinfo.cpp
|
| diff --git a/source/tools/toolutil/collationinfo.cpp b/source/tools/toolutil/collationinfo.cpp
|
| index 7bf38614e5ed1d9d0622d304a1faf1b78b1b0f02..fef1cdf1051cc9ddd6d1ef7782b9186aca5aafa7 100644
|
| --- a/source/tools/toolutil/collationinfo.cpp
|
| +++ b/source/tools/toolutil/collationinfo.cpp
|
| @@ -1,6 +1,6 @@
|
| /*
|
| *******************************************************************************
|
| -* Copyright (C) 2013-2014, International Business Machines
|
| +* Copyright (C) 2013-2015, International Business Machines
|
| * Corporation and others. All Rights Reserved.
|
| *******************************************************************************
|
| * collationinfo.cpp
|
| @@ -16,9 +16,11 @@
|
|
|
| #if !UCONFIG_NO_COLLATION
|
|
|
| +#include "collationdata.h"
|
| #include "collationdatareader.h"
|
| #include "collationinfo.h"
|
| #include "uassert.h"
|
| +#include "uvectr32.h"
|
|
|
| U_NAMESPACE_BEGIN
|
|
|
| @@ -112,6 +114,37 @@ CollationInfo::getDataLength(const int32_t indexes[], int32_t startIndex) {
|
| return indexes[startIndex + 1] - indexes[startIndex];
|
| }
|
|
|
| +void
|
| +CollationInfo::printReorderRanges(const CollationData &data, const int32_t *codes, int32_t length) {
|
| + UErrorCode errorCode = U_ZERO_ERROR;
|
| + UVector32 ranges(errorCode);
|
| + data.makeReorderRanges(codes, length, ranges, errorCode);
|
| + if(U_FAILURE(errorCode)) {
|
| + printf(" error building reorder ranges: %s\n", u_errorName(errorCode));
|
| + return;
|
| + }
|
| +
|
| + int32_t start = 0;
|
| + for(int32_t i = 0; i < ranges.size(); ++i) {
|
| + int32_t pair = ranges.elementAti(i);
|
| + int32_t limit = (pair >> 16) & 0xffff;
|
| + int16_t offset = (int16_t)pair;
|
| + if(offset == 0) {
|
| + // [inclusive-start, exclusive-limit[
|
| + printf(" [%04x, %04x[\n", start, limit);
|
| + } else if(offset > 0) {
|
| + printf(" reorder [%04x, %04x[ by offset %02x to [%04x, %04x[\n",
|
| + start, limit, offset,
|
| + start + (offset << 8), limit + (offset << 8));
|
| + } else /* offset < 0 */ {
|
| + printf(" reorder [%04x, %04x[ by offset -%02x to [%04x, %04x[\n",
|
| + start, limit, -offset,
|
| + start + (offset << 8), limit + (offset << 8));
|
| + }
|
| + start = limit;
|
| + }
|
| +}
|
| +
|
| U_NAMESPACE_END
|
|
|
| #endif // !UCONFIG_NO_COLLATION
|
|
|