You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					159 lines
				
				4.8 KiB
			
		
		
			
		
	
	
					159 lines
				
				4.8 KiB
			| 
								 
											4 years ago
										 
									 | 
							
								import Tokenizer from "./Tokenizer";
							 | 
						||
| 
								 | 
							
								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): 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;
							 | 
						||
| 
								 | 
							
								    }): 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 {
							 | 
						||
| 
								 | 
							
								    /** The start index of the last event. */
							 | 
						||
| 
								 | 
							
								    startIndex: number;
							 | 
						||
| 
								 | 
							
								    /** The end index of the last event. */
							 | 
						||
| 
								 | 
							
								    endIndex: number | null;
							 | 
						||
| 
								 | 
							
								    private tagname;
							 | 
						||
| 
								 | 
							
								    private attribname;
							 | 
						||
| 
								 | 
							
								    private attribvalue;
							 | 
						||
| 
								 | 
							
								    private attribs;
							 | 
						||
| 
								 | 
							
								    private stack;
							 | 
						||
| 
								 | 
							
								    private readonly foreignContext;
							 | 
						||
| 
								 | 
							
								    private readonly cbs;
							 | 
						||
| 
								 | 
							
								    private readonly options;
							 | 
						||
| 
								 | 
							
								    private readonly lowerCaseTagNames;
							 | 
						||
| 
								 | 
							
								    private readonly lowerCaseAttributeNames;
							 | 
						||
| 
								 | 
							
								    private readonly tokenizer;
							 | 
						||
| 
								 | 
							
								    constructor(cbs: Partial<Handler> | null, options?: ParserOptions);
							 | 
						||
| 
								 | 
							
								    private updatePosition;
							 | 
						||
| 
								 | 
							
								    ontext(data: string): void;
							 | 
						||
| 
								 | 
							
								    onopentagname(name: string): void;
							 | 
						||
| 
								 | 
							
								    onopentagend(): void;
							 | 
						||
| 
								 | 
							
								    onclosetag(name: string): void;
							 | 
						||
| 
								 | 
							
								    onselfclosingtag(): void;
							 | 
						||
| 
								 | 
							
								    private closeCurrentTag;
							 | 
						||
| 
								 | 
							
								    onattribname(name: string): void;
							 | 
						||
| 
								 | 
							
								    onattribdata(value: string): void;
							 | 
						||
| 
								 | 
							
								    onattribend(quote: string | undefined | null): void;
							 | 
						||
| 
								 | 
							
								    private getInstructionName;
							 | 
						||
| 
								 | 
							
								    ondeclaration(value: string): void;
							 | 
						||
| 
								 | 
							
								    onprocessinginstruction(value: string): void;
							 | 
						||
| 
								 | 
							
								    oncomment(value: string): void;
							 | 
						||
| 
								 | 
							
								    oncdata(value: string): void;
							 | 
						||
| 
								 | 
							
								    onerror(err: Error): void;
							 | 
						||
| 
								 | 
							
								    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;
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * 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
							 |