format: implement generic format parser and printer

This commit is contained in:
Andrzej Rybczak
2014-11-10 00:31:53 +01:00
parent 25708093e6
commit 8d24c42261
31 changed files with 640 additions and 408 deletions

View File

@@ -72,7 +72,7 @@ struct Song
virtual std::string getLength(unsigned idx = 0) const;
virtual std::string getPriority(unsigned idx = 0) const;
virtual std::string getTags(GetFunction f, const std::string &tags_separator) const;
virtual std::string getTags(GetFunction f) const;
virtual unsigned getDuration() const;
virtual unsigned getPosition() const;
@@ -85,9 +85,6 @@ struct Song
virtual bool empty() const;
virtual std::string toString(const std::string &fmt, const std::string &tags_separator,
const std::string &escape_chars = "") const;
bool operator==(const Song &rhs) const {
if (m_hash != rhs.m_hash)
return false;
@@ -102,14 +99,10 @@ struct Song
const char *c_uri() const { return m_song ? mpd_song_get_uri(m_song.get()) : ""; }
static std::string ShowTime(unsigned length);
static void validateFormat(const std::string &fmt);
static const char FormatEscapeCharacter = 1;
static std::string TagsSeparator;
private:
std::string ParseFormat(std::string::const_iterator &it, const std::string &tags_separator,
const std::string &escape_chars) const;
std::shared_ptr<mpd_song> m_song;
size_t m_hash;
};