MCPcopy Create free account
hub / github.com/TorqueGameEngines/Torque3D / collapseEscape

Function collapseEscape

Engine/source/console/CMDscan.cpp:2463–2538  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2461}
2462
2463bool collapseEscape(char *buf)
2464{
2465 S32 len = dStrlen(buf) + 1;
2466 for(S32 i = 0; i < len;)
2467 {
2468 if(buf[i] == '\\')
2469 {
2470 if(buf[i+1] == 'x')
2471 {
2472 S32 dig1 = getHexDigit(buf[i+2]);
2473 if(dig1 == -1)
2474 return false;
2475
2476 S32 dig2 = getHexDigit(buf[i+3]);
2477 if(dig2 == -1)
2478 return false;
2479 buf[i] = dig1 * 16 + dig2;
2480 dMemmove(buf + i + 1, buf + i + 4, len - i - 3);
2481 len -= 3;
2482 i++;
2483 }
2484 else if(buf[i+1] == 'c')
2485 {
2486 /* Remap around: \b = 0x8, \t = 0x9, \n = 0xa, \r = 0xd */
2487 static U8 collapseRemap[10] = { 0x1,
2488 0x2,
2489 0x3,
2490 0x4,
2491 0x5,
2492 0x6,
2493 0x7,
2494 0xb,
2495 0xc,
2496 0xe };
2497
2498 if(buf[i+2] == 'r')
2499 buf[i] = 15;
2500 else if(buf[i+2] == 'p')
2501 buf[i] = 16;
2502 else if(buf[i+2] == 'o')
2503 buf[i] = 17;
2504 else
2505 {
2506 int dig1 = buf[i+2] - '0';
2507 if(dig1 < 0 || dig1 > 9)
2508 return false;
2509 buf[i] = collapseRemap[dig1];
2510 }
2511 // Make sure we don't put 0x1 at the beginning of the string.
2512 if ((buf[i] == 0x1) && (i == 0))
2513 {
2514 buf[i] = 0x2;
2515 buf[i+1] = 0x1;
2516 dMemmove(buf + i + 2, buf + i + 3, len - i - 1);
2517 len -= 1;
2518 }
2519 else
2520 {

Callers 3

Sc_ScanStringFunction · 0.85
collapseEscapesMethod · 0.85

Calls 4

getHexDigitFunction · 0.85
charConvFunction · 0.85
dStrlenFunction · 0.50
dMemmoveFunction · 0.50

Tested by

no test coverage detected