Spaces:
Running
Running
CodeMirror.defineMode("htmlembedded", function(config, parserConfig) { | |
//config settings | |
var scriptStartRegex = parserConfig.scriptStartRegex || /^<%/i, | |
scriptEndRegex = parserConfig.scriptEndRegex || /^%>/i; | |
//inner modes | |
var scriptingMode, htmlMixedMode; | |
//tokenizer when in html mode | |
function htmlDispatch(stream, state) { | |
if (stream.match(scriptStartRegex, false)) { | |
state.token=scriptingDispatch; | |
return scriptingMode.token(stream, state.scriptState); | |
} | |
else | |
return htmlMixedMode.token(stream, state.htmlState); | |
} | |
//tokenizer when in scripting mode | |
function scriptingDispatch(stream, state) { | |
if (stream.match(scriptEndRegex, false)) { | |
state.token=htmlDispatch; | |
return htmlMixedMode.token(stream, state.htmlState); | |
} | |
else | |
return scriptingMode.token(stream, state.scriptState); | |
} | |
return { | |
startState: function() { | |
scriptingMode = scriptingMode || CodeMirror.getMode(config, parserConfig.scriptingModeSpec); | |
htmlMixedMode = htmlMixedMode || CodeMirror.getMode(config, "htmlmixed"); | |
return { | |
token : parserConfig.startOpen ? scriptingDispatch : htmlDispatch, | |
htmlState : CodeMirror.startState(htmlMixedMode), | |
scriptState : CodeMirror.startState(scriptingMode) | |
}; | |
}, | |
token: function(stream, state) { | |
return state.token(stream, state); | |
}, | |
indent: function(state, textAfter) { | |
if (state.token == htmlDispatch) | |
return htmlMixedMode.indent(state.htmlState, textAfter); | |
else if (scriptingMode.indent) | |
return scriptingMode.indent(state.scriptState, textAfter); | |
}, | |
copyState: function(state) { | |
return { | |
token : state.token, | |
htmlState : CodeMirror.copyState(htmlMixedMode, state.htmlState), | |
scriptState : CodeMirror.copyState(scriptingMode, state.scriptState) | |
}; | |
}, | |
electricChars: "/{}:", | |
innerMode: function(state) { | |
if (state.token == scriptingDispatch) return {state: state.scriptState, mode: scriptingMode}; | |
else return {state: state.htmlState, mode: htmlMixedMode}; | |
} | |
}; | |
}, "htmlmixed"); | |
CodeMirror.defineMIME("application/x-ejs", { name: "htmlembedded", scriptingModeSpec:"javascript"}); | |
CodeMirror.defineMIME("application/x-aspx", { name: "htmlembedded", scriptingModeSpec:"text/x-csharp"}); | |
CodeMirror.defineMIME("application/x-jsp", { name: "htmlembedded", scriptingModeSpec:"text/x-java"}); | |
CodeMirror.defineMIME("application/x-erb", { name: "htmlembedded", scriptingModeSpec:"ruby"}); | |