static void dialog_goto_load_names (GotoState *state) { Sheet *sheet; LoadNames closure; int i, l; gtk_tree_store_clear (state->model); closure.state = state; gtk_tree_store_append (state->model, &closure.iter, NULL); gtk_tree_store_set (state->model, &closure.iter, SHEET_NAME, _("Workbook Level"), ITEM_NAME, NULL, SHEET_POINTER, NULL, EXPRESSION, NULL, -1); workbook_foreach_name (state->wb, FALSE, (GHFunc)cb_load_names, &closure); l = workbook_sheet_count (state->wb); for (i = 0; i < l; i++) { sheet = workbook_sheet_by_index (state->wb, i); gtk_tree_store_append (state->model, &closure.iter, NULL); gtk_tree_store_set (state->model, &closure.iter, SHEET_NAME, sheet->name_unquoted, ITEM_NAME, NULL, SHEET_POINTER, sheet, EXPRESSION, NULL, -1); } }
gboolean expr_name_in_use (GnmNamedExpr *nexpr) { Workbook *wb; struct cb_expr_name_in_use data; if (nexpr->dependents != NULL && g_hash_table_size (nexpr->dependents) != 0) return TRUE; data.nexpr = nexpr; data.in_use = FALSE; wb = nexpr->pos.sheet ? nexpr->pos.sheet->workbook : nexpr->pos.wb; workbook_foreach_name (wb, FALSE, (GHFunc)cb_expr_name_in_use, &data); return data.in_use; }
static void dump_names (Workbook *wb) { GSList *l, *names = NULL; workbook_foreach_name (wb, FALSE, (GHFunc)cb_collect_names, &names); names = g_slist_sort (names, (GCompareFunc)expr_name_cmp_by_name); g_printerr ("Dumping names...\n"); for (l = names; l; l = l->next) { GnmNamedExpr *nexpr = l->data; GnmConventionsOut out; out.accum = g_string_new (NULL); out.pp = &nexpr->pos; out.convs = gnm_conventions_default; g_string_append (out.accum, "Scope="); if (out.pp->sheet) g_string_append (out.accum, out.pp->sheet->name_quoted); else g_string_append (out.accum, "Global"); g_string_append (out.accum, " Name="); go_strescape (out.accum, expr_name_name (nexpr)); g_string_append (out.accum, " Expr="); gnm_expr_top_as_gstring (nexpr->texpr, &out); g_printerr ("%s\n", out.accum->str); g_string_free (out.accum, TRUE); } g_printerr ("Dumping names... Done\n"); g_slist_free (names); }
/** * Other things we could index * - The names of external refernces * - functions used * - plugins used **/ static int ssindex (char const *file, GOIOContext *ioc) { int i, res = 0; GSList *objs, *ptr; char *str = go_shell_arg_to_uri (file); IndexerState state; GsfOutput *gsf_stdout; Workbook *wb; state.wb_view = workbook_view_new_from_uri (str, NULL, ioc, ssindex_import_encoding); g_free (str); if (state.wb_view == NULL) return 1; state.sheet = NULL; gsf_stdout = gsf_output_stdio_new_FILE ("<stdout>", stdout, TRUE); state.output = gsf_xml_out_new (gsf_stdout); gsf_xml_out_start_element (state.output, "gnumeric"); state.wb = wb = wb_view_get_workbook (state.wb_view); workbook_foreach_name (wb, TRUE, (GHFunc)cb_index_name, &state); for (i = 0; i < workbook_sheet_count (wb); i++) { state.sheet = workbook_sheet_by_index (wb, i); gsf_xml_out_simple_element (state.output, "data", state.sheet->name_unquoted); /* cell content */ sheet_cell_foreach (state.sheet, (GHFunc)&cb_index_cell, &state); /* now the objects */ objs = sheet_objects_get (state.sheet, NULL, G_TYPE_NONE); for (ptr = objs ; ptr != NULL ; ptr = ptr->next) { GObject *obj = ptr->data; char *str = NULL; if (gnm_object_has_readable_prop (obj, "text", G_TYPE_STRING, &str) && str) { gsf_xml_out_simple_element (state.output, "data", str); g_free (str); } else if (GNM_IS_SO_GRAPH (obj)) ssindex_chart (&state, (GogObject *)sheet_object_graph_get_gog (GNM_SO (obj))); } g_slist_free (objs); /* Various stuff in styles. */ sheet_style_foreach (state.sheet, (GFunc)cb_index_styles, &state); /* Local names. */ gnm_sheet_foreach_name (state.sheet, (GHFunc)cb_index_name, &state); } gsf_xml_out_end_element (state.output); /* </gnumeric> */ gsf_output_close (gsf_stdout); g_object_unref (gsf_stdout); g_object_unref (wb); return res; }