#pragma once #include #include "common.hpp" #include "errors.hpp" POLYBAR_NS class signal_emitter; enum class attribute; enum class mousebtn; struct bar_settings; DEFINE_ERROR(parser_error); DEFINE_CHILD_ERROR(unrecognized_token, parser_error); DEFINE_CHILD_ERROR(unrecognized_attribute, parser_error); DEFINE_CHILD_ERROR(unclosed_actionblocks, parser_error); class parser { public: using make_type = unique_ptr; static make_type make(); public: explicit parser(signal_emitter& emitter); void parse(const bar_settings& bar, string data); protected: void codeblock(string&& data, const bar_settings& bar); size_t text(string&& data); unsigned int parse_color(std::stack& color_stack, string& value, unsigned int fallback); unsigned int parse_color_string(const string& s, unsigned int fallback = 0); int parse_fontindex(const string& value); attribute parse_attr(const char attr); mousebtn parse_action_btn(const string& data); string parse_action_cmd(string&& data); private: signal_emitter& m_sig; vector m_actions; unique_ptr m_parser; std::stack m_fg; std::stack m_bg; std::stack m_ul; std::stack m_ol; }; POLYBAR_NS_END