postext-pdf 1.8.5 → 1.9.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 (145) hide show
  1. package/README.md +1 -1
  2. package/dist/__tests__/accessibility.test.js +44 -0
  3. package/dist/__tests__/accessibility.test.js.map +1 -1
  4. package/dist/__tests__/chinesePageLabels.test.d.ts +2 -0
  5. package/dist/__tests__/chinesePageLabels.test.d.ts.map +1 -0
  6. package/dist/__tests__/chinesePageLabels.test.js +58 -0
  7. package/dist/__tests__/chinesePageLabels.test.js.map +1 -0
  8. package/dist/__tests__/cjkAnnotations.test.d.ts +2 -0
  9. package/dist/__tests__/cjkAnnotations.test.d.ts.map +1 -0
  10. package/dist/__tests__/cjkAnnotations.test.js +83 -0
  11. package/dist/__tests__/cjkAnnotations.test.js.map +1 -0
  12. package/dist/__tests__/cjkDashRule.test.d.ts +2 -0
  13. package/dist/__tests__/cjkDashRule.test.d.ts.map +1 -0
  14. package/dist/__tests__/cjkDashRule.test.js +101 -0
  15. package/dist/__tests__/cjkDashRule.test.js.map +1 -0
  16. package/dist/__tests__/cjkFontFiles.test.d.ts +2 -0
  17. package/dist/__tests__/cjkFontFiles.test.d.ts.map +1 -0
  18. package/dist/__tests__/cjkFontFiles.test.js +302 -0
  19. package/dist/__tests__/cjkFontFiles.test.js.map +1 -0
  20. package/dist/__tests__/cjkGrid.test.d.ts +2 -0
  21. package/dist/__tests__/cjkGrid.test.d.ts.map +1 -0
  22. package/dist/__tests__/cjkGrid.test.js +57 -0
  23. package/dist/__tests__/cjkGrid.test.js.map +1 -0
  24. package/dist/__tests__/cjkPunctuation.test.d.ts +2 -0
  25. package/dist/__tests__/cjkPunctuation.test.d.ts.map +1 -0
  26. package/dist/__tests__/cjkPunctuation.test.js +143 -0
  27. package/dist/__tests__/cjkPunctuation.test.js.map +1 -0
  28. package/dist/__tests__/cjkTracking.test.d.ts +2 -0
  29. package/dist/__tests__/cjkTracking.test.d.ts.map +1 -0
  30. package/dist/__tests__/cjkTracking.test.js +100 -0
  31. package/dist/__tests__/cjkTracking.test.js.map +1 -0
  32. package/dist/__tests__/documentLanguage.test.js +13 -3
  33. package/dist/__tests__/documentLanguage.test.js.map +1 -1
  34. package/dist/__tests__/fallbackSpaces.test.js +49 -0
  35. package/dist/__tests__/fallbackSpaces.test.js.map +1 -1
  36. package/dist/__tests__/outlineTitles.test.js +87 -0
  37. package/dist/__tests__/outlineTitles.test.js.map +1 -1
  38. package/dist/__tests__/pdfWorker.test.js +17 -0
  39. package/dist/__tests__/pdfWorker.test.js.map +1 -1
  40. package/dist/__tests__/renderOptionsDocs.test.d.ts +2 -0
  41. package/dist/__tests__/renderOptionsDocs.test.d.ts.map +1 -0
  42. package/dist/__tests__/renderOptionsDocs.test.js +32 -0
  43. package/dist/__tests__/renderOptionsDocs.test.js.map +1 -0
  44. package/dist/__tests__/rightBinding.test.d.ts +2 -0
  45. package/dist/__tests__/rightBinding.test.d.ts.map +1 -0
  46. package/dist/__tests__/rightBinding.test.js +112 -0
  47. package/dist/__tests__/rightBinding.test.js.map +1 -0
  48. package/dist/__tests__/verticalDesignImage.test.d.ts +2 -0
  49. package/dist/__tests__/verticalDesignImage.test.d.ts.map +1 -0
  50. package/dist/__tests__/verticalDesignImage.test.js +152 -0
  51. package/dist/__tests__/verticalDesignImage.test.js.map +1 -0
  52. package/dist/__tests__/verticalText.test.d.ts +2 -0
  53. package/dist/__tests__/verticalText.test.d.ts.map +1 -0
  54. package/dist/__tests__/verticalText.test.js +380 -0
  55. package/dist/__tests__/verticalText.test.js.map +1 -0
  56. package/dist/faceFiles.d.ts +70 -0
  57. package/dist/faceFiles.d.ts.map +1 -0
  58. package/dist/faceFiles.js +154 -0
  59. package/dist/faceFiles.js.map +1 -0
  60. package/dist/fontCache.d.ts +101 -7
  61. package/dist/fontCache.d.ts.map +1 -1
  62. package/dist/fontCache.js +178 -26
  63. package/dist/fontCache.js.map +1 -1
  64. package/dist/fontFamilies.d.ts +12 -0
  65. package/dist/fontFamilies.d.ts.map +1 -0
  66. package/dist/fontFamilies.js +12 -0
  67. package/dist/fontFamilies.js.map +1 -0
  68. package/dist/index.d.ts +1 -1
  69. package/dist/index.d.ts.map +1 -1
  70. package/dist/index.js.map +1 -1
  71. package/dist/pdf-backend/annotations.d.ts +29 -0
  72. package/dist/pdf-backend/annotations.d.ts.map +1 -0
  73. package/dist/pdf-backend/annotations.js +133 -0
  74. package/dist/pdf-backend/annotations.js.map +1 -0
  75. package/dist/pdf-backend/blockRender.d.ts.map +1 -1
  76. package/dist/pdf-backend/blockRender.js +160 -30
  77. package/dist/pdf-backend/blockRender.js.map +1 -1
  78. package/dist/pdf-backend/fallbackSpaces.d.ts +21 -2
  79. package/dist/pdf-backend/fallbackSpaces.d.ts.map +1 -1
  80. package/dist/pdf-backend/fallbackSpaces.js +43 -6
  81. package/dist/pdf-backend/fallbackSpaces.js.map +1 -1
  82. package/dist/pdf-backend/fontHelpers.d.ts +12 -0
  83. package/dist/pdf-backend/fontHelpers.d.ts.map +1 -1
  84. package/dist/pdf-backend/fontHelpers.js +49 -11
  85. package/dist/pdf-backend/fontHelpers.js.map +1 -1
  86. package/dist/pdf-backend/headerFooter.d.ts +8 -3
  87. package/dist/pdf-backend/headerFooter.d.ts.map +1 -1
  88. package/dist/pdf-backend/headerFooter.js +74 -16
  89. package/dist/pdf-backend/headerFooter.js.map +1 -1
  90. package/dist/pdf-backend/index.d.ts +74 -8
  91. package/dist/pdf-backend/index.d.ts.map +1 -1
  92. package/dist/pdf-backend/index.js +121 -25
  93. package/dist/pdf-backend/index.js.map +1 -1
  94. package/dist/pdf-backend/inkScale.d.ts +12 -0
  95. package/dist/pdf-backend/inkScale.d.ts.map +1 -0
  96. package/dist/pdf-backend/inkScale.js +16 -0
  97. package/dist/pdf-backend/inkScale.js.map +1 -0
  98. package/dist/pdf-backend/outlines.d.ts +12 -1
  99. package/dist/pdf-backend/outlines.d.ts.map +1 -1
  100. package/dist/pdf-backend/outlines.js +46 -16
  101. package/dist/pdf-backend/outlines.js.map +1 -1
  102. package/dist/pdf-backend/pageDecorations.d.ts +5 -1
  103. package/dist/pdf-backend/pageDecorations.d.ts.map +1 -1
  104. package/dist/pdf-backend/pageDecorations.js +22 -1
  105. package/dist/pdf-backend/pageDecorations.js.map +1 -1
  106. package/dist/pdf-backend/pageLabels.d.ts +3 -1
  107. package/dist/pdf-backend/pageLabels.d.ts.map +1 -1
  108. package/dist/pdf-backend/pageLabels.js +12 -6
  109. package/dist/pdf-backend/pageLabels.js.map +1 -1
  110. package/dist/pdf-backend/primitives.d.ts +153 -6
  111. package/dist/pdf-backend/primitives.d.ts.map +1 -1
  112. package/dist/pdf-backend/primitives.js +269 -28
  113. package/dist/pdf-backend/primitives.js.map +1 -1
  114. package/dist/pdf-backend/renderResourceBlock.d.ts +4 -0
  115. package/dist/pdf-backend/renderResourceBlock.d.ts.map +1 -1
  116. package/dist/pdf-backend/renderResourceBlock.js +105 -26
  117. package/dist/pdf-backend/renderResourceBlock.js.map +1 -1
  118. package/dist/pdf-backend/structureFlow.d.ts +5 -0
  119. package/dist/pdf-backend/structureFlow.d.ts.map +1 -1
  120. package/dist/pdf-backend/structureFlow.js +8 -0
  121. package/dist/pdf-backend/structureFlow.js.map +1 -1
  122. package/dist/pdf-backend/svgVector.d.ts.map +1 -1
  123. package/dist/pdf-backend/svgVector.js +13 -2
  124. package/dist/pdf-backend/svgVector.js.map +1 -1
  125. package/dist/pdf-backend/tagging.d.ts +8 -1
  126. package/dist/pdf-backend/tagging.d.ts.map +1 -1
  127. package/dist/pdf-backend/tagging.js +7 -1
  128. package/dist/pdf-backend/tagging.js.map +1 -1
  129. package/dist/pdf-backend/verticalText.d.ts +43 -0
  130. package/dist/pdf-backend/verticalText.d.ts.map +1 -0
  131. package/dist/pdf-backend/verticalText.js +284 -0
  132. package/dist/pdf-backend/verticalText.js.map +1 -0
  133. package/dist/verticalFonts.d.ts +75 -0
  134. package/dist/verticalFonts.d.ts.map +1 -0
  135. package/dist/verticalFonts.js +136 -0
  136. package/dist/verticalFonts.js.map +1 -0
  137. package/dist/worker/client.d.ts +1 -1
  138. package/dist/worker/client.d.ts.map +1 -1
  139. package/dist/worker/client.js +7 -5
  140. package/dist/worker/client.js.map +1 -1
  141. package/dist/worker/pdf.worker.js +8 -4
  142. package/dist/worker/pdf.worker.js.map +1 -1
  143. package/dist/worker/protocol.d.ts +10 -5
  144. package/dist/worker/protocol.d.ts.map +1 -1
  145. package/package.json +3 -3
@@ -1,12 +1,15 @@
1
- import { popGraphicsState, pushGraphicsState, setCharacterSpacing } from 'pdf-lib';
1
+ import { popGraphicsState, pushGraphicsState } from 'pdf-lib';
2
+ import { segmentOrientation } from 'postext';
2
3
  import { parseFontString } from '../fontString';
3
- import { alphaOf, alphaStateOp, drawLinePx, drawMeasuredTextPx, drawSwatchPx, drawTextPx, colorFromHex } from './primitives';
4
+ import { alphaOf, alphaStateOp, beginActualTextSpan, cjkLineText, compressedMarkSpacingPx, drawLinePx, drawMeasuredTextPx, drawSwatchPx, drawTextPx, colorFromHex, endActualTextSpan, setTrackingPx } from './primitives';
4
5
  import { paintChip } from './chip';
5
6
  import { pickSegmentColor, pickSegmentFont } from './fontHelpers';
6
7
  import { renderHeaderFooterSlot } from './headerFooter';
7
8
  import { renderResourceBlock, } from './renderResourceBlock';
8
9
  import { RefRun, UriRuns } from './links';
9
10
  import { tagArtifact, tagContent } from './tagging';
11
+ import { paintLineMarks, paintRuby, paintWarichu } from './annotations';
12
+ import { inkScaleOperators } from './inkScale';
10
13
  /** The link destination of a footnote of the document being drawn
11
14
  * (`LinkRegistry.documentIndex`: note ids repeat from chapter to chapter).
12
15
  * A key no resource id takes: it opens with a NUL. */
@@ -43,6 +46,40 @@ function renderMathSegment(ctx, seg, xPx, baselinePx, fallbackColor) {
43
46
  return;
44
47
  renderMathRender(ctx, seg.mathRender, xPx, baselinePx - seg.mathRender.ascentPx, fallbackColor);
45
48
  }
49
+ /**
50
+ * The text of a segment of a composed line (see {@link renderSegments}):
51
+ * a compressed CJK mark painted before its box (`inkOffset`) with the
52
+ * character spacing that advances it to its box's end, a segment's own
53
+ * tracking, a dash of a 破折号 stretched over its em (`inkScale`), the
54
+ * orientation forced down a vertical line, and a ruby base's reading.
55
+ */
56
+ function paintComposedText(ctx, seg, x, baseline, font, size, color, colorHex, actualText, tracking, fontCache, blockFont, rubyElem) {
57
+ // A compressed CJK mark is painted before its box (`inkOffset`) and
58
+ // advances to its box's end.
59
+ // (Down a vertical line every cell is one em: no mark shown narrower.)
60
+ const markSpacing = ctx.vertical ? undefined : compressedMarkSpacingPx(font, seg, size);
61
+ if (markSpacing !== undefined)
62
+ setTrackingPx(ctx, markSpacing);
63
+ else if (seg.tracking !== undefined)
64
+ setTrackingPx(ctx, tracking + seg.tracking);
65
+ // A dash of a 破折号 is stretched over its em (`inkScale`); down a
66
+ // vertical line it is shown turned with the frame (sideways), so the
67
+ // stretch runs down the column.
68
+ const stretch = inkScaleOperators(seg.inkScale);
69
+ const orient = ctx.vertical && seg.inkScale !== undefined ? 'sideways' : segmentOrientation(seg);
70
+ ctx.page.pushOperators(...stretch.before);
71
+ drawTextPx(ctx, seg.text, x + (seg.inkOffset ?? 0), baseline + (seg.baselineShift ?? 0), font, size, color, undefined, actualText, orient);
72
+ ctx.page.pushOperators(...stretch.after);
73
+ if (markSpacing !== undefined || seg.tracking !== undefined)
74
+ setTrackingPx(ctx, tracking);
75
+ if (seg.ruby) {
76
+ if (tracking !== 0)
77
+ setTrackingPx(ctx, 0);
78
+ paintRuby(ctx, seg.ruby, x, baseline, colorHex, fontCache, blockFont, rubyElem);
79
+ if (tracking !== 0)
80
+ setTrackingPx(ctx, tracking);
81
+ }
82
+ }
46
83
  /**
47
84
  * Paint a line's segments left to right starting at `startX`. When
48
85
  * `justifiedSpaceWidth` is set, spaces advance by it instead of their
@@ -55,12 +92,41 @@ function renderMathSegment(ctx, seg, xPx, baselinePx, fallbackColor) {
55
92
  * never has to infer them from the gaps of a justified line. A ref painted
56
93
  * as several runs (small capitals; the later runs flagged `refContinues`)
57
94
  * is still one `Link` element with one annotation over all its runs.
95
+ *
96
+ * A line of the CJK composer and any line down a vertical page (`composed`)
97
+ * read the composer's fields — a segment's `tracking`, `inkOffset`,
98
+ * `inkScale`, `autospace`, `ruby` and `warichu` — and are read as one
99
+ * `/ActualText`. Any other line was set word by word and carries none of
100
+ * them: its segments are painted as every line was before the CJK
101
+ * features, with no further look at each one.
58
102
  */
59
- function renderSegments(ctx, segments, startX, baseline, line, block, blockFont, blockSize, blockColor, fontCache, linkRegistry, elem, justifiedSpaceWidth) {
103
+ function renderSegments(ctx, segments, startX, baseline, line, block, blockFont, blockSize, blockColor, fontCache, linkRegistry, elem, justifiedSpaceWidth,
104
+ /** The character spacing the line is painted with (block + line, px);
105
+ * a segment's own tracking (a justified CJK line) goes on top of it. */
106
+ tracking = 0) {
60
107
  let x = startX;
61
108
  const refRun = new RefRun();
62
109
  const uris = new UriRuns(ctx, line, linkRegistry, elem);
63
110
  const repeatedAt = repeatedHyphenSegment(line, segments);
111
+ const composed = line.cjkComposed === true || ctx.vertical !== undefined;
112
+ // A composed CJK line (spread characters, Han–Latin spaces) reads as
113
+ // written, not with the gaps between its pieces.
114
+ // A vertical line is painted in runs and cells down the column: it reads
115
+ // as the line too.
116
+ const actualLine = !composed ? undefined : ctx.vertical ? segments.map((s) => s.text).join('') : cjkLineText(segments);
117
+ let lineState;
118
+ if (actualLine !== undefined) {
119
+ const first = segments.find((s) => s.kind === 'text' && !s.chip && s.text !== '');
120
+ const fontStr = first ? first.fontString ?? pickSegmentFont(!!first.bold, !!first.italic, block) : block.fontString;
121
+ lineState = {
122
+ font: fontCache.get(fontStr) ?? blockFont,
123
+ text: first?.text ?? '',
124
+ sizePx: parseFontString(fontStr)?.sizePx ?? blockSize,
125
+ xPx: startX,
126
+ baselinePx: baseline,
127
+ };
128
+ beginActualTextSpan(ctx, actualLine, lineState);
129
+ }
64
130
  for (let i = 0; i < segments.length; i++) {
65
131
  const seg = segments[i];
66
132
  if (seg.kind === 'space') {
@@ -69,7 +135,8 @@ function renderSegments(ctx, segments, startX, baseline, line, block, blockFont,
69
135
  tagContent(ctx, inLink ?? elem);
70
136
  drawTextPx(ctx, seg.text, x, baseline, blockFont, blockSize, blockColor);
71
137
  }
72
- x += justifiedSpaceWidth ?? seg.width;
138
+ // A Han–Latin space keeps the width the composer set.
139
+ x += composed && seg.autospace ? seg.width : justifiedSpaceWidth ?? seg.width;
73
140
  continue;
74
141
  }
75
142
  if (seg.kind !== 'text' || seg.chip)
@@ -97,6 +164,17 @@ function renderSegments(ctx, segments, startX, baseline, line, block, blockFont,
97
164
  x += seg.width;
98
165
  continue;
99
166
  }
167
+ if (composed && seg.warichu) {
168
+ // A warichu note's part: its two rows, not its text (#195), with no
169
+ // character spacing.
170
+ if (tracking !== 0)
171
+ setTrackingPx(ctx, 0);
172
+ paintWarichu(ctx, seg.warichu, x, baseline, pickSegmentColor(!!seg.bold, !!seg.italic, block), fontCache, blockFont, elem);
173
+ if (tracking !== 0)
174
+ setTrackingPx(ctx, tracking);
175
+ x += seg.width;
176
+ continue;
177
+ }
100
178
  const fontStr = seg.fontString ?? pickSegmentFont(!!seg.bold, !!seg.italic, block);
101
179
  const font = fontCache.get(fontStr) ?? blockFont;
102
180
  const size = parseFontString(fontStr)?.sizePx ?? blockSize;
@@ -113,13 +191,19 @@ function renderSegments(ctx, segments, startX, baseline, line, block, blockFont,
113
191
  const link = refRun.enter(seg, x, elem, target);
114
192
  // A page number of the index links to its page.
115
193
  const pageElem = seg.pageLink !== undefined && elem && !link ? elem.child('Link') : undefined;
116
- tagContent(ctx, link ?? pageElem ?? uriElem ?? elem);
194
+ // A ruby base is the `RB` of a `Ruby` whose `RT` holds its reading (#194).
195
+ const holder = link ?? pageElem ?? uriElem ?? elem;
196
+ const rubyElem = composed && seg.ruby && holder ? holder.child('Ruby') : undefined;
197
+ tagContent(ctx, rubyElem ? rubyElem.child('RB') : holder);
117
198
  // The hyphen repeated from the line before is painted but not read.
118
199
  const actualText = i === repeatedAt ? seg.text.slice(1) : undefined;
119
- drawTextPx(ctx, seg.text, x, baseline + (seg.baselineShift ?? 0), font, size, color, undefined, actualText);
200
+ if (!composed)
201
+ drawTextPx(ctx, seg.text, x, baseline + (seg.baselineShift ?? 0), font, size, color, undefined, actualText);
202
+ else
203
+ paintComposedText(ctx, seg, x, baseline, font, size, color, colorHex, actualText, tracking, fontCache, blockFont, rubyElem);
120
204
  if (seg.pageLink !== undefined && linkRegistry) {
121
205
  const { scale, pageHeightPt } = ctx;
122
- linkRegistry.addPageLink(ctx.page, [x * scale, pageHeightPt - (line.bbox.y + line.bbox.height) * scale, (x + seg.width) * scale, pageHeightPt - line.bbox.y * scale], seg.pageLink, pageElem ? { elem: pageElem, contents: seg.text } : undefined);
206
+ linkRegistry.addPageLink(ctx.page, sheetRect(ctx, [x * scale, pageHeightPt - (line.bbox.y + line.bbox.height) * scale, (x + seg.width) * scale, pageHeightPt - line.bbox.y * scale]), seg.pageLink, pageElem ? { elem: pageElem, contents: seg.text } : undefined);
123
207
  }
124
208
  const ref = refRun.leave(seg, segments[i + 1], target);
125
209
  if (ref && linkRegistry) {
@@ -128,11 +212,13 @@ function renderSegments(ctx, segments, startX, baseline, line, block, blockFont,
128
212
  const x2 = (x + seg.width) * scale;
129
213
  const y2 = pageHeightPt - line.bbox.y * scale;
130
214
  const y1 = pageHeightPt - (line.bbox.y + line.bbox.height) * scale;
131
- linkRegistry.addLink(ctx.page, [x1, y1, x2, y2], ref.resourceId, link ? { elem: link, contents: ref.text } : undefined);
215
+ linkRegistry.addLink(ctx.page, sheetRect(ctx, [x1, y1, x2, y2]), ref.resourceId, link ? { elem: link, contents: ref.text } : undefined);
132
216
  }
133
217
  x += seg.width;
134
218
  }
135
219
  uris.end();
220
+ if (lineState)
221
+ endActualTextSpan(ctx, lineState);
136
222
  }
137
223
  /** Tracking: the block (column balancing; negative for a runt set short)
138
224
  * and the line (justification tracking) were measured with extra advance
@@ -141,10 +227,10 @@ function renderSegments(ctx, segments, startX, baseline, line, block, blockFont,
141
227
  function renderLine(ctx, line, block, columnWidth, columnX, fontCache, linkRegistry, elem) {
142
228
  const tracking = (block.letterSpacing ?? 0) + (line.letterSpacing ?? 0);
143
229
  if (tracking !== 0)
144
- ctx.page.pushOperators(setCharacterSpacing(tracking * ctx.scale));
230
+ setTrackingPx(ctx, tracking);
145
231
  renderLineText(ctx, line, block, columnWidth, columnX, fontCache, linkRegistry, elem, tracking, trailingTracking(line, tracking));
146
232
  if (tracking !== 0)
147
- ctx.page.pushOperators(setCharacterSpacing(0));
233
+ setTrackingPx(ctx, 0);
148
234
  }
149
235
  /** The tracking a line's measured width carries after its last glyph:
150
236
  * `tracking` when the line ends on text, else 0. It is advance, not ink,
@@ -155,7 +241,11 @@ function trailingTracking(line, tracking) {
155
241
  return 0;
156
242
  const segments = line.segments;
157
243
  if (segments && segments.length > 0) {
158
- const last = segments[segments.length - 1];
244
+ let i = segments.length - 1;
245
+ // A mark hung past the line's end is outside it (CJK only).
246
+ while (i > 0 && segments[i].hangs)
247
+ i--;
248
+ const last = segments[i];
159
249
  return last.kind === 'text' && last.text.length > 0 ? tracking : 0;
160
250
  }
161
251
  return /\S$/.test(line.text) ? tracking : 0;
@@ -169,6 +259,9 @@ function renderLineText(ctx, line, block, columnWidth, columnX, fontCache, linkR
169
259
  const lineIndent = line.bbox.x - columnX;
170
260
  const effectiveWidth = columnWidth - lineIndent;
171
261
  const segments = line.segments;
262
+ // Only a line of the CJK composer (or down a vertical page) has hung
263
+ // marks and Han–Latin spaces (see `renderSegments`).
264
+ const composed = line.cjkComposed === true || ctx.vertical !== undefined;
172
265
  // Last lines render ragged at natural width — except when overfull:
173
266
  // Knuth-Plass may accept a final line wider than the measure on the
174
267
  // assumption that its inter-word glue shrinks (TeX glue-setting semantics),
@@ -178,7 +271,11 @@ function renderLineText(ctx, line, block, columnWidth, columnX, fontCache, linkR
178
271
  let naturalWidth = 0;
179
272
  let spaceCount = 0;
180
273
  for (const seg of segments) {
181
- if (seg.kind === 'space')
274
+ // A hung mark is outside the measure; a Han–Latin space keeps its
275
+ // width.
276
+ if (composed && seg.hangs)
277
+ continue;
278
+ if (seg.kind === 'space' && !(composed && seg.autospace))
182
279
  spaceCount++;
183
280
  else
184
281
  wordWidth += seg.width;
@@ -186,25 +283,27 @@ function renderLineText(ctx, line, block, columnWidth, columnX, fontCache, linkR
186
283
  }
187
284
  if (spaceCount > 0 && ((!line.isLastLine && !line.ragged) || naturalWidth > effectiveWidth)) {
188
285
  const justifiedSpaceWidth = (effectiveWidth - wordWidth) / spaceCount;
189
- renderSegments(ctx, segments, line.bbox.x, line.baseline, line, block, blockFont, blockSize, blockColor, fontCache, linkRegistry, elem, justifiedSpaceWidth);
286
+ renderSegments(ctx, segments, line.bbox.x, line.baseline, line, block, blockFont, blockSize, blockColor, fontCache, linkRegistry, elem, justifiedSpaceWidth, tracking);
190
287
  return;
191
288
  }
192
289
  }
193
290
  if ((block.textAlign === 'center' || block.textAlign === 'right') && segments) {
291
+ // Hung marks stay out of the alignment, as trailing tracking does.
194
292
  let contentWidth = 0;
195
293
  for (const seg of segments)
196
- contentWidth += seg.width;
294
+ if (!(composed && seg.hangs))
295
+ contentWidth += seg.width;
197
296
  const slack = Math.max(0, effectiveWidth - (contentWidth - trailing));
198
297
  const startX = line.bbox.x + (block.textAlign === 'center' ? slack / 2 : slack);
199
- renderSegments(ctx, segments, startX, line.baseline, line, block, blockFont, blockSize, blockColor, fontCache, linkRegistry, elem);
298
+ renderSegments(ctx, segments, startX, line.baseline, line, block, blockFont, blockSize, blockColor, fontCache, linkRegistry, elem, undefined, tracking);
200
299
  return;
201
300
  }
202
301
  // Ragged (left-aligned) rendering — also used for last lines of justified
203
302
  // blocks. Segments are needed when any of them styles differently from the
204
303
  // block (bold/italic/math/ref/own font or colour); otherwise one text
205
304
  // object paints the line.
206
- if (segments && segments.some((s) => s.bold || s.italic || s.kind === 'math' || s.kind === 'swatch' || s.kind === 'chip' || s.refResourceId !== undefined || s.href !== undefined || s.pageLink !== undefined || s.fontString !== undefined || s.color !== undefined || s.baselineShift !== undefined)) {
207
- renderSegments(ctx, segments, line.bbox.x, line.baseline, line, block, blockFont, blockSize, blockColor, fontCache, linkRegistry, elem);
305
+ if (segments && segments.some(composed ? composedSegmentIsStyled : segmentIsStyled)) {
306
+ renderSegments(ctx, segments, line.bbox.x, line.baseline, line, block, blockFont, blockSize, blockColor, fontCache, linkRegistry, elem, undefined, tracking);
208
307
  return;
209
308
  }
210
309
  tagContent(ctx, elem);
@@ -221,6 +320,18 @@ function renderLineText(ctx, line, block, columnWidth, columnX, fontCache, linkR
221
320
  return;
222
321
  drawTextPx(ctx, line.text, plainX, line.baseline, blockFont, blockSize, blockColor, undefined, actualText);
223
322
  }
323
+ /** Whether a segment of a line set word by word paints differently from
324
+ * the block's plain text, or is linked; an orientation mark (`:tcy`,
325
+ * `:upright`, `:sideways`) keeps its segment apart. */
326
+ function segmentIsStyled(s) {
327
+ return s.bold || s.italic || s.kind === 'math' || s.kind === 'swatch' || s.kind === 'chip' || s.refResourceId !== undefined || s.href !== undefined || s.pageLink !== undefined || s.fontString !== undefined || s.color !== undefined || s.baselineShift !== undefined
328
+ || s.tcy !== undefined || s.orientation !== undefined;
329
+ }
330
+ /** {@link segmentIsStyled} for a line of the CJK composer or one down a
331
+ * vertical page, whose segments may carry the composer's fields. */
332
+ function composedSegmentIsStyled(s) {
333
+ return segmentIsStyled(s) || s.tracking !== undefined || s.inkOffset !== undefined || s.hangs !== undefined || s.autospace !== undefined || s.ruby !== undefined || s.warichu !== undefined;
334
+ }
224
335
  /**
225
336
  * The index of the segment that opens with the hyphen repeated from the line
226
337
  * before (`VDTLine.repeatedHyphen`, "vencer-" | "-se"), or -1. The PDF paints
@@ -292,16 +403,21 @@ function renderBullet(ctx, block, fontCache, elem) {
292
403
  const midY = block.bulletY ?? firstLine.baseline;
293
404
  const baselinePx = onBaseline ? baselineY : midY + size * 0.3;
294
405
  tagContent(ctx, elem);
406
+ // Ordered-list separator styled apart from the number (own font/colour),
407
+ // with the prefix run before the number in the same style: drawn in
408
+ // reading order, prefix, number, separator, so text extraction reads
409
+ // (一) and not 一)(.
410
+ const sepFontString = block.separatorText && block.separatorX !== undefined ? block.separatorFontString ?? block.bulletFontString : undefined;
411
+ const sepFont = sepFontString !== undefined ? fontCache.get(sepFontString) : undefined;
412
+ const sepSize = sepFontString !== undefined ? parseFontString(sepFontString)?.sizePx ?? size : size;
413
+ const sepColor = colorFromHex(block.separatorColor ?? colorHex, ctx.colorSpace);
414
+ const sepY = onBaseline ? baselineY : midY + sepSize * 0.3;
415
+ if (sepFont && block.prefixText && block.prefixX !== undefined) {
416
+ drawTextPx(ctx, block.prefixText, block.prefixX, sepY, sepFont, sepSize, sepColor);
417
+ }
295
418
  drawTextPx(ctx, block.bulletText, block.bulletOffsetX, baselinePx, font, size, color);
296
- // Ordered-list separator styled apart from the number (own font/colour).
297
- if (block.separatorText && block.separatorX !== undefined) {
298
- const sepFontString = block.separatorFontString ?? block.bulletFontString;
299
- const sepFont = fontCache.get(sepFontString);
300
- if (!sepFont)
301
- return;
302
- const sepSize = parseFontString(sepFontString)?.sizePx ?? size;
303
- const sepColor = colorFromHex(block.separatorColor ?? colorHex, ctx.colorSpace);
304
- drawTextPx(ctx, block.separatorText, block.separatorX, onBaseline ? baselineY : midY + sepSize * 0.3, sepFont, sepSize, sepColor);
419
+ if (sepFont && block.separatorText && block.separatorX !== undefined) {
420
+ drawTextPx(ctx, block.separatorText, block.separatorX, sepY, sepFont, sepSize, sepColor);
305
421
  }
306
422
  }
307
423
  function renderStrikethrough(ctx, block) {
@@ -315,11 +431,18 @@ function renderStrikethrough(ctx, block) {
315
431
  drawLinePx(ctx, line.bbox.x, y, line.bbox.x + line.bbox.width, y, color, thickness);
316
432
  }
317
433
  }
318
- /** Annotation rectangle of a block's box, in PDF points. */
434
+ /** A rect of the page's frame in PDF points, on the sheet: through the
435
+ * flow frame of a vertical page (`PageCtx.mapRectPt`), as it is on any
436
+ * other. Annotation rects and destinations live outside the content
437
+ * stream, so the frame's `cm` does not reach them. */
438
+ function sheetRect(ctx, rect) {
439
+ return ctx.mapRectPt ? ctx.mapRectPt(rect) : rect;
440
+ }
441
+ /** Annotation rectangle of a block's box, in PDF points, on the sheet. */
319
442
  function rectOfBlock(ctx, block) {
320
443
  const { scale, pageHeightPt } = ctx;
321
444
  const { x, y, width, height } = block.bbox;
322
- return [x * scale, pageHeightPt - (y + height) * scale, (x + width) * scale, pageHeightPt - y * scale];
445
+ return sheetRect(ctx, [x * scale, pageHeightPt - (y + height) * scale, (x + width) * scale, pageHeightPt - y * scale]);
323
446
  }
324
447
  export function renderBlock(ctx, block, columnWidth, columnX, fontCache, resourceCtx) {
325
448
  if (block.hidden)
@@ -336,7 +459,9 @@ export function renderBlock(ctx, block, columnWidth, columnX, fontCache, resourc
336
459
  const textElem = structure
337
460
  ? () => link ?? (targetPage !== undefined ? (link = structure.blockElem(block).child('Link')) : structure.blockElem(block))
338
461
  : undefined;
339
- renderHeaderFooterSlot(ctx, block.designOverlay, fontCache, resourceCtx?.images, textElem ? { text: textElem, artifact: { type: 'Layout' } } : undefined);
462
+ renderHeaderFooterSlot(ctx, block.designOverlay, fontCache, resourceCtx?.images, textElem && structure
463
+ ? { text: textElem, artifact: { type: 'Layout' }, figure: (alt, attributes, after) => structure.designFigure(alt, attributes, after) }
464
+ : undefined);
340
465
  if (targetPage !== undefined && linkRegistry) {
341
466
  const contents = block.tocPart ? `${block.tocPart.number} ${block.tocPart.title}`.trim() : block.lines.map((l) => l.text).join(' ');
342
467
  linkRegistry.addPageLink(ctx.page, rectOfBlock(ctx, block), targetPage, link ? { elem: link, contents } : undefined);
@@ -355,7 +480,9 @@ export function renderBlock(ctx, block, columnWidth, columnX, fontCache, resourc
355
480
  }
356
481
  // A note is where its markers link to.
357
482
  if (block.footnoteNote !== undefined && linkRegistry) {
358
- linkRegistry.addDestination(footnoteDestination(linkRegistry, block.footnoteNote), ctx.page, block.bbox.x * ctx.scale, ctx.pageHeightPt - block.bbox.y * ctx.scale);
483
+ // The top left of the note's box on the sheet.
484
+ const [left, , , top] = rectOfBlock(ctx, block);
485
+ linkRegistry.addDestination(footnoteDestination(linkRegistry, block.footnoteNote), ctx.page, left, top);
359
486
  }
360
487
  // Justify against the block's own measure (see the canvas backend): blocks
361
488
  // inside callouts are narrower than their column.
@@ -363,6 +490,9 @@ export function renderBlock(ctx, block, columnWidth, columnX, fontCache, resourc
363
490
  void columnX;
364
491
  for (const line of block.lines) {
365
492
  renderLine(ctx, line, block, block.bbox.width, block.bbox.x, fontCache, linkRegistry, elem);
493
+ // Emphasis dots, proper-name and book-title lines (#193).
494
+ if (line.marks)
495
+ paintLineMarks(ctx, line, colorFromHex(block.color, ctx.colorSpace));
366
496
  }
367
497
  if (targetPage !== undefined && linkRegistry) {
368
498
  const contents = block.lines.map((l) => l.text).join(' ');
@@ -1 +1 @@
1
- {"version":3,"file":"blockRender.js","sourceRoot":"","sources":["../../src/pdf-backend/blockRender.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"blockRender.js","sourceRoot":"","sources":["../../src/pdf-backend/blockRender.ts"],"names":[],"mappings":"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"}
@@ -10,7 +10,25 @@
10
10
  * draws glyph 0, the notdef box, at its own width — a visible box one em wide
11
11
  * in some faces, which also pushes the rest of the word. The PDF backend
12
12
  * paints them as the canvas did: {@link fallbackPieces} tells it where.
13
+ *
14
+ * The same goes for the non-breaking hyphen: HarfBuzz sets U+2011 with the
15
+ * face's U+2010 when the face lacks it, and the browser takes a hyphen from
16
+ * another font when it lacks both. Open Sans and Outfit have neither in
17
+ * their `latin` files; the PDF draws the face's own hyphen instead of a
18
+ * box ({@link substituteGlyph}).
13
19
  */
20
+ /** Unicode's Default_Ignorable_Code_Point, as HarfBuzz and fontkit list it. */
21
+ export declare function isDefaultIgnorable(cp: number): boolean;
22
+ /** The character whose glyph stands in for `cp` in a face that has no
23
+ * glyph for it (see {@link GLYPH_SUBSTITUTES}); undefined when the face
24
+ * has the glyph, or `cp` has no stand-in the face holds. */
25
+ export declare function substituteGlyph(face: {
26
+ hasGlyphForCodePoint(codePoint: number): boolean;
27
+ }, cp: number): number | undefined;
28
+ /** Whether {@link fallbackPieces} paints `cp` without the face's glyph for
29
+ * it: a space set from the face's space glyph, or a default-ignorable
30
+ * character left out. A face lacking one of these is not missing it. */
31
+ export declare function isFallbackHandled(cp: number): boolean;
14
32
  /** The fontkit face of an embedded font, as far as the fallbacks need it. */
15
33
  export interface FallbackFace {
16
34
  unitsPerEm: number;
@@ -30,8 +48,9 @@ export type TextPiece = {
30
48
  * `text` split for painting with `face`: runs of text to shape as they are,
31
49
  * and between them the spaces the face has no glyph for, each with the
32
50
  * advance the browser's shaper would give it; invisible characters are
33
- * dropped (see {@link ALWAYS_HIDDEN}). Undefined when the text needs none of
34
- * this, which is the common case.
51
+ * dropped (see {@link ALWAYS_HIDDEN}), and a hyphen the face lacks is set
52
+ * as its stand-in ({@link substituteGlyph}). Undefined when the text needs
53
+ * none of this, which is the common case.
35
54
  */
36
55
  export declare function fallbackPieces(face: FallbackFace, text: string): TextPiece[] | undefined;
37
56
  //# sourceMappingURL=fallbackSpaces.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fallbackSpaces.d.ts","sourceRoot":"","sources":["../../src/pdf-backend/fallbackSpaces.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAsDH,6EAA6E;AAC7E,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;IACjD,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;CAChE;AAED;0DAC0D;AAC1D,MAAM,MAAM,SAAS,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAyB7D;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,SAAS,CAyBxF"}
1
+ {"version":3,"file":"fallbackSpaces.d.ts","sourceRoot":"","sources":["../../src/pdf-backend/fallbackSpaces.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAkCH,+EAA+E;AAC/E,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAatD;AAWD;;6DAE6D;AAC7D,wBAAgB,eAAe,CAAC,IAAI,EAAE;IAAE,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAI1H;AAED;;yEAEyE;AACzE,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAErD;AAOD,6EAA6E;AAC7E,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;IACjD,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;CAChE;AAED;0DAC0D;AAC1D,MAAM,MAAM,SAAS,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAyB7D;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,SAAS,CA+BxF"}
@@ -10,6 +10,12 @@
10
10
  * draws glyph 0, the notdef box, at its own width — a visible box one em wide
11
11
  * in some faces, which also pushes the rest of the word. The PDF backend
12
12
  * paints them as the canvas did: {@link fallbackPieces} tells it where.
13
+ *
14
+ * The same goes for the non-breaking hyphen: HarfBuzz sets U+2011 with the
15
+ * face's U+2010 when the face lacks it, and the browser takes a hyphen from
16
+ * another font when it lacks both. Open Sans and Outfit have neither in
17
+ * their `latin` files; the PDF draws the face's own hyphen instead of a
18
+ * box ({@link substituteGlyph}).
13
19
  */
14
20
  /** The Unicode spaces HarfBuzz sets from the space glyph (`space_fallback_type`). */
15
21
  const FALLBACK_SPACES = new Map([
@@ -37,7 +43,7 @@ const FALLBACK_SPACES = new Map([
37
43
  * when the face has no glyph for them. */
38
44
  const ALWAYS_HIDDEN = new Set([0x00ad, 0x200b, 0x2060, 0xfeff]);
39
45
  /** Unicode's Default_Ignorable_Code_Point, as HarfBuzz and fontkit list it. */
40
- function isDefaultIgnorable(cp) {
46
+ export function isDefaultIgnorable(cp) {
41
47
  if (cp < 0x10000) {
42
48
  return cp === 0x00ad || cp === 0x034f || cp === 0x061c
43
49
  || (cp >= 0x17b4 && cp <= 0x17b5)
@@ -51,9 +57,33 @@ function isDefaultIgnorable(cp) {
51
57
  }
52
58
  return (cp >= 0x1bca0 && cp <= 0x1bca3) || (cp >= 0x1d173 && cp <= 0x1d17a) || (cp >= 0xe0000 && cp <= 0xe0fff);
53
59
  }
54
- /** Quick test for a character {@link fallbackPieces} may have to handle:
55
- * most text holds none, and skips the per-character walk. */
56
- const CANDIDATE_RE = /[ ­͏؜឴឵᠋-᠎ -‏‪-  - ︀-️￰-￸\uD82F\uD834\uDB40-\uDB43]/;
60
+ /** Characters drawn with another glyph of the face when it has none of
61
+ * their own, in the order the stand-ins are tried: the non-breaking hyphen
62
+ * as the hyphen (HarfBuzz's own fallback), then as the hyphen-minus, whose
63
+ * glyph is the hyphen in Latin faces; the hyphen as the hyphen-minus. */
64
+ const GLYPH_SUBSTITUTES = new Map([
65
+ [0x2011, [0x2010, 0x002d]],
66
+ [0x2010, [0x002d]],
67
+ ]);
68
+ /** The character whose glyph stands in for `cp` in a face that has no
69
+ * glyph for it (see {@link GLYPH_SUBSTITUTES}); undefined when the face
70
+ * has the glyph, or `cp` has no stand-in the face holds. */
71
+ export function substituteGlyph(face, cp) {
72
+ const options = GLYPH_SUBSTITUTES.get(cp);
73
+ if (!options || face.hasGlyphForCodePoint(cp))
74
+ return undefined;
75
+ return options.find((alt) => face.hasGlyphForCodePoint(alt));
76
+ }
77
+ /** Whether {@link fallbackPieces} paints `cp` without the face's glyph for
78
+ * it: a space set from the face's space glyph, or a default-ignorable
79
+ * character left out. A face lacking one of these is not missing it. */
80
+ export function isFallbackHandled(cp) {
81
+ return FALLBACK_SPACES.has(cp) || isDefaultIgnorable(cp);
82
+ }
83
+ /** Quick test for a character {@link fallbackPieces} may have to handle
84
+ * (the spaces, the invisible characters, the two hyphens): most text holds
85
+ * none, and skips the per-character walk. */
86
+ const CANDIDATE_RE = /[\u2010\u2011 ­͏؜឴឵᠋-᠎ -‏‪-  - ︀-️￰-￸\uD82F\uD834\uDB40-\uDB43]/;
57
87
  function spaceAdvance(face, kind) {
58
88
  const space = face.hasGlyphForCodePoint(0x20) ? face.glyphForCodePoint(0x20).advanceWidth : face.unitsPerEm / 4;
59
89
  if (typeof kind === 'number')
@@ -83,8 +113,9 @@ function spaceAdvance(face, kind) {
83
113
  * `text` split for painting with `face`: runs of text to shape as they are,
84
114
  * and between them the spaces the face has no glyph for, each with the
85
115
  * advance the browser's shaper would give it; invisible characters are
86
- * dropped (see {@link ALWAYS_HIDDEN}). Undefined when the text needs none of
87
- * this, which is the common case.
116
+ * dropped (see {@link ALWAYS_HIDDEN}), and a hyphen the face lacks is set
117
+ * as its stand-in ({@link substituteGlyph}). Undefined when the text needs
118
+ * none of this, which is the common case.
88
119
  */
89
120
  export function fallbackPieces(face, text) {
90
121
  if (!CANDIDATE_RE.test(text))
@@ -108,6 +139,12 @@ export function fallbackPieces(face, text) {
108
139
  changed = true;
109
140
  continue;
110
141
  }
142
+ const stand = substituteGlyph(face, cp);
143
+ if (stand !== undefined) {
144
+ run += String.fromCodePoint(stand);
145
+ changed = true;
146
+ continue;
147
+ }
111
148
  run += ch;
112
149
  }
113
150
  if (!changed)
@@ -1 +1 @@
1
- {"version":3,"file":"fallbackSpaces.js","sourceRoot":"","sources":["../../src/pdf-backend/fallbackSpaces.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAOH,qFAAqF;AACrF,MAAM,eAAe,GAAG,IAAI,GAAG,CAAoB;IACjD,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB;IACpC,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,UAAU;IACvB,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,UAAU;IACvB,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,WAAW;IACxB,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,WAAW;IACxB,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,qBAAqB;IAClC,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,oBAAoB;IACjC,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,mBAAmB;IAChC,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,eAAe;IACnC,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE,oBAAoB;IAC7C,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,aAAa;IAC1B,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,aAAa;IAC3B,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,wBAAwB;IAC5C,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,4BAA4B;IAC9C,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,oBAAoB;CAClC,CAAC,CAAC;AAEH;;;;;2CAK2C;AAC3C,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAEhE,+EAA+E;AAC/E,SAAS,kBAAkB,CAAC,EAAU;IACpC,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC;QACjB,OAAO,EAAE,KAAK,MAAM,IAAI,EAAE,KAAK,MAAM,IAAI,EAAE,KAAK,MAAM;eACjD,CAAC,EAAE,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM,CAAC;eAC9B,CAAC,EAAE,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM,CAAC;eAC9B,CAAC,EAAE,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM,CAAC;eAC9B,CAAC,EAAE,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM,CAAC;eAC9B,CAAC,EAAE,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM,CAAC;eAC9B,CAAC,EAAE,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM,CAAC;eAC9B,EAAE,KAAK,MAAM;eACb,CAAC,EAAE,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,CAAC,EAAE,IAAI,OAAO,IAAI,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,OAAO,IAAI,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,OAAO,IAAI,EAAE,IAAI,OAAO,CAAC,CAAC;AAClH,CAAC;AAED;8DAC8D;AAC9D,MAAM,YAAY,GAAG,uDAAuD,CAAC;AAa7E,SAAS,YAAY,CAAC,IAAkB,EAAE,IAAe;IACvD,MAAM,KAAK,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;IAChH,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;IAC5D,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,OAAO;YACV,OAAO,KAAK,CAAC;QACf,KAAK,QAAQ;YACX,OAAO,KAAK,GAAG,CAAC,CAAC;QACnB,KAAK,MAAM;YACT,OAAO,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;QACpC,KAAK,QAAQ;YACX,KAAK,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;gBAClC,IAAI,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;oBAAE,OAAO,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;YAClF,CAAC;YACD,OAAO,KAAK,CAAC;QACf,KAAK,aAAa;YAChB,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;gBAC7B,IAAI,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;oBAAE,OAAO,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;YAClF,CAAC;YACD,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,IAAkB,EAAE,IAAY;IAC7D,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IAC/C,MAAM,MAAM,GAAgB,EAAE,CAAC;IAC/B,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,KAAK,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC;QACtB,MAAM,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,CAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACrC,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC,EAAE,CAAC;YACzD,IAAI,GAAG;gBAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;YACpC,GAAG,GAAG,EAAE,CAAC;YACT,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;YACjD,OAAO,GAAG,IAAI,CAAC;YACf,SAAS;QACX,CAAC;QACD,IAAI,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YACxF,iEAAiE;YACjE,OAAO,GAAG,IAAI,CAAC;YACf,SAAS;QACX,CAAC;QACD,GAAG,IAAI,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAC/B,IAAI,GAAG;QAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;IACpC,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"fallbackSpaces.js","sourceRoot":"","sources":["../../src/pdf-backend/fallbackSpaces.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,6 @@
1
1
  import type { VDTDocument, VDTBlock } from 'postext';
2
+ /** Font strings and the characters set in each (see {@link collectFontText}). */
3
+ export type FontText = Map<string, Set<number>>;
2
4
  /**
3
5
  * Collect the fontString of every face the pages paint, walking them the
4
6
  * way the renderer does: a block's base face when it sets any line, the
@@ -10,6 +12,16 @@ import type { VDTDocument, VDTBlock } from 'postext';
10
12
  * lines of a block drawn through its design overlay, paint nothing.
11
13
  */
12
14
  export declare function collectFontStrings(doc: VDTDocument): string[];
15
+ /**
16
+ * {@link collectFontStrings} with the characters set in each face, for a
17
+ * font provider that serves a family as several files (issue #196). A
18
+ * block's base face is credited with the whole text of its lines (it paints
19
+ * the spaces and every plain line), so it may list characters a styled run
20
+ * sets in another face: the provider may hand over a file that is never
21
+ * drawn from, which is left out of the PDF. `into` gathers several
22
+ * documents (the chapters of a book).
23
+ */
24
+ export declare function collectFontText(doc: VDTDocument, into?: FontText): FontText;
13
25
  export declare function pickSegmentFont(bold: boolean, italic: boolean, block: VDTBlock): string;
14
26
  export declare function pickSegmentColor(bold: boolean, italic: boolean, block: VDTBlock): string;
15
27
  //# sourceMappingURL=fontHelpers.d.ts.map