aboutsummaryrefslogtreecommitdiff
path: root/src/qmmpui/metadataformatter.cpp
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2015-02-02 14:35:27 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2015-02-02 14:35:27 +0000
commit017c9101557477b942ced1739a5668187c5254e0 (patch)
tree3b4cc3d20b356431282b3df1024a6e2aeaae841d /src/qmmpui/metadataformatter.cpp
parentbe414b78f082adbfa033e8e662070b771b05e552 (diff)
downloadqmmp-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
Diffstat (limited to 'src/qmmpui/metadataformatter.cpp')
-rw-r--r--src/qmmpui/metadataformatter.cpp54
1 files changed, 45 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());