diff options
author | John Mark Bell <jmb@netsurf-browser.org> | 2009-08-21 09:45:13 +0000 |
---|---|---|
committer | John Mark Bell <jmb@netsurf-browser.org> | 2009-08-21 09:45:13 +0000 |
commit | 5c20bde8b544d23fd024dad7ace9b46849336ebf (patch) | |
tree | 07dc508d51d281b7553e471a42ba3684018fe512 /src/parse | |
parent | 5bd907c74151d0bbe1859c37cb2bde898ab72e2f (diff) | |
download | libcss-5c20bde8b544d23fd024dad7ace9b46849336ebf.tar.gz libcss-5c20bde8b544d23fd024dad7ace9b46849336ebf.tar.bz2 |
-libcss-align
svn path=/trunk/libcss/; revision=9378
Diffstat (limited to 'src/parse')
-rw-r--r-- | src/parse/properties/properties.c | 1 | ||||
-rw-r--r-- | src/parse/properties/properties.h | 3 | ||||
-rw-r--r-- | src/parse/properties/text.c | 78 | ||||
-rw-r--r-- | src/parse/propstrings.c | 1 | ||||
-rw-r--r-- | src/parse/propstrings.h | 4 |
5 files changed, 85 insertions, 2 deletions
diff --git a/src/parse/properties/properties.c b/src/parse/properties/properties.c index 0f555e1..0cde6c6 100644 --- a/src/parse/properties/properties.c +++ b/src/parse/properties/properties.c @@ -127,5 +127,6 @@ const css_prop_handler property_handlers[LAST_PROP + 1 - FIRST_PROP] = parse_width, parse_word_spacing, parse_z_index, + parse_libcss_align }; diff --git a/src/parse/properties/properties.h b/src/parse/properties/properties.h index 0dc750a..dd96ac3 100644 --- a/src/parse/properties/properties.h +++ b/src/parse/properties/properties.h @@ -367,6 +367,9 @@ css_error parse_word_spacing(css_language *c, css_error parse_z_index(css_language *c, const parserutils_vector *vector, int *ctx, css_style **result); +css_error parse_libcss_align(css_language *c, + const parserutils_vector *vector, int *ctx, + css_style **result); #endif diff --git a/src/parse/properties/text.c b/src/parse/properties/text.c index 61ce60b..d3c81b5 100644 --- a/src/parse/properties/text.c +++ b/src/parse/properties/text.c @@ -850,3 +850,81 @@ css_error parse_word_spacing(css_language *c, return CSS_OK; } +/** + * Parse -libcss-align + * + * \param c Parsing context + * \param vector Vector of tokens to process + * \param ctx Pointer to vector iteration context + * \param result Pointer to location to receive resulting style + * \return CSS_OK on success, + * CSS_NOMEM on memory exhaustion, + * CSS_INVALID if the input is not valid + * + * Post condition: \a *ctx is updated with the next token to process + * If the input is invalid, then \a *ctx remains unchanged. + */ +css_error parse_libcss_align(css_language *c, + const parserutils_vector *vector, int *ctx, + css_style **result) +{ + int orig_ctx = *ctx; + css_error error; + const css_token *ident; + uint8_t flags = 0; + uint16_t value = 0; + uint32_t opv; + bool match; + + /* IDENT (left, right, center, justify, inherit) */ + ident = parserutils_vector_iterate(vector, ctx); + if (ident == NULL || ident->type != CSS_TOKEN_IDENT) { + *ctx = orig_ctx; + return CSS_INVALID; + } + + if ((lwc_context_string_caseless_isequal( + c->sheet->dictionary, + ident->idata, c->strings[INHERIT], + &match) == lwc_error_ok && match)) { + flags |= FLAG_INHERIT; + } else if ((lwc_context_string_caseless_isequal( + c->sheet->dictionary, + ident->idata, c->strings[LEFT], + &match) == lwc_error_ok && match)) { + value = LIBCSS_ALIGN_LEFT; + } else if ((lwc_context_string_caseless_isequal( + c->sheet->dictionary, + ident->idata, c->strings[RIGHT], + &match) == lwc_error_ok && match)) { + value = LIBCSS_ALIGN_RIGHT; + } else if ((lwc_context_string_caseless_isequal( + c->sheet->dictionary, + ident->idata, c->strings[CENTER], + &match) == lwc_error_ok && match)) { + value = LIBCSS_ALIGN_CENTER; + } else if ((lwc_context_string_caseless_isequal( + c->sheet->dictionary, + ident->idata, c->strings[JUSTIFY], + &match) == lwc_error_ok && match)) { + value = LIBCSS_ALIGN_JUSTIFY; + } else { + *ctx = orig_ctx; + return CSS_INVALID; + } + + opv = buildOPV(CSS_PROP_LIBCSS_ALIGN, flags, value); + + /* Allocate result */ + error = css_stylesheet_style_create(c->sheet, sizeof(opv), result); + if (error != CSS_OK) { + *ctx = orig_ctx; + return error; + } + + /* Copy the bytecode to it */ + memcpy((*result)->bytecode, &opv, sizeof(opv)); + + return CSS_OK; +} + diff --git a/src/parse/propstrings.c b/src/parse/propstrings.c index 906471f..28a1189 100644 --- a/src/parse/propstrings.c +++ b/src/parse/propstrings.c @@ -157,6 +157,7 @@ const stringmap_entry stringmap[LAST_KNOWN] = { { "width", SLEN("width") }, { "word-spacing", SLEN("word-spacing") }, { "z-index", SLEN("z-index") }, + { "-libcss-align", SLEN("-libcss-align") }, { "inherit", SLEN("inherit") }, { "important", SLEN("important") }, diff --git a/src/parse/propstrings.h b/src/parse/propstrings.h index 9a0eb92..fe125cc 100644 --- a/src/parse/propstrings.h +++ b/src/parse/propstrings.h @@ -55,9 +55,9 @@ enum { 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, + WHITE_SPACE, WIDOWS, WIDTH, WORD_SPACING, Z_INDEX, LIBCSS_ALIGN, - LAST_PROP = Z_INDEX, + LAST_PROP = LIBCSS_ALIGN, /* Other keywords */ INHERIT, IMPORTANT, NONE, BOTH, FIXED, SCROLL, TRANSPARENT, |