first commit
This commit is contained in:
17
.vscode/launch.json
vendored
Normal file
17
.vscode/launch.json
vendored
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
// A launch configuration that launches the extension inside a new window
|
||||||
|
// Use IntelliSense to learn about possible attributes.
|
||||||
|
// Hover to view descriptions of existing attributes.
|
||||||
|
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||||
|
{
|
||||||
|
"version": "0.2.0",
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"name": "Extension",
|
||||||
|
"type": "extensionHost",
|
||||||
|
"request": "launch",
|
||||||
|
"args": [
|
||||||
|
"--extensionDevelopmentPath=${workspaceFolder}"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
4
.vscodeignore
Normal file
4
.vscodeignore
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
.vscode/**
|
||||||
|
.vscode-test/**
|
||||||
|
.gitignore
|
||||||
|
vsc-extension-quickstart.md
|
||||||
BIN
icons/icon192_dark.png
Normal file
BIN
icons/icon192_dark.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.1 KiB |
BIN
icons/icon192_light.png
Normal file
BIN
icons/icon192_light.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.0 KiB |
20
language-configuration.json
Normal file
20
language-configuration.json
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
{
|
||||||
|
"comments": {
|
||||||
|
"lineComment": ";"
|
||||||
|
},
|
||||||
|
"brackets": [
|
||||||
|
["(", ")"],
|
||||||
|
["[", "]"],
|
||||||
|
["{", "}"]
|
||||||
|
],
|
||||||
|
"autoClosingPairs": [
|
||||||
|
{ "open": "(", "close": ")" },
|
||||||
|
{ "open": "[", "close": "]" },
|
||||||
|
{ "open": "{", "close": "}" }
|
||||||
|
],
|
||||||
|
"surroundingPairs": [
|
||||||
|
{ "open": "(", "close": ")" },
|
||||||
|
{ "open": "[", "close": "]" },
|
||||||
|
{ "open": "{", "close": "}" }
|
||||||
|
]
|
||||||
|
}
|
||||||
272
package.json
Normal file
272
package.json
Normal file
@@ -0,0 +1,272 @@
|
|||||||
|
{
|
||||||
|
"name": "nc310-syntax",
|
||||||
|
"displayName": "Balt-System PLC Syntax",
|
||||||
|
"description": "Подсветка, цвета и сниппеты Baltsystem PLC",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"publisher": "andrewkydev",
|
||||||
|
"pricing": "Free",
|
||||||
|
"engines": {
|
||||||
|
"vscode": "^1.45.0"
|
||||||
|
},
|
||||||
|
"main": "./src/extension.js",
|
||||||
|
"activationEvents": [],
|
||||||
|
"contributes": {
|
||||||
|
"semanticTokenColors": {},
|
||||||
|
"tokenColors": [
|
||||||
|
{
|
||||||
|
"scope": "comment.line.semicolon.bsnc",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#6A9955",
|
||||||
|
"fontStyle": "italic"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"scope": "keyword.control.cycle.rpt.start.bsnc",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#FFFFFF",
|
||||||
|
"background": "#FF4500",
|
||||||
|
"fontStyle": "bold"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"scope": "keyword.control.cycle.rpt.end.bsnc",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#FFFFFF",
|
||||||
|
"background": "#228B22",
|
||||||
|
"fontStyle": "bold"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"scope": "punctuation.section.parens.begin.bsnc",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#FFD700"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"scope": "punctuation.section.parens.end.bsnc",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#FFD700"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"scope": "entity.name.function.ucg.bsnc",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#FF69B4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"scope": "constant.numeric.ucg-main.bsnc",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#40E0D0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"scope": "variable.parameter.axis.bsnc",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#1E90FF"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"scope": "constant.numeric.axis-value.bsnc",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#40E0D0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"scope": "constant.numeric.ucg-extra.bsnc",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#40E0D0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"scope": "keyword.control.motion.rapid.bsnc",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#FF69B4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"scope": "keyword.control.motion.linear.bsnc",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#FF69B4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"scope": "variable.other.e-variable.bsnc",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#FFD700"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"scope": "constant.numeric.e-value.bsnc",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#40E0D0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"scope": "variable.parameter.feedrate.bsnc",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#1E90FF"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"scope": "constant.numeric.feedrate-value.bsnc",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#40E0D0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"scope": "entity.name.function.tool-number.bsnc",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#ADFF2F"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"scope": "constant.numeric.tool-offset.bsnc",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#40E0D0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"scope": "support.function.mcode.bsnc",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#FFA500"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"scope": "entity.name.function.spindle-speed.bsnc",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#00BFFF"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"scope": "entity.name.function.triplecode.bsnc",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#FF69B4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"scope": "punctuation.separator.comma.bsnc",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#FFD700"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"scope": "constant.numeric.triplecode-arg.bsnc",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#40E0D0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"scope": "string.quoted.double.bsnc",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#ADFF2F"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"scope": "invalid.illegal.gcode.bsnc",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#FFFFFF",
|
||||||
|
"background": "#FF0000",
|
||||||
|
"fontStyle": "bold"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"configurationDefaults": {
|
||||||
|
"[bsnc]": {
|
||||||
|
"files.encoding": "cp866",
|
||||||
|
"editor.glyphMargin": false
|
||||||
|
},
|
||||||
|
"files.associations": {
|
||||||
|
"[!.]": "bsnc",
|
||||||
|
"[!.][!.]": "bsnc",
|
||||||
|
"[!.][!.][!.]": "bsnc",
|
||||||
|
"[!.][!.][!.][!.]": "bsnc",
|
||||||
|
"[!.][!.][!.][!.][!.]": "bsnc",
|
||||||
|
"[!.][!.][!.][!.][!.][!.]": "bsnc",
|
||||||
|
"[!.][!.][!.][!.][!.][!.][!.]": "bsnc",
|
||||||
|
"[!.][!.][!.][!.][!.][!.][!.][!.]": "bsnc",
|
||||||
|
"[!.][!.][!.][!.][!.][!.][!.][!.][!.]": "bsnc",
|
||||||
|
"[!.][!.][!.][!.][!.][!.][!.][!.][!.][!.]": "bsnc",
|
||||||
|
"[!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.]": "bsnc",
|
||||||
|
"[!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.]": "bsnc",
|
||||||
|
"[!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.]": "bsnc",
|
||||||
|
"[!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.]": "bsnc",
|
||||||
|
"[!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.]": "bsnc",
|
||||||
|
"[!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.]": "bsnc",
|
||||||
|
"[!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.]": "bsnc",
|
||||||
|
"[!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.]": "bsnc",
|
||||||
|
"[!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.]": "bsnc",
|
||||||
|
"[!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.]": "bsnc",
|
||||||
|
"[!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.]": "bsnc",
|
||||||
|
"[!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.]": "bsnc",
|
||||||
|
"[!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.]": "bsnc",
|
||||||
|
"[!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.]": "bsnc",
|
||||||
|
"[!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.]": "bsnc",
|
||||||
|
"[!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.]": "bsnc",
|
||||||
|
"[!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.]": "bsnc",
|
||||||
|
"[!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.]": "bsnc",
|
||||||
|
"[!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.]": "bsnc",
|
||||||
|
"[!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.]": "bsnc"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"languages": [
|
||||||
|
{
|
||||||
|
"id": "bsnc",
|
||||||
|
"aliases": [
|
||||||
|
"Balt-System PLC"
|
||||||
|
],
|
||||||
|
"extensions": [
|
||||||
|
".bsnc",
|
||||||
|
"[!.]",
|
||||||
|
"[!.][!.]",
|
||||||
|
"[!.][!.][!.]",
|
||||||
|
"[!.][!.][!.][!.]",
|
||||||
|
"[!.][!.][!.][!.][!.]",
|
||||||
|
"[!.][!.][!.][!.][!.][!.]",
|
||||||
|
"[!.][!.][!.][!.][!.][!.][!.]",
|
||||||
|
"[!.][!.][!.][!.][!.][!.][!.][!.]",
|
||||||
|
"[!.][!.][!.][!.][!.][!.][!.][!.][!.]",
|
||||||
|
"[!.][!.][!.][!.][!.][!.][!.][!.][!.][!.]",
|
||||||
|
"[!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.]",
|
||||||
|
"[!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.]",
|
||||||
|
"[!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.]",
|
||||||
|
"[!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.]",
|
||||||
|
"[!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.]",
|
||||||
|
"[!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.]",
|
||||||
|
"[!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.]",
|
||||||
|
"[!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.]",
|
||||||
|
"[!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.]",
|
||||||
|
"[!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.]",
|
||||||
|
"[!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.]",
|
||||||
|
"[!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.]",
|
||||||
|
"[!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.]",
|
||||||
|
"[!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.]",
|
||||||
|
"[!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.]",
|
||||||
|
"[!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.]",
|
||||||
|
"[!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.]",
|
||||||
|
"[!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.]",
|
||||||
|
"[!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.]",
|
||||||
|
"[!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.][!.]"
|
||||||
|
],
|
||||||
|
"configuration": "./language-configuration.json",
|
||||||
|
"icon": {
|
||||||
|
"light": "./icons/icon192_light.png",
|
||||||
|
"dark": "./icons/icon192_dark.png"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"grammars": [
|
||||||
|
{
|
||||||
|
"language": "bsnc",
|
||||||
|
"scopeName": "source.bsnc",
|
||||||
|
"path": "./syntaxes/bsnc.tmLanguage.json"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"snippets": [
|
||||||
|
{
|
||||||
|
"language": "bsnc",
|
||||||
|
"path": "./snippets/bsnc.json"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
27
snippets/bsnc.json
Normal file
27
snippets/bsnc.json
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
{
|
||||||
|
"UCG template": {
|
||||||
|
"prefix": "ucg",
|
||||||
|
"body": ["(UCG,2,X-33X33,Y-33Y33,Z-15Z0,1,-3)"],
|
||||||
|
"description": "Шаблон UCG"
|
||||||
|
},
|
||||||
|
"URT cycle": {
|
||||||
|
"prefix": "urt",
|
||||||
|
"body": ["(URT,${1:0})"],
|
||||||
|
"description": "Цикл URT"
|
||||||
|
},
|
||||||
|
"RPT cycle": {
|
||||||
|
"prefix": "rpt",
|
||||||
|
"body": ["(RPT,${1:E0})"],
|
||||||
|
"description": "Цикл RPT"
|
||||||
|
},
|
||||||
|
"ERP": {
|
||||||
|
"prefix": "erp",
|
||||||
|
"body": ["(ERP)"],
|
||||||
|
"description": "Маркер ERP"
|
||||||
|
},
|
||||||
|
"E variable": {
|
||||||
|
"prefix": "evar",
|
||||||
|
"body": ["E${1:30}=${2:0}"],
|
||||||
|
"description": "Переменная E"
|
||||||
|
}
|
||||||
|
}
|
||||||
28
src/extension.js
Normal file
28
src/extension.js
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
'use strict';
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.deactivate = exports.activate = void 0;
|
||||||
|
const vscode = require("vscode");
|
||||||
|
function activate(context) {
|
||||||
|
context.subscriptions.push(vscode.languages.registerDocumentSymbolProvider({ language: "bsnc" }, new FooDocumentSymbolProvider()));
|
||||||
|
}
|
||||||
|
exports.activate = activate;
|
||||||
|
class FooDocumentSymbolProvider {
|
||||||
|
provideDocumentSymbols(document, token) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
var symbols = [];
|
||||||
|
for (var i = 0; i < document.lineCount; i++) {
|
||||||
|
var line = document.lineAt(i);
|
||||||
|
if (line.text.startsWith(";*** ")) {
|
||||||
|
symbols.push({
|
||||||
|
name: line.text.substr(4).trim(),
|
||||||
|
kind: vscode.SymbolKind.Module,
|
||||||
|
location: new vscode.Location(document.uri, line.range)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
resolve(symbols);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function deactivate() { }
|
||||||
|
exports.deactivate = deactivate;
|
||||||
425
syntaxes/bsnc.tmLanguage.json
Normal file
425
syntaxes/bsnc.tmLanguage.json
Normal file
@@ -0,0 +1,425 @@
|
|||||||
|
{
|
||||||
|
"scopeName": "source.bsnc",
|
||||||
|
"patterns": [
|
||||||
|
{
|
||||||
|
"include": "#lineComments"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"include": "#tripleCodes"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"include": "#uao"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"include": "#ucg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"include": "#variablesE"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"include": "#toolChange"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"include": "#spindleWithM"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"include": "#gMoves"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"include": "#coords"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"include": "#cycles"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"include": "#gArcs"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"include": "#arcParams"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"include": "#mCodes"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"include": "#rptCycle"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"include": "#gCodesValid"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"include": "#comments"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"repository": {
|
||||||
|
"lineComments": {
|
||||||
|
"patterns": [
|
||||||
|
{
|
||||||
|
"match": ";.*$",
|
||||||
|
"name": "comment.line.semicolon.bsnc"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"tripleCodes": {
|
||||||
|
"patterns": [
|
||||||
|
{
|
||||||
|
"begin": "(\\()([A-Z]{3})",
|
||||||
|
"beginCaptures": {
|
||||||
|
"1": {
|
||||||
|
"name": "punctuation.section.parens.begin.nc310"
|
||||||
|
},
|
||||||
|
"2": {
|
||||||
|
"name": "entity.name.function.triplecode.nc310"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"end": "\\)",
|
||||||
|
"endCaptures": {
|
||||||
|
"0": {
|
||||||
|
"name": "punctuation.section.parens.end.nc310"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"patterns": [
|
||||||
|
{
|
||||||
|
"match": ",",
|
||||||
|
"name": "punctuation.separator.comma.nc310"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"match": "\"[^\"]*\"",
|
||||||
|
"name": "string.quoted.double.nc310"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"match": "'[^']*'",
|
||||||
|
"name": "string.quoted.single.nc310"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"match": "(E\\d+)",
|
||||||
|
"name": "variable.other.e-variable.nc310"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"match": "([XYZ])([-+]?\\d+(?:\\.\\d+)?)",
|
||||||
|
"captures": {
|
||||||
|
"1": {
|
||||||
|
"name": "variable.parameter.axis.nc310"
|
||||||
|
},
|
||||||
|
"2": {
|
||||||
|
"name": "constant.numeric.axis-value.nc310"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"match": "([-+]?\\d+(?:\\.\\d+)?)",
|
||||||
|
"name": "constant.numeric.triplecode-arg.nc310"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"uao": {
|
||||||
|
"patterns": [
|
||||||
|
{
|
||||||
|
"match": "\\((UAO),(\\-?\\d+(?:\\.\\d+)?)\\)",
|
||||||
|
"captures": {
|
||||||
|
"1": {
|
||||||
|
"name": "entity.name.function.uao.bsnc"
|
||||||
|
},
|
||||||
|
"2": {
|
||||||
|
"name": "constant.numeric.uao-value.bsnc"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ucg": {
|
||||||
|
"patterns": [
|
||||||
|
{
|
||||||
|
"match": "\\((UCG),(\\-?\\d+(?:\\.\\d+)?),([XYZ])([-+]?\\d+(?:\\.\\d+)?)([XYZ])([-+]?\\d+(?:\\.\\d+)?),([XYZ])([-+]?\\d+(?:\\.\\d+)?),(\\-?\\d+(?:\\.\\d+)?),(\\-?\\d+(?:\\.\\d+)?)\\)",
|
||||||
|
"captures": {
|
||||||
|
"1": {
|
||||||
|
"name": "entity.name.function.ucg.bsnc"
|
||||||
|
},
|
||||||
|
"2": {
|
||||||
|
"name": "constant.numeric.ucg-main.bsnc"
|
||||||
|
},
|
||||||
|
"3": {
|
||||||
|
"name": "variable.parameter.axis.bsnc"
|
||||||
|
},
|
||||||
|
"4": {
|
||||||
|
"name": "constant.numeric.axis-value.bsnc"
|
||||||
|
},
|
||||||
|
"5": {
|
||||||
|
"name": "variable.parameter.axis.bsnc"
|
||||||
|
},
|
||||||
|
"6": {
|
||||||
|
"name": "constant.numeric.axis-value.bsnc"
|
||||||
|
},
|
||||||
|
"7": {
|
||||||
|
"name": "variable.parameter.axis.bsnc"
|
||||||
|
},
|
||||||
|
"8": {
|
||||||
|
"name": "constant.numeric.axis-value.bsnc"
|
||||||
|
},
|
||||||
|
"9": {
|
||||||
|
"name": "constant.numeric.ucg-extra.bsnc"
|
||||||
|
},
|
||||||
|
"10": {
|
||||||
|
"name": "constant.numeric.ucg-extra.bsnc"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"mCodes": {
|
||||||
|
"patterns": [
|
||||||
|
{
|
||||||
|
"match": "\\b(M)(0?[0-9]{1,2})\\b",
|
||||||
|
"captures": {
|
||||||
|
"1": {
|
||||||
|
"name": "support.function.mcode.bsnc"
|
||||||
|
},
|
||||||
|
"2": {
|
||||||
|
"name": "constant.numeric.mcode-value.bsnc"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"variablesE": {
|
||||||
|
"patterns": [
|
||||||
|
{
|
||||||
|
"match": "\\b(E\\d+)(=)([-+]?[0-9]+(?:\\.[0-9]+)?)\\b",
|
||||||
|
"captures": {
|
||||||
|
"1": {
|
||||||
|
"name": "variable.other.e-variable.bsnc"
|
||||||
|
},
|
||||||
|
"2": {
|
||||||
|
"name": "keyword.operator.assignment.bsnc"
|
||||||
|
},
|
||||||
|
"3": {
|
||||||
|
"name": "constant.numeric.e-value.bsnc"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"match": "\\b(E\\d+)\\b",
|
||||||
|
"captures": {
|
||||||
|
"1": {
|
||||||
|
"name": "variable.other.e-variable.bsnc"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"toolChange": {
|
||||||
|
"patterns": [
|
||||||
|
{
|
||||||
|
"match": "\\b(T\\d+)(\\.\\d+)?(M6)\\b",
|
||||||
|
"captures": {
|
||||||
|
"1": {
|
||||||
|
"name": "entity.name.function.tool-number.bsnc"
|
||||||
|
},
|
||||||
|
"2": {
|
||||||
|
"name": "constant.numeric.tool-offset.bsnc"
|
||||||
|
},
|
||||||
|
"3": {
|
||||||
|
"name": "support.function.mcode.bsnc"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"spindleWithM": {
|
||||||
|
"patterns": [
|
||||||
|
{
|
||||||
|
"match": "\\b(S)([0-9]+(?:\\.[0-9]+)?)(?:\\s*|)(M)(0?[0-9]{1,2})\\b",
|
||||||
|
"captures": {
|
||||||
|
"1": {
|
||||||
|
"name": "entity.name.function.spindle-speed.bsnc"
|
||||||
|
},
|
||||||
|
"2": {
|
||||||
|
"name": "constant.numeric.spindle-speed-value.bsnc"
|
||||||
|
},
|
||||||
|
"3": {
|
||||||
|
"name": "support.function.mcode.bsnc"
|
||||||
|
},
|
||||||
|
"4": {
|
||||||
|
"name": "constant.numeric.mcode-value.bsnc"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"gMoves": {
|
||||||
|
"patterns": [
|
||||||
|
{
|
||||||
|
"match": "(G0)(?=[XYZF]|$)",
|
||||||
|
"captures": {
|
||||||
|
"1": {
|
||||||
|
"name": "keyword.control.motion.rapid.bsnc"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"match": "(G1)(?=[XYZEF]|$)",
|
||||||
|
"captures": {
|
||||||
|
"1": {
|
||||||
|
"name": "keyword.control.motion.linear.bsnc"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"gArcs": {
|
||||||
|
"patterns": [
|
||||||
|
{
|
||||||
|
"match": "(G2)(?=[XYZRIJEF]|$)",
|
||||||
|
"captures": {
|
||||||
|
"1": {
|
||||||
|
"name": "keyword.control.motion.arc.cw.bsnc"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"match": "(G3)(?=[XYZRIJEF]|$)",
|
||||||
|
"captures": {
|
||||||
|
"1": {
|
||||||
|
"name": "keyword.control.motion.arc.ccw.bsnc"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"arcParams": {
|
||||||
|
"patterns": [
|
||||||
|
{
|
||||||
|
"match": "([XYZ])([-+]?[0-9]+(?:\\.[0-9]+)?)",
|
||||||
|
"captures": {
|
||||||
|
"1": {
|
||||||
|
"name": "variable.parameter.axis.bsnc"
|
||||||
|
},
|
||||||
|
"2": {
|
||||||
|
"name": "constant.numeric.axis-value.bsnc"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"match": "([IJ])([-+]?[0-9]+(?:\\.[0-9]+)?)",
|
||||||
|
"captures": {
|
||||||
|
"1": {
|
||||||
|
"name": "variable.parameter.arc-center.bsnc"
|
||||||
|
},
|
||||||
|
"2": {
|
||||||
|
"name": "constant.numeric.arc-center-value.bsnc"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"match": "(R)([-+]?[0-9]+(?:\\.[0-9]+)?)",
|
||||||
|
"captures": {
|
||||||
|
"1": {
|
||||||
|
"name": "variable.parameter.arc-radius.bsnc"
|
||||||
|
},
|
||||||
|
"2": {
|
||||||
|
"name": "constant.numeric.arc-radius-value.bsnc"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"match": "(F)([0-9]+(?:\\.[0-9]+)?)",
|
||||||
|
"captures": {
|
||||||
|
"1": {
|
||||||
|
"name": "variable.parameter.feedrate.bsnc"
|
||||||
|
},
|
||||||
|
"2": {
|
||||||
|
"name": "constant.numeric.feedrate-value.bsnc"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"match": "(E\\d+)",
|
||||||
|
"captures": {
|
||||||
|
"1": {
|
||||||
|
"name": "variable.other.e-variable.bsnc"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"coords": {
|
||||||
|
"patterns": [
|
||||||
|
{
|
||||||
|
"match": "([XYZ])([-+]?[0-9]+(?:\\.[0-9]+)?)",
|
||||||
|
"captures": {
|
||||||
|
"1": {
|
||||||
|
"name": "variable.parameter.axis.bsnc"
|
||||||
|
},
|
||||||
|
"2": {
|
||||||
|
"name": "constant.numeric.axis-value.bsnc"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"match": "(F)([0-9]+(?:\\.[0-9]+)?)",
|
||||||
|
"captures": {
|
||||||
|
"1": {
|
||||||
|
"name": "variable.parameter.feedrate.bsnc"
|
||||||
|
},
|
||||||
|
"2": {
|
||||||
|
"name": "constant.numeric.feedrate-value.bsnc"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"match": "(E\\d+)",
|
||||||
|
"captures": {
|
||||||
|
"1": {
|
||||||
|
"name": "variable.other.e-variable.bsnc"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"cycles": {
|
||||||
|
"patterns": [
|
||||||
|
{
|
||||||
|
"name": "keyword.control.cycle.rpt.bsnc",
|
||||||
|
"match": "\\(RPT\\s*,?\\s*E?\\d*\\)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "keyword.control.cycle.urt.bsnc",
|
||||||
|
"match": "\\(URT\\s*,?\\s*\\d*\\)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "keyword.control.cycle.erp.bsnc",
|
||||||
|
"match": "\\(ERP\\)"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"rptCycle": {
|
||||||
|
"patterns": [
|
||||||
|
{
|
||||||
|
"match": "\\(RPT\\s*,?\\s*E?\\d*\\)",
|
||||||
|
"name": "keyword.control.cycle.rpt.start.bsnc"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"match": "\\(ERP\\)",
|
||||||
|
"name": "keyword.control.cycle.rpt.end.bsnc"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"gCodesValid": {
|
||||||
|
"patterns": [
|
||||||
|
{
|
||||||
|
"match": "\\b(G(?:0[0-9]|1|2|3|4|6|9|17|18|19|20|21|27|28|29|33|34|35|40|41|42|70|71|72|73|74|79|80|81|82|83|84|85|86|89|90|91|93|94|95|96|97))\\b",
|
||||||
|
"name": "keyword.control.gcode.valid.bsnc"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"comments": {
|
||||||
|
"patterns": [
|
||||||
|
{
|
||||||
|
"match": "\\([^A-Z]{3}.*?\\)",
|
||||||
|
"name": "comment.block.bsnc"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
14
themes/bsnc-colors.json
Normal file
14
themes/bsnc-colors.json
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"$schema": "vscode://schemas/color-theme",
|
||||||
|
"name": "BSNC Embedded Colors",
|
||||||
|
"type": "dark",
|
||||||
|
"tokenColors": [
|
||||||
|
{ "scope": "entity.name.function.triplecode.bsnc", "settings": { "foreground": "#FF69B4" } },
|
||||||
|
{ "scope": "constant.numeric.triplecode-arg.bsnc", "settings": { "foreground": "#40E0D0" } },
|
||||||
|
{ "scope": "variable.other.e-variable.bsnc", "settings": { "foreground": "#FFD700" } },
|
||||||
|
{ "scope": "support.function.mcode.bsnc", "settings": { "foreground": "#FFA500" } },
|
||||||
|
{ "scope": "constant.numeric.mcode-value.bsnc", "settings": { "foreground": "#40E0D0" } },
|
||||||
|
{ "scope": "keyword.control.cycle.rpt.start.bsnc", "settings": { "foreground": "#FFFFFF", "background": "#FF4500", "fontStyle": "bold" } },
|
||||||
|
{ "scope": "keyword.control.cycle.rpt.end.bsnc", "settings": { "foreground": "#FFFFFF", "background": "#228B22", "fontStyle": "bold" } }
|
||||||
|
]
|
||||||
|
}
|
||||||
50
vsc-extension-quickstart.md
Normal file
50
vsc-extension-quickstart.md
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
# BSNC Syntax & Highlighting
|
||||||
|
|
||||||
|
Расширение для Visual Studio Code, добавляющее полноценную подсветку синтаксиса, автодополнение и цветовые схемы для программ ЧПУ в формате **BSNC / NC-310**.
|
||||||
|
|
||||||
|
## ✨ Возможности
|
||||||
|
|
||||||
|
- **Подсветка G/M-кодов**
|
||||||
|
Разделение кода и числовой части, поддержка слитной и раздельной записи (`G1X0Y0F500`, `S600 M3` и т.д.).
|
||||||
|
- **Подсветка трёхбуквенных кодов в скобках**
|
||||||
|
(`UCG`, `UAO`, `URT`, `RPT`, `ERP` и др.) с разбором аргументов по типам: числа, переменные, строки.
|
||||||
|
- **Подсветка переменных E**
|
||||||
|
(`E30=0`, `ZE30`) с раздельным цветом для имени и значения.
|
||||||
|
- **Выделение начала и конца циклов**
|
||||||
|
`(RPT,...)` и `(ERP)` — яркие цвета для мгновенного поиска в коде.
|
||||||
|
- **Подсветка допустимых и недопустимых G-кодов**
|
||||||
|
Валидные коды из документации — обычный цвет, неизвестные — выделяются как ошибка.
|
||||||
|
- **Подсветка комментариев**
|
||||||
|
Однострочные (`; ...`) и блочные в скобках.
|
||||||
|
- **Встроенная цветовая схема**
|
||||||
|
Все цвета для токенов уже встроены в расширение, интерфейс VS Code не меняется.
|
||||||
|
|
||||||
|
## 📦 Установка
|
||||||
|
|
||||||
|
1. Скачайте `.vsix` или установите из [Visual Studio Marketplace](#) (ссылка после публикации).
|
||||||
|
2. В VS Code: `Ctrl+Shift+P` → **Extensions: Install from VSIX** → выберите файл.
|
||||||
|
3. Расширение активируется автоматически для файлов с кодом BSNC.
|
||||||
|
|
||||||
|
## 🚀 Использование
|
||||||
|
|
||||||
|
- Откройте файл программы ЧПУ (с расширением или без).
|
||||||
|
- Подсветка и цвета применяются автоматически.
|
||||||
|
- Сниппеты:
|
||||||
|
- `ucg` → `(UCG,2,X-33X33,Y-33Y33,Z-15Z0,1,-3)`
|
||||||
|
- `urt` → `(URT,0)`
|
||||||
|
- `rpt` → `(RPT,E0)`
|
||||||
|
- Недопустимые G-коды будут выделены красным фоном.
|
||||||
|
|
||||||
|
## ⚙️ Кастомизация
|
||||||
|
|
||||||
|
Если хотите изменить цвета:
|
||||||
|
1. Откройте `settings.json`.
|
||||||
|
2. Добавьте свои правила в `editor.tokenColorCustomizations.textMateRules` — они перекроют встроенные.
|
||||||
|
|
||||||
|
## 📄 Лицензия
|
||||||
|
|
||||||
|
MIT — используйте, модифицируйте и делитесь.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
💡 **Совет:** Расширение можно использовать вместе с любыми тёмными или светлыми темами — встроенные цвета будут работать поверх.
|
||||||
Reference in New Issue
Block a user