github.com/elliott5/community@v0.14.1-0.20160709191136-823126fb026a/app/public/codemirror/mode/mllike/mllike.js (about) 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 });