diff .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
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/.cms/lib/codemirror/mode/protobuf/protobuf.js	Fri Oct 11 22:40:23 2024 +0000
@@ -0,0 +1,72 @@
+// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: https://codemirror.net/5/LICENSE
+
+(function(mod) {
+  if (typeof exports == "object" && typeof module == "object") // CommonJS
+    mod(require("../../lib/codemirror"));
+  else if (typeof define == "function" && define.amd) // AMD
+    define(["../../lib/codemirror"], mod);
+  else // Plain browser env
+    mod(CodeMirror);
+})(function(CodeMirror) {
+  "use strict";
+
+  function wordRegexp(words) {
+    return new RegExp("^((" + words.join(")|(") + "))\\b", "i");
+  };
+
+  var keywordArray = [
+    "package", "message", "import", "syntax",
+    "required", "optional", "repeated", "reserved", "default", "extensions", "packed",
+    "bool", "bytes", "double", "enum", "float", "string",
+    "int32", "int64", "uint32", "uint64", "sint32", "sint64", "fixed32", "fixed64", "sfixed32", "sfixed64",
+    "option", "service", "rpc", "returns"
+  ];
+  var keywords = wordRegexp(keywordArray);
+
+  CodeMirror.registerHelper("hintWords", "protobuf", keywordArray);
+
+  var identifiers = new RegExp("^[_A-Za-z\xa1-\uffff][_A-Za-z0-9\xa1-\uffff]*");
+
+  function tokenBase(stream) {
+    // whitespaces
+    if (stream.eatSpace()) return null;
+
+    // Handle one line Comments
+    if (stream.match("//")) {
+      stream.skipToEnd();
+      return "comment";
+    }
+
+    // Handle Number Literals
+    if (stream.match(/^[0-9\.+-]/, false)) {
+      if (stream.match(/^[+-]?0x[0-9a-fA-F]+/))
+        return "number";
+      if (stream.match(/^[+-]?\d*\.\d+([EeDd][+-]?\d+)?/))
+        return "number";
+      if (stream.match(/^[+-]?\d+([EeDd][+-]?\d+)?/))
+        return "number";
+    }
+
+    // Handle Strings
+    if (stream.match(/^"([^"]|(""))*"/)) { return "string"; }
+    if (stream.match(/^'([^']|(''))*'/)) { return "string"; }
+
+    // Handle words
+    if (stream.match(keywords)) { return "keyword"; }
+    if (stream.match(identifiers)) { return "variable"; } ;
+
+    // Handle non-detected items
+    stream.next();
+    return null;
+  };
+
+  CodeMirror.defineMode("protobuf", function() {
+    return {
+      token: tokenBase,
+      fold: "brace"
+    };
+  });
+
+  CodeMirror.defineMIME("text/x-protobuf", "protobuf");
+});