postext 1.52.0 → 1.53.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 (140) hide show
  1. package/dist/__tests__/breakOpportunities.test.js +12 -7
  2. package/dist/__tests__/breakOpportunities.test.js.map +1 -1
  3. package/dist/__tests__/bundle/balloonPlacementPin.test.js +11 -9
  4. package/dist/__tests__/bundle/balloonPlacementPin.test.js.map +1 -1
  5. package/dist/__tests__/bundle/cjkRulesPin.test.js +12 -12
  6. package/dist/__tests__/bundle/cjkRulesPin.test.js.map +1 -1
  7. package/dist/__tests__/bundle/designOverflowPin.test.js +3 -3
  8. package/dist/__tests__/bundle/designOverflowPin.test.js.map +1 -1
  9. package/dist/__tests__/bundle/flowColumnsPin.test.js +4 -4
  10. package/dist/__tests__/bundle/flowColumnsPin.test.js.map +1 -1
  11. package/dist/__tests__/bundle/gridBalancingPin.test.js +11 -9
  12. package/dist/__tests__/bundle/gridBalancingPin.test.js.map +1 -1
  13. package/dist/__tests__/bundle/gridBreakRulesPin.test.js +26 -24
  14. package/dist/__tests__/bundle/gridBreakRulesPin.test.js.map +1 -1
  15. package/dist/__tests__/bundle/indexGroupSplitPin.test.js +4 -4
  16. package/dist/__tests__/bundle/indexGroupSplitPin.test.js.map +1 -1
  17. package/dist/__tests__/bundle/looseOrderPin.test.js +11 -9
  18. package/dist/__tests__/bundle/looseOrderPin.test.js.map +1 -1
  19. package/dist/__tests__/bundle/markRadiusPin.test.js +3 -3
  20. package/dist/__tests__/bundle/markRadiusPin.test.js.map +1 -1
  21. package/dist/__tests__/bundle/refLabelBreaksPin.test.js +11 -9
  22. package/dist/__tests__/bundle/refLabelBreaksPin.test.js.map +1 -1
  23. package/dist/__tests__/bundle/scriptContextPin.test.js +12 -10
  24. package/dist/__tests__/bundle/scriptContextPin.test.js.map +1 -1
  25. package/dist/__tests__/bundle/shapingLanguagePin.test.js +20 -18
  26. package/dist/__tests__/bundle/shapingLanguagePin.test.js.map +1 -1
  27. package/dist/__tests__/bundle/taskBoxPin.test.js +1 -1
  28. package/dist/__tests__/bundle/trailingStepPin.test.js +4 -4
  29. package/dist/__tests__/bundle/trailingStepPin.test.js.map +1 -1
  30. package/dist/__tests__/bundle/wideFloatStretchPin.test.js +4 -4
  31. package/dist/__tests__/bundle/wideFloatStretchPin.test.js.map +1 -1
  32. package/dist/__tests__/bundle.test.js +5 -5
  33. package/dist/__tests__/bundle.test.js.map +1 -1
  34. package/dist/__tests__/codeBlocks.test.js +1 -1
  35. package/dist/__tests__/composed/folioMissing.test.d.ts +2 -0
  36. package/dist/__tests__/composed/folioMissing.test.d.ts.map +1 -0
  37. package/dist/__tests__/composed/folioMissing.test.js +90 -0
  38. package/dist/__tests__/composed/folioMissing.test.js.map +1 -0
  39. package/dist/__tests__/composedTemplates.test.js +8 -6
  40. package/dist/__tests__/composedTemplates.test.js.map +1 -1
  41. package/dist/__tests__/hardBreaks.test.js +1 -1
  42. package/dist/__tests__/headingInlineMarks.test.js +1 -1
  43. package/dist/__tests__/mathSizeMigration.test.js +4 -4
  44. package/dist/__tests__/mathSizeMigration.test.js.map +1 -1
  45. package/dist/__tests__/pipeline/boxParagraphStyles.test.js +2 -2
  46. package/dist/__tests__/pipeline/calloutInlineResourceGap.test.js +1 -1
  47. package/dist/__tests__/pipeline/calloutSplitMinLinesChild.test.js +3 -3
  48. package/dist/__tests__/pipeline/calloutSplitMinLinesChild.test.js.map +1 -1
  49. package/dist/__tests__/pipeline/colonListRoom.test.js +3 -3
  50. package/dist/__tests__/pipeline/colonListRoom.test.js.map +1 -1
  51. package/dist/__tests__/pipeline/compoundBreaks.test.js +6 -6
  52. package/dist/__tests__/pipeline/compoundBreaks.test.js.map +1 -1
  53. package/dist/__tests__/pipeline/dashBreaks.test.js +5 -5
  54. package/dist/__tests__/pipeline/dashBreaks.test.js.map +1 -1
  55. package/dist/__tests__/pipeline/headingSplitOrphans.test.js +3 -3
  56. package/dist/__tests__/pipeline/headingSplitOrphans.test.js.map +1 -1
  57. package/dist/__tests__/pipeline/inlineFigureSpace.test.js +5 -5
  58. package/dist/__tests__/pipeline/inlineFigureSpace.test.js.map +1 -1
  59. package/dist/__tests__/pipeline/openerChips.test.d.ts +2 -0
  60. package/dist/__tests__/pipeline/openerChips.test.d.ts.map +1 -0
  61. package/dist/__tests__/pipeline/openerChips.test.js +181 -0
  62. package/dist/__tests__/pipeline/openerChips.test.js.map +1 -0
  63. package/dist/__tests__/pipeline/paragraphContainerTail.test.js +7 -7
  64. package/dist/__tests__/pipeline/paragraphContainerTail.test.js.map +1 -1
  65. package/dist/__tests__/pipeline/raggedOptimal.test.js +7 -7
  66. package/dist/__tests__/pipeline/raggedOptimal.test.js.map +1 -1
  67. package/dist/__tests__/scriptContext.test.js +10 -1
  68. package/dist/__tests__/scriptContext.test.js.map +1 -1
  69. package/dist/__tests__/slashBreaks.test.d.ts +2 -0
  70. package/dist/__tests__/slashBreaks.test.d.ts.map +1 -0
  71. package/dist/__tests__/slashBreaks.test.js +160 -0
  72. package/dist/__tests__/slashBreaks.test.js.map +1 -0
  73. package/dist/__tests__/verseLines.test.js +7 -7
  74. package/dist/__tests__/verseLines.test.js.map +1 -1
  75. package/dist/bundle/configVersion.d.ts +28 -7
  76. package/dist/bundle/configVersion.d.ts.map +1 -1
  77. package/dist/bundle/configVersion.js +40 -7
  78. package/dist/bundle/configVersion.js.map +1 -1
  79. package/dist/bundle/index.d.ts +1 -1
  80. package/dist/bundle/index.d.ts.map +1 -1
  81. package/dist/bundle/index.js +1 -1
  82. package/dist/bundle/index.js.map +1 -1
  83. package/dist/canvas-backend/headerFooter.d.ts.map +1 -1
  84. package/dist/canvas-backend/headerFooter.js +10 -0
  85. package/dist/canvas-backend/headerFooter.js.map +1 -1
  86. package/dist/composed/furniture.d.ts +41 -0
  87. package/dist/composed/furniture.d.ts.map +1 -0
  88. package/dist/composed/furniture.js +108 -0
  89. package/dist/composed/furniture.js.map +1 -0
  90. package/dist/defaults/bodyText.d.ts.map +1 -1
  91. package/dist/defaults/bodyText.js +7 -0
  92. package/dist/defaults/bodyText.js.map +1 -1
  93. package/dist/design/bidiText.d.ts +2 -0
  94. package/dist/design/bidiText.d.ts.map +1 -1
  95. package/dist/design/bidiText.js +1 -1
  96. package/dist/design/bidiText.js.map +1 -1
  97. package/dist/design/cjkText.d.ts.map +1 -1
  98. package/dist/design/cjkText.js +6 -1
  99. package/dist/design/cjkText.js.map +1 -1
  100. package/dist/design/layout.d.ts +7 -1
  101. package/dist/design/layout.d.ts.map +1 -1
  102. package/dist/design/layout.js +49 -15
  103. package/dist/design/layout.js.map +1 -1
  104. package/dist/design/placeholders.d.ts +6 -1
  105. package/dist/design/placeholders.d.ts.map +1 -1
  106. package/dist/design/placeholders.js.map +1 -1
  107. package/dist/design/richText.d.ts +28 -4
  108. package/dist/design/richText.d.ts.map +1 -1
  109. package/dist/design/richText.js +105 -6
  110. package/dist/design/richText.js.map +1 -1
  111. package/dist/html-backend.d.ts.map +1 -1
  112. package/dist/html-backend.js +28 -5
  113. package/dist/html-backend.js.map +1 -1
  114. package/dist/measure/breakRules.d.ts +33 -0
  115. package/dist/measure/breakRules.d.ts.map +1 -1
  116. package/dist/measure/breakRules.js +82 -0
  117. package/dist/measure/breakRules.js.map +1 -1
  118. package/dist/measure/cache.d.ts.map +1 -1
  119. package/dist/measure/cache.js +4 -2
  120. package/dist/measure/cache.js.map +1 -1
  121. package/dist/measure/rich.d.ts +6 -2
  122. package/dist/measure/rich.d.ts.map +1 -1
  123. package/dist/measure/rich.js +69 -6
  124. package/dist/measure/rich.js.map +1 -1
  125. package/dist/pipeline/build.d.ts.map +1 -1
  126. package/dist/pipeline/build.js +16 -7
  127. package/dist/pipeline/build.js.map +1 -1
  128. package/dist/pipeline/contentWarnings.d.ts.map +1 -1
  129. package/dist/pipeline/contentWarnings.js +3 -0
  130. package/dist/pipeline/contentWarnings.js.map +1 -1
  131. package/dist/pipeline/headerFooter.d.ts +17 -3
  132. package/dist/pipeline/headerFooter.d.ts.map +1 -1
  133. package/dist/pipeline/headerFooter.js +199 -45
  134. package/dist/pipeline/headerFooter.js.map +1 -1
  135. package/dist/types.d.ts +17 -0
  136. package/dist/types.d.ts.map +1 -1
  137. package/dist/vdt.d.ts +26 -0
  138. package/dist/vdt.d.ts.map +1 -1
  139. package/dist/vdt.js.map +1 -1
  140. package/package.json +1 -1
@@ -15,6 +15,7 @@ import { initHyphenator, measureRichBlock } from '../measure/index.js';
15
15
  import { setHyphenationRules } from '../hyphenate.js';
16
16
  import { citedNames } from '../citations/names.js';
17
17
  import { getCjkLineBreak, setCjkLineBreak } from '../measure/cjkClasses.js';
18
+ import { getSlashBreaks, setSlashBreaks } from '../measure/breakRules.js';
18
19
  import { cjkCompositionOf, getCjkComposition, setCjkComposition } from '../measure/cjkPunctuation.js';
19
20
  import { getMeasureRegion, getMeasureUprightDigits, getMeasureWritingMode, measuringVertically, setMeasureUprightDigits, setMeasureWritingMode } from '../measure/vertical.js';
20
21
  import { stampCentralBaselines } from './verticalMetrics.js';
@@ -79,7 +80,7 @@ import { buildCodeLineNumbers, codeOverflowWarnings } from './codeLines.js';
79
80
  import { pickTableStyle } from '../defaults/tableStyle.js';
80
81
  import { DEFAULT_FLOAT_MIN_SCALE } from '../defaults/layout.js';
81
82
  import { buildLineNumbers, lineNumberWarnings } from './lineNumbers.js';
82
- import { buildHeadersAndFooters, connectorAnchorUnknownWarnings, defaultOpenerTitle, headingDesignBoxes, layoutBoxDesign, measureBoxDesign, measureDefaultOpenerHeight, measureHeadingDesign } from './headerFooter.js';
83
+ import { buildHeadersAndFooters, connectorAnchorUnknownWarnings, pageFurnitureWarnings, defaultOpenerTitle, headingDesignBoxes, layoutBoxDesign, markedTitleFields, measureBoxDesign, measureDefaultOpenerHeight, measureHeadingDesign } from './headerFooter.js';
83
84
  import { flowColorValues } from './partPalette.js';
84
85
  import { chapterNumberCounter, leadingBoldText } from './placeholders.js';
85
86
  import { proposeBalanceLines, GRID_LINE_LEVERS, collectColumnGaps, firstDivergentColumn, gapLinesIn, boxRoomIn, boxLeverKeys, pageSegments, MAX_BALANCING_PASSES, MAX_BALANCING_PASSES_PER_DOCUMENT, balanceKey, candidateKey, flexFigureKey, flexFloatKey } from './columnBalancing.js';
@@ -261,10 +262,12 @@ export function buildDocumentPass(content, config, cache, options, hints = {}) {
261
262
  const arabicNumbers = getMeasureArabicNumbers();
262
263
  const scriptContext = getMeasureScriptContext();
263
264
  const language = getMeasureLanguage();
265
+ const slashBreaks = getSlashBreaks();
264
266
  try {
265
267
  return placeDocumentPass(content, config, cache, options, hints);
266
268
  }
267
269
  finally {
270
+ setSlashBreaks(slashBreaks);
268
271
  setMeasureLanguage(language);
269
272
  setMeasureScriptContext(scriptContext);
270
273
  setMeasureArabicNumbers(arabicNumbers);
@@ -320,6 +323,9 @@ function placeDocumentPass(content, config, cache, options, hints) {
320
323
  // authors it cites join them below, once its references are read.
321
324
  const hyphenationRules = { exceptions: resolved.bodyText.hyphenation.exceptions, capitalized: resolved.bodyText.hyphenation.capitalized };
322
325
  initHyphenator(resolved.bodyText.hyphenation.locale, hyphenationRules);
326
+ // A line may end after a slash between two words wherever rich text is
327
+ // measured (#1164), unless the configuration keeps the breaks of 1.51.
328
+ setSlashBreaks(resolved.bodyText.breakAfterSlashes !== false);
323
329
  // CJK text breaks at the document's level wherever it is measured (body,
324
330
  // captions, cells, notes, boxes), as it hyphenates in its language.
325
331
  setCjkLineBreak(resolved.cjk.lineBreak);
@@ -3543,7 +3549,7 @@ function placeDocumentPass(content, config, cache, options, hints) {
3543
3549
  if (level.advancedDesign.enabled) {
3544
3550
  const pref = measured.kind.numberPrefix ?? '';
3545
3551
  const title = defaultOpenerTitle(measured.measured.lines, pref, rawBlock.titleBreaks, rawBlock.text.length, level.numberSeparator);
3546
- const design = measureHeadingDesign(level, { titleText: title.titleText, ...(title.marked !== undefined ? { titleMarked: title.marked } : {}), formattedNumber: pref, attrs: rawBlock.attrs }, width, resolved.page.dpi, doc.metadata, cursor.pageIndex, designFramesOn(page), undefined, resourceById);
3552
+ const design = measureHeadingDesign(level, { titleText: title.titleText, ...markedTitleFields(title, resolved.chipStyles), formattedNumber: pref, attrs: rawBlock.attrs }, width, resolved.page.dpi, doc.metadata, cursor.pageIndex, designFramesOn(page), undefined, resourceById);
3547
3553
  height = Math.max(height, design.height, design.textFloor);
3548
3554
  }
3549
3555
  // Level the band first: in this pass the cap is proposed (the heading
@@ -4084,8 +4090,8 @@ function placeDocumentPass(content, config, cache, options, hints) {
4084
4090
  const lvl = headingLevels.forBlock(raw);
4085
4091
  if (!lvl?.advancedDesign.enabled)
4086
4092
  return undefined;
4087
- const { titleText, marked } = defaultOpenerTitle(lines, pref, raw.titleBreaks, raw.text.length, lvl.numberSeparator);
4088
- const info = { titleText, ...(marked !== undefined ? { titleMarked: marked } : {}), formattedNumber: pref, numericValue: headingNumber, locale: resolvedLocale(resolved), ...(resolved.numerals ? { numerals: resolved.numerals } : {}), chapterNumber: chapterNumberByBlock[blockIdx] ?? '', attrs: raw.attrs };
4093
+ const title = defaultOpenerTitle(lines, pref, raw.titleBreaks, raw.text.length, lvl.numberSeparator);
4094
+ const info = { titleText: title.titleText, ...markedTitleFields(title, resolved.chipStyles), formattedNumber: pref, numericValue: headingNumber, locale: resolvedLocale(resolved), ...(resolved.numerals ? { numerals: resolved.numerals } : {}), chapterNumber: chapterNumberByBlock[blockIdx] ?? '', attrs: raw.attrs };
4089
4095
  const design = measureHeadingDesign(lvl, info, width, resolved.page.dpi, doc.metadata, cursor.pageIndex, undefined, undefined, resourceById);
4090
4096
  return Math.max(design.height, design.textFloor);
4091
4097
  };
@@ -7878,12 +7884,12 @@ function placeDocumentPass(content, config, cache, options, hints) {
7878
7884
  const pref = numberPrefix ?? '';
7879
7885
  // The lines joined back into the title (EF-162), as the design is
7880
7886
  // painted (`buildHeadersAndFooters`).
7881
- const { titleText: title, marked: titleMarked } = defaultOpenerTitle(remainingLines, pref, rawBlock.titleBreaks, rawBlock.text.length, lvl.numberSeparator);
7887
+ const openerTitle = defaultOpenerTitle(remainingLines, pref, rawBlock.titleBreaks, rawBlock.text.length, lvl.numberSeparator);
7882
7888
  // Span-page openers lay out across the full content area (both
7883
7889
  // columns); in-column headings use just the column width.
7884
7890
  const pageArea = doc.pages[cursor.pageIndex].contentArea;
7885
7891
  const measureWidth = lvl.span === 'page' ? pageArea.width : curCol.bbox.width;
7886
- const info = { titleText: title, ...(titleMarked !== undefined ? { titleMarked } : {}), formattedNumber: pref, numericValue: headingNumber, locale: resolvedLocale(resolved), ...(resolved.numerals ? { numerals: resolved.numerals } : {}), chapterNumber: chapterNumberByBlock[blockIdx] ?? '', attrs: rawBlock.attrs };
7892
+ const info = { titleText: openerTitle.titleText, ...markedTitleFields(openerTitle, resolved.chipStyles), formattedNumber: pref, numericValue: headingNumber, locale: resolvedLocale(resolved), ...(resolved.numerals ? { numerals: resolved.numerals } : {}), chapterNumber: chapterNumberByBlock[blockIdx] ?? '', attrs: rawBlock.attrs };
7887
7893
  const design = measureHeadingDesign(lvl, info, measureWidth, resolved.page.dpi, doc.metadata, cursor.pageIndex, designFramesOn(doc.pages[cursor.pageIndex]), {
7888
7894
  x: lvl.span === 'page' ? pageArea.x : curCol.bbox.x,
7889
7895
  y: curCol.bbox.y + (curCol.bbox.height - curCol.availableHeight) + spacingBefore,
@@ -7902,7 +7908,7 @@ function placeDocumentPass(content, config, cache, options, hints) {
7902
7908
  // line whose spaces shrink, a forced break, a run it prints plain):
7903
7909
  // the band holds every line it paints (EF-100).
7904
7910
  if (opensDefaultOpener(rawBlock)) {
7905
- const painted = measureDefaultOpenerHeight(lvl, resolved.headings.textAlign, defaultOpenerTitle(remainingLines, pref, rawBlock.titleBreaks, rawBlock.text.length, lvl.numberSeparator), pref, pageArea.width, resolved.page.dpi, doc.metadata, cursor.pageIndex);
7911
+ const painted = measureDefaultOpenerHeight(lvl, resolved.headings.textAlign, openerTitle, pref, pageArea.width, resolved.page.dpi, doc.metadata, cursor.pageIndex, resolved.chipStyles);
7906
7912
  if (painted > effectiveRemainHeight)
7907
7913
  effectiveRemainHeight = painted;
7908
7914
  }
@@ -9046,6 +9052,9 @@ export function* buildDocumentGen(content, config, cache, options) {
9046
9052
  loose.push(...figureLabelWarnings(doc, (b) => (b.sourceStart !== undefined && b.sourceEnd !== undefined ? { start: b.sourceStart, end: b.sourceEnd } : undefined)));
9047
9053
  // Connectors' ends at an anchor their frame's picture lacks (#1057).
9048
9054
  loose.push(...connectorAnchorUnknownWarnings(doc));
9055
+ // Composed pages that draw no folio or running head their siblings of
9056
+ // the same template and side draw (#1163).
9057
+ loose.push(...pageFurnitureWarnings(doc));
9049
9058
  // Comic panels whose cell cannot hold their picture's safe area (#556).
9050
9059
  for (const page of doc.pages) {
9051
9060
  if (page.comic)