static fz_document * htdoc_open_document(fz_context *ctx, const char *filename) { char dirname[2048]; fz_buffer *buf; html_document *doc; fz_dirname(dirname, filename, sizeof dirname); doc = fz_malloc_struct(ctx, html_document); doc->super.close = htdoc_close_document; doc->super.layout = htdoc_layout; doc->super.count_pages = htdoc_count_pages; doc->super.load_page = htdoc_load_page; doc->zip = fz_open_directory(ctx, dirname); doc->set = fz_new_html_font_set(ctx); buf = fz_read_file(ctx, filename); fz_write_buffer_byte(ctx, buf, 0); doc->box = fz_parse_html(ctx, doc->set, doc->zip, ".", buf, fz_user_css(ctx)); fz_drop_buffer(ctx, buf); return (fz_document*)doc; }
static fz_document * epub_open_document(fz_context *ctx, const char *filename) { if (strstr(filename, "META-INF/container.xml") || strstr(filename, "META-INF\\container.xml")) { char dirname[2048], *p; fz_strlcpy(dirname, filename, sizeof dirname); p = strstr(dirname, "META-INF"); *p = 0; if (!dirname[0]) fz_strlcpy(dirname, ".", sizeof dirname); return epub_init(ctx, fz_open_directory(ctx, dirname)); } return epub_init(ctx, fz_open_zip_archive(ctx, filename)); }
static xps_document * xps_open_document_with_directory(fz_context *ctx, const char *directory) { xps_document *doc; doc = fz_malloc_struct(ctx, xps_document); xps_init_document(ctx, doc); doc->zip = fz_open_directory(ctx, directory); fz_try(ctx) { xps_read_page_list(ctx, doc); } fz_catch(ctx) { xps_close_document(ctx, doc); fz_rethrow(ctx); } return doc; }
static fz_document * htdoc_open_document_with_stream(fz_context *ctx, fz_stream *file) { html_document *doc; fz_buffer *buf; doc = fz_malloc_struct(ctx, html_document); doc->super.close = htdoc_close_document; doc->super.layout = htdoc_layout; doc->super.count_pages = htdoc_count_pages; doc->super.load_page = htdoc_load_page; doc->zip = fz_open_directory(ctx, "."); doc->set = fz_new_html_font_set(ctx); buf = fz_read_all(ctx, file, 0); fz_write_buffer_byte(ctx, buf, 0); doc->box = fz_parse_html(ctx, doc->set, doc->zip, ".", buf, fz_user_css(ctx)); fz_drop_buffer(ctx, buf); return (fz_document*)doc; }