parser: remove a duplicate copy of gtk_css_parse_url()
Move the function to gtkcssparser.c and use it in both places.
This commit is contained in:
@@ -59,62 +59,6 @@ gtk_css_image_url_draw (GtkCssImage *image,
|
||||
cairo_fill (cr);
|
||||
}
|
||||
|
||||
static GFile *
|
||||
gtk_css_parse_url (GtkCssParser *parser,
|
||||
GFile *base)
|
||||
{
|
||||
gchar *path;
|
||||
GFile *file;
|
||||
|
||||
if (_gtk_css_parser_try (parser, "url", FALSE))
|
||||
{
|
||||
if (!_gtk_css_parser_try (parser, "(", TRUE))
|
||||
{
|
||||
_gtk_css_parser_skip_whitespace (parser);
|
||||
if (_gtk_css_parser_try (parser, "(", TRUE))
|
||||
{
|
||||
GError *error;
|
||||
|
||||
error = g_error_new_literal (GTK_CSS_PROVIDER_ERROR,
|
||||
GTK_CSS_PROVIDER_ERROR_DEPRECATED,
|
||||
"Whitespace between 'url' and '(' is deprecated");
|
||||
|
||||
_gtk_css_parser_take_error (parser, error);
|
||||
}
|
||||
else
|
||||
{
|
||||
_gtk_css_parser_error (parser, "Expected '(' after 'url'");
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
path = _gtk_css_parser_read_string (parser);
|
||||
if (path == NULL)
|
||||
return NULL;
|
||||
|
||||
if (!_gtk_css_parser_try (parser, ")", TRUE))
|
||||
{
|
||||
_gtk_css_parser_error (parser, "No closing ')' found for 'url'");
|
||||
g_free (path);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
path = _gtk_css_parser_try_name (parser, TRUE);
|
||||
if (path == NULL)
|
||||
{
|
||||
_gtk_css_parser_error (parser, "Not a valid url");
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
file = g_file_resolve_relative_path (base, path);
|
||||
g_free (path);
|
||||
|
||||
return file;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gtk_css_image_url_parse (GtkCssImage *image,
|
||||
GtkCssParser *parser,
|
||||
@@ -127,7 +71,7 @@ gtk_css_image_url_parse (GtkCssImage *image,
|
||||
cairo_t *cr;
|
||||
GError *error = NULL;
|
||||
|
||||
file = gtk_css_parse_url (parser, base);
|
||||
file = _gtk_css_parser_read_url (parser, base);
|
||||
if (file == NULL)
|
||||
return FALSE;
|
||||
|
||||
|
||||
@@ -917,6 +917,62 @@ _gtk_css_parser_read_symbolic_color (GtkCssParser *parser)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
GFile *
|
||||
_gtk_css_parser_read_url (GtkCssParser *parser,
|
||||
GFile *base)
|
||||
{
|
||||
gchar *path;
|
||||
GFile *file;
|
||||
|
||||
if (_gtk_css_parser_try (parser, "url", FALSE))
|
||||
{
|
||||
if (!_gtk_css_parser_try (parser, "(", TRUE))
|
||||
{
|
||||
_gtk_css_parser_skip_whitespace (parser);
|
||||
if (_gtk_css_parser_try (parser, "(", TRUE))
|
||||
{
|
||||
GError *error;
|
||||
|
||||
error = g_error_new_literal (GTK_CSS_PROVIDER_ERROR,
|
||||
GTK_CSS_PROVIDER_ERROR_DEPRECATED,
|
||||
"Whitespace between 'url' and '(' is deprecated");
|
||||
|
||||
_gtk_css_parser_take_error (parser, error);
|
||||
}
|
||||
else
|
||||
{
|
||||
_gtk_css_parser_error (parser, "Expected '(' after 'url'");
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
path = _gtk_css_parser_read_string (parser);
|
||||
if (path == NULL)
|
||||
return NULL;
|
||||
|
||||
if (!_gtk_css_parser_try (parser, ")", TRUE))
|
||||
{
|
||||
_gtk_css_parser_error (parser, "No closing ')' found for 'url'");
|
||||
g_free (path);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
path = _gtk_css_parser_try_name (parser, TRUE);
|
||||
if (path == NULL)
|
||||
{
|
||||
_gtk_css_parser_error (parser, "Not a valid url");
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
file = g_file_resolve_relative_path (base, path);
|
||||
g_free (path);
|
||||
|
||||
return file;
|
||||
}
|
||||
|
||||
void
|
||||
_gtk_css_parser_resync_internal (GtkCssParser *parser,
|
||||
gboolean sync_at_semicolon,
|
||||
|
||||
@@ -84,6 +84,8 @@ char * _gtk_css_parser_read_uri (GtkCssParser *parser
|
||||
char * _gtk_css_parser_read_value (GtkCssParser *parser);
|
||||
GtkSymbolicColor *_gtk_css_parser_read_symbolic_color
|
||||
(GtkCssParser *parser);
|
||||
GFile * _gtk_css_parser_read_url (GtkCssParser *parser,
|
||||
GFile *base);
|
||||
|
||||
void _gtk_css_parser_resync (GtkCssParser *parser,
|
||||
gboolean sync_at_semicolon,
|
||||
|
||||
@@ -740,62 +740,6 @@ gradient_value_print (const GValue *value,
|
||||
}
|
||||
}
|
||||
|
||||
static GFile *
|
||||
gtk_css_parse_url (GtkCssParser *parser,
|
||||
GFile *base)
|
||||
{
|
||||
gchar *path;
|
||||
GFile *file;
|
||||
|
||||
if (_gtk_css_parser_try (parser, "url", FALSE))
|
||||
{
|
||||
if (!_gtk_css_parser_try (parser, "(", TRUE))
|
||||
{
|
||||
_gtk_css_parser_skip_whitespace (parser);
|
||||
if (_gtk_css_parser_try (parser, "(", TRUE))
|
||||
{
|
||||
GError *error;
|
||||
|
||||
error = g_error_new_literal (GTK_CSS_PROVIDER_ERROR,
|
||||
GTK_CSS_PROVIDER_ERROR_DEPRECATED,
|
||||
"Whitespace between 'url' and '(' is deprecated");
|
||||
|
||||
_gtk_css_parser_take_error (parser, error);
|
||||
}
|
||||
else
|
||||
{
|
||||
_gtk_css_parser_error (parser, "Expected '(' after 'url'");
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
path = _gtk_css_parser_read_string (parser);
|
||||
if (path == NULL)
|
||||
return NULL;
|
||||
|
||||
if (!_gtk_css_parser_try (parser, ")", TRUE))
|
||||
{
|
||||
_gtk_css_parser_error (parser, "No closing ')' found for 'url'");
|
||||
g_free (path);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
path = _gtk_css_parser_try_name (parser, TRUE);
|
||||
if (path == NULL)
|
||||
{
|
||||
_gtk_css_parser_error (parser, "Not a valid url");
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
file = g_file_resolve_relative_path (base, path);
|
||||
g_free (path);
|
||||
|
||||
return file;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
pattern_value_parse (GtkCssParser *parser,
|
||||
GFile *base,
|
||||
@@ -822,7 +766,7 @@ pattern_value_parse (GtkCssParser *parser,
|
||||
cairo_t *cr;
|
||||
cairo_matrix_t matrix;
|
||||
|
||||
file = gtk_css_parse_url (parser, base);
|
||||
file = _gtk_css_parser_read_url (parser, base);
|
||||
if (file == NULL)
|
||||
return FALSE;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user