Ejemplo n.º 1
0
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]);
}
Ejemplo n.º 2
0
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;
}