diff options
author | Benjamin Otte <otte@redhat.com> | 2012-04-17 07:46:17 +0200 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2012-04-17 08:59:16 +0200 |
commit | 2ff47ed26d42dc62e58a0c07d93c595c038129a3 (patch) | |
tree | 635b539ff3521c9c9f37f174985fed8e6f3b97be /gtk/gtkcssstringvalue.c | |
parent | 662d6787f3044dec46baf8263b7a35bbba5d697f (diff) | |
download | gtk+-2ff47ed26d42dc62e58a0c07d93c595c038129a3.tar.gz |
cssvalue: Add a GtkCssValue for idents
Diffstat (limited to 'gtk/gtkcssstringvalue.c')
-rw-r--r-- | gtk/gtkcssstringvalue.c | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/gtk/gtkcssstringvalue.c b/gtk/gtkcssstringvalue.c index aaa3ebb3d4..ec58ed99a6 100644 --- a/gtk/gtkcssstringvalue.c +++ b/gtk/gtkcssstringvalue.c @@ -88,6 +88,46 @@ gtk_css_value_string_print (const GtkCssValue *value, g_string_append_c (str, '"'); } +static void +gtk_css_value_ident_print (const GtkCssValue *value, + GString *str) +{ + char *string = value->string; + gsize len; + + do { + len = strcspn (string, "\"\n\r\f"); + g_string_append_len (str, string, len); + string += len; + switch (*string) + { + case '\0': + break; + case '\n': + g_string_append (str, "\\A "); + break; + case '\r': + g_string_append (str, "\\D "); + break; + case '\f': + g_string_append (str, "\\C "); + break; + case '\"': + g_string_append (str, "\\\""); + break; + case '\'': + g_string_append (str, "\\'"); + break; + case '\\': + g_string_append (str, "\\\\"); + break; + default: + g_assert_not_reached (); + break; + } + } while (*string); +} + static const GtkCssValueClass GTK_CSS_VALUE_STRING = { gtk_css_value_string_free, gtk_css_value_string_equal, @@ -95,6 +135,13 @@ static const GtkCssValueClass GTK_CSS_VALUE_STRING = { gtk_css_value_string_print }; +static const GtkCssValueClass GTK_CSS_VALUE_IDENT = { + gtk_css_value_string_free, + gtk_css_value_string_equal, + gtk_css_value_string_transition, + gtk_css_value_ident_print +}; + GtkCssValue * _gtk_css_string_value_new (const char *string) { @@ -135,3 +182,43 @@ _gtk_css_string_value_get (const GtkCssValue *value) return value->string; } +GtkCssValue * +_gtk_css_ident_value_new (const char *ident) +{ + return _gtk_css_ident_value_new_take (g_strdup (ident)); +} + +GtkCssValue * +_gtk_css_ident_value_new_take (char *ident) +{ + GtkCssValue *result; + + result = _gtk_css_value_new (GtkCssValue, >K_CSS_VALUE_IDENT); + result->string = ident; + + return result; +} + +GtkCssValue * +_gtk_css_ident_value_try_parse (GtkCssParser *parser) +{ + char *ident; + + g_return_val_if_fail (parser != NULL, NULL); + + ident = _gtk_css_parser_try_ident (parser, TRUE); + if (ident == NULL) + return NULL; + + return _gtk_css_ident_value_new_take (ident); +} + +const char * +_gtk_css_ident_value_get (const GtkCssValue *value) +{ + g_return_val_if_fail (value != NULL, NULL); + g_return_val_if_fail (value->class == >K_CSS_VALUE_IDENT, NULL); + + return value->string; +} + |