From d13793b9e3511b0a1ada04c1863527e2bc948f1a Mon Sep 17 00:00:00 2001 From: Robin Watts Date: Mon, 4 Feb 2013 17:06:50 +0000 Subject: Add fz_output, and make output functions use it. Various functions in the code output to FILE *, when there are times we'd like them to output to other things, such as fz_buffers. Add an fz_output type, together with fz_printf to allow things to output to this. --- apps/mudraw.c | 77 ++++++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 50 insertions(+), 27 deletions(-) (limited to 'apps') diff --git a/apps/mudraw.c b/apps/mudraw.c index e36b1570..e3d4590b 100644 --- a/apps/mudraw.c +++ b/apps/mudraw.c @@ -87,6 +87,7 @@ static fz_text_sheet *sheet = NULL; static fz_colorspace *colorspace; static char *filename; static int files = 0; +fz_output *out = NULL; static char *mujstest_filename = NULL; static FILE *mujstest_file = NULL; @@ -331,12 +332,12 @@ static void drawpage(fz_context *ctx, fz_document *doc, int pagenum) fz_try(ctx) { dev = fz_new_trace_device(ctx); - printf("\n", pagenum); + fz_printf(out, "\n", pagenum); if (list) fz_run_display_list(list, dev, fz_identity, fz_infinite_rect, &cookie); else fz_run_page(doc, page, dev, fz_identity, &cookie); - printf("\n"); + fz_printf(out, "\n"); } fz_always(ctx) { @@ -369,16 +370,16 @@ static void drawpage(fz_context *ctx, fz_document *doc, int pagenum) dev = NULL; if (showtext == TEXT_XML) { - fz_print_text_page_xml(ctx, stdout, text); + fz_print_text_page_xml(ctx, out, text); } else if (showtext == TEXT_HTML) { - fz_print_text_page_html(ctx, stdout, text); + fz_print_text_page_html(ctx, out, text); } else if (showtext == TEXT_PLAIN) { - fz_print_text_page(ctx, stdout, text); - printf("\f\n"); + fz_print_text_page(ctx, out, text); + fz_printf(out, "\f\n"); } } fz_always(ctx) @@ -617,11 +618,26 @@ static void drawrange(fz_context *ctx, fz_document *doc, char *range) static void drawoutline(fz_context *ctx, fz_document *doc) { fz_outline *outline = fz_load_outline(doc); - if (showoutline > 1) - fz_print_outline_xml(ctx, stdout, outline); - else - fz_print_outline(ctx, stdout, outline); - fz_free_outline(ctx, outline); + fz_output *out = NULL; + + fz_var(out); + fz_try(ctx) + { + out = fz_new_output_file(ctx, stdout); + if (showoutline > 1) + fz_print_outline_xml(ctx, out, outline); + else + fz_print_outline(ctx, out, outline); + } + fz_always(ctx) + { + fz_close_output(out); + fz_free_outline(ctx, outline); + } + fz_catch(ctx) + { + fz_rethrow(ctx); + } } #ifdef MUPDF_COMBINED_EXE @@ -711,21 +727,24 @@ int main(int argc, char **argv) timing.minfilename = ""; timing.maxfilename = ""; - if (showxml || showtext == TEXT_XML) - printf("\n"); - if (showtext) + { + out = fz_new_output_file(ctx, stdout); sheet = fz_new_text_sheet(ctx); + } + + if (showxml || showtext == TEXT_XML) + fz_printf(out, "\n"); if (showtext == TEXT_HTML) { - printf("\n"); - printf("\n"); + fz_printf(out, "\n"); + fz_printf(out, "\n"); } fz_try(ctx) @@ -760,7 +779,7 @@ int main(int argc, char **argv) } if (showxml || showtext == TEXT_XML) - printf("\n", filename); + fz_printf(out, "\n", filename); if (showoutline) drawoutline(ctx, doc); @@ -774,7 +793,7 @@ int main(int argc, char **argv) } if (showxml || showtext == TEXT_XML) - printf("\n"); + fz_printf(out, "\n"); fz_close_document(doc); doc = NULL; @@ -799,14 +818,18 @@ int main(int argc, char **argv) if (showtext == TEXT_HTML) { - printf("\n"); - printf("\n"); + fz_printf(out, "\n"); + fz_printf(out, "\n"); } if (showtext) + { fz_free_text_sheet(ctx, sheet); + fz_close_output(out); + out = NULL; + } if (showtime && timing.count > 0) { -- cgit v1.2.3