@vivliostyle/core
Version:
Vivliostyle Core library for HTML+CSS typesetting with EPUB/Web publications support
208 lines (207 loc) • 10.2 kB
TypeScript
import * as LayoutProcessor from "./layout-processor";
import * as LayoutRetryers from "./layout-retryers";
import * as LayoutUtil from "./layout-util";
import * as Task from "./task";
import { FormattingContextType, FragmentLayoutConstraintType, Layout as LayoutType, RepetitiveElement, Vtree } from "./types";
export declare class RepetitiveElementsOwnerFormattingContext implements RepetitiveElement.RepetitiveElementsOwnerFormattingContext {
readonly parent: Vtree.FormattingContext;
readonly rootSourceNode: Element;
formattingContextType: FormattingContextType;
isRoot: boolean;
repetitiveElements: RepetitiveElement.RepetitiveElements;
constructor(parent: Vtree.FormattingContext, rootSourceNode: Element);
/**
* @override
*/
getName(): string;
/**
* @override
*/
isFirstTime(nodeContext: Vtree.NodeContext, firstTime: boolean): boolean;
/**
* @override
*/
getParent(): Vtree.FormattingContext;
getRepetitiveElements(): RepetitiveElement.RepetitiveElements;
getRootViewNode(position: Vtree.NodeContext): Element | null;
getRootNodeContext(nodeContext: Vtree.NodeContext): Vtree.NodeContext | null;
initializeRepetitiveElements(vertical: boolean): void;
/** @override */
saveState(): any;
/** @override */
restoreState(state: any): void;
}
export declare type ElementsOffset = RepetitiveElement.ElementsOffset;
export declare class RepetitiveElements implements RepetitiveElement.RepetitiveElements {
private readonly vertical;
ownerSourceNode: Element;
private headerSourceNode;
private footerSourceNode;
private headerViewNode;
private footerViewNode;
private headerNodePosition;
private footerNodePosition;
private headerHeight;
private footerHeight;
isSkipHeader: boolean;
isSkipFooter: boolean;
enableSkippingFooter: boolean;
enableSkippingHeader: boolean;
doneInitialLayout: boolean;
firstContentSourceNode: Element | null;
lastContentSourceNode: Element | null;
private affectedNodeCache;
private afterLastContentNodeCache;
allowInsert: boolean;
allowInsertRepeatitiveElements: boolean;
constructor(vertical: boolean, ownerSourceNode: Element);
setHeaderNodeContext(nodeContext: Vtree.NodeContext): void;
setFooterNodeContext(nodeContext: Vtree.NodeContext): void;
updateHeight(column: LayoutType.Column): void;
prepareLayoutFragment(): void;
appendHeaderToFragment(rootNodeContext: Vtree.NodeContext, firstChild: Node | null, column: LayoutType.Column): Task.Result<boolean>;
appendFooterToFragment(rootNodeContext: Vtree.NodeContext, firstChild: Node | null, column: LayoutType.Column): Task.Result<boolean>;
/**
* @return
*/
appendElementToFragment(nodePosition: Vtree.NodePosition, rootNodeContext: Vtree.NodeContext, firstChild: Node | null, column: LayoutType.Column): Task.Result<boolean>;
moveChildren(from: Element, to: Element, firstChild: Node | null): void;
/** @override */
calculateOffset(nodeContext: Vtree.NodeContext): number;
/** @override */
calculateMinimumOffset(nodeContext: Vtree.NodeContext): number;
isAfterLastContent(nodeContext: Vtree.NodeContext): boolean;
private affectTo;
private findResultFromCache;
private isAfterNodeContextOf;
isFirstContentNode(nodeContext: Vtree.NodeContext): boolean;
isEnableToUpdateState(): boolean;
updateState(): void;
preventSkippingHeader(): void;
preventSkippingFooter(): void;
isHeaderRegistered(): boolean;
isFooterRegistered(): boolean;
isHeaderSourceNode(node: Node): boolean;
isFooterSourceNode(node: Node): boolean;
}
/**
* @abstract
*/
export declare abstract class LayoutEntireBlock implements LayoutType.LayoutMode {
formattingContext: RepetitiveElement.RepetitiveElementsOwnerFormattingContext;
constructor(formattingContext: RepetitiveElement.RepetitiveElementsOwnerFormattingContext);
/**
* @override
*/
abstract doLayout(nodeContext: Vtree.NodeContext, column: LayoutType.Column): Task.Result<Vtree.NodeContext>;
/**
* @override
*/
accept(nodeContext: Vtree.NodeContext, column: LayoutType.Column): boolean;
/**
* @override
*/
postLayout(positionAfter: Vtree.NodeContext, initialPosition: Vtree.NodeContext, column: LayoutType.Column, accepted: boolean): boolean;
}
/**
* @abstract
*/
export declare abstract class LayoutFragmentedBlock implements LayoutType.LayoutMode {
formattingContext: RepetitiveElement.RepetitiveElementsOwnerFormattingContext;
constructor(formattingContext: RepetitiveElement.RepetitiveElementsOwnerFormattingContext);
/**
* @override
*/
abstract doLayout(nodeContext: Vtree.NodeContext, column: LayoutType.Column): Task.Result<Vtree.NodeContext>;
/**
* @override
*/
accept(nodeContext: Vtree.NodeContext, column: LayoutType.Column): boolean;
/**
* @override
*/
postLayout(positionAfter: Vtree.NodeContext, initialPosition: Vtree.NodeContext, column: LayoutType.Column, accepted: boolean): boolean;
}
export declare class LayoutEntireOwnerBlock extends LayoutEntireBlock {
readonly processor: RepetitiveElementsOwnerLayoutProcessor;
constructor(formattingContext: RepetitiveElement.RepetitiveElementsOwnerFormattingContext, processor: RepetitiveElementsOwnerLayoutProcessor);
/**
* @override
*/
doLayout(nodeContext: Vtree.NodeContext, column: LayoutType.Column): Task.Result<Vtree.NodeContext>;
/**
* @override
*/
accept(nodeContext: Vtree.NodeContext, column: LayoutType.Column): boolean;
}
export declare class LayoutFragmentedOwnerBlock extends LayoutFragmentedBlock {
readonly processor: RepetitiveElementsOwnerLayoutProcessor;
constructor(formattingContext: RepetitiveElement.RepetitiveElementsOwnerFormattingContext, processor: RepetitiveElementsOwnerLayoutProcessor);
/**
* @override
*/
doLayout(nodeContext: Vtree.NodeContext, column: LayoutType.Column): Task.Result<Vtree.NodeContext>;
}
export declare class RepetitiveElementsOwnerLayoutConstraint implements RepetitiveElement.RepetitiveElementsOwnerLayoutConstraint {
flagmentLayoutConstraintType: FragmentLayoutConstraintType;
nodeContext: Vtree.NodeContext;
constructor(nodeContext: Vtree.NodeContext);
/** @override */
allowLayout(nodeContext: Vtree.NodeContext, overflownNodeContext: Vtree.NodeContext, column: LayoutType.Column): boolean;
/** @override */
nextCandidate(nodeContext: Vtree.NodeContext): boolean;
/** @override */
postLayout(allowed: boolean, positionAfter: Vtree.NodeContext, initialPosition: Vtree.NodeContext, column: LayoutType.Column): void;
/** @override */
finishBreak(nodeContext: Vtree.NodeContext, column: LayoutType.Column): Task.Result<boolean>;
getRepetitiveElements(): RepetitiveElement.RepetitiveElements;
/** @override */
equalsTo(constraint: LayoutType.FragmentLayoutConstraint): boolean;
/** @override */
getPriorityOfFinishBreak(): number;
}
export declare class RepetitiveElementsOwnerLayoutRetryer extends LayoutRetryers.AbstractLayoutRetryer {
readonly formattingContext: RepetitiveElement.RepetitiveElementsOwnerFormattingContext;
private readonly processor;
constructor(formattingContext: RepetitiveElement.RepetitiveElementsOwnerFormattingContext, processor: RepetitiveElementsOwnerLayoutProcessor);
/**
* @override
*/
resolveLayoutMode(nodeContext: Vtree.NodeContext): LayoutType.LayoutMode;
}
export declare class EntireBlockLayoutStrategy extends LayoutUtil.EdgeSkipper {
readonly formattingContext: RepetitiveElement.RepetitiveElementsOwnerFormattingContext;
readonly column: LayoutType.Column;
constructor(formattingContext: RepetitiveElement.RepetitiveElementsOwnerFormattingContext, column: LayoutType.Column);
/**
* @override
*/
startNonInlineElementNode(state: LayoutUtil.LayoutIteratorState): void | Task.Result<boolean>;
/**
* @override
*/
afterNonInlineElementNode(state: LayoutUtil.LayoutIteratorState): void | Task.Result<boolean>;
}
export declare class FragmentedBlockLayoutStrategy extends LayoutUtil.EdgeSkipper {
readonly formattingContext: RepetitiveElementsOwnerFormattingContext;
readonly column: LayoutType.Column;
constructor(formattingContext: RepetitiveElementsOwnerFormattingContext, column: LayoutType.Column);
}
export declare class RepetitiveElementsOwnerLayoutProcessor extends LayoutProcessor.BlockLayoutProcessor implements LayoutProcessor.LayoutProcessor {
layout(nodeContext: Vtree.NodeContext, column: LayoutType.Column, leadingEdge: boolean): Task.Result<Vtree.NodeContext>;
startNonInlineElementNode(nodeContext: Vtree.NodeContext): boolean;
doInitialLayout(nodeContext: Vtree.NodeContext, column: LayoutType.Column): Task.Result<Vtree.NodeContext>;
private layoutEntireBlock;
doLayout(nodeContext: Vtree.NodeContext, column: LayoutType.Column): Task.Result<Vtree.NodeContext>;
/**
* @override
*/
finishBreak(column: LayoutType.Column, nodeContext: Vtree.NodeContext, forceRemoveSelf: boolean, endOfColumn: boolean): Task.Result<boolean> | null;
/**
* @override
*/
clearOverflownViewNodes(column: LayoutType.Column, parentNodeContext: Vtree.NodeContext, nodeContext: Vtree.NodeContext, removeSelf: boolean): void;
}
export declare function appendHeaderToAncestors(nodeContext: Vtree.NodeContext, column: LayoutType.Column): void;
export declare function appendHeader(formattingContext: RepetitiveElement.RepetitiveElementsOwnerFormattingContext, nodeContext: Vtree.NodeContext, column: LayoutType.Column): Task.Result<boolean>;
export declare function appendFooter(formattingContext: RepetitiveElement.RepetitiveElementsOwnerFormattingContext, nodeContext: Vtree.NodeContext, column: LayoutType.Column): Task.Result<boolean>;