From 55169f654db8301e653d20f79434f1f601ef8f12 Mon Sep 17 00:00:00 2001 From: John Mark Bell Date: Thu, 25 Jun 2009 23:14:19 +0000 Subject: Documentation and context restoration on error svn path=/trunk/libcss/; revision=7998 --- src/parse/properties/padding.c | 91 +++++++++++++++++++++++++++++++++++++++--- 1 file changed, 86 insertions(+), 5 deletions(-) (limited to 'src/parse') 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)); -- cgit v1.2.3