From 264f3ddbe777c212620a2e5c66c1b9f358f833e7 Mon Sep 17 00:00:00 2001 From: trialuser02 Date: Mon, 2 Feb 2015 10:10:49 +0000 Subject: enabled new metadata formatter git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@4710 90c681e8-e032-0410-971d-27865f9a5e38 --- src/qmmpui/metadataformatter.h | 68 +++++++++++++++++++++++++++++++++++++----- 1 file changed, 60 insertions(+), 8 deletions(-) (limited to 'src/qmmpui/metadataformatter.h') diff --git a/src/qmmpui/metadataformatter.h b/src/qmmpui/metadataformatter.h index 038c8ba34..39541a379 100644 --- a/src/qmmpui/metadataformatter.h +++ b/src/qmmpui/metadataformatter.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2009-2014 by Ilya Kotov * + * Copyright (C) 2015 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -23,6 +23,7 @@ #include #include +#include #include #include @@ -34,7 +35,7 @@ class MetaDataFormatter public: /*! * Constructor. - * @param format Metadata template. + * @param pattern Metadata template. * Syntax: * %p - artist, * %a - album, @@ -52,17 +53,22 @@ public: * %l - duration, * %if(A,B,C) or %if(A&B&C,D,E) - condition. */ - MetaDataFormatter(const QString &format = QString()); + MetaDataFormatter(const QString &pattern = QString()); + + void setPattern(const QString &pattern); + + const QString pattern() const; + /*! * Converts metadata of item \b item to one string using template. */ - QString parse(const PlayListTrack *item); + QString format(const PlayListTrack *item); /*! * Converts metadata to one string using template. * @param metaData Metadata array. * @param length Length in seconds. */ - QString parse(const QMap &metaData, qint64 length = 0); + QString format(const QMap &metaData, qint64 length = 0); /*! * Returns formatted length (example: 05:02:03). * \param length Length in seconds. @@ -70,8 +76,54 @@ public: QString formatLength(qint64 length) const; private: - QString m_format; - QString processIfKeyWord(QString title); + struct Node; + struct Param; + + struct Node + { + enum { + PRINT_TEXT = 0, + IF_KEYWORD + } command; + + QList params; + }; + + struct Param + { + enum { + FIELD = 0, + TEXT, + NODES + } type; + + //extra fields + enum + { + TWO_DIGIT_TRACK = Qmmp::URL + 1, + DURATION, + FILE_NAME + }; + + int field; + QString text; + QList children; + }; + + bool parseField(QList *nodes, QString::const_iterator *i, QString::const_iterator end); + bool parseIf(QList *nodes, QString::const_iterator *i, QString::const_iterator end); + void parseText(QList *nodes, QString::const_iterator *i, QString::const_iterator end); + + QString evalute(QList *nodes, const QMap *metaData, qint64 length); + QString printParam(Param *p, const QMap *metaData, qint64 length); + QString printField(int field, const QMap *metaData, qint64 length); + + QString dumpNode(Node node); + + QList compile(const QString &expr); + QString m_pattern; + QList m_nodes; + QMap m_fieldNames; }; -#endif // METADATAFORMATTER_H +#endif // METADATAFORMATTER2_H -- cgit v1.2.3-13-gbd6f