@vivliostyle/core
Version:
Vivliostyle Core library for HTML+CSS typesetting with EPUB/Web publications support
305 lines (304 loc) • 13.2 kB
TypeScript
import * as Css from "./css";
import * as CssCascade from "./css-cascade";
import * as CssParser from "./css-parser";
import * as CssValidator from "./css-validator";
import * as Exprs from "./exprs";
import * as Font from "./font";
import * as Vtree from "./vtree";
export declare let keyCount: number;
/**
* Represent an at-rule which creates a page-level CSS box (page-master,
* partition, and partition-group).
*/
export declare abstract class PageBox<I extends PageBoxInstance = PageBoxInstance<any>> {
readonly name: string | null;
readonly pseudoName: string | null;
readonly classes: string[];
readonly parent: PageBox;
specified: CssCascade.ElementStyle;
children: PageBox[];
pageMaster: PageMaster;
index: number;
key: string;
protected _scope: Exprs.LexicalScope;
get scope(): Exprs.LexicalScope;
constructor(scope: Exprs.LexicalScope, name: string | null, pseudoName: string | null, classes: string[], parent: PageBox);
createInstance(parentInstance: PageBoxInstance): PageBoxInstance;
/**
* Clone the PageBox.
* @param param parent: The parent of the cloned PageBox.
* pseudoName: Assign this value as the pseudoName of the cloned PageBox.
*/
clone(param: {
parent?: PageBox;
pseudoName?: string;
}): PageBox<I>;
/**
* Copy 'specified' properties to another instance.
* @param dest The PageBox into which 'specified' properties are copied
*/
protected copySpecified(dest: PageBox): void;
/**
* Clone children with the specified PageBox as their parent.
*/
protected cloneChildren(parent: PageBox): void;
}
/**
* Parent of all page masters
*/
export declare class RootPageBox extends PageBox<RootPageBoxInstance> {
constructor(scope: Exprs.LexicalScope);
}
export declare class PageMasterScope extends Exprs.LexicalScope {
pageMaster: PageMaster;
constructor(scope: Exprs.LexicalScope, pageMaster: PageMaster);
}
/**
* Represent a page-master rule
*/
export declare class PageMaster<I extends PageMasterInstance = PageMasterInstance<any>> extends PageBox<I> {
readonly condition: Exprs.Val;
readonly specificity: number;
pageMaster: PageMaster;
keyMap: {
[key: string]: string;
};
constructor(scope: Exprs.LexicalScope, name: string | null, pseudoName: string | null, classes: string[], parent: RootPageBox, condition: Exprs.Val, specificity: number);
/**
* @override
*/
createInstance(parentInstance: any): PageBoxInstance;
/**
* @override
*/
clone(param: any): PageMaster;
/**
* Point the pageMaster reference in the PageMasterScope to the current page
* master. This is needed when a page master is cloned and shares a common
* scope with the original page master. Since every Exprs.Val which the
* page master holds has a reference to the scope and uses it for variable
* resolution, this reference must be updated properly before the page master
* instance is used.
*/
resetScope(): void;
}
/**
* Represent a partition-group rule
*/
export declare class PartitionGroup extends PageBox<PartitionGroupInstance> {
pageMaster: PageMaster;
constructor(scope: Exprs.LexicalScope, name: string | null, pseudoName: string | null, classes: string[], parent: PageBox);
/**
* @override
*/
createInstance(parentInstance: PageBoxInstance): PageBoxInstance;
/**
* @override
*/
clone(param: any): PartitionGroup;
}
/**
* Represent a partition rule
*/
export declare class Partition<I extends PartitionInstance = PartitionInstance> extends PageBox<I> {
pageMaster: PageMaster;
constructor(scope: Exprs.LexicalScope, name: string | null, pseudoName: string | null, classes: string[], parent: PageBox);
/**
* @override
*/
createInstance(parentInstance: any): PageBoxInstance;
/**
* @override
*/
clone(param: any): Partition;
}
/**
* @param def default value
*/
export declare function toExprIdent(scope: Exprs.LexicalScope, val: Css.Val, def: string): Exprs.Val;
export declare function toExprAuto(scope: Exprs.LexicalScope, val: Css.Val, ref: Exprs.Val): Exprs.Val;
export declare function toExprNormal(scope: Exprs.LexicalScope, val: Css.Val, ref: Exprs.Val): Exprs.Val;
export declare function toExprZero(scope: Exprs.LexicalScope, val: Css.Val, ref: Exprs.Val): Exprs.Val;
/**
* If the value is not specified (null), returns zero.
* If the value is 'auto', returns null.
* Otherwise, return the value itself.
*/
export declare function toExprZeroAuto(scope: Exprs.LexicalScope, val: Css.Val, ref: Exprs.Val): Exprs.Val;
export declare function toExprZeroBorder(scope: Exprs.LexicalScope, val: Css.Val, styleVal: Css.Val, ref: Exprs.Val): Exprs.Val;
export declare function toExprBool(scope: Exprs.LexicalScope, val: Css.Val, def: Exprs.Val): Exprs.Val;
export interface InstanceHolder extends Exprs.Context {
registerInstance(key: string, instance: PageBoxInstance): void;
/**
* @return instance
*/
lookupInstance(key: string): PageBoxInstance;
}
export declare class PageBoxInstance<P extends PageBox = PageBox<any>> {
readonly parentInstance: PageBoxInstance;
readonly pageBox: P;
/**
* cascaded styles, geometric ones converted to Css.Expr
*/
protected cascaded: CssCascade.ElementStyle;
style: {
[key: string]: Css.Val;
};
private autoWidth;
private autoHeight;
children: PageBoxInstance[];
isAutoWidth: boolean;
isAutoHeight: boolean;
isTopDependentOnAutoHeight: boolean;
isRightDependentOnAutoWidth: boolean;
private calculatedWidth;
private calculatedHeight;
pageMasterInstance: PageMasterInstance;
namedValues: {
[key: string]: Exprs.Val;
};
namedFuncs: {
[key: string]: Exprs.Val;
};
vertical: boolean;
rtl: boolean;
suppressEmptyBoxGeneration: boolean;
constructor(parentInstance: PageBoxInstance, pageBox: P);
/**
* Reset information related to layout.
*/
reset(): void;
private addNamedValues;
resolveName(name: string): Exprs.Val;
resolveFunc(name: any): Exprs.Val;
private initEnabled;
protected boxSpecificEnabled(enabled: Exprs.Val): Exprs.Val;
protected initHorizontal(): void;
protected initVertical(): void;
private initColumns;
private depends;
private init;
getProp(context: Exprs.Context, name: string): Css.Val;
getPropAsNumber(context: Exprs.Context, name: string): number;
getSpecial(context: Exprs.Context, name: string): Css.Val[];
getActiveRegions(context: Exprs.Context): string[];
propagateProperty(context: Exprs.Context, container: Vtree.Container, name: string, docFaces: Font.DocumentFaces): void;
propagatePropertyToElement(context: Exprs.Context, element: Element, name: string, docFaces: Font.DocumentFaces): void;
propagateDelayedProperty(context: Exprs.Context, container: Vtree.Container, name: string, delayedItems: Vtree.DelayedItem[]): void;
assignLeftPosition(context: Exprs.Context, container: Vtree.Container): void;
assignRightPosition(context: Exprs.Context, container: Vtree.Container): void;
assignTopPosition(context: Exprs.Context, container: Vtree.Container): void;
assignBottomPosition(context: Exprs.Context, container: Vtree.Container): void;
assignBeforePosition(context: Exprs.Context, container: Vtree.Container): void;
assignAfterPosition(context: Exprs.Context, container: Vtree.Container): void;
assignStartEndPosition(context: Exprs.Context, container: Vtree.Container): void;
sizeWithMaxHeight(context: Exprs.Context, container: Vtree.Container): void;
sizeWithMaxWidth(context: Exprs.Context, container: Vtree.Container): void;
prepareContainer(context: Exprs.Context, container: Vtree.Container, page: Vtree.Page, docFaces: Font.DocumentFaces, clientLayout: Vtree.ClientLayout): void;
transferContentProps(context: Exprs.Context, container: Vtree.Container, page: Vtree.Page, docFaces: Font.DocumentFaces): void;
transferSinglUriContentProps(context: Exprs.Context, element: Element, docFaces: Font.DocumentFaces): void;
/**
* @param column (null when content comes from the content property)
*/
finishContainer(context: Exprs.Context, container: Vtree.Container, page: Vtree.Page, column: Vtree.Container, columnCount: number, clientLayout: Vtree.ClientLayout, docFaces: Font.DocumentFaces): void;
applyCascadeAndInit(cascade: CssCascade.CascadeInstance, docElementStyle: CssCascade.ElementStyle): void;
resolveAutoSizing(context: Exprs.Context): void;
}
/**
* Properties that are passed through before the layout.
*/
export declare const passPreProperties: string[];
/**
* Properties that are passed through after the layout.
*/
export declare const passPostProperties: string[];
/**
* Only passed when there is content assigned by the content property.
*/
export declare const passContentProperties: string[];
export declare const passSingleUriContentProperties: string[];
export declare const delayedProperties: string[];
export declare const userAgentPageMasterPseudo = "background-host";
export declare class RootPageBoxInstance extends PageBoxInstance<RootPageBox> {
constructor(pageBox: RootPageBox);
/**
* @override
*/
applyCascadeAndInit(cascade: CssCascade.CascadeInstance, docElementStyle: CssCascade.ElementStyle): void;
}
export declare class PageMasterInstance<P extends PageMaster = PageMaster<PageMasterInstance<any>>> extends PageBoxInstance<P> {
pageMasterInstance: PageMasterInstance;
constructor(parentInstance: PageBoxInstance, pageBox: P);
/**
* @override
*/
boxSpecificEnabled(enabled: Exprs.Val): Exprs.Val;
/**
* Called after layout of contents of the page has done to adjust the overall
* page layout. Override in subclasses.
*/
adjustPageLayout(context: Exprs.Context, page: Vtree.Page, clientLayout: Vtree.ClientLayout): void;
}
export declare class PartitionGroupInstance extends PageBoxInstance<PartitionGroup> {
pageMasterInstance: PageMasterInstance;
constructor(parentInstance: PageBoxInstance, pageBox: PageBox);
}
export declare class PartitionInstance<P extends Partition = Partition<PartitionInstance<any>>> extends PageBoxInstance<P> {
pageMasterInstance: PageMasterInstance;
constructor(parentInstance: PageBoxInstance, pageBox: P);
processPartitionList(enabled: Exprs.Val, listVal: Css.Val, conflicting: boolean): Exprs.Val;
/**
* @override
*/
boxSpecificEnabled(enabled: Exprs.Val): Exprs.Val;
/**
* @override
*/
prepareContainer(context: Exprs.Context, container: Vtree.Container, page: Vtree.Page, docFaces: Font.DocumentFaces, clientLayout: Vtree.ClientLayout): void;
}
export declare class PageBoxParserHandler extends CssParser.SlaveParserHandler implements CssValidator.PropertyReceiver {
readonly target: PageBox;
readonly validatorSet: CssValidator.ValidatorSet;
constructor(scope: Exprs.LexicalScope, owner: CssParser.DispatchParserHandler, target: PageBox, validatorSet: CssValidator.ValidatorSet);
/**
* @override
*/
property(name: string, value: Css.Val, important: boolean): void;
/**
* @override
*/
unknownProperty(name: string, value: Css.Val): void;
/**
* @override
*/
invalidPropertyValue(name: string, value: Css.Val): void;
/**
* @override
*/
simpleProperty(name: string, value: Css.Val, important: any): void;
}
export declare class PartitionParserHandler extends PageBoxParserHandler {
constructor(scope: Exprs.LexicalScope, owner: CssParser.DispatchParserHandler, target: Partition, validatorSet: CssValidator.ValidatorSet);
}
export declare class PartitionGroupParserHandler extends PageBoxParserHandler {
constructor(scope: Exprs.LexicalScope, owner: CssParser.DispatchParserHandler, target: PartitionGroup, validatorSet: CssValidator.ValidatorSet);
/**
* @override
*/
startPartitionRule(name: string | null, pseudoName: string | null, classes: string[]): void;
/**
* @override
*/
startPartitionGroupRule(name: string | null, pseudoName: string | null, classes: string[]): void;
}
export declare class PageMasterParserHandler extends PageBoxParserHandler {
constructor(scope: Exprs.LexicalScope, owner: CssParser.DispatchParserHandler, target: PageMaster, validatorSet: CssValidator.ValidatorSet);
/**
* @override
*/
startPartitionRule(name: string | null, pseudoName: string | null, classes: string[]): void;
/**
* @override
*/
startPartitionGroupRule(name: string | null, pseudoName: string | null, classes: string[]): void;
}