github.com/jancarloviray/community@v0.41.1-0.20170124221257-33a66c87cf2f/app/public/codemirror/mode/solr/solr.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("solr", function() {
    15    "use strict";
    16  
    17    var isStringChar = /[^\s\|\!\+\-\*\?\~\^\&\:\(\)\[\]\{\}\^\"\\]/;
    18    var isOperatorChar = /[\|\!\+\-\*\?\~\^\&]/;
    19    var isOperatorString = /^(OR|AND|NOT|TO)$/i;
    20  
    21    function isNumber(word) {
    22      return parseFloat(word, 10).toString() === word;
    23    }
    24  
    25    function tokenString(quote) {
    26      return function(stream, state) {
    27        var escaped = false, next;
    28        while ((next = stream.next()) != null) {
    29          if (next == quote && !escaped) break;
    30          escaped = !escaped && next == "\\";
    31        }
    32  
    33        if (!escaped) state.tokenize = tokenBase;
    34        return "string";
    35      };
    36    }
    37  
    38    function tokenOperator(operator) {
    39      return function(stream, state) {
    40        var style = "operator";
    41        if (operator == "+")
    42          style += " positive";
    43        else if (operator == "-")
    44          style += " negative";
    45        else if (operator == "|")
    46          stream.eat(/\|/);
    47        else if (operator == "&")
    48          stream.eat(/\&/);
    49        else if (operator == "^")
    50          style += " boost";
    51  
    52        state.tokenize = tokenBase;
    53        return style;
    54      };
    55    }
    56  
    57    function tokenWord(ch) {
    58      return function(stream, state) {
    59        var word = ch;
    60        while ((ch = stream.peek()) && ch.match(isStringChar) != null) {
    61          word += stream.next();
    62        }
    63  
    64        state.tokenize = tokenBase;
    65        if (isOperatorString.test(word))
    66          return "operator";
    67        else if (isNumber(word))
    68          return "number";
    69        else if (stream.peek() == ":")
    70          return "field";
    71        else
    72          return "string";
    73      };
    74    }
    75  
    76    function tokenBase(stream, state) {
    77      var ch = stream.next();
    78      if (ch == '"')
    79        state.tokenize = tokenString(ch);
    80      else if (isOperatorChar.test(ch))
    81        state.tokenize = tokenOperator(ch);
    82      else if (isStringChar.test(ch))
    83        state.tokenize = tokenWord(ch);
    84  
    85      return (state.tokenize != tokenBase) ? state.tokenize(stream, state) : null;
    86    }
    87  
    88    return {
    89      startState: function() {
    90        return {
    91          tokenize: tokenBase
    92        };
    93      },
    94  
    95      token: function(stream, state) {
    96        if (stream.eatSpace()) return null;
    97        return state.tokenize(stream, state);
    98      }
    99    };
   100  });
   101  
   102  CodeMirror.defineMIME("text/x-solr", "solr");
   103  
   104  });