211 lines
		
	
	
		
			7.9 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			211 lines
		
	
	
		
			7.9 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import htmlDecodeTree from "./generated/decode-data-html.js";
 | |
| import xmlDecodeTree from "./generated/decode-data-xml.js";
 | |
| import decodeCodePoint from "./decode_codepoint.js";
 | |
| export { htmlDecodeTree, xmlDecodeTree, decodeCodePoint };
 | |
| export { replaceCodePoint, fromCodePoint } from "./decode_codepoint.js";
 | |
| export declare enum BinTrieFlags {
 | |
|     VALUE_LENGTH = 49152,
 | |
|     BRANCH_LENGTH = 16256,
 | |
|     JUMP_TABLE = 127
 | |
| }
 | |
| export declare enum DecodingMode {
 | |
|     /** Entities in text nodes that can end with any character. */
 | |
|     Legacy = 0,
 | |
|     /** Only allow entities terminated with a semicolon. */
 | |
|     Strict = 1,
 | |
|     /** Entities in attributes have limitations on ending characters. */
 | |
|     Attribute = 2
 | |
| }
 | |
| /**
 | |
|  * Producers for character reference errors as defined in the HTML spec.
 | |
|  */
 | |
| export interface EntityErrorProducer {
 | |
|     missingSemicolonAfterCharacterReference(): void;
 | |
|     absenceOfDigitsInNumericCharacterReference(consumedCharacters: number): void;
 | |
|     validateNumericCharacterReference(code: number): void;
 | |
| }
 | |
| /**
 | |
|  * Token decoder with support of writing partial entities.
 | |
|  */
 | |
| export declare class EntityDecoder {
 | |
|     /** The tree used to decode entities. */
 | |
|     private readonly decodeTree;
 | |
|     /**
 | |
|      * The function that is called when a codepoint is decoded.
 | |
|      *
 | |
|      * For multi-byte named entities, this will be called multiple times,
 | |
|      * with the second codepoint, and the same `consumed` value.
 | |
|      *
 | |
|      * @param codepoint The decoded codepoint.
 | |
|      * @param consumed The number of bytes consumed by the decoder.
 | |
|      */
 | |
|     private readonly emitCodePoint;
 | |
|     /** An object that is used to produce errors. */
 | |
|     private readonly errors?;
 | |
|     constructor(
 | |
|     /** The tree used to decode entities. */
 | |
|     decodeTree: Uint16Array, 
 | |
|     /**
 | |
|      * The function that is called when a codepoint is decoded.
 | |
|      *
 | |
|      * For multi-byte named entities, this will be called multiple times,
 | |
|      * with the second codepoint, and the same `consumed` value.
 | |
|      *
 | |
|      * @param codepoint The decoded codepoint.
 | |
|      * @param consumed The number of bytes consumed by the decoder.
 | |
|      */
 | |
|     emitCodePoint: (cp: number, consumed: number) => void, 
 | |
|     /** An object that is used to produce errors. */
 | |
|     errors?: EntityErrorProducer | undefined);
 | |
|     /** The current state of the decoder. */
 | |
|     private state;
 | |
|     /** Characters that were consumed while parsing an entity. */
 | |
|     private consumed;
 | |
|     /**
 | |
|      * The result of the entity.
 | |
|      *
 | |
|      * Either the result index of a numeric entity, or the codepoint of a
 | |
|      * numeric entity.
 | |
|      */
 | |
|     private result;
 | |
|     /** The current index in the decode tree. */
 | |
|     private treeIndex;
 | |
|     /** The number of characters that were consumed in excess. */
 | |
|     private excess;
 | |
|     /** The mode in which the decoder is operating. */
 | |
|     private decodeMode;
 | |
|     /** Resets the instance to make it reusable. */
 | |
|     startEntity(decodeMode: DecodingMode): void;
 | |
|     /**
 | |
|      * Write an entity to the decoder. This can be called multiple times with partial entities.
 | |
|      * If the entity is incomplete, the decoder will return -1.
 | |
|      *
 | |
|      * Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the
 | |
|      * entity is incomplete, and resume when the next string is written.
 | |
|      *
 | |
|      * @param string The string containing the entity (or a continuation of the entity).
 | |
|      * @param offset The offset at which the entity begins. Should be 0 if this is not the first call.
 | |
|      * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
 | |
|      */
 | |
|     write(str: string, offset: number): number;
 | |
|     /**
 | |
|      * Switches between the numeric decimal and hexadecimal states.
 | |
|      *
 | |
|      * Equivalent to the `Numeric character reference state` in the HTML spec.
 | |
|      *
 | |
|      * @param str The string containing the entity (or a continuation of the entity).
 | |
|      * @param offset The current offset.
 | |
|      * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
 | |
|      */
 | |
|     private stateNumericStart;
 | |
|     private addToNumericResult;
 | |
|     /**
 | |
|      * Parses a hexadecimal numeric entity.
 | |
|      *
 | |
|      * Equivalent to the `Hexademical character reference state` in the HTML spec.
 | |
|      *
 | |
|      * @param str The string containing the entity (or a continuation of the entity).
 | |
|      * @param offset The current offset.
 | |
|      * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
 | |
|      */
 | |
|     private stateNumericHex;
 | |
|     /**
 | |
|      * Parses a decimal numeric entity.
 | |
|      *
 | |
|      * Equivalent to the `Decimal character reference state` in the HTML spec.
 | |
|      *
 | |
|      * @param str The string containing the entity (or a continuation of the entity).
 | |
|      * @param offset The current offset.
 | |
|      * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
 | |
|      */
 | |
|     private stateNumericDecimal;
 | |
|     /**
 | |
|      * Validate and emit a numeric entity.
 | |
|      *
 | |
|      * Implements the logic from the `Hexademical character reference start
 | |
|      * state` and `Numeric character reference end state` in the HTML spec.
 | |
|      *
 | |
|      * @param lastCp The last code point of the entity. Used to see if the
 | |
|      *               entity was terminated with a semicolon.
 | |
|      * @param expectedLength The minimum number of characters that should be
 | |
|      *                       consumed. Used to validate that at least one digit
 | |
|      *                       was consumed.
 | |
|      * @returns The number of characters that were consumed.
 | |
|      */
 | |
|     private emitNumericEntity;
 | |
|     /**
 | |
|      * Parses a named entity.
 | |
|      *
 | |
|      * Equivalent to the `Named character reference state` in the HTML spec.
 | |
|      *
 | |
|      * @param str The string containing the entity (or a continuation of the entity).
 | |
|      * @param offset The current offset.
 | |
|      * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
 | |
|      */
 | |
|     private stateNamedEntity;
 | |
|     /**
 | |
|      * Emit a named entity that was not terminated with a semicolon.
 | |
|      *
 | |
|      * @returns The number of characters consumed.
 | |
|      */
 | |
|     private emitNotTerminatedNamedEntity;
 | |
|     /**
 | |
|      * Emit a named entity.
 | |
|      *
 | |
|      * @param result The index of the entity in the decode tree.
 | |
|      * @param valueLength The number of bytes in the entity.
 | |
|      * @param consumed The number of characters consumed.
 | |
|      *
 | |
|      * @returns The number of characters consumed.
 | |
|      */
 | |
|     private emitNamedEntityData;
 | |
|     /**
 | |
|      * Signal to the parser that the end of the input was reached.
 | |
|      *
 | |
|      * Remaining data will be emitted and relevant errors will be produced.
 | |
|      *
 | |
|      * @returns The number of characters consumed.
 | |
|      */
 | |
|     end(): number;
 | |
| }
 | |
| /**
 | |
|  * Determines the branch of the current node that is taken given the current
 | |
|  * character. This function is used to traverse the trie.
 | |
|  *
 | |
|  * @param decodeTree The trie.
 | |
|  * @param current The current node.
 | |
|  * @param nodeIdx The index right after the current node and its value.
 | |
|  * @param char The current character.
 | |
|  * @returns The index of the next node, or -1 if no branch is taken.
 | |
|  */
 | |
| export declare function determineBranch(decodeTree: Uint16Array, current: number, nodeIdx: number, char: number): number;
 | |
| /**
 | |
|  * Decodes an HTML string.
 | |
|  *
 | |
|  * @param str The string to decode.
 | |
|  * @param mode The decoding mode.
 | |
|  * @returns The decoded string.
 | |
|  */
 | |
| export declare function decodeHTML(str: string, mode?: DecodingMode): string;
 | |
| /**
 | |
|  * Decodes an HTML string in an attribute.
 | |
|  *
 | |
|  * @param str The string to decode.
 | |
|  * @returns The decoded string.
 | |
|  */
 | |
| export declare function decodeHTMLAttribute(str: string): string;
 | |
| /**
 | |
|  * Decodes an HTML string, requiring all entities to be terminated by a semicolon.
 | |
|  *
 | |
|  * @param str The string to decode.
 | |
|  * @returns The decoded string.
 | |
|  */
 | |
| export declare function decodeHTMLStrict(str: string): string;
 | |
| /**
 | |
|  * Decodes an XML string, requiring all entities to be terminated by a semicolon.
 | |
|  *
 | |
|  * @param str The string to decode.
 | |
|  * @returns The decoded string.
 | |
|  */
 | |
| export declare function decodeXML(str: string): string;
 | |
| //# sourceMappingURL=decode.d.ts.map
 |