summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Mark Bell <jmb@netsurf-browser.org>2008-10-22 11:50:57 +0000
committerJohn Mark Bell <jmb@netsurf-browser.org>2008-10-22 11:50:57 +0000
commit13f918ea838c1cb971daf12b54fe68f39f798ba2 (patch)
treec0bd18b26ae608613a30f754c70f2eb03d13ecaf
parent815265e0c9426d3b7934557d893815297bb8a9bf (diff)
downloadlibcss-13f918ea838c1cb971daf12b54fe68f39f798ba2.tar.gz
libcss-13f918ea838c1cb971daf12b54fe68f39f798ba2.tar.bz2
Parse common part of declarations.
Stub out handlers for properties. svn path=/trunk/libcss/; revision=5620
-rwxr-xr-xbuild/mkprops.pl73
-rw-r--r--src/parse/css21.c202
-rw-r--r--src/parse/css21props.c1610
-rw-r--r--src/stylesheet.h9
4 files changed, 1888 insertions, 6 deletions
diff --git a/build/mkprops.pl b/build/mkprops.pl
new file mode 100755
index 0000000..5464053
--- /dev/null
+++ b/build/mkprops.pl
@@ -0,0 +1,73 @@
+#!/usr/bin/perl
+
+use warnings;
+use strict;
+
+# Auto-generate stub handlers for CSS properties.
+
+my @PROPS = split(/ /, "azimuth background_attachment background_color background_image background_position background_repeat border_bottom_color border_bottom_style border_bottom_width border_collapse border_left_color border_left_style border_left_width border_right_color border_right_style border_right_width border_spacing border_top_color border_top_style border_top_width bottom caption_side clear clip color content counter_increment counter_reset cue_after cue_before cursor direction display elevation empty_cells float font_family font_size font_style font_variant font_weight height left letter_spacing line_height list_style_image list_style_position list_style_type margin_bottom margin_left margin_right margin_top max_height max_width min_height min_width orphans outline_color outline_style outline_width overflow padding_bottom padding_left padding_right padding_top page_break_after page_break_before page_break_inside pause_after pause_before pitch_range pitch play_during position quotes richness right speak_header speak_numeral speak_punctuation speak speech_rate stress table_layout text_align text_decoration text_indent text_transform top unicode_bidi vertical_align visibility voice_family volume white_space widows width word_spacing z_index");
+
+print <<EOF
+/*
+ * This file is part of LibCSS.
+ * Licensed under the MIT License,
+ * http://www.opensource.org/licenses/mit-license.php
+ * Copyright 2008 John-Mark Bell <jmb\@netsurf-browser.org>
+ */
+
+#ifndef css_parse_css21props_c_
+#define css_parse_css21props_c_
+
+EOF
+;
+
+foreach my $prop (@PROPS) {
+print <<EOF
+static css_error parse_$prop(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+EOF
+}
+
+print <<EOF
+
+/**
+ * Type of property handler function
+ */
+typedef css_error (*css_prop_handler)(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+
+/**
+ * Dispatch table of property handlers, indexed by property enum
+ */
+static const css_prop_handler property_handlers[LAST_KNOWN - FIRST_PROP] =
+{
+EOF
+;
+
+foreach my $prop (@PROPS) {
+ print "\tparse_$prop,\n";
+}
+
+print "};\n";
+
+foreach my $prop (@PROPS) {
+print <<EOF
+
+css_error parse_$prop(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+EOF
+}
+
+print "\n#endif\n";
+
diff --git a/src/parse/css21.c b/src/parse/css21.c
index a286bd2..7f49490 100644
--- a/src/parse/css21.c
+++ b/src/parse/css21.c
@@ -21,6 +21,30 @@
enum {
CHARSET, IMPORT, MEDIA, PAGE,
+ FIRST_PROP,
+
+ AZIMUTH = FIRST_PROP, BACKGROUND_ATTACHMENT, BACKGROUND_COLOR,
+ BACKGROUND_IMAGE, BACKGROUND_POSITION, BACKGROUND_REPEAT,
+ BORDER_BOTTOM_COLOR, BORDER_BOTTOM_STYLE, BORDER_BOTTOM_WIDTH,
+ BORDER_COLLAPSE, BORDER_LEFT_COLOR, BORDER_LEFT_STYLE,
+ BORDER_LEFT_WIDTH, BORDER_RIGHT_COLOR, BORDER_RIGHT_STYLE,
+ BORDER_RIGHT_WIDTH, BORDER_SPACING, BORDER_TOP_COLOR, BORDER_TOP_STYLE,
+ BORDER_TOP_WIDTH, BOTTOM, CAPTION_SIDE, CLEAR, CLIP, COLOR, CONTENT,
+ COUNTER_INCREMENT, COUNTER_RESET, CUE_AFTER, CUE_BEFORE, CURSOR,
+ DIRECTION, DISPLAY, ELEVATION, EMPTY_CELLS, FLOAT, FONT_FAMILY,
+ FONT_SIZE, FONT_STYLE, FONT_VARIANT, FONT_WEIGHT, HEIGHT, LEFT,
+ LETTER_SPACING, LINE_HEIGHT, LIST_STYLE_IMAGE, LIST_STYLE_POSITION,
+ LIST_STYLE_TYPE, MARGIN_BOTTOM, MARGIN_LEFT, MARGIN_RIGHT, MARGIN_TOP,
+ MAX_HEIGHT, MAX_WIDTH, MIN_HEIGHT, MIN_WIDTH, ORPHANS, OUTLINE_COLOR,
+ OUTLINE_STYLE, OUTLINE_WIDTH, OVERFLOW, PADDING_BOTTOM, PADDING_LEFT,
+ PADDING_RIGHT, PADDING_TOP, PAGE_BREAK_AFTER, PAGE_BREAK_BEFORE,
+ PAGE_BREAK_INSIDE, PAUSE_AFTER, PAUSE_BEFORE, PITCH_RANGE, PITCH,
+ PLAY_DURING, POSITION, QUOTES, RICHNESS, RIGHT, SPEAK_HEADER,
+ SPEAK_NUMERAL, SPEAK_PUNCTUATION, SPEAK, SPEECH_RATE, STRESS,
+ TABLE_LAYOUT, TEXT_ALIGN, TEXT_DECORATION, TEXT_INDENT, TEXT_TRANSFORM,
+ TOP, UNICODE_BIDI, VERTICAL_ALIGN, VISIBILITY, VOICE_FAMILY, VOLUME,
+ WHITE_SPACE, WIDOWS, WIDTH, WORD_SPACING, Z_INDEX,
+
LAST_KNOWN
};
@@ -32,11 +56,111 @@ static struct {
{ "import", SLEN("import") },
{ "media", SLEN("media") },
{ "page", SLEN("page") },
+
+ { "azimuth", SLEN("azimuth") },
+ { "background-attachment", SLEN("background-attachment") },
+ { "background-color", SLEN("background-color") },
+ { "background-image", SLEN("background-image") },
+ { "background-position", SLEN("background-position") },
+ { "background-repeat", SLEN("background-repeat") },
+ { "border-bottom-color", SLEN("border-bottom-color") },
+ { "border-bottom-style", SLEN("border-bottom-style") },
+ { "border-bottom-width", SLEN("border-bottom-width") },
+ { "border-collapse", SLEN("border-collapse") },
+ { "border-left-color", SLEN("border-left-color") },
+ { "border-left-style", SLEN("border-left-style") },
+ { "border-left-width", SLEN("border-left-width") },
+ { "border-right-color", SLEN("border-right-color") },
+ { "border-right-style", SLEN("border-right-style") },
+ { "border-right-width", SLEN("border-right-width") },
+ { "border-spacing", SLEN("border-spacing") },
+ { "border-top-color", SLEN("border-top-color") },
+ { "border-top-style", SLEN("border-top-style") },
+ { "border-top-width", SLEN("border-top-width") },
+ { "bottom", SLEN("bottom") },
+ { "caption-side", SLEN("caption-side") },
+ { "clear", SLEN("clear") },
+ { "clip", SLEN("clip") },
+ { "color", SLEN("color") },
+ { "content", SLEN("content") },
+ { "counter-increment", SLEN("counter-increment") },
+ { "counter-reset", SLEN("counter-reset") },
+ { "cue-after", SLEN("cue-after") },
+ { "cue-before", SLEN("cue-before") },
+ { "cursor", SLEN("cursor") },
+ { "direction", SLEN("direction") },
+ { "display", SLEN("display") },
+ { "elevation", SLEN("elevation") },
+ { "empty-cells", SLEN("empty-cells") },
+ { "float", SLEN("float") },
+ { "font-family", SLEN("font-family") },
+ { "font-size", SLEN("font-size") },
+ { "font-style", SLEN("font-style") },
+ { "font-variant", SLEN("font-variant") },
+ { "font-weight", SLEN("font-weight") },
+ { "height", SLEN("height") },
+ { "left", SLEN("left") },
+ { "letter-spacing", SLEN("letter-spacing") },
+ { "line-height", SLEN("line-height") },
+ { "list-style-image", SLEN("list-style-image") },
+ { "list-style-position", SLEN("list-style-position") },
+ { "list-style-type", SLEN("list-style-type") },
+ { "margin-bottom", SLEN("margin-bottom") },
+ { "margin-left", SLEN("margin-left") },
+ { "margin-right", SLEN("margin-right") },
+ { "margin-top", SLEN("margin-top") },
+ { "max-height", SLEN("max-height") },
+ { "max-width", SLEN("max-width") },
+ { "min-height", SLEN("min-height") },
+ { "min-width", SLEN("min-width") },
+ { "orphans", SLEN("orphans") },
+ { "outline-color", SLEN("outline-color") },
+ { "outline-style", SLEN("outline-style") },
+ { "outline-width", SLEN("outline-width") },
+ { "overflow", SLEN("overflow") },
+ { "padding-bottom", SLEN("padding-bottom") },
+ { "padding-left", SLEN("padding-left") },
+ { "padding-right", SLEN("padding-right") },
+ { "padding-top", SLEN("padding-top") },
+ { "page-break-after", SLEN("page-break-after") },
+ { "page-break-before", SLEN("page-break-before") },
+ { "page-break-inside", SLEN("page-break-inside") },
+ { "pause-after", SLEN("pause-after") },
+ { "pause-before", SLEN("pause-before") },
+ { "pitch-range", SLEN("pitch-range") },
+ { "pitch", SLEN("pitch") },
+ { "play-during", SLEN("play-during") },
+ { "position", SLEN("position") },
+ { "quotes", SLEN("quotes") },
+ { "richness", SLEN("richness") },
+ { "right", SLEN("right") },
+ { "speak-header", SLEN("speak-header") },
+ { "speak-numeral", SLEN("speak-numeral") },
+ { "speak-punctuation", SLEN("speak-punctuation") },
+ { "speak", SLEN("speak") },
+ { "speech-rate", SLEN("speech-rate") },
+ { "stress", SLEN("stress") },
+ { "table-layout", SLEN("table-layout") },
+ { "text-align", SLEN("text-align") },
+ { "text-decoration", SLEN("text-decoration") },
+ { "text-indent", SLEN("text-indent") },
+ { "text-transform", SLEN("text-transform") },
+ { "top", SLEN("top") },
+ { "unicode-bidi", SLEN("unicode-bidi") },
+ { "vertical-align", SLEN("vertical-align") },
+ { "visibility", SLEN("visibility") },
+ { "voice-family", SLEN("voice-family") },
+ { "volume", SLEN("volume") },
+ { "white-space", SLEN("white-space") },
+ { "widows", SLEN("widows") },
+ { "width", SLEN("width") },
+ { "word-spacing", SLEN("word-spacing") },
+ { "z-index", SLEN("z-index") }
};
typedef struct context_entry {
css_parser_event type; /**< Type of entry */
- const uint8_t *data; /**< Pointer to interned string */
+ void *data; /**< Data for context */
} context_entry;
/**
@@ -113,6 +237,11 @@ static inline css_error parseSelector(css_css21 *c,
static inline css_error parseSelectorList(css_css21 *c,
const parserutils_vector *vector, css_rule *rule);
+/* Declaration parsing */
+static inline css_error parseProperty(css_css21 *c,
+ const css_token *property, const parserutils_vector *vector,
+ int *ctx, css_rule *rule);
+
/* Helpers */
static inline void consumeWhitespace(const parserutils_vector *vector,
int *ctx);
@@ -294,6 +423,8 @@ css_error handleStartRuleset(css_css21 *c, const parserutils_vector *vector)
return error;
}
+ entry.data = rule;
+
perror = parserutils_stack_push(c->context, (void *) &entry);
if (perror != PARSERUTILS_OK) {
css_stylesheet_rule_destroy(c->sheet, rule);
@@ -475,19 +606,46 @@ css_error handleBlockContent(css_css21 *c, const parserutils_vector *vector)
css_error handleDeclaration(css_css21 *c, const parserutils_vector *vector)
{
- UNUSED(c);
- UNUSED(vector);
+ css_error error;
+ const css_token *token, *ident;
+ int ctx = 0;
+ context_entry *entry;
+ css_rule *rule;
/* Locations where declarations are permitted:
*
* + In @page
* + In ruleset
*/
+ entry = parserutils_stack_get_current(c->context);
+ if (entry == NULL || (entry->type != CSS_PARSER_START_RULESET &&
+ entry->type != CSS_PARSER_START_ATRULE))
+ return CSS_INVALID;
+
+ rule = entry->data;
+ if (rule == NULL || (rule->type != CSS_RULE_SELECTOR &&
+ rule->type != CSS_RULE_PAGE))
+ return CSS_INVALID;
/* IDENT ws ':' ws value
*
* In CSS 2.1, value is any1, so '{' or ATKEYWORD => parse error
*/
+ ident = parserutils_vector_iterate(vector, &ctx);
+ if (ident == NULL || ident->type != CSS_TOKEN_IDENT)
+ return CSS_INVALID;
+
+ consumeWhitespace(vector, &ctx);
+
+ token = parserutils_vector_iterate(vector, &ctx);
+ if (token == NULL || tokenIsChar(token, ':') == false)
+ return CSS_INVALID;
+
+ consumeWhitespace(vector, &ctx);
+
+ error = parseProperty(c, ident, vector, &ctx, rule);
+ if (error != CSS_OK)
+ return error;
return CSS_OK;
}
@@ -898,6 +1056,44 @@ css_error parseSelectorList(css_css21 *c, const parserutils_vector *vector,
}
/******************************************************************************
+ * Property parsing functions *
+ ******************************************************************************/
+
+#include "css21props.c"
+
+css_error parseProperty(css_css21 *c, const css_token *property,
+ const parserutils_vector *vector, int *ctx, css_rule *rule)
+{
+ css_error error;
+ css_prop_handler handler = NULL;
+ int i = 0;
+ css_style *style;
+
+ /* Find property index */
+ /** \todo improve on this linear search */
+ for (i = FIRST_PROP; i < LAST_KNOWN; i++) {
+ if (property->lower.ptr == c->strings[i])
+ break;
+ }
+ if (i == LAST_KNOWN)
+ return CSS_INVALID;
+
+ /* Get handler */
+ handler = property_handlers[i - FIRST_PROP];
+ assert(handler != NULL);
+
+ /* Call it */
+ error = handler(c, vector, ctx, &style);
+ if (error != CSS_OK)
+ return error;
+
+ /** \todo append style to rule */
+ UNUSED(rule);
+
+ return CSS_OK;
+}
+
+/******************************************************************************
* Helper functions *
******************************************************************************/
diff --git a/src/parse/css21props.c b/src/parse/css21props.c
new file mode 100644
index 0000000..b115ce8
--- /dev/null
+++ b/src/parse/css21props.c
@@ -0,0 +1,1610 @@
+/*
+ * This file is part of LibCSS.
+ * Licensed under the MIT License,
+ * http://www.opensource.org/licenses/mit-license.php
+ * Copyright 2008 John-Mark Bell <jmb@netsurf-browser.org>
+ */
+
+#ifndef css_parse_css21props_c_
+#define css_parse_css21props_c_
+
+static css_error parse_azimuth(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_background_attachment(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_background_color(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_background_image(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_background_position(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_background_repeat(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_border_bottom_color(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_border_bottom_style(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_border_bottom_width(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_border_collapse(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_border_left_color(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_border_left_style(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_border_left_width(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_border_right_color(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_border_right_style(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_border_right_width(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_border_spacing(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_border_top_color(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_border_top_style(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_border_top_width(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_bottom(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_caption_side(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_clear(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_clip(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_color(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_content(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_counter_increment(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_counter_reset(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_cue_after(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_cue_before(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_cursor(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_direction(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_display(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_elevation(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_empty_cells(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_float(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_font_family(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_font_size(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_font_style(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_font_variant(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_font_weight(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_height(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_left(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_letter_spacing(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_line_height(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_list_style_image(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_list_style_position(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_list_style_type(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_margin_bottom(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_margin_left(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_margin_right(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_margin_top(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_max_height(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_max_width(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_min_height(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_min_width(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_orphans(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_outline_color(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_outline_style(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_outline_width(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_overflow(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_padding_bottom(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_padding_left(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_padding_right(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_padding_top(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_page_break_after(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_page_break_before(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_page_break_inside(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_pause_after(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_pause_before(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_pitch_range(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_pitch(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_play_during(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_position(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_quotes(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_richness(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_right(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_speak_header(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_speak_numeral(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_speak_punctuation(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_speak(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_speech_rate(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_stress(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_table_layout(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_text_align(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_text_decoration(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_text_indent(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_text_transform(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_top(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_unicode_bidi(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_vertical_align(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_visibility(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_voice_family(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_volume(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_white_space(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_widows(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_width(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_word_spacing(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+static css_error parse_z_index(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+
+/**
+ * Type of property handler function
+ */
+typedef css_error (*css_prop_handler)(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result);
+
+/**
+ * Dispatch table of property handlers, indexed by property enum
+ */
+static const css_prop_handler property_handlers[LAST_KNOWN - FIRST_PROP] =
+{
+ parse_azimuth,
+ parse_background_attachment,
+ parse_background_color,
+ parse_background_image,
+ parse_background_position,
+ parse_background_repeat,
+ parse_border_bottom_color,
+ parse_border_bottom_style,
+ parse_border_bottom_width,
+ parse_border_collapse,
+ parse_border_left_color,
+ parse_border_left_style,
+ parse_border_left_width,
+ parse_border_right_color,
+ parse_border_right_style,
+ parse_border_right_width,
+ parse_border_spacing,
+ parse_border_top_color,
+ parse_border_top_style,
+ parse_border_top_width,
+ parse_bottom,
+ parse_caption_side,
+ parse_clear,
+ parse_clip,
+ parse_color,
+ parse_content,
+ parse_counter_increment,
+ parse_counter_reset,
+ parse_cue_after,
+ parse_cue_before,
+ parse_cursor,
+ parse_direction,
+ parse_display,
+ parse_elevation,
+ parse_empty_cells,
+ parse_float,
+ parse_font_family,
+ parse_font_size,
+ parse_font_style,
+ parse_font_variant,
+ parse_font_weight,
+ parse_height,
+ parse_left,
+ parse_letter_spacing,
+ parse_line_height,
+ parse_list_style_image,
+ parse_list_style_position,
+ parse_list_style_type,
+ parse_margin_bottom,
+ parse_margin_left,
+ parse_margin_right,
+ parse_margin_top,
+ parse_max_height,
+ parse_max_width,
+ parse_min_height,
+ parse_min_width,
+ parse_orphans,
+ parse_outline_color,
+ parse_outline_style,
+ parse_outline_width,
+ parse_overflow,
+ parse_padding_bottom,
+ parse_padding_left,
+ parse_padding_right,
+ parse_padding_top,
+ parse_page_break_after,
+ parse_page_break_before,
+ parse_page_break_inside,
+ parse_pause_after,
+ parse_pause_before,
+ parse_pitch_range,
+ parse_pitch,
+ parse_play_during,
+ parse_position,
+ parse_quotes,
+ parse_richness,
+ parse_right,
+ parse_speak_header,
+ parse_speak_numeral,
+ parse_speak_punctuation,
+ parse_speak,
+ parse_speech_rate,
+ parse_stress,
+ parse_table_layout,
+ parse_text_align,
+ parse_text_decoration,
+ parse_text_indent,
+ parse_text_transform,
+ parse_top,
+ parse_unicode_bidi,
+ parse_vertical_align,
+ parse_visibility,
+ parse_voice_family,
+ parse_volume,
+ parse_white_space,
+ parse_widows,
+ parse_width,
+ parse_word_spacing,
+ parse_z_index,
+};
+
+css_error parse_azimuth(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_background_attachment(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_background_color(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_background_image(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_background_position(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_background_repeat(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_border_bottom_color(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_border_bottom_style(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_border_bottom_width(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_border_collapse(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_border_left_color(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_border_left_style(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_border_left_width(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_border_right_color(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_border_right_style(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_border_right_width(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_border_spacing(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_border_top_color(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_border_top_style(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_border_top_width(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_bottom(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_caption_side(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_clear(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_clip(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_color(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_content(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_counter_increment(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_counter_reset(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_cue_after(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_cue_before(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_cursor(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_direction(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_display(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_elevation(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_empty_cells(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_float(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_font_family(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_font_size(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_font_style(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_font_variant(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_font_weight(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_height(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_left(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_letter_spacing(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_line_height(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_list_style_image(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_list_style_position(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_list_style_type(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_margin_bottom(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_margin_left(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_margin_right(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_margin_top(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_max_height(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_max_width(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_min_height(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_min_width(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_orphans(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_outline_color(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_outline_style(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_outline_width(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_overflow(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_padding_bottom(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_padding_left(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_padding_right(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_padding_top(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_page_break_after(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_page_break_before(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_page_break_inside(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_pause_after(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_pause_before(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_pitch_range(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_pitch(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_play_during(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_position(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_quotes(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_richness(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_right(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_speak_header(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_speak_numeral(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_speak_punctuation(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_speak(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_speech_rate(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_stress(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_table_layout(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_text_align(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_text_decoration(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_text_indent(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_text_transform(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_top(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_unicode_bidi(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_vertical_align(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_visibility(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_voice_family(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_volume(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_white_space(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_widows(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_width(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_word_spacing(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+css_error parse_z_index(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style **result)
+{
+ UNUSED(c);
+ UNUSED(vector);
+ UNUSED(ctx);
+ UNUSED(result);
+
+ return CSS_OK;
+}
+
+#endif
diff --git a/src/stylesheet.h b/src/stylesheet.h
index 6c014e5..99af643 100644
--- a/src/stylesheet.h
+++ b/src/stylesheet.h
@@ -20,7 +20,11 @@
typedef struct css_rule css_rule;
typedef struct css_selector css_selector;
-typedef struct css_style css_style;
+
+typedef struct css_style {
+ uint32_t length; /**< Length, in bytes, of bytecode */
+ void *bytecode; /**< Pointer to bytecode */
+} css_style;
typedef enum css_selector_type {
CSS_SELECTOR_ELEMENT,
@@ -160,14 +164,13 @@ css_error css_stylesheet_selector_append_specific(css_stylesheet *sheet,
css_error css_stylesheet_selector_combine(css_stylesheet *sheet,
css_combinator type, css_selector *a, css_selector *b);
-/** \todo something about adding style declarations to a selector */
-
css_rule *css_stylesheet_rule_create(css_stylesheet *sheet, css_rule_type type);
void css_stylesheet_rule_destroy(css_stylesheet *sheet, css_rule *rule);
css_error css_stylesheet_rule_add_selector(css_stylesheet *sheet,
css_rule *rule, css_selector *selector);
+/** \todo something about adding style declarations to a rule */
/** \todo registering other rule-type data with css_rules */
css_error css_stylesheet_add_rule(css_stylesheet *sheet, css_rule *rule);