comparison mupdf-source/include/mupdf/fitz/story-writer.h @ 2:b50eed0cc0ef upstream

ADD: MuPDF v1.26.7: the MuPDF source as downloaded by a default build of PyMuPDF 1.26.4. The directory name has changed: no version number in the expanded directory now.
author Franz Glasner <fzglas.hg@dom66.de>
date Mon, 15 Sep 2025 11:43:07 +0200
parents
children
comparison
equal deleted inserted replaced
1:1d09e1dec1d9 2:b50eed0cc0ef
1 // Copyright (C) 2022-2024 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_STORY_WRITER_H
24 #define MUPDF_FITZ_STORY_WRITER_H
25
26 #include "mupdf/fitz/story.h"
27 #include "mupdf/fitz/writer.h"
28
29 /*
30 * A fz_story_element_position plus page number information; used with
31 * fz_write_story() and fz_write_stabilized_story().
32 */
33 typedef struct
34 {
35 fz_story_element_position element;
36 int page_num;
37 } fz_write_story_position;
38
39 /*
40 * A set of fz_write_story_position items; used with
41 * fz_write_stabilized_story().
42 */
43 typedef struct
44 {
45 fz_write_story_position *positions;
46 int num;
47 } fz_write_story_positions;
48
49
50 /*
51 * Callback type used by fz_write_story() and fz_write_stabilized_story().
52 *
53 * Should set *rect to rect number <num>. If this is on a new page should also
54 * set *mediabox and return 1, otherwise return 0.
55 *
56 * ref:
57 * As passed to fz_write_story() or fz_write_stabilized_story().
58 * num:
59 * The rect number. Will typically increment by one each time, being reset
60 * to zero when fz_write_stabilized_story() starts a new iteration.
61 * filled:
62 * From earlier internal call to fz_place_story().
63 * rect:
64 * Out param.
65 * ctm:
66 * Out param, defaults to fz_identity.
67 * mediabox:
68 * Out param, only used if we return 1.
69 */
70 typedef int (fz_write_story_rectfn)(fz_context *ctx, void *ref, int num, fz_rect filled, fz_rect *rect, fz_matrix *ctm, fz_rect *mediabox);
71
72 /*
73 * Callback used by fz_write_story() to report information about element
74 * positions. Slightly different from fz_story_position_callback() because
75 * <position> also includes the page number.
76 *
77 * ref:
78 * As passed to fz_write_story() or fz_write_stabilized_story().
79 * position:
80 * Called via internal call to fz_story_position_callback().
81 */
82 typedef void (fz_write_story_positionfn)(fz_context *ctx, void *ref, const fz_write_story_position *position);
83
84 /*
85 * Callback for fz_write_story(), called twice for each page, before (after=0)
86 * and after (after=1) the story is written.
87 *
88 * ref:
89 * As passed to fz_write_story() or fz_write_stabilized_story().
90 * page_num:
91 * Page number, starting from 1.
92 * mediabox:
93 * As returned from fz_write_story_rectfn().
94 * dev:
95 * Created from the fz_writer passed to fz_write_story() or
96 * fz_write_stabilized_story().
97 * after:
98 * 0 - before writing the story.
99 * 1 - after writing the story.
100 */
101 typedef void (fz_write_story_pagefn)(fz_context *ctx, void *ref, int page_num, fz_rect mediabox, fz_device *dev, int after);
102
103 /*
104 * Callback type for fz_write_stabilized_story().
105 *
106 * Should populate the supplied buffer with html content for use with internal
107 * calls to fz_new_story(). This may include extra content derived from
108 * information in <positions>, for example a table of contents.
109 *
110 * ref:
111 * As passed to fz_write_stabilized_story().
112 * positions:
113 * Information from previous iteration.
114 * buffer:
115 * Where to write the new content. Will be initially empty.
116 */
117 typedef void (fz_write_story_contentfn)(fz_context *ctx, void *ref, const fz_write_story_positions *positions, fz_buffer *buffer);
118
119
120 /*
121 * Places and writes a story to a fz_document_writer. Avoids the need
122 * for calling code to implement a loop that calls fz_place_story()
123 * and fz_draw_story() etc, at the expense of having to provide a
124 * fz_write_story_rectfn() callback.
125 *
126 * story:
127 * The story to place and write.
128 * writer:
129 * Where to write the story; can be NULL.
130 * rectfn:
131 * Should return information about the rect to be used in the next
132 * internal call to fz_place_story().
133 * rectfn_ref:
134 * Passed to rectfn().
135 * positionfn:
136 * If not NULL, is called via internal calls to fz_story_positions().
137 * positionfn_ref:
138 * Passed to positionfn().
139 * pagefn:
140 * If not NULL, called at start and end of each page (before and after all
141 * story content has been written to the device).
142 * pagefn_ref:
143 * Passed to pagefn().
144 */
145 void fz_write_story(
146 fz_context *ctx,
147 fz_document_writer *writer,
148 fz_story *story,
149 fz_write_story_rectfn rectfn,
150 void *rectfn_ref,
151 fz_write_story_positionfn positionfn,
152 void *positionfn_ref,
153 fz_write_story_pagefn pagefn,
154 void *pagefn_ref
155 );
156
157
158 /*
159 * Does iterative layout of html content to a fz_document_writer. For example
160 * this allows one to add a table of contents section while ensuring that page
161 * numbers are patched up until stable.
162 *
163 * Repeatedly creates new story from (contentfn(), contentfn_ref, user_css, em)
164 * and lays it out with internal call to fz_write_story(); uses a NULL writer
165 * and populates a fz_write_story_positions which is passed to the next call of
166 * contentfn().
167 *
168 * When the html from contentfn() becomes unchanged, we do a final iteration
169 * using <writer>.
170 *
171 * writer:
172 * Where to write in the final iteration.
173 * user_css:
174 * Used in internal calls to fz_new_story().
175 * em:
176 * Used in internal calls to fz_new_story().
177 * contentfn:
178 * Should return html content for use with fz_new_story(), possibly
179 * including extra content such as a table-of-contents.
180 * contentfn_ref:
181 * Passed to contentfn().
182 * rectfn:
183 * Should return information about the rect to be used in the next
184 * internal call to fz_place_story().
185 * rectfn_ref:
186 * Passed to rectfn().
187 * fz_write_story_pagefn:
188 * If not NULL, called at start and end of each page (before and after all
189 * story content has been written to the device).
190 * pagefn_ref:
191 * Passed to pagefn().
192 * dir:
193 * NULL, or a directory context to load images etc from.
194 */
195 void fz_write_stabilized_story(
196 fz_context *ctx,
197 fz_document_writer *writer,
198 const char *user_css,
199 float em,
200 fz_write_story_contentfn contentfn,
201 void *contentfn_ref,
202 fz_write_story_rectfn rectfn,
203 void *rectfn_ref,
204 fz_write_story_pagefn pagefn,
205 void *pagefn_ref,
206 fz_archive *dir
207 );
208
209 #endif