90 #ifndef LLVM_SUPPORT_CONVERTUTF_H
91 #define LLVM_SUPPORT_CONVERTUTF_H
93 #include "wpi/ArrayRef.h"
94 #include "wpi/StringRef.h"
98 #include <system_error>
113 typedef unsigned int UTF32;
114 typedef unsigned short UTF16;
115 typedef unsigned char UTF8;
116 typedef bool Boolean;
119 #define UNI_REPLACEMENT_CHAR (UTF32)0x0000FFFD
120 #define UNI_MAX_BMP (UTF32)0x0000FFFF
121 #define UNI_MAX_UTF16 (UTF32)0x0010FFFF
122 #define UNI_MAX_UTF32 (UTF32)0x7FFFFFFF
123 #define UNI_MAX_LEGAL_UTF32 (UTF32)0x0010FFFF
125 #define UNI_MAX_UTF8_BYTES_PER_CODE_POINT 4
127 #define UNI_UTF16_BYTE_ORDER_MARK_NATIVE 0xFEFF
128 #define UNI_UTF16_BYTE_ORDER_MARK_SWAPPED 0xFFFE
138 strictConversion = 0,
142 ConversionResult ConvertUTF8toUTF16 (
143 const UTF8** sourceStart,
const UTF8* sourceEnd,
144 UTF16** targetStart, UTF16* targetEnd, ConversionFlags flags);
151 const UTF8** sourceStart,
const UTF8* sourceEnd,
152 UTF32** targetStart, UTF32* targetEnd, ConversionFlags flags);
159 const UTF8** sourceStart,
const UTF8* sourceEnd,
160 UTF32** targetStart, UTF32* targetEnd, ConversionFlags flags);
162 ConversionResult ConvertUTF16toUTF8 (
163 const UTF16** sourceStart,
const UTF16* sourceEnd,
164 UTF8** targetStart, UTF8* targetEnd, ConversionFlags flags);
166 ConversionResult ConvertUTF32toUTF8 (
167 const UTF32** sourceStart,
const UTF32* sourceEnd,
168 UTF8** targetStart, UTF8* targetEnd, ConversionFlags flags);
170 ConversionResult ConvertUTF16toUTF32 (
171 const UTF16** sourceStart,
const UTF16* sourceEnd,
172 UTF32** targetStart, UTF32* targetEnd, ConversionFlags flags);
174 ConversionResult ConvertUTF32toUTF16 (
175 const UTF32** sourceStart,
const UTF32* sourceEnd,
176 UTF16** targetStart, UTF16* targetEnd, ConversionFlags flags);
178 Boolean isLegalUTF8Sequence(
const UTF8 *source,
const UTF8 *sourceEnd);
180 Boolean isLegalUTF8String(
const UTF8 **source,
const UTF8 *sourceEnd);
182 unsigned getNumBytesForUTF8(UTF8 firstByte);
216 const UTF8 *sourceEnd,
218 ConversionFlags flags) {
219 if (*source == sourceEnd)
220 return sourceExhausted;
221 unsigned size = getNumBytesForUTF8(**source);
222 if ((ptrdiff_t)
size > sourceEnd - *source)
223 return sourceExhausted;
239 SmallVectorImpl<char> &DstUTF8);
247 SmallVectorImpl<UTF16> &DstUTF16);
252 std::error_code UTF8ToUTF16(StringRef utf8, SmallVectorImpl<wchar_t> &utf16);
254 std::error_code CurCPToUTF16(StringRef utf8, SmallVectorImpl<wchar_t> &utf16);
255 std::error_code UTF16ToUTF8(
const wchar_t *utf16,
size_t utf16_len,
256 SmallVectorImpl<char> &utf8);
258 std::error_code UTF16ToCurCP(
const wchar_t *utf16,
size_t utf16_len,
259 SmallVectorImpl<char> &utf8);