UNPKG

@vivliostyle/core

Version:

Vivliostyle Core library for HTML+CSS typesetting with EPUB/Web publications support

345 lines (344 loc) 14.9 kB
import * as BreakPosition from "./break-position"; import * as LayoutProcessor from "./layout-processor"; import * as LayoutRetryers from "./layout-retryers"; import * as LayoutUtil from "./layout-util"; import * as RepetitiveElementImpl from "./repetitive-element"; import * as Task from "./task"; import * as Layout from "./layout"; import { FormattingContextType, FragmentLayoutConstraintType, Layout as LayoutType, RepetitiveElement, Table, Vtree } from "./types"; export declare class TableRow { readonly rowIndex: number; readonly sourceNode: Node; cells: TableCell[]; constructor(rowIndex: number, sourceNode: Node); addCell(cell: TableCell): void; getMinimumHeight(): number; } export declare class TableCell { readonly rowIndex: number; readonly columnIndex: number; viewElement: Element | null; colSpan: number; rowSpan: number; height: number; anchorSlot: TableSlot; constructor(rowIndex: number, columnIndex: number, viewElement: Element); setHeight(height: number): void; setAnchorSlot(slot: TableSlot): void; } export declare class TableSlot { readonly rowIndex: number; readonly columnIndex: number; readonly cell: TableCell; constructor(rowIndex: number, columnIndex: number, cell: TableCell); } export declare class TableCellFragment { readonly column: Layout.Column; readonly cellNodeContext: Vtree.NodeContext; pseudoColumn: Layout.PseudoColumn; empty: boolean; constructor(column: Layout.Column, pseudoColumnContainer: Element, cellNodeContext: Vtree.NodeContext); findAcceptableBreakPosition(): Layout.BreakPositionAndNodeContext; } export declare class TableCaptionView { readonly viewNode: Element; readonly side: string; constructor(viewNode: Element, side: string); } export declare class BetweenTableRowBreakPosition extends BreakPosition.EdgeBreakPosition { private formattingContext; acceptableCellBreakPositions: Layout.BreakPositionAndNodeContext[]; private rowIndex; constructor(position: Vtree.NodeContext, breakOnEdge: string | null, overflows: boolean, columnBlockSize: number); /** * @override */ findAcceptableBreak(column: Layout.Column, penalty: number): Vtree.NodeContext; /** * @override */ getMinBreakPenalty(): number; getAcceptableCellBreakPositions(): Layout.BreakPositionAndNodeContext[]; private getRowIndex; private getCellFragments; } export declare class InsideTableRowBreakPosition extends BreakPosition.AbstractBreakPosition { readonly rowIndex: number; readonly beforeNodeContext: Vtree.NodeContext; readonly formattingContext: TableFormattingContext; acceptableCellBreakPositions: Layout.BreakPositionAndNodeContext[]; constructor(rowIndex: number, beforeNodeContext: Vtree.NodeContext, formattingContext: TableFormattingContext); /** * @override */ findAcceptableBreak(column: Layout.Column, penalty: number): Vtree.NodeContext; /** * @override */ getMinBreakPenalty(): number; getAcceptableCellBreakPositions(): Layout.BreakPositionAndNodeContext[]; private getCellFragments; } export declare type BrokenTableCellPosition = { cellNodePosition: Vtree.NodePosition; breakChunkPosition: Vtree.ChunkPosition; cell: TableCell; }; /** * @param tableSourceNode Source node of the table */ export declare class TableFormattingContext extends RepetitiveElementImpl.RepetitiveElementsOwnerFormattingContext implements Table.TableFormattingContext { readonly tableSourceNode: Element; formattingContextType: FormattingContextType; vertical: boolean; columnCount: number; tableWidth: number; captions: TableCaptionView[]; colGroups: DocumentFragment | null; colWidths: number[] | null; inlineBorderSpacing: number; rows: TableRow[]; slots: TableSlot[][]; cellFragments: TableCellFragment[][]; lastRowViewNode: Element | null; cellBreakPositions: BrokenTableCellPosition[]; repetitiveElements: RepetitiveElement.RepetitiveElements | null; constructor(parent: Vtree.FormattingContext, tableSourceNode: Element); /** * @override */ getName(): string; /** * @override */ isFirstTime(nodeContext: Vtree.NodeContext, firstTime: boolean): boolean; /** * @override */ getParent(): Vtree.FormattingContext; finishFragment(): void; addRow(rowIndex: number, row: TableRow): void; getRowSlots(rowIndex: number): TableSlot[]; addCell(rowIndex: number, cell: TableCell): void; getRowByIndex(index: number): TableRow; findRowIndexBySourceNode(sourceNode: Node): number; addCellFragment(rowIndex: number, columnIndex: number, cellFragment: TableCellFragment): void; getCellsFallingOnRow(rowIndex: number): TableCell[]; getRowSpanningCellsOverflowingTheRow(rowIndex: number): TableCell[]; getCellFragmentOfCell(cell: TableCell): TableCellFragment; isFreelyFragmentableRow(row: TableRow): boolean; getColumnCount(): number; updateCellSizes(clientLayout: Vtree.ClientLayout): void; /** * @return position */ findCellFromColumn(column: Layout.Column): { rowIndex: number; columnIndex: number; } | null; collectElementsOffsetOfUpperCells(position: { rowIndex: number; columnIndex: number; } | null): RepetitiveElement.ElementsOffset[]; collectElementsOffsetOfHighestColumn(): RepetitiveElement.ElementsOffset[]; private collectElementsOffsetFromColumn; /** @override */ saveState(): any; /** @override */ restoreState(state: any): void; } export declare class ElementsOffsetOfTableCell implements RepetitiveElement.ElementsOffset { readonly repeatitiveElementsInColumns: RepetitiveElement.ElementsOffset[][]; constructor(repeatitiveElementsInColumns: RepetitiveElement.ElementsOffset[][]); /** @override */ calculateOffset(nodeContext: Vtree.NodeContext): number; /** @override */ calculateMinimumOffset(nodeContext: Vtree.NodeContext): number; private calculateMaxOffsetOfColumn; } export declare class EntireTableLayoutStrategy extends LayoutUtil.EdgeSkipper { readonly formattingContext: TableFormattingContext; readonly column: Layout.Column; rowIndex: number; columnIndex: number; inRow: boolean; checkPoints: Vtree.NodeContext[]; inHeaderOrFooter: boolean; constructor(formattingContext: TableFormattingContext, column: Layout.Column); /** * @override */ startNonInlineElementNode(state: LayoutUtil.LayoutIteratorState): void | Task.Result<boolean>; /** * @override */ afterNonInlineElementNode(state: LayoutUtil.LayoutIteratorState): void | Task.Result<boolean>; /** @override */ startNonElementNode(state: LayoutUtil.LayoutIteratorState): void | Task.Result<boolean>; /** @override */ afterNonElementNode(state: LayoutUtil.LayoutIteratorState): void | Task.Result<boolean>; /** @override */ startInlineElementNode(state: LayoutUtil.LayoutIteratorState): void | Task.Result<boolean>; /** @override */ afterInlineElementNode(state: LayoutUtil.LayoutIteratorState): void | Task.Result<boolean>; registerCheckPoint(state: LayoutUtil.LayoutIteratorState): void; postLayoutBlockContents(state: LayoutUtil.LayoutIteratorState): void; } export declare class TableLayoutStrategy extends LayoutUtil.EdgeSkipper { readonly formattingContext: TableFormattingContext; readonly column: Layout.Column; private static ignoreList; inRow: boolean; currentRowIndex: number; currentColumnIndex: number; originalStopAtOverflow: boolean; inHeader: boolean; inFooter: boolean; constructor(formattingContext: TableFormattingContext, column: Layout.Column); resetColumn(): void; getColSpanningCellWidth(cell: TableCell): number; layoutCell(cell: TableCell, cellNodeContext: Vtree.NodeContext, startChunkPosition: Vtree.ChunkPosition): Task.Result<boolean>; hasBrokenCellAtSlot(slotIndex: any): boolean; private extractRowSpanningCellBreakPositions; layoutRowSpanningCellsFromPreviousFragment(state: LayoutUtil.LayoutIteratorState): Task.Result<boolean>; startTableRow(state: LayoutUtil.LayoutIteratorState): Task.Result<boolean>; private registerCellFragmentIndex; startTableCell(state: LayoutUtil.LayoutIteratorState): Task.Result<boolean>; startNonInlineBox(state: LayoutUtil.LayoutIteratorState): Task.Result<boolean>; endNonInlineBox(state: LayoutUtil.LayoutIteratorState): Task.Result<boolean>; afterNonInlineElementNode(state: LayoutUtil.LayoutIteratorState): void | Task.Result<boolean>; } export declare class TableLayoutProcessor implements LayoutProcessor.LayoutProcessor { private layoutEntireTable; private getColumnWidths; private getColGroupElements; private normalizeAndGetColElements; private addMissingColElements; /** * Measure width of columns and normalize colgroup and col elements so that * each column has a corresponding col element with the width specified. */ normalizeColGroups(formattingContext: TableFormattingContext, tableElement: Element, column: Layout.Column): void; doInitialLayout(nodeContext: Vtree.NodeContext, column: Layout.Column): Task.Result<Vtree.NodeContext>; addCaptions(formattingContext: TableFormattingContext, rootViewNode: Element, firstChild: Node | null): void; addColGroups(formattingContext: TableFormattingContext, rootViewNode: Element, firstChild: Node | null): void; removeColGroups(formattingContext: TableFormattingContext, rootViewNode: Element): void; doLayout(nodeContext: Vtree.NodeContext, column: Layout.Column): Task.Result<Vtree.NodeContext>; /** * @override */ layout(nodeContext: Vtree.NodeContext, column: Layout.Column, leadingEdge: boolean): Task.Result<Vtree.NodeContext>; /** * @override */ createEdgeBreakPosition(position: Vtree.NodeContext, breakOnEdge: string | null, overflows: boolean, columnBlockSize: number): LayoutType.BreakPosition; /** * @override */ startNonInlineElementNode(nodeContext: Vtree.NodeContext): boolean; /** * @override */ afterNonInlineElementNode(nodeContext: Vtree.NodeContext, stopAtOverflow: boolean): boolean; /** * @override */ finishBreak(column: Layout.Column, nodeContext: Vtree.NodeContext, forceRemoveSelf: boolean, endOfColumn: boolean): Task.Result<boolean>; /** @override */ clearOverflownViewNodes(column: Layout.Column, parentNodeContext: Vtree.NodeContext, nodeContext: Vtree.NodeContext, removeSelf: boolean): void; } export declare class LayoutRetryer extends LayoutRetryers.AbstractLayoutRetryer { private tableFormattingContext; private readonly processor; constructor(tableFormattingContext: TableFormattingContext, processor: TableLayoutProcessor); /** * @override */ resolveLayoutMode(nodeContext: Vtree.NodeContext): LayoutType.LayoutMode; /** * @override */ clearNodes(initialPosition: Vtree.NodeContext): void; /** * @override */ restoreState(nodeContext: Vtree.NodeContext, column: Layout.Column): void; } export declare class LayoutEntireTable extends RepetitiveElementImpl.LayoutEntireBlock { readonly processor: TableLayoutProcessor; constructor(formattingContext: TableFormattingContext, processor: TableLayoutProcessor); /** * @override */ doLayout(nodeContext: Vtree.NodeContext, column: Layout.Column): Task.Result<Vtree.NodeContext>; } export declare class EntireTableBreakPosition extends BreakPosition.EdgeBreakPosition { constructor(tableNodeContext: Vtree.NodeContext); /** * @override */ getMinBreakPenalty(): number; /** * @override */ breakPositionChosen(column: Layout.Column): void; } export declare class EntireTableLayoutConstraint implements Layout.FragmentLayoutConstraint { tableRootNode: Node; flagmentLayoutConstraintType: FragmentLayoutConstraintType; constructor(tableRootNode: Node); /** * @override */ allowLayout(nodeContext: Vtree.NodeContext, overflownNodeContext: Vtree.NodeContext, column: Layout.Column): boolean; /** * @override */ nextCandidate(nodeContext: Vtree.NodeContext): boolean; /** * @override */ postLayout(allowed: boolean, positionAfter: Vtree.NodeContext, initialPosition: Vtree.NodeContext, column: Layout.Column): void; /** * @override */ finishBreak(nodeContext: Vtree.NodeContext, column: Layout.Column): Task.Result<boolean>; /** * @override */ equalsTo(constraint: Layout.FragmentLayoutConstraint): boolean; /** * @override */ getPriorityOfFinishBreak(): number; } export declare class LayoutFragmentedTable extends RepetitiveElementImpl.LayoutFragmentedBlock { readonly processor: TableLayoutProcessor; constructor(formattingContext: TableFormattingContext, processor: TableLayoutProcessor); /** * @override */ doLayout(nodeContext: Vtree.NodeContext, column: Layout.Column): Task.Result<Vtree.NodeContext>; } export declare class TableRowLayoutConstraint extends RepetitiveElementImpl.RepetitiveElementsOwnerLayoutConstraint implements Table.TableRowLayoutConstraint { flagmentLayoutConstraintType: FragmentLayoutConstraintType; cellFragmentLayoutConstraints: { constraints: Layout.FragmentLayoutConstraint[]; breakPosition: Vtree.NodeContext; }[]; constructor(nodeContext: Vtree.NodeContext); /** @override */ allowLayout(nodeContext: Vtree.NodeContext, overflownNodeContext: Vtree.NodeContext, column: Layout.Column): boolean; /** @override */ nextCandidate(nodeContext: Vtree.NodeContext): boolean; /** @override */ postLayout(allowed: boolean, positionAfter: Vtree.NodeContext, initialPosition: Vtree.NodeContext, column: Layout.Column): void; /** @override */ finishBreak(nodeContext: Vtree.NodeContext, column: Layout.Column): Task.Result<boolean>; removeDummyRowNodes(nodeContext: Vtree.NodeContext): void; private collectCellFragmentLayoutConstraints; private getCellFragemnts; getElementsOffsetsForTableCell(column: Layout.Column): RepetitiveElement.ElementsOffset[]; /** @override */ equalsTo(constraint: Layout.FragmentLayoutConstraint): boolean; }