1#ifndef LH_CSS_SELECTOR_H
2#define LH_CSS_SELECTOR_H
5#include "media_query.h"
36 if(a == val.a && b == val.b && c == val.c && d == val.d)
45 if(a != val.a || b != val.b || c != val.c || d != val.d)
93 if((*
this) == val)
return true;
94 if((*
this) > val)
return true;
109 if((*
this) <= val && (*
this) != val)
120 enum attr_select_condition
128 select_pseudo_element,
135 typedef std::vector<css_attribute_selector> vector;
139 string_vector class_val;
140 attr_select_condition condition;
144 condition = select_exists;
154 css_attribute_selector::vector m_attrs;
157 void parse(
const tstring& txt);
164 combinator_descendant,
166 combinator_adjacent_sibling,
167 combinator_general_sibling
175 typedef std::shared_ptr<css_selector> ptr;
176 typedef std::vector<css_selector::ptr> vector;
180 css_selector::ptr m_left;
181 css_combinator m_combinator;
184 media_query_list::ptr m_media_query;
188 m_media_query = media;
189 m_combinator = combinator_descendant;
199 m_right = val.m_right;
202 m_left = std::make_shared<css_selector>(*val.m_left);
207 m_combinator = val.m_combinator;
208 m_specificity = val.m_specificity;
209 m_order = val.m_order;
210 m_media_query = val.m_media_query;
213 bool parse(
const tstring& text);
214 void calc_specificity();
215 bool is_media_valid()
const;
216 void add_media_to_doc(
document* doc)
const;
219 inline bool css_selector::is_media_valid()
const
225 return m_media_query->is_used();
231 inline bool operator > (
const css_selector& v1,
const css_selector& v2)
233 if(v1.m_specificity == v2.m_specificity)
235 return (v1.m_order > v2.m_order);
237 return (v1.m_specificity > v2.m_specificity);
240 inline bool operator < (
const css_selector& v1,
const css_selector& v2)
242 if(v1.m_specificity == v2.m_specificity)
244 return (v1.m_order < v2.m_order);
246 return (v1.m_specificity < v2.m_specificity);
249 inline bool operator >(
const css_selector::ptr& v1,
const css_selector::ptr& v2)
254 inline bool operator < (
const css_selector::ptr& v1,
const css_selector::ptr& v2)
264 typedef std::unique_ptr<used_selector> ptr;
265 typedef std::vector<used_selector::ptr> vector;
267 css_selector::ptr m_selector;
273 m_selector = selector;