static void ssindex_hlink (IndexerState *state, GnmHLink const *lnk) { gchar const *str; str = gnm_hlink_get_target (lnk); if (str) gsf_xml_out_simple_element (state->output, "data", str); str = gnm_hlink_get_tip (lnk); if (str) gsf_xml_out_simple_element (state->output, "data", str); }
static void ssindex_validation (IndexerState *state, GnmValidation const *valid) { if (valid->title) { const char *str = valid->title->str; if (str && *str) gsf_xml_out_simple_element (state->output, "data", str); } if (valid->msg) { const char *str = valid->msg->str; if (str && *str) gsf_xml_out_simple_element (state->output, "data", str); } }
static void cb_index_name (G_GNUC_UNUSED gconstpointer key, GnmNamedExpr const *nexpr, IndexerState *state) { gsf_xml_out_simple_element (state->output, "data", expr_name_name (nexpr)); }
static void cb_index_cell (G_GNUC_UNUSED gpointer ignore, GnmCell const *cell, IndexerState *state) { if (cell->value != NULL && VALUE_IS_STRING (cell->value)) { char const *str = value_peek_string (cell->value); if (str != NULL && *str) gsf_xml_out_simple_element (state->output, "data", str); } }
/* * * DO * NOT * COMPILE * DIRECTLY * * DO * NOT * COMPILE * DIRECTLY * * DO * NOT * COMPILE * DIRECTLY * * * included via xlsx-write.c **/ static void xlsx_write_pivot_val (XLSXWriteState *state, GsfXMLOut *xml, GOVal const *v) { switch (v->type) { case VALUE_CELLRANGE: case VALUE_ARRAY: g_warning ("REMOVE THIS CODE WHEN WE MOVE TO GOFFICE"); break; case VALUE_EMPTY: gsf_xml_out_simple_element (xml, "m", NULL); break; case VALUE_BOOLEAN: gsf_xml_out_start_element (xml, "b"); xlsx_add_bool (xml, "v", v->v_bool.val); gsf_xml_out_end_element (xml); break; case VALUE_FLOAT: { GOFormat const *fmt = go_val_get_fmt (v); if (NULL != fmt && go_format_is_date (fmt)) { char *d = format_value (state->date_fmt, v, NULL, -1, workbook_date_conv (state->base.wb)); gsf_xml_out_start_element (xml, "d"); gsf_xml_out_add_cstr_unchecked (xml, "v", d); gsf_xml_out_end_element (xml); } else { gsf_xml_out_start_element (xml, "n"); gsf_xml_out_add_float (xml, "v", v->v_float.val, -1); gsf_xml_out_end_element (xml); } break; } case VALUE_ERROR : gsf_xml_out_start_element (xml, "e"); gsf_xml_out_add_cstr (xml, "v", v->v_err.mesg->str); gsf_xml_out_end_element (xml); break; case VALUE_STRING : gsf_xml_out_start_element (xml, "s"); gsf_xml_out_add_cstr (xml, "v", v->v_str.val->str); gsf_xml_out_end_element (xml); break; } }
/** * 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; }