// Code generated by "stringer -type state"; DO NOT EDIT.

package template

import "strconv"

func _() {
	// An "invalid array index" compiler error signifies that the constant values have changed.
	// Re-run the stringer command to generate them again.
	var x [1]struct{}
	_ = x[stateText-0]
	_ = x[stateTag-1]
	_ = x[stateAttrName-2]
	_ = x[stateAfterName-3]
	_ = x[stateBeforeValue-4]
	_ = x[stateHTMLCmt-5]
	_ = x[stateRCDATA-6]
	_ = x[stateAttr-7]
	_ = x[stateURL-8]
	_ = x[stateSrcset-9]
	_ = x[stateJS-10]
	_ = x[stateJSDqStr-11]
	_ = x[stateJSSqStr-12]
	_ = x[stateJSTmplLit-13]
	_ = x[stateJSRegexp-14]
	_ = x[stateJSBlockCmt-15]
	_ = x[stateJSLineCmt-16]
	_ = x[stateJSHTMLOpenCmt-17]
	_ = x[stateJSHTMLCloseCmt-18]
	_ = x[stateCSS-19]
	_ = x[stateCSSDqStr-20]
	_ = x[stateCSSSqStr-21]
	_ = x[stateCSSDqURL-22]
	_ = x[stateCSSSqURL-23]
	_ = x[stateCSSURL-24]
	_ = x[stateCSSBlockCmt-25]
	_ = x[stateCSSLineCmt-26]
	_ = x[stateError-27]
	_ = x[stateDead-28]
}

const _state_name = "stateTextstateTagstateAttrNamestateAfterNamestateBeforeValuestateHTMLCmtstateRCDATAstateAttrstateURLstateSrcsetstateJSstateJSDqStrstateJSSqStrstateJSTmplLitstateJSRegexpstateJSBlockCmtstateJSLineCmtstateJSHTMLOpenCmtstateJSHTMLCloseCmtstateCSSstateCSSDqStrstateCSSSqStrstateCSSDqURLstateCSSSqURLstateCSSURLstateCSSBlockCmtstateCSSLineCmtstateErrorstateDead"

var _state_index = [...]uint16{0, 9, 17, 30, 44, 60, 72, 83, 92, 100, 111, 118, 130, 142, 156, 169, 184, 198, 216, 235, 243, 256, 269, 282, 295, 306, 322, 337, 347, 356}

func (i state) String() string {
	if i >= state(len(_state_index)-1) {
		return "state(" + strconv.FormatInt(int64(i), 10) + ")"
	}
	return _state_name[_state_index[i]:_state_index[i+1]]
}
