From bed9eaa5cb7702cc25aa66229a171fb80bed501a Mon Sep 17 00:00:00 2001 From: John Mark Bell Date: Thu, 25 Jun 2009 23:03:15 +0000 Subject: Documentation and context restoration on error svn path=/trunk/libcss/; revision=7996 --- src/parse/properties/margin.c | 87 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 83 insertions(+), 4 deletions(-) (limited to 'src/parse/properties') diff --git a/src/parse/properties/margin.c b/src/parse/properties/margin.c index 9cf0b83..7ab185c 100644 --- a/src/parse/properties/margin.c +++ b/src/parse/properties/margin.c @@ -16,6 +16,20 @@ static css_error parse_margin_side(css_language *c, const parserutils_vector *vector, int *ctx, uint16_t op, css_style **result); +/** + * Parse margin-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_margin_bottom(css_language *c, const parserutils_vector *vector, int *ctx, css_style **result) @@ -24,6 +38,20 @@ css_error parse_margin_bottom(css_language *c, CSS_PROP_MARGIN_BOTTOM, result); } +/** + * Parse margin-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_margin_left(css_language *c, const parserutils_vector *vector, int *ctx, css_style **result) @@ -31,6 +59,20 @@ css_error parse_margin_left(css_language *c, return parse_margin_side(c, vector, ctx, CSS_PROP_MARGIN_LEFT, result); } +/** + * Parse margin-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_margin_right(css_language *c, const parserutils_vector *vector, int *ctx, css_style **result) @@ -38,6 +80,20 @@ css_error parse_margin_right(css_language *c, return parse_margin_side(c, vector, ctx, CSS_PROP_MARGIN_RIGHT, result); } +/** + * Parse margin-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_margin_top(css_language *c, const parserutils_vector *vector, int *ctx, css_style **result) @@ -45,10 +101,25 @@ css_error parse_margin_top(css_language *c, return parse_margin_side(c, vector, ctx, CSS_PROP_MARGIN_TOP, result); } +/** + * Parse margin-{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_margin_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; @@ -60,8 +131,10 @@ css_error parse_margin_side(css_language *c, /* length | percentage | IDENT(auto, 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]) { @@ -74,11 +147,15 @@ css_error parse_margin_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; + } value = MARGIN_SET; } @@ -91,8 +168,10 @@ css_error parse_margin_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