23 std::basic_string<char32_t> value_str(1, value);
28 dest.append(utf8_value);
34 dest.push_back(value);
40 std::basic_string<T> dest;
42 dest.reserve(src.size());
44 for(
unsigned i=0; i<src.size(); i++)
46 T ch=(
unsigned char)src[i];
52 INVARIANT(i < src.size(),
"backslash can't be last character");
54 ch=(
unsigned char)src[i];
57 case '\\': dest.push_back(ch);
break;
58 case 'n': dest.push_back(
'\n');
break;
59 case 't': dest.push_back(
'\t');
break;
60 case 'v': dest.push_back(
'\v');
break;
61 case 'b': dest.push_back(
'\b');
break;
62 case 'r': dest.push_back(
'\r');
break;
63 case 'f': dest.push_back(
'\f');
break;
64 case 'a': dest.push_back(
'\a');
break;
65 case '"': dest.push_back(
'"');
break;
66 case '\'': dest.push_back(
'\'');
break;
75 const unsigned digits = (ch ==
'u') ? 4u : 8u;
78 for(
unsigned count=digits;
79 count!=0 && i<src.size();
99 while(i<src.size() && isxdigit(src[i]))
123 while(i<src.size() && isdigit(src[i]))
164 for(; digits!=0; digits--, hex++)
175 else if(isxdigit(ch))
176 value|=10+tolower(ch)-
'a';
186 for(; digits!=0; digits--, octal++)
#define INVARIANT(CONDITION, REASON)
This macro uses the wrapper function 'invariant_violated_string'.
std::basic_string< T > unescape_string_templ(const std::string &src)
unsigned octal_to_unsigned(const char *octal, std::size_t digits)
std::basic_string< char32_t > unescape_wide_string(const std::string &src)
std::string unescape_string(const std::string &src)
static void append_universal_char(unsigned int value, std::string &dest)
unsigned hex_to_unsigned(const char *hex, std::size_t digits)
ANSI-C Language Conversion.
std::string utf32_native_endian_to_utf8(const std::basic_string< char32_t > &s)