htmlembedded.js
73 lines
| 2.6 KiB
| application/javascript
|
JavascriptLexer
r4026 | 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"}); | ||||