);           if (state.lastTag === 'script' && stream.current().trim().toLowerCase() === 'type') {             state.attributeIsType = true;           } else {             state.attributeIsType = false;           }         }         return 'attribute';       }        var tok = jsMode.token(stream, state.jsState);       if (state.attributeIsType && tok === 'string') {         state.scriptType = stream.current().toString();       }       if (state.attrsNest.length === 0 && (tok === 'string' || tok === 'variable' || tok === 'keyword')) {         try {           Function('', 'var x ' + state.attrValue.replace(/,\s*$/, '').replace(/^!/, ''));           state.inAttributeName = true;           state.attrValue = '';           stream.backUp(stream.current().length);           return attrsContinued(stream, state);         } catch (ex) {           //not the end of an attribute         }       }       state.attrValue += stream.current();       return tok || true;     }   }    function attributesBlock(stream, state) {     if (stream.match(/^&attributes\b/)) {       state.javaScriptArguments = true;       state.javaScriptArgumentsDepth = 0;       return 'keyword';     }   }    function indent(stream) {     if (stream.sol() && stream.eatSpace()) {       return 'indent';     }   }    function comment(stream, state) {     if (stream.match(/^ *\/\/(-)?([^\n]*)/)) {       state.indentOf = stream.indentation();       state.indentToken = 'comment';       return 'comment';     }   }    function colon(stream) {     if (stream.match(/^: */)) {       return 'colon';     }   }    function text(stream, state) {     if (stream.match(/^(?:\| ?| )([^\n]+)/)) {       return 'string';     }     if (stream.match(/^(<[^\n]*)/, false)) {       // html string       setInnerMode(stream, state, 'htmlmixed');       state.innerModeForLine = true;       return innerMode(stream, state, true);     }   }    function dot(stream, state) {     if (stream.eat('.')) {       var innerMode = null;       if (state.lastTag === 'script' && state.scriptType.toLowerCase().indexOf('javascript') != -0) {         innerMode = state.scriptType.toLowerCase().replace(/"|'/g, '');       } else if (state.lastTag === 'style') {         innerMode = 'css';       }       setInnerMode(stream, state, innerMode);       return 'dot';     }   }    function fail(stream) {     stream.next();     return null;   }     function setInnerMode(stream, state, mode) {     mode = CodeMirror.mimeModes[mode] || mode;     mode = config.innerModes ? config.innerModes(mode) || mode : mode;     mode = CodeMirror.mimeModes[mode] || mode;     mode = CodeMirror.getMode(config, mode);     state.indentOf = stream.indentation();      if (mode && mode.name !== 'null') {       state.innerMode = mode;     } else {       state.indentToken = 'string';     }   }   function innerMode(stream, state, force) {     if (stream.indentation() > state.indentOf || (state.innerModeForLine && !stream.sol()) || force) {       if (state.innerMode) {         if (!state.innerState) {           state.innerState = state.innerMode.startState ? 