| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 | 
							- CodeMirror.defineMode("htmlmixed", function(config, parserConfig) {
 
-   var htmlMode = CodeMirror.getMode(config, {name: "xml", htmlMode: true});
 
-   var jsMode = CodeMirror.getMode(config, "javascript");
 
-   var cssMode = CodeMirror.getMode(config, "css");
 
-   function html(stream, state) {
 
-     var style = htmlMode.token(stream, state.htmlState);
 
-     if (style == "tag" && stream.current() == ">" && state.htmlState.context) {
 
-       if (/^script$/i.test(state.htmlState.context.tagName)) {
 
-         state.token = javascript;
 
-         state.localState = jsMode.startState(htmlMode.indent(state.htmlState, ""));
 
-         state.mode = "javascript";
 
-       }
 
-       else if (/^style$/i.test(state.htmlState.context.tagName)) {
 
-         state.token = css;
 
-         state.localState = cssMode.startState(htmlMode.indent(state.htmlState, ""));
 
-         state.mode = "css";
 
-       }
 
-     }
 
-     return style;
 
-   }
 
-   function maybeBackup(stream, pat, style) {
 
-     var cur = stream.current();
 
-     var close = cur.search(pat);
 
-     if (close > -1) stream.backUp(cur.length - close);
 
-     return style;
 
-   }
 
-   function javascript(stream, state) {
 
-     if (stream.match(/^<\/\s*script\s*>/i, false)) {
 
-       state.token = html;
 
-       state.curState = null;
 
-       state.mode = "html";
 
-       return html(stream, state);
 
-     }
 
-     return maybeBackup(stream, /<\/\s*script\s*>/,
 
-                        jsMode.token(stream, state.localState));
 
-   }
 
-   function css(stream, state) {
 
-     if (stream.match(/^<\/\s*style\s*>/i, false)) {
 
-       state.token = html;
 
-       state.localState = null;
 
-       state.mode = "html";
 
-       return html(stream, state);
 
-     }
 
-     return maybeBackup(stream, /<\/\s*style\s*>/,
 
-                        cssMode.token(stream, state.localState));
 
-   }
 
-   return {
 
-     startState: function() {
 
-       var state = htmlMode.startState();
 
-       return {token: html, localState: null, mode: "html", htmlState: state};
 
-     },
 
-     copyState: function(state) {
 
-       if (state.localState)
 
-         var local = CodeMirror.copyState(state.token == css ? cssMode : jsMode, state.localState);
 
-       return {token: state.token, localState: local, mode: state.mode,
 
-               htmlState: CodeMirror.copyState(htmlMode, state.htmlState)};
 
-     },
 
-     token: function(stream, state) {
 
-       return state.token(stream, state);
 
-     },
 
-     indent: function(state, textAfter) {
 
-       if (state.token == html || /^\s*<\//.test(textAfter))
 
-         return htmlMode.indent(state.htmlState, textAfter);
 
-       else if (state.token == javascript)
 
-         return jsMode.indent(state.localState, textAfter);
 
-       else
 
-         return cssMode.indent(state.localState, textAfter);
 
-     },
 
-     electricChars: "/{}:"
 
-   }
 
- });
 
- CodeMirror.defineMIME("text/html", "htmlmixed");
 
 
  |