Index: Source/devtools/front_end/cm/htmlembedded.js |
diff --git a/Source/devtools/front_end/cm/htmlembedded.js b/Source/devtools/front_end/cm/htmlembedded.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..ff6dfd2f92e0d58f4c07a9e82aa7e196a4e889a6 |
--- /dev/null |
+++ b/Source/devtools/front_end/cm/htmlembedded.js |
@@ -0,0 +1,73 @@ |
+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"}); |
paulirish
2013/07/03 21:20:48
Looks like we don't include the Ruby mode.
|