@vivliostyle/core 2.40.0 → 2.42.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/lib/vivliostyle/adaptive-viewer.d.ts +5 -0
- package/lib/vivliostyle/assets.d.ts +6 -6
- package/lib/vivliostyle/base.d.ts +6 -0
- package/lib/vivliostyle/break.d.ts +6 -0
- package/lib/vivliostyle/cmyk-store.d.ts +8 -0
- package/lib/vivliostyle/columns.d.ts +7 -0
- package/lib/vivliostyle/core-viewer.d.ts +1 -0
- package/lib/vivliostyle/counters.d.ts +52 -0
- package/lib/vivliostyle/css-cascade.d.ts +46 -5
- package/lib/vivliostyle/css-nesting.d.ts +20 -0
- package/lib/vivliostyle/css-page.d.ts +20 -0
- package/lib/vivliostyle/css-parser.d.ts +1 -0
- package/lib/vivliostyle/css-prop.d.ts +6 -2
- package/lib/vivliostyle/css-styler.d.ts +15 -0
- package/lib/vivliostyle/epub.d.ts +27 -1
- package/lib/vivliostyle/footnotes.d.ts +3 -2
- package/lib/vivliostyle/layout-helper.d.ts +39 -5
- package/lib/vivliostyle/layout.d.ts +48 -4
- package/lib/vivliostyle/ops.d.ts +42 -0
- package/lib/vivliostyle/page-floats.d.ts +64 -2
- package/lib/vivliostyle/plugin.d.ts +13 -1
- package/lib/vivliostyle/pseudo-element.d.ts +0 -4
- package/lib/vivliostyle/repetitive-element.d.ts +7 -0
- package/lib/vivliostyle/semantic-footnote.d.ts +74 -0
- package/lib/vivliostyle/table.d.ts +24 -1
- package/lib/vivliostyle/types.d.ts +17 -10
- package/lib/vivliostyle/vgen.d.ts +37 -3
- package/lib/vivliostyle/vtree.d.ts +1 -1
- package/lib/vivliostyle.js +114 -64
- package/lib/vivliostyle.js.map +4 -4
- package/package.json +4 -3
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2026 Vivliostyle Foundation
|
|
3
|
+
*
|
|
4
|
+
* Vivliostyle.js is free software: you can redistribute it and/or modify
|
|
5
|
+
* it under the terms of the GNU Affero General Public License as published by
|
|
6
|
+
* the Free Software Foundation, either version 3 of the License, or
|
|
7
|
+
* (at your option) any later version.
|
|
8
|
+
*
|
|
9
|
+
* Vivliostyle.js is distributed in the hope that it will be useful,
|
|
10
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
11
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
12
|
+
* GNU Affero General Public License for more details.
|
|
13
|
+
*
|
|
14
|
+
* You should have received a copy of the GNU Affero General Public License
|
|
15
|
+
* along with Vivliostyle.js. If not, see <http://www.gnu.org/licenses/>.
|
|
16
|
+
*
|
|
17
|
+
* @fileoverview Semantic footnote helper utilities.
|
|
18
|
+
*
|
|
19
|
+
* This module owns semantic-footnote-specific rules that are independent from
|
|
20
|
+
* the main view-generation flow: element/reference detection, shared marker
|
|
21
|
+
* attributes, first-reference bookkeeping, and style-merging helpers that can
|
|
22
|
+
* be driven by injected style accessors.
|
|
23
|
+
*
|
|
24
|
+
* Keep view-tree sequencing and DOM construction in vgen.ts. Extend this
|
|
25
|
+
* module when new DPUB/EPUB semantic footnote behavior can be expressed as
|
|
26
|
+
* pure reference/style helpers that do not need direct access to ViewFactory
|
|
27
|
+
* state.
|
|
28
|
+
*/
|
|
29
|
+
import * as Css from "./css";
|
|
30
|
+
import * as Exprs from "./exprs";
|
|
31
|
+
import * as Vtree from "./vtree";
|
|
32
|
+
import { CssCascade } from "./types";
|
|
33
|
+
export declare const SEMANTIC_FOOTNOTE_FIRST_REF_ATTR = "data-vivliostyle-footnote-first-ref";
|
|
34
|
+
export declare const SEMANTIC_FOOTNOTE_REFERENCED_ATTR = "data-vivliostyle-footnote-referenced";
|
|
35
|
+
type CascadeValueLike = {
|
|
36
|
+
value: Css.Val;
|
|
37
|
+
priority: number;
|
|
38
|
+
evaluate?: (context: Exprs.Context, propName: string) => Css.Val;
|
|
39
|
+
filterValue?: (visitor: unknown) => CascadeValueLike;
|
|
40
|
+
};
|
|
41
|
+
type ElementStyleMap = {
|
|
42
|
+
[key: string]: CssCascade.ElementStyle;
|
|
43
|
+
};
|
|
44
|
+
export type SemanticFootnoteStyleAccess = {
|
|
45
|
+
getStyle: (element: Element) => CssCascade.ElementStyle | null;
|
|
46
|
+
getProp: (style: CssCascade.ElementStyle | null | undefined, propName: string) => CascadeValueLike | null | undefined;
|
|
47
|
+
getStyleMap: (style: CssCascade.ElementStyle, mapName: string) => ElementStyleMap | null | undefined;
|
|
48
|
+
getMutableStyleMap: (style: CssCascade.ElementStyle, mapName: string) => ElementStyleMap;
|
|
49
|
+
createCascadeValue: (value: Css.Val, priority: number) => CascadeValueLike;
|
|
50
|
+
filterFootnoteMarkerContent: (content: CascadeValueLike, element: Element) => Css.Val;
|
|
51
|
+
};
|
|
52
|
+
export type SemanticFootnoteStyleState = {
|
|
53
|
+
sourceStyle: CssCascade.ElementStyle | null;
|
|
54
|
+
footnoteDisplay: Css.Val | null;
|
|
55
|
+
footnotePolicy: Css.Ident | null;
|
|
56
|
+
};
|
|
57
|
+
export declare function isSemanticFootnoteElement(element: Element): boolean;
|
|
58
|
+
export declare function isSemanticFootnoteNoterefElement(element: Element): boolean;
|
|
59
|
+
export declare function resolveSemanticFootnoteReference(element: Element, baseURL: string): string | null;
|
|
60
|
+
export declare function resolveSemanticFootnoteTarget(element: Element, baseURL: string, resolveElement: (reference: string) => Element | null): Element | null;
|
|
61
|
+
export declare function initializeFirstSemanticFootnoteReferenceOffsets(ownerDocument: Document, baseURL: string, getElementOffset: (element: Element) => number, firstRefOffsets: Map<string, number>, initialized: {
|
|
62
|
+
value: boolean;
|
|
63
|
+
}): void;
|
|
64
|
+
export declare function shouldGenerateSemanticFootnote(element: Element, baseURL: string, getElementOffset: (element: Element) => number, firstRefOffsets: Map<string, number>, initialized: {
|
|
65
|
+
value: boolean;
|
|
66
|
+
}): boolean;
|
|
67
|
+
export declare function mergeSemanticFootnoteIncludeStyle(element: Element, elementStyle: CssCascade.ElementStyle, shadowContext: Vtree.ShadowContext | null, baseURL: string, resolveElement: (reference: string) => Element | null, footnoteCounterAttr: string, styleAccess: SemanticFootnoteStyleAccess): CssCascade.ElementStyle;
|
|
68
|
+
export declare function mergeSemanticFootnoteRootStyle(element: Element, elementStyle: CssCascade.ElementStyle, shadowContext: Vtree.ShadowContext | null, context: Exprs.Context, styleAccess: SemanticFootnoteStyleAccess): CssCascade.ElementStyle;
|
|
69
|
+
export declare function getSemanticFootnoteStyleState(element: Element, shadowContext: Vtree.ShadowContext | null, styleAccess: SemanticFootnoteStyleAccess): SemanticFootnoteStyleState;
|
|
70
|
+
export declare function resolveMarkerContentValue(val: Css.Val, context: Exprs.Context): Css.Val;
|
|
71
|
+
export declare function refreshSemanticFootnoteMarkerContent(sourceStyle: CssCascade.ElementStyle | null, computedStyle: {
|
|
72
|
+
[key: string]: Css.Val;
|
|
73
|
+
}, context: Exprs.Context): void;
|
|
74
|
+
export {};
|
|
@@ -10,6 +10,8 @@ export declare class TableRow {
|
|
|
10
10
|
readonly rowIndex: number;
|
|
11
11
|
readonly sourceNode: Node;
|
|
12
12
|
cells: TableCell[];
|
|
13
|
+
breakBefore: string | null;
|
|
14
|
+
breakAfter: string | null;
|
|
13
15
|
constructor(rowIndex: number, sourceNode: Node);
|
|
14
16
|
addCell(cell: TableCell): void;
|
|
15
17
|
getMinimumHeight(): number;
|
|
@@ -51,6 +53,13 @@ export declare class BetweenTableRowBreakPosition extends BreakPosition.EdgeBrea
|
|
|
51
53
|
private rowIndex;
|
|
52
54
|
constructor(position: Vtree.NodeContext, breakOnEdge: string | null, overflows: boolean, columnBlockSize: number);
|
|
53
55
|
findAcceptableBreak(column: Layout.Column, penalty: number): Vtree.NodeContext;
|
|
56
|
+
/**
|
|
57
|
+
* Check if any non-spanning cell in the row has content that wasn't fully
|
|
58
|
+
* rendered. This happens when page floats (footnotes) reduce available space
|
|
59
|
+
* during a retry, causing cell content to overflow within the row even though
|
|
60
|
+
* the row boundary appears acceptable. (Issue #1663)
|
|
61
|
+
*/
|
|
62
|
+
private hasUnfinishedCells;
|
|
54
63
|
getMinBreakPenalty(): number;
|
|
55
64
|
getAcceptableCellBreakPositions(): Layout.BreakPositionAndNodeContext[];
|
|
56
65
|
private getRowIndex;
|
|
@@ -161,10 +170,19 @@ export declare class TableLayoutStrategy extends LayoutUtil.EdgeSkipper {
|
|
|
161
170
|
inHeader: boolean;
|
|
162
171
|
inFooter: boolean;
|
|
163
172
|
constructor(formattingContext: TableFormattingContext, column: Layout.Column);
|
|
173
|
+
startNonInlineElementNode(state: LayoutUtil.LayoutIteratorState): void | Task.Result<boolean>;
|
|
164
174
|
resetColumn(): void;
|
|
165
175
|
getColSpanningCellWidth(cell: TableCell): number;
|
|
166
176
|
layoutCell(cell: TableCell, cellNodeContext: Vtree.NodeContext, startChunkPosition: Vtree.ChunkPosition): Task.Result<boolean>;
|
|
167
|
-
|
|
177
|
+
/**
|
|
178
|
+
* Find the break position for the cell at the given slot index.
|
|
179
|
+
* Returns the break position and its index in cellBreakPositions, or null if not found.
|
|
180
|
+
* Uses sourceNode matching instead of sequential index to support layout retry (issue #1663).
|
|
181
|
+
*/
|
|
182
|
+
findBrokenCellAtSlot(slotIndex: number, sourceNode: Node): {
|
|
183
|
+
position: BrokenTableCellPosition;
|
|
184
|
+
index: number;
|
|
185
|
+
} | null;
|
|
168
186
|
private extractRowSpanningCellBreakPositions;
|
|
169
187
|
layoutRowSpanningCellsFromPreviousFragment(state: LayoutUtil.LayoutIteratorState): Task.Result<boolean>;
|
|
170
188
|
startTableRow(state: LayoutUtil.LayoutIteratorState): Task.Result<boolean>;
|
|
@@ -186,6 +204,11 @@ export declare class TableLayoutProcessor implements LayoutProcessor.LayoutProce
|
|
|
186
204
|
*/
|
|
187
205
|
normalizeColGroups(formattingContext: TableFormattingContext, tableElement: Element, column: Layout.Column): void;
|
|
188
206
|
doInitialLayout(nodeContext: Vtree.NodeContext, column: Layout.Column): Task.Result<Vtree.NodeContext>;
|
|
207
|
+
/**
|
|
208
|
+
* Check if any row inside the table has a forced break value
|
|
209
|
+
* (propagated from cells or set on the row itself).
|
|
210
|
+
*/
|
|
211
|
+
private hasForcedBreakInRows;
|
|
189
212
|
addCaptions(formattingContext: TableFormattingContext, rootViewNode: Element, firstChild: Node | null): void;
|
|
190
213
|
addColGroups(formattingContext: TableFormattingContext, rootViewNode: Element, firstChild: Node | null): void;
|
|
191
214
|
removeColGroups(formattingContext: TableFormattingContext, rootViewNode: Element): void;
|
|
@@ -110,6 +110,7 @@ export declare namespace Layout {
|
|
|
110
110
|
last: Node;
|
|
111
111
|
viewDocument: Document;
|
|
112
112
|
flowRootFormattingContext: Vtree.FormattingContext;
|
|
113
|
+
isNonFirstColumn: boolean;
|
|
113
114
|
isFloat: boolean;
|
|
114
115
|
isFootnote: boolean;
|
|
115
116
|
startEdge: number;
|
|
@@ -142,6 +143,7 @@ export declare namespace Layout {
|
|
|
142
143
|
pseudoParent: Column;
|
|
143
144
|
nodeContextOverflowingDueToRepetitiveElements: Vtree.NodeContext | null;
|
|
144
145
|
blockDistanceToBlockEndFloats: number;
|
|
146
|
+
lastLineStride: number;
|
|
145
147
|
computedBlockSize: number;
|
|
146
148
|
layoutContext: Vtree.LayoutContext;
|
|
147
149
|
clientLayout: Vtree.ClientLayout;
|
|
@@ -235,8 +237,8 @@ export declare namespace Layout {
|
|
|
235
237
|
* Layout a single float element.
|
|
236
238
|
*/
|
|
237
239
|
layoutFloat(nodeContext: Vtree.NodeContext): Task.Result<Vtree.NodeContext>;
|
|
238
|
-
setupFloatArea(area: PageFloatArea, floatReference: PageFloats.FloatReference, floatSide: string, anchorEdge: number | null, strategy: PageFloats.PageFloatLayoutStrategy, condition: PageFloats.PageFloatPlacementCondition): boolean
|
|
239
|
-
createPageFloatArea(float: PageFloats.PageFloat | null, floatSide: string, anchorEdge: number | null, strategy: PageFloats.PageFloatLayoutStrategy, condition: PageFloats.PageFloatPlacementCondition): PageFloatArea | null
|
|
240
|
+
setupFloatArea(area: PageFloatArea, floatReference: PageFloats.FloatReference, floatSide: string, anchorEdge: number | null, strategy: PageFloats.PageFloatLayoutStrategy, condition: PageFloats.PageFloatPlacementCondition): Task.Result<boolean>;
|
|
241
|
+
createPageFloatArea(float: PageFloats.PageFloat | null, floatSide: string, anchorEdge: number | null, strategy: PageFloats.PageFloatLayoutStrategy, condition: PageFloats.PageFloatPlacementCondition): Task.Result<PageFloatArea | null>;
|
|
240
242
|
layoutSinglePageFloatFragment(continuations: PageFloats.PageFloatContinuation[], floatSide: string, clearSide: string | null, allowFragmented: boolean, strategy: PageFloats.PageFloatLayoutStrategy, anchorEdge: number | null, pageFloatFragment?: PageFloats.PageFloatFragment | null): Task.Result<SinglePageFloatLayoutResult>;
|
|
241
243
|
layoutPageFloatInner(continuation: PageFloats.PageFloatContinuation, strategy: PageFloats.PageFloatLayoutStrategy, anchorEdge: number | null, pageFloatFragment?: PageFloats.PageFloatFragment): Task.Result<boolean>;
|
|
242
244
|
setFloatAnchorViewNode(nodeContext: Vtree.NodeContext): Vtree.NodeContext;
|
|
@@ -286,10 +288,6 @@ export declare namespace Layout {
|
|
|
286
288
|
* Determines if a page break is acceptable at this position
|
|
287
289
|
*/
|
|
288
290
|
isBreakable(flowPosition: Vtree.NodeContext): boolean;
|
|
289
|
-
/**
|
|
290
|
-
* Determines if an indent value is zero
|
|
291
|
-
*/
|
|
292
|
-
zeroIndent(val: string | number): boolean;
|
|
293
291
|
/**
|
|
294
292
|
* @return true if overflows
|
|
295
293
|
*/
|
|
@@ -384,6 +382,7 @@ export declare namespace Layout {
|
|
|
384
382
|
readonly parentContainer: Vtree.Container;
|
|
385
383
|
convertPercentageSizesToPx(target: Element): void;
|
|
386
384
|
fixFloatSizeAndPosition(nodeContext: Vtree.NodeContext): void;
|
|
385
|
+
getContentBlockMarginAfter(): number;
|
|
387
386
|
getContentInlineSize(): number;
|
|
388
387
|
}
|
|
389
388
|
}
|
|
@@ -437,6 +436,8 @@ export declare namespace PageFloats {
|
|
|
437
436
|
interface PageFloat {
|
|
438
437
|
order: number | null;
|
|
439
438
|
id: PageFloatID | null;
|
|
439
|
+
insidePageFloatArea: boolean;
|
|
440
|
+
parentPageFloat: PageFloat | null;
|
|
440
441
|
readonly nodePosition: Vtree.NodePosition;
|
|
441
442
|
readonly floatReference: FloatReference;
|
|
442
443
|
readonly floatSide: string;
|
|
@@ -476,11 +477,14 @@ export declare namespace PageFloats {
|
|
|
476
477
|
writingMode: Css.Val;
|
|
477
478
|
direction: Css.Val;
|
|
478
479
|
floatFragments: PageFloatFragment[];
|
|
480
|
+
ignoreFootnoteAreaMaxHeight: boolean;
|
|
479
481
|
readonly parent: PageFloatLayoutContext;
|
|
482
|
+
readonly effectiveParent: PageFloatLayoutContext | null;
|
|
480
483
|
readonly flowName: string | null;
|
|
481
484
|
readonly generatingNodePosition: Vtree.NodePosition | null;
|
|
482
485
|
getContainer(floatReference?: FloatReference): Vtree.Container;
|
|
483
486
|
setContainer(container: Vtree.Container): any;
|
|
487
|
+
setOuterContext(outerContext: PageFloatLayoutContext): void;
|
|
484
488
|
addPageFloat(float: PageFloat): void;
|
|
485
489
|
getPageFloatLayoutContext(floatReference: FloatReference): PageFloatLayoutContext;
|
|
486
490
|
findPageFloatByNodePosition(nodePosition: Vtree.NodePosition): PageFloat | null;
|
|
@@ -490,15 +494,18 @@ export declare namespace PageFloats {
|
|
|
490
494
|
findPageFloatFragment(float: PageFloat): PageFloatFragment | null;
|
|
491
495
|
hasFloatFragments(condition?: (p1: PageFloatFragment) => boolean): boolean;
|
|
492
496
|
hasContinuingFloatFragmentsInFlow(flowName: string): boolean;
|
|
497
|
+
markPageFloatAnchorSeen(float: PageFloat): void;
|
|
493
498
|
registerPageFloatAnchor(float: PageFloat, anchorViewNode: Node): void;
|
|
494
499
|
collectPageFloatAnchors(): any;
|
|
495
500
|
isAnchorAlreadyAppeared(floatId: PageFloatID): boolean;
|
|
496
501
|
deferPageFloat(continuation: PageFloatContinuation): void;
|
|
502
|
+
removeFloatDeferredToNext(float: PageFloat): void;
|
|
497
503
|
hasPrecedingFloatsDeferredToNext(float: PageFloat, ignoreReference?: boolean): boolean;
|
|
498
504
|
getLastFollowingFloatInFragments(float: PageFloat): PageFloat | null;
|
|
499
505
|
getDeferredPageFloatContinuations(flowName?: string | null): PageFloatContinuation[];
|
|
500
506
|
getPageFloatContinuationsDeferredToNext(flowName?: string | null): PageFloatContinuation[];
|
|
501
507
|
getFloatsDeferredToNextInChildContexts(): PageFloat[];
|
|
508
|
+
initFootnoteRetryFromEmptyFragment(float: PageFloat, area: Layout.PageFloatArea): boolean;
|
|
502
509
|
checkAndForbidNotAllowedFloat(): boolean;
|
|
503
510
|
checkAndForbidFloatFollowingDeferredFloat(): boolean;
|
|
504
511
|
finish(): void;
|
|
@@ -522,7 +529,8 @@ export declare namespace PageFloats {
|
|
|
522
529
|
setFloatAreaDimensions(area: Layout.PageFloatArea, floatReference: FloatReference, floatSide: string, anchorEdge: number | null, init: boolean, force: boolean, condition: PageFloatPlacementCondition): string | null;
|
|
523
530
|
getFloatFragmentExclusions(): GeometryUtil.Shape[];
|
|
524
531
|
getMaxReachedAfterEdge(): number;
|
|
525
|
-
|
|
532
|
+
getBlockEndEdgeOfBlockStartFloats(inlinePos?: number): number;
|
|
533
|
+
getBlockStartEdgeOfBlockEndFloats(inlinePos?: number): number;
|
|
526
534
|
getPageFloatClearEdge(clear: string, column: Layout.Column): number;
|
|
527
535
|
getPageFloatPlacementCondition(float: PageFloat, floatSide: string, clearSide: string | null): PageFloatPlacementCondition;
|
|
528
536
|
getLayoutConstraints(): Layout.LayoutConstraint[];
|
|
@@ -538,7 +546,7 @@ export declare namespace PageFloats {
|
|
|
538
546
|
createPageFloat(nodeContext: Vtree.NodeContext, pageFloatLayoutContext: PageFloatLayoutContext, column: Layout.Column): Task.Result<PageFloat>;
|
|
539
547
|
createPageFloatFragment(continuations: PageFloatContinuation[], floatSide: string, clearSide: string | null, floatArea: Layout.PageFloatArea, continues: boolean): PageFloatFragment;
|
|
540
548
|
findPageFloatFragment(float: PageFloat, pageFloatLayoutContext: PageFloatLayoutContext): PageFloatFragment | null;
|
|
541
|
-
adjustPageFloatArea(floatArea: Layout.PageFloatArea, floatContainer: Vtree.Container, column: Layout.Column):
|
|
549
|
+
adjustPageFloatArea(floatArea: Layout.PageFloatArea, floatContainer: Vtree.Container, column: Layout.Column): Task.Result<void>;
|
|
542
550
|
forbid(float: PageFloat, pageFloatLayoutContext: PageFloatLayoutContext): any;
|
|
543
551
|
}
|
|
544
552
|
}
|
|
@@ -707,7 +715,7 @@ export declare namespace Vtree {
|
|
|
707
715
|
* @param target element to apply styles to
|
|
708
716
|
* @return vertical
|
|
709
717
|
*/
|
|
710
|
-
applyFootnoteStyle(vertical: boolean, rtl: boolean, target: Element): boolean
|
|
718
|
+
applyFootnoteStyle(vertical: boolean, rtl: boolean, target: Element): Task.Result<boolean>;
|
|
711
719
|
/**
|
|
712
720
|
* Peel off innermost first-XXX pseudoelement, create and create view nodes
|
|
713
721
|
* after the end of that pseudoelement.
|
|
@@ -883,7 +891,6 @@ export declare namespace Vtree {
|
|
|
883
891
|
clearSide: string | null;
|
|
884
892
|
floatMinWrapBlock: Css.Numeric | null;
|
|
885
893
|
columnSpan: Css.Val | null;
|
|
886
|
-
verticalAlign: string;
|
|
887
894
|
captionSide: string;
|
|
888
895
|
inlineBorderSpacing: number;
|
|
889
896
|
blockBorderSpacing: number;
|
|
@@ -38,9 +38,18 @@ export declare class ViewFactory extends Base.SimpleEventTarget implements Vtree
|
|
|
38
38
|
[key: string]: string;
|
|
39
39
|
};
|
|
40
40
|
readonly documentURLTransformer: Base.DocumentURLTransformer;
|
|
41
|
+
readonly pageProps?: {
|
|
42
|
+
[key: string]: CssCascade.ElementStyle;
|
|
43
|
+
};
|
|
44
|
+
readonly cascadedPageStyle?: CssCascade.ElementStyle;
|
|
45
|
+
private readonly semanticFootnoteFirstRefOffsets;
|
|
46
|
+
private readonly semanticFootnoteFirstRefOffsetsInitialized;
|
|
41
47
|
private static SVG_URL_ATTRIBUTES;
|
|
48
|
+
private static FOOTNOTE_CALL_OWNER_ATTR;
|
|
42
49
|
document: Document;
|
|
43
50
|
exprContentListener: Vtree.ExprContentListener;
|
|
51
|
+
private computedStyleParentFontSizeOverride;
|
|
52
|
+
private computedStyleParentLineHeightOverride;
|
|
44
53
|
nodeContext: Vtree.NodeContext | null;
|
|
45
54
|
viewRoot: Element | null;
|
|
46
55
|
isFootnote: boolean;
|
|
@@ -49,9 +58,14 @@ export declare class ViewFactory extends Base.SimpleEventTarget implements Vtree
|
|
|
49
58
|
viewNode: Node | null;
|
|
50
59
|
constructor(flowName: string, context: Exprs.Context, viewport: Viewport, styler: CssStyler.Styler, regionIds: string[], xmldoc: XmlDoc.XMLDocHolder, docFaces: Font.DocumentFaces, footnoteStyle: CssCascade.ElementStyle, stylerProducer: StylerProducer, page: Vtree.Page, customRenderer: CustomRenderer, fallbackMap: {
|
|
51
60
|
[key: string]: string;
|
|
52
|
-
}, documentURLTransformer: Base.DocumentURLTransformer
|
|
61
|
+
}, documentURLTransformer: Base.DocumentURLTransformer, pageProps?: {
|
|
62
|
+
[key: string]: CssCascade.ElementStyle;
|
|
63
|
+
}, cascadedPageStyle?: CssCascade.ElementStyle, semanticFootnoteFirstRefOffsets?: Map<string, number | null>, semanticFootnoteFirstRefOffsetsInitialized?: {
|
|
64
|
+
value: boolean;
|
|
65
|
+
});
|
|
53
66
|
/** @override */
|
|
54
67
|
clone(): Vtree.LayoutContext;
|
|
68
|
+
private syncSemanticFootnoteCounterToTarget;
|
|
55
69
|
createPseudoelementShadow(element: Element, isRoot: boolean, cascStyle: CssCascade.ElementStyle, computedStyle: {
|
|
56
70
|
[key: string]: Css.Val;
|
|
57
71
|
}, styler: CssStyler.AbstractStyler, context: Exprs.Context, parentShadow: Vtree.ShadowContext, subShadow: Vtree.ShadowContext): Vtree.ShadowContext;
|
|
@@ -125,7 +139,22 @@ export declare class ViewFactory extends Base.SimpleEventTarget implements Vtree
|
|
|
125
139
|
setCurrent(nodeContext: Vtree.NodeContext, firstTime: boolean, atUnforcedBreak?: boolean): Task.Result<boolean>;
|
|
126
140
|
processShadowContent(pos: Vtree.NodeContext): Vtree.NodeContext;
|
|
127
141
|
private nextPositionInTree;
|
|
128
|
-
|
|
142
|
+
/**
|
|
143
|
+
* Find a footnote-call element immediately before the given view node.
|
|
144
|
+
*/
|
|
145
|
+
private findImmediateFootnoteCallSibling;
|
|
146
|
+
/**
|
|
147
|
+
* True for semantic footnotes that already provide a noteref call in source
|
|
148
|
+
* (EPUB or DPUB-ARIA pattern), so an extra ::footnote-call must not be inserted.
|
|
149
|
+
*/
|
|
150
|
+
private isSemanticFootnoteElement;
|
|
151
|
+
/**
|
|
152
|
+
* Insert a footnote-call NodeContext before the footnote element.
|
|
153
|
+
* The footnote-call will be processed as a normal inline element,
|
|
154
|
+
* then shadowSibling will lead to the footnote element.
|
|
155
|
+
* (Issue #868)
|
|
156
|
+
*/
|
|
157
|
+
private insertFootnoteCall;
|
|
129
158
|
/** @override */
|
|
130
159
|
nextInTree(position: Vtree.NodeContext, atUnforcedBreak?: boolean): Task.Result<Vtree.NodeContext>;
|
|
131
160
|
addImageFetchers(bg: Css.Val): void;
|
|
@@ -140,6 +169,10 @@ export declare class ViewFactory extends Base.SimpleEventTarget implements Vtree
|
|
|
140
169
|
* @returns parsed and adjusted value in px, or null if cannot parse as "px" unit, e.g. "normal"
|
|
141
170
|
*/
|
|
142
171
|
private parsePlusLayoutUnitAdj;
|
|
172
|
+
private getFootnoteAreaInheritedMetrics;
|
|
173
|
+
private getComputedFontMetrics;
|
|
174
|
+
private getParentViewStyle;
|
|
175
|
+
private getParentComputedMetrics;
|
|
143
176
|
/**
|
|
144
177
|
* Get "lh" unit size in px
|
|
145
178
|
* @return line-height in px, or null if cannot be determined
|
|
@@ -156,7 +189,7 @@ export declare class ViewFactory extends Base.SimpleEventTarget implements Vtree
|
|
|
156
189
|
peelOff(nodeContext: Vtree.NodeContext, nodeOffset: number): Task.Result<Vtree.NodeContext>;
|
|
157
190
|
createElement(ns: string, tag: string): Element;
|
|
158
191
|
/** @override */
|
|
159
|
-
applyFootnoteStyle(vertical: boolean, rtl: boolean, target: Element): boolean
|
|
192
|
+
applyFootnoteStyle(vertical: boolean, rtl: boolean, target: Element): Task.Result<boolean>;
|
|
160
193
|
/** @override */
|
|
161
194
|
processFragmentedBlockEdge(nodeContext: Vtree.NodeContext): void;
|
|
162
195
|
private fixClonedBoxDecorationOverflow;
|
|
@@ -178,6 +211,7 @@ export declare const propertiesNotPassedToDOM: {
|
|
|
178
211
|
"flow-linger": boolean;
|
|
179
212
|
"flow-options": boolean;
|
|
180
213
|
"flow-priority": boolean;
|
|
214
|
+
"footnote-display": boolean;
|
|
181
215
|
"footnote-policy": boolean;
|
|
182
216
|
"margin-break": boolean;
|
|
183
217
|
page: boolean;
|
|
@@ -123,6 +123,7 @@ export type Whitespace = Vtree.Whitespace;
|
|
|
123
123
|
*/
|
|
124
124
|
export declare function whitespaceFromPropertyValue(whitespace: string): Whitespace | null;
|
|
125
125
|
export declare function canIgnore(node: Node, whitespace?: Whitespace): boolean;
|
|
126
|
+
export declare function canIgnoreText(text: string, whitespace?: Whitespace): boolean;
|
|
126
127
|
export declare class Flow {
|
|
127
128
|
readonly flowName: string;
|
|
128
129
|
readonly parentFlowName: string | null;
|
|
@@ -222,7 +223,6 @@ export declare class NodeContext implements Vtree.NodeContext {
|
|
|
222
223
|
clearSide: string | null;
|
|
223
224
|
floatMinWrapBlock: Css.Numeric | null;
|
|
224
225
|
columnSpan: Css.Val | null;
|
|
225
|
-
verticalAlign: string;
|
|
226
226
|
captionSide: string;
|
|
227
227
|
inlineBorderSpacing: number;
|
|
228
228
|
blockBorderSpacing: number;
|