annotate .cms/lib/codemirror/mode/solr/solr.js @ 1:1d486627aa1e draft default tip

24.10
author Coffee CMS <info@coffee-cms.ru>
date Sat, 12 Oct 2024 02:51:39 +0000
parents 78edf6b517a0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1 // CodeMirror, copyright (c) by Marijn Haverbeke and others
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
2 // Distributed under an MIT license: https://codemirror.net/5/LICENSE
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
3
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
4 (function(mod) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
5 if (typeof exports == "object" && typeof module == "object") // CommonJS
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
6 mod(require("../../lib/codemirror"));
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
7 else if (typeof define == "function" && define.amd) // AMD
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
8 define(["../../lib/codemirror"], mod);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
9 else // Plain browser env
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
10 mod(CodeMirror);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
11 })(function(CodeMirror) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
12 "use strict";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
13
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
14 CodeMirror.defineMode("solr", function() {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
15 "use strict";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
16
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
17 var isStringChar = /[^\s\|\!\+\-\*\?\~\^\&\:\(\)\[\]\{\}\"\\]/;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
18 var isOperatorChar = /[\|\!\+\-\*\?\~\^\&]/;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
19 var isOperatorString = /^(OR|AND|NOT|TO)$/i;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
20
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
21 function isNumber(word) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
22 return parseFloat(word).toString() === word;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
23 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
24
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
25 function tokenString(quote) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
26 return function(stream, state) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
27 var escaped = false, next;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
28 while ((next = stream.next()) != null) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
29 if (next == quote && !escaped) break;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
30 escaped = !escaped && next == "\\";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
31 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
32
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
33 if (!escaped) state.tokenize = tokenBase;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
34 return "string";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
35 };
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
36 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
37
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
38 function tokenOperator(operator) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
39 return function(stream, state) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
40 var style = "operator";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
41 if (operator == "+")
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
42 style += " positive";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
43 else if (operator == "-")
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
44 style += " negative";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
45 else if (operator == "|")
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
46 stream.eat(/\|/);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
47 else if (operator == "&")
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
48 stream.eat(/\&/);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
49 else if (operator == "^")
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
50 style += " boost";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
51
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
52 state.tokenize = tokenBase;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
53 return style;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
54 };
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
55 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
56
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
57 function tokenWord(ch) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
58 return function(stream, state) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
59 var word = ch;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
60 while ((ch = stream.peek()) && ch.match(isStringChar) != null) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
61 word += stream.next();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
62 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
63
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
64 state.tokenize = tokenBase;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
65 if (isOperatorString.test(word))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
66 return "operator";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
67 else if (isNumber(word))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
68 return "number";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
69 else if (stream.peek() == ":")
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
70 return "field";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
71 else
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
72 return "string";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
73 };
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
74 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
75
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
76 function tokenBase(stream, state) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
77 var ch = stream.next();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
78 if (ch == '"')
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
79 state.tokenize = tokenString(ch);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
80 else if (isOperatorChar.test(ch))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
81 state.tokenize = tokenOperator(ch);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
82 else if (isStringChar.test(ch))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
83 state.tokenize = tokenWord(ch);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
84
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
85 return (state.tokenize != tokenBase) ? state.tokenize(stream, state) : null;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
86 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
87
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
88 return {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
89 startState: function() {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
90 return {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
91 tokenize: tokenBase
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
92 };
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
93 },
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
94
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
95 token: function(stream, state) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
96 if (stream.eatSpace()) return null;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
97 return state.tokenize(stream, state);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
98 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
99 };
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
100 });
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
101
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
102 CodeMirror.defineMIME("text/x-solr", "solr");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
103
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
104 });