kolibrios/programs/network/netsurf/libcss/docs/Representation

99 lines
2.3 KiB
Plaintext
Raw Normal View History

LibCSS internal stylesheet representation
=========================================
Selector:
struct selector {
selector_type type; /**< Type of selector */
struct {
const uint8_t *name;
size_t name_len;
const uint8_t *value;
size_t value_len;
} data; /**< Selector data */
struct selector *specifics; /**< Selector specifics */
combinator combinator_type; /**< Type of combinator */
struct selector *combinator; /**< Combining selector */
struct rule *rule; /**< Owning rule */
struct style *style; /**< Applicable style */
struct selector *next; /**< Next selector in list */
struct selector *prev; /**< Previous selector */
};
Rule:
struct rule {
rule_type type; /**< Type of rule */
union {
struct {
uint32_t selector_count;
struct selector **selectors;
} selector;
struct {
uint32_t media;
uint32_t rule_count;
struct rule **rules;
} media;
struct {
struct style *style;
} font_face;
struct {
uint32_t selector_count;
struct selector **selectors;
struct style *style;
} page;
struct {
struct stylesheet *sheet;
} import;
struct {
char *encoding;
} charset;
} data; /**< Rule data */
uint32_t index; /**< Index of rule in sheet */
struct stylesheet *owner; /**< Owning sheet */
struct rule *parent; /**< Parent rule */
struct rule *first_child; /**< First in child list */
struct rule *last_child; /**< Last in child list */
struct rule *next; /**< Next rule */
struct rule *prev; /**< Previous rule */
};
Stylesheet:
struct stylesheet {
#define HASH_SIZE (37)
struct selector *selectors[HASH_SIZE]; /**< Hashtable of selectors */
uint32_t rule_count; /**< Number of rules in sheet */
struct rule *rule_list; /**< List of rules in sheet */
bool disabled; /**< Whether this sheet is
* disabled */
char *url; /**< URL of this sheet */
char *title; /**< Title of this sheet */
uint32_t media; /**< Bitfield of media types */
void *ownerNode; /**< Owning node in document */
struct rule *ownerRule; /**< Owning rule in parent */
struct stylesheet *parent; /**< Parent sheet */
struct stylesheet *first_child; /**< First in child list */
struct stylesheet *last_child; /**< Last in child list */
struct stylesheet *next; /**< Next in sibling list */
struct stylesheet *prev; /**< Previous in sibling list */
};