annotate .cms/lib/codemirror/mode/protobuf/protobuf.js @ 0:78edf6b517a0 draft

24.10
author Coffee CMS <info@coffee-cms.ru>
date Fri, 11 Oct 2024 22:40:23 +0000
parents
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 function wordRegexp(words) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
15 return new RegExp("^((" + words.join(")|(") + "))\\b", "i");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
16 };
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
17
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
18 var keywordArray = [
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
19 "package", "message", "import", "syntax",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
20 "required", "optional", "repeated", "reserved", "default", "extensions", "packed",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
21 "bool", "bytes", "double", "enum", "float", "string",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
22 "int32", "int64", "uint32", "uint64", "sint32", "sint64", "fixed32", "fixed64", "sfixed32", "sfixed64",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
23 "option", "service", "rpc", "returns"
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
24 ];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
25 var keywords = wordRegexp(keywordArray);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
26
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
27 CodeMirror.registerHelper("hintWords", "protobuf", keywordArray);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
28
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
29 var identifiers = new RegExp("^[_A-Za-z\xa1-\uffff][_A-Za-z0-9\xa1-\uffff]*");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
30
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
31 function tokenBase(stream) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
32 // whitespaces
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
33 if (stream.eatSpace()) return null;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
34
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
35 // Handle one line Comments
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
36 if (stream.match("//")) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
37 stream.skipToEnd();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
38 return "comment";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
39 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
40
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
41 // Handle Number Literals
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
42 if (stream.match(/^[0-9\.+-]/, false)) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
43 if (stream.match(/^[+-]?0x[0-9a-fA-F]+/))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
44 return "number";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
45 if (stream.match(/^[+-]?\d*\.\d+([EeDd][+-]?\d+)?/))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
46 return "number";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
47 if (stream.match(/^[+-]?\d+([EeDd][+-]?\d+)?/))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
48 return "number";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
49 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
50
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
51 // Handle Strings
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
52 if (stream.match(/^"([^"]|(""))*"/)) { return "string"; }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
53 if (stream.match(/^'([^']|(''))*'/)) { return "string"; }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
54
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
55 // Handle words
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
56 if (stream.match(keywords)) { return "keyword"; }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
57 if (stream.match(identifiers)) { return "variable"; } ;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
58
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
59 // Handle non-detected items
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
60 stream.next();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
61 return null;
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 CodeMirror.defineMode("protobuf", function() {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
65 return {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
66 token: tokenBase,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
67 fold: "brace"
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
68 };
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
69 });
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
70
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
71 CodeMirror.defineMIME("text/x-protobuf", "protobuf");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
72 });