UNPKG

@vivliostyle/core

Version:

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

211 lines (210 loc) 9.21 kB
import * as Base from "./base"; import * as Css from "./css"; import * as CssCascade from "./css-cascade"; import * as CssStyler from "./css-styler"; import * as Exprs from "./exprs"; import * as Font from "./font"; import * as Task from "./task"; import * as TaskUtil from "./task-util"; import * as Vtree from "./vtree"; import { XmlDoc } from "./types"; export declare type CustomRenderer = (p1: Element, p2: Element, p3: { [key: string]: Css.Val; }) => Task.Result<Element>; export interface CustomRendererFactory { makeCustomRenderer(xmldoc: XmlDoc.XMLDocHolder): CustomRenderer; } /** * Creates an epubReadingSystem object in the iframe.contentWindow.navigator * when load event fires. */ export declare function initIFrame(iframe: HTMLIFrameElement): void; export interface StylerProducer { getStylerForDoc(xmldoc: XmlDoc.XMLDocHolder): CssStyler.AbstractStyler; } export declare class ViewFactory extends Base.SimpleEventTarget implements Vtree.LayoutContext { readonly flowName: string; readonly context: Exprs.Context; readonly viewport: Viewport; readonly styler: CssStyler.Styler; readonly regionIds: string[]; readonly xmldoc: XmlDoc.XMLDocHolder; readonly docFaces: Font.DocumentFaces; readonly footnoteStyle: CssCascade.ElementStyle; readonly stylerProducer: StylerProducer; readonly page: Vtree.Page; readonly customRenderer: CustomRenderer; readonly fallbackMap: { [key: string]: string; }; readonly documentURLTransformer: Base.DocumentURLTransformer; private static SVG_URL_ATTRIBUTES; document: Document; exprContentListener: Vtree.ExprContentListener; nodeContext: Vtree.NodeContext | null; viewRoot: Element | null; isFootnote: boolean; sourceNode: Node | null; offsetInNode: number; viewNode: Node | null; 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: { [key: string]: string; }, documentURLTransformer: Base.DocumentURLTransformer); /** @override */ clone(): Vtree.LayoutContext; createPseudoelementShadow(element: Element, isRoot: boolean, cascStyle: CssCascade.ElementStyle, computedStyle: { [key: string]: Css.Val; }, styler: CssStyler.AbstractStyler, context: Exprs.Context, parentShadow: Vtree.ShadowContext, subShadow: Vtree.ShadowContext): Vtree.ShadowContext; getPseudoMap(cascStyle: CssCascade.ElementStyle, regionIds: string[], isFootnote: boolean, nodeContext: Vtree.NodeContext, context: Exprs.Context): CssCascade.ElementStyleMap; createRefShadow(href: string, type: Vtree.ShadowType, element: Element, parentShadow: Vtree.ShadowContext, subShadow: Vtree.ShadowContext): Task.Result<Vtree.ShadowContext>; createShadows(element: Element, isRoot: any, cascStyle: CssCascade.ElementStyle, computedStyle: { [key: string]: Css.Val; }, styler: CssStyler.AbstractStyler, context: Exprs.Context, shadowContext: Vtree.ShadowContext): Task.Result<Vtree.ShadowContext>; /** @override */ setViewRoot(viewRoot: Element, isFootnote: boolean): void; /** * @return vertical */ computeStyle(vertical: boolean, rtl: boolean, style: CssCascade.ElementStyle, computedStyle: { [key: string]: Css.Val; }): boolean; private inheritFromSourceParent; resolveURL(url: string): string; inheritLangAttribute(): void; transferPolyfilledInheritedProps(computedStyle: { [key: string]: Css.Val; }): void; resolveFormattingContext(nodeContext: Vtree.NodeContext, firstTime: boolean, display: Css.Ident, position: Css.Ident, float: Css.Ident, isRoot: boolean): void; /** * @return holding true if children should be processed */ private createElementView; /** * Check if the current element is inside multi-column element * that is not root or body element in the source tree. * * Note: vivliostyle handles multi-column on the root and body element on its own, * but leaves it to the browser to handle other multi-column. * This check is for such non-root/body multi-column. */ private isInsideNonRootMultiColumn; /** * Check if the current position is at a forced break * (Fix for Issue #690) */ private isAtForcedBreak; private processAfterIfcontinues; isSVGUrlAttribute(attributeName: string): boolean; modifyElemDimensionWithImageResolution(images: { image: HTMLElement; element: HTMLElement; fetcher: TaskUtil.Fetcher<string>; }[], imageResolution: number, computedStyle: { [key: string]: Css.Val; }, isVertical: boolean): void; private preprocessElementStyle; private findAndProcessRepeatingElements; private processRepeatOnBreak; private createTextNodeView; private preprocessTextContent; /** * @return holding true if children should be processed */ createNodeView(firstTime: boolean, atUnforcedBreak: boolean): Task.Result<boolean>; /** @override */ setCurrent(nodeContext: Vtree.NodeContext, firstTime: boolean, atUnforcedBreak?: boolean): Task.Result<boolean>; processShadowContent(pos: Vtree.NodeContext): Vtree.NodeContext; private nextPositionInTree; isTransclusion(element: Element, elementStyle: CssCascade.ElementStyle, transclusionType: string | null): boolean; /** @override */ nextInTree(position: Vtree.NodeContext, atUnforcedBreak?: boolean): Task.Result<Vtree.NodeContext>; addImageFetchers(bg: Css.Val): void; applyComputedStyles(target: Element, computedStyle: { [key: string]: Css.Val; }): void; /** * Get "lh" unit size in px */ private getLineHeightUnitSize; /** * Fix ruby text font size. * Issue #673: Minimum font size setting in Chrome causes ruby font size problem * @param target the rt element * @param value the font-size value * @returns true if the font-size fix is done */ fixRubyTextFontSize(target: Element, value: Css.Val): boolean; /** @override */ applyPseudoelementStyle(nodeContext: Vtree.NodeContext, pseudoName: string, target: Element): void; /** @override */ peelOff(nodeContext: Vtree.NodeContext, nodeOffset: number): Task.Result<Vtree.NodeContext>; createElement(ns: string, tag: string): Element; /** @override */ applyFootnoteStyle(vertical: boolean, rtl: boolean, target: Element): boolean; /** @override */ processFragmentedBlockEdge(nodeContext: Vtree.NodeContext): void; private fixClonedBoxDecorationOverflow; private createChildAnonymousBlockIfNeeded; /** @override */ convertLengthToPx(numeric: Css.Numeric, viewNode: Node, clientLayout: Vtree.ClientLayout): number | Css.Numeric; /** * Returns if two NodePositionStep are equivalent. */ isSameNodePositionStep(step1: Vtree.NodePositionStep, step2: Vtree.NodePositionStep): boolean; /** @override */ isSameNodePosition(nodePosition1: Vtree.NodePosition, nodePosition2: Vtree.NodePosition): boolean; isPseudoelement(elem: any): boolean; } export declare const propertiesNotPassedToDOM: { "float-min-wrap-block": boolean; "float-reference": boolean; "flow-into": boolean; "flow-linger": boolean; "flow-options": boolean; "flow-priority": boolean; "footnote-policy": boolean; "margin-break": boolean; page: boolean; }; export declare class DefaultClientLayout implements Vtree.ClientLayout { layoutBox: Element; window: Window; scaleRatio: number; constructor(viewport: Viewport); private scaleRect; private subtractOffsets; /** @override */ getRangeClientRects(range: Range): Vtree.ClientRect[]; /** @override */ getElementClientRect(element: Element): Vtree.ClientRect; /** @override */ getElementComputedStyle(element: Element): CSSStyleDeclaration; } export declare class Viewport { readonly window: Window; readonly fontSize: number; readonly pixelRatio: number; document: Document; root: HTMLElement; private outerZoomBox; contentContainer: HTMLElement; layoutBox: Element; width: number; height: number; constructor(window: Window, fontSize: number, pixelRatio: number, opt_root?: HTMLElement, opt_width?: number, opt_height?: number); /** * Reset zoom. */ resetZoom(): void; /** * Zoom viewport. * @param width Overall width of contents before scaling (px) * @param height Overall height of contents before scaling (px) * @param scale Factor to which the viewport will be scaled. */ zoom(width: number, height: number, scale: number): void; /** * Remove all pages inside the viewport. */ clear(): void; }