~guilhem-fr/mupdf/Upstream

« back to all changes in this revision

Viewing changes to ios/document.c

  • Committer: Tor Andersson
  • Date: 2012-01-30 14:12:00 UTC
  • Revision ID: git-v1:1e3461a02021fba4d27c4f7678f0ad21d8954eee
Add CBZ (comic book zip-file) parser.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
#include "fitz/fitz.h"
2
2
#include "pdf/mupdf.h"
3
3
#include "xps/muxps.h"
 
4
#include "cbz/mucbz.h"
4
5
#include "document.h"
5
6
 
6
7
#include <ctype.h> /* for tolower() */
21
22
                        doc->pdf = pdf_open_document(ctx, filename);
22
23
                else if (strstr(filename, ".xps") || strstr(filename, ".XPS"))
23
24
                        doc->xps = xps_open_document(ctx, filename);
 
25
                else if (strstr(filename, ".cbz") || strstr(filename, ".CBZ"))
 
26
                        doc->cbz = cbz_open_document(ctx, filename);
24
27
                else
25
28
                        fz_throw(ctx, "unknown document format");
26
29
        }
77
80
                return pdf_count_pages(doc->pdf);
78
81
        else if (doc->xps)
79
82
                return xps_count_pages(doc->xps);
 
83
        else if (doc->cbz)
 
84
                return cbz_count_pages(doc->cbz);
80
85
        else
81
86
                return 1;
82
87
}
101
106
                        doc->xps_page = NULL;
102
107
                        doc->xps_page = xps_load_page(doc->xps, number);
103
108
                }
 
109
                if (doc->cbz) {
 
110
                        if (doc->cbz_page)
 
111
                                cbz_free_page(doc->cbz, doc->cbz_page);
 
112
                        doc->cbz_page = NULL;
 
113
                        doc->cbz_page = cbz_load_page(doc->cbz, number);
 
114
                }
104
115
        }
105
116
        fz_catch (doc->ctx)
106
117
        {
122
133
                *w = bounds.x1 - bounds.x0;
123
134
                *h = bounds.y1 - bounds.y0;
124
135
        }
 
136
        else if (doc->cbz_page) {
 
137
                fz_rect bounds = cbz_bound_page(doc->cbz, doc->cbz_page);
 
138
                *w = bounds.x1 - bounds.x0;
 
139
                *h = bounds.y1 - bounds.y0;
 
140
        }
125
141
        else {
126
142
                *w = *h = 72;
127
143
        }
134
150
        load_page(doc, number);
135
151
        fz_try (doc->ctx)
136
152
        {
137
 
                if (doc->pdf_page) {
 
153
                if (doc->pdf_page)
138
154
                        pdf_run_page(doc->pdf, doc->pdf_page, dev, ctm, cookie);
139
 
                } else if (doc->xps_page) {
 
155
                else if (doc->xps_page)
140
156
                        xps_run_page(doc->xps, doc->xps_page, dev, ctm, cookie);
141
 
                }
 
157
                else if (doc->cbz_page)
 
158
                        cbz_run_page(doc->cbz, doc->cbz_page, dev, ctm, cookie);
142
159
        }
143
160
        fz_catch (doc->ctx)
144
161
        {
264
281
                        xps_free_page(doc->xps, doc->xps_page);
265
282
                xps_close_document(doc->xps);
266
283
        }
 
284
        if (doc->cbz) {
 
285
                if (doc->cbz_page)
 
286
                        cbz_free_page(doc->cbz, doc->cbz_page);
 
287
                cbz_close_document(doc->cbz);
 
288
        }
267
289
        fz_flush_warnings(doc->ctx);
268
290
        fz_free(doc->ctx, doc);
269
291
}