1 /* GTK - The GIMP Toolkit
2 * Copyright (C) 2011 Red Hat, Inc.
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library. If not, see <http://www.gnu.org/licenses/>.
20 #include "gtkcssstringvalueprivate.h"
30 gtk_css_value_string_free (GtkCssValue *value)
32 g_free (value->string);
33 g_slice_free (GtkCssValue, value);
37 gtk_css_value_string_compute (GtkCssValue *value,
39 GtkStyleContext *context,
40 GtkCssDependencies *dependencies)
42 return _gtk_css_value_ref (value);
46 gtk_css_value_string_equal (const GtkCssValue *value1,
47 const GtkCssValue *value2)
49 return g_strcmp0 (value1->string, value2->string) == 0;
53 gtk_css_value_string_transition (GtkCssValue *start,
62 gtk_css_value_string_print (const GtkCssValue *value,
65 char *string = value->string;
70 g_string_append (str, "none");
74 g_string_append_c (str, '"');
77 len = strcspn (string, "\"\n\r\f");
78 g_string_append_len (str, string, len);
85 g_string_append (str, "\\A ");
88 g_string_append (str, "\\D ");
91 g_string_append (str, "\\C ");
94 g_string_append (str, "\\\"");
97 g_string_append (str, "\\\\");
100 g_assert_not_reached ();
105 g_string_append_c (str, '"');
109 gtk_css_value_ident_print (const GtkCssValue *value,
112 char *string = value->string;
116 len = strcspn (string, "\"\n\r\f");
117 g_string_append_len (str, string, len);
124 g_string_append (str, "\\A ");
127 g_string_append (str, "\\D ");
130 g_string_append (str, "\\C ");
133 g_string_append (str, "\\\"");
136 g_string_append (str, "\\'");
139 g_string_append (str, "\\\\");
142 g_assert_not_reached ();
148 static const GtkCssValueClass GTK_CSS_VALUE_STRING = {
149 gtk_css_value_string_free,
150 gtk_css_value_string_compute,
151 gtk_css_value_string_equal,
152 gtk_css_value_string_transition,
153 gtk_css_value_string_print
156 static const GtkCssValueClass GTK_CSS_VALUE_IDENT = {
157 gtk_css_value_string_free,
158 gtk_css_value_string_compute,
159 gtk_css_value_string_equal,
160 gtk_css_value_string_transition,
161 gtk_css_value_ident_print
165 _gtk_css_string_value_new (const char *string)
167 return _gtk_css_string_value_new_take (g_strdup (string));
171 _gtk_css_string_value_new_take (char *string)
175 result = _gtk_css_value_new (GtkCssValue, >K_CSS_VALUE_STRING);
176 result->string = string;
182 _gtk_css_string_value_parse (GtkCssParser *parser)
186 g_return_val_if_fail (parser != NULL, NULL);
188 s = _gtk_css_parser_read_string (parser);
192 return _gtk_css_string_value_new_take (s);
196 _gtk_css_string_value_get (const GtkCssValue *value)
198 g_return_val_if_fail (value != NULL, NULL);
199 g_return_val_if_fail (value->class == >K_CSS_VALUE_STRING, NULL);
201 return value->string;
205 _gtk_css_ident_value_new (const char *ident)
207 return _gtk_css_ident_value_new_take (g_strdup (ident));
211 _gtk_css_ident_value_new_take (char *ident)
215 result = _gtk_css_value_new (GtkCssValue, >K_CSS_VALUE_IDENT);
216 result->string = ident;
222 _gtk_css_ident_value_try_parse (GtkCssParser *parser)
226 g_return_val_if_fail (parser != NULL, NULL);
228 ident = _gtk_css_parser_try_ident (parser, TRUE);
232 return _gtk_css_ident_value_new_take (ident);
236 _gtk_css_ident_value_get (const GtkCssValue *value)
238 g_return_val_if_fail (value != NULL, NULL);
239 g_return_val_if_fail (value->class == >K_CSS_VALUE_IDENT, NULL);
241 return value->string;