UNPKG

@vivliostyle/core

Version:

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

321 lines (320 loc) 12.4 kB
import * as Css from "./css"; import * as CssTokenizer from "./css-tokenizer"; import * as Exprs from "./exprs"; import * as Task from "./task"; import { TokenType } from "./css-tokenizer"; /** * User agent stylesheet base specificity. */ export declare const SPECIFICITY_USER_AGENT: number; /** * User stylesheet base specificity. */ export declare const SPECIFICITY_USER: number; /** * Author stylesheet ("normal" stylesheet) base specificity. */ export declare const SPECIFICITY_AUTHOR: number; /** * Style attribute base specificity. */ export declare const SPECIFICITY_STYLE: number; /** * Style attribute base specificity when !important is used. */ export declare const SPECIFICITY_STYLE_IMPORTANT: number; /** * Author stylesheet base specificity when !important is used. */ export declare const SPECIFICITY_AUTHOR_IMPORTANT: number; /** * User stylesheet base specificity when !important is used. */ export declare const SPECIFICITY_USER_IMPORTANT: number; /** * @enum {string} */ export declare enum StylesheetFlavor { USER_AGENT = "UA", USER = "User", AUTHOR = "Author" } export declare class ParserHandler implements CssTokenizer.TokenizerHandler { scope: Exprs.LexicalScope; flavor: StylesheetFlavor; constructor(scope: Exprs.LexicalScope); getCurrentToken(): CssTokenizer.Token; getScope(): Exprs.LexicalScope; error(mnemonics: string, token: CssTokenizer.Token): void; startStylesheet(flavor: StylesheetFlavor): void; tagSelector(ns: string | null, name: string | null): void; classSelector(name: string): void; pseudoclassSelector(name: string, params: (number | string)[]): void; pseudoelementSelector(name: string, params: (number | string)[]): void; idSelector(id: string): void; attributeSelector(ns: string, name: string, op: TokenType, value: string | null): void; descendantSelector(): void; childSelector(): void; adjacentSiblingSelector(): void; followingSiblingSelector(): void; nextSelector(): void; startSelectorRule(): void; startFontFaceRule(): void; startFootnoteRule(pseudoelem: string | null): void; startViewportRule(): void; startDefineRule(): void; startRegionRule(): void; startPageRule(): void; startPageMarginBoxRule(name: string): void; startWhenRule(expr: Css.Expr): void; startMediaRule(expr: Css.Expr): void; startFlowRule(flowName: string): void; startPageTemplateRule(): void; startPageMasterRule(name: string | null, pseudoName: string | null, classes: string[]): void; startPartitionRule(name: string | null, pseudoName: string | null, classes: string[]): void; startPartitionGroupRule(name: string | null, pseudoName: string | null, classes: string[]): void; startRuleBody(): void; property(name: string, value: Css.Val, important: boolean): void; endRule(): void; /** * @param funcName The name of the function taking a selector list as argument */ startFuncWithSelector(funcName: string): void; endFuncWithSelector(): void; /** * For relational pseudo-class `:has()` support */ pushSelectorText(selectorText: string): void; getImportantSpecificity(): number; getBaseSpecificity(): number; } export declare class DispatchParserHandler extends ParserHandler { stack: ParserHandler[]; tokenizer: CssTokenizer.Tokenizer; slave: ParserHandler; constructor(); pushHandler(slave: ParserHandler): void; popHandler(): void; getCurrentToken(): CssTokenizer.Token; getScope(): Exprs.LexicalScope; /** * Forwards call to slave. * @override */ error(mnemonics: string, token: CssTokenizer.Token): void; /** * Called by a slave. */ errorMsg(mnemonics: string, token: CssTokenizer.Token): void; startStylesheet(flavor: StylesheetFlavor): void; tagSelector(ns: string | null, name: string | null): void; classSelector(name: string): void; pseudoclassSelector(name: string, params: (number | string)[]): void; pseudoelementSelector(name: string, params: (number | string)[]): void; idSelector(id: string): void; attributeSelector(ns: string, name: string, op: TokenType, value: string | null): void; descendantSelector(): void; childSelector(): void; adjacentSiblingSelector(): void; followingSiblingSelector(): void; nextSelector(): void; startSelectorRule(): void; startFontFaceRule(): void; startFootnoteRule(pseudoelem: string | null): void; startViewportRule(): void; startDefineRule(): void; startRegionRule(): void; startPageRule(): void; startPageMarginBoxRule(name: string): void; startWhenRule(expr: Css.Expr): void; startFlowRule(flowName: string): void; startPageTemplateRule(): void; startPageMasterRule(name: string | null, pseudoName: string | null, classes: string[]): void; startPartitionRule(name: string | null, pseudoName: string | null, classes: string[]): void; startPartitionGroupRule(name: string | null, pseudoName: string | null, classes: string[]): void; startRuleBody(): void; property(name: string, value: Css.Val, important: boolean): void; endRule(): void; startFuncWithSelector(funcName: string): void; endFuncWithSelector(): void; pushSelectorText(selectorText: string): void; } export declare class SkippingParserHandler extends ParserHandler { owner: DispatchParserHandler; readonly topLevel: any; depth: number; constructor(scope: Exprs.LexicalScope, owner: DispatchParserHandler, topLevel: any); getCurrentToken(): CssTokenizer.Token; error(mnemonics: string, token: CssTokenizer.Token): void; startRuleBody(): void; endRule(): void; } export declare class SlaveParserHandler extends SkippingParserHandler { constructor(scope: Exprs.LexicalScope, owner: DispatchParserHandler, topLevel: boolean); report(message: string): void; reportAndSkip(message: string): void; startSelectorRule(): void; startFontFaceRule(): void; startFootnoteRule(pseudoelem: string | null): void; startViewportRule(): void; startDefineRule(): void; startRegionRule(): void; startPageRule(): void; startWhenRule(expr: Css.Expr): void; startFlowRule(flowName: string): void; startPageTemplateRule(): void; startPageMasterRule(name: string | null, pseudoName: string | null, classes: string[]): void; startPartitionRule(name: string | null, pseudoName: string | null, classes: string[]): void; startPartitionGroupRule(name: string | null, pseudoName: string | null, classes: string[]): void; startFuncWithSelector(funcName: string): void; endFuncWithSelector(): void; property(name: string, value: Css.Val, important: boolean): void; } export declare const actionsBase: Action[]; export declare const actionsStyleAttribute: Action[]; export declare const actionsSelector: Action[]; export declare const actionsSelectorInFunc: Action[]; export declare const actionsSelectorCont: Action[]; export declare const actionsSelectorStart: Action[]; export declare const actionsPropVal: Action[]; export declare const actionsExprVal: Action[]; export declare const actionsExprOp: Action[]; export declare const actionsError: Action[]; export declare const actionsErrorDecl: Action[]; export declare const actionsErrorSelector: Action[]; export declare const priority: number[]; /** * @enum {number} */ export declare enum Action { SELECTOR_NAME_1 = 1, SELECTOR_NAME = 2, SELECTOR_ANY_1 = 3, SELECTOR_ANY = 4, SELECTOR_ID_1 = 5, SELECTOR_ID = 6, SELECTOR_CLASS_1 = 7, SELECTOR_CLASS = 8, SELECTOR_ATTR_1 = 9, SELECTOR_ATTR = 10, SELECTOR_CHILD = 11, SELECTOR_SIBLING = 12, SELECTOR_BODY = 13, SELECTOR_PSEUDOCLASS = 14, VAL_IDENT = 15, VAL_HASH = 16, VAL_NUM = 17, VAL_INT = 18, VAL_NUMERIC = 19, VAL_STR = 20, VAL_URL = 21, VAL_COMMA = 22, VAL_SLASH = 23, VAL_FUNC = 24, VAL_C_PAR = 25, VAL_END = 26, RULE_END = 27, IDENT = 28, SELECTOR_START = 29, AT = 30, EXPR_IDENT = 31, EXPR_NUM = 32, EXPR_NUMERIC = 33, EXPR_STR = 34, EXPR_PARAM = 35, EXPR_PREFIX = 36, EXPR_INFIX = 37, EXPR_FUNC = 38, EXPR_C_PAR = 39, EXPR_O_PAR = 40, SELECTOR_NEXT = 41, SELECTOR_PSEUDOELEM = 42, EXPR_O_BRC = 43, VAL_FINISH = 44, EXPR_INFIX_NAME = 45, PROP = 46, VAL_BANG = 47, VAL_BRC = 48, EXPR_SEMICOL = 49, ERROR_PUSH = 50, ERROR_POP = 51, ERROR_POP_DECL = 52, ERROR_SEMICOL = 53, VAL_PLUS = 54, SELECTOR_PSEUDOCLASS_1 = 55, SELECTOR_FOLLOWING_SIBLING = 56, VAL_URANGE = 57, SELECTOR_PSEUDOELEM_1 = 58, DONE = 200 } export declare const OP_MEDIA_AND: number; export declare const OP_MEDIA_OR: number; export declare const OP_MEDIA_NOT: number; /** * @enum {number} */ export declare enum ExprContext { PROP = 0, WHEN = 1, MEDIA = 2, IMPORT = 3, SUPPORTS = 4 } export declare class Parser { actions: Action[]; tokenizer: CssTokenizer.Tokenizer; readonly handler: ParserHandler; baseURL: string; valStack: any[]; namespacePrefixToURI: { [key: string]: string; }; defaultNamespaceURI: string | null; propName: string | null; propImportant: boolean; exprContext: ExprContext; result: Css.Val; importReady: boolean; importURL: string | null; importCondition: Css.Expr; errorBrackets: number[]; ruleStack: string[]; regionRule: boolean; pageRule: boolean; inStyleDeclaration: boolean; constructor(actions: Action[], tokenizer: CssTokenizer.Tokenizer, handler: ParserHandler, baseURL: string); extractVals(sep: string, index: number): Css.Val[]; valStackReduce(sep: string, token: CssTokenizer.Token): Css.Val; exprError(mnemonics: string, token: CssTokenizer.Token): void; exprStackReduce(op: number, token: CssTokenizer.Token): boolean; readSupportsTest(token: CssTokenizer.Token): Exprs.SupportsTest; readPseudoParams(): (number | string)[]; /** * Read `an+b` argument of pseudoclasses. Roughly based on the algorithm at * https://drafts.csswg.org/css-syntax/#the-anb-type */ private readNthPseudoParams; makeCondition(classes: string | null, condition: Exprs.Val): Css.Expr; isInsidePropertyOnlyRule(): boolean; runParser(count: number, parsingValue: boolean, parsingStyleAttr: boolean, parsingMediaQuery: boolean, parsingFunctionParam: boolean, parsingRelationalSelector?: boolean): boolean; } export declare class ErrorHandler extends ParserHandler { readonly scope: Exprs.LexicalScope; constructor(scope: Exprs.LexicalScope); error(mnemonics: string, token: CssTokenizer.Token): void; getScope(): Exprs.LexicalScope; } export declare function parseStylesheet(tokenizer: CssTokenizer.Tokenizer, handler: ParserHandler, baseURL: string, classes: string | null, media: string | null): Task.Result<boolean>; export declare function parseStylesheetFromText(text: string, handler: ParserHandler, baseURL: string, classes: string | null, media: string | null): Task.Result<boolean>; export declare function parseStylesheetFromURL(url: string, handler: ParserHandler, classes: string | null, media: string | null): Task.Result<boolean>; export declare function parseValue(scope: Exprs.LexicalScope, tokenizer: CssTokenizer.Tokenizer, baseURL: string): Css.Val; export declare function parseStyleAttribute(tokenizer: CssTokenizer.Tokenizer, handler: ParserHandler, baseURL: string): void; export declare function parseMediaQuery(tokenizer: CssTokenizer.Tokenizer, handler: ParserHandler, baseURL: string): Css.Expr; export declare const numProp: { [key: string]: boolean; }; export declare function takesOnlyNum(propName: string): boolean; /** * @return val */ export declare function evaluateExprToCSS(context: Exprs.Context, val: Exprs.Val, propName: string): Css.Val;