CSS parser

template<typename HandlerT>
class css_parser : public orcus::css::parser_base

Parser for CSS documents.

Template Parameters:

HandlerT – Hanlder type with member functions for event callbacks. Refer to css_handler.

Public Types

typedef HandlerT handler_type

Public Functions

css_parser(std::string_view content, handler_type &hdl)
void parse()

Parser handler

class css_handler

Empty handler for CSS parser. Sub-class from it and implement necessary methods.

Public Functions

inline void at_rule_name(std::string_view name)

Called upon encountering an at-rule.

Parameters:

name – name of the at-rule.

inline void simple_selector_type(std::string_view type)

Called upon encountering a simple selector type. A simple selector may consist of

<type>.<class>#<id>

and this function only passes the type part of the simple selector expression.

Parameters:

type – simple selector type.

inline void simple_selector_class(std::string_view cls)

Called upon encountering a simple selector class. A simple selector may consist of

<type>.<class>#<id>

and this function only passes the class part of the simple selector expression.

Parameters:

cls – simple selector class.

inline void simple_selector_pseudo_element(orcus::css::pseudo_element_t pe)

Called upon encountering a pseudo element of a simple selector. For instance, given the following CSS block:

p::first-line {
  color: blue;
  text-transform: uppercase;
}

the first-line part is the pseudo element of the selector named p.

Parameters:

pe – pseudo element of a simple selector.

inline void simple_selector_pseudo_class(orcus::css::pseudo_class_t pc)

Called upon encountering a pseudo class of a simple selector. For instance, given the following CSS block:

button:hover {
  color: blue;
}

the hover part is the pseudo class of the selector named button.

Parameters:

pc – pseudo class of a simple selector.

inline void simple_selector_id(std::string_view id)

Called upon encountering a simple selector id. A simple selector may consist of

<type>.<class>#<id>

and this function only passes the id part of the simle selector expression.

Parameters:

id – simple selector id.

inline void end_simple_selector()

Called at the end of a simple selector expression.

Todo:

find out the difference between a simple selector and a selector, and document it.

inline void end_selector()

Called at the end of a selector expression.

Todo:

find out the difference between a simple selector and a selector, and document it.

inline void combinator(orcus::css::combinator_t combinator)

Calling upon encountering a combinator. A combinator is an operator that combines other selectors. Given the following CSS block:

div > p {
  background-color: yellow;
}

the > is the combinator that combines the div and p selectors.

Parameters:

combinator – type of combinator encountered.

inline void property_name(std::string_view name)

Called at each property name.

Parameters:

name – property name string.

inline void value(std::string_view value)

Called at each ordinary property value string.

Parameters:

value – value string.

inline void rgb(uint8_t red, uint8_t green, uint8_t blue)

Called at each RGB color value of a property.

Parameters:
  • red – value of red (0-255)

  • green – value of green (0-255)

  • blue – value of blue (0-255)

inline void rgba(uint8_t red, uint8_t green, uint8_t blue, double alpha)

Called at each RGB color value of a property with alpha transparency value.

Parameters:
  • red – value of red (0-255)

  • green – value of green (0-255)

  • blue – value of blue (0-255)

  • alpha – alpha transparency value

inline void hsl(uint8_t hue, uint8_t sat, uint8_t light)

Called at each HSL color value of a property.

Parameters:
  • hue – hue

  • sat – saturation

  • light – lightness

inline void hsla(uint8_t hue, uint8_t sat, uint8_t light, double alpha)

Called at each HSL color value of a property with alpha transparency value.

Parameters:
  • hue – hue

  • sat – saturation

  • light – lightness

  • alpha – alpha value

inline void url(std::string_view url)

Called at each URL value of a property.

Parameters:

url – URL value string.

inline void begin_parse()

Called when the parsing begins.

inline void end_parse()

Called when the parsing ends.

inline void begin_block()

Called at the beginning of each block. An opening brace ‘{’ marks the beginning of a block.

inline void end_block()

Called at the end of each block. A closing brace ‘}’ marks the end of a block.

inline void begin_property()

Called at the beginning of a single property expression. Each property expression may consist of

<name> : <value>, ..., <value>

terminated by either a ; or }.

inline void end_property()

Called at the end of a single property expression.

CSS types

enum class orcus::css::combinator_t

Values:

enumerator descendant

E F where F is a descendant of E.

enumerator direct_child

E > F where F is a direct child of E.

enumerator next_sibling

E + F where F is a direct sibling of E where E precedes F.

enum class orcus::css::property_function_t

List of functions used as property values.

Values:

enumerator unknown
enumerator hsl
enumerator hsla
enumerator rgb
enumerator rgba
enumerator url
enum class orcus::css::property_value_t

Values:

enumerator none
enumerator string
enumerator hsl
enumerator hsla
enumerator rgb
enumerator rgba
enumerator url
using orcus::css::pseudo_element_t = uint16_t
using orcus::css::pseudo_class_t = uint64_t
struct rgba_color_t

Public Members

uint8_t red
uint8_t green

0 to 255

uint8_t blue

0 to 255

double alpha

0 to 255

struct hsla_color_t

Public Members

uint8_t hue
uint8_t saturation

0 to 255

uint8_t lightness

0 to 255

double alpha

0 to 255

Constants

Pseudo elements

const pseudo_element_t orcus::css::pseudo_element_after
const pseudo_element_t orcus::css::pseudo_element_before
const pseudo_element_t orcus::css::pseudo_element_first_letter
const pseudo_element_t orcus::css::pseudo_element_first_line
const pseudo_element_t orcus::css::pseudo_element_selection
const pseudo_element_t orcus::css::pseudo_element_backdrop

Pseudo classes

const pseudo_class_t orcus::css::pseudo_class_active
const pseudo_class_t orcus::css::pseudo_class_checked
const pseudo_class_t orcus::css::pseudo_class_default
const pseudo_class_t orcus::css::pseudo_class_dir
const pseudo_class_t orcus::css::pseudo_class_disabled
const pseudo_class_t orcus::css::pseudo_class_empty
const pseudo_class_t orcus::css::pseudo_class_enabled
const pseudo_class_t orcus::css::pseudo_class_first
const pseudo_class_t orcus::css::pseudo_class_first_child
const pseudo_class_t orcus::css::pseudo_class_first_of_type
const pseudo_class_t orcus::css::pseudo_class_fullscreen
const pseudo_class_t orcus::css::pseudo_class_focus
const pseudo_class_t orcus::css::pseudo_class_hover
const pseudo_class_t orcus::css::pseudo_class_indeterminate
const pseudo_class_t orcus::css::pseudo_class_in_range
const pseudo_class_t orcus::css::pseudo_class_invalid
const pseudo_class_t orcus::css::pseudo_class_lang
const pseudo_class_t orcus::css::pseudo_class_last_child
const pseudo_class_t orcus::css::pseudo_class_last_of_type
const pseudo_class_t orcus::css::pseudo_class_left
const pseudo_class_t orcus::css::pseudo_class_link
const pseudo_class_t orcus::css::pseudo_class_not
const pseudo_class_t orcus::css::pseudo_class_nth_child
const pseudo_class_t orcus::css::pseudo_class_nth_last_child
const pseudo_class_t orcus::css::pseudo_class_nth_last_of_type
const pseudo_class_t orcus::css::pseudo_class_nth_of_type
const pseudo_class_t orcus::css::pseudo_class_only_child
const pseudo_class_t orcus::css::pseudo_class_only_of_type
const pseudo_class_t orcus::css::pseudo_class_optional
const pseudo_class_t orcus::css::pseudo_class_out_of_range
const pseudo_class_t orcus::css::pseudo_class_read_only
const pseudo_class_t orcus::css::pseudo_class_read_write
const pseudo_class_t orcus::css::pseudo_class_required
const pseudo_class_t orcus::css::pseudo_class_right
const pseudo_class_t orcus::css::pseudo_class_root
const pseudo_class_t orcus::css::pseudo_class_scope
const pseudo_class_t orcus::css::pseudo_class_target
const pseudo_class_t orcus::css::pseudo_class_valid
const pseudo_class_t orcus::css::pseudo_class_visited