~ubuntu-branches/ubuntu/utopic/codemirror-js/utopic

« back to all changes in this revision

Viewing changes to mode/htmlembedded/htmlembedded.js

  • Committer: Package Import Robot
  • Author(s): David Paleino
  • Date: 2012-04-12 12:25:28 UTC
  • Revision ID: package-import@ubuntu.com-20120412122528-8xp5a8frj4h1d3ee
Tags: upstream-2.23
ImportĀ upstreamĀ versionĀ 2.23

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
CodeMirror.defineMode("htmlembedded", function(config, parserConfig) {
 
2
  
 
3
  //config settings
 
4
  var scriptStartRegex = parserConfig.scriptStartRegex || /^<%/i,
 
5
      scriptEndRegex = parserConfig.scriptEndRegex || /^%>/i;
 
6
  
 
7
  //inner modes
 
8
  var scriptingMode, htmlMixedMode;
 
9
  
 
10
  //tokenizer when in html mode
 
11
  function htmlDispatch(stream, state) {
 
12
      if (stream.match(scriptStartRegex, false)) {
 
13
          state.token=scriptingDispatch;
 
14
          return scriptingMode.token(stream, state.scriptState);
 
15
          }
 
16
      else
 
17
          return htmlMixedMode.token(stream, state.htmlState);
 
18
    }
 
19
 
 
20
  //tokenizer when in scripting mode
 
21
  function scriptingDispatch(stream, state) {
 
22
      if (stream.match(scriptEndRegex, false))  {
 
23
          state.token=htmlDispatch;
 
24
          return htmlMixedMode.token(stream, state.htmlState);
 
25
         }
 
26
      else
 
27
          return scriptingMode.token(stream, state.scriptState);
 
28
         }
 
29
 
 
30
 
 
31
  return {
 
32
    startState: function() {
 
33
      scriptingMode = scriptingMode || CodeMirror.getMode(config, parserConfig.scriptingModeSpec);
 
34
      htmlMixedMode = htmlMixedMode || CodeMirror.getMode(config, "htmlmixed");
 
35
      return { 
 
36
          token :  parserConfig.startOpen ? scriptingDispatch : htmlDispatch,
 
37
          htmlState : htmlMixedMode.startState(),
 
38
          scriptState : scriptingMode.startState()
 
39
          }
 
40
    },
 
41
 
 
42
    token: function(stream, state) {
 
43
      return state.token(stream, state);
 
44
    },
 
45
 
 
46
    indent: function(state, textAfter) {
 
47
      if (state.token == htmlDispatch)
 
48
        return htmlMixedMode.indent(state.htmlState, textAfter);
 
49
      else
 
50
        return scriptingMode.indent(state.scriptState, textAfter);
 
51
    },
 
52
    
 
53
    copyState: function(state) {
 
54
      return {
 
55
       token : state.token,
 
56
       htmlState : CodeMirror.copyState(htmlMixedMode, state.htmlState),
 
57
       scriptState : CodeMirror.copyState(scriptingMode, state.scriptState)
 
58
       }
 
59
    },
 
60
    
 
61
 
 
62
    electricChars: "/{}:"
 
63
  }
 
64
});
 
65
 
 
66
CodeMirror.defineMIME("application/x-ejs", { name: "htmlembedded", scriptingModeSpec:"javascript"});
 
67
CodeMirror.defineMIME("application/x-aspx", { name: "htmlembedded", scriptingModeSpec:"text/x-csharp"});
 
68
CodeMirror.defineMIME("application/x-jsp", { name: "htmlembedded", scriptingModeSpec:"text/x-java"});