From 7e324269d1bfd63f68798eabb113ec3d28a26f22 Mon Sep 17 00:00:00 2001 From: trialuser02 Date: Mon, 2 Feb 2015 12:30:42 +0000 Subject: 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 --- src/qmmpui/metadataformatter.cpp | 63 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 62 insertions(+), 1 deletion(-) (limited to 'src/qmmpui/metadataformatter.cpp') 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 *nodes, const QMap 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; } -- cgit v1.2.3-13-gbd6f