/* * This file is part of LibCSS. * Licensed under the MIT License, * http://www.opensource.org/licenses/mit-license.php * Copyright 2009 John-Mark Bell */ #ifndef css_css__parse_properties_properties_h_ #define css_css__parse_properties_properties_h_ #include "stylesheet.h" #include "lex/lex.h" #include "parse/language.h" #include "parse/propstrings.h" /** * Type of property handler function */ typedef css_error (*css_prop_handler)(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); extern const css_prop_handler property_handlers[LAST_PROP + 1 - FIRST_PROP]; css_error css__parse_align_content(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_align_items(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_align_self(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_azimuth(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_background(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_background_attachment(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_background_color(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_background_image(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_background_position(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_background_repeat(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_border(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_border_bottom(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_border_bottom_color(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_border_bottom_style(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_border_bottom_width(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_border_color(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_border_collapse(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_border_left(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_border_left_color(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_border_left_style(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_border_left_width(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_border_right(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_border_right_color(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_border_right_style(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_border_right_width(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_border_spacing(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_border_style(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_border_top(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_border_top_color(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_border_top_style(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_border_top_width(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_border_width(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_bottom(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_box_sizing(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_break_after(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_break_before(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_break_inside(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_caption_side(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_clear(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_clip(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_color(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_columns(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_column_count(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_column_fill(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_column_gap(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_column_rule(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_column_rule_color(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_column_rule_style(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_column_rule_width(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_column_span(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_column_width(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_content(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_counter_increment(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_counter_reset(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_cue(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_cue_after(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_cue_before(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_cursor(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_direction(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_display(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_elevation(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_empty_cells(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_fill_opacity(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_flex(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_flex_basis(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_flex_direction(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_flex_flow(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_flex_grow(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_flex_shrink(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_flex_wrap(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_float(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_font(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_font_family(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_font_size(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_font_style(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_font_variant(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_font_weight(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_height(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_justify_content(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_left(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_letter_spacing(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_line_height(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_list_style(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_list_style_image(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_list_style_position(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_list_style_type(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_margin(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_margin_bottom(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_margin_left(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_margin_right(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_margin_top(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_max_height(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_max_width(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_min_height(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_min_width(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_opacity(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_order(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_orphans(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_outline(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_outline_color(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_outline_style(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_outline_width(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_overflow(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_overflow_x(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_overflow_y(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_padding(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_padding_bottom(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_padding_left(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_padding_right(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_padding_top(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_page_break_after(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_page_break_before(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_page_break_inside(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_pause(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_pause_after(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_pause_before(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_pitch_range(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_pitch(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_play_during(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_position(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_quotes(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_richness(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_right(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_speak_header(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_speak_numeral(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_speak_punctuation(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_speak(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_speech_rate(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_stress(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_stroke_opacity(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_table_layout(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_text_align(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_text_decoration(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_text_indent(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_text_transform(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_top(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_unicode_bidi(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_vertical_align(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_visibility(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_voice_family(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_volume(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_white_space(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_widows(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_width(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_word_spacing(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_writing_mode(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_z_index(css_language *c, const parserutils_vector *vector, int32_t *ctx, css_style *result); /** Mapping from property bytecode index to bytecode unit class mask. */ extern const uint32_t property_unit_mask[CSS_N_PROPERTIES]; #define UNIT_MASK_AZIMUTH (UNIT_ANGLE) #define UNIT_MASK_BACKGROUND_ATTACHMENT (0) #define UNIT_MASK_BACKGROUND_COLOR (0) #define UNIT_MASK_BACKGROUND_IMAGE (0) #define UNIT_MASK_BACKGROUND_POSITION (UNIT_LENGTH | UNIT_PCT) #define UNIT_MASK_BACKGROUND_REPEAT (0) #define UNIT_MASK_BORDER_COLLAPSE (0) #define UNIT_MASK_BORDER_SPACING (UNIT_LENGTH) #define UNIT_MASK_BORDER_SIDE_COLOR (0) #define UNIT_MASK_BORDER_SIDE_STYLE (0) #define UNIT_MASK_BORDER_SIDE_WIDTH (UNIT_LENGTH) #define UNIT_MASK_BOTTOM (UNIT_LENGTH | UNIT_PCT) #define UNIT_MASK_CAPTION_SIDE (0) #define UNIT_MASK_CLEAR (0) #define UNIT_MASK_CLIP (UNIT_LENGTH) #define UNIT_MASK_COLOR (0) #define UNIT_MASK_CONTENT (0) #define UNIT_MASK_COUNTER_INCREMENT (0) #define UNIT_MASK_COUNTER_RESET (0) #define UNIT_MASK_CUE_AFTER (0) #define UNIT_MASK_CUE_BEFORE (0) #define UNIT_MASK_CURSOR (0) #define UNIT_MASK_DIRECTION (0) #define UNIT_MASK_DISPLAY (0) #define UNIT_MASK_ELEVATION (UNIT_ANGLE) #define UNIT_MASK_EMPTY_CELLS (0) #define UNIT_MASK_FLOAT (0) #define UNIT_MASK_FONT_FAMILY (0) #define UNIT_MASK_FONT_SIZE (UNIT_LENGTH | UNIT_PCT) #define UNIT_MASK_FONT_STYLE (0) #define UNIT_MASK_FONT_VARIANT (0) #define UNIT_MASK_FONT_WEIGHT (0) #define UNIT_MASK_HEIGHT (UNIT_LENGTH | UNIT_PCT) #define UNIT_MASK_LEFT (UNIT_LENGTH | UNIT_PCT) #define UNIT_MASK_LETTER_SPACING (UNIT_LENGTH) #define UNIT_MASK_LINE_HEIGHT (UNIT_LENGTH | UNIT_PCT) #define UNIT_MASK_LIST_STYLE_IMAGE (0) #define UNIT_MASK_LIST_STYLE_POSITION (0) #define UNIT_MASK_LIST_STYLE_TYPE (0) #define UNIT_MASK_MARGIN_SIDE (UNIT_LENGTH | UNIT_PCT) #define UNIT_MASK_MAX_HEIGHT (UNIT_LENGTH | UNIT_PCT) #define UNIT_MASK_MAX_WIDTH (UNIT_LENGTH | UNIT_PCT) #define UNIT_MASK_MIN_HEIGHT (UNIT_LENGTH | UNIT_PCT) #define UNIT_MASK_MIN_WIDTH (UNIT_LENGTH | UNIT_PCT) #define UNIT_MASK_ORPHANS (0) #define UNIT_MASK_OUTLINE_COLOR (0) #define UNIT_MASK_OUTLINE_STYLE (0) #define UNIT_MASK_OUTLINE_WIDTH (UNIT_LENGTH) #define UNIT_MASK_OVERFLOW_X (0) #define UNIT_MASK_PADDING_SIDE (UNIT_LENGTH | UNIT_PCT) #define UNIT_MASK_PAGE_BREAK_AFTER (0) #define UNIT_MASK_PAGE_BREAK_BEFORE (0) #define UNIT_MASK_PAGE_BREAK_INSIDE (0) #define UNIT_MASK_PAUSE_AFTER (UNIT_TIME | UNIT_PCT) #define UNIT_MASK_PAUSE_BEFORE (UNIT_TIME | UNIT_PCT) #define UNIT_MASK_PITCH_RANGE (0) #define UNIT_MASK_PITCH (UNIT_FREQ) #define UNIT_MASK_PLAY_DURING (0) #define UNIT_MASK_POSITION (0) #define UNIT_MASK_QUOTES (0) #define UNIT_MASK_RICHNESS (0) #define UNIT_MASK_RIGHT (UNIT_LENGTH | UNIT_PCT) #define UNIT_MASK_SPEAK_HEADER (0) #define UNIT_MASK_SPEAK_NUMERAL (0) #define UNIT_MASK_SPEAK_PUNCTUATION (0) #define UNIT_MASK_SPEAK (0) #define UNIT_MASK_SPEECH_RATE (0) #define UNIT_MASK_STRESS (0) #define UNIT_MASK_TABLE_LAYOUT (0) #define UNIT_MASK_TEXT_ALIGN (0) #define UNIT_MASK_TEXT_DECORATION (0) #define UNIT_MASK_TEXT_INDENT (UNIT_LENGTH | UNIT_PCT) #define UNIT_MASK_TEXT_TRANSFORM (0) #define UNIT_MASK_TOP (UNIT_LENGTH | UNIT_PCT) #define UNIT_MASK_UNICODE_BIDI (0) #define UNIT_MASK_VERTICAL_ALIGN (UNIT_LENGTH | UNIT_PCT) #define UNIT_MASK_VISIBILITY (0) #define UNIT_MASK_VOICE_FAMILY (0) #define UNIT_MASK_VOLUME (UNIT_PCT) #define UNIT_MASK_WHITE_SPACE (0) #define UNIT_MASK_WIDOWS (0) #define UNIT_MASK_WIDTH (UNIT_LENGTH | UNIT_PCT) #define UNIT_MASK_WORD_SPACING (UNIT_LENGTH) #define UNIT_MASK_Z_INDEX (0) #define UNIT_MASK_OPACITY (0) #define UNIT_MASK_FILL_OPACITY (0) #define UNIT_MASK_STROKE_OPACITY (0) #define UNIT_MASK_BREAK_AFTER (0) #define UNIT_MASK_BREAK_BEFORE (0) #define UNIT_MASK_BREAK_INSIDE (0) #define UNIT_MASK_COLUMN_COUNT (0) #define UNIT_MASK_COLUMN_FILL (0) #define UNIT_MASK_COLUMN_GAP (UNIT_LENGTH) #define UNIT_MASK_COLUMN_RULE_COLOR (0) #define UNIT_MASK_COLUMN_RULE_STYLE (0) #define UNIT_MASK_COLUMN_RULE_WIDTH (UNIT_LENGTH) #define UNIT_MASK_COLUMN_SPAN (0) #define UNIT_MASK_COLUMN_WIDTH (UNIT_LENGTH) #define UNIT_MASK_WRITING_MODE (0) #define UNIT_MASK_OVERFLOW_Y (0) #define UNIT_MASK_BOX_SIZING (0) #define UNIT_MASK_ALIGN_CONTENT (0) #define UNIT_MASK_ALIGN_ITEMS (0) #define UNIT_MASK_ALIGN_SELF (0) #define UNIT_MASK_FLEX_BASIS (UNIT_LENGTH | UNIT_PCT) #define UNIT_MASK_FLEX_DIRECTION (0) #define UNIT_MASK_FLEX_GROW (0) #define UNIT_MASK_FLEX_SHRINK (0) #define UNIT_MASK_FLEX_WRAP (0) #define UNIT_MASK_JUSTIFY_CONTENT (0) #define UNIT_MASK_ORDER (0) #endif