diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2015-02-02 14:35:27 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2015-02-02 14:35:27 +0000 |
| commit | 017c9101557477b942ced1739a5668187c5254e0 (patch) | |
| tree | 3b4cc3d20b356431282b3df1024a6e2aeaae841d | |
| parent | be414b78f082adbfa033e8e662070b771b05e552 (diff) | |
| download | qmmp-017c9101557477b942ced1739a5668187c5254e0.tar.gz qmmp-017c9101557477b942ced1739a5668187c5254e0.tar.bz2 qmmp-017c9101557477b942ced1739a5668187c5254e0.zip | |
formatter: added symbol escaping
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@4715 90c681e8-e032-0410-971d-27865f9a5e38
| -rw-r--r-- | src/qmmpui/metadataformatter.cpp | 54 | ||||
| -rw-r--r-- | src/qmmpui/metadataformatter.h | 1 |
2 files changed, 46 insertions, 9 deletions
diff --git a/src/qmmpui/metadataformatter.cpp b/src/qmmpui/metadataformatter.cpp index 708888de8..05f0d8380 100644 --- a/src/qmmpui/metadataformatter.cpp +++ b/src/qmmpui/metadataformatter.cpp @@ -166,20 +166,36 @@ bool MetaDataFormatter::parseIf(QList<MetaDataFormatter::Node> *nodes, QString:: } state = STARTING; + bool escaped = false; + while((*i) != end) { - if((**i) == QChar('(')) + if((**i) == QChar('\\')) + { + (*i)++; + escaped = true; + continue; + } + + if(escaped) //ignore escaped brackets + { + escaped = false; + } + else { - brackets_tracker++; - if(state == STARTING) + if((**i) == QChar('(')) { - state = READING_VAR1; - (*i)++; - continue; + brackets_tracker++; + if(state == STARTING) + { + state = READING_VAR1; + (*i)++; + continue; + } } + else if((**i) == QChar(')')) + brackets_tracker--; } - else if((**i) == QChar(')')) - brackets_tracker--; switch (state) { @@ -265,6 +281,20 @@ void MetaDataFormatter::parseText(QList<MetaDataFormatter::Node> *nodes, QString nodes->append(node); } +void MetaDataFormatter::parseEscape(QList<MetaDataFormatter::Node> *nodes, QString::const_iterator *i, QString::const_iterator end) +{ + if((*i) == end) + return; + + Node node; + node.command = Node::PRINT_TEXT; + Param param; + param.type = Param::TEXT; + node.params.append(param); + node.params[0].text.append(**i); + nodes->append(node); +} + QString MetaDataFormatter::evalute(const QList<Node> *nodes, const QMap<Qmmp::MetaData, QString> *metaData, qint64 length) const { QString out; @@ -301,7 +331,7 @@ QString MetaDataFormatter::evalute(const QList<Node> *nodes, const QMap<Qmmp::Me { QString var2 = printParam(&node.params[1], metaData, length); if(!var2.isEmpty()) - out += "1"; + out.append("1"); } } } @@ -432,6 +462,12 @@ QList<MetaDataFormatter::Node> MetaDataFormatter::compile(const QString &expr) node.command = Node::OR_OPERATOR; nodes.append(node); } + else if((*i) == QChar('\\')) + { + i++; + parseEscape(&nodes, &i, expr.constEnd()); + i++; + } else { parseText(&nodes, &i, expr.constEnd()); diff --git a/src/qmmpui/metadataformatter.h b/src/qmmpui/metadataformatter.h index 7ad0649ec..b2a3baee6 100644 --- a/src/qmmpui/metadataformatter.h +++ b/src/qmmpui/metadataformatter.h @@ -115,6 +115,7 @@ private: bool parseField(QList<Node> *nodes, QString::const_iterator *i, QString::const_iterator end); bool parseIf(QList<Node> *nodes, QString::const_iterator *i, QString::const_iterator end); void parseText(QList<Node> *nodes, QString::const_iterator *i, QString::const_iterator end); + void parseEscape(QList<Node> *nodes, QString::const_iterator *i, QString::const_iterator end); QString evalute(const QList<Node> *nodes, const QMap<Qmmp::MetaData, QString> *metaData, qint64 length) const; QString printParam(Param *p, const QMap<Qmmp::MetaData, QString> *metaData, qint64 length) const; |
