1 #pragma once 2 3 #include "common.hpp" 4 #include "errors.hpp" 5 #include "utils/color.hpp" 6 7 POLYBAR_NS 8 9 class signal_emitter; 10 enum class attribute; 11 enum class controltag; 12 enum class mousebtn; 13 struct bar_settings; 14 15 DEFINE_ERROR(parser_error); 16 DEFINE_CHILD_ERROR(unrecognized_token, parser_error); 17 DEFINE_CHILD_ERROR(unrecognized_attribute, parser_error); 18 DEFINE_CHILD_ERROR(unclosed_actionblocks, parser_error); 19 20 class parser { 21 public: 22 using make_type = unique_ptr<parser>; 23 static make_type make(); 24 25 public: 26 explicit parser(signal_emitter& emitter); 27 void parse(const bar_settings& bar, string data); 28 29 protected: 30 void codeblock(string&& data, const bar_settings& bar); 31 size_t text(string&& data); 32 33 static rgba parse_color(const string& s, rgba fallback = rgba{0}); 34 static int parse_fontindex(const string& s); 35 static attribute parse_attr(const char attr); 36 mousebtn parse_action_btn(const string& data); 37 static string parse_action_cmd(string&& data); 38 static controltag parse_control(const string& data); 39 40 private: 41 signal_emitter& m_sig; 42 vector<int> m_actions; 43 unique_ptr<parser> m_parser; 44 }; 45 46 POLYBAR_NS_END 47