CPPValue parseCharacter() // does not work for '\n' and the alike { if (g_strToken[1]=='\\') { switch(g_strToken[2]) { case 'n': return CPPValue((long)'\n'); case 't': return CPPValue((long)'\t'); case 'v': return CPPValue((long)'\v'); case 'b': return CPPValue((long)'\b'); case 'r': return CPPValue((long)'\r'); case 'f': return CPPValue((long)'\f'); case 'a': return CPPValue((long)'\a'); case '\\': return CPPValue((long)'\\'); case '?': return CPPValue((long)'\?'); case '\'': return CPPValue((long)'\''); case '"': return CPPValue((long)'"'); case '0': // fall through case '1': // fall through case '2': // fall through case '3': // fall through case '4': // fall through case '5': // fall through case '6': // fall through case '7': // fall through return parseOctal(); case 'x': case 'X': return parseHexadecimal(); default: printf("Invalid escape sequence %s found!\n",g_strToken.data()); return CPPValue(0L); } } return CPPValue((long)g_strToken[1]); }
CMString WCPattern::parseEscape(bool & inv, bool & quo) { wchar_t ch = pattern[curInd++]; CMString classes; if (curInd > pattern.GetLength()) { raiseError(); return ""; } quo = 0; inv = 0; switch (ch) { case 'p': classes = parsePosix(); break; case 'P': classes = L"!!"; classes += parsePosix(); break; case 'd': classes = L"0123456789"; break; case 'D': classes = L"!!0123456789"; break; case 's': classes = L" \t\r\n\f"; break; case 'S': classes = L"!! \t\r\n\f"; break; case 'w': classes = L"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"; break; case 'W': classes = L"!!abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"; break; case '0': classes = parseOctal(); break; case 'x': classes = parseHex(); break; case 'Q': quo = 1; break; case 't': classes = L"\t"; break; case 'r': classes = L"\r"; break; case 'n': classes = L"\n"; break; case 'f': classes = L"\f"; break; case 'a': classes = L"\a"; break; case 'e': classes = L"\r"; break; default: classes.AppendChar(ch); break; } if (classes.Mid(0, 2) == L"!!") { classes = classes.Mid(2); inv = 1; } return classes; }