File modules/editor/codemirror/mode/solr/solr.js

Last commit: Sun Dec 17 01:14:09 2017 +0100	Jan Dankert	Integration eines weiteren Code-Editors: Codemirror. Demnächst müssen wir hier mal aufräumen und andere Editoren rauswerfen.
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).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 });
Download modules/editor/codemirror/mode/solr/solr.js
History Sun, 17 Dec 2017 01:14:09 +0100 Jan Dankert Integration eines weiteren Code-Editors: Codemirror. Demnächst müssen wir hier mal aufräumen und andere Editoren rauswerfen.