css: Split out a common function
It's used in two places already, and Iwant to use it in a third one.
This commit is contained in:
parent
d495ab1ca0
commit
b356d81410
@ -1012,3 +1012,47 @@ _gtk_css_parser_resync (GtkCssParser *parser,
|
|||||||
|
|
||||||
gtk_css_parser_resync_internal (parser, sync_at_semicolon, TRUE, terminator);
|
gtk_css_parser_resync_internal (parser, sync_at_semicolon, TRUE, terminator);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
_gtk_css_print_string (GString *str,
|
||||||
|
const char *string)
|
||||||
|
{
|
||||||
|
gsize len;
|
||||||
|
|
||||||
|
g_return_if_fail (str != NULL);
|
||||||
|
g_return_if_fail (string != NULL);
|
||||||
|
|
||||||
|
g_string_append_c (str, '"');
|
||||||
|
|
||||||
|
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;
|
||||||
|
default:
|
||||||
|
g_assert_not_reached ();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} while (*string);
|
||||||
|
|
||||||
|
g_string_append_c (str, '"');
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -97,6 +97,11 @@ void _gtk_css_parser_resync (GtkCssParser *parser
|
|||||||
gboolean sync_at_semicolon,
|
gboolean sync_at_semicolon,
|
||||||
char terminator);
|
char terminator);
|
||||||
|
|
||||||
|
/* XXX: Find better place to put it? */
|
||||||
|
void _gtk_css_print_string (GString *str,
|
||||||
|
const char *string);
|
||||||
|
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
#endif /* __GTK_CSS_PARSER_PRIVATE_H__ */
|
#endif /* __GTK_CSS_PARSER_PRIVATE_H__ */
|
||||||
|
@ -65,47 +65,13 @@ static void
|
|||||||
gtk_css_value_string_print (const GtkCssValue *value,
|
gtk_css_value_string_print (const GtkCssValue *value,
|
||||||
GString *str)
|
GString *str)
|
||||||
{
|
{
|
||||||
char *string = value->string;
|
if (value->string == NULL)
|
||||||
gsize len;
|
|
||||||
|
|
||||||
if (string == NULL)
|
|
||||||
{
|
{
|
||||||
g_string_append (str, "none");
|
g_string_append (str, "none");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
g_string_append_c (str, '"');
|
_gtk_css_print_string (str, value->string);
|
||||||
|
|
||||||
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;
|
|
||||||
default:
|
|
||||||
g_assert_not_reached ();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
} while (*string);
|
|
||||||
|
|
||||||
g_string_append_c (str, '"');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -89,37 +89,7 @@ static void
|
|||||||
string_append_string (GString *str,
|
string_append_string (GString *str,
|
||||||
const char *string)
|
const char *string)
|
||||||
{
|
{
|
||||||
gsize len;
|
_gtk_css_print_string (str, string);
|
||||||
|
|
||||||
g_string_append_c (str, '"');
|
|
||||||
|
|
||||||
do {
|
|
||||||
len = strcspn (string, "\"\n\r\f");
|
|
||||||
g_string_append (str, string);
|
|
||||||
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;
|
|
||||||
default:
|
|
||||||
g_assert_not_reached ();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
} while (*string);
|
|
||||||
|
|
||||||
g_string_append_c (str, '"');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*** IMPLEMENTATIONS ***/
|
/*** IMPLEMENTATIONS ***/
|
||||||
|
Loading…
Reference in New Issue
Block a user