From 449bfb852a6502c29418cba0c8a2d8551909307a Mon Sep 17 00:00:00 2001 From: jules Date: Tue, 4 Aug 2015 22:48:05 +0100 Subject: [PATCH] Fix to a UTF-8 conversion operator for certain high value unicode points. --- modules/juce_core/text/juce_CharPointer_UTF8.h | 11 +++++------ modules/juce_core/text/juce_CharacterFunctions.h | 9 +-------- modules/juce_core/text/juce_String.cpp | 7 +------ 3 files changed, 7 insertions(+), 20 deletions(-) diff --git a/modules/juce_core/text/juce_CharPointer_UTF8.h b/modules/juce_core/text/juce_CharPointer_UTF8.h index 9c466f38a4..b54d7e8cff 100644 --- a/modules/juce_core/text/juce_CharPointer_UTF8.h +++ b/modules/juce_core/text/juce_CharPointer_UTF8.h @@ -90,9 +90,9 @@ public: uint32 n = (uint32) (uint8) byte; uint32 mask = 0x7f; uint32 bit = 0x40; - size_t numExtraValues = 0; + int numExtraValues = 0; - while ((n & bit) != 0 && bit > 0x10) + while ((n & bit) != 0 && bit > 0x8) { mask >>= 1; ++numExtraValues; @@ -101,9 +101,9 @@ public: n &= mask; - for (size_t i = 1; i <= numExtraValues; ++i) + for (int i = 1; i <= numExtraValues; ++i) { - const uint8 nextByte = (uint8) data [i]; + const uint32 nextByte = (uint32) (uint8) data[i]; if ((nextByte & 0xc0) != 0x80) break; @@ -312,9 +312,8 @@ public: static size_t getBytesRequiredFor (CharPointer text) noexcept { size_t count = 0; - juce_wchar n; - while ((n = text.getAndAdvance()) != 0) + while (juce_wchar n = text.getAndAdvance()) count += getBytesRequiredFor (n); return count; diff --git a/modules/juce_core/text/juce_CharacterFunctions.h b/modules/juce_core/text/juce_CharacterFunctions.h index 82adf54430..485d0e3325 100644 --- a/modules/juce_core/text/juce_CharacterFunctions.h +++ b/modules/juce_core/text/juce_CharacterFunctions.h @@ -331,15 +331,8 @@ public: template static void copyAll (DestCharPointerType& dest, SrcCharPointerType src) noexcept { - for (;;) - { - const juce_wchar c = src.getAndAdvance(); - - if (c == 0) - break; - + while (juce_wchar c = src.getAndAdvance()) dest.write (c); - } dest.writeNull(); } diff --git a/modules/juce_core/text/juce_String.cpp b/modules/juce_core/text/juce_String.cpp index 39e284346c..ec82e547d4 100644 --- a/modules/juce_core/text/juce_String.cpp +++ b/modules/juce_core/text/juce_String.cpp @@ -86,12 +86,7 @@ public: if (text.getAddress() == nullptr || text.isEmpty()) return CharPointerType (&(emptyString.text)); - CharPointer t (text); - size_t bytesNeeded = sizeof (CharType); - - while (! t.isEmpty()) - bytesNeeded += CharPointerType::getBytesRequiredFor (t.getAndAdvance()); - + const size_t bytesNeeded = sizeof (CharType) + CharPointerType::getBytesRequiredFor (text); const CharPointerType dest (createUninitialisedBytes (bytesNeeded)); CharPointerType (dest).writeAll (text); return dest;