|
import { Tokenizer, TokenizerMode, type TokenHandler } from '../tokenizer/index.js'; |
|
import { OpenElementStack, type StackHandler } from './open-element-stack.js'; |
|
import { FormattingElementList } from './formatting-element-list.js'; |
|
import { ERR, type ParserErrorHandler } from '../common/error-codes.js'; |
|
import { TAG_ID as $, NS } from '../common/html.js'; |
|
import type { TreeAdapter, TreeAdapterTypeMap } from '../tree-adapters/interface.js'; |
|
import { type Token, type CommentToken, type CharacterToken, type TagToken, type DoctypeToken, type EOFToken, type LocationWithAttributes } from '../common/token.js'; |
|
declare enum InsertionMode { |
|
INITIAL = 0, |
|
BEFORE_HTML = 1, |
|
BEFORE_HEAD = 2, |
|
IN_HEAD = 3, |
|
IN_HEAD_NO_SCRIPT = 4, |
|
AFTER_HEAD = 5, |
|
IN_BODY = 6, |
|
TEXT = 7, |
|
IN_TABLE = 8, |
|
IN_TABLE_TEXT = 9, |
|
IN_CAPTION = 10, |
|
IN_COLUMN_GROUP = 11, |
|
IN_TABLE_BODY = 12, |
|
IN_ROW = 13, |
|
IN_CELL = 14, |
|
IN_SELECT = 15, |
|
IN_SELECT_IN_TABLE = 16, |
|
IN_TEMPLATE = 17, |
|
AFTER_BODY = 18, |
|
IN_FRAMESET = 19, |
|
AFTER_FRAMESET = 20, |
|
AFTER_AFTER_BODY = 21, |
|
AFTER_AFTER_FRAMESET = 22 |
|
} |
|
export interface ParserOptions<T extends TreeAdapterTypeMap> { |
|
|
|
|
|
|
|
|
|
|
|
|
|
scriptingEnabled?: boolean; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
sourceCodeLocationInfo?: boolean; |
|
|
|
|
|
|
|
|
|
|
|
treeAdapter?: TreeAdapter<T>; |
|
|
|
|
|
|
|
|
|
|
|
onParseError?: ParserErrorHandler | null; |
|
} |
|
export declare class Parser<T extends TreeAdapterTypeMap> implements TokenHandler, StackHandler<T> { |
|
fragmentContext: T['element'] | null; |
|
scriptHandler: null | ((pendingScript: T['element']) => void); |
|
treeAdapter: TreeAdapter<T>; |
|
onParseError: ParserErrorHandler | null; |
|
private currentToken; |
|
options: Required<ParserOptions<T>>; |
|
document: T['document']; |
|
constructor(options?: ParserOptions<T>, document?: T['document'], fragmentContext?: T['element'] | null, scriptHandler?: null | ((pendingScript: T['element']) => void)); |
|
static parse<T extends TreeAdapterTypeMap>(html: string, options?: ParserOptions<T>): T['document']; |
|
static getFragmentParser<T extends TreeAdapterTypeMap>(fragmentContext?: T['parentNode'] | null, options?: ParserOptions<T>): Parser<T>; |
|
getFragment(): T['documentFragment']; |
|
tokenizer: Tokenizer; |
|
stopped: boolean; |
|
insertionMode: InsertionMode; |
|
originalInsertionMode: InsertionMode; |
|
fragmentContextID: $; |
|
headElement: null | T['element']; |
|
formElement: null | T['element']; |
|
openElements: OpenElementStack<T>; |
|
activeFormattingElements: FormattingElementList<T>; |
|
|
|
private currentNotInHTML; |
|
|
|
|
|
|
|
|
|
tmplInsertionModeStack: InsertionMode[]; |
|
pendingCharacterTokens: CharacterToken[]; |
|
hasNonWhitespacePendingCharacterToken: boolean; |
|
framesetOk: boolean; |
|
skipNextNewLine: boolean; |
|
fosterParentingEnabled: boolean; |
|
_err(token: Token, code: ERR, beforeToken?: boolean): void; |
|
onItemPush(node: T['parentNode'], tid: number, isTop: boolean): void; |
|
onItemPop(node: T['parentNode'], isTop: boolean): void; |
|
private _setContextModes; |
|
_switchToTextParsing(currentToken: TagToken, nextTokenizerState: typeof TokenizerMode[keyof typeof TokenizerMode]): void; |
|
switchToPlaintextParsing(): void; |
|
_getAdjustedCurrentElement(): T['element']; |
|
_findFormInFragmentContext(): void; |
|
private _initTokenizerForFragmentParsing; |
|
_setDocumentType(token: DoctypeToken): void; |
|
_attachElementToTree(element: T['element'], location: LocationWithAttributes | null): void; |
|
_appendElement(token: TagToken, namespaceURI: NS): void; |
|
_insertElement(token: TagToken, namespaceURI: NS): void; |
|
_insertFakeElement(tagName: string, tagID: $): void; |
|
_insertTemplate(token: TagToken): void; |
|
_insertFakeRootElement(): void; |
|
_appendCommentNode(token: CommentToken, parent: T['parentNode']): void; |
|
_insertCharacters(token: CharacterToken): void; |
|
_adoptNodes(donor: T['parentNode'], recipient: T['parentNode']): void; |
|
_setEndLocation(element: T['element'], closingToken: Token): void; |
|
private shouldProcessStartTagTokenInForeignContent; |
|
_processToken(token: Token): void; |
|
_isIntegrationPoint(tid: $, element: T['element'], foreignNS?: NS): boolean; |
|
_reconstructActiveFormattingElements(): void; |
|
_closeTableCell(): void; |
|
_closePElement(): void; |
|
_resetInsertionMode(): void; |
|
_resetInsertionModeForSelect(selectIdx: number): void; |
|
_isElementCausesFosterParenting(tn: $): boolean; |
|
_shouldFosterParentOnInsertion(): boolean; |
|
_findFosterParentingLocation(): { |
|
parent: T['parentNode']; |
|
beforeElement: T['element'] | null; |
|
}; |
|
_fosterParentElement(element: T['element']): void; |
|
_isSpecialElement(element: T['element'], id: $): boolean; |
|
onCharacter(token: CharacterToken): void; |
|
onNullCharacter(token: CharacterToken): void; |
|
onComment(token: CommentToken): void; |
|
onDoctype(token: DoctypeToken): void; |
|
onStartTag(token: TagToken): void; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_processStartTag(token: TagToken): void; |
|
_startTagOutsideForeignContent(token: TagToken): void; |
|
onEndTag(token: TagToken): void; |
|
_endTagOutsideForeignContent(token: TagToken): void; |
|
onEof(token: EOFToken): void; |
|
onWhitespaceCharacter(token: CharacterToken): void; |
|
} |
|
export {}; |
|
|