From 017c9101557477b942ced1739a5668187c5254e0 Mon Sep 17 00:00:00 2001 From: trialuser02 Date: Mon, 2 Feb 2015 14:35:27 +0000 Subject: formatter: added symbol escaping git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@4715 90c681e8-e032-0410-971d-27865f9a5e38 --- src/qmmpui/metadataformatter.cpp | 54 +++++++++++++++++++++++++++++++++------- 1 file changed, 45 insertions(+), 9 deletions(-) (limited to 'src/qmmpui/metadataformatter.cpp') 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 *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 *nodes, QString nodes->append(node); } +void MetaDataFormatter::parseEscape(QList *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 *nodes, const QMap *metaData, qint64 length) const { QString out; @@ -301,7 +331,7 @@ QString MetaDataFormatter::evalute(const QList *nodes, const QMap 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()); -- cgit v1.2.3-13-gbd6f