annotate .cms/lib/codemirror/mode/cmake/cmake.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")
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)
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
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("cmake", function () {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
15 var variable_regex = /({)?[a-zA-Z0-9_]+(})?/;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
16
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
17 function tokenString(stream, state) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
18 var current, prev, found_var = false;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
19 while (!stream.eol() && (current = stream.next()) != state.pending) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
20 if (current === '$' && prev != '\\' && state.pending == '"') {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
21 found_var = true;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
22 break;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
23 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
24 prev = current;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
25 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
26 if (found_var) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
27 stream.backUp(1);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
28 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
29 if (current == state.pending) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
30 state.continueString = false;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
31 } else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
32 state.continueString = true;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
33 }
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 function tokenize(stream, state) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
38 var ch = stream.next();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
39
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
40 // Have we found a variable?
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
41 if (ch === '$') {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
42 if (stream.match(variable_regex)) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
43 return 'variable-2';
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
44 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
45 return 'variable';
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
46 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
47 // Should we still be looking for the end of a string?
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
48 if (state.continueString) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
49 // If so, go through the loop again
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
50 stream.backUp(1);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
51 return tokenString(stream, state);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
52 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
53 // Do we just have a function on our hands?
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
54 // In 'cmake_minimum_required (VERSION 2.8.8)', 'cmake_minimum_required' is matched
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
55 if (stream.match(/(\s+)?\w+\(/) || stream.match(/(\s+)?\w+\ \(/)) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
56 stream.backUp(1);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
57 return 'def';
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
58 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
59 if (ch == "#") {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
60 stream.skipToEnd();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
61 return "comment";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
62 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
63 // Have we found a string?
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
64 if (ch == "'" || ch == '"') {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
65 // Store the type (single or double)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
66 state.pending = ch;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
67 // Perform the looping function to find the end
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
68 return tokenString(stream, state);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
69 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
70 if (ch == '(' || ch == ')') {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
71 return 'bracket';
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
72 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
73 if (ch.match(/[0-9]/)) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
74 return 'number';
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
75 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
76 stream.eatWhile(/[\w-]/);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
77 return null;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
78 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
79 return {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
80 startState: function () {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
81 var state = {};
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
82 state.inDefinition = false;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
83 state.inInclude = false;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
84 state.continueString = false;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
85 state.pending = false;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
86 return state;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
87 },
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
88 token: function (stream, state) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
89 if (stream.eatSpace()) return null;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
90 return tokenize(stream, state);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
91 }
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 CodeMirror.defineMIME("text/x-cmake", "cmake");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
96
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
97 });