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