| 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"});
|
|
|