mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-12-28 06:21:14 +00:00
css: Add _gtk_css_parser_try_enum
This helps parsing GType enums in CSS, properly handling CSS being case insensitive.
This commit is contained in:
parent
c9a3332ede
commit
1a68afffaf
@ -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,
|
||||
|
@ -70,6 +70,9 @@ gboolean _gtk_css_parser_try_uint (GtkCssParser *parser
|
||||
guint *value);
|
||||
gboolean _gtk_css_parser_try_double (GtkCssParser *parser,
|
||||
gdouble *value);
|
||||
gboolean _gtk_css_parser_try_enum (GtkCssParser *parser,
|
||||
GType enum_type,
|
||||
int *value);
|
||||
|
||||
void _gtk_css_parser_skip_whitespace (GtkCssParser *parser);
|
||||
char * _gtk_css_parser_read_string (GtkCssParser *parser);
|
||||
|
Loading…
Reference in New Issue
Block a user