Handle multi-line -moz-document blocks

This commit is contained in:
Paweł Forysiuk 2010-11-05 23:26:34 +01:00 committed by Christian Dywan
parent 156374ded7
commit 96a276219a

View file

@ -794,6 +794,7 @@ css_metadata_from_file (const gchar* filename,
GIOChannel* channel; GIOChannel* channel;
gchar* line; gchar* line;
gchar* rest_of_line; gchar* rest_of_line;
gboolean line_has_meta;
if (!g_file_test (filename, G_FILE_TEST_IS_REGULAR | G_FILE_TEST_IS_SYMLINK)) if (!g_file_test (filename, G_FILE_TEST_IS_REGULAR | G_FILE_TEST_IS_SYMLINK))
return FALSE; return FALSE;
@ -802,21 +803,26 @@ css_metadata_from_file (const gchar* filename,
if (!channel) if (!channel)
return FALSE; return FALSE;
line_has_meta = FALSE;
while (g_io_channel_read_line (channel, &line, NULL, NULL, NULL) while (g_io_channel_read_line (channel, &line, NULL, NULL, NULL)
== G_IO_STATUS_NORMAL) == G_IO_STATUS_NORMAL)
{ {
if (g_str_has_prefix (line, "@-moz-document")) if (g_str_has_prefix (line, "@-moz-document") || line_has_meta)
{ /* FIXME: We merely look for includes. We should honor blocks. */ { /* FIXME: We merely look for includes. We should honor blocks. */
if (includes) if (includes)
{ {
gchar** parts; gchar** parts;
guint i; guint i;
if (g_str_has_prefix (line, "@-moz-document"))
rest_of_line = g_strdup (line + strlen ("@-moz-document")); rest_of_line = g_strdup (line + strlen ("@-moz-document"));
else
rest_of_line = g_strdup (line);
rest_of_line = g_strstrip (rest_of_line); rest_of_line = g_strstrip (rest_of_line);
parts = g_strsplit (rest_of_line, " ", 0); parts = g_strsplit (rest_of_line, " ", 0);
i = 0; i = 0;
while (parts[i]) while (parts[i] && (*parts[i] != '\0' && *parts[i] != '{'))
{ {
gchar* value = NULL; gchar* value = NULL;
if (g_str_has_prefix (parts[i], "url-prefix(")) if (g_str_has_prefix (parts[i], "url-prefix("))
@ -830,6 +836,7 @@ css_metadata_from_file (const gchar* filename,
guint begin, end; guint begin, end;
gchar* domain; gchar* domain;
line_has_meta = TRUE;
begin = value[0] == '"' || value[0] == '\'' ? 1 : 0; begin = value[0] == '"' || value[0] == '\'' ? 1 : 0;
end = 1; end = 1;
while (value[end] != '\0' && value[end] != ')') while (value[end] != '\0' && value[end] != ')')
@ -850,6 +857,7 @@ css_metadata_from_file (const gchar* filename,
} }
g_strfreev (parts); g_strfreev (parts);
} }
line_has_meta = g_str_has_suffix (rest_of_line, "{") ? FALSE : TRUE;
} }
g_free (line); g_free (line);
} }