QString SnippetsConfigWidget::parseSnippet(attribs_map snippet, attribs_map attribs)
{ 
  SchemaParser schparser;
  QStringList aux_attribs;
  QString buf=snippet[ParsersAttributes::CONTENTS];

  if(snippet[ParsersAttributes::PARSABLE]!=ParsersAttributes::_TRUE_)
    return(buf);

  try
  {
    schparser.loadBuffer(buf);

    //Assigning dummy values for empty attributes
    if(snippet[ParsersAttributes::PLACEHOLDERS]==ParsersAttributes::_TRUE_)
    {
      aux_attribs=schparser.extractAttributes();
      for(QString attr : aux_attribs)
      {
        if(attribs.count(attr)==0 ||
           (attribs.count(attr) && attribs[attr].isEmpty()))
          attribs[attr]=QString("{%1}").arg(attr);
      }
    }

    schparser.ignoreEmptyAttributes(true);
    schparser.ignoreUnkownAttributes(true);
    return(schparser.getCodeDefinition(attribs));
  }
  catch(Exception &e)
  {
    throw Exception(e.getErrorMessage(),e.getErrorType(),__PRETTY_FUNCTION__,__FILE__,__LINE__,&e);
  }
}
bool SnippetsConfigWidget::isSnippetValid(attribs_map &attribs, const QString &orig_id)
{
  Messagebox msg_box;
  QString snip_id=attribs.at(ParsersAttributes::ID),
          err_msg;

  if(!orig_id.isEmpty() && snip_id!=orig_id && config_params.count(snip_id)!=0)
    err_msg=trUtf8("Duplicated snippet id <strong>%1</strong> detected. Please, specify a different one!").arg(snip_id);
  else if(!ID_FORMAT_REGEXP.exactMatch(snip_id))
    err_msg=trUtf8("Invalid ID pattern detected <strong>%1</strong>. This one must start with at leat one letter and be composed by letters, numbers and/or underscore!").arg(snip_id);
  else if(attribs[ParsersAttributes::LABEL].isEmpty())
    err_msg=trUtf8("Empty label for snippet <strong>%1</strong>. Please, specify a value for it!").arg(snip_id);
  else if(attribs[ParsersAttributes::CONTENTS].isEmpty())
    err_msg=trUtf8("Empty code for snippet <strong>%1</strong>. Please, specify a value for it!").arg(snip_id);
  else if(attribs[ParsersAttributes::PARSABLE]==ParsersAttributes::_TRUE_)
  {
    try
    {
      QString buf=snippet_txt->toPlainText();
      attribs_map attribs;
      SchemaParser schparser;

      schparser.loadBuffer(buf);
      schparser.ignoreEmptyAttributes(true);
      schparser.ignoreUnkownAttributes(true);
      schparser.getCodeDefinition(attribs);
    }
    catch(Exception &e)
    {
      err_msg=trUtf8("The dynamic snippet contains syntax error(s). Additional info: <br/><em>%1</em>").arg(e.getErrorMessage());
    }
  }

  if(!err_msg.isEmpty())
  {
    msg_box.show(err_msg, Messagebox::ERROR_ICON, Messagebox::OK_BUTTON);
    return(false);
  }
  else
    return(true);
}
void SchemaParserTest::testExpressionEvaluationWithCasts(void)
{
	SchemaParser schparser;
	QString buffer;
	attribs_map attribs;

	buffer = "%set {ver} 10.0\n";
	buffer += "\n%if ({ver} >f \"9.3\") %then";
	buffer += "\n 10.0";
	buffer += "\n%else";
	buffer += "\n 9.3";
	buffer += "\n%end";

	try
	{
		schparser.loadBuffer(buffer);
		QCOMPARE(schparser.getCodeDefinition(attribs) == "10.0", true);
	}
	catch(Exception &e)
	{
		QFAIL(e.getExceptionsText().toStdString().c_str());
	}
}