Skip to content

Instantly share code, notes, and snippets.

@steckel
Created March 4, 2019 15:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save steckel/244d747cb45209ae666b6698479a71dd to your computer and use it in GitHub Desktop.
Save steckel/244d747cb45209ae666b6698479a71dd to your computer and use it in GitHub Desktop.
declare enum TokenType {
CHARACTER_TOKEN = 'CHARACTER_TOKEN',
NULL_CHARACTER_TOKEN = 'NULL_CHARACTER_TOKEN',
WHITESPACE_CHARACTER_TOKEN = 'WHITESPACE_CHARACTER_TOKEN',
START_TAG_TOKEN = 'START_TAG_TOKEN',
END_TAG_TOKEN = 'END_TAG_TOKEN',
COMMENT_TOKEN = 'COMMENT_TOKEN',
DOCTYPE_TOKEN = 'DOCTYPE_TOKEN',
EOF_TOKEN = 'EOF_TOKEN',
HIBERNATION_TOKEN = 'HIBERNATION_TOKEN',
}
interface StartTagToken {
type: TokenType.START_TAG_TOKEN,
tagName: string,
selfClosing: boolean,
ackSelfClosing: boolean,
attrs: Array<Attribute>
}
interface EndTagToken {
type: TokenType.END_TAG_TOKEN,
tagName: string,
selfClosing: boolean,
attrs: Array<Attribute>
}
interface CommentToken {
type: TokenType.COMMENT_TOKEN,
data: string,
}
interface DoctypeToken {
type: TokenType.DOCTYPE_TOKEN,
name: string,
forceQuirks: boolean,
publicId: number,
systemId: number,
}
interface EOFToken {
type: TokenType.EOF_TOKEN,
}
declare type Token = StartTagToken | EndTagToken | CommentToken | DoctypeToken | EOFToken;
interface Attribute {
name: string,
value: string
}
declare class Tokenizer {
preprocessor: any;//Preprocessor;
tokenQueue: Array<Token>;
allowCDATA: boolean;
state: 'DATA_STATE';
returnState: string;
charRefCode: number;
tempBuff: Array<any>;
lastStartTagName: string;
consumedAfterSnapshot: number;
active: false;
currentCharacterToken: Token;
currentToken: Token;
currentAttr: Attribute;
constructor();
getNextToken(): Array<Token>;
write(chunk: string, isLastChunk: boolean): void;
insertHtmlAtCurrentPos(chunk: string): void;
static CHARACTER_TOKEN: TokenType.CHARACTER_TOKEN;
static NULL_CHARACTER_TOKEN: TokenType.NULL_CHARACTER_TOKEN;
static WHITESPACE_CHARACTER_TOKEN: TokenType.WHITESPACE_CHARACTER_TOKEN;
static START_TAG_TOKEN: TokenType.START_TAG_TOKEN;
static END_TAG_TOKEN: TokenType.END_TAG_TOKEN;
static COMMENT_TOKEN: TokenType.COMMENT_TOKEN;
static DOCTYPE_TOKEN: TokenType.DOCTYPE_TOKEN;
static EOF_TOKEN: TokenType.EOF_TOKEN;
static HIBERNATION_TOKEN: TokenType.HIBERNATION_TOKEN;
static getTokenAttr(token: Token, attrName: string): string;
}
declare module Tokenizer {
enum MODE {
DATA = 'DATA_STATE',
RCDATA = 'RCDATA_STATE',
RAWTEXT = 'RAWTEXT_STATE',
SCRIPT_DATA = 'SCRIPT_DATA_STATE',
PLAINTEXT = 'PLAINTEXT_STATE',
}
}
export = Tokenizer;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment