8#ifndef INCLUDED_BDLDE_UTF8UTIL
9#define INCLUDED_BDLDE_UTF8UTIL
377#include <bdlscm_version.h>
384#include <bsl_cstddef.h>
385#include <bsl_cstdlib.h>
386#include <bsl_iosfwd.h>
387#include <bsl_streambuf.h>
388#include <bsl_string.h>
588 unsigned int codePoint);
594 unsigned int codePoint);
596 unsigned int codePoint);
597#ifdef BSLS_LIBRARYFEATURES_HAS_CPP17_PMR_STRING
599 unsigned int codePoint);
643 Uint64 *startOfLineByteOffset,
644 bsl::streambuf *input,
648 Uint64 *startOfLineByteOffset,
649 bsl::streambuf *input,
656 static bool isValid(
const char *
string);
677 static bool isValid(
const char **invalidString,
const char *
string);
687 static bool isValid(
const char **invalidString,
697 static bool isValid(
const char **invalidString,
709 const char *codePoint,
899 bsl::streambuf *input);
916#ifdef BSLS_LIBRARYFEATURES_HAS_CPP17_PMR_STRING
918 std::pmr::string *output,
980 Uint64 *startOfLineByteOffset,
981 bsl::streambuf *input,
984 char *temporaryReadBuffer,
985 int temporaryReadBufferNumBytes);
1000 const char **result,
1017 return advanceRaw(result,
string.data(),
string.length(), numCodePoints);
1022 unsigned int codePoint)
1036 Uint64 *startOfLineByteOffset,
1037 bsl::streambuf *input,
1042 startOfLineByteOffset,
1051 Uint64 *startOfLineByteOffset,
1052 bsl::streambuf *input,
1056 enum { k_BUFFER_SIZE = 2048 };
1057 char buffer[k_BUFFER_SIZE];
1060 startOfLineByteOffset,
1073 const char *dummy = 0;
1074 return isValid(&dummy,
string);
1082 const char *dummy = 0;
1083 return isValid(&dummy,
string, length);
1089 const char *dummy = 0;
1090 return isValid(&dummy,
string);
Definition bslstl_stringview.h:471
Definition bslstl_string.h:1252
#define BSLS_ASSERT(X)
Definition bsls_assert.h:1976
#define BSLS_IDENT(str)
BSLS_IDENT() - insert string into .comment binary segment (if supported)
Definition bsls_ident.h:238
Definition bdlde_base64alphabet.h:118
Definition bdlde_utf8util.h:945
static size_type advancePastValidOrInvalidCodePoint(const bsl::string_view &input)
static int getLineAndColumnNumber(Uint64 *lineNumber, Uint64 *utf8Column, Uint64 *startOfLineByteOffset, bsl::streambuf *input, Uint64 byteOffset, char lineDelimeter, char *temporaryReadBuffer, int temporaryReadBufferNumBytes)
bsls::Types::size_type size_type
Definition bdlde_utf8util.h:949
bsls::Types::Uint64 Uint64
Definition bdlde_utf8util.h:948
Definition bdlde_utf8util.h:407
static size_type readIfValid(int *status, char *outputBuffer, size_type outputBufferLength, bsl::streambuf *input)
static IntPtr numCodePointsIfValid(const char **invalidString, const char *string)
static IntPtr advanceRaw(const char **result, const char *string, size_type length, IntPtr numCodePoints)
bsls::Types::UintPtr UintPtr
Definition bdlde_utf8util.h:412
bsls::Types::Uint64 Uint64
Definition bdlde_utf8util.h:413
static const char * toAscii(IntPtr value)
static size_type replaceErrors(bsl::string *output, const bsl::string_view &input, unsigned int utf32ErrorCode=k_ERROR_CODE_POINT)
static IntPtr advanceIfValid(int *status, const char **result, const char *string, size_type length, IntPtr numCodePoints)
static IntPtr numCharactersRaw(const char *string)
Definition bdlde_utf8util.h:1129
static int numBytesInCodePoint(const char *codePoint)
static bool isValid(const char *string)
Definition bdlde_utf8util.h:1069
static int codePointValue(const char *codePoint)
static int appendUtf8CodePoint(bsl::string *output, unsigned int codePoint)
@ k_ERROR_CODE_POINT
Definition bdlde_utf8util.h:416
static size_type replaceErrors(std::string *output, const bsl::string_view &input, unsigned int utf32ErrorCode=k_ERROR_CODE_POINT)
static IntPtr numCodePointsRaw(const char *string, size_type length)
static IntPtr numCharactersIfValid(const char **invalidString, const char *string)
Definition bdlde_utf8util.h:1114
static IntPtr advanceRaw(const char **result, const char *string, IntPtr numCodePoints)
static bool isValid(const char **invalidString, const char *string, size_type length)
static IntPtr numCodePointsRaw(const char *string)
bsls::Types::IntPtr IntPtr
Definition bdlde_utf8util.h:411
static bool isValid(const char **invalidString, const char *string)
static bool isValidCodePoint(int *status, const char *codePoint, size_type numBytes)
static int appendUtf8Character(bsl::string *output, unsigned int codePoint)
Definition bdlde_utf8util.h:1021
static IntPtr numBytesIfValid(const bsl::string_view &string, IntPtr numCodePoints)
Definition bdlde_utf8util.h:1094
static bool isValid(const char **invalidString, const bsl::string_view &string)
static IntPtr numBytesRaw(const bsl::string_view &string, IntPtr numCodePoints)
static IntPtr numCodePointsIfValid(const char **invalidString, const bsl::string_view &string)
static int getLineAndColumnNumber(Uint64 *lineNumber, Uint64 *utf8Column, Uint64 *startOfLineByteOffset, bsl::streambuf *input, Uint64 byteOffset)
Definition bdlde_utf8util.h:1034
static IntPtr advanceIfValid(int *status, const char **result, const char *string, IntPtr numCodePoints)
static int getByteSize(const char *codePoint)
Definition bdlde_utf8util.h:1028
static IntPtr numCodePointsIfValid(const char **invalidString, const char *string, size_type length)
static int appendUtf8CodePoint(std::string *output, unsigned int codePoint)
ErrorStatus
Definition bdlde_utf8util.h:425
@ k_UNEXPECTED_CONTINUATION_OCTET
Definition bdlde_utf8util.h:431
@ k_NON_CONTINUATION_OCTET
Definition bdlde_utf8util.h:435
@ k_OVERLONG_ENCODING
Definition bdlde_utf8util.h:439
@ k_SURROGATE
Definition bdlde_utf8util.h:450
@ k_VALUE_LARGER_THAN_0X10FFFF
Definition bdlde_utf8util.h:447
@ k_END_OF_INPUT_TRUNCATION
Definition bdlde_utf8util.h:427
@ k_INVALID_INITIAL_OCTET
Definition bdlde_utf8util.h:443
static IntPtr numCharacters(const char *string)
Definition bdlde_utf8util.h:1102
bsls::Types::size_type size_type
Definition bdlde_utf8util.h:410
std::size_t UintPtr
Definition bsls_types.h:128
std::size_t size_type
Definition bsls_types.h:126
unsigned long long Uint64
Definition bsls_types.h:139
std::ptrdiff_t IntPtr
Definition bsls_types.h:132