summaryrefslogtreecommitdiff
path: root/src/stylesheet.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/stylesheet.h')
-rw-r--r--src/stylesheet.h95
1 files changed, 56 insertions, 39 deletions
diff --git a/src/stylesheet.h b/src/stylesheet.h
index c5c2812..2156b8e 100644
--- a/src/stylesheet.h
+++ b/src/stylesheet.h
@@ -77,48 +77,65 @@ typedef enum css_rule_type {
CSS_RULE_PAGE
} css_rule_type;
+typedef enum css_rule_parent_type {
+ CSS_RULE_PARENT_STYLESHEET,
+ CSS_RULE_PARENT_RULE
+} css_rule_parent_type;
+
struct css_rule {
- css_rule_type type; /**< Type of rule */
-
- union {
- struct {
- uint32_t selector_count;
- css_selector **selectors;
- css_style *style;
- } selector;
- struct {
- uint32_t media;
- uint32_t rule_count;
- css_rule **rules; /** \todo why this? isn't the
- * child list sufficient? */
- } media;
- struct {
- css_style *style;
- } font_face;
- struct {
- uint32_t selector_count;
- css_selector **selectors;
- css_style *style;
- } page;
- struct {
- css_stylesheet *sheet;
- } import;
- struct {
- char *encoding; /** \todo use MIB enum? */
- } charset;
- } data; /**< Rule data */
-
- uint32_t index; /**< Index of rule in sheet */
-
- css_stylesheet *owner; /**< Owning sheet */
-
- css_rule *parent; /**< Parent rule */
- css_rule *first_child; /**< First in child list */
- css_rule *last_child; /**< Last in child list */
- css_rule *next; /**< Next rule */
- css_rule *prev; /**< Previous rule */
+ void *parent; /**< containing rule or owning
+ * stylesheet (defined by ptype)
+ */
+ css_rule *next; /**< next in list */
+ css_rule *prev; /**< previous in list */
+
+ uint32_t type : 4, /**< css_rule_type */
+ index : 16, /**< index in sheet */
+ items : 8, /**< # items in rule */
+ ptype : 1; /**< css_rule_parent_type */
};
+typedef struct css_rule_selector {
+ css_rule base;
+
+ css_selector **selectors;
+ css_style *style;
+} css_rule_selector;
+
+typedef struct css_rule_media {
+ css_rule base;
+
+ uint32_t media;
+
+ css_rule *first_child;
+ css_rule *last_child;
+} css_rule_media;
+
+typedef struct css_rule_font_face {
+ css_rule base;
+
+ css_style *style;
+} css_rule_font_face;
+
+typedef struct css_rule_page {
+ css_rule base;
+
+ css_selector **selectors;
+ css_style *style;
+} css_rule_page;
+
+typedef struct css_rule_import {
+ css_rule base;
+
+ css_stylesheet *sheet;
+} css_rule_import;
+
+typedef struct css_rule_charset {
+ css_rule base;
+
+ char *encoding; /** \todo use MIB enum? */
+} css_rule_charset;
+
struct css_stylesheet {
#define HASH_SIZE (37)
css_selector *selectors[HASH_SIZE]; /**< Hashtable of selectors */