text: /*
   * This file was generated by LibCSS gen_parser 
   * 
   * Generated from:
   *
   * flex_shrink:CSS_PROP_FLEX_SHRINK IDENT:INHERIT NUMBER:( false:FLEX_SHRINK_SET RANGE:num<0 NUMBER:)
   * 
   * Licensed under the MIT License,
   *		  http://www.opensource.org/licenses/mit-license.php
   * Copyright 2010 The NetSurf Browser Project.
   */
  
  #include <assert.h>
  #include <string.h>
  
  #include "bytecode/bytecode.h"
  #include "bytecode/opcodes.h"
  #include "parse/properties/properties.h"
  #include "parse/properties/utils.h"
  
  /**
   * Parse flex_shrink
   *
   * \param c	  Parsing context
   * \param vector  Vector of tokens to process
   * \param ctx	  Pointer to vector iteration context
   * \param result  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 css__parse_flex_shrink(css_language *c,
  		const parserutils_vector *vector, int *ctx,
  		css_style *result)
  {
  	int orig_ctx = *ctx;
  	css_error error;
  	const css_token *token;
  	bool match;
  
  	token = parserutils_vector_iterate(vector, ctx);
  	if ((token == NULL) || ((token->type != CSS_TOKEN_IDENT) && (token->type != CSS_TOKEN_NUMBER))) {
  		*ctx = orig_ctx;
  		return CSS_INVALID;
  	}
  
  	if ((token->type == CSS_TOKEN_IDENT) && (lwc_string_caseless_isequal(token->idata, c->strings[INHERIT], &match) == lwc_error_ok && match)) {
  			error = css_stylesheet_style_inherit(result, CSS_PROP_FLEX_SHRINK);
  	} else if (token->type == CSS_TOKEN_NUMBER) {
  		css_fixed num = 0;
  		size_t consumed = 0;
  
  		num = css__number_from_lwc_string(token->idata, false, &consumed);
  		/* Invalid if there are trailing characters */
  		if (consumed != lwc_string_length(token->idata)) {
  			*ctx = orig_ctx;
  			return CSS_INVALID;
  		}
  		if (num<0) {
  			*ctx = orig_ctx;
  			return CSS_INVALID;
  		}
  
  		error = css__stylesheet_style_appendOPV(result, CSS_PROP_FLEX_SHRINK, 0, FLEX_SHRINK_SET);
  		if (error != CSS_OK) {
  			*ctx = orig_ctx;
  			return error;
  		}
  
  		error = css__stylesheet_style_append(result, num);
  	} else {
  		error = CSS_INVALID;
  	}
  
  	if (error != CSS_OK)
  		*ctx = orig_ctx;
  	
  	return error;
  }
  
  