diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2015-02-02 12:30:42 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2015-02-02 12:30:42 +0000 |
| commit | 7e324269d1bfd63f68798eabb113ec3d28a26f22 (patch) | |
| tree | 8daaa33ee445865410960c38de064efd4cb5edf4 /src | |
| parent | 908de607e2f3de2fd50517a9752cf66bddd16582 (diff) | |
| download | qmmp-7e324269d1bfd63f68798eabb113ec3d28a26f22.tar.gz qmmp-7e324269d1bfd63f68798eabb113ec3d28a26f22.tar.bz2 qmmp-7e324269d1bfd63f68798eabb113ec3d28a26f22.zip | |
formatter: added OR and AND operators
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@4713 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src')
| -rw-r--r-- | src/qmmpui/metadataformatter.cpp | 63 | ||||
| -rw-r--r-- | src/qmmpui/metadataformatter.h | 4 |
2 files changed, 65 insertions, 2 deletions
diff --git a/src/qmmpui/metadataformatter.cpp b/src/qmmpui/metadataformatter.cpp index dbee47323..708888de8 100644 --- a/src/qmmpui/metadataformatter.cpp +++ b/src/qmmpui/metadataformatter.cpp @@ -280,11 +280,30 @@ QString MetaDataFormatter::evalute(const QList<Node> *nodes, const QMap<Qmmp::Me else if(node.command == Node::IF_KEYWORD) { QString var1 = printParam(&node.params[0], metaData, length); - if(var1.isEmpty()) + if(var1.isEmpty() || var1 == "0") out.append(printParam(&node.params[2], metaData, length)); else out.append(printParam(&node.params[1], metaData, length)); } + else if(node.command == Node::AND_OPERATOR) + { + QString var1 = printParam(&node.params[0], metaData, length); + QString var2 = printParam(&node.params[1], metaData, length); + if(!var1.isEmpty() && !var2.isEmpty()) + out.append("1"); + } + else if(node.command == Node::OR_OPERATOR) + { + QString var1 = printParam(&node.params[0], metaData, length); + if(!var1.isEmpty()) + out.append("1"); + else + { + QString var2 = printParam(&node.params[1], metaData, length); + if(!var2.isEmpty()) + out += "1"; + } + } } return out; } @@ -347,6 +366,10 @@ QString MetaDataFormatter::dumpNode(MetaDataFormatter::Node node) const str += "PRINT_TEXT"; else if(node.command == Node::IF_KEYWORD) str += "IF_KEYWORD"; + else if(node.command == Node::AND_OPERATOR) + str += "AND_OPERATOR"; + else if(node.command == Node::OR_OPERATOR) + str += "OR_OPERATOR"; str += "("; foreach (Param p, node.params) { @@ -395,11 +418,49 @@ QList<MetaDataFormatter::Node> MetaDataFormatter::compile(const QString &expr) } continue; } + else if((*i) == QChar('&')) + { + i++; + Node node; + node.command = Node::AND_OPERATOR; + nodes.append(node); + } + else if((*i) == QChar('|')) + { + i++; + Node node; + node.command = Node::OR_OPERATOR; + nodes.append(node); + } else { parseText(&nodes, &i, expr.constEnd()); i++; } } + + //wrap operators + for(int j = 0; j < nodes.count(); ++j) + { + if(nodes[j].command == Node::AND_OPERATOR || + nodes[j].command == Node::OR_OPERATOR) + { + if(j == 0 || j == nodes.count() - 1) + { + nodes.clear(); + qDebug("MetaDataFormatter: syntax error"); + } + + Param p1; + p1.type = Param::NODES; + p1.children << nodes.takeAt(j+1); + Param p2; + p2.type = Param::NODES; + p2.children << nodes.takeAt(j-1); + nodes[j-1].params.append(p1); + nodes[j-1].params.append(p2); + j--; + } + } return nodes; } diff --git a/src/qmmpui/metadataformatter.h b/src/qmmpui/metadataformatter.h index b44a25b2f..7ad0649ec 100644 --- a/src/qmmpui/metadataformatter.h +++ b/src/qmmpui/metadataformatter.h @@ -83,7 +83,9 @@ private: { enum { PRINT_TEXT = 0, - IF_KEYWORD + IF_KEYWORD, + OR_OPERATOR, + AND_OPERATOR } command; QList<Param> params; |
