GPQAPP

Форк
0
160 строк · 3.7 Кб
1
// CodeMirror, copyright (c) by Marijn Haverbeke and others
2
// Distributed under an MIT license: https://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("eiffel", function() {
15
  function wordObj(words) {
16
    var o = {};
17
    for (var i = 0, e = words.length; i < e; ++i) o[words[i]] = true;
18
    return o;
19
  }
20
  var keywords = wordObj([
21
    'note',
22
    'across',
23
    'when',
24
    'variant',
25
    'until',
26
    'unique',
27
    'undefine',
28
    'then',
29
    'strip',
30
    'select',
31
    'retry',
32
    'rescue',
33
    'require',
34
    'rename',
35
    'reference',
36
    'redefine',
37
    'prefix',
38
    'once',
39
    'old',
40
    'obsolete',
41
    'loop',
42
    'local',
43
    'like',
44
    'is',
45
    'inspect',
46
    'infix',
47
    'include',
48
    'if',
49
    'frozen',
50
    'from',
51
    'external',
52
    'export',
53
    'ensure',
54
    'end',
55
    'elseif',
56
    'else',
57
    'do',
58
    'creation',
59
    'create',
60
    'check',
61
    'alias',
62
    'agent',
63
    'separate',
64
    'invariant',
65
    'inherit',
66
    'indexing',
67
    'feature',
68
    'expanded',
69
    'deferred',
70
    'class',
71
    'Void',
72
    'True',
73
    'Result',
74
    'Precursor',
75
    'False',
76
    'Current',
77
    'create',
78
    'attached',
79
    'detachable',
80
    'as',
81
    'and',
82
    'implies',
83
    'not',
84
    'or'
85
  ]);
86
  var operators = wordObj([":=", "and then","and", "or","<<",">>"]);
87

88
  function chain(newtok, stream, state) {
89
    state.tokenize.push(newtok);
90
    return newtok(stream, state);
91
  }
92

93
  function tokenBase(stream, state) {
94
    if (stream.eatSpace()) return null;
95
    var ch = stream.next();
96
    if (ch == '"'||ch == "'") {
97
      return chain(readQuoted(ch, "string"), stream, state);
98
    } else if (ch == "-"&&stream.eat("-")) {
99
      stream.skipToEnd();
100
      return "comment";
101
    } else if (ch == ":"&&stream.eat("=")) {
102
      return "operator";
103
    } else if (/[0-9]/.test(ch)) {
104
      stream.eatWhile(/[xXbBCc0-9\.]/);
105
      stream.eat(/[\?\!]/);
106
      return "ident";
107
    } else if (/[a-zA-Z_0-9]/.test(ch)) {
108
      stream.eatWhile(/[a-zA-Z_0-9]/);
109
      stream.eat(/[\?\!]/);
110
      return "ident";
111
    } else if (/[=+\-\/*^%<>~]/.test(ch)) {
112
      stream.eatWhile(/[=+\-\/*^%<>~]/);
113
      return "operator";
114
    } else {
115
      return null;
116
    }
117
  }
118

119
  function readQuoted(quote, style,  unescaped) {
120
    return function(stream, state) {
121
      var escaped = false, ch;
122
      while ((ch = stream.next()) != null) {
123
        if (ch == quote && (unescaped || !escaped)) {
124
          state.tokenize.pop();
125
          break;
126
        }
127
        escaped = !escaped && ch == "%";
128
      }
129
      return style;
130
    };
131
  }
132

133
  return {
134
    startState: function() {
135
      return {tokenize: [tokenBase]};
136
    },
137

138
    token: function(stream, state) {
139
      var style = state.tokenize[state.tokenize.length-1](stream, state);
140
      if (style == "ident") {
141
        var word = stream.current();
142
        style = keywords.propertyIsEnumerable(stream.current()) ? "keyword"
143
          : operators.propertyIsEnumerable(stream.current()) ? "operator"
144
          : /^[A-Z][A-Z_0-9]*$/g.test(word) ? "tag"
145
          : /^0[bB][0-1]+$/g.test(word) ? "number"
146
          : /^0[cC][0-7]+$/g.test(word) ? "number"
147
          : /^0[xX][a-fA-F0-9]+$/g.test(word) ? "number"
148
          : /^([0-9]+\.[0-9]*)|([0-9]*\.[0-9]+)$/g.test(word) ? "number"
149
          : /^[0-9]+$/g.test(word) ? "number"
150
          : "variable";
151
      }
152
      return style;
153
    },
154
    lineComment: "--"
155
  };
156
});
157

158
CodeMirror.defineMIME("text/x-eiffel", "eiffel");
159

160
});
161

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.