mupdf
Loading...
Searching...
No Matches
output.h
Go to the documentation of this file.
1// Copyright (C) 2004-2025 Artifex Software, Inc.
2//
3// This file is part of MuPDF.
4//
5// MuPDF is free software: you can redistribute it and/or modify it under the
6// terms of the GNU Affero General Public License as published by the Free
7// Software Foundation, either version 3 of the License, or (at your option)
8// any later version.
9//
10// MuPDF is distributed in the hope that it will be useful, but WITHOUT ANY
11// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
12// FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
13// details.
14//
15// You should have received a copy of the GNU Affero General Public License
16// along with MuPDF. If not, see <https://www.gnu.org/licenses/agpl-3.0.en.html>
17//
18// Alternative licensing terms are available from the licensor.
19// For commercial licensing, see <https://www.artifex.com/> or contact
20// Artifex Software, Inc., 39 Mesa Street, Suite 108A, San Francisco,
21// CA 94129, USA, for further information.
22
23#ifndef MUPDF_FITZ_OUTPUT_H
24#define MUPDF_FITZ_OUTPUT_H
25
26#include "mupdf/fitz/system.h"
27#include "mupdf/fitz/context.h"
28#include "mupdf/fitz/buffer.h"
30#include "mupdf/fitz/stream.h"
31
36
48typedef void (fz_output_write_fn)(fz_context *ctx, void *state, const void *data, size_t n);
49
59typedef void (fz_output_seek_fn)(fz_context *ctx, void *state, int64_t offset, int whence);
60
70typedef int64_t (fz_output_tell_fn)(fz_context *ctx, void *state);
71
77typedef void (fz_output_close_fn)(fz_context *ctx, void *state);
78
85typedef void (fz_output_reset_fn)(fz_context *ctx, void *state);
86
93typedef void (fz_output_drop_fn)(fz_context *ctx, void *state);
94
100typedef fz_stream *(fz_stream_from_output_fn)(fz_context *ctx, void *state);
101
108typedef void (fz_truncate_fn)(fz_context *ctx, void *state);
109
111{
112 void *state;
122 char *bp, *wp, *ep;
123 /* If buffered is non-zero, then we have that many
124 * bits (1-7) waiting to be written in bits. */
126 int bits;
127};
128
140fz_output *fz_new_output(fz_context *ctx, int bufsiz, void *state, fz_output_write_fn *write, fz_output_close_fn *close, fz_output_drop_fn *drop);
141
154fz_output *fz_new_output_with_path(fz_context *, const char *filename, int append);
155
164
172
179
186
187#ifdef _WIN32
193fz_output *fz_stdods(fz_context *ctx);
194#endif
195
201
210
215void fz_write_printf(fz_context *ctx, fz_output *out, const char *fmt, ...);
216
220void fz_write_vprintf(fz_context *ctx, fz_output *out, const char *fmt, va_list ap);
221
228void fz_seek_output(fz_context *ctx, fz_output *out, int64_t off, int whence);
229
236
241
246
254
259
264
274
282
289void fz_write_data(fz_context *ctx, fz_output *out, const void *data, size_t size);
291
295void fz_write_string(fz_context *ctx, fz_output *out, const char *s);
296
300void fz_write_int32_be(fz_context *ctx, fz_output *out, int x);
301void fz_write_int32_le(fz_context *ctx, fz_output *out, int x);
302void fz_write_uint32_be(fz_context *ctx, fz_output *out, unsigned int x);
303void fz_write_uint32_le(fz_context *ctx, fz_output *out, unsigned int x);
304void fz_write_int16_be(fz_context *ctx, fz_output *out, int x);
305void fz_write_int16_le(fz_context *ctx, fz_output *out, int x);
306void fz_write_uint16_be(fz_context *ctx, fz_output *out, unsigned int x);
307void fz_write_uint16_le(fz_context *ctx, fz_output *out, unsigned int x);
308void fz_write_char(fz_context *ctx, fz_output *out, char x);
309void fz_write_byte(fz_context *ctx, fz_output *out, unsigned char x);
310void fz_write_float_be(fz_context *ctx, fz_output *out, float f);
311void fz_write_float_le(fz_context *ctx, fz_output *out, float f);
312
316void fz_write_rune(fz_context *ctx, fz_output *out, int rune);
317
322void fz_write_base64(fz_context *ctx, fz_output *out, const unsigned char *data, size_t size, int newline);
323
328void fz_write_base64_buffer(fz_context *ctx, fz_output *out, fz_buffer *data, int newline);
329
334void fz_write_bits(fz_context *ctx, fz_output *out, unsigned int data, int num_bits);
335
340
345
382void fz_format_string(fz_context *ctx, void *user, void (*emit)(fz_context *ctx, void *user, int c), const char *fmt, va_list args);
383
387size_t fz_vsnprintf(char *buffer, size_t space, const char *fmt, va_list args);
388
392size_t fz_snprintf(char *buffer, size_t space, const char *fmt, ...);
393
400char *fz_asprintf(fz_context *ctx, const char *fmt, ...);
401
405void fz_save_buffer(fz_context *ctx, fz_buffer *buf, const char *filename);
406
425
429fz_output *fz_new_arc4_output(fz_context *ctx, fz_output *chain, unsigned char *key, size_t keylen);
430fz_output *fz_new_deflate_output(fz_context *ctx, fz_output *chain, int effort, int raw);
431
432/*
433 Return whether a char is representable in an XML string.
434*/
436
437/*
438 Return a char mapped into the ranges representable by XML.
439 Any unrepresentable char becomes the unicode replacement
440 char (0xFFFD).
441*/
442int
444
445/*
446 Return true if all the utf-8 encoded characters in the
447 string are representable within XML.
448*/
449int fz_is_valid_xml_string(const char *s);
450
451#endif
void fz_write_byte(fz_context *ctx, fz_output *out, unsigned char x)
void fz_write_int16_le(fz_context *ctx, fz_output *out, int x)
int fz_range_limit_xml_char(int c)
void fz_write_int32_be(fz_context *ctx, fz_output *out, int x)
void fz_write_bits_sync(fz_context *ctx, fz_output *out)
int64_t fz_output_tell_fn(fz_context *ctx, void *state)
Definition output.h:70
char * fz_asprintf(fz_context *ctx, const char *fmt,...)
fz_output * fz_stderr(fz_context *ctx)
void fz_write_base64_buffer(fz_context *ctx, fz_output *out, fz_buffer *data, int newline)
void fz_write_uint16_be(fz_context *ctx, fz_output *out, unsigned int x)
void fz_close_output(fz_context *, fz_output *)
fz_output * fz_new_asciihex_output(fz_context *ctx, fz_output *chain)
void fz_write_bits(fz_context *ctx, fz_output *out, unsigned int data, int num_bits)
void fz_write_stream(fz_context *ctx, fz_output *out, fz_stream *in)
fz_stream * fz_stream_from_output(fz_context *, fz_output *)
void fz_output_close_fn(fz_context *ctx, void *state)
Definition output.h:77
void fz_write_int16_be(fz_context *ctx, fz_output *out, int x)
void fz_write_uint32_le(fz_context *ctx, fz_output *out, unsigned int x)
void fz_write_float_le(fz_context *ctx, fz_output *out, float f)
fz_output * fz_stdout(fz_context *ctx)
void fz_truncate_output(fz_context *, fz_output *)
void fz_write_string(fz_context *ctx, fz_output *out, const char *s)
void fz_write_printf(fz_context *ctx, fz_output *out, const char *fmt,...)
fz_output * fz_new_ascii85_output(fz_context *ctx, fz_output *chain)
void fz_truncate_fn(fz_context *ctx, void *state)
Definition output.h:108
fz_output * fz_new_output_with_file_ptr(fz_context *ctx, FILE *file)
fz_output * fz_stddbg(fz_context *ctx)
void fz_output_drop_fn(fz_context *ctx, void *state)
Definition output.h:93
void fz_write_char(fz_context *ctx, fz_output *out, char x)
fz_output * fz_new_output_with_path(fz_context *, const char *filename, int append)
fz_output * fz_new_output_with_buffer(fz_context *ctx, fz_buffer *buf)
void fz_seek_output(fz_context *ctx, fz_output *out, int64_t off, int whence)
void fz_write_uint16_le(fz_context *ctx, fz_output *out, unsigned int x)
void fz_write_buffer(fz_context *ctx, fz_output *out, fz_buffer *data)
void fz_save_buffer(fz_context *ctx, fz_buffer *buf, const char *filename)
void fz_write_rune(fz_context *ctx, fz_output *out, int rune)
void fz_flush_output(fz_context *ctx, fz_output *out)
int fz_is_valid_xml_char(int c)
fz_output * fz_new_rle_output(fz_context *ctx, fz_output *chain)
void fz_output_seek_fn(fz_context *ctx, void *state, int64_t offset, int whence)
Definition output.h:59
void fz_output_reset_fn(fz_context *ctx, void *state)
Definition output.h:85
int fz_output_supports_stream(fz_context *ctx, fz_output *out)
void fz_write_float_be(fz_context *ctx, fz_output *out, float f)
fz_output * fz_new_arc4_output(fz_context *ctx, fz_output *chain, unsigned char *key, size_t keylen)
fz_stream * fz_stream_from_output_fn(fz_context *ctx, void *state)
Definition output.h:100
void fz_write_vprintf(fz_context *ctx, fz_output *out, const char *fmt, va_list ap)
fz_output * fz_new_deflate_output(fz_context *ctx, fz_output *chain, int effort, int raw)
size_t fz_vsnprintf(char *buffer, size_t space, const char *fmt, va_list args)
void fz_reset_output(fz_context *, fz_output *)
void fz_write_int32_le(fz_context *ctx, fz_output *out, int x)
void fz_write_data(fz_context *ctx, fz_output *out, const void *data, size_t size)
void fz_format_string(fz_context *ctx, void *user, void(*emit)(fz_context *ctx, void *user, int c), const char *fmt, va_list args)
fz_output * fz_new_output(fz_context *ctx, int bufsiz, void *state, fz_output_write_fn *write, fz_output_close_fn *close, fz_output_drop_fn *drop)
void fz_write_base64(fz_context *ctx, fz_output *out, const unsigned char *data, size_t size, int newline)
void fz_drop_output(fz_context *, fz_output *)
void fz_write_uint32_be(fz_context *ctx, fz_output *out, unsigned int x)
void fz_set_stddbg(fz_context *ctx, fz_output *out)
int64_t fz_tell_output(fz_context *ctx, fz_output *out)
int fz_is_valid_xml_string(const char *s)
size_t fz_snprintf(char *buffer, size_t space, const char *fmt,...)
void fz_output_write_fn(fz_context *ctx, void *state, const void *data, size_t n)
Definition output.h:48
Definition buffer.h:41
Definition context.h:886
Definition output.h:111
fz_output_seek_fn * seek
Definition output.h:114
fz_truncate_fn * truncate
Definition output.h:120
int bits
Definition output.h:126
char * bp
Definition output.h:122
fz_output_drop_fn * drop
Definition output.h:117
char * wp
Definition output.h:122
char * ep
Definition output.h:122
int closed
Definition output.h:121
int buffered
Definition output.h:125
void * state
Definition output.h:112
fz_stream_from_output_fn * as_stream
Definition output.h:119
fz_output_reset_fn * reset
Definition output.h:118
fz_output_write_fn * write
Definition output.h:113
fz_output_tell_fn * tell
Definition output.h:115
fz_output_close_fn * close
Definition output.h:116
Definition stream.h:320