int String::copyToUTF8 (uint8* buffer) const { #if JUCE_STRINGS_ARE_UNICODE int num = 0, index = 0; for (;;) { const uint32 c = (uint32) text->text [index++]; if (c >= 0x80) { int numExtraBytes = 1; if (c >= 0x800) { ++numExtraBytes; if (c >= 0x10000) { ++numExtraBytes; if (c >= 0x200000) { ++numExtraBytes; if (c >= 0x4000000) ++numExtraBytes; } } } if (buffer != 0) { buffer [num++] = (uint8) ((0xff << (7 - numExtraBytes)) | (c >> (numExtraBytes * 6))); while (--numExtraBytes >= 0) buffer [num++] = (uint8) (0x80 | (0x3f & (c >> (numExtraBytes * 6)))); } else { num += numExtraBytes + 1; } } else { if (buffer != 0) buffer [num] = (uint8) c; ++num; } if (c == 0) break; } return num; #else const int numBytes = length() + 1; if (buffer != 0) copyToBuffer ((char*) buffer, numBytes); return numBytes; #endif }