From efc08a61ef2c024d7b7c1654ee03d6f5ace8e6d8 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sun, 11 May 2025 10:38:36 +0300 Subject: [PATCH] chore(code): reintegrate batch syntax --- .../codemirror/src/languages/batch.ts | 61 +++++++++---------- .../codemirror/src/syntax_highlighting.ts | 2 +- 2 files changed, 30 insertions(+), 33 deletions(-) rename apps/client/src/libraries/codemirror/batch.js => packages/codemirror/src/languages/batch.ts (53%) diff --git a/apps/client/src/libraries/codemirror/batch.js b/packages/codemirror/src/languages/batch.ts similarity index 53% rename from apps/client/src/libraries/codemirror/batch.js rename to packages/codemirror/src/languages/batch.ts index cd52aa2ba..1f55d2286 100644 --- a/apps/client/src/libraries/codemirror/batch.js +++ b/packages/codemirror/src/languages/batch.ts @@ -1,51 +1,48 @@ -// Source: https://github.com/deathau/cm-editor-syntax-highlight-obsidian/issues/27#issuecomment-1340586596 -(() => { - var varsAndArgsRegex = /(%[0-9]|%~\S+|%\S+%)/; +/** + * @module + * + * Ported to CodeMirror 6 from https://github.com/deathau/cm-editor-syntax-highlight-obsidian/issues/27#issuecomment-1340586596 + */ - CodeMirror.defineSimpleMode("batch", { - start: [ - { //comment +import { simpleMode } from "@codemirror/legacy-modes/mode/simple-mode"; + +const varsAndArgsRegex = /(%[0-9]|%~\S+|%\S+%)/; + +export const batch = simpleMode({ + start: [ + { //comment regex: /(rem|::)(?:\s.*|$)/i, token: "comment", sol: true - }, - { //echo + }, + { //echo regex: /(@echo|echo)/i, token: "builtin", sol: true, next: "echo" - }, - { //commands + }, + { //commands regex: /(?:\s|^)(assoc|aux|break|call|cd|chcp|chdir|choice|cls|cmdextversion|color|com1|com2|com3|com4|com|con|copy|country|ctty|date|defined|del|dir|do|dpath|else|endlocal|erase|errorlevel|exist|exit|for|ftype|goto|if|in|loadfix|loadhigh|lpt|lpt1|lpt2|lpt3|lpt4|md|mkdir|move|not|nul|path|pause|popd|prn|prompt|pushd|rd|rename|ren|rmdir|setlocal|set|shift|start|time|title|type|verify|ver|vol)(?:\s|$)/i, token: "builtin" - }, - { //variables and arguments + }, + { //variables and arguments regex: varsAndArgsRegex, token: "variable-2" - }, - { //label + }, + { //label regex: /\s*:.*/, token: "string", sol: true - } - ], - echo: [ - { //highlight variables and arguments in echo command + } + ], + echo: [ + { //highlight variables and arguments in echo command regex: varsAndArgsRegex, token: "variable-2" - }, - { //go back to start state at end of line + }, + { //go back to start state at end of line regex: /.$/, next: "start" - } - ] - }); - - CodeMirror.defineMIME("application/x-bat", "batch"); - CodeMirror.modeInfo.push({ - ext: [ "bat", "cmd" ], - mime: "application/x-bat", - mode: "batch", - name: "Batch file" - }); -})(); + } + ] +}); diff --git a/packages/codemirror/src/syntax_highlighting.ts b/packages/codemirror/src/syntax_highlighting.ts index e69fe5825..ea7169881 100644 --- a/packages/codemirror/src/syntax_highlighting.ts +++ b/packages/codemirror/src/syntax_highlighting.ts @@ -6,7 +6,7 @@ const byMimeType: Record Promise>) | null> "text/x-ttcn-asn": async () => (await import('@codemirror/legacy-modes/mode/ttcn')).ttcn, "application/x-aspx": null, "text/x-asterisk": async () => (await import('@codemirror/legacy-modes/mode/asterisk')).asterisk, - "application/x-bat": null, + "application/x-bat": async () => (await import("./languages/batch.js")).batch, "text/x-brainfuck": async () => (await import('@codemirror/legacy-modes/mode/brainfuck')).brainfuck, "text/x-csrc": async () => (await import('@codemirror/legacy-modes/mode/clike')).c, "text/x-csharp": async () => (await import('@codemirror/legacy-modes/mode/clike')).csharp,