[gtk+/css-fixes: 4/15] css: Break out enum parse/print helper
- From: Alexander Larsson <alexl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/css-fixes: 4/15] css: Break out enum parse/print helper
- Date: Fri, 25 Nov 2011 14:53:24 +0000 (UTC)
commit 8fb4b1373079503686d7cfd8f23290b0c47c2126
Author: Alexander Larsson <alexl redhat com>
Date: Fri Nov 25 14:35:11 2011 +0100
css: Break out enum parse/print helper
We need this to parse non-GValue enums
gtk/gtkstyleproperty.c | 66 +++++++++++++++++++++++++++++++----------------
1 files changed, 43 insertions(+), 23 deletions(-)
---
diff --git a/gtk/gtkstyleproperty.c b/gtk/gtkstyleproperty.c
index b904dc7..0aed216 100644
--- a/gtk/gtkstyleproperty.c
+++ b/gtk/gtkstyleproperty.c
@@ -113,6 +113,47 @@ string_append_string (GString *str,
/*** IMPLEMENTATIONS ***/
static gboolean
+enum_parse (GtkCssParser *parser,
+ GType type,
+ int *res)
+{
+ char *str;
+
+ if (_gtk_css_parser_try_enum (parser, type, res))
+ return TRUE;
+
+ str = _gtk_css_parser_try_ident (parser, TRUE);
+ if (str == NULL)
+ {
+ _gtk_css_parser_error (parser, "Expected an identifier");
+ return FALSE;
+ }
+
+ _gtk_css_parser_error (parser,
+ "Unknown value '%s' for enum type '%s'",
+ str, g_type_name (type));
+ g_free (str);
+
+ return FALSE;
+}
+
+static void
+enum_print (int value,
+ GType type,
+ GString *string)
+{
+ GEnumClass *enum_class;
+ GEnumValue *enum_value;
+
+ enum_class = g_type_class_ref (type);
+ enum_value = g_enum_get_value (enum_class, value);
+
+ g_string_append (string, enum_value->value_nick);
+
+ g_type_class_unref (enum_class);
+}
+
+static gboolean
rgba_value_parse (GtkCssParser *parser,
GFile *base,
GValue *value)
@@ -1360,27 +1401,14 @@ enum_value_parse (GtkCssParser *parser,
GFile *base,
GValue *value)
{
- char *str;
int v;
- if (_gtk_css_parser_try_enum (parser, G_VALUE_TYPE (value), &v))
+ if (enum_parse (parser, G_VALUE_TYPE (value), &v))
{
g_value_set_enum (value, v);
return TRUE;
}
- str = _gtk_css_parser_try_ident (parser, TRUE);
- if (str == NULL)
- {
- _gtk_css_parser_error (parser, "Expected an identifier");
- return FALSE;
- }
-
- _gtk_css_parser_error (parser,
- "Unknown value '%s' for enum type '%s'",
- str, g_type_name (G_VALUE_TYPE (value)));
- g_free (str);
-
return FALSE;
}
@@ -1388,15 +1416,7 @@ static void
enum_value_print (const GValue *value,
GString *string)
{
- GEnumClass *enum_class;
- GEnumValue *enum_value;
-
- enum_class = g_type_class_ref (G_VALUE_TYPE (value));
- enum_value = g_enum_get_value (enum_class, g_value_get_enum (value));
-
- g_string_append (string, enum_value->value_nick);
-
- g_type_class_unref (enum_class);
+ enum_print (g_value_get_enum (value), G_VALUE_TYPE (value), string);
}
static gboolean
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]