From e4c7f1f3c42b4f7273ddd565695db4659e6c9e37 Mon Sep 17 00:00:00 2001 From: Dan Winship Date: Mon, 4 Apr 2011 14:02:19 -0400 Subject: [PATCH] St: require libcroco >= 0.6.2 and remove the workaround for the parsing bug in earlier versions https://bugzilla.gnome.org/show_bug.cgi?id=648760 --- configure.ac | 2 +- src/st/st-theme-node.c | 11 +----- src/st/st-theme.c | 85 ------------------------------------------ 3 files changed, 2 insertions(+), 96 deletions(-) diff --git a/configure.ac b/configure.ac index 7f82cccb6..8449f0712 100644 --- a/configure.ac +++ b/configure.ac @@ -116,7 +116,7 @@ AC_CHECK_FUNCS(JS_NewGlobalObject sn_startup_sequence_get_application_id XFixesC CFLAGS=$saved_CFLAGS LIBS=$saved_LIBS -PKG_CHECK_MODULES(ST, clutter-1.0 gtk+-3.0 libcroco-0.6 gnome-desktop-3.0 >= 2.90.0 x11) +PKG_CHECK_MODULES(ST, clutter-1.0 gtk+-3.0 libcroco-0.6 >= 0.6.2 gnome-desktop-3.0 >= 2.90.0 x11) PKG_CHECK_MODULES(GDMUSER, dbus-glib-1 gtk+-3.0) PKG_CHECK_MODULES(TRAY, gtk+-3.0) PKG_CHECK_MODULES(GVC, libpulse libpulse-mainloop-glib gobject-2.0) diff --git a/src/st/st-theme-node.c b/src/st/st-theme-node.c index 7adfd1342..1c2856b8f 100644 --- a/src/st/st-theme-node.c +++ b/src/st/st-theme-node.c @@ -483,21 +483,12 @@ get_color_from_term (StThemeNode *node, /* rgba () colors - a CSS3 addition, are not supported by libcroco, * but they are parsed as a "function", so we can emulate the * functionality. - * - * libcroco < 0.6.2 has a bug where functions starting with 'r' are - * misparsed. We workaround this by pre-converting 'rgba' to 'RGBA' - * before parsing the stylesheet. Since libcroco isn't - * case-insensitive (a bug), it's fine with functions starting with - * 'R'. (In theory, we should be doing a case-insensitive compare - * everywhere, not just here, but that doesn't make much sense when - * the built-in parsing of libcroco is case-sensitive and things - * like 10PX don't work.) */ else if (term->type == TERM_FUNCTION && term->content.str && term->content.str->stryng && term->content.str->stryng->str && - g_ascii_strcasecmp (term->content.str->stryng->str, "rgba") == 0) + strcmp (term->content.str->stryng->str, "rgba") == 0) { return get_color_from_rgba_term (term, color); } diff --git a/src/st/st-theme.c b/src/st/st-theme.c index bce53b429..326d9def9 100644 --- a/src/st/st-theme.c +++ b/src/st/st-theme.c @@ -155,90 +155,6 @@ st_theme_class_init (StThemeClass *klass) } -/* This is a workaround for a bug in libcroco < 0.6.2 where - * function starting with 'r' (and 'u') are misparsed. We work - * around this by exploiting the fact that libcroco is incomformant - * with the CSS-spec and case sensitive and pre-convert all - * occurrences of rgba to RGBA. Then we make our own parsing - * code check for RGBA as well. - */ -#if LIBCROCO_VERSION_NUMBER < 602 -static gboolean -is_identifier_character (char c) -{ - /* Actual CSS rules allow for unicode > 0x00a1 and escaped - * characters, but we'll assume we won't do that in our stylesheets - * or at least not next to the string 'rgba'. - */ - return g_ascii_isalnum(c) || c == '-' || c == '_'; -} - -static void -convert_rgba_RGBA (char *buf) -{ - char *p; - - p = strstr (buf, "rgba"); - while (p) - { - /* Check if this looks like a complete token; this is to - * avoiding mangling, say, a selector '.rgba-entry' */ - if (!((p > buf && is_identifier_character (*(p - 1))) || - (is_identifier_character (*(p + 4))))) - memcpy(p, "RGBA", 4); - p += 4; - p = strstr (p, "rgba"); - } -} - -static CRStyleSheet * -parse_stylesheet (const char *filename, - GError **error) -{ - enum CRStatus status; - char *contents; - gsize length; - CRStyleSheet *stylesheet = NULL; - - if (filename == NULL) - return NULL; - - if (!g_file_get_contents (filename, &contents, &length, error)) - return NULL; - - convert_rgba_RGBA (contents); - - status = cr_om_parser_simply_parse_buf ((const guchar *) contents, - length, - CR_UTF_8, - &stylesheet); - g_free (contents); - - if (status != CR_OK) - { - g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, - "Error parsing stylesheet '%s'; errcode:%d", filename, status); - return NULL; - } - - return stylesheet; -} - -CRDeclaration * -_st_theme_parse_declaration_list (const char *str) -{ - char *copy = g_strdup (str); - CRDeclaration *result; - - convert_rgba_RGBA (copy); - - result = cr_declaration_parse_list_from_buf ((const guchar *)copy, - CR_UTF_8); - g_free (copy); - - return result; -} -#else /* LIBCROCO_VERSION_NUMBER >= 602 */ static CRStyleSheet * parse_stylesheet (const char *filename, GError **error) @@ -269,7 +185,6 @@ _st_theme_parse_declaration_list (const char *str) return cr_declaration_parse_list_from_buf ((const guchar *)str, CR_UTF_8); } -#endif /* LIBCROCO_VERSION_NUMBER < 602 */ /* Just g_warning for now until we have something nicer to do */ static CRStyleSheet *