pretext-pdf 1.0.8 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/CHANGELOG.md +945 -869
  2. package/README.md +1 -1
  3. package/UPSTREAM.md +112 -0
  4. package/dist/cli.js +19 -19
  5. package/dist/measure-text.d.ts +1 -1
  6. package/dist/measure-text.d.ts.map +1 -1
  7. package/dist/measure-text.js +1 -1
  8. package/dist/measure-text.js.map +1 -1
  9. package/dist/rich-text.js +1 -1
  10. package/dist/rich-text.js.map +1 -1
  11. package/dist/vendor/pretext/analysis.d.ts +35 -0
  12. package/dist/vendor/pretext/analysis.d.ts.map +1 -0
  13. package/dist/vendor/pretext/analysis.js +1162 -0
  14. package/dist/vendor/pretext/analysis.js.map +1 -0
  15. package/dist/vendor/pretext/bidi.d.ts +2 -0
  16. package/dist/vendor/pretext/bidi.d.ts.map +1 -0
  17. package/dist/vendor/pretext/bidi.js +176 -0
  18. package/dist/vendor/pretext/bidi.js.map +1 -0
  19. package/dist/vendor/pretext/generated/bidi-data.d.ts +5 -0
  20. package/dist/vendor/pretext/generated/bidi-data.d.ts.map +1 -0
  21. package/dist/vendor/pretext/generated/bidi-data.js +980 -0
  22. package/dist/vendor/pretext/generated/bidi-data.js.map +1 -0
  23. package/dist/vendor/pretext/layout.d.ts +75 -0
  24. package/dist/vendor/pretext/layout.d.ts.map +1 -0
  25. package/dist/vendor/pretext/layout.js +448 -0
  26. package/dist/vendor/pretext/layout.js.map +1 -0
  27. package/dist/vendor/pretext/line-break.d.ts +43 -0
  28. package/dist/vendor/pretext/line-break.d.ts.map +1 -0
  29. package/dist/vendor/pretext/line-break.js +908 -0
  30. package/dist/vendor/pretext/line-break.js.map +1 -0
  31. package/dist/vendor/pretext/line-text.d.ts +5 -0
  32. package/dist/vendor/pretext/line-text.d.ts.map +1 -0
  33. package/dist/vendor/pretext/line-text.js +69 -0
  34. package/dist/vendor/pretext/line-text.js.map +1 -0
  35. package/dist/vendor/pretext/measurement.d.ts +31 -0
  36. package/dist/vendor/pretext/measurement.d.ts.map +1 -0
  37. package/dist/vendor/pretext/measurement.js +251 -0
  38. package/dist/vendor/pretext/measurement.js.map +1 -0
  39. package/dist/vendor/pretext/rich-inline.d.ts +53 -0
  40. package/dist/vendor/pretext/rich-inline.d.ts.map +1 -0
  41. package/dist/vendor/pretext/rich-inline.js +327 -0
  42. package/dist/vendor/pretext/rich-inline.js.map +1 -0
  43. package/package.json +212 -208
@@ -0,0 +1,327 @@
1
+ import { measureNaturalWidth, prepareWithSegments, } from './layout.js';
2
+ import { buildLineTextFromRange, getLineTextCache, } from './line-text.js';
3
+ import { stepPreparedLineGeometry, } from './line-break.js';
4
+ const COLLAPSIBLE_BOUNDARY_RE = /[ \t\n\f\r]+/;
5
+ const LEADING_COLLAPSIBLE_BOUNDARY_RE = /^[ \t\n\f\r]+/;
6
+ const TRAILING_COLLAPSIBLE_BOUNDARY_RE = /[ \t\n\f\r]+$/;
7
+ const EMPTY_LAYOUT_CURSOR = { segmentIndex: 0, graphemeIndex: 0 };
8
+ const RICH_INLINE_START_CURSOR = {
9
+ itemIndex: 0,
10
+ segmentIndex: 0,
11
+ graphemeIndex: 0,
12
+ };
13
+ function getInternalPreparedRichInline(prepared) {
14
+ return prepared;
15
+ }
16
+ function cloneCursor(cursor) {
17
+ return {
18
+ segmentIndex: cursor.segmentIndex,
19
+ graphemeIndex: cursor.graphemeIndex,
20
+ };
21
+ }
22
+ function isLineStartCursor(cursor) {
23
+ return cursor.segmentIndex === 0 && cursor.graphemeIndex === 0;
24
+ }
25
+ function getCollapsedSpaceWidth(font, letterSpacing, cache) {
26
+ const cacheKey = `${font}\u0000${letterSpacing}`;
27
+ const cached = cache.get(cacheKey);
28
+ if (cached !== undefined)
29
+ return cached;
30
+ const options = letterSpacing === 0 ? undefined : { letterSpacing };
31
+ const joinedWidth = measureNaturalWidth(prepareWithSegments('A A', font, options));
32
+ const compactWidth = measureNaturalWidth(prepareWithSegments('AA', font, options));
33
+ const collapsedWidth = Math.max(0, joinedWidth - compactWidth);
34
+ cache.set(cacheKey, collapsedWidth);
35
+ return collapsedWidth;
36
+ }
37
+ function prepareWholeItemLine(prepared) {
38
+ const end = { segmentIndex: 0, graphemeIndex: 0 };
39
+ const width = stepPreparedLineGeometry(prepared, end, Number.POSITIVE_INFINITY);
40
+ if (width === null)
41
+ return null;
42
+ return {
43
+ endGraphemeIndex: end.graphemeIndex,
44
+ endSegmentIndex: end.segmentIndex,
45
+ width,
46
+ };
47
+ }
48
+ function endsInsideFirstSegment(segmentIndex, graphemeIndex) {
49
+ return segmentIndex === 0 && graphemeIndex > 0;
50
+ }
51
+ export function prepareRichInline(items) {
52
+ const preparedItems = [];
53
+ const itemsBySourceItemIndex = Array.from({ length: items.length });
54
+ const collapsedSpaceWidthCache = new Map();
55
+ let pendingGapWidth = 0;
56
+ for (let index = 0; index < items.length; index++) {
57
+ const item = items[index];
58
+ const letterSpacing = item.letterSpacing ?? 0;
59
+ const hasLeadingWhitespace = LEADING_COLLAPSIBLE_BOUNDARY_RE.test(item.text);
60
+ const hasTrailingWhitespace = TRAILING_COLLAPSIBLE_BOUNDARY_RE.test(item.text);
61
+ const trimmedText = item.text
62
+ .replace(LEADING_COLLAPSIBLE_BOUNDARY_RE, '')
63
+ .replace(TRAILING_COLLAPSIBLE_BOUNDARY_RE, '');
64
+ if (trimmedText.length === 0) {
65
+ if (COLLAPSIBLE_BOUNDARY_RE.test(item.text) && pendingGapWidth === 0) {
66
+ pendingGapWidth = getCollapsedSpaceWidth(item.font, letterSpacing, collapsedSpaceWidthCache);
67
+ }
68
+ continue;
69
+ }
70
+ const gapBefore = pendingGapWidth > 0
71
+ ? pendingGapWidth
72
+ : hasLeadingWhitespace
73
+ ? getCollapsedSpaceWidth(item.font, letterSpacing, collapsedSpaceWidthCache)
74
+ : 0;
75
+ const prepared = prepareWithSegments(trimmedText, item.font, letterSpacing === 0 ? undefined : { letterSpacing });
76
+ const wholeLine = prepareWholeItemLine(prepared);
77
+ if (wholeLine === null) {
78
+ pendingGapWidth = hasTrailingWhitespace
79
+ ? getCollapsedSpaceWidth(item.font, letterSpacing, collapsedSpaceWidthCache)
80
+ : 0;
81
+ continue;
82
+ }
83
+ const preparedItem = {
84
+ break: item.break ?? 'normal',
85
+ endGraphemeIndex: wholeLine.endGraphemeIndex,
86
+ endSegmentIndex: wholeLine.endSegmentIndex,
87
+ extraWidth: item.extraWidth ?? 0,
88
+ gapBefore,
89
+ naturalWidth: wholeLine.width,
90
+ prepared,
91
+ sourceItemIndex: index,
92
+ };
93
+ preparedItems.push(preparedItem);
94
+ itemsBySourceItemIndex[index] = preparedItem;
95
+ pendingGapWidth = hasTrailingWhitespace
96
+ ? getCollapsedSpaceWidth(item.font, letterSpacing, collapsedSpaceWidthCache)
97
+ : 0;
98
+ }
99
+ return {
100
+ items: preparedItems,
101
+ itemsBySourceItemIndex,
102
+ };
103
+ }
104
+ function stepRichInlineLine(flow, maxWidth, cursor, collectFragment) {
105
+ if (flow.items.length === 0 || cursor.itemIndex >= flow.items.length)
106
+ return null;
107
+ const safeWidth = Math.max(1, maxWidth);
108
+ let lineWidth = 0;
109
+ let remainingWidth = safeWidth;
110
+ let itemIndex = cursor.itemIndex;
111
+ const textCursor = {
112
+ segmentIndex: cursor.segmentIndex,
113
+ graphemeIndex: cursor.graphemeIndex,
114
+ };
115
+ lineLoop: while (itemIndex < flow.items.length) {
116
+ const item = flow.items[itemIndex];
117
+ if (!isLineStartCursor(textCursor) &&
118
+ textCursor.segmentIndex === item.endSegmentIndex &&
119
+ textCursor.graphemeIndex === item.endGraphemeIndex) {
120
+ itemIndex++;
121
+ textCursor.segmentIndex = 0;
122
+ textCursor.graphemeIndex = 0;
123
+ continue;
124
+ }
125
+ const gapBefore = lineWidth === 0 ? 0 : item.gapBefore;
126
+ const atItemStart = isLineStartCursor(textCursor);
127
+ if (item.break === 'never') {
128
+ if (!atItemStart) {
129
+ itemIndex++;
130
+ textCursor.segmentIndex = 0;
131
+ textCursor.graphemeIndex = 0;
132
+ continue;
133
+ }
134
+ const occupiedWidth = item.naturalWidth + item.extraWidth;
135
+ const totalWidth = gapBefore + occupiedWidth;
136
+ if (lineWidth > 0 && totalWidth > remainingWidth)
137
+ break lineLoop;
138
+ collectFragment?.(item, gapBefore, occupiedWidth, cloneCursor(EMPTY_LAYOUT_CURSOR), {
139
+ segmentIndex: item.endSegmentIndex,
140
+ graphemeIndex: item.endGraphemeIndex,
141
+ });
142
+ lineWidth += totalWidth;
143
+ remainingWidth = Math.max(0, safeWidth - lineWidth);
144
+ itemIndex++;
145
+ textCursor.segmentIndex = 0;
146
+ textCursor.graphemeIndex = 0;
147
+ continue;
148
+ }
149
+ const reservedWidth = gapBefore + item.extraWidth;
150
+ if (lineWidth > 0 && reservedWidth >= remainingWidth)
151
+ break lineLoop;
152
+ if (atItemStart) {
153
+ const totalWidth = reservedWidth + item.naturalWidth;
154
+ if (totalWidth <= remainingWidth) {
155
+ collectFragment?.(item, gapBefore, item.naturalWidth + item.extraWidth, cloneCursor(EMPTY_LAYOUT_CURSOR), {
156
+ segmentIndex: item.endSegmentIndex,
157
+ graphemeIndex: item.endGraphemeIndex,
158
+ });
159
+ lineWidth += totalWidth;
160
+ remainingWidth = Math.max(0, safeWidth - lineWidth);
161
+ itemIndex++;
162
+ textCursor.segmentIndex = 0;
163
+ textCursor.graphemeIndex = 0;
164
+ continue;
165
+ }
166
+ }
167
+ const availableWidth = Math.max(1, remainingWidth - reservedWidth);
168
+ const lineEnd = {
169
+ segmentIndex: textCursor.segmentIndex,
170
+ graphemeIndex: textCursor.graphemeIndex,
171
+ };
172
+ const lineWidthForItem = stepPreparedLineGeometry(item.prepared, lineEnd, availableWidth);
173
+ if (lineWidthForItem === null) {
174
+ itemIndex++;
175
+ textCursor.segmentIndex = 0;
176
+ textCursor.graphemeIndex = 0;
177
+ continue;
178
+ }
179
+ if (textCursor.segmentIndex === lineEnd.segmentIndex &&
180
+ textCursor.graphemeIndex === lineEnd.graphemeIndex) {
181
+ itemIndex++;
182
+ textCursor.segmentIndex = 0;
183
+ textCursor.graphemeIndex = 0;
184
+ continue;
185
+ }
186
+ // Guard against overflow: stepPreparedLineGeometry always places at
187
+ // least one content unit even when it exceeds maxWidth (to prevent
188
+ // infinite loops in standalone layout). When we already have content on
189
+ // the current line and the returned fragment would push us past
190
+ // safeWidth, break the line before this item so the fragment can start
191
+ // fresh on the next line where it will have the full width available.
192
+ if (lineWidth > 0 &&
193
+ atItemStart &&
194
+ gapBefore + lineWidthForItem + item.extraWidth > remainingWidth) {
195
+ break lineLoop;
196
+ }
197
+ // If the only thing we can fit after paying the boundary gap is a partial
198
+ // slice of the item's first segment, prefer wrapping before the item so we
199
+ // keep whole-word-style boundaries when they exist. But once the current
200
+ // line can consume a real breakable unit from the item, stay greedy and
201
+ // keep filling the line.
202
+ if (lineWidth > 0 &&
203
+ atItemStart &&
204
+ gapBefore > 0 &&
205
+ endsInsideFirstSegment(lineEnd.segmentIndex, lineEnd.graphemeIndex)) {
206
+ const freshLineEnd = { segmentIndex: 0, graphemeIndex: 0 };
207
+ const freshLineWidth = stepPreparedLineGeometry(item.prepared, freshLineEnd, Math.max(1, safeWidth - item.extraWidth));
208
+ if (freshLineWidth !== null &&
209
+ (freshLineEnd.segmentIndex > lineEnd.segmentIndex ||
210
+ (freshLineEnd.segmentIndex === lineEnd.segmentIndex &&
211
+ freshLineEnd.graphemeIndex > lineEnd.graphemeIndex))) {
212
+ break lineLoop;
213
+ }
214
+ }
215
+ collectFragment?.(item, gapBefore, lineWidthForItem + item.extraWidth, cloneCursor(textCursor), {
216
+ segmentIndex: lineEnd.segmentIndex,
217
+ graphemeIndex: lineEnd.graphemeIndex,
218
+ });
219
+ lineWidth += gapBefore + lineWidthForItem + item.extraWidth;
220
+ remainingWidth = Math.max(0, safeWidth - lineWidth);
221
+ if (lineEnd.segmentIndex === item.endSegmentIndex &&
222
+ lineEnd.graphemeIndex === item.endGraphemeIndex) {
223
+ itemIndex++;
224
+ textCursor.segmentIndex = 0;
225
+ textCursor.graphemeIndex = 0;
226
+ continue;
227
+ }
228
+ textCursor.segmentIndex = lineEnd.segmentIndex;
229
+ textCursor.graphemeIndex = lineEnd.graphemeIndex;
230
+ break;
231
+ }
232
+ if (lineWidth === 0)
233
+ return null;
234
+ cursor.itemIndex = itemIndex;
235
+ cursor.segmentIndex = textCursor.segmentIndex;
236
+ cursor.graphemeIndex = textCursor.graphemeIndex;
237
+ return lineWidth;
238
+ }
239
+ export function layoutNextRichInlineLineRange(prepared, maxWidth, start = RICH_INLINE_START_CURSOR) {
240
+ const flow = getInternalPreparedRichInline(prepared);
241
+ const end = {
242
+ itemIndex: start.itemIndex,
243
+ segmentIndex: start.segmentIndex,
244
+ graphemeIndex: start.graphemeIndex,
245
+ };
246
+ const fragments = [];
247
+ const width = stepRichInlineLine(flow, maxWidth, end, (item, gapBefore, occupiedWidth, fragmentStart, fragmentEnd) => {
248
+ fragments.push({
249
+ itemIndex: item.sourceItemIndex,
250
+ gapBefore,
251
+ occupiedWidth,
252
+ start: fragmentStart,
253
+ end: fragmentEnd,
254
+ });
255
+ });
256
+ if (width === null)
257
+ return null;
258
+ return {
259
+ fragments,
260
+ width,
261
+ end,
262
+ };
263
+ }
264
+ function materializeFragmentText(item, fragment) {
265
+ return buildLineTextFromRange(item.prepared, getLineTextCache(item.prepared), fragment.start.segmentIndex, fragment.start.graphemeIndex, fragment.end.segmentIndex, fragment.end.graphemeIndex);
266
+ }
267
+ // Bridge from cheap range walking to full fragment text. Lets callers do
268
+ // shrinkwrap/virtualization/probing work first, then only pay for text on the
269
+ // lines they actually render.
270
+ export function materializeRichInlineLineRange(prepared, line) {
271
+ const flow = getInternalPreparedRichInline(prepared);
272
+ const fragments = [];
273
+ for (let i = 0; i < line.fragments.length; i++) {
274
+ const fragment = line.fragments[i];
275
+ const item = flow.itemsBySourceItemIndex[fragment.itemIndex];
276
+ if (item === undefined)
277
+ throw new Error('Missing rich-text inline item for fragment');
278
+ fragments.push({
279
+ itemIndex: fragment.itemIndex,
280
+ text: materializeFragmentText(item, fragment),
281
+ gapBefore: fragment.gapBefore,
282
+ occupiedWidth: fragment.occupiedWidth,
283
+ start: fragment.start,
284
+ end: fragment.end,
285
+ });
286
+ }
287
+ return {
288
+ fragments,
289
+ width: line.width,
290
+ end: line.end,
291
+ };
292
+ }
293
+ export function walkRichInlineLineRanges(prepared, maxWidth, onLine) {
294
+ let lineCount = 0;
295
+ let cursor = RICH_INLINE_START_CURSOR;
296
+ while (true) {
297
+ const line = layoutNextRichInlineLineRange(prepared, maxWidth, cursor);
298
+ if (line === null)
299
+ return lineCount;
300
+ onLine(line);
301
+ lineCount++;
302
+ cursor = line.end;
303
+ }
304
+ }
305
+ export function measureRichInlineStats(prepared, maxWidth) {
306
+ const flow = getInternalPreparedRichInline(prepared);
307
+ let lineCount = 0;
308
+ let maxLineWidth = 0;
309
+ const cursor = {
310
+ itemIndex: 0,
311
+ segmentIndex: 0,
312
+ graphemeIndex: 0,
313
+ };
314
+ while (true) {
315
+ const lineWidth = stepRichInlineLine(flow, maxWidth, cursor);
316
+ if (lineWidth === null) {
317
+ return {
318
+ lineCount,
319
+ maxLineWidth,
320
+ };
321
+ }
322
+ lineCount++;
323
+ if (lineWidth > maxLineWidth)
324
+ maxLineWidth = lineWidth;
325
+ }
326
+ }
327
+ //# sourceMappingURL=rich-inline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rich-inline.js","sourceRoot":"","sources":["../../../src/vendor/pretext/rich-inline.ts"],"names":[],"mappings":"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"}