diff options
author | Robin Watts <robin.watts@artifex.com> | 2013-02-04 17:06:50 +0000 |
---|---|---|
committer | Robin Watts <robin.watts@artifex.com> | 2013-02-04 23:18:18 +0000 |
commit | d13793b9e3511b0a1ada04c1863527e2bc948f1a (patch) | |
tree | af9e79f45fea8043cb165f33a4cc0e9fbe508254 /apps | |
parent | fc9281079e0b15a219337fe6e1ad8f8d1389bad1 (diff) | |
download | mupdf-d13793b9e3511b0a1ada04c1863527e2bc948f1a.tar.xz |
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.
Diffstat (limited to 'apps')
-rw-r--r-- | apps/mudraw.c | 77 |
1 files changed, 50 insertions, 27 deletions
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("<page number=\"%d\">\n", pagenum); + fz_printf(out, "<page number=\"%d\">\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("</page>\n"); + fz_printf(out, "</page>\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("<?xml version=\"1.0\"?>\n"); - if (showtext) + { + out = fz_new_output_file(ctx, stdout); sheet = fz_new_text_sheet(ctx); + } + + if (showxml || showtext == TEXT_XML) + fz_printf(out, "<?xml version=\"1.0\"?>\n"); if (showtext == TEXT_HTML) { - printf("<style>\n"); - printf("body{background-color:gray;margin:12tp;}\n"); - printf("div.page{background-color:white;margin:6pt;padding:6pt;}\n"); - printf("div.block{border:1px solid gray;margin:6pt;padding:6pt;}\n"); - printf("p{margin:0;padding:0;}\n"); - printf("</style>\n"); - printf("<body>\n"); + fz_printf(out, "<style>\n"); + fz_printf(out, "body{background-color:gray;margin:12tp;}\n"); + fz_printf(out, "div.page{background-color:white;margin:6pt;padding:6pt;}\n"); + fz_printf(out, "div.block{border:1px solid gray;margin:6pt;padding:6pt;}\n"); + fz_printf(out, "p{margin:0;padding:0;}\n"); + fz_printf(out, "</style>\n"); + fz_printf(out, "<body>\n"); } fz_try(ctx) @@ -760,7 +779,7 @@ int main(int argc, char **argv) } if (showxml || showtext == TEXT_XML) - printf("<document name=\"%s\">\n", filename); + fz_printf(out, "<document name=\"%s\">\n", filename); if (showoutline) drawoutline(ctx, doc); @@ -774,7 +793,7 @@ int main(int argc, char **argv) } if (showxml || showtext == TEXT_XML) - printf("</document>\n"); + fz_printf(out, "</document>\n"); fz_close_document(doc); doc = NULL; @@ -799,14 +818,18 @@ int main(int argc, char **argv) if (showtext == TEXT_HTML) { - printf("</body>\n"); - printf("<style>\n"); - fz_print_text_sheet(ctx, stdout, sheet); - printf("</style>\n"); + fz_printf(out, "</body>\n"); + fz_printf(out, "<style>\n"); + fz_print_text_sheet(ctx, out, sheet); + fz_printf(out, "</style>\n"); } if (showtext) + { fz_free_text_sheet(ctx, sheet); + fz_close_output(out); + out = NULL; + } if (showtime && timing.count > 0) { |