diff options
author | 2013-09-17 15:11:24 +0900 | |
---|---|---|
committer | 2013-09-17 15:11:24 +0900 | |
commit | 78b55a31cb158b1e14ccf678133269b0f99c7f9a (patch) | |
tree | 2c6c9e3578915c71f20ced0f65df738519a3b2e0 /native/jni/src | |
parent | 6d1a29eaab3667c381340117a2012427d3a3e861 (diff) | |
download | latinime-78b55a31cb158b1e14ccf678133269b0f99c7f9a.tar.gz latinime-78b55a31cb158b1e14ccf678133269b0f99c7f9a.tar.xz latinime-78b55a31cb158b1e14ccf678133269b0f99c7f9a.zip |
Fix handling multi-bytes characters and add a test.
Bug: 6669677
Change-Id: Id2154db47adea2929559a4187a726f9dfa83363e
Diffstat (limited to 'native/jni/src')
-rw-r--r-- | native/jni/src/suggest/policyimpl/dictionary/utils/byte_array_utils.cpp | 3 | ||||
-rw-r--r-- | native/jni/src/suggest/policyimpl/dictionary/utils/byte_array_utils.h | 11 |
2 files changed, 9 insertions, 5 deletions
diff --git a/native/jni/src/suggest/policyimpl/dictionary/utils/byte_array_utils.cpp b/native/jni/src/suggest/policyimpl/dictionary/utils/byte_array_utils.cpp index a84cfb9d5..1833e8832 100644 --- a/native/jni/src/suggest/policyimpl/dictionary/utils/byte_array_utils.cpp +++ b/native/jni/src/suggest/policyimpl/dictionary/utils/byte_array_utils.cpp @@ -18,7 +18,8 @@ namespace latinime { -const uint8_t ByteArrayUtils::MINIMAL_ONE_BYTE_CHARACTER_VALUE = 0x20; +const uint8_t ByteArrayUtils::MINIMUM_ONE_BYTE_CHARACTER_VALUE = 0x20; +const uint8_t ByteArrayUtils::MAXIMUM_ONE_BYTE_CHARACTER_VALUE = 0xFF; const uint8_t ByteArrayUtils::CHARACTER_ARRAY_TERMINATOR = 0x1F; } // namespace latinime diff --git a/native/jni/src/suggest/policyimpl/dictionary/utils/byte_array_utils.h b/native/jni/src/suggest/policyimpl/dictionary/utils/byte_array_utils.h index 6bafb64ee..0c1576818 100644 --- a/native/jni/src/suggest/policyimpl/dictionary/utils/byte_array_utils.h +++ b/native/jni/src/suggest/policyimpl/dictionary/utils/byte_array_utils.h @@ -135,7 +135,7 @@ class ByteArrayUtils { static AK_FORCE_INLINE int readCodePointAndAdvancePosition( const uint8_t *const buffer, int *const pos) { const uint8_t firstByte = readUint8(buffer, *pos); - if (firstByte < MINIMAL_ONE_BYTE_CHARACTER_VALUE) { + if (firstByte < MINIMUM_ONE_BYTE_CHARACTER_VALUE) { if (firstByte == CHARACTER_ARRAY_TERMINATOR) { *pos += 1; return NOT_A_CODE_POINT; @@ -187,7 +187,8 @@ class ByteArrayUtils { const int codePoint = codePoints[i]; if (codePoint == NOT_A_CODE_POINT || codePoint == CHARACTER_ARRAY_TERMINATOR) { break; - } else if (codePoint < MINIMAL_ONE_BYTE_CHARACTER_VALUE) { + } else if (codePoint < MINIMUM_ONE_BYTE_CHARACTER_VALUE + || codePoint > MAXIMUM_ONE_BYTE_CHARACTER_VALUE) { // three bytes character. writeUint24AndAdvancePosition(buffer, codePoint, pos); } else { @@ -207,7 +208,8 @@ class ByteArrayUtils { const int codePoint = codePoints[i]; if (codePoint == NOT_A_CODE_POINT || codePoint == CHARACTER_ARRAY_TERMINATOR) { break; - } else if (codePoint < MINIMAL_ONE_BYTE_CHARACTER_VALUE) { + } else if (codePoint < MINIMUM_ONE_BYTE_CHARACTER_VALUE + || codePoint > MAXIMUM_ONE_BYTE_CHARACTER_VALUE) { // three bytes character. byteCount += 3; } else { @@ -225,7 +227,8 @@ class ByteArrayUtils { private: DISALLOW_IMPLICIT_CONSTRUCTORS(ByteArrayUtils); - static const uint8_t MINIMAL_ONE_BYTE_CHARACTER_VALUE; + static const uint8_t MINIMUM_ONE_BYTE_CHARACTER_VALUE; + static const uint8_t MAXIMUM_ONE_BYTE_CHARACTER_VALUE; static const uint8_t CHARACTER_ARRAY_TERMINATOR; static AK_FORCE_INLINE void writeUint32AndAdvancePosition(uint8_t *const buffer, |