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()); } }