aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2015-02-02 12:30:42 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2015-02-02 12:30:42 +0000
commit7e324269d1bfd63f68798eabb113ec3d28a26f22 (patch)
tree8daaa33ee445865410960c38de064efd4cb5edf4 /src
parent908de607e2f3de2fd50517a9752cf66bddd16582 (diff)
downloadqmmp-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.cpp63
-rw-r--r--src/qmmpui/metadataformatter.h4
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;