topical media & game development

talk show tell print

mobile-query-three-www-vendor-CodeMirror2-mode-htmlembedded-htmlembedded.js / js



  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 : htmlMixedMode.startState(),
            scriptState : scriptingMode.startState()
            }
      },
  
      token: function(stream, state) {
        return state.token(stream, state);
      },
  
      indent: function(state, textAfter) {
        if (state.token == htmlDispatch)
          return htmlMixedMode.indent(state.htmlState, textAfter);
        else
          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: "/{}:"
    }
  });
  
  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"});
  


(C) Æliens 04/09/2009

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.