openrat-cms

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

mllike.js (5097B)


      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     if (/[\w\xa1-\uffff]/.test(ch)) {
     87       stream.eatWhile(/[\w\xa1-\uffff]/);
     88       var cur = stream.current();
     89       return words.hasOwnProperty(cur) ? words[cur] : 'variable';
     90     }
     91     return null
     92   }
     93 
     94   function tokenString(stream, state) {
     95     var next, end = false, escaped = false;
     96     while ((next = stream.next()) != null) {
     97       if (next === '"' && !escaped) {
     98         end = true;
     99         break;
    100       }
    101       escaped = !escaped && next === '\\';
    102     }
    103     if (end && !escaped) {
    104       state.tokenize = tokenBase;
    105     }
    106     return 'string';
    107   };
    108 
    109   function tokenComment(stream, state) {
    110     var prev, next;
    111     while(state.commentLevel > 0 && (next = stream.next()) != null) {
    112       if (prev === '(' && next === '*') state.commentLevel++;
    113       if (prev === '*' && next === ')') state.commentLevel--;
    114       prev = next;
    115     }
    116     if (state.commentLevel <= 0) {
    117       state.tokenize = tokenBase;
    118     }
    119     return 'comment';
    120   }
    121 
    122   return {
    123     startState: function() {return {tokenize: tokenBase, commentLevel: 0};},
    124     token: function(stream, state) {
    125       if (stream.eatSpace()) return null;
    126       return state.tokenize(stream, state);
    127     },
    128 
    129     blockCommentStart: "(*",
    130     blockCommentEnd: "*)",
    131     lineComment: parserConfig.slashComments ? "//" : null
    132   };
    133 });
    134 
    135 CodeMirror.defineMIME('text/x-ocaml', {
    136   name: 'mllike',
    137   extraWords: {
    138     'succ': 'keyword',
    139     'trace': 'builtin',
    140     'exit': 'builtin',
    141     'print_string': 'builtin',
    142     'print_endline': 'builtin',
    143     'true': 'atom',
    144     'false': 'atom',
    145     'raise': 'keyword'
    146   }
    147 });
    148 
    149 CodeMirror.defineMIME('text/x-fsharp', {
    150   name: 'mllike',
    151   extraWords: {
    152     'abstract': 'keyword',
    153     'as': 'keyword',
    154     'assert': 'keyword',
    155     'base': 'keyword',
    156     'class': 'keyword',
    157     'default': 'keyword',
    158     'delegate': 'keyword',
    159     'downcast': 'keyword',
    160     'downto': 'keyword',
    161     'elif': 'keyword',
    162     'exception': 'keyword',
    163     'extern': 'keyword',
    164     'finally': 'keyword',
    165     'global': 'keyword',
    166     'inherit': 'keyword',
    167     'inline': 'keyword',
    168     'interface': 'keyword',
    169     'internal': 'keyword',
    170     'lazy': 'keyword',
    171     'let!': 'keyword',
    172     'member' : 'keyword',
    173     'module': 'keyword',
    174     'namespace': 'keyword',
    175     'new': 'keyword',
    176     'null': 'keyword',
    177     'override': 'keyword',
    178     'private': 'keyword',
    179     'public': 'keyword',
    180     'return': 'keyword',
    181     'return!': 'keyword',
    182     'select': 'keyword',
    183     'static': 'keyword',
    184     'struct': 'keyword',
    185     'upcast': 'keyword',
    186     'use': 'keyword',
    187     'use!': 'keyword',
    188     'val': 'keyword',
    189     'when': 'keyword',
    190     'yield': 'keyword',
    191     'yield!': 'keyword',
    192 
    193     'List': 'builtin',
    194     'Seq': 'builtin',
    195     'Map': 'builtin',
    196     'Set': 'builtin',
    197     'int': 'builtin',
    198     'string': 'builtin',
    199     'raise': 'builtin',
    200     'failwith': 'builtin',
    201     'not': 'builtin',
    202     'true': 'builtin',
    203     'false': 'builtin'
    204   },
    205   slashComments: true
    206 });
    207 
    208 });