244 size_t tokenLine =
line;
245 size_t tokenColumn =
column;
246 std::ostringstream out;
264 case 'a': out <<
'\a';
break;
265 case 'b': out <<
'\b';
break;
266 case 'f': out <<
'\f';
break;
267 case 'n': out <<
'\n';
break;
268 case 'r': out <<
'\r';
break;
269 case 't': out <<
'\t';
break;
270 case 'v': out <<
'\v';
break;
271 case '\\': out <<
'\\';
break;
272 case '\'': out <<
'\'';
break;
273 case '"': out <<
'"';
break;
280 case '0':
case '1':
case '2':
case '3':
281 case '4':
case '5':
case '6':
case '7':
283 u32 val =
static_cast<u32>(esc -
'0');
284 for (
int i = 1; i < 3 && !
isAtEnd(); ++i)
287 if (d <
'0' || d >
'7')
break;
289 val = val * 8 +
static_cast<u32>(d -
'0');
293 out << static_cast<char>(val);
304 out << static_cast<char>(val);
311 int ndigits = (esc ==
'u') ? 4 : 8;
313 for (
int i = 0; i < ndigits; ++i)
319 if (cp > 0x10FFFF || (cp >= 0xD800 && cp <= 0xDFFF))
321 if (cp <= 0x7F) { out << static_cast<char>(cp); }
322 else if (cp <= 0x7FF) { out << static_cast<char>(0xC0 | (cp >> 6))
323 <<
static_cast<char>(0x80 | (cp & 0x3F)); }
324 else if (cp <= 0xFFFF) { out << static_cast<char>(0xE0 | (cp >> 12))
325 <<
static_cast<char>(0x80 | ((cp >> 6) & 0x3F))
326 <<
static_cast<char>(0x80 | (cp & 0x3F)); }
327 else { out << static_cast<char>(0xF0 | (cp >> 18))
328 <<
static_cast<char>(0x80 | ((cp >> 12) & 0x3F))
329 <<
static_cast<char>(0x80 | ((cp >> 6) & 0x3F))
330 <<
static_cast<char>(0x80 | (cp & 0x3F)); }