postext 1.38.0 → 1.39.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 (208) hide show
  1. package/dist/__tests__/bundle.test.js +21 -0
  2. package/dist/__tests__/bundle.test.js.map +1 -1
  3. package/dist/__tests__/comics/frames.test.js +99 -10
  4. package/dist/__tests__/comics/frames.test.js.map +1 -1
  5. package/dist/__tests__/composed/figureWords.test.d.ts +2 -0
  6. package/dist/__tests__/composed/figureWords.test.d.ts.map +1 -0
  7. package/dist/__tests__/composed/figureWords.test.js +105 -0
  8. package/dist/__tests__/composed/figureWords.test.js.map +1 -0
  9. package/dist/__tests__/composed/fit.test.js +24 -7
  10. package/dist/__tests__/composed/fit.test.js.map +1 -1
  11. package/dist/__tests__/composed/frameModes.test.d.ts +2 -0
  12. package/dist/__tests__/composed/frameModes.test.d.ts.map +1 -0
  13. package/dist/__tests__/composed/frameModes.test.js +72 -0
  14. package/dist/__tests__/composed/frameModes.test.js.map +1 -0
  15. package/dist/__tests__/composed/frameWritingMode.test.d.ts +2 -0
  16. package/dist/__tests__/composed/frameWritingMode.test.d.ts.map +1 -0
  17. package/dist/__tests__/composed/frameWritingMode.test.js +211 -0
  18. package/dist/__tests__/composed/frameWritingMode.test.js.map +1 -0
  19. package/dist/__tests__/composed/groupStartGrid.test.d.ts +2 -0
  20. package/dist/__tests__/composed/groupStartGrid.test.d.ts.map +1 -0
  21. package/dist/__tests__/composed/groupStartGrid.test.js +66 -0
  22. package/dist/__tests__/composed/groupStartGrid.test.js.map +1 -0
  23. package/dist/__tests__/composed/labelsChecks.test.d.ts +2 -0
  24. package/dist/__tests__/composed/labelsChecks.test.d.ts.map +1 -0
  25. package/dist/__tests__/composed/labelsChecks.test.js +307 -0
  26. package/dist/__tests__/composed/labelsChecks.test.js.map +1 -0
  27. package/dist/__tests__/composed/logicalEdges.test.d.ts +2 -0
  28. package/dist/__tests__/composed/logicalEdges.test.d.ts.map +1 -0
  29. package/dist/__tests__/composed/logicalEdges.test.js +94 -0
  30. package/dist/__tests__/composed/logicalEdges.test.js.map +1 -0
  31. package/dist/__tests__/composed/sourceMap.test.js +62 -0
  32. package/dist/__tests__/composed/sourceMap.test.js.map +1 -1
  33. package/dist/__tests__/composed/spreadLabels.test.js +5 -2
  34. package/dist/__tests__/composed/spreadLabels.test.js.map +1 -1
  35. package/dist/__tests__/defaults/calloutStyleExtends.test.d.ts +2 -0
  36. package/dist/__tests__/defaults/calloutStyleExtends.test.d.ts.map +1 -0
  37. package/dist/__tests__/defaults/calloutStyleExtends.test.js +123 -0
  38. package/dist/__tests__/defaults/calloutStyleExtends.test.js.map +1 -0
  39. package/dist/__tests__/exports.test.js +2 -0
  40. package/dist/__tests__/exports.test.js.map +1 -1
  41. package/dist/__tests__/paragraphDropCap.test.js +78 -0
  42. package/dist/__tests__/paragraphDropCap.test.js.map +1 -1
  43. package/dist/__tests__/pipeline/calloutCutRules.test.d.ts +2 -0
  44. package/dist/__tests__/pipeline/calloutCutRules.test.d.ts.map +1 -0
  45. package/dist/__tests__/pipeline/calloutCutRules.test.js +91 -0
  46. package/dist/__tests__/pipeline/calloutCutRules.test.js.map +1 -0
  47. package/dist/__tests__/pipeline/columnsWidows.test.d.ts +2 -0
  48. package/dist/__tests__/pipeline/columnsWidows.test.d.ts.map +1 -0
  49. package/dist/__tests__/pipeline/columnsWidows.test.js +76 -0
  50. package/dist/__tests__/pipeline/columnsWidows.test.js.map +1 -0
  51. package/dist/__tests__/vertical/canvasPaint.test.js +80 -0
  52. package/dist/__tests__/vertical/canvasPaint.test.js.map +1 -1
  53. package/dist/bundle/codec.d.ts.map +1 -1
  54. package/dist/bundle/codec.js +25 -2
  55. package/dist/bundle/codec.js.map +1 -1
  56. package/dist/canvas-backend/composed.d.ts +8 -1
  57. package/dist/canvas-backend/composed.d.ts.map +1 -1
  58. package/dist/canvas-backend/composed.js +21 -11
  59. package/dist/canvas-backend/composed.js.map +1 -1
  60. package/dist/canvas-backend/headerFooter.d.ts.map +1 -1
  61. package/dist/canvas-backend/headerFooter.js +11 -8
  62. package/dist/canvas-backend/headerFooter.js.map +1 -1
  63. package/dist/canvas-backend/index.d.ts.map +1 -1
  64. package/dist/canvas-backend/index.js +5 -3
  65. package/dist/canvas-backend/index.js.map +1 -1
  66. package/dist/canvas-backend/renderResourceBlock.d.ts.map +1 -1
  67. package/dist/canvas-backend/renderResourceBlock.js +7 -0
  68. package/dist/canvas-backend/renderResourceBlock.js.map +1 -1
  69. package/dist/comics/textPanels.d.ts +24 -6
  70. package/dist/comics/textPanels.d.ts.map +1 -1
  71. package/dist/comics/textPanels.js +84 -12
  72. package/dist/comics/textPanels.js.map +1 -1
  73. package/dist/composed/geometry.d.ts +1 -19
  74. package/dist/composed/geometry.d.ts.map +1 -1
  75. package/dist/composed/geometry.js +24 -2
  76. package/dist/composed/geometry.js.map +1 -1
  77. package/dist/composed/labels.d.ts +14 -1
  78. package/dist/composed/labels.d.ts.map +1 -1
  79. package/dist/composed/labels.js +206 -11
  80. package/dist/composed/labels.js.map +1 -1
  81. package/dist/composed/paint.d.ts +26 -0
  82. package/dist/composed/paint.d.ts.map +1 -1
  83. package/dist/composed/paint.js +25 -2
  84. package/dist/composed/paint.js.map +1 -1
  85. package/dist/composed/sourceMap.d.ts +7 -2
  86. package/dist/composed/sourceMap.d.ts.map +1 -1
  87. package/dist/composed/sourceMap.js +31 -16
  88. package/dist/composed/sourceMap.js.map +1 -1
  89. package/dist/composed/types.d.ts +3 -0
  90. package/dist/composed/types.d.ts.map +1 -1
  91. package/dist/composed/validate.d.ts.map +1 -1
  92. package/dist/composed/validate.js +2 -0
  93. package/dist/composed/validate.js.map +1 -1
  94. package/dist/composed/wrap.d.ts +7 -0
  95. package/dist/composed/wrap.d.ts.map +1 -1
  96. package/dist/composed/wrap.js +52 -4
  97. package/dist/composed/wrap.js.map +1 -1
  98. package/dist/configWarnings.d.ts.map +1 -1
  99. package/dist/configWarnings.js +33 -1
  100. package/dist/configWarnings.js.map +1 -1
  101. package/dist/contrast.d.ts +4 -2
  102. package/dist/contrast.d.ts.map +1 -1
  103. package/dist/contrast.js +22 -1
  104. package/dist/contrast.js.map +1 -1
  105. package/dist/defaults/calloutStyles.d.ts +14 -1
  106. package/dist/defaults/calloutStyles.d.ts.map +1 -1
  107. package/dist/defaults/calloutStyles.js +70 -2
  108. package/dist/defaults/calloutStyles.js.map +1 -1
  109. package/dist/defaults/index.d.ts +1 -1
  110. package/dist/defaults/index.d.ts.map +1 -1
  111. package/dist/defaults/index.js +1 -1
  112. package/dist/defaults/index.js.map +1 -1
  113. package/dist/design/layout.d.ts +5 -0
  114. package/dist/design/layout.d.ts.map +1 -1
  115. package/dist/design/layout.js +19 -9
  116. package/dist/design/layout.js.map +1 -1
  117. package/dist/design/logicalEdges.d.ts +27 -0
  118. package/dist/design/logicalEdges.d.ts.map +1 -0
  119. package/dist/design/logicalEdges.js +36 -0
  120. package/dist/design/logicalEdges.js.map +1 -0
  121. package/dist/html-backend.d.ts.map +1 -1
  122. package/dist/html-backend.js +42 -10
  123. package/dist/html-backend.js.map +1 -1
  124. package/dist/index.d.ts +2 -2
  125. package/dist/index.d.ts.map +1 -1
  126. package/dist/index.js +1 -1
  127. package/dist/index.js.map +1 -1
  128. package/dist/parse/blockParser.d.ts.map +1 -1
  129. package/dist/parse/blockParser.js +36 -1
  130. package/dist/parse/blockParser.js.map +1 -1
  131. package/dist/parse/index.d.ts +1 -1
  132. package/dist/parse/index.d.ts.map +1 -1
  133. package/dist/parse/index.js.map +1 -1
  134. package/dist/parse/indexMarks.d.ts.map +1 -1
  135. package/dist/parse/indexMarks.js +2 -0
  136. package/dist/parse/indexMarks.js.map +1 -1
  137. package/dist/parse/types.d.ts +14 -0
  138. package/dist/parse/types.d.ts.map +1 -1
  139. package/dist/pipeline/build.d.ts.map +1 -1
  140. package/dist/pipeline/build.js +16 -4
  141. package/dist/pipeline/build.js.map +1 -1
  142. package/dist/pipeline/buildMeasurement.d.ts.map +1 -1
  143. package/dist/pipeline/buildMeasurement.js +1 -0
  144. package/dist/pipeline/buildMeasurement.js.map +1 -1
  145. package/dist/pipeline/calloutLayout.d.ts.map +1 -1
  146. package/dist/pipeline/calloutLayout.js +13 -32
  147. package/dist/pipeline/calloutLayout.js.map +1 -1
  148. package/dist/pipeline/columnsGroup.d.ts +3 -3
  149. package/dist/pipeline/columnsGroup.d.ts.map +1 -1
  150. package/dist/pipeline/columnsGroup.js +5 -4
  151. package/dist/pipeline/columnsGroup.js.map +1 -1
  152. package/dist/pipeline/composedLayout.d.ts +4 -1
  153. package/dist/pipeline/composedLayout.d.ts.map +1 -1
  154. package/dist/pipeline/composedLayout.js +167 -20
  155. package/dist/pipeline/composedLayout.js.map +1 -1
  156. package/dist/pipeline/contentWarnings.d.ts.map +1 -1
  157. package/dist/pipeline/contentWarnings.js +23 -1
  158. package/dist/pipeline/contentWarnings.js.map +1 -1
  159. package/dist/pipeline/dropCap.d.ts.map +1 -1
  160. package/dist/pipeline/dropCap.js +11 -0
  161. package/dist/pipeline/dropCap.js.map +1 -1
  162. package/dist/pipeline/figureWords.d.ts +21 -0
  163. package/dist/pipeline/figureWords.d.ts.map +1 -0
  164. package/dist/pipeline/figureWords.js +43 -0
  165. package/dist/pipeline/figureWords.js.map +1 -0
  166. package/dist/pipeline/frameLayout.d.ts.map +1 -1
  167. package/dist/pipeline/frameLayout.js +12 -3
  168. package/dist/pipeline/frameLayout.js.map +1 -1
  169. package/dist/pipeline/headerFooter.d.ts +2 -0
  170. package/dist/pipeline/headerFooter.d.ts.map +1 -1
  171. package/dist/pipeline/headerFooter.js +10 -4
  172. package/dist/pipeline/headerFooter.js.map +1 -1
  173. package/dist/pipeline/partPalette.d.ts +4 -2
  174. package/dist/pipeline/partPalette.d.ts.map +1 -1
  175. package/dist/pipeline/partPalette.js +19 -0
  176. package/dist/pipeline/partPalette.js.map +1 -1
  177. package/dist/pipeline/verticalMetrics.d.ts +3 -2
  178. package/dist/pipeline/verticalMetrics.d.ts.map +1 -1
  179. package/dist/pipeline/verticalMetrics.js +25 -2
  180. package/dist/pipeline/verticalMetrics.js.map +1 -1
  181. package/dist/preflight.d.ts +1 -1
  182. package/dist/preflight.js +31 -3
  183. package/dist/preflight.js.map +1 -1
  184. package/dist/types.d.ts +19 -1
  185. package/dist/types.d.ts.map +1 -1
  186. package/dist/vdt.d.ts +67 -1
  187. package/dist/vdt.d.ts.map +1 -1
  188. package/dist/vdt.js.map +1 -1
  189. package/dist/word/docxRead.d.ts.map +1 -1
  190. package/dist/word/docxRead.js +16 -2
  191. package/dist/word/docxRead.js.map +1 -1
  192. package/dist/word/index.d.ts +2 -0
  193. package/dist/word/index.d.ts.map +1 -1
  194. package/dist/word/index.js +1 -0
  195. package/dist/word/index.js.map +1 -1
  196. package/dist/word/model.d.ts +7 -0
  197. package/dist/word/model.d.ts.map +1 -1
  198. package/dist/word/model.js.map +1 -1
  199. package/dist/word/toDocx.d.ts.map +1 -1
  200. package/dist/word/toDocx.js +28 -13
  201. package/dist/word/toDocx.js.map +1 -1
  202. package/dist/word/tracking.d.ts +37 -0
  203. package/dist/word/tracking.d.ts.map +1 -0
  204. package/dist/word/tracking.js +137 -0
  205. package/dist/word/tracking.js.map +1 -0
  206. package/dist/word/word.test.js +79 -0
  207. package/dist/word/word.test.js.map +1 -1
  208. package/package.json +1 -1
@@ -2482,9 +2482,23 @@ function renderFigureLabelsHtml(rb, bx, by, options) {
2482
2482
  const r = layout.background.rect;
2483
2483
  inner.push(`<div aria-hidden="true" style="position:absolute;left:${n2(r.x)}px;top:${n2(r.y)}px;width:${n2(r.width)}px;height:${n2(r.height)}px;background:${layout.background.color};"></div>`);
2484
2484
  }
2485
- layout.lines.forEach((line, i) => {
2486
- inner.push(renderResourceLine(line, fonts, layout.color, rb.linkColor, layout.color, options.linkTargets, options.dir, options.rootLang, lineEndText(line, layout.lines[i + 1]) || (i + 1 < layout.lines.length ? ' ' : '')));
2487
- });
2485
+ if (layout.vertical) {
2486
+ // A vertical label (#902): its frame is turned a quarter turn by the
2487
+ // matrix, as a vertical page's flow is, and each line is set down the
2488
+ // column like a body line, from a block that stands for the label.
2489
+ const vt = layout.vertical;
2490
+ const v = { region: vt.region, uprightDigits: vt.uprightDigits, axes: vt.centralBaselines };
2491
+ const host = {
2492
+ id: label.id ?? '', fontString: layout.fontString, boldFontString: layout.boldFontString, italicFontString: layout.italicFontString,
2493
+ boldItalicFontString: layout.boldItalicFontString, color: layout.color, textAlign: 'left', bbox: layout.box,
2494
+ };
2495
+ layout.lines.forEach((line, i) => inner.push(renderVerticalLine(line, host, v, options.linkTargets, layout.lines[i + 1])));
2496
+ }
2497
+ else {
2498
+ layout.lines.forEach((line, i) => {
2499
+ inner.push(renderResourceLine(line, fonts, layout.color, rb.linkColor, layout.color, options.linkTargets, options.dir, options.rootLang, lineEndText(line, layout.lines[i + 1]) || (i + 1 < layout.lines.length ? ' ' : '')));
2500
+ });
2501
+ }
2488
2502
  const dir = layout.direction === 'rtl' ? ' dir="rtl"' : '';
2489
2503
  const id = label.id ? ` data-label="${esc(label.id)}"` : '';
2490
2504
  parts.push(`<div class="pt-figure-label"${id}${dir} style="position:absolute;left:0;top:0;width:0;height:0;transform-origin:0 0;` +
@@ -2796,11 +2810,14 @@ function renderDesignImageBlock(block, options) {
2796
2810
  // `height` across it (sized for that when `upright`, else fitted
2797
2811
  // keeping its proportions, as the canvas draws it).
2798
2812
  const k = block.upright ? 1 : Math.min(height / width, width / height);
2799
- const dw = block.upright ? height : width * k;
2800
- const dh = block.upright ? width : height * k;
2801
- const ox = block.upright ? 0 : (height - dw) / 2;
2802
- const oy = block.upright ? 0 : (width - dh) / 2;
2803
- return (`<div style="position:absolute;left:${x}px;top:${y}px;width:${width}px;height:${height}px;">` +
2813
+ // A cover crop (#946): the whole picture over its uncropped box in
2814
+ // the upright frame, the box clipping it.
2815
+ const c = block.upright ? block.crop : undefined;
2816
+ const dw = c ? height / c.width : block.upright ? height : width * k;
2817
+ const dh = c ? width / c.height : block.upright ? width : height * k;
2818
+ const ox = c ? -c.x * dw : block.upright ? 0 : (height - dw) / 2;
2819
+ const oy = c ? -c.y * dh : block.upright ? 0 : (width - dh) / 2;
2820
+ return (`<div style="position:absolute;left:${x}px;top:${y}px;width:${width}px;height:${height}px;${c ? 'overflow:hidden;' : ''}">` +
2804
2821
  `<img src="${esc(url)}" ${alt} style="position:absolute;left:0;top:0;width:${dw}px;height:${dh}px;` +
2805
2822
  `transform:translate(0,${height}px) rotate(-90deg) translate(${ox}px,${oy}px);transform-origin:0 0;${filter}" /></div>`);
2806
2823
  }
@@ -2953,12 +2970,21 @@ verticalRegion, verticalDigits) {
2953
2970
  // panel, before the panel's lettering, inside the comic's markup.
2954
2971
  const comicText = new Map();
2955
2972
  const comicTextBlocks = [];
2973
+ // On a vertical or right-to-left page the text is set in the page's flow
2974
+ // frame (#909): each frame is written in a box that turns or mirrors it
2975
+ // as the page's flow box does, over the panel on the sheet.
2976
+ const flowBox = vflow
2977
+ ? `<div class="pt-flow" style="position:absolute;left:0;top:0;width:${page.height}px;height:${page.width}px;transform:translate(${page.width}px,0) rotate(90deg);transform-origin:0 0;">`
2978
+ : page.flow?.writingMode === 'horizontal-tb'
2979
+ ? `<div class="pt-flow pt-flow-mirrored" style="position:absolute;left:0;top:0;width:${page.width}px;height:${page.height}px;transform:scaleX(-1);transform-origin:${page.flow.mirror.originX / 2}px 0;">${MIRRORED_FLOW_STYLE}`
2980
+ : '';
2956
2981
  for (const item of comicFramePaintOrder(page)) {
2957
2982
  if (item.kind !== 'frame' || item.frame.panel === undefined)
2958
2983
  continue;
2959
2984
  const parts = item.blocks.map((b) => ({ id: b.id, html: renderBlock(b, options) }));
2960
2985
  comicTextBlocks.push(...parts);
2961
- comicText.set(item.frame.panel, composedFrameOpen(item.frame, 'auto') + parts.map((b) => b.html).join('') + '</div>');
2986
+ const frameHtml = composedFrameOpen(item.frame, 'auto') + parts.map((b) => b.html).join('') + '</div>';
2987
+ comicText.set(item.frame.panel, flowBox ? `${flowBox}${frameHtml}</div>` : frameHtml);
2962
2988
  }
2963
2989
  const comicMarkup = (comic) => renderComicPageHtml(page, comic, comics.indexOf(comic), options.vertical ? { ...options, vertical: undefined } : options, comic === page.comic && comicText.size > 0 ? (panel) => comicText.get(panel.index) ?? '' : undefined);
2964
2990
  const stripInBlock = (block) => plainFlow && block.comic && !block.hidden ? comicMarkup(comicBlockOnSheet(page, block)) : '';
@@ -3023,8 +3049,14 @@ verticalRegion, verticalDigits) {
3023
3049
  const open = composedFrameOpen(item.frame, z, item.facing);
3024
3050
  composedShape.push(open);
3025
3051
  composedParts.push(open);
3052
+ // A frame set in its own writing mode (#944) writes its lines as a
3053
+ // page of that mode does: set vertically, or across.
3054
+ const f = item.frame;
3055
+ const frameOptions = f.writingMode === 'vertical-rl'
3056
+ ? { ...options, vertical: { region: verticalRegion ?? 'mainland', uprightDigits: verticalDigits ?? 2, ...(f.centralBaselines ? { axes: f.centralBaselines } : {}), ...(f.dashAdvances ? { dashes: f.dashAdvances } : {}) } }
3057
+ : f.writingMode === 'horizontal-tb' ? { ...options, vertical: undefined } : options;
3026
3058
  for (const b of item.blocks) {
3027
- const html = renderBlock(b, options, stripInBlock(b));
3059
+ const html = renderBlock(b, frameOptions, stripInBlock(b));
3028
3060
  // The facing page's half of a frame across a spread's spine is
3029
3061
  // painted only: no block of the page's to patch or select.
3030
3062
  if (item.facing)