polationNesting;      res.jsState = CodeMirror.copyState(jsMode, this.jsState);      res.innerMode = this.innerMode;     if (this.innerMode && this.innerState) {       res.innerState = CodeMirror.copyState(this.innerMode, this.innerState);     }      res.restOfLine = this.restOfLine;      res.isIncludeFiltered = this.isIncludeFiltered;     res.isEach = this.isEach;     res.lastTag = this.lastTag;     res.scriptType = this.scriptType;     res.isAttrs = this.isAttrs;     res.attrsNest = this.attrsNest.slice();     res.inAttributeName = this.inAttributeName;     res.attributeIsType = this.attributeIsType;     res.attrValue = this.attrValue;     res.indentOf = this.indentOf;     res.indentToken = this.indentToken;      res.innerModeForLine = this.innerModeForLine;      return res;   };    function javaScript(stream, state) {     if (stream.sol()) {       // if javaScriptLine was set at end of line, ignore it       state.javaScriptLine = false;       state.javaScriptLineExcludesColon = false;     }     if (state.javaScriptLine) {       if (state.javaScriptLineExcludesColon && stream.peek() === ':') {         state.javaScriptLine = false;         state.javaScriptLineExcludesColon = false;         return;       }       var tok = jsMode.token(stream, state.jsState);       if (stream.eol()) state.javaScriptLine = false;       return tok || true;     }   }   function javaScriptArguments(stream, state) {     if (state.javaScriptArguments) {       if (state.javaScriptArgumentsDepth === 0 && stream.peek() !== '(') {         state.javaScriptArguments = false;         return;       }       if (stream.peek() === '(') {         state.javaScriptArgumentsDepth++;       } else if (stream.peek() === ')') {         state.javaScriptArgumentsDepth--;       }       if (state.javaScriptArgumentsDepth === 0) {         state.javaScriptArguments = false;         return;       }        var tok = jsMode.token(stream, state.jsState);       return tok || true;     }   }    function yieldStatement(stream) {     if (stream.match(/^yield\b/)) {         return 'keyword';     }   }    function doctype(stream) {     if (stream.match(/^(?:doctype) *([^\n]+)?/)) {         return DOCTYPE;     }   }    function interpolation(stream, state) {     if (stream.match('#{')) {       state.isInterpolating = true;       state.interpolationNesting = 0;       return 'punctuation';     }   }    function interpolationContinued(stream, state) {     if (state.isInterpolating) {       if (stream.peek() === '}') {         state.interpolationNesting--;         if (state.interpolationNesting < 0) {           stream.next();           state.isInterpolating = false;           return 'punc