Subversion-Projekte lars-tiefland.cienc

Revision

Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
5 lars 1
// CodeMirror, copyright (c) by Marijn Haverbeke and others
2
// Distributed under an MIT license: http://codemirror.net/LICENSE
3
 
4
(function(mod) {
5
  if (typeof exports == "object" && typeof module == "object") // CommonJS
6
    mod(require("../../lib/codemirror"));
7
  else if (typeof define == "function" && define.amd) // AMD
8
    define(["../../lib/codemirror"], mod);
9
  else // Plain browser env
10
    mod(CodeMirror);
11
})(function(CodeMirror) {
12
"use strict";
13
 
14
CodeMirror.defineMode("properties", function() {
15
  return {
16
    token: function(stream, state) {
17
      var sol = stream.sol() || state.afterSection;
18
      var eol = stream.eol();
19
 
20
      state.afterSection = false;
21
 
22
      if (sol) {
23
        if (state.nextMultiline) {
24
          state.inMultiline = true;
25
          state.nextMultiline = false;
26
        } else {
27
          state.position = "def";
28
        }
29
      }
30
 
31
      if (eol && ! state.nextMultiline) {
32
        state.inMultiline = false;
33
        state.position = "def";
34
      }
35
 
36
      if (sol) {
37
        while(stream.eatSpace());
38
      }
39
 
40
      var ch = stream.next();
41
 
42
      if (sol && (ch === "#" || ch === "!" || ch === ";")) {
43
        state.position = "comment";
44
        stream.skipToEnd();
45
        return "comment";
46
      } else if (sol && ch === "[") {
47
        state.afterSection = true;
48
        stream.skipTo("]"); stream.eat("]");
49
        return "header";
50
      } else if (ch === "=" || ch === ":") {
51
        state.position = "quote";
52
        return null;
53
      } else if (ch === "\\" && state.position === "quote") {
54
        if (stream.eol()) {  // end of line?
55
          // Multiline value
56
          state.nextMultiline = true;
57
        }
58
      }
59
 
60
      return state.position;
61
    },
62
 
63
    startState: function() {
64
      return {
65
        position : "def",       // Current position, "def", "quote" or "comment"
66
        nextMultiline : false,  // Is the next line multiline value
67
        inMultiline : false,    // Is the current line a multiline value
68
        afterSection : false    // Did we just open a section
69
      };
70
    }
71
 
72
  };
73
});
74
 
75
CodeMirror.defineMIME("text/x-properties", "properties");
76
CodeMirror.defineMIME("text/x-ini", "properties");
77
 
78
});