UNPKG

@vivliostyle/core

Version:

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

74 lines (73 loc) 3.5 kB
import * as Css from "./css"; import * as PageFloats from "./page-floats"; import * as Task from "./task"; import * as Vtree from "./vtree"; import { Layout } from "./types"; export declare type ColumnLayoutResult = { columns: Layout.Column[]; position: Vtree.LayoutPosition; columnPageFloatLayoutContexts?: PageFloats.PageFloatLayoutContext[]; }; export declare type ColumnGenerator = () => Task.Result<ColumnLayoutResult | null>; export declare class ColumnBalancingTrialResult { readonly layoutResult: ColumnLayoutResult; readonly penalty: number; constructor(layoutResult: ColumnLayoutResult, penalty: number); } export declare abstract class ColumnBalancer { readonly layoutContainer: Vtree.Container; readonly columnGenerator: ColumnGenerator; readonly regionPageFloatLayoutContext: PageFloats.PageFloatLayoutContext; originalContainerBlockSize: number; constructor(layoutContainer: Vtree.Container, columnGenerator: ColumnGenerator, regionPageFloatLayoutContext: PageFloats.PageFloatLayoutContext); balanceColumns(layoutResult: ColumnLayoutResult): Task.Result<ColumnLayoutResult>; private createTrialResult; protected preBalance(layoutResult: ColumnLayoutResult): void; protected abstract calculatePenalty(layoutResult: ColumnLayoutResult): number; protected abstract hasNextCandidate(candidates: ColumnBalancingTrialResult[]): boolean; protected abstract updateCondition(candidates: ColumnBalancingTrialResult[]): void; protected postBalance(): void; savePageFloatLayoutContexts(layoutResult: ColumnLayoutResult | null): void; private restoreContents; } export declare function canReduceContainerSize(candidates: ColumnBalancingTrialResult[]): boolean; export declare function reduceContainerSize(candidates: ColumnBalancingTrialResult[], container: Vtree.Container): void; export declare class BalanceLastColumnBalancer extends ColumnBalancer { readonly columnCount: number; originalPosition: Vtree.LayoutPosition | null; foundUpperBound: boolean; constructor(columnGenerator: ColumnGenerator, regionPageFloatLayoutContext: any, layoutContainer: Vtree.Container, columnCount: number); /** * @override */ preBalance(layoutResult: ColumnLayoutResult): void; private checkPosition; /** * @override */ calculatePenalty(layoutResult: ColumnLayoutResult): number; /** * @override */ hasNextCandidate(candidates: ColumnBalancingTrialResult[]): boolean; /** * @override */ updateCondition(candidates: ColumnBalancingTrialResult[]): void; } export declare class BalanceNonLastColumnBalancer extends ColumnBalancer { constructor(columnGenerator: ColumnGenerator, regionPageFloatLayoutContext: any, layoutContainer: Vtree.Container); /** * @override */ calculatePenalty(layoutResult: ColumnLayoutResult): number; /** * @override */ hasNextCandidate(candidates: ColumnBalancingTrialResult[]): boolean; /** * @override */ updateCondition(candidates: ColumnBalancingTrialResult[]): void; } export declare function createColumnBalancer(columnCount: number, columnFill: Css.Ident, columnGenerator: ColumnGenerator, regionPageFloatLayoutContext: PageFloats.PageFloatLayoutContext, layoutContainer: Vtree.Container, columns: Layout.Column[], flowPosition: Vtree.FlowPosition): ColumnBalancer | null;