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  });