import { TagNodeTree, TagPosition } from "./common.js"; export interface ParseError { tagName: string; lineNumber: number; columnNumber: number; } export interface TagNode { readonly tag: string attrs?: Record content?: TagNodeTree, start?: TagPosition; end?: TagPosition; } export interface Token { readonly t: number // type readonly v: string // value readonly l: number // line readonly r: number // row } export interface LexerTokenizer { tokenize: () => Token[]; isTokenNested?: (tokenValue: string) => boolean; } export interface CommonOptions { openTag?: string; closeTag?: string; onlyAllowTags?: string[]; enableEscapeTags?: boolean; caseFreeTags?: boolean; whitespaceInTags?: boolean; contextFreeTags?: string[]; } export interface LexerOptions extends CommonOptions { onToken?: (token?: Token) => void; } export interface ParseOptions extends CommonOptions { createTokenizer?: (input: string, options?: LexerOptions) => LexerTokenizer; onError?: (error: ParseError) => void; }