123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 |
- import Tokenizer, { Callbacks, QuoteType } from "./Tokenizer.js";
- export interface ParserOptions {
- /**
- * Indicates whether special tags (`<script>`, `<style>`, and `<title>`) should get special treatment
- * and if "empty" tags (eg. `<br>`) can have children. If `false`, the content of special tags
- * will be text only. For feeds and other XML content (documents that don't consist of HTML),
- * set this to `true`.
- *
- * @default false
- */
- xmlMode?: boolean;
- /**
- * Decode entities within the document.
- *
- * @default true
- */
- decodeEntities?: boolean;
- /**
- * If set to true, all tags will be lowercased.
- *
- * @default !xmlMode
- */
- lowerCaseTags?: boolean;
- /**
- * If set to `true`, all attribute names will be lowercased. This has noticeable impact on speed.
- *
- * @default !xmlMode
- */
- lowerCaseAttributeNames?: boolean;
- /**
- * If set to true, CDATA sections will be recognized as text even if the xmlMode option is not enabled.
- * NOTE: If xmlMode is set to `true` then CDATA sections will always be recognized as text.
- *
- * @default xmlMode
- */
- recognizeCDATA?: boolean;
- /**
- * If set to `true`, self-closing tags will trigger the onclosetag event even if xmlMode is not set to `true`.
- * NOTE: If xmlMode is set to `true` then self-closing tags will always be recognized.
- *
- * @default xmlMode
- */
- recognizeSelfClosing?: boolean;
- /**
- * Allows the default tokenizer to be overwritten.
- */
- Tokenizer?: typeof Tokenizer;
- }
- export interface Handler {
- onparserinit(parser: Parser): void;
- /**
- * Resets the handler back to starting state
- */
- onreset(): void;
- /**
- * Signals the handler that parsing is done
- */
- onend(): void;
- onerror(error: Error): void;
- onclosetag(name: string, isImplied: boolean): void;
- onopentagname(name: string): void;
- /**
- *
- * @param name Name of the attribute
- * @param value Value of the attribute.
- * @param quote Quotes used around the attribute. `null` if the attribute has no quotes around the value, `undefined` if the attribute has no value.
- */
- onattribute(name: string, value: string, quote?: string | undefined | null): void;
- onopentag(name: string, attribs: {
- [s: string]: string;
- }, isImplied: boolean): void;
- ontext(data: string): void;
- oncomment(data: string): void;
- oncdatastart(): void;
- oncdataend(): void;
- oncommentend(): void;
- onprocessinginstruction(name: string, data: string): void;
- }
- export declare class Parser implements Callbacks {
- private readonly options;
- /** The start index of the last event. */
- startIndex: number;
- /** The end index of the last event. */
- endIndex: number;
- /**
- * Store the start index of the current open tag,
- * so we can update the start index for attributes.
- */
- private openTagStart;
- private tagname;
- private attribname;
- private attribvalue;
- private attribs;
- private stack;
- private readonly foreignContext;
- private readonly cbs;
- private readonly lowerCaseTagNames;
- private readonly lowerCaseAttributeNames;
- private readonly tokenizer;
- private readonly buffers;
- private bufferOffset;
- /** The index of the last written buffer. Used when resuming after a `pause()`. */
- private writeIndex;
- /** Indicates whether the parser has finished running / `.end` has been called. */
- private ended;
- constructor(cbs?: Partial<Handler> | null, options?: ParserOptions);
- /** @internal */
- ontext(start: number, endIndex: number): void;
- /** @internal */
- ontextentity(cp: number): void;
- protected isVoidElement(name: string): boolean;
- /** @internal */
- onopentagname(start: number, endIndex: number): void;
- private emitOpenTag;
- private endOpenTag;
- /** @internal */
- onopentagend(endIndex: number): void;
- /** @internal */
- onclosetag(start: number, endIndex: number): void;
- /** @internal */
- onselfclosingtag(endIndex: number): void;
- private closeCurrentTag;
- /** @internal */
- onattribname(start: number, endIndex: number): void;
- /** @internal */
- onattribdata(start: number, endIndex: number): void;
- /** @internal */
- onattribentity(cp: number): void;
- /** @internal */
- onattribend(quote: QuoteType, endIndex: number): void;
- private getInstructionName;
- /** @internal */
- ondeclaration(start: number, endIndex: number): void;
- /** @internal */
- onprocessinginstruction(start: number, endIndex: number): void;
- /** @internal */
- oncomment(start: number, endIndex: number, offset: number): void;
- /** @internal */
- oncdata(start: number, endIndex: number, offset: number): void;
- /** @internal */
- onend(): void;
- /**
- * Resets the parser to a blank state, ready to parse a new HTML document
- */
- reset(): void;
- /**
- * Resets the parser, then parses a complete document and
- * pushes it to the handler.
- *
- * @param data Document to parse.
- */
- parseComplete(data: string): void;
- private getSlice;
- private shiftBuffer;
- /**
- * Parses a chunk of data and calls the corresponding callbacks.
- *
- * @param chunk Chunk to parse.
- */
- write(chunk: string): void;
- /**
- * Parses the end of the buffer and clears the stack, calls onend.
- *
- * @param chunk Optional final chunk to parse.
- */
- end(chunk?: string): void;
- /**
- * Pauses parsing. The parser won't emit events until `resume` is called.
- */
- pause(): void;
- /**
- * Resumes parsing after `pause` was called.
- */
- resume(): void;
- /**
- * Alias of `write`, for backwards compatibility.
- *
- * @param chunk Chunk to parse.
- * @deprecated
- */
- parseChunk(chunk: string): void;
- /**
- * Alias of `end`, for backwards compatibility.
- *
- * @param chunk Optional final chunk to parse.
- * @deprecated
- */
- done(chunk?: string): void;
- }
- //# sourceMappingURL=Parser.d.ts.map
|