X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Foutput%2Ftex.c;h=de111ec13f47b74177b0a48aed47046a59053e39;hb=17d00f9ba94128390819277e5d614a03e98aade0;hp=b9a90df2d78a3850354495c0177efcca3a792dd0;hpb=29917c4f5908454803e663d2ad78bca4bc35e805;p=pspp diff --git a/src/output/tex.c b/src/output/tex.c index b9a90df2d7..de111ec13f 100644 --- a/src/output/tex.c +++ b/src/output/tex.c @@ -75,7 +75,7 @@ struct tex_driver char *chart_file_name; FILE *file; - size_t chart_cnt; + size_t n_charts; struct ll_list preamble_list; struct ll_list token_list; @@ -131,7 +131,7 @@ tex_create (struct file_handle *fh, enum settings_output_devices device_type, tex->handle = fh; tex->chart_file_name = parse_chart_file_name (opt (d, o, "charts", fh_get_file_name (fh))); - tex->chart_cnt = 1; + tex->n_charts = 1; tex->bg = parse_color (opt (d, o, "background-color", "#FFFFFFFFFFFF")); tex->fg = parse_color (opt (d, o, "foreground-color", "#000000000000")); @@ -175,7 +175,11 @@ post_process_tokens (FILE *file, struct ll_list *list) if (nt->cat == CAT_SPACE || nt->cat == CAT_EOL) break; if (prev_x && (prev_x->cat == CAT_COMMENT) && (nt->cat != CAT_COMMENT)) - break; + { + ds_destroy (&prev_x->str); + free (prev_x); + break; + } word_len += ds_length (&nt->str); prev_x = nt; } @@ -184,6 +188,11 @@ post_process_tokens (FILE *file, struct ll_list *list) { fputs ("\n", file); line_len = 0; + if (tt) + { + ds_destroy (&tt->str); + free (tt); + } continue; } } @@ -314,7 +323,7 @@ tex_submit (struct output_driver *driver, const struct output_item *item) { char *file_name = xr_draw_png_chart (item->chart, tex->chart_file_name, - tex->chart_cnt++, + tex->n_charts++, &tex->fg, &tex->bg); if (file_name != NULL) { @@ -328,16 +337,13 @@ tex_submit (struct output_driver *driver, const struct output_item *item) } break; - case OUTPUT_ITEM_GROUP_OPEN: - break; - - case OUTPUT_ITEM_GROUP_CLOSE: + case OUTPUT_ITEM_GROUP: break; case OUTPUT_ITEM_IMAGE: { char *file_name = xr_write_png_image ( - item->image, tex->chart_file_name, tex->chart_cnt++); + item->image, tex->chart_file_name, tex->n_charts++); if (file_name != NULL) { shipout (&tex->token_list, "\\includegraphics{%s}\n", file_name); @@ -359,9 +365,6 @@ tex_submit (struct output_driver *driver, const struct output_item *item) case OUTPUT_ITEM_PAGE_BREAK: break; - case OUTPUT_ITEM_PAGE_SETUP: - break; - case OUTPUT_ITEM_TABLE: tex_output_table (tex, item->table); break; @@ -399,13 +402,12 @@ tex_submit (struct output_driver *driver, const struct output_item *item) static void tex_put_footnote_markers (struct tex_driver *tex, const struct pivot_table *pt, - const size_t *footnote_indexes, - size_t n_footnotes) + const struct pivot_value_ex *ex) { size_t n_visible = 0; - for (size_t i = 0; i < n_footnotes; i++) + for (size_t i = 0; i < ex->n_footnotes; i++) { - const struct pivot_footnote *f = pt->footnotes[footnote_indexes[i]]; + const struct pivot_footnote *f = pt->footnotes[ex->footnote_indexes[i]]; if (f->show) { if (!n_visible++) @@ -429,9 +431,7 @@ tex_put_table_cell (struct tex_driver *tex, const struct pivot_table *pt, tex_escape_string (tex, ds_cstr (&s), false); ds_destroy (&s); - tex_put_footnote_markers (tex, pt, - cell->value->footnote_indexes, - cell->value->n_footnotes); + tex_put_footnote_markers (tex, pt, pivot_value_ex (cell->value)); } static void @@ -555,8 +555,7 @@ tex_output_table_layer (struct tex_driver *tex, const struct pivot_table *pt, tex_escape_string (tex, ds_cstr (&s), true); ds_destroy (&s); - tex_put_footnote_markers (tex, pt, cell.value->footnote_indexes, - cell.value->n_footnotes); + tex_put_footnote_markers (tex, pt, pivot_value_ex (cell.value)); if (halign == TABLE_HALIGN_CENTER || halign == TABLE_HALIGN_RIGHT) { shipout (&tex->token_list, "}"); @@ -614,8 +613,7 @@ struct output_driver_factory tex_driver_factory = static const struct output_driver_class tex_driver_class = { - "tex", - tex_destroy, - tex_submit, - NULL, + .name = "tex", + .destroy = tex_destroy, + .submit = tex_submit, };