void showDebug(const char* funcName, const QAccessibleInterface *iface)
{
    qDebug() << "Role:" << roleString(iface->role(0)) 
             << "Name:" << iface->text(QAccessible::Name, 0) 
             << "State:" << QString::number(int(iface->state(0)), 16) 
             << QLatin1String(funcName);
}
KFormula* KFormula::parseRest(const char*& str) {
  while(isspace(*str)) ++str;


  KFormula *left;

  if(*str == '('){
	++str;
	left = parseEQU(str);
	while(isspace(*str)) ++str;
	assert(*str == ')');
	++str;
	return left;
  } else if (strncmp(str,"<", 1) == 0 && (isalnum(*(str + 1)) || *(str+1) == '-')) {
  size_t n = 1;// "<"
  if (*(str+1) == '-') ++n;
  while(isalnum(*(str+n))) ++n;
  std::string roleString(str+1, n - 1);
  ++n;// ">"
	str += n;
	left = parseRest(str);
	left = new KFormula(KFormula::DIA,left,NULL);
	left->setprop(roleString);
	return left;
  } else if (strncmp(str,"<>", 2) == 0) {
	str += 2;
	left = parseRest(str);
	left = new KFormula(KFormula::DIA,left,NULL);
	return left;
  } else if (strncmp(str,"[", 1) == 0 && (isalnum(*(str + 1)) || *(str+1) == '-')) {
  size_t n = 1;// "["
  if (*(str+1) == '-') ++n;
  while(isalnum(*(str+n))) ++n;
  std::string roleString(str+1, n - 1);
  ++n;// "]"
	str += n;
	left = parseRest(str);
	left = new KFormula(KFormula::BOX,left,NULL);
	left->setprop(roleString);
	return left;
  }else if (strncmp(str,"[]",2) == 0) {
	str += 2;
	left = parseRest(str);
	left = new KFormula(KFormula::BOX,left,NULL);
	return left;
  } else if (*str=='~') {
	++str;
	left = parseRest(str);
	left = new KFormula(KFormula::NOT,left,NULL);
	return left;
  } else if (strncmp(str,"True",4)==0) {
	str += 4;
	return new KFormula(true);
  } else if (strncmp(str,"False",5)==0) {
	str += 5;
	return new KFormula(false);
  } else if (isalpha(*str) || *str == '_') {
	size_t n = 1;
	while(isalnum(*(str+n)) || *(str+n) == '_') ++n;
	left = new KFormula(std::string(str,n));
	str += n;
	return left;
  }

  assert(false && "Could not parse input");
  // Must not reach here

}