static gboolean uint_value_parse (GtkCssParser *parser, GValue *value) { guint u; if (!_gtk_css_parser_try_uint (parser, &u)) { _gtk_css_parser_error (parser, "Expected a valid unsigned value"); return FALSE; } g_value_set_uint (value, u); return TRUE; }
static GtkCssValue * gtk_css_ease_value_parse_steps (GtkCssParser *parser) { guint n_steps; gboolean start; if (!_gtk_css_parser_try (parser, "(", TRUE)) { _gtk_css_parser_error (parser, "Expected '('"); return NULL; } if (!_gtk_css_parser_try_uint (parser, &n_steps)) { _gtk_css_parser_error (parser, "Expected number of steps"); return NULL; } if (_gtk_css_parser_try (parser, ",", TRUE)) { if (_gtk_css_parser_try (parser, "start", TRUE)) start = TRUE; else if (_gtk_css_parser_try (parser, "end", TRUE)) start = FALSE; else { _gtk_css_parser_error (parser, "Only allowed values are 'start' and 'end'"); return NULL; } } else start = FALSE; if (!_gtk_css_parser_try (parser, ")", TRUE)) { _gtk_css_parser_error (parser, "Missing closing ')' for steps"); return NULL; } return _gtk_css_ease_value_new_steps (n_steps, start); }
static gboolean border_value_parse (GtkCssParser *parser, GFile *base, GValue *value) { GtkBorder border = { 0, }; guint i, numbers[4]; for (i = 0; i < G_N_ELEMENTS (numbers); i++) { if (!_gtk_css_parser_try_uint (parser, &numbers[i])) break; /* XXX: shouldn't allow spaces here? */ _gtk_css_parser_try (parser, "px", TRUE); } if (i == 0) { _gtk_css_parser_error (parser, "Expected valid border"); return FALSE; } border.top = numbers[0]; if (i > 1) border.right = numbers[1]; else border.right = border.top; if (i > 2) border.bottom = numbers[2]; else border.bottom = border.top; if (i > 3) border.left = numbers[3]; else border.left = border.right; g_value_set_boxed (value, &border); return TRUE; }