@duet3d/monacotokens 3.7.0-alpha.1 → 3.7.0-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1 +1,4 @@
1
1
  export * from "./monaco-gcode";
2
+ export * from "./monaco-stm32";
3
+ export * from "./monaco-menu";
4
+ export * from "./register";
package/dist/index.js CHANGED
@@ -15,3 +15,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./monaco-gcode"), exports);
18
+ __exportStar(require("./monaco-stm32"), exports);
19
+ __exportStar(require("./monaco-menu"), exports);
20
+ __exportStar(require("./register"), exports);
@@ -1,3 +1,4 @@
1
1
  import type * as monaco from "monaco-editor/esm/vs/editor/editor.api";
2
2
  export declare const gcodeFDMLanguage: monaco.languages.IMonarchLanguage;
3
3
  export declare const gcodeCNCLanguage: monaco.languages.IMonarchLanguage;
4
+ export declare const gcodeLanguageConfiguration: monaco.languages.LanguageConfiguration;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.gcodeCNCLanguage = exports.gcodeFDMLanguage = void 0;
3
+ exports.gcodeLanguageConfiguration = exports.gcodeCNCLanguage = exports.gcodeFDMLanguage = void 0;
4
4
  /**
5
5
  * Generate a Monarch language for RRF-style G-code
6
6
  * @param cncMode If true, comments in parentheses are allowed
@@ -8,8 +8,8 @@ exports.gcodeCNCLanguage = exports.gcodeFDMLanguage = void 0;
8
8
  function generateMonarchLanguage(fdmMode) {
9
9
  return {
10
10
  consts: ["true", "false", "iterations", "line", "null", "pi", "result", "input"],
11
- functions: ["abs", "acos", "asin", "atan", "atan2", "cos", "degrees", "exists", "fileexists", "fileread", "floor", "isnan", "max",
12
- "min", "mod", "radians", "random", "sin", "square", "sqrt", "tan", "vector", "take", "drop", "find"],
11
+ functions: ["abs", "acos", "asin", "atan", "atan2", "ceil", "cos", "datetime", "degrees", "drop", "exists", "exp", "fileexists", "fileread",
12
+ "find", "floor", "isnan", "log", "max", "min", "mod", "pow", "radians", "random", "round", "sin", "sqrt", "square", "take", "tan", "vector"],
13
13
  keywords: ["abort", "echo", "if", "elif", "while", "set"],
14
14
  noArgKeywords: ["else", "break", "continue"],
15
15
  varKeywords: ["global", "var"],
@@ -18,6 +18,8 @@ function generateMonarchLanguage(fdmMode) {
18
18
  includeLF: true,
19
19
  tokenizer: {
20
20
  root: [
21
+ // line numbers
22
+ [/[nN]\d+/, "type"],
21
23
  // G/M/T-codes
22
24
  [/[gG][0123](?=\D)/, "keyword", fdmMode ? "normalGcode" : "moveGcode"],
23
25
  [/[gGmM]\d+(\.\d+)?/, "keyword", "normalGcode"],
@@ -37,6 +39,7 @@ function generateMonarchLanguage(fdmMode) {
37
39
  [/\d+/, "number"],
38
40
  // strings
39
41
  [/"(.|\"\")*?"/, "string"],
42
+ [/"[^"\n]*/, "invalid"],
40
43
  // comments
41
44
  [/;.*/, "comment"],
42
45
  [/\(.*\)/, fdmMode ? "invalid" : "comment"]
@@ -47,8 +50,12 @@ function generateMonarchLanguage(fdmMode) {
47
50
  [/[gGmM]\d+(\.\d*)?/, "keyword", "normalGcode"],
48
51
  [/[tT](?=\{)/, "keyword", "normalGcodeWithT"],
49
52
  [/[tT]-?\d+/, "keyword", "normalGcodeWithT"],
53
+ // checksums
54
+ [/\*\d+/, "type"],
50
55
  // parameter letters
51
56
  [/'?[a-zA-Z]/, "keyword"],
57
+ // unterminated expression (no closing brace before end of line)
58
+ [/\{(?![^\n]*\})/, "invalid", "@unterminatedCurly"],
52
59
  // expressions
53
60
  [/{/, "operator", "@curlyBracket"],
54
61
  // enclosed comments
@@ -88,6 +95,9 @@ function generateMonarchLanguage(fdmMode) {
88
95
  "@functions": "keyword"
89
96
  }
90
97
  }],
98
+ // unterminated nested expressions
99
+ [/\{(?![^\n]*\})/, "invalid", "@unterminatedCurly"],
100
+ [/\[(?![^\n]*\])/, "invalid", "@unterminatedSquare"],
91
101
  // nested expressions
92
102
  [/{/, "operator", "@curlyBracket"],
93
103
  [/\[/, "operator", "@squareBracket"],
@@ -97,6 +107,7 @@ function generateMonarchLanguage(fdmMode) {
97
107
  [/\d+/, "number"],
98
108
  // strings and chars
99
109
  [/"(.|\"\")*?"/, "string"],
110
+ [/"[^"\n]*/, "invalid"],
100
111
  [/'.'/, "string"],
101
112
  // operators
102
113
  [/@symbols/, {
@@ -117,17 +128,30 @@ function generateMonarchLanguage(fdmMode) {
117
128
  { include: "expression" }
118
129
  ],
119
130
  curlyBracket: [
131
+ // unterminated brace
132
+ [/\n/, "invalid", "@popall"],
120
133
  // curly brackets contain expressions
121
134
  { include: "expression" },
122
- // terminate whern reaching a closing bracket
135
+ // terminate when reaching a closing bracket
123
136
  [/}/, "operator", "@pop"],
124
137
  ],
125
138
  squareBracket: [
139
+ // unterminated bracket
140
+ [/\n/, "invalid", "@popall"],
126
141
  // square brackets contain expressions
127
142
  { include: "expression" },
128
- // terminate whern reaching a closing bracket
143
+ // terminate when reaching a closing bracket
129
144
  [/\]/, "operator", "@pop"],
130
145
  ],
146
+ unterminatedCurly: [
147
+ // color remainder of line as invalid, then pop
148
+ [/[^\n]+/, "invalid"],
149
+ [/\n/, "", "@popall"]
150
+ ],
151
+ unterminatedSquare: [
152
+ [/[^\n]+/, "invalid"],
153
+ [/\n/, "", "@popall"]
154
+ ],
131
155
  varName: [
132
156
  // variable name
133
157
  [/[a-zA-Z_$][\w$]*/, "variable.name", "@expression"],
@@ -139,3 +163,30 @@ function generateMonarchLanguage(fdmMode) {
139
163
  }
140
164
  exports.gcodeFDMLanguage = generateMonarchLanguage(true);
141
165
  exports.gcodeCNCLanguage = generateMonarchLanguage(false);
166
+ exports.gcodeLanguageConfiguration = {
167
+ comments: {
168
+ lineComment: ";"
169
+ },
170
+ brackets: [
171
+ ["{", "}"],
172
+ ["[", "]"],
173
+ ["(", ")"]
174
+ ],
175
+ autoClosingPairs: [
176
+ { open: "{", close: "}" },
177
+ { open: "[", close: "]" },
178
+ { open: "(", close: ")" },
179
+ { open: "\"", close: "\"" }
180
+ ],
181
+ surroundingPairs: [
182
+ { open: "{", close: "}" },
183
+ { open: "[", close: "]" },
184
+ { open: "(", close: ")" },
185
+ { open: "\"", close: "\"" }
186
+ ],
187
+ // Python-style block indentation: pressing Enter after if/elif/else/while indents the next line one level deeper
188
+ indentationRules: {
189
+ increaseIndentPattern: /^\s*(if|elif|else|while)\b.*$/,
190
+ decreaseIndentPattern: /^\s*(break|continue)\b.*$/
191
+ }
192
+ };
@@ -0,0 +1,3 @@
1
+ import type * as monaco from "monaco-editor/esm/vs/editor/editor.api";
2
+ export declare const menuLanguage: monaco.languages.IMonarchLanguage;
3
+ export declare const menuLanguageConfiguration: monaco.languages.LanguageConfiguration;
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.menuLanguageConfiguration = exports.menuLanguage = void 0;
4
+ exports.menuLanguage = {
5
+ keywords: ["image", "text", "button", "value", "alter", "files"],
6
+ symbols: /[=><!~?:&|+\-*#\/\^%]+/,
7
+ operators: ['*', '/', '+', '-', "==", "!=", '=', "<=", '<', ">=", ">>>", ">>", '>', '!', "&&", '&', "||", '|', '^', '?', ':'],
8
+ includeLF: true,
9
+ tokenizer: {
10
+ root: [
11
+ // keywords
12
+ [/[a-z_$][\w$]*/, {
13
+ cases: {
14
+ "@keywords": { token: "keyword" }
15
+ }
16
+ }],
17
+ // numbers
18
+ [/\d*\.\d+([eE][\-+]?\d+)?/, "number.float"],
19
+ [/0[xX][0-9a-fA-F]+/, "number.hex"],
20
+ [/\d+/, "number"],
21
+ // strings
22
+ [/"(.|\"\")*?"/, "string"],
23
+ // comments
24
+ [/;.*/, "comment"],
25
+ // parameter letters
26
+ [/'?[A-Z]/, "keyword"],
27
+ [/'[a-z]/, "keyword"]
28
+ ]
29
+ }
30
+ };
31
+ exports.menuLanguageConfiguration = {
32
+ comments: {
33
+ lineComment: ";"
34
+ }
35
+ };
@@ -0,0 +1,3 @@
1
+ import type * as monaco from "monaco-editor/esm/vs/editor/editor.api";
2
+ export declare const stm32Language: monaco.languages.IMonarchLanguage;
3
+ export declare const stm32LanguageConfiguration: monaco.languages.LanguageConfiguration;
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.stm32LanguageConfiguration = exports.stm32Language = void 0;
4
+ exports.stm32Language = {
5
+ keywordsPrimary: ["8266wifi", "accelerometer", "atx", "board", "heat", "lcd", "led", "leds", "pins", "power", "sbc", "sdCard", "serial", "SPI0", "SPI1", "SPI2", "SPI3", "SPI4", "SPI5", "SPI6", "SPI7", "SPI8", "stepper"],
6
+ keywordsSecondary: ["clockReg", "csPin", "espDataReadyPin", "espResetPin", "TfrReadyPin", "serialRxTxPins", "spiChannel", "initialPowerOn", "powerPin", "powerPinInverted", "spiTempSensorChannel", "spiTempSensorCSPins", "tempSensePins", "thermistorSeriesResistor", "encoderPinA", "encoderPinB", "encoderPinSw", "lcdBeepPin", "lcdCSPin", "lcdDCPin", "panelButtonPin", "neopixelPin", "activity", "activityOn", "diagnostic", "diagnosticOn", "SetHigh", "SetLow", "VInDetectPin", "voltage", "loadConfig", "external", "internal", "aux", "aux2", "pins", "directionPins", "enablePins", "numSmartDrivers", "num5160Drivers", "stepPins", "TmcDiagPins", "TmcUartPins"],
7
+ keywordsTertiary: ["cardDetectPin", "csPin", "spiChannel", "spiFrequencyHz", "spiFrequencyHz", "rxTxPins", "rxTxPins"],
8
+ symbols: /[=><!~?:&|+\-*#\/\^%]+/,
9
+ operators: ['*', '/', '+', '-', "==", "!=", '=', "<=", '<', ">=", ">>>", ">>", '>', '!', "&&", '&', "||", '|', '^', '?', ':'],
10
+ includeLF: true,
11
+ tokenizer: {
12
+ root: [
13
+ // keywords
14
+ [/[a-zA-Z0-9_$][\w$]*/, {
15
+ cases: {
16
+ "@keywordsPrimary": { token: "keyword" },
17
+ "@keywordsSecondary": { token: "keyword" },
18
+ "@keywordsTertiary": { token: "keyword" }
19
+ }
20
+ }],
21
+ // comments
22
+ [/\/\/.*/, "comment"],
23
+ [/;.*/, "comment"],
24
+ // expressions
25
+ [/{/, "operator", "@curlyBracket"],
26
+ // expressions
27
+ [/=/, "operator", "@equals"],
28
+ ],
29
+ expression: [
30
+ // numbers
31
+ [/\d+/, "number"],
32
+ // Pin Numbers
33
+ [/[a-iA-I]\.\d+/, "string"],
34
+ [/[a-iA-I]\_\d+/, "string"],
35
+ [/[a-iA-I]\d+/, "string"],
36
+ [/P[a-iA-I]\.\d+/, "string"],
37
+ [/P[a-iA-I]\_\d+/, "string"],
38
+ [/P[a-iA-I]\d+/, "string"],
39
+ [/NoPin/, "string"],
40
+ // strings
41
+ [/"(.|\"\")*?"/, "string"],
42
+ [/[a-zA-Z0-9_$][\w$]*/, "string"],
43
+ // operators
44
+ [/@symbols/, {
45
+ cases: {
46
+ "@operators": "operator",
47
+ "@default": ""
48
+ }
49
+ }],
50
+ // comments
51
+ [/;.*/, "comment"],
52
+ // EOL
53
+ [/\n/, "", "@popall"],
54
+ ],
55
+ curlyBracket: [
56
+ // curly brackets contain expressions
57
+ { include: "expression" },
58
+ // terminate when reaching a closing bracket
59
+ [/}/, "operator", "@pop"],
60
+ ],
61
+ equals: [
62
+ // curly brackets contain expressions
63
+ { include: "expression" },
64
+ // EOL
65
+ [/\n/, "", "@popall"],
66
+ ]
67
+ }
68
+ };
69
+ exports.stm32LanguageConfiguration = {
70
+ comments: {
71
+ lineComment: ";"
72
+ },
73
+ brackets: [
74
+ ["{", "}"]
75
+ ],
76
+ autoClosingPairs: [
77
+ { open: "{", close: "}" },
78
+ { open: "\"", close: "\"" }
79
+ ],
80
+ surroundingPairs: [
81
+ { open: "{", close: "}" },
82
+ { open: "\"", close: "\"" }
83
+ ]
84
+ };
@@ -0,0 +1,6 @@
1
+ import type * as monaco from "monaco-editor/esm/vs/editor/editor.api";
2
+ /**
3
+ * Register all Duet-specific languages (gcode-fdm, gcode-cnc, STM32, menu)
4
+ * with a Monaco instance, attaching their tokenizers and language configurations.
5
+ */
6
+ export declare function registerDuetLanguages(monacoInstance: typeof monaco): void;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerDuetLanguages = registerDuetLanguages;
4
+ const monaco_gcode_1 = require("./monaco-gcode");
5
+ const monaco_stm32_1 = require("./monaco-stm32");
6
+ const monaco_menu_1 = require("./monaco-menu");
7
+ /**
8
+ * Register all Duet-specific languages (gcode-fdm, gcode-cnc, STM32, menu)
9
+ * with a Monaco instance, attaching their tokenizers and language configurations.
10
+ */
11
+ function registerDuetLanguages(monacoInstance) {
12
+ monacoInstance.languages.register({ id: "gcode-fdm" });
13
+ monacoInstance.languages.setMonarchTokensProvider("gcode-fdm", monaco_gcode_1.gcodeFDMLanguage);
14
+ monacoInstance.languages.setLanguageConfiguration("gcode-fdm", monaco_gcode_1.gcodeLanguageConfiguration);
15
+ monacoInstance.languages.register({ id: "gcode-cnc" });
16
+ monacoInstance.languages.setMonarchTokensProvider("gcode-cnc", monaco_gcode_1.gcodeCNCLanguage);
17
+ monacoInstance.languages.setLanguageConfiguration("gcode-cnc", monaco_gcode_1.gcodeLanguageConfiguration);
18
+ monacoInstance.languages.register({ id: "STM32" });
19
+ monacoInstance.languages.setMonarchTokensProvider("STM32", monaco_stm32_1.stm32Language);
20
+ monacoInstance.languages.setLanguageConfiguration("STM32", monaco_stm32_1.stm32LanguageConfiguration);
21
+ monacoInstance.languages.register({ id: "menu" });
22
+ monacoInstance.languages.setMonarchTokensProvider("menu", monaco_menu_1.menuLanguage);
23
+ monacoInstance.languages.setLanguageConfiguration("menu", monaco_menu_1.menuLanguageConfiguration);
24
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@duet3d/monacotokens",
3
- "version": "3.7.0-alpha.1",
3
+ "version": "3.7.0-alpha.2",
4
4
  "description": "TypeScript library that holds syntax highlighting files for the Monaco editor",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",