2 #include <msp/core/maputils.h>
3 #include <msp/io/print.h>
11 FilterStatement::FilterStatement():
15 void FilterStatement::set_show(bool s)
20 void FilterStatement::add_line(const string &l)
25 void FilterStatement::add_line(list<FilterStatement> &st, const string &line)
27 for(list<FilterStatement>::iterator i=st.begin(); i!=st.end(); ++i)
31 void FilterStatement::write(IO::Base &out) const
38 for(list<string>::const_iterator i=lines.begin(); i!=lines.end(); ++i)
39 IO::print(out, "\t%s\n", *i);
47 void Filter::write(IO::Base &out, const Theme &theme) const
49 for(list<const Category *>::const_iterator i=categories.begin(); i!=categories.end(); ++i)
51 list<FilterStatement> st;
52 //IO::print(out, "# %s\n", i->first);
53 (*i)->create_statements(st, theme);
54 for(list<FilterStatement>::const_iterator j=st.begin(); j!=st.end(); ++j)
58 out.write("# unmatched\nHide\n");
62 Filter::Loader::Loader(Filter &f, const PoeFilter &p):
63 DataFile::ObjectLoader<Filter>(f),
66 add("abstract", &Filter::abstract);
67 add("hide", &Loader::hide);
68 add("include", &Loader::include);
69 add("show", &Loader::show);
72 string Filter::Loader::glob_to_re(const string &glob)
75 for(string::const_iterator i=glob.begin(); i!=glob.end(); ++i)
88 bool Filter::Loader::category_order(const Category *c1, const Category *c2)
90 return c1->get_order()<c2->get_order();
93 void Filter::Loader::hide(const string &name)
95 list<const Category *> categs;
96 if(name.find('*')!=string::npos)
98 poe.find_categories(glob_to_re(name), categs);
101 throw key_error(name);
104 categs.push_back(&poe.get_category(name));
106 for(list<const Category *>::const_iterator i=categs.begin(); i!=categs.end(); ++i)
108 list<const Category *>::iterator j = find(obj.categories.begin(), obj.categories.end(), *i);
109 if(j!=obj.categories.end())
110 obj.categories.erase(j);
114 void Filter::Loader::include(const string &name)
116 const Filter &base = poe.get_filter(name);
117 obj.categories.insert(obj.categories.end(), base.categories.begin(), base.categories.end());
120 void Filter::Loader::show(const string &name)
122 list<const Category *> categs;
123 if(name.find('*')!=string::npos)
125 poe.find_categories(glob_to_re(name), categs);
128 throw key_error(name);
130 categs.sort(&category_order);
133 categs.push_back(&poe.get_category(name));
135 for(list<const Category *>::const_iterator i=categs.begin(); i!=categs.end(); ++i)
136 if(find(obj.categories.begin(), obj.categories.end(), *i)==obj.categories.end())
137 obj.categories.push_back(*i);