1#![allow(unused)]
2
3use std::ffi::c_void;
4use std::mem;
5
6fn has_webp_support() -> bool {
17 unsafe { !libc::dlsym(libc::RTLD_DEFAULT, b"fz_load_webp\0".as_ptr() as *const _).is_null() }
18}
19
20pub fn log_mupdf_features() {
21 tracing::info!(webp = has_webp_support(), "MuPDF features");
22}
23
24pub const FZ_MAX_COLORS: usize = 32;
25pub const FZ_VERSION: &str = "1.27.2";
26
27pub const FZ_META_INFO_AUTHOR: &str = "info:Author";
28pub const FZ_META_INFO_TITLE: &str = "info:Title";
29
30pub const FZ_TEXT_PRESERVE_LIGATURES: libc::c_int = 1;
31pub const FZ_TEXT_PRESERVE_WHITESPACE: libc::c_int = 2;
32pub const FZ_TEXT_PRESERVE_IMAGES: libc::c_int = 4;
33pub const FZ_TEXT_INHIBIT_SPACES: libc::c_int = 8;
34pub const FZ_TEXT_DEHYPHENATE: libc::c_int = 16;
35pub const FZ_TEXT_PRESERVE_SPANS: libc::c_int = 32;
36pub const FZ_TEXT_CLIP: libc::c_int = 64;
37pub const FZ_TEXT_CLIP_RECT: libc::c_int = 1 << 17;
38pub const FZ_TEXT_COLLECT_STRUCTURE: libc::c_int = 256;
39pub const FZ_TEXT_COLLECT_VECTORS: libc::c_int = 1024;
40pub const FZ_TEXT_ACCURATE_BBOXES: libc::c_int = 512;
41pub const FZ_TEXT_ACCURATE_ASCENDERS: libc::c_int = 1 << 18;
42pub const FZ_TEXT_ACCURATE_SIDE_BEARINGS: libc::c_int = 1 << 19;
43pub const FZ_TEXT_IGNORE_ACTUALTEXT: libc::c_int = 2048;
44pub const FZ_TEXT_SEGMENT: libc::c_int = 4096;
45pub const FZ_TEXT_PARAGRAPH_BREAK: libc::c_int = 8192;
46pub const FZ_TEXT_TABLE_HUNT: libc::c_int = 16384;
47pub const FZ_TEXT_USE_CID_FOR_UNKNOWN_UNICODE: libc::c_int = 128;
48pub const FZ_TEXT_USE_GID_FOR_UNKNOWN_UNICODE: libc::c_int = 65536;
49
50pub const FZ_PAGE_BLOCK_TEXT: libc::c_int = 0;
51pub const FZ_PAGE_BLOCK_IMAGE: libc::c_int = 1;
52pub const FZ_PAGE_BLOCK_STRUCT: libc::c_int = 2;
53pub const FZ_PAGE_BLOCK_VECTOR: libc::c_int = 3;
54pub const FZ_PAGE_BLOCK_GRID: libc::c_int = 4;
55
56pub const CACHE_SIZE: libc::size_t = 32 * 1024 * 1024;
57
58pub enum FzContext {}
59pub enum FzDocument {}
60pub enum FzStream {}
61pub enum FzPool {}
62pub enum FzPage {}
63pub enum FzDevice {}
64pub enum FzFont {}
65pub enum FzColorspace {}
66pub enum FzAllocContext {}
67pub enum FzLocksContext {}
68pub enum FzCookie {}
69pub enum FzStoreDropFn {}
70pub enum FzStoreDroppableFn {}
71pub enum FzLinkSetRectFn {}
72pub enum FzLinkSetUriFn {}
73pub enum FzLinkDropLinkFn {}
74pub enum FzSeparations {}
75pub enum FzTextStruct {}
76pub enum FzGridPositions {}
77pub enum FzGridInfo {}
78pub enum FzPoolArray {}
79pub enum FzImage {}
80
81#[link(name = "mupdf")]
82#[link(name = "mupdf_wrapper", kind = "static")]
83
84unsafe extern "C" {
85 pub fn fz_new_context_imp(
86 alloc_ctx: *const FzAllocContext,
87 locks_ctx: *const FzLocksContext,
88 cache_size: libc::size_t,
89 version: *const libc::c_char,
90 ) -> *mut FzContext;
91 pub fn fz_drop_context(ctx: *mut FzContext);
92 pub fn fz_register_document_handlers(ctx: *mut FzContext);
93 pub fn fz_set_user_css(ctx: *mut FzContext, user_css: *const libc::c_char);
94 pub fn fz_set_use_document_css(ctx: *mut FzContext, should_use: libc::c_int);
95 pub fn mp_open_document(ctx: *mut FzContext, path: *const libc::c_char) -> *mut FzDocument;
96 pub fn mp_open_document_with_error(
97 ctx: *mut FzContext,
98 path: *const libc::c_char,
99 err_buf: *mut libc::c_char,
100 err_buf_len: libc::c_int,
101 ) -> *mut FzDocument;
102 pub fn mp_open_document_with_stream(
103 ctx: *mut FzContext,
104 kind: *const libc::c_char,
105 stream: *mut FzStream,
106 ) -> *mut FzDocument;
107 pub fn fz_drop_document(ctx: *mut FzContext, doc: *mut FzDocument);
108 pub fn fz_open_memory(
109 ctx: *mut FzContext,
110 data: *const libc::c_uchar,
111 len: libc::size_t,
112 ) -> *mut FzStream;
113 pub fn fz_drop_stream(ctx: *mut FzContext, stream: *mut FzStream);
114 pub fn mp_count_pages(ctx: *mut FzContext, doc: *mut FzDocument) -> libc::c_int;
115 pub fn mp_page_number_from_location(
116 ctx: *mut FzContext,
117 doc: *mut FzDocument,
118 loc: FzLocation,
119 ) -> libc::c_int;
120 pub fn fz_lookup_metadata(
121 ctx: *mut FzContext,
122 doc: *mut FzDocument,
123 key: *const libc::c_char,
124 buf: *mut libc::c_char,
125 size: libc::c_int,
126 ) -> libc::c_int;
127 pub fn fz_needs_password(ctx: *mut FzContext, doc: *mut FzDocument) -> libc::c_int;
128 pub fn fz_is_document_reflowable(ctx: *mut FzContext, doc: *mut FzDocument) -> libc::c_int;
129 pub fn fz_layout_document(
130 ctx: *mut FzContext,
131 doc: *mut FzDocument,
132 w: libc::c_float,
133 h: libc::c_float,
134 em: libc::c_float,
135 );
136 pub fn mp_load_outline(ctx: *mut FzContext, doc: *mut FzDocument) -> *mut FzOutline;
137 pub fn fz_drop_outline(ctx: *mut FzContext, outline: *mut FzOutline);
138 pub fn fz_device_rgb(ctx: *mut FzContext) -> *mut FzColorspace;
139 pub fn fz_device_gray(ctx: *mut FzContext) -> *mut FzColorspace;
140 pub fn fz_scale(sx: libc::c_float, sy: libc::c_float) -> FzMatrix;
141 pub fn mp_new_pixmap_from_page(
142 ctx: *mut FzContext,
143 page: *mut FzPage,
144 mat: FzMatrix,
145 cs: *mut FzColorspace,
146 alpha: libc::c_int,
147 ) -> *mut FzPixmap;
148 pub fn fz_set_pixmap_resolution(
149 ctx: *mut FzContext,
150 pix: *mut FzPixmap,
151 xres: libc::c_int,
152 yres: libc::c_int,
153 );
154 pub fn fz_drop_pixmap(ctx: *mut FzContext, pixmap: *mut FzPixmap);
155 pub fn mp_load_page(
156 ctx: *mut FzContext,
157 doc: *mut FzDocument,
158 page_idx: libc::c_int,
159 ) -> *mut FzPage;
160 pub fn fz_drop_page(ctx: *mut FzContext, page: *mut FzPage);
161 pub fn fz_bound_page(ctx: *mut FzContext, page: *mut FzPage) -> FzRect;
162 pub fn fz_run_page(
163 ctx: *mut FzContext,
164 page: *mut FzPage,
165 dev: *mut FzDevice,
166 mat: FzMatrix,
167 cookie: *mut FzCookie,
168 );
169 pub fn mp_load_links(ctx: *mut FzContext, page: *mut FzPage) -> *mut FzLink;
170 pub fn fz_drop_link(ctx: *mut FzContext, link: *mut FzLink);
171 pub fn fz_resolve_link_dest(
172 ctx: *mut FzContext,
173 doc: *mut FzDocument,
174 uri: *const libc::c_char,
175 ) -> FzLinkDest;
176 pub fn mp_new_stext_page_from_page(
177 ctx: *mut FzContext,
178 page: *mut FzPage,
179 options: *const FzTextOptions,
180 ) -> *mut FzTextPage;
181 pub fn fz_drop_stext_page(ctx: *mut FzContext, tp: *mut FzTextPage);
182 pub fn fz_new_bbox_device(ctx: *mut FzContext, rect: *mut FzRect) -> *mut FzDevice;
183 pub fn fz_close_device(ctx: *mut FzContext, dev: *mut FzDevice);
184 pub fn fz_drop_device(ctx: *mut FzContext, dev: *mut FzDevice);
185 pub fn fz_union_rect(a: FzRect, b: FzRect) -> FzRect;
186 pub fn fz_rect_from_quad(q: FzQuad) -> FzRect;
187 pub fn fz_runetochar(buf: *mut u8, rune: libc::c_int) -> libc::c_int;
188 pub static fz_identity: FzMatrix;
189}
190
191#[repr(C)]
192#[derive(Debug, Copy, Clone)]
193pub struct FzRect {
194 pub x0: libc::c_float,
195 pub y0: libc::c_float,
196 pub x1: libc::c_float,
197 pub y1: libc::c_float,
198}
199
200impl Default for FzRect {
201 fn default() -> FzRect {
202 FzRect {
204 x0: 1.0,
205 y0: 1.0,
206 x1: -1.0,
207 y1: -1.0,
208 }
209 }
210}
211
212#[repr(C)]
213#[derive(Debug, Copy, Clone)]
214pub struct FzPoint {
215 x: libc::c_float,
216 y: libc::c_float,
217}
218
219#[repr(C)]
220#[derive(Debug, Copy, Clone)]
221pub struct FzQuad {
222 ul: FzPoint,
223 ur: FzPoint,
224 ll: FzPoint,
225 lr: FzPoint,
226}
227
228#[derive(Copy, Clone)]
229#[repr(C)]
230pub struct FzMatrix {
231 a: libc::c_float,
232 b: libc::c_float,
233 c: libc::c_float,
234 d: libc::c_float,
235 e: libc::c_float,
236 f: libc::c_float,
237}
238
239#[repr(C)]
240pub struct FzStorable {
241 refs: libc::c_int,
242 drop: *mut FzStoreDropFn,
243 droppable: *mut FzStoreDroppableFn,
244}
245
246#[repr(C)]
247pub struct FzTextOptions {
248 pub flags: libc::c_int,
249 pub scale: libc::c_float,
250 pub clip: FzRect,
251}
252
253#[repr(C)]
254pub struct FzLinkDest {
255 pub loc: FzLocation,
256 kind: libc::c_int,
257 x: libc::c_float,
258 y: libc::c_float,
259 w: libc::c_float,
260 h: libc::c_float,
261 zoom: libc::c_float,
262}
263
264#[repr(C)]
265pub struct FzPixmap {
266 storable: FzStorable,
267 x: libc::c_int,
268 y: libc::c_int,
269 pub w: libc::c_int,
270 pub h: libc::c_int,
271 n: libc::c_uchar,
272 s: libc::c_uchar,
273 alpha: libc::c_uchar,
274 flags: libc::c_uchar,
275 stride: libc::ptrdiff_t,
276 seps: *mut FzSeparations,
277 xres: libc::c_int,
278 yres: libc::c_int,
279 colorspace: *mut FzColorspace,
280 pub samples: *mut libc::c_uchar,
281 underlying: *mut FzPixmap,
282}
283
284impl Default for FzMatrix {
285 fn default() -> FzMatrix {
286 unsafe { mem::zeroed() }
287 }
288}
289
290#[repr(C)]
291pub struct FzLink {
292 refs: libc::c_int,
293 pub next: *mut FzLink,
294 pub rect: FzRect,
295 pub uri: *mut libc::c_char,
296 set_rect_fn: *mut FzLinkSetRectFn,
297 set_uri_fn: *mut FzLinkSetUriFn,
298 drop: *mut FzLinkDropLinkFn,
299}
300
301#[repr(C)]
302pub struct FzTextPage {
303 refs: libc::c_int,
304 pool: *mut FzPool,
305 mediabox: FzRect,
306 pub first_block: *mut FzTextBlock,
307 last_block: *mut FzTextBlock,
308 last_struct: *mut FzTextStruct,
309 id_list: *mut FzPoolArray,
310}
311
312#[repr(C)]
313pub struct FzTextBlock {
314 pub kind: libc::c_int,
315 id: libc::c_int,
316 pub bbox: FzRect,
317 pub u: FzTextBlockTextImage,
318 prev: *mut FzTextBlock,
319 pub next: *mut FzTextBlock,
320}
321
322#[derive(Copy, Clone)]
323#[repr(C)]
324pub struct FzTextBlockText {
325 pub first_line: *mut FzTextLine,
326 last_line: *mut FzTextLine,
327 flags: libc::c_int,
328}
329
330#[derive(Copy, Clone)]
331#[repr(C)]
332pub struct FzTextBlockImage {
333 transform: FzMatrix,
334 image: *mut FzImage,
335}
336
337#[derive(Copy, Clone)]
338#[repr(C)]
339pub struct FzTextBlockStruct {
340 down: *mut FzTextStruct,
341 index: libc::c_int,
342}
343
344#[derive(Copy, Clone)]
345#[repr(C)]
346pub struct FzTextBlockVector {
347 flags: u32,
348 argb: u32,
349}
350
351#[derive(Copy, Clone)]
352#[repr(C)]
353pub struct FzTextBlockGrid {
354 xs: *mut FzGridPositions,
355 ys: *mut FzGridPositions,
356 info: *mut FzGridInfo,
357}
358
359#[repr(C)]
360pub union FzTextBlockTextImage {
361 pub text: FzTextBlockText,
362 pub image: FzTextBlockImage,
363 pub stru: FzTextBlockStruct,
364 pub vector: FzTextBlockVector,
365 pub grid: FzTextBlockGrid,
366}
367
368#[repr(C)]
369pub struct FzTextLine {
370 wmode: u8,
371 flags: u8,
372 dir: FzPoint,
373 pub bbox: FzRect,
374 pub first_char: *mut FzTextChar,
375 last_char: *mut FzTextChar,
376 prev: *mut FzTextLine,
377 pub next: *mut FzTextLine,
378}
379
380#[repr(C)]
381pub struct FzTextChar {
382 pub c: libc::c_int,
383 bidi: u16,
384 flags: u16,
385 argb: u32,
386 origin: FzPoint,
387 pub quad: FzQuad,
388 size: libc::c_float,
389 font: *mut FzFont,
390 pub next: *mut FzTextChar,
391}
392
393#[derive(Copy, Clone)]
394#[repr(C)]
395pub struct FzLocation {
396 pub chapter: libc::c_int,
397 pub page: libc::c_int,
398}
399
400#[repr(C)]
401pub struct FzOutline {
402 refs: libc::c_int,
403 pub title: *mut libc::c_char,
404 pub uri: *mut libc::c_char,
405 pub page: FzLocation,
406 x: libc::c_float,
407 y: libc::c_float,
408 pub next: *mut FzOutline,
409 pub down: *mut FzOutline,
410 is_open: libc::c_uint,
411 flags: libc::c_uint,
412 r: libc::c_uint,
413 g: libc::c_uint,
414 b: libc::c_uint,
415}
416
417impl Default for FzOutline {
418 fn default() -> Self {
419 unsafe { mem::zeroed() }
420 }
421}