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('mllike', function(_config, parserConfig) {
15
  var words = {
16
    'let': 'keyword',
17
    'rec': 'keyword',
18
    'in': 'keyword',
19
    'of': 'keyword',
20
    'and': 'keyword',
21
    'if': 'keyword',
22
    'then': 'keyword',
23
    'else': 'keyword',
24
    'for': 'keyword',
25
    'to': 'keyword',
26
    'while': 'keyword',
27
    'do': 'keyword',
28
    'done': 'keyword',
29
    'fun': 'keyword',
30
    'function': 'keyword',
31
    'val': 'keyword',
32
    'type': 'keyword',
33
    'mutable': 'keyword',
34
    'match': 'keyword',
35
    'with': 'keyword',
36
    'try': 'keyword',
37
    'open': 'builtin',
38
    'ignore': 'builtin',
39
    'begin': 'keyword',
40
    'end': 'keyword'
41
  };
42
 
43
  var extraWords = parserConfig.extraWords || {};
44
  for (var prop in extraWords) {
45
    if (extraWords.hasOwnProperty(prop)) {
46
      words[prop] = parserConfig.extraWords[prop];
47
    }
48
  }
49
 
50
  function tokenBase(stream, state) {
51
    var ch = stream.next();
52
 
53
    if (ch === '"') {
54
      state.tokenize = tokenString;
55
      return state.tokenize(stream, state);
56
    }
57
    if (ch === '(') {
58
      if (stream.eat('*')) {
59
        state.commentLevel++;
60
        state.tokenize = tokenComment;
61
        return state.tokenize(stream, state);
62
      }
63
    }
64
    if (ch === '~') {
65
      stream.eatWhile(/\w/);
66
      return 'variable-2';
67
    }
68
    if (ch === '`') {
69
      stream.eatWhile(/\w/);
70
      return 'quote';
71
    }
72
    if (ch === '/' && parserConfig.slashComments && stream.eat('/')) {
73
      stream.skipToEnd();
74
      return 'comment';
75
    }
76
    if (/\d/.test(ch)) {
77
      stream.eatWhile(/[\d]/);
78
      if (stream.eat('.')) {
79
        stream.eatWhile(/[\d]/);
80
      }
81
      return 'number';
82
    }
83
    if ( /[+\-*&%=<>!?|]/.test(ch)) {
84
      return 'operator';
85
    }
86
    stream.eatWhile(/\w/);
87
    var cur = stream.current();
88
    return words.hasOwnProperty(cur) ? words[cur] : 'variable';
89
  }
90
 
91
  function tokenString(stream, state) {
92
    var next, end = false, escaped = false;
93
    while ((next = stream.next()) != null) {
94
      if (next === '"' && !escaped) {
95
        end = true;
96
        break;
97
      }
98
      escaped = !escaped && next === '\\';
99
    }
100
    if (end && !escaped) {
101
      state.tokenize = tokenBase;
102
    }
103
    return 'string';
104
  };
105
 
106
  function tokenComment(stream, state) {
107
    var prev, next;
108
    while(state.commentLevel > 0 && (next = stream.next()) != null) {
109
      if (prev === '(' && next === '*') state.commentLevel++;
110
      if (prev === '*' && next === ')') state.commentLevel--;
111
      prev = next;
112
    }
113
    if (state.commentLevel <= 0) {
114
      state.tokenize = tokenBase;
115
    }
116
    return 'comment';
117
  }
118
 
119
  return {
120
    startState: function() {return {tokenize: tokenBase, commentLevel: 0};},
121
    token: function(stream, state) {
122
      if (stream.eatSpace()) return null;
123
      return state.tokenize(stream, state);
124
    },
125
 
126
    blockCommentStart: "(*",
127
    blockCommentEnd: "*)",
128
    lineComment: parserConfig.slashComments ? "//" : null
129
  };
130
});
131
 
132
CodeMirror.defineMIME('text/x-ocaml', {
133
  name: 'mllike',
134
  extraWords: {
135
    'succ': 'keyword',
136
    'trace': 'builtin',
137
    'exit': 'builtin',
138
    'print_string': 'builtin',
139
    'print_endline': 'builtin',
140
    'true': 'atom',
141
    'false': 'atom',
142
    'raise': 'keyword'
143
  }
144
});
145
 
146
CodeMirror.defineMIME('text/x-fsharp', {
147
  name: 'mllike',
148
  extraWords: {
149
    'abstract': 'keyword',
150
    'as': 'keyword',
151
    'assert': 'keyword',
152
    'base': 'keyword',
153
    'class': 'keyword',
154
    'default': 'keyword',
155
    'delegate': 'keyword',
156
    'downcast': 'keyword',
157
    'downto': 'keyword',
158
    'elif': 'keyword',
159
    'exception': 'keyword',
160
    'extern': 'keyword',
161
    'finally': 'keyword',
162
    'global': 'keyword',
163
    'inherit': 'keyword',
164
    'inline': 'keyword',
165
    'interface': 'keyword',
166
    'internal': 'keyword',
167
    'lazy': 'keyword',
168
    'let!': 'keyword',
169
    'member' : 'keyword',
170
    'module': 'keyword',
171
    'namespace': 'keyword',
172
    'new': 'keyword',
173
    'null': 'keyword',
174
    'override': 'keyword',
175
    'private': 'keyword',
176
    'public': 'keyword',
177
    'return': 'keyword',
178
    'return!': 'keyword',
179
    'select': 'keyword',
180
    'static': 'keyword',
181
    'struct': 'keyword',
182
    'upcast': 'keyword',
183
    'use': 'keyword',
184
    'use!': 'keyword',
185
    'val': 'keyword',
186
    'when': 'keyword',
187
    'yield': 'keyword',
188
    'yield!': 'keyword',
189
 
190
    'List': 'builtin',
191
    'Seq': 'builtin',
192
    'Map': 'builtin',
193
    'Set': 'builtin',
194
    'int': 'builtin',
195
    'string': 'builtin',
196
    'raise': 'builtin',
197
    'failwith': 'builtin',
198
    'not': 'builtin',
199
    'true': 'builtin',
200
    'false': 'builtin'
201
  },
202
  slashComments: true
203
});
204
 
205
});