diff options
author | Alexander Larsson <alexl@redhat.com> | 2011-11-25 14:11:56 +0100 |
---|---|---|
committer | Alexander Larsson <alexl@redhat.com> | 2011-11-25 15:36:08 +0100 |
commit | 1a68afffaf2b762910684a5436ccf5c57b2641d1 (patch) | |
tree | 876ad920362a48bc3e57db7e4d085bb98b76d252 /gtk/gtkcssparser.c | |
parent | c9a3332ede3b0a736f9e100a04959e0041c2351e (diff) | |
download | gtk+-1a68afffaf2b762910684a5436ccf5c57b2641d1.tar.gz |
css: Add _gtk_css_parser_try_enum
This helps parsing GType enums in CSS, properly handling
CSS being case insensitive.
Diffstat (limited to 'gtk/gtkcssparser.c')
-rw-r--r-- | gtk/gtkcssparser.c | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/gtk/gtkcssparser.c b/gtk/gtkcssparser.c index ff44c35748..073e9478db 100644 --- a/gtk/gtkcssparser.c +++ b/gtk/gtkcssparser.c @@ -569,6 +569,53 @@ _gtk_css_parser_try_double (GtkCssParser *parser, return TRUE; } +gboolean +_gtk_css_parser_try_enum (GtkCssParser *parser, + GType enum_type, + int *value) +{ + GEnumClass *enum_class; + gboolean result; + const char *start; + char *str; + + g_return_val_if_fail (GTK_IS_CSS_PARSER (parser), FALSE); + g_return_val_if_fail (value != NULL, FALSE); + + result = FALSE; + + enum_class = g_type_class_ref (enum_type); + + start = parser->data; + + str = _gtk_css_parser_try_ident (parser, TRUE); + if (str == NULL) + return FALSE; + + if (enum_class->n_values) + { + GEnumValue *enum_value; + + for (enum_value = enum_class->values; enum_value->value_name; enum_value++) + { + if (enum_value->value_nick && + g_ascii_strcasecmp (str, enum_value->value_nick) == 0) + { + *value = enum_value->value; + result = TRUE; + break; + } + } + } + + g_type_class_unref (enum_class); + + if (!result) + parser->data = start; + + return result; +} + typedef enum { COLOR_RGBA, COLOR_RGB, |