diff options
author | Cosimo Cecchi <cosimoc@gnome.org> | 2012-01-13 17:55:53 -0500 |
---|---|---|
committer | Cosimo Cecchi <cosimoc@gnome.org> | 2012-01-13 17:55:53 -0500 |
commit | d1f3fe4342878dc303034daa9b388e5d50fbbca4 (patch) | |
tree | 3f33520a883b365ab0c089b3a434d2e6a8000bf1 /gtk/gtkcssparser.c | |
parent | 4f4e42239a8365bfc27c2ba238964073e6822921 (diff) | |
download | gtk+-d1f3fe4342878dc303034daa9b388e5d50fbbca4.tar.gz |
parser: remove a duplicate copy of gtk_css_parse_url()
Move the function to gtkcssparser.c and use it in both places.
Diffstat (limited to 'gtk/gtkcssparser.c')
-rw-r--r-- | gtk/gtkcssparser.c | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/gtk/gtkcssparser.c b/gtk/gtkcssparser.c index a136466ee5..fc6dc3e95a 100644 --- a/gtk/gtkcssparser.c +++ b/gtk/gtkcssparser.c @@ -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, |