summaryrefslogtreecommitdiff
path: root/gtk/gtkcssstringvalue.c
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2012-04-17 07:46:17 +0200
committerBenjamin Otte <otte@redhat.com>2012-04-17 08:59:16 +0200
commit2ff47ed26d42dc62e58a0c07d93c595c038129a3 (patch)
tree635b539ff3521c9c9f37f174985fed8e6f3b97be /gtk/gtkcssstringvalue.c
parent662d6787f3044dec46baf8263b7a35bbba5d697f (diff)
downloadgtk+-2ff47ed26d42dc62e58a0c07d93c595c038129a3.tar.gz
cssvalue: Add a GtkCssValue for idents
Diffstat (limited to 'gtk/gtkcssstringvalue.c')
-rw-r--r--gtk/gtkcssstringvalue.c87
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, &GTK_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 == &GTK_CSS_VALUE_IDENT, NULL);
+
+ return value->string;
+}
+