// 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[stateMetaContent-28]
	_ = x[stateMetaContentURL-29]
	_ = x[stateDead-30]
}

const _state_name = "stateTextstateTagstateAttrNamestateAfterNamestateBeforeValuestateHTMLCmtstateRCDATAstateAttrstateURLstateSrcsetstateJSstateJSDqStrstateJSSqStrstateJSTmplLitstateJSRegexpstateJSBlockCmtstateJSLineCmtstateJSHTMLOpenCmtstateJSHTMLCloseCmtstateCSSstateCSSDqStrstateCSSSqStrstateCSSDqURLstateCSSSqURLstateCSSURLstateCSSBlockCmtstateCSSLineCmtstateErrorstateMetaContentstateMetaContentURLstateDead"

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, 363, 382, 391}

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]]
}
