postext 1.58.2 → 1.59.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.
- package/dist/__tests__/exercises/config.test.d.ts +2 -0
- package/dist/__tests__/exercises/config.test.d.ts.map +1 -0
- package/dist/__tests__/exercises/config.test.js +63 -0
- package/dist/__tests__/exercises/config.test.js.map +1 -0
- package/dist/__tests__/exercises/digital.test.d.ts +2 -0
- package/dist/__tests__/exercises/digital.test.d.ts.map +1 -0
- package/dist/__tests__/exercises/digital.test.js +163 -0
- package/dist/__tests__/exercises/digital.test.js.map +1 -0
- package/dist/__tests__/exercises/languages.test.d.ts +2 -0
- package/dist/__tests__/exercises/languages.test.d.ts.map +1 -0
- package/dist/__tests__/exercises/languages.test.js +109 -0
- package/dist/__tests__/exercises/languages.test.js.map +1 -0
- package/dist/__tests__/exercises/layout.test.d.ts +2 -0
- package/dist/__tests__/exercises/layout.test.d.ts.map +1 -0
- package/dist/__tests__/exercises/layout.test.js +77 -0
- package/dist/__tests__/exercises/layout.test.js.map +1 -0
- package/dist/__tests__/exercises/model.test.d.ts +2 -0
- package/dist/__tests__/exercises/model.test.d.ts.map +1 -0
- package/dist/__tests__/exercises/model.test.js +90 -0
- package/dist/__tests__/exercises/model.test.js.map +1 -0
- package/dist/__tests__/exercises/parse.test.d.ts +2 -0
- package/dist/__tests__/exercises/parse.test.d.ts.map +1 -0
- package/dist/__tests__/exercises/parse.test.js +37 -0
- package/dist/__tests__/exercises/parse.test.js.map +1 -0
- package/dist/__tests__/exercises/refs.test.d.ts +2 -0
- package/dist/__tests__/exercises/refs.test.d.ts.map +1 -0
- package/dist/__tests__/exercises/refs.test.js +46 -0
- package/dist/__tests__/exercises/refs.test.js.map +1 -0
- package/dist/__tests__/exercises/solutions.test.d.ts +2 -0
- package/dist/__tests__/exercises/solutions.test.d.ts.map +1 -0
- package/dist/__tests__/exercises/solutions.test.js +53 -0
- package/dist/__tests__/exercises/solutions.test.js.map +1 -0
- package/dist/__tests__/exports.test.js +14 -0
- package/dist/__tests__/exports.test.js.map +1 -1
- package/dist/__tests__/parse/containers.test.js +2 -2
- package/dist/__tests__/parse/containers.test.js.map +1 -1
- package/dist/__tests__/pipeline/pageShorterThanLine.test.d.ts +2 -0
- package/dist/__tests__/pipeline/pageShorterThanLine.test.d.ts.map +1 -0
- package/dist/__tests__/pipeline/pageShorterThanLine.test.js +29 -0
- package/dist/__tests__/pipeline/pageShorterThanLine.test.js.map +1 -0
- package/dist/__tests__/pipeline/spanHeadingMidPage.test.js +11 -0
- package/dist/__tests__/pipeline/spanHeadingMidPage.test.js.map +1 -1
- package/dist/canvas-backend/blockRender.d.ts.map +1 -1
- package/dist/canvas-backend/blockRender.js +18 -0
- package/dist/canvas-backend/blockRender.js.map +1 -1
- package/dist/canvas-backend/chip.d.ts +3 -0
- package/dist/canvas-backend/chip.d.ts.map +1 -1
- package/dist/canvas-backend/chip.js +31 -1
- package/dist/canvas-backend/chip.js.map +1 -1
- package/dist/configWarnings.d.ts +3 -1
- package/dist/configWarnings.d.ts.map +1 -1
- package/dist/configWarnings.js +5 -1
- package/dist/configWarnings.js.map +1 -1
- package/dist/defaults/chipStyles.d.ts.map +1 -1
- package/dist/defaults/chipStyles.js +7 -0
- package/dist/defaults/chipStyles.js.map +1 -1
- package/dist/defaults/exercises.d.ts +111 -0
- package/dist/defaults/exercises.d.ts.map +1 -0
- package/dist/defaults/exercises.js +255 -0
- package/dist/defaults/exercises.js.map +1 -0
- package/dist/defaults/index.d.ts +2 -0
- package/dist/defaults/index.d.ts.map +1 -1
- package/dist/defaults/index.js +16 -0
- package/dist/defaults/index.js.map +1 -1
- package/dist/defaults/shared.d.ts +4 -0
- package/dist/defaults/shared.d.ts.map +1 -1
- package/dist/defaults/shared.js +6 -0
- package/dist/defaults/shared.js.map +1 -1
- package/dist/design/elementKeys.d.ts +2 -0
- package/dist/design/elementKeys.d.ts.map +1 -1
- package/dist/design/elementKeys.js +1 -1
- package/dist/design/elementKeys.js.map +1 -1
- package/dist/exercises/build.d.ts +60 -0
- package/dist/exercises/build.d.ts.map +1 -0
- package/dist/exercises/build.js +177 -0
- package/dist/exercises/build.js.map +1 -0
- package/dist/exercises/configWarnings.d.ts +11 -0
- package/dist/exercises/configWarnings.d.ts.map +1 -0
- package/dist/exercises/configWarnings.js +175 -0
- package/dist/exercises/configWarnings.js.map +1 -0
- package/dist/exercises/designs.d.ts +38 -0
- package/dist/exercises/designs.d.ts.map +1 -0
- package/dist/exercises/designs.js +143 -0
- package/dist/exercises/designs.js.map +1 -0
- package/dist/exercises/digital.d.ts +69 -0
- package/dist/exercises/digital.d.ts.map +1 -0
- package/dist/exercises/digital.js +58 -0
- package/dist/exercises/digital.js.map +1 -0
- package/dist/exercises/expand.d.ts +74 -0
- package/dist/exercises/expand.d.ts.map +1 -0
- package/dist/exercises/expand.js +1089 -0
- package/dist/exercises/expand.js.map +1 -0
- package/dist/exercises/grids.d.ts +62 -0
- package/dist/exercises/grids.d.ts.map +1 -0
- package/dist/exercises/grids.js +535 -0
- package/dist/exercises/grids.js.map +1 -0
- package/dist/exercises/model.d.ts +24 -0
- package/dist/exercises/model.d.ts.map +1 -0
- package/dist/exercises/model.js +360 -0
- package/dist/exercises/model.js.map +1 -0
- package/dist/exercises/record.d.ts +94 -0
- package/dist/exercises/record.d.ts.map +1 -0
- package/dist/exercises/record.js +9 -0
- package/dist/exercises/record.js.map +1 -0
- package/dist/exercises/runtime.d.ts +65 -0
- package/dist/exercises/runtime.d.ts.map +1 -0
- package/dist/exercises/runtime.js +1261 -0
- package/dist/exercises/runtime.js.map +1 -0
- package/dist/exercises/shuffle.d.ts +13 -0
- package/dist/exercises/shuffle.d.ts.map +1 -0
- package/dist/exercises/shuffle.js +56 -0
- package/dist/exercises/shuffle.js.map +1 -0
- package/dist/exercises/styles.d.ts +51 -0
- package/dist/exercises/styles.d.ts.map +1 -0
- package/dist/exercises/styles.js +221 -0
- package/dist/exercises/styles.js.map +1 -0
- package/dist/exercises/text.d.ts +31 -0
- package/dist/exercises/text.d.ts.map +1 -0
- package/dist/exercises/text.js +82 -0
- package/dist/exercises/text.js.map +1 -0
- package/dist/exercises/types.d.ts +125 -0
- package/dist/exercises/types.d.ts.map +1 -0
- package/dist/exercises/types.js +9 -0
- package/dist/exercises/types.js.map +1 -0
- package/dist/exercises/warnings.d.ts +16 -0
- package/dist/exercises/warnings.d.ts.map +1 -0
- package/dist/exercises/warnings.js +55 -0
- package/dist/exercises/warnings.js.map +1 -0
- package/dist/html-backend.d.ts +6 -0
- package/dist/html-backend.d.ts.map +1 -1
- package/dist/html-backend.js +67 -6
- package/dist/html-backend.js.map +1 -1
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/measure/cache.d.ts.map +1 -1
- package/dist/measure/cache.js +6 -1
- package/dist/measure/cache.js.map +1 -1
- package/dist/measure/rich.d.ts.map +1 -1
- package/dist/measure/rich.js +11 -1
- package/dist/measure/rich.js.map +1 -1
- package/dist/migrate/markdownRuns.js +1 -1
- package/dist/migrate/markdownRuns.js.map +1 -1
- package/dist/numbering.d.ts +3 -0
- package/dist/numbering.d.ts.map +1 -1
- package/dist/numbering.js +6 -0
- package/dist/numbering.js.map +1 -1
- package/dist/parse/blockParser.d.ts.map +1 -1
- package/dist/parse/blockParser.js +47 -4
- package/dist/parse/blockParser.js.map +1 -1
- package/dist/parse/exerciseGaps.d.ts +50 -0
- package/dist/parse/exerciseGaps.d.ts.map +1 -0
- package/dist/parse/exerciseGaps.js +151 -0
- package/dist/parse/exerciseGaps.js.map +1 -0
- package/dist/parse/index.d.ts +1 -1
- package/dist/parse/index.d.ts.map +1 -1
- package/dist/parse/index.js.map +1 -1
- package/dist/parse/sourceMapping.d.ts.map +1 -1
- package/dist/parse/sourceMapping.js +21 -0
- package/dist/parse/sourceMapping.js.map +1 -1
- package/dist/parse/types.d.ts +49 -1
- package/dist/parse/types.d.ts.map +1 -1
- package/dist/pipeline/build.d.ts.map +1 -1
- package/dist/pipeline/build.js +51 -9
- package/dist/pipeline/build.js.map +1 -1
- package/dist/pipeline/calloutLayout.d.ts.map +1 -1
- package/dist/pipeline/calloutLayout.js +1 -0
- package/dist/pipeline/calloutLayout.js.map +1 -1
- package/dist/pipeline/chips.d.ts.map +1 -1
- package/dist/pipeline/chips.js +2 -0
- package/dist/pipeline/chips.js.map +1 -1
- package/dist/pipeline/config.d.ts.map +1 -1
- package/dist/pipeline/config.js +6 -0
- package/dist/pipeline/config.js.map +1 -1
- package/dist/pipeline/contentWarnings.d.ts.map +1 -1
- package/dist/pipeline/contentWarnings.js +29 -1
- package/dist/pipeline/contentWarnings.js.map +1 -1
- package/dist/pipeline/continuation.d.ts.map +1 -1
- package/dist/pipeline/continuation.js +21 -6
- package/dist/pipeline/continuation.js.map +1 -1
- package/dist/pipeline/measureContentBlock.d.ts.map +1 -1
- package/dist/pipeline/measureContentBlock.js +3 -2
- package/dist/pipeline/measureContentBlock.js.map +1 -1
- package/dist/pipeline/outline.d.ts.map +1 -1
- package/dist/pipeline/outline.js +1 -0
- package/dist/pipeline/outline.js.map +1 -1
- package/dist/pipeline/textWrap.js +1 -1
- package/dist/pipeline/textWrap.js.map +1 -1
- package/dist/types.d.ts +303 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/vdt.d.ts +67 -0
- package/dist/vdt.d.ts.map +1 -1
- package/dist/vdt.js.map +1 -1
- package/package.json +1 -1
package/dist/pipeline/build.js
CHANGED
|
@@ -22,6 +22,9 @@ import { stampCentralBaselines } from './verticalMetrics.js';
|
|
|
22
22
|
import { orientLinesToFrames } from './mirrorFrame.js';
|
|
23
23
|
import { verseMarginTopPx } from './buildBlockKind.js';
|
|
24
24
|
import { verseLinesSettings, versesLineByLine } from './verseLines.js';
|
|
25
|
+
import { exerciseOutline, exerciseSettingsFor, expandDocumentExercises, markTurnedBoxes, nameExerciseAnchors, needsExerciseExpansion, withExerciseStyles } from '../exercises/build.js';
|
|
26
|
+
import { hasExercises } from '../exercises/model.js';
|
|
27
|
+
import { exerciseDigitalOf } from '../exercises/digital.js';
|
|
25
28
|
import { arabicNumbersOf, resolveAllConfig, computeBaselineGrid, computeColumnBboxes, resolvedDirection, resolvedLocale, validateConfigCache } from './config.js';
|
|
26
29
|
import { resolveDebugConfig } from '../defaults/debug.js';
|
|
27
30
|
import { defaultFontSet, documentFontFaces, faceRequestKey, fontFallbacks } from '../fonts/faces.js';
|
|
@@ -75,6 +78,7 @@ import { enumerateCurrentPageSlots, measureFloatBand, floatGapAbove, floatGapBel
|
|
|
75
78
|
import { computeHeadingContext, computeResourceNumberingState, } from './resourceNumbering.js';
|
|
76
79
|
import { documentLocale, effectiveResourceTypes } from '../defaults/resourceTypes.js';
|
|
77
80
|
import { resolveCalloutStylesConfig } from '../defaults/calloutStyles.js';
|
|
81
|
+
import { relinkToPalette } from '../defaults/shared.js';
|
|
78
82
|
import { codeBoxStyle, codeParseOptions, wrapCodeBlocks } from './codeBlocks.js';
|
|
79
83
|
import { expandScoreBlocks, scoreInfoOf, scoreKeepHeight } from './scoreBlocks.js';
|
|
80
84
|
import { buildCodeLineNumbers, codeOverflowWarnings } from './codeLines.js';
|
|
@@ -288,7 +292,9 @@ function placeDocumentPass(content, config, cache, options, hints) {
|
|
|
288
292
|
* band above (a page-span box, a top float band) or a caption below has
|
|
289
293
|
* shortened it, so what does not fit it may still fit a full column. */
|
|
290
294
|
const shortSideColumn = (page, col) => col.bbox.height < page.contentArea.height - 0.5;
|
|
291
|
-
|
|
295
|
+
// Rebound once the content is read when it holds exercises (#1227): the
|
|
296
|
+
// config then also carries their chip and paragraph styles.
|
|
297
|
+
let resolved = resolveAllConfig(config);
|
|
292
298
|
// Bitmaps sized by the document's `layout.bitmapResolution` carry it as
|
|
293
299
|
// their own `resolution` from here on (#631); under the default policy
|
|
294
300
|
// the content is untouched.
|
|
@@ -506,7 +512,21 @@ function placeDocumentPass(content, config, cache, options, hints) {
|
|
|
506
512
|
// The citations of resource captions and notes (#529), formatted with
|
|
507
513
|
// the text's.
|
|
508
514
|
const captionCitations = citationsApplied && citationsApplied.captions.size > 0 ? citationsApplied.captions : undefined;
|
|
509
|
-
|
|
515
|
+
// Exercises (#1227): each set as a box of ordinary blocks, its solutions
|
|
516
|
+
// where the book prints them.
|
|
517
|
+
const exerciseExpansion = needsExerciseExpansion(citationsApplied?.blocks ?? parsedBody)
|
|
518
|
+
? expandDocumentExercises(citationsApplied?.blocks ?? parsedBody, resolved, computeColumnBboxes(pageMetrics.contentArea, resolved)[0]?.width ?? pageMetrics.contentArea.width, continuation, content.outline)
|
|
519
|
+
: undefined;
|
|
520
|
+
if (exerciseExpansion) {
|
|
521
|
+
resolved = withExerciseStyles(resolved);
|
|
522
|
+
// The document's config names the exercises' chip and paragraph
|
|
523
|
+
// styles too: an output that styles its text from the config (a
|
|
524
|
+
// reflowable EPUB, #1231) finds them there.
|
|
525
|
+
doc.config = resolved;
|
|
526
|
+
doc.exercises = exerciseExpansion.records;
|
|
527
|
+
doc.exerciseDigital = exerciseDigitalOf(exerciseSettingsFor(resolved));
|
|
528
|
+
}
|
|
529
|
+
const footnoteSplit = splitFootnoteDefinitions(exerciseExpansion?.blocks ?? citationsApplied?.blocks ?? parsedBody);
|
|
510
530
|
const footnoteDefs = footnoteSplit.defs;
|
|
511
531
|
// Numbered by page or column (`numbering: 'page'`), a note takes the
|
|
512
532
|
// number the previous build gave it where it landed; the first build
|
|
@@ -534,7 +554,10 @@ function placeDocumentPass(content, config, cache, options, hints) {
|
|
|
534
554
|
const resourceIds = new Set((content.resources ?? []).map((r) => r.id));
|
|
535
555
|
const anchorRefs = hasAnchorRefs(parsedBlocks, resourceIds);
|
|
536
556
|
const outline = content.outline
|
|
537
|
-
?? (hasTocDirective(parsedBlocks) || hasIndexDirective(parsedBlocks) || anchorRefs
|
|
557
|
+
?? (hasTocDirective(parsedBlocks) || hasIndexDirective(parsedBlocks) || anchorRefs
|
|
558
|
+
// A reference to an exercise prints its name (#1225).
|
|
559
|
+
? nameExerciseAnchors(computeOutline(parsedBlocks, resolved, headingStart, continuation?.statementCounters), exerciseExpansion?.records ?? [])
|
|
560
|
+
: undefined);
|
|
538
561
|
// A story carried in from another chapter (#943) may refer to anchors too.
|
|
539
562
|
const carriedRefs = continuation?.jumps?.some((j) => j.outline) === true;
|
|
540
563
|
const anchorRefContext = anchorRefs || carriedRefs
|
|
@@ -630,6 +653,8 @@ function placeDocumentPass(content, config, cache, options, hints) {
|
|
|
630
653
|
const syntheticBoxes = [
|
|
631
654
|
...(spanEmbeds.wrapped ? [spanEmbedStyle(bodyStyle.lineHeightPx, resolved.layout.inlineResourceGap !== 'above')] : []),
|
|
632
655
|
...(codeBoxes.wrapped ? [codeBoxStyle(resolved)] : []),
|
|
656
|
+
// The boxes exercises are set in (#1227).
|
|
657
|
+
...(exerciseExpansion?.wrapped ? exerciseExpansion.boxes : []),
|
|
633
658
|
// The frameless box of a composed page's story (#855).
|
|
634
659
|
...(composedWrap.wrapped || comicText.wrapped ? [frameBoxStyle(Math.max(resolved.bodyText.avoidOrphans ? resolved.bodyText.orphanMinLines : 1, resolved.bodyText.avoidWidows ? resolved.bodyText.widowMinLines : 1))] : []),
|
|
635
660
|
// The boxes of main-flow groups: sub-columns a body line apart in the
|
|
@@ -638,12 +663,16 @@ function placeDocumentPass(content, config, cache, options, hints) {
|
|
|
638
663
|
? flowColumnsStyles(bodyStyle.lineHeightPx, dimensionToPx(resolved.layout.gutterWidth, resolved.page.dpi, bodyStyle.fontSizePx), resolved.bodyText.paragraphSpacing === false ? { value: 0, unit: 'px' } : { value: bodyStyle.marginBottomPx, unit: 'px' }, Math.max(resolved.bodyText.avoidOrphans ? resolved.bodyText.orphanMinLines : 1, resolved.bodyText.avoidWidows ? resolved.bodyText.widowMinLines : 1))
|
|
639
664
|
: []),
|
|
640
665
|
];
|
|
666
|
+
const exerciseBoxIds = new Set(exerciseExpansion?.wrapped ? exerciseExpansion.boxes.map((b) => b.id) : []);
|
|
641
667
|
const calloutStyles = syntheticBoxes.length > 0
|
|
642
|
-
? [...resolved.calloutStyles, ...resolveCalloutStylesConfig(syntheticBoxes, resolved.bodyText, resolved.headings, resolved.unorderedLists, config?.locale)
|
|
668
|
+
? [...resolved.calloutStyles, ...resolveCalloutStylesConfig(syntheticBoxes, resolved.bodyText, resolved.headings, resolved.unorderedLists, config?.locale)
|
|
669
|
+
// The exercise boxes' defaults (a solutions title, a bank's frame)
|
|
670
|
+
// link to `main-color`: set them to the document's palette.
|
|
671
|
+
.map((s) => (exerciseBoxIds.has(s.id) ? relinkToPalette(s, config?.colorPalette) : s))]
|
|
643
672
|
: resolved.calloutStyles;
|
|
644
673
|
// A box nested in another looks its style up in the configuration it is
|
|
645
674
|
// laid out with: the listings' box among them.
|
|
646
|
-
const calloutResolved = codeBoxes.wrapped || flowGroups.wrapped || composedWrap.wrapped || comicText.wrapped ? { ...resolved, calloutStyles } : resolved;
|
|
675
|
+
const calloutResolved = codeBoxes.wrapped || flowGroups.wrapped || composedWrap.wrapped || comicText.wrapped || exerciseExpansion?.wrapped ? { ...resolved, calloutStyles } : resolved;
|
|
647
676
|
const blockquoteStyle = resolveBlockquoteStyle(resolved);
|
|
648
677
|
const listLevelIndentsPx = computeLevelIndentsPx(resolved, bodyStyle.fontSizePx);
|
|
649
678
|
const orderedMetrics = computeOrderedListRunMetrics(contentBlocks, resolved, bodyStyle.fontSizePx);
|
|
@@ -8747,8 +8776,12 @@ function placeDocumentPass(content, config, cache, options, hints) {
|
|
|
8747
8776
|
}
|
|
8748
8777
|
// Empty column with less than a line of room (a band cap cutting right
|
|
8749
8778
|
// under a float band, a column swallowed by reservations): nothing can
|
|
8750
|
-
// go here — move on. The next column, or a fresh page, has room
|
|
8751
|
-
|
|
8779
|
+
// go here — move on. The next column, or a fresh page, has room —
|
|
8780
|
+
// unless the page's whole content area is shorter than a line (#1222):
|
|
8781
|
+
// no column ever has, and the block is set here, as one taller than
|
|
8782
|
+
// the page.
|
|
8783
|
+
if (curCol.availableHeight < style.lineHeightPx - 0.01 && totalRemainHeight > curCol.availableHeight + 0.01
|
|
8784
|
+
&& contentArea.height >= style.lineHeightPx - 0.01) {
|
|
8752
8785
|
pendingSpacing = 0;
|
|
8753
8786
|
advanceToNextColumn(doc, cursor, geomResolved, contentArea, pageWidthPx, pageHeightPx, onNewPage);
|
|
8754
8787
|
continue;
|
|
@@ -9072,6 +9105,9 @@ export function* buildDocumentGen(content, config, cache, options) {
|
|
|
9072
9105
|
syncFontSet(fontSet);
|
|
9073
9106
|
validateConfigCache(config);
|
|
9074
9107
|
const doc = yield* buildDocumentRounds(content, config, cache, options);
|
|
9108
|
+
// Boxes printed upside down (#1229): their blocks learn the point they
|
|
9109
|
+
// turn about.
|
|
9110
|
+
markTurnedBoxes(doc);
|
|
9075
9111
|
// References and markup the source names wrongly: read from the source
|
|
9076
9112
|
// once, located on the pages of the finished layout. Kept apart from
|
|
9077
9113
|
// `doc.warnings`, whose entries keep their postext 1.4 shape.
|
|
@@ -9387,10 +9423,10 @@ function* buildDocumentRounds(content, config, cache, options) {
|
|
|
9387
9423
|
if (!hasAnchorRefs(parsed, new Set((content.resources ?? []).map((r) => r.id))))
|
|
9388
9424
|
return false;
|
|
9389
9425
|
const resolved = resolveAllConfig(config);
|
|
9390
|
-
return printsAnchorPages(parsed, anchorTargetsOf(
|
|
9426
|
+
return printsAnchorPages(parsed, anchorTargetsOf(ownOutline(parsed, resolved, content.continuation)), resolved.crossRefs.defaultStyle);
|
|
9391
9427
|
};
|
|
9392
9428
|
if (hasTocDirective(parsed) || hasIndexDirective(parsed) || pageRefs()) {
|
|
9393
|
-
let outline =
|
|
9429
|
+
let outline = ownOutline(parsed, resolveAllConfig(config), content.continuation);
|
|
9394
9430
|
let doc = withIndexMarks(yield* buildDocumentNumbered({ ...content, outline }, config, cache, options, 0, citing), content);
|
|
9395
9431
|
for (let round = 0; round < MAX_TOC_ROUNDS; round++) {
|
|
9396
9432
|
const after = outlineFromDoc(doc, outline);
|
|
@@ -9404,6 +9440,12 @@ function* buildDocumentRounds(content, config, cache, options) {
|
|
|
9404
9440
|
}
|
|
9405
9441
|
return withIndexMarks(yield* buildDocumentNumbered(content, config, cache, options, 0, citing), content);
|
|
9406
9442
|
}
|
|
9443
|
+
/** A document's own outline, its exercises' anchors named as a reference
|
|
9444
|
+
* prints them ("Exercise 3", #1225). */
|
|
9445
|
+
function ownOutline(parsed, resolved, continuation) {
|
|
9446
|
+
const outline = computeOutline(parsed, resolved, continuation?.headings, continuation?.statementCounters);
|
|
9447
|
+
return hasExercises(parsed) ? nameExerciseAnchors(outline, exerciseOutline(parsed, resolved, continuation).records) : outline;
|
|
9448
|
+
}
|
|
9407
9449
|
/** The number each note's marker prints in `doc` (its first marker). */
|
|
9408
9450
|
function printedFootnoteNumbers(doc) {
|
|
9409
9451
|
const out = new Map();
|