import Scanner from '@emmetio/scanner'; export declare type FastScanCallback = (name: string, type: ElementType, start: number, end: number) => false | any; export declare const enum ElementType { Open = 1, Close = 2, SelfClose = 3, CData = 4, ProcessingInstruction = 5, Comment = 6, ERB = 7 } export interface SpecialType { [tagName: string]: string[] | null; } export declare const enum Chars { /** `-` character */ Dash = 45, /** `.` character */ Dot = 46, /** `/` character */ Slash = 47, /** `:` character */ Colon = 58, /** `<` character */ LeftAngle = 60, /** `>` character */ RightAngle = 62, /** `(` character */ LeftRound = 40, /** `)` character */ RightRound = 41, /** `[` character */ LeftSquare = 91, /** `]` character */ RightSquare = 93, /** `{` character */ LeftCurly = 123, /** `}` character */ RightCurly = 125, /** `_` character */ Underscore = 95, /** `=` character */ Equals = 61, /** `*` character */ Asterisk = 42, /** `#` character */ Hash = 35 } export interface ScannerOptions { /** * Parses given source as XML document. It alters how should-be-empty * elements are treated: for example, in XML mode parser will try to locate * closing pair for `
` tag */ xml: boolean; /** * List of tags that should have special parsing rules, e.g. should not parse * inner content and skip to closing tag. Key is a tag name that should be * considered special and value is either empty (always mark element as special) * or list of `type` attribute values, which, if present with one of this value, * make element special */ special: SpecialType; /** * List of elements that should be treated as empty (e.g. without closing tag) * in non-XML syntax */ empty: string[]; /** * If enabled, scanner callback will receive XML tokes, including comment, cdata * and processing instructions. If disabled, only tags are emitted */ allTokens: boolean; } /** Options for `Scanner` utils */ export declare const opt: { throws: boolean; }; export declare function createOptions(options?: Partial): ScannerOptions; /** * Converts given string into array of character codes */ export declare function toCharCodes(str: string): number[]; /** * Consumes array of character codes from given scanner */ export declare function consumeArray(scanner: Scanner, codes: number[]): boolean; /** * Consumes section from given string which starts with `open` character codes * and ends with `close` character codes * @return Returns `true` if section was consumed */ export declare function consumeSection(scanner: Scanner, open: number[], close: number[], allowUnclosed?: boolean): boolean; /** * Check if given character can be used as a start of tag name or attribute */ export declare function nameStartChar(ch: number): boolean; /** * Check if given character can be used in a tag or attribute name */ export declare function nameChar(ch: number): boolean; /** * Consumes identifier from given scanner */ export declare function ident(scanner: Scanner): boolean; /** * Check if given code is tag terminator */ export declare function isTerminator(code: number): boolean; /** * Check if given character code is valid unquoted value */ export declare function isUnquoted(code: number): boolean; /** * Consumes paired tokens (like `[` and `]`) with respect of nesting and embedded * quoted values * @return `true` if paired token was consumed */ export declare function consumePaired(scanner: Scanner): boolean; /** * Returns unquoted value of given string */ export declare function getUnquotedValue(value: string): string;