diff options
author | John Mark Bell <jmb@netsurf-browser.org> | 2009-06-25 23:14:19 +0000 |
---|---|---|
committer | John Mark Bell <jmb@netsurf-browser.org> | 2009-06-25 23:14:19 +0000 |
commit | 55169f654db8301e653d20f79434f1f601ef8f12 (patch) | |
tree | c14c9c278ffd2e3e797777a92ece111d6d897529 | |
parent | 26bd729fd03c23e7b7c945f21b98cf43007d246e (diff) | |
download | libcss-55169f654db8301e653d20f79434f1f601ef8f12.tar.gz libcss-55169f654db8301e653d20f79434f1f601ef8f12.tar.bz2 |
Documentation and context restoration on error
svn path=/trunk/libcss/; revision=7998
-rw-r--r-- | src/parse/properties/padding.c | 91 |
1 files changed, 86 insertions, 5 deletions
diff --git a/src/parse/properties/padding.c b/src/parse/properties/padding.c index d2a5bc4..91dc264 100644 --- a/src/parse/properties/padding.c +++ b/src/parse/properties/padding.c @@ -16,6 +16,20 @@ static css_error parse_padding_side(css_language *c, const parserutils_vector *vector, int *ctx, uint16_t op, css_style **result); +/** + * Parse padding-bottom + * + * \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_padding_bottom(css_language *c, const parserutils_vector *vector, int *ctx, css_style **result) @@ -24,6 +38,20 @@ css_error parse_padding_bottom(css_language *c, CSS_PROP_PADDING_BOTTOM, result); } +/** + * Parse padding-left + * + * \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_padding_left(css_language *c, const parserutils_vector *vector, int *ctx, css_style **result) @@ -32,6 +60,20 @@ css_error parse_padding_left(css_language *c, CSS_PROP_PADDING_LEFT, result); } +/** + * Parse padding-right + * + * \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_padding_right(css_language *c, const parserutils_vector *vector, int *ctx, css_style **result) @@ -40,6 +82,20 @@ css_error parse_padding_right(css_language *c, CSS_PROP_PADDING_RIGHT, result); } +/** + * Parse padding-top + * + * \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_padding_top(css_language *c, const parserutils_vector *vector, int *ctx, css_style **result) @@ -48,10 +104,25 @@ css_error parse_padding_top(css_language *c, CSS_PROP_PADDING_TOP, result); } +/** + * Parse padding-{top,right,bottom,left} + * + * \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_padding_side(css_language *c, const parserutils_vector *vector, int *ctx, uint16_t op, css_style **result) { + int orig_ctx = *ctx; css_error error; const css_token *token; uint8_t flags = 0; @@ -63,8 +134,10 @@ css_error parse_padding_side(css_language *c, /* length | percentage | IDENT(inherit) */ token = parserutils_vector_peek(vector, *ctx); - if (token == NULL) + if (token == NULL) { + *ctx = orig_ctx; return CSS_INVALID; + } if (token->type == CSS_TOKEN_IDENT && token->ilower == c->strings[INHERIT]) { @@ -73,15 +146,21 @@ css_error parse_padding_side(css_language *c, } else { error = parse_unit_specifier(c, vector, ctx, UNIT_PX, &length, &unit); - if (error != CSS_OK) + if (error != CSS_OK) { + *ctx = orig_ctx; return error; + } - if (unit & UNIT_ANGLE || unit & UNIT_TIME || unit & UNIT_FREQ) + if (unit & UNIT_ANGLE || unit & UNIT_TIME || unit & UNIT_FREQ) { + *ctx = orig_ctx; return CSS_INVALID; + } /* Negative lengths are invalid */ - if (length < 0) + if (length < 0) { + *ctx = orig_ctx; return CSS_INVALID; + } value = PADDING_SET; } @@ -94,8 +173,10 @@ css_error parse_padding_side(css_language *c, /* Allocate result */ error = css_stylesheet_style_create(c->sheet, required_size, result); - if (error != CSS_OK) + if (error != CSS_OK) { + *ctx = orig_ctx; return error; + } /* Copy the bytecode to it */ memcpy((*result)->bytecode, &opv, sizeof(opv)); |