static GnmValue * cb_sylk_write_cell (GnmCellIter const *iter, SylkWriter *state) { GnmValue const *v; GnmExprTop const *texpr; GnmExprArrayCorner const *array; if (iter->pp.eval.row != state->cur_row) gsf_output_printf (state->output, "C;Y%d;X%d", (state->cur_row = iter->pp.eval.row) + 1, iter->pp.eval.col + 1); else gsf_output_printf (state->output, "C;X%d", iter->pp.eval.col + 1); if (NULL != (v = iter->cell->value)) { if (VALUE_IS_STRING (v)) { gsf_output_write (state->output, 3, ";K\""); sylk_write (state, v->v_str.val->str); gsf_output_write (state->output, 1, "\""); } else if (VALUE_IS_NUMBER (v) || VALUE_IS_ERROR (v)) { GString *res = g_string_sized_new (10); value_get_as_gstring (v, res, state->convs); gsf_output_write (state->output, 2, ";K"); gsf_output_write (state->output, res->len, res->str); g_string_free (res, TRUE); } /* ignore the rest */ } if (NULL != (texpr = iter->cell->base.texpr)) { if (NULL != (array = gnm_expr_top_get_array_corner (texpr))) { gsf_output_printf (state->output, ";R%d;C%d;M", iter->pp.eval.row + array->rows, iter->pp.eval.col + array->cols); } else if (gnm_expr_top_is_array_elem (texpr, NULL, NULL)) { gsf_output_write (state->output, 2, ";I"); texpr = NULL; } else gsf_output_write (state->output, 2, ";E"); if (texpr != NULL) { GnmConventionsOut out; out.accum = g_string_new (NULL); out.pp = &iter->pp; out.convs = state->convs; gnm_expr_top_as_gstring (texpr, &out); sylk_write (state, out.accum->str); g_string_free (out.accum, TRUE); } } gsf_output_write (state->output, 2, "\r\n"); return NULL; }
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); }