/** * gimp_scanner_parse_string: * @scanner: A #GScanner created by gimp_scanner_new_file() or * gimp_scanner_new_string() * @dest: Return location for the parsed string * * Return value: %TRUE on success * * Since: 2.4 **/ gboolean gimp_scanner_parse_string (GScanner *scanner, gchar **dest) { if (g_scanner_peek_next_token (scanner) != G_TOKEN_STRING) return FALSE; g_scanner_get_next_token (scanner); if (*scanner->value.v_string) { if (! g_utf8_validate (scanner->value.v_string, -1, NULL)) { g_scanner_warn (scanner, _("invalid UTF-8 string")); return FALSE; } *dest = g_strdup (scanner->value.v_string); } else { *dest = NULL; } return TRUE; }
static guint clearlooks_gtk2_rc_parse_dummy (GtkSettings *settings, GScanner *scanner, const gchar *name) { guint token; (void) settings; /* Skip option */ token = g_scanner_get_next_token (scanner); /* print a warning. Isn't there a way to get the string from the scanner? */ g_scanner_warn (scanner, "Clearlooks configuration option \"%s\" is not supported and will be ignored.", name); /* equal sign */ token = g_scanner_get_next_token (scanner); if (token != G_TOKEN_EQUAL_SIGN) return G_TOKEN_EQUAL_SIGN; /* eat whatever comes next */ token = g_scanner_get_next_token (scanner); return G_TOKEN_NONE; }
static guint theme_parse_image(GtkSettings *settings, GScanner *scanner, RsvgRcStyle *rsvg_style, ThemeImage **data_return) { guint token; ThemeImage *data; data = NULL; token = g_scanner_get_next_token(scanner); if (token != TOKEN_IMAGE) return TOKEN_IMAGE; token = g_scanner_get_next_token(scanner); if (token != G_TOKEN_LEFT_CURLY) return G_TOKEN_LEFT_CURLY; data = g_malloc(sizeof(ThemeImage)); data->refcount = 1; data->background = NULL; data->overlay = NULL; data->gap_start = NULL; data->gap = NULL; data->gap_end = NULL; data->recolorable = FALSE; data->match_data.function = 0; data->match_data.detail = NULL; data->match_data.flags = 0; token = g_scanner_peek_next_token(scanner); while (token != G_TOKEN_RIGHT_CURLY) { switch (token) { case TOKEN_FUNCTION: token = theme_parse_function(scanner, data); break; case TOKEN_RECOLORABLE: token = theme_parse_recolorable(scanner, data); break; case TOKEN_DETAIL: token = theme_parse_detail(scanner, data); break; case TOKEN_STATE: token = theme_parse_state(scanner, data); break; case TOKEN_SHADOW: token = theme_parse_shadow(scanner, data); break; case TOKEN_GAP_SIDE: token = theme_parse_gap_side(scanner, data); break; case TOKEN_ARROW_DIRECTION: token = theme_parse_arrow_direction(scanner, data); break; case TOKEN_ORIENTATION: token = theme_parse_orientation(scanner, data); break; case TOKEN_FILE: token = theme_parse_file(settings, scanner, &data->background); break; case TOKEN_BORDER: token = theme_parse_border(scanner, &data->background); break; case TOKEN_STRETCH: token = theme_parse_stretch(scanner, &data->background); break; case TOKEN_GAP_FILE: token = theme_parse_file(settings, scanner, &data->gap); break; case TOKEN_GAP_BORDER: token = theme_parse_border(scanner, &data->gap); break; case TOKEN_GAP_START_FILE: token = theme_parse_file(settings, scanner, &data->gap_start); break; case TOKEN_GAP_START_BORDER: token = theme_parse_border(scanner, &data->gap_start); break; case TOKEN_GAP_END_FILE: token = theme_parse_file(settings, scanner, &data->gap_end); break; case TOKEN_GAP_END_BORDER: token = theme_parse_border(scanner, &data->gap_end); break; case TOKEN_OVERLAY_FILE: token = theme_parse_file(settings, scanner, &data->overlay); break; case TOKEN_OVERLAY_BORDER: token = theme_parse_border(scanner, &data->overlay); break; case TOKEN_OVERLAY_STRETCH: token = theme_parse_stretch(scanner, &data->overlay); break; default: g_scanner_get_next_token(scanner); token = G_TOKEN_RIGHT_CURLY; break; } if (token != G_TOKEN_NONE) { /* error - cleanup for exit */ theme_image_unref (data); *data_return = NULL; return token; } token = g_scanner_peek_next_token(scanner); } token = g_scanner_get_next_token(scanner); if (data->background && !data->background->filename) { g_scanner_warn (scanner, "Background image options specified without filename"); theme_pixbuf_destroy (data->background); data->background = NULL; } if (data->overlay && !data->overlay->filename) { g_scanner_warn (scanner, "Overlay image options specified without filename"); theme_pixbuf_destroy (data->overlay); data->overlay = NULL; } if (token != G_TOKEN_RIGHT_CURLY) { /* error - cleanup for exit */ theme_image_unref (data); *data_return = NULL; return G_TOKEN_RIGHT_CURLY; } /* everything is fine now - insert yer cruft */ *data_return = data; return G_TOKEN_NONE; }