| 228 | } |
| 229 | |
| 230 | void WriteDoubleQuoteEscapeSequence(ostream_wrapper& out, int codePoint, StringEscaping::value stringEscapingStyle) { |
| 231 | static const char hexDigits[] = "0123456789abcdef"; |
| 232 | |
| 233 | out << "\\"; |
| 234 | int digits = 8; |
| 235 | if (codePoint < 0xFF && stringEscapingStyle != StringEscaping::JSON) { |
| 236 | out << "x"; |
| 237 | digits = 2; |
| 238 | } else if (codePoint < 0xFFFF) { |
| 239 | out << "u"; |
| 240 | digits = 4; |
| 241 | } else if (stringEscapingStyle != StringEscaping::JSON) { |
| 242 | out << "U"; |
| 243 | digits = 8; |
| 244 | } else { |
| 245 | auto surrogatePair = EncodeUTF16SurrogatePair(codePoint); |
| 246 | WriteDoubleQuoteEscapeSequence(out, surrogatePair.first, stringEscapingStyle); |
| 247 | WriteDoubleQuoteEscapeSequence(out, surrogatePair.second, stringEscapingStyle); |
| 248 | return; |
| 249 | } |
| 250 | |
| 251 | // Write digits into the escape sequence |
| 252 | for (; digits > 0; --digits) |
| 253 | out << hexDigits[(codePoint >> (4 * (digits - 1))) & 0xF]; |
| 254 | } |
| 255 | |
| 256 | bool WriteAliasName(ostream_wrapper& out, const std::string& str) { |
| 257 | int codePoint; |
no test coverage detected