"use strict";
/*!
 * Modified version of htmlparser2 which has been stripped down to only provide
 * the functionality needed by Autolinker in order to make the final bundle as
 * small as possible. Original:
 *
 * Original copyright:
 *
 * Copyright 2010, 2011, Chris Winberry <chris@winberry.net>. All rights reserved.
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to
 * deal in the Software without restriction, including without limitation the
 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
 * sell copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
*/
Object.defineProperty(exports, "__esModule", { value: true });
var i = 0;
var TEXT = i++;
var BEFORE_TAG_NAME = i++; //after <
var IN_TAG_NAME = i++;
var IN_SELF_CLOSING_TAG = i++;
var BEFORE_CLOSING_TAG_NAME = i++;
var IN_CLOSING_TAG_NAME = i++;
var AFTER_CLOSING_TAG_NAME = i++;
//attributes
var BEFORE_ATTRIBUTE_NAME = i++;
var IN_ATTRIBUTE_NAME = i++;
var AFTER_ATTRIBUTE_NAME = i++;
var BEFORE_ATTRIBUTE_VALUE = i++;
var IN_ATTRIBUTE_VALUE_DQ = i++; // "
var IN_ATTRIBUTE_VALUE_SQ = i++; // '
var IN_ATTRIBUTE_VALUE_NQ = i++;
//declarations
var BEFORE_DECLARATION = i++; // !
var IN_DECLARATION = i++;
//processing instructions
var IN_PROCESSING_INSTRUCTION = i++; // ?
//comments
var BEFORE_COMMENT = i++;
var IN_COMMENT = i++;
var AFTER_COMMENT_1 = i++;
var AFTER_COMMENT_2 = i++;
//cdata
var BEFORE_CDATA_1 = i++; // [
var BEFORE_CDATA_2 = i++; // C
var BEFORE_CDATA_3 = i++; // D
var BEFORE_CDATA_4 = i++; // A
var BEFORE_CDATA_5 = i++; // T
var BEFORE_CDATA_6 = i++; // A
var IN_CDATA = i++; // [
var AFTER_CDATA_1 = i++; // ]
var AFTER_CDATA_2 = i++; // ]
//special tags
var BEFORE_SPECIAL = i++; //S
var BEFORE_SPECIAL_END = i++; //S
var BEFORE_SCRIPT_1 = i++; //C
var BEFORE_SCRIPT_2 = i++; //R
var BEFORE_SCRIPT_3 = i++; //I
var BEFORE_SCRIPT_4 = i++; //P
var BEFORE_SCRIPT_5 = i++; //T
var AFTER_SCRIPT_1 = i++; //C
var AFTER_SCRIPT_2 = i++; //R
var AFTER_SCRIPT_3 = i++; //I
var AFTER_SCRIPT_4 = i++; //P
var AFTER_SCRIPT_5 = i++; //T
var BEFORE_STYLE_1 = i++; //T
var BEFORE_STYLE_2 = i++; //Y
var BEFORE_STYLE_3 = i++; //L
var BEFORE_STYLE_4 = i++; //E
var AFTER_STYLE_1 = i++; //T
var AFTER_STYLE_2 = i++; //Y
var AFTER_STYLE_3 = i++; //L
var AFTER_STYLE_4 = i++; //E
var BEFORE_ENTITY = i++; //&
var BEFORE_NUMERIC_ENTITY = i++; //#
var IN_NAMED_ENTITY = i++;
var IN_NUMERIC_ENTITY = i++;
var IN_HEX_ENTITY = i++; //X
var j = 0;
var SPECIAL_NONE = j++;
var SPECIAL_SCRIPT = j++;
var SPECIAL_STYLE = j++;
function parseHtml(html, ontext) {
    var _state = TEXT, _buffer = html, _sectionStart = 0, _index = 0, _baseState = TEXT, _special = SPECIAL_NONE, _decodeEntities = true, _xmlMode = false;
    // TEMPORARY
    var _cbs = {};
    var entityMap = {};
    var xmlMap = {};
    var legacyMap = {};
    var decodeCodePoint = function (arg) { return ''; };
    _parse();
    function whitespace(c) {
        return c === " " || c === "\n" || c === "\t" || c === "\f" || c === "\r";
    }
    function ifElseState(upper, SUCCESS, FAILURE) {
        var lower = upper.toLowerCase();
        if (upper === lower) {
            return function (c) {
                if (c === lower) {
                    _state = SUCCESS;
                }
                else {
                    _state = FAILURE;
                    _index--;
                }
            };
        }
        else {
            return function (c) {
                if (c === lower || c === upper) {
                    _state = SUCCESS;
                }
                else {
                    _state = FAILURE;
                    _index--;
                }
            };
        }
    }
    function consumeSpecialNameChar(upper, NEXT_STATE) {
        var lower = upper.toLowerCase();
        return function (c) {
            if (c === lower || c === upper) {
                _state = NEXT_STATE;
            }
            else {
                _state = IN_TAG_NAME;
                _index--; //consume the token again
            }
        };
    }
    function _stateText(c) {
        if (c === "<") {
            if (_index > _sectionStart) {
                ontext(_getSection());
            }
            _state = BEFORE_TAG_NAME;
            _sectionStart = _index;
        }
        else if (_decodeEntities &&
            _special === SPECIAL_NONE &&
            c === "&") {
            if (_index > _sectionStart) {
                ontext(_getSection());
            }
            _baseState = TEXT;
            _state = BEFORE_ENTITY;
            _sectionStart = _index;
        }
    }
    ;
    function _stateBeforeTagName(c) {
        if (c === "/") {
            _state = BEFORE_CLOSING_TAG_NAME;
        }
        else if (c === "<") {
            ontext(_getSection());
            _sectionStart = _index;
        }
        else if (c === ">" || _special !== SPECIAL_NONE || whitespace(c)) {
            _state = TEXT;
        }
        else if (c === "!") {
            _state = BEFORE_DECLARATION;
            _sectionStart = _index + 1;
        }
        else if (c === "?") {
            _state = IN_PROCESSING_INSTRUCTION;
            _sectionStart = _index + 1;
        }
        else {
            _state =
                !_xmlMode && (c === "s" || c === "S")
                    ? BEFORE_SPECIAL
                    : IN_TAG_NAME;
            _sectionStart = _index;
        }
    }
    ;
    function _stateInTagName(c) {
        if (c === "/" || c === ">" || whitespace(c)) {
            _emitToken("onopentagname");
            _state = BEFORE_ATTRIBUTE_NAME;
            _index--;
        }
    }
    ;
    function _stateBeforeCloseingTagName(c) {
        if (whitespace(c)) { }
        else if (c === ">") {
            _state = TEXT;
        }
        else if (_special !== SPECIAL_NONE) {
            if (c === "s" || c === "S") {
                _state = BEFORE_SPECIAL_END;
            }
            else {
                _state = TEXT;
                _index--;
            }
        }
        else {
            _state = IN_CLOSING_TAG_NAME;
            _sectionStart = _index;
        }
    }
    ;
    function _stateInCloseingTagName(c) {
        if (c === ">" || whitespace(c)) {
            _emitToken("onclosetag");
            _state = AFTER_CLOSING_TAG_NAME;
            _index--;
        }
    }
    ;
    function _stateAfterCloseingTagName(c) {
        //skip everything until ">"
        if (c === ">") {
            _state = TEXT;
            _sectionStart = _index + 1;
        }
    }
    ;
    function _stateBeforeAttributeName(c) {
        if (c === ">") {
            _cbs.onopentagend();
            _state = TEXT;
            _sectionStart = _index + 1;
        }
        else if (c === "/") {
            _state = IN_SELF_CLOSING_TAG;
        }
        else if (!whitespace(c)) {
            _state = IN_ATTRIBUTE_NAME;
            _sectionStart = _index;
        }
    }
    ;
    function _stateInSelfClosingTag(c) {
        if (c === ">") {
            _cbs.onselfclosingtag();
            _state = TEXT;
            _sectionStart = _index + 1;
        }
        else if (!whitespace(c)) {
            _state = BEFORE_ATTRIBUTE_NAME;
            _index--;
        }
    }
    ;
    function _stateInAttributeName(c) {
        if (c === "=" || c === "/" || c === ">" || whitespace(c)) {
            _sectionStart = -1;
            _state = AFTER_ATTRIBUTE_NAME;
            _index--;
        }
    }
    ;
    function _stateAfterAttributeName(c) {
        if (c === "=") {
            _state = BEFORE_ATTRIBUTE_VALUE;
        }
        else if (c === "/" || c === ">") {
            _state = BEFORE_ATTRIBUTE_NAME;
            _index--;
        }
        else if (!whitespace(c)) {
            _state = IN_ATTRIBUTE_NAME;
            _sectionStart = _index;
        }
    }
    ;
    function _stateBeforeAttributeValue(c) {
        if (c === '"') {
            _state = IN_ATTRIBUTE_VALUE_DQ;
            _sectionStart = _index + 1;
        }
        else if (c === "'") {
            _state = IN_ATTRIBUTE_VALUE_SQ;
            _sectionStart = _index + 1;
        }
        else if (!whitespace(c)) {
            _state = IN_ATTRIBUTE_VALUE_NQ;
            _sectionStart = _index;
            _index--; //reconsume token
        }
    }
    ;
    function _stateInAttributeValueDoubleQuotes(c) {
        if (c === '"') {
            _emitToken("onattribdata");
            _state = BEFORE_ATTRIBUTE_NAME;
        }
        else if (_decodeEntities && c === "&") {
            _emitToken("onattribdata");
            _baseState = _state;
            _state = BEFORE_ENTITY;
            _sectionStart = _index;
        }
    }
    ;
    function _stateInAttributeValueSingleQuotes(c) {
        if (c === "'") {
            _emitToken("onattribdata");
            _state = BEFORE_ATTRIBUTE_NAME;
        }
        else if (_decodeEntities && c === "&") {
            _emitToken("onattribdata");
            _baseState = _state;
            _state = BEFORE_ENTITY;
            _sectionStart = _index;
        }
    }
    ;
    function _stateInAttributeValueNoQuotes(c) {
        if (whitespace(c) || c === ">") {
            _emitToken("onattribdata");
            _state = BEFORE_ATTRIBUTE_NAME;
            _index--;
        }
        else if (_decodeEntities && c === "&") {
            _emitToken("onattribdata");
            _baseState = _state;
            _state = BEFORE_ENTITY;
            _sectionStart = _index;
        }
    }
    ;
    function _stateBeforeDeclaration(c) {
        _state =
            c === "["
                ? BEFORE_CDATA_1
                : c === "-"
                    ? BEFORE_COMMENT
                    : IN_DECLARATION;
    }
    ;
    function _stateInDeclaration(c) {
        if (c === ">") {
            _state = TEXT;
            _sectionStart = _index + 1;
        }
    }
    ;
    function _stateInProcessingInstruction(c) {
        if (c === ">") {
            _state = TEXT;
            _sectionStart = _index + 1;
        }
    }
    ;
    function _stateBeforeComment(c) {
        if (c === "-") {
            _state = IN_COMMENT;
            _sectionStart = _index + 1;
        }
        else {
            _state = IN_DECLARATION;
        }
    }
    ;
    function _stateInComment(c) {
        if (c === "-")
            _state = AFTER_COMMENT_1;
    }
    ;
    function _stateAfterComment1(c) {
        if (c === "-") {
            _state = AFTER_COMMENT_2;
        }
        else {
            _state = IN_COMMENT;
        }
    }
    ;
    function _stateAfterComment2(c) {
        if (c === ">") {
            //remove 2 trailing chars
            _cbs.oncomment(_buffer.substring(_sectionStart, _index - 2));
            _state = TEXT;
            _sectionStart = _index + 1;
        }
        else if (c !== "-") {
            _state = IN_COMMENT;
        }
        // else: stay in AFTER_COMMENT_2 (`--->`)
    }
    ;
    var _stateBeforeCdata1 = ifElseState("C", BEFORE_CDATA_2, IN_DECLARATION);
    var _stateBeforeCdata2 = ifElseState("D", BEFORE_CDATA_3, IN_DECLARATION);
    var _stateBeforeCdata3 = ifElseState("A", BEFORE_CDATA_4, IN_DECLARATION);
    var _stateBeforeCdata4 = ifElseState("T", BEFORE_CDATA_5, IN_DECLARATION);
    var _stateBeforeCdata5 = ifElseState("A", BEFORE_CDATA_6, IN_DECLARATION);
    function _stateBeforeCdata6(c) {
        if (c === "[") {
            _state = IN_CDATA;
            _sectionStart = _index + 1;
        }
        else {
            _state = IN_DECLARATION;
            _index--;
        }
    }
    ;
    function _stateInCdata(c) {
        if (c === "]")
            _state = AFTER_CDATA_1;
    }
    ;
    function _stateAfterCdata1(c) {
        if (c === "]")
            _state = AFTER_CDATA_2;
        else
            _state = IN_CDATA;
    }
    ;
    function _stateAfterCdata2(c) {
        if (c === ">") {
            _state = TEXT;
            _sectionStart = _index + 1;
        }
        else if (c !== "]") {
            _state = IN_CDATA;
        }
        //else: stay in AFTER_CDATA_2 (`]]]>`)
    }
    ;
    function _stateBeforeSpecial(c) {
        if (c === "c" || c === "C") {
            _state = BEFORE_SCRIPT_1;
        }
        else if (c === "t" || c === "T") {
            _state = BEFORE_STYLE_1;
        }
        else {
            _state = IN_TAG_NAME;
            _index--; //consume the token again
        }
    }
    ;
    function _stateBeforeSpecialEnd(c) {
        if (_special === SPECIAL_SCRIPT && (c === "c" || c === "C")) {
            _state = AFTER_SCRIPT_1;
        }
        else if (_special === SPECIAL_STYLE && (c === "t" || c === "T")) {
            _state = AFTER_STYLE_1;
        }
        else
            _state = TEXT;
    }
    ;
    var _stateBeforeScript1 = consumeSpecialNameChar("R", BEFORE_SCRIPT_2);
    var _stateBeforeScript2 = consumeSpecialNameChar("I", BEFORE_SCRIPT_3);
    var _stateBeforeScript3 = consumeSpecialNameChar("P", BEFORE_SCRIPT_4);
    var _stateBeforeScript4 = consumeSpecialNameChar("T", BEFORE_SCRIPT_5);
    function _stateBeforeScript5(c) {
        if (c === "/" || c === ">" || whitespace(c)) {
            _special = SPECIAL_SCRIPT;
        }
        _state = IN_TAG_NAME;
        _index--; //consume the token again
    }
    ;
    var _stateAfterScript1 = ifElseState("R", AFTER_SCRIPT_2, TEXT);
    var _stateAfterScript2 = ifElseState("I", AFTER_SCRIPT_3, TEXT);
    var _stateAfterScript3 = ifElseState("P", AFTER_SCRIPT_4, TEXT);
    var _stateAfterScript4 = ifElseState("T", AFTER_SCRIPT_5, TEXT);
    function _stateAfterScript5(c) {
        if (c === ">" || whitespace(c)) {
            _special = SPECIAL_NONE;
            _state = IN_CLOSING_TAG_NAME;
            _sectionStart = _index - 6;
            _index--; //reconsume the token
        }
        else
            _state = TEXT;
    }
    ;
    var _stateBeforeStyle1 = consumeSpecialNameChar("Y", BEFORE_STYLE_2);
    var _stateBeforeStyle2 = consumeSpecialNameChar("L", BEFORE_STYLE_3);
    var _stateBeforeStyle3 = consumeSpecialNameChar("E", BEFORE_STYLE_4);
    function _stateBeforeStyle4(c) {
        if (c === "/" || c === ">" || whitespace(c)) {
            _special = SPECIAL_STYLE;
        }
        _state = IN_TAG_NAME;
        _index--; //consume the token again
    }
    ;
    var _stateAfterStyle1 = ifElseState("Y", AFTER_STYLE_2, TEXT);
    var _stateAfterStyle2 = ifElseState("L", AFTER_STYLE_3, TEXT);
    var _stateAfterStyle3 = ifElseState("E", AFTER_STYLE_4, TEXT);
    function _stateAfterStyle4(c) {
        if (c === ">" || whitespace(c)) {
            _special = SPECIAL_NONE;
            _state = IN_CLOSING_TAG_NAME;
            _sectionStart = _index - 5;
            _index--; //reconsume the token
        }
        else
            _state = TEXT;
    }
    ;
    var _stateBeforeEntity = ifElseState("#", BEFORE_NUMERIC_ENTITY, IN_NAMED_ENTITY);
    var _stateBeforeNumericEntity = ifElseState("X", IN_HEX_ENTITY, IN_NUMERIC_ENTITY);
    //for entities terminated with a semicolon
    function _parseNamedEntityStrict() {
        // TODO: For this section, use the regex /(&nbsp;|&#160;|&lt;|&#60;|&gt;|&#62;|&quot;|&#34;|&#39;)/ ???
        //offset = 1
        if (_sectionStart + 1 < _index) {
            var entity = _buffer.substring(_sectionStart + 1, _index), map = _xmlMode ? xmlMap : entityMap;
            if (map.hasOwnProperty(entity)) {
                _emitPartial(map[entity]);
                _sectionStart = _index + 1;
            }
        }
    }
    ;
    //parses legacy entities (without trailing semicolon)
    function _parseLegacyEntity() {
        var start = _sectionStart + 1, limit = _index - start;
        if (limit > 6)
            limit = 6; //the max length of legacy entities is 6
        while (limit >= 2) {
            //the min length of legacy entities is 2
            var entity = _buffer.substr(start, limit);
            if (legacyMap.hasOwnProperty(entity)) {
                _emitPartial(legacyMap[entity]);
                _sectionStart += limit + 1;
                return;
            }
            else {
                limit--;
            }
        }
    }
    ;
    function _stateInNamedEntity(c) {
        if (c === ";") {
            _parseNamedEntityStrict();
            if (_sectionStart + 1 < _index && !_xmlMode) {
                _parseLegacyEntity();
            }
            _state = _baseState;
        }
        else if ((c < "a" || c > "z") &&
            (c < "A" || c > "Z") &&
            (c < "0" || c > "9")) {
            if (_xmlMode) { }
            else if (_sectionStart + 1 === _index) { }
            else if (_baseState !== TEXT) {
                if (c !== "=") {
                    _parseNamedEntityStrict();
                }
            }
            else {
                _parseLegacyEntity();
            }
            _state = _baseState;
            _index--;
        }
    }
    ;
    function _decodeNumericEntity(offset, base) {
        var sectionStart = _sectionStart + offset;
        if (sectionStart !== _index) {
            //parse entity
            var entity = _buffer.substring(sectionStart, _index);
            var parsed = parseInt(entity, base);
            _emitPartial(decodeCodePoint(parsed));
            _sectionStart = _index;
        }
        else {
            _sectionStart--;
        }
        _state = _baseState;
    }
    ;
    function _stateInNumericEntity(c) {
        if (c === ";") {
            _decodeNumericEntity(2, 10);
            _sectionStart++;
        }
        else if (c < "0" || c > "9") {
            if (!_xmlMode) {
                _decodeNumericEntity(2, 10);
            }
            else {
                _state = _baseState;
            }
            _index--;
        }
    }
    ;
    function _stateInHexEntity(c) {
        if (c === ";") {
            _decodeNumericEntity(3, 16);
            _sectionStart++;
        }
        else if ((c < "a" || c > "f") &&
            (c < "A" || c > "F") &&
            (c < "0" || c > "9")) {
            if (!_xmlMode) {
                _decodeNumericEntity(3, 16);
            }
            else {
                _state = _baseState;
            }
            _index--;
        }
    }
    ;
    function _cleanup() {
        if (_sectionStart < 0) {
            _buffer = "";
            _index = 0;
        }
        else {
            if (_state === TEXT) {
                if (_sectionStart !== _index) {
                    ontext(_buffer.substr(_sectionStart));
                }
                _buffer = "";
                _index = 0;
            }
            else if (_sectionStart === _index) {
                //the section just started
                _buffer = "";
                _index = 0;
            }
            else {
                //remove everything unnecessary
                _buffer = _buffer.substr(_sectionStart);
                _index -= _sectionStart;
            }
            _sectionStart = 0;
        }
    }
    ;
    function _parse() {
        while (_index < _buffer.length) {
            var c = _buffer.charAt(_index);
            if (_state === TEXT) {
                _stateText(c);
            }
            else if (_state === BEFORE_TAG_NAME) {
                _stateBeforeTagName(c);
            }
            else if (_state === IN_TAG_NAME) {
                _stateInTagName(c);
            }
            else if (_state === BEFORE_CLOSING_TAG_NAME) {
                _stateBeforeCloseingTagName(c);
            }
            else if (_state === IN_CLOSING_TAG_NAME) {
                _stateInCloseingTagName(c);
            }
            else if (_state === AFTER_CLOSING_TAG_NAME) {
                _stateAfterCloseingTagName(c);
            }
            else if (_state === IN_SELF_CLOSING_TAG) {
                _stateInSelfClosingTag(c);
            }
            else if (_state === BEFORE_ATTRIBUTE_NAME) {
                /*
                *	attributes
                */
                _stateBeforeAttributeName(c);
            }
            else if (_state === IN_ATTRIBUTE_NAME) {
                _stateInAttributeName(c);
            }
            else if (_state === AFTER_ATTRIBUTE_NAME) {
                _stateAfterAttributeName(c);
            }
            else if (_state === BEFORE_ATTRIBUTE_VALUE) {
                _stateBeforeAttributeValue(c);
            }
            else if (_state === IN_ATTRIBUTE_VALUE_DQ) {
                _stateInAttributeValueDoubleQuotes(c);
            }
            else if (_state === IN_ATTRIBUTE_VALUE_SQ) {
                _stateInAttributeValueSingleQuotes(c);
            }
            else if (_state === IN_ATTRIBUTE_VALUE_NQ) {
                _stateInAttributeValueNoQuotes(c);
            }
            else if (_state === BEFORE_DECLARATION) {
                /*
                *	declarations
                */
                _stateBeforeDeclaration(c);
            }
            else if (_state === IN_DECLARATION) {
                _stateInDeclaration(c);
            }
            else if (_state === IN_PROCESSING_INSTRUCTION) {
                /*
                *	processing instructions
                */
                _stateInProcessingInstruction(c);
            }
            else if (_state === BEFORE_COMMENT) {
                /*
                *	comments
                */
                _stateBeforeComment(c);
            }
            else if (_state === IN_COMMENT) {
                _stateInComment(c);
            }
            else if (_state === AFTER_COMMENT_1) {
                _stateAfterComment1(c);
            }
            else if (_state === AFTER_COMMENT_2) {
                _stateAfterComment2(c);
            }
            else if (_state === BEFORE_CDATA_1) {
                /*
                *	cdata
                */
                _stateBeforeCdata1(c);
            }
            else if (_state === BEFORE_CDATA_2) {
                _stateBeforeCdata2(c);
            }
            else if (_state === BEFORE_CDATA_3) {
                _stateBeforeCdata3(c);
            }
            else if (_state === BEFORE_CDATA_4) {
                _stateBeforeCdata4(c);
            }
            else if (_state === BEFORE_CDATA_5) {
                _stateBeforeCdata5(c);
            }
            else if (_state === BEFORE_CDATA_6) {
                _stateBeforeCdata6(c);
            }
            else if (_state === IN_CDATA) {
                _stateInCdata(c);
            }
            else if (_state === AFTER_CDATA_1) {
                _stateAfterCdata1(c);
            }
            else if (_state === AFTER_CDATA_2) {
                _stateAfterCdata2(c);
            }
            else if (_state === BEFORE_SPECIAL) {
                /*
                * special tags
                */
                _stateBeforeSpecial(c);
            }
            else if (_state === BEFORE_SPECIAL_END) {
                _stateBeforeSpecialEnd(c);
            }
            else if (_state === BEFORE_SCRIPT_1) {
                /*
                * script
                */
                _stateBeforeScript1(c);
            }
            else if (_state === BEFORE_SCRIPT_2) {
                _stateBeforeScript2(c);
            }
            else if (_state === BEFORE_SCRIPT_3) {
                _stateBeforeScript3(c);
            }
            else if (_state === BEFORE_SCRIPT_4) {
                _stateBeforeScript4(c);
            }
            else if (_state === BEFORE_SCRIPT_5) {
                _stateBeforeScript5(c);
            }
            else if (_state === AFTER_SCRIPT_1) {
                _stateAfterScript1(c);
            }
            else if (_state === AFTER_SCRIPT_2) {
                _stateAfterScript2(c);
            }
            else if (_state === AFTER_SCRIPT_3) {
                _stateAfterScript3(c);
            }
            else if (_state === AFTER_SCRIPT_4) {
                _stateAfterScript4(c);
            }
            else if (_state === AFTER_SCRIPT_5) {
                _stateAfterScript5(c);
            }
            else if (_state === BEFORE_STYLE_1) {
                /*
                * style
                */
                _stateBeforeStyle1(c);
            }
            else if (_state === BEFORE_STYLE_2) {
                _stateBeforeStyle2(c);
            }
            else if (_state === BEFORE_STYLE_3) {
                _stateBeforeStyle3(c);
            }
            else if (_state === BEFORE_STYLE_4) {
                _stateBeforeStyle4(c);
            }
            else if (_state === AFTER_STYLE_1) {
                _stateAfterStyle1(c);
            }
            else if (_state === AFTER_STYLE_2) {
                _stateAfterStyle2(c);
            }
            else if (_state === AFTER_STYLE_3) {
                _stateAfterStyle3(c);
            }
            else if (_state === AFTER_STYLE_4) {
                _stateAfterStyle4(c);
            }
            else if (_state === BEFORE_ENTITY) {
                /*
                * entities
                */
                _stateBeforeEntity(c);
            }
            else if (_state === BEFORE_NUMERIC_ENTITY) {
                _stateBeforeNumericEntity(c);
            }
            else if (_state === IN_NAMED_ENTITY) {
                _stateInNamedEntity(c);
            }
            else if (_state === IN_NUMERIC_ENTITY) {
                _stateInNumericEntity(c);
            }
            else if (_state === IN_HEX_ENTITY) {
                _stateInHexEntity(c);
            }
            else {
                _cbs.onerror(Error("unknown _state"), _state);
            }
            _index++;
        }
        _cleanup();
    }
    ;
    function _getSection() {
        return _buffer.substring(_sectionStart, _index);
    }
    ;
    function _emitToken(name) {
        _cbs[name](_getSection());
        _sectionStart = -1;
    }
    ;
    function _emitPartial(value) {
        if (_baseState !== TEXT) {
            _cbs.onattribdata(value); //TODO implement the new event
        }
        else {
            _cbs.ontext(value);
        }
    }
    ;
}
exports.parseHtml = parseHtml;

//# sourceMappingURL=html-parser.js.map