2#include "external/wide_char_display_width.h"
27 const bool is_quoted = c ==
'"';
31 while ((is_quoted && c !=
'"') || (!is_quoted && c !=
' '))
44 c = char((n1 << 4) | n0);
46 else if (c >=
'0' && c <=
'9')
51 const uint8_t n2 = uint8_t(c -
'0');
52 const uint8_t n1 = uint8_t(c1 -
'0');
53 const uint8_t n0 = uint8_t(c0 -
'0');
54 c = char((n2 << 6) | (n1 << 3) | n0);
71 if (c >=
'0' && c <=
'9')
72 return uint8_t(c -
'0');
73 else if (c >=
'a' && c <=
'f')
74 return uint8_t(10 + c -
'a');
109 for (
size_t i = 0; i < s.size();)
112 const int width = wide_char_display_width(uint32_t(wide_char));
114 result += size_t(wide_char_display_width(uint32_t(wide_char)));
124 const uint8_t *p = (
reinterpret_cast<const uint8_t *
>(s.c_str()) + i);
128 if ((p[0] & 0xe0) == 0xc0 && i + 1 < s.size())
130 result = (uint32_t(p[0]) << 6) +
131 (uint32_t(p[1]) ) - uint32_t(0x3080UL);
134 else if ((p[0] & 0xf0) == 0xe0 && i + 2 < s.size())
136 result = (uint32_t(p[0]) << 12) +
137 (uint32_t(p[1]) << 6) +
138 (uint32_t(p[2]) ) - uint32_t(0xe2080UL);
141 else if ((p[0] & 0xf8) == 0xf0 && i + 3 < s.size())
143 result = (uint32_t(p[0]) << 18) +
144 (uint32_t(p[1]) << 12) +
145 (uint32_t(p[2]) << 6) +
146 (uint32_t(p[3]) ) - uint32_t(0x3c82080UL);
163 const std::string &s,
169 std::string displayed;
171 for (
size_t i = 0; s.c_str()[i];)
173 const size_t previous_i = i;
175 const size_t char_width = size_t(wide_char_display_width(wide_char));
177 if (length + char_width < width ||
178 (length + char_width == width && s.c_str()[i] == 0))
180 length += char_width;
181 for (
size_t j = previous_i; j < i; j++)
195 while (length < width)
211 return int8_t(result);
221 if (word ==
"true" || word ==
"1")
223 else if (word ==
"false" || word ==
"0")
227 in.setstate(std::ios::failbit);
253 int64_t position = 0;
255 return Blob(position);
int64_t get_position() const noexcept
uint8_t get_hex_digit_from_char(char c)
void write_boolean(std::ostream &out, bool value)
void write_sql_string(std::ostream &out, const std::string &s)
uint32_t read_utf8_char(size_t &i, const std::string &s)
void write_justified(std::ostream &out, const std::string &s, size_t width, bool flush_left)
void write_hexa_character(std::ostream &out, uint8_t c)
bool read_boolean(std::istream &in)
size_t utf8_display_size(const std::string &s)
int8_t read_int8(std::istream &in)
void write_blob(std::ostream &out, Blob blob)
char get_hex_char_from_digit(uint8_t n)
std::string read_string(std::istream &in)
Blob read_blob(std::istream &in)