diff --git a/common/changes/@coze-editor/preset-code-languages/feature-add-languages_2026-05-20-12-58.json b/common/changes/@coze-editor/preset-code-languages/feature-add-languages_2026-05-20-12-58.json
new file mode 100644
index 00000000..359b2d5e
--- /dev/null
+++ b/common/changes/@coze-editor/preset-code-languages/feature-add-languages_2026-05-20-12-58.json
@@ -0,0 +1,11 @@
+{
+ "changes": [
+ {
+ "packageName": "@coze-editor/preset-code-languages",
+ "comment": "support more languages",
+ "type": "minor"
+ }
+ ],
+ "packageName": "@coze-editor/preset-code-languages",
+ "email": "stream-pipe@users.noreply.github.com"
+}
diff --git a/common/config/subspaces/default/pnpm-lock.yaml b/common/config/subspaces/default/pnpm-lock.yaml
index 66bd0156..af276b28 100644
--- a/common/config/subspaces/default/pnpm-lock.yaml
+++ b/common/config/subspaces/default/pnpm-lock.yaml
@@ -2546,15 +2546,27 @@ importers:
'@codemirror/lang-html':
specifier: ^6.4.9
version: 6.4.11
+ '@codemirror/lang-java':
+ specifier: ^6.0.2
+ version: 6.0.2
'@codemirror/lang-json':
specifier: ^6.0.1
version: 6.0.2
+ '@codemirror/lang-less':
+ specifier: ^6.0.2
+ version: 6.0.2
'@codemirror/lang-markdown':
specifier: ^6.3.2
version: 6.5.0
+ '@codemirror/lang-php':
+ specifier: ^6.0.2
+ version: 6.0.2
'@codemirror/lang-python':
specifier: ^6.1.7
version: 6.2.1
+ '@codemirror/lang-rust':
+ specifier: ^6.0.2
+ version: 6.0.2
'@codemirror/lang-sass':
specifier: ^6.0.2
version: 6.0.2
@@ -2567,6 +2579,15 @@ importers:
'@codemirror/lang-wast':
specifier: ^6.0.2
version: 6.0.2
+ '@codemirror/lang-xml':
+ specifier: ^6.1.0
+ version: 6.1.0
+ '@codemirror/lang-yaml':
+ specifier: ^6.1.3
+ version: 6.1.3
+ '@codemirror/legacy-modes':
+ specifier: ^6.5.3
+ version: 6.5.3
'@coze-editor/code-language-shell':
specifier: workspace:*
version: link:../code-language-shell
@@ -4833,18 +4854,30 @@ packages:
'@codemirror/lang-html@6.4.11':
resolution: {integrity: sha512-9NsXp7Nwp891pQchI7gPdTwBuSuT3K65NGTHWHNJ55HjYcHLllr0rbIZNdOzas9ztc1EUVBlHou85FFZS4BNnw==}
+ '@codemirror/lang-java@6.0.2':
+ resolution: {integrity: sha512-m5Nt1mQ/cznJY7tMfQTJchmrjdjQ71IDs+55d1GAa8DGaB8JXWsVCkVT284C3RTASaY43YknrK2X3hPO/J3MOQ==}
+
'@codemirror/lang-javascript@6.2.4':
resolution: {integrity: sha512-0WVmhp1QOqZ4Rt6GlVGwKJN3KW7Xh4H2q8ZZNGZaP6lRdxXJzmjm4FqvmOojVj6khWJHIb9sp7U/72W7xQgqAA==}
'@codemirror/lang-json@6.0.2':
resolution: {integrity: sha512-x2OtO+AvwEHrEwR0FyyPtfDUiloG3rnVTSZV1W8UteaLL8/MajQd8DpvUb2YVzC+/T18aSDv0H9mu+xw0EStoQ==}
+ '@codemirror/lang-less@6.0.2':
+ resolution: {integrity: sha512-EYdQTG22V+KUUk8Qq582g7FMnCZeEHsyuOJisHRft/mQ+ZSZ2w51NupvDUHiqtsOy7It5cHLPGfHQLpMh9bqpQ==}
+
'@codemirror/lang-markdown@6.5.0':
resolution: {integrity: sha512-0K40bZ35jpHya6FriukbgaleaqzBLZfOh7HuzqbMxBXkbYMJDxfF39c23xOgxFezR+3G+tR2/Mup+Xk865OMvw==}
+ '@codemirror/lang-php@6.0.2':
+ resolution: {integrity: sha512-ZKy2v1n8Fc8oEXj0Th0PUMXzQJ0AIR6TaZU+PbDHExFwdu+guzOA4jmCHS1Nz4vbFezwD7LyBdDnddSJeScMCA==}
+
'@codemirror/lang-python@6.2.1':
resolution: {integrity: sha512-IRjC8RUBhn9mGR9ywecNhB51yePWCGgvHfY1lWN/Mrp3cKuHr0isDKia+9HnvhiWNnMpbGhWrkhuWOc09exRyw==}
+ '@codemirror/lang-rust@6.0.2':
+ resolution: {integrity: sha512-EZaGjCUegtiU7kSMvOfEZpaCReowEf3yNidYu7+vfuGTm9ow4mthAparY5hisJqOHmJowVH3Upu+eJlUji6qqA==}
+
'@codemirror/lang-sass@6.0.2':
resolution: {integrity: sha512-l/bdzIABvnTo1nzdY6U+kPAC51czYQcOErfzQ9zSm9D8GmNPD0WTW8st/CJwBTPLO8jlrbyvlSEcN20dc4iL0Q==}
@@ -4857,9 +4890,18 @@ packages:
'@codemirror/lang-wast@6.0.2':
resolution: {integrity: sha512-Imi2KTpVGm7TKuUkqyJ5NRmeFWF7aMpNiwHnLQe0x9kmrxElndyH0K6H/gXtWwY6UshMRAhpENsgfpSwsgmC6Q==}
+ '@codemirror/lang-xml@6.1.0':
+ resolution: {integrity: sha512-3z0blhicHLfwi2UgkZYRPioSgVTo9PV5GP5ducFH6FaHy0IAJRg+ixj5gTR1gnT/glAIC8xv4w2VL1LoZfs+Jg==}
+
+ '@codemirror/lang-yaml@6.1.3':
+ resolution: {integrity: sha512-AZ8DJBuXGVHybpBQhmZtgew5//4hv3tdkXnr3vDmOUMJRuB6vn/uuwtmTOTlqEaQFg3hQSVeA90NmvIQyUV6FQ==}
+
'@codemirror/language@6.11.1':
resolution: {integrity: sha512-5kS1U7emOGV84vxC+ruBty5sUgcD0te6dyupyRVG2zaSjhTDM73LhVKUtVwiqSe6QwmEoA4SCiU8AKPFyumAWQ==}
+ '@codemirror/legacy-modes@6.5.3':
+ resolution: {integrity: sha512-xCsmIzH78MyWkib9jlPaaun57XNkfbMIhagfaZVd0iLTqlpw3jXaIcbZm72MTmmn64eTZpBVNjbyYh+QXnxRsg==}
+
'@codemirror/lint@6.8.5':
resolution: {integrity: sha512-s3n3KisH7dx3vsoeGMxsbRAgKe4O1vbrnKBClm99PU0fWxmxsx5rR2PfqQgIt+2MMJBHbiJ5rfIdLYfB9NNvsA==}
@@ -5725,6 +5767,9 @@ packages:
'@lezer/html@1.3.12':
resolution: {integrity: sha512-RJ7eRWdaJe3bsiiLLHjCFT1JMk8m1YP9kaUbvu2rMLEoOnke9mcTVDyfOslsln0LtujdWespjJ39w6zo+RsQYw==}
+ '@lezer/java@1.1.3':
+ resolution: {integrity: sha512-yHquUfujwg6Yu4Fd1GNHCvidIvJwi/1Xu2DaKl/pfWIA2c1oXkVvawH3NyXhCaFx4OdlYBVX5wvz2f7Aoa/4Xw==}
+
'@lezer/javascript@1.5.1':
resolution: {integrity: sha512-ATOImjeVJuvgm3JQ/bpo2Tmv55HSScE2MTPnKRMRIPx2cLhHGyX2VnqpHhtIV1tVzIjZDbcWQm+NCTF40ggZVw==}
@@ -5737,12 +5782,24 @@ packages:
'@lezer/markdown@1.4.3':
resolution: {integrity: sha512-kfw+2uMrQ/wy/+ONfrH83OkdFNM0ye5Xq96cLlaCy7h5UT9FO54DU4oRoIc0CSBh5NWmWuiIJA7NGLMJbQ+Oxg==}
+ '@lezer/php@1.0.5':
+ resolution: {integrity: sha512-W7asp9DhM6q0W6DYNwIkLSKOvxlXRrif+UXBMxzsJUuqmhE7oVU+gS3THO4S/Puh7Xzgm858UNaFi6dxTP8dJA==}
+
'@lezer/python@1.1.18':
resolution: {integrity: sha512-31FiUrU7z9+d/ElGQLJFXl+dKOdx0jALlP3KEOsGTex8mvj+SoE1FgItcHWK/axkxCHGUSpqIHt6JAWfWu9Rhg==}
+ '@lezer/rust@1.0.2':
+ resolution: {integrity: sha512-Lz5sIPBdF2FUXcWeCu1//ojFAZqzTQNRga0aYv6dYXqJqPfMdCAI0NzajWUd4Xijj1IKJLtjoXRPMvTKWBcqKg==}
+
'@lezer/sass@1.1.0':
resolution: {integrity: sha512-3mMGdCTUZ/84ArHOuXWQr37pnf7f+Nw9ycPUeKX+wu19b7pSMcZGLbaXwvD2APMBDOGxPmpK/O6S1v1EvLoqgQ==}
+ '@lezer/xml@1.0.6':
+ resolution: {integrity: sha512-CdDwirL0OEaStFue/66ZmFSeppuL6Dwjlk8qk153mSQwiSH/Dlri4GNymrNWnUmPl2Um7QfV1FO9KFUyX3Twww==}
+
+ '@lezer/yaml@1.0.4':
+ resolution: {integrity: sha512-2lrrHqxalACEbxIbsjhqGpSW8kWpUKuY6RHgnSAFZa6qK62wvnPxA8hGOwOoDbwHcOFs5M4o27mjGu+P7TvBmw==}
+
'@lukeed/csprng@1.1.0':
resolution: {integrity: sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==}
engines: {node: '>=8'}
@@ -19388,6 +19445,11 @@ snapshots:
'@lezer/css': 1.3.0
'@lezer/html': 1.3.12
+ '@codemirror/lang-java@6.0.2':
+ dependencies:
+ '@codemirror/language': 6.11.1
+ '@lezer/java': 1.1.3
+
'@codemirror/lang-javascript@6.2.4':
dependencies:
'@codemirror/autocomplete': 6.18.6
@@ -19403,6 +19465,14 @@ snapshots:
'@codemirror/language': 6.11.1
'@lezer/json': 1.0.3
+ '@codemirror/lang-less@6.0.2':
+ dependencies:
+ '@codemirror/lang-css': 6.3.1
+ '@codemirror/language': 6.11.1
+ '@lezer/common': 1.2.3
+ '@lezer/highlight': 1.2.1
+ '@lezer/lr': 1.4.2
+
'@codemirror/lang-markdown@6.5.0':
dependencies:
'@codemirror/autocomplete': 6.18.6
@@ -19413,6 +19483,14 @@ snapshots:
'@lezer/common': 1.2.3
'@lezer/markdown': 1.4.3
+ '@codemirror/lang-php@6.0.2':
+ dependencies:
+ '@codemirror/lang-html': 6.4.11
+ '@codemirror/language': 6.11.1
+ '@codemirror/state': 6.5.2
+ '@lezer/common': 1.2.3
+ '@lezer/php': 1.0.5
+
'@codemirror/lang-python@6.2.1':
dependencies:
'@codemirror/autocomplete': 6.18.6
@@ -19421,6 +19499,11 @@ snapshots:
'@lezer/common': 1.2.3
'@lezer/python': 1.1.18
+ '@codemirror/lang-rust@6.0.2':
+ dependencies:
+ '@codemirror/language': 6.11.1
+ '@lezer/rust': 1.0.2
+
'@codemirror/lang-sass@6.0.2':
dependencies:
'@codemirror/lang-css': 6.3.1
@@ -19454,6 +19537,25 @@ snapshots:
'@lezer/highlight': 1.2.1
'@lezer/lr': 1.4.2
+ '@codemirror/lang-xml@6.1.0':
+ dependencies:
+ '@codemirror/autocomplete': 6.18.6
+ '@codemirror/language': 6.11.1
+ '@codemirror/state': 6.5.2
+ '@codemirror/view': 6.37.1
+ '@lezer/common': 1.2.3
+ '@lezer/xml': 1.0.6
+
+ '@codemirror/lang-yaml@6.1.3':
+ dependencies:
+ '@codemirror/autocomplete': 6.18.6
+ '@codemirror/language': 6.11.1
+ '@codemirror/state': 6.5.2
+ '@lezer/common': 1.2.3
+ '@lezer/highlight': 1.2.1
+ '@lezer/lr': 1.4.2
+ '@lezer/yaml': 1.0.4
+
'@codemirror/language@6.11.1':
dependencies:
'@codemirror/state': 6.5.2
@@ -19463,6 +19565,10 @@ snapshots:
'@lezer/lr': 1.4.2
style-mod: 4.1.2
+ '@codemirror/legacy-modes@6.5.3':
+ dependencies:
+ '@codemirror/language': 6.11.1
+
'@codemirror/lint@6.8.5':
dependencies:
'@codemirror/state': 6.5.2
@@ -20328,6 +20434,12 @@ snapshots:
'@lezer/highlight': 1.2.1
'@lezer/lr': 1.4.2
+ '@lezer/java@1.1.3':
+ dependencies:
+ '@lezer/common': 1.2.3
+ '@lezer/highlight': 1.2.1
+ '@lezer/lr': 1.4.2
+
'@lezer/javascript@1.5.1':
dependencies:
'@lezer/common': 1.2.3
@@ -20349,18 +20461,42 @@ snapshots:
'@lezer/common': 1.2.3
'@lezer/highlight': 1.2.1
+ '@lezer/php@1.0.5':
+ dependencies:
+ '@lezer/common': 1.2.3
+ '@lezer/highlight': 1.2.1
+ '@lezer/lr': 1.4.2
+
'@lezer/python@1.1.18':
dependencies:
'@lezer/common': 1.2.3
'@lezer/highlight': 1.2.1
'@lezer/lr': 1.4.2
+ '@lezer/rust@1.0.2':
+ dependencies:
+ '@lezer/common': 1.2.3
+ '@lezer/highlight': 1.2.1
+ '@lezer/lr': 1.4.2
+
'@lezer/sass@1.1.0':
dependencies:
'@lezer/common': 1.2.3
'@lezer/highlight': 1.2.1
'@lezer/lr': 1.4.2
+ '@lezer/xml@1.0.6':
+ dependencies:
+ '@lezer/common': 1.2.3
+ '@lezer/highlight': 1.2.1
+ '@lezer/lr': 1.4.2
+
+ '@lezer/yaml@1.0.4':
+ dependencies:
+ '@lezer/common': 1.2.3
+ '@lezer/highlight': 1.2.1
+ '@lezer/lr': 1.4.2
+
'@lukeed/csprng@1.1.0': {}
'@lukeed/uuid@2.0.1':
diff --git a/packages/text-editor/dev/src/index.tsx b/packages/text-editor/dev/src/index.tsx
index 040c255c..832aa6d7 100644
--- a/packages/text-editor/dev/src/index.tsx
+++ b/packages/text-editor/dev/src/index.tsx
@@ -1,5 +1,5 @@
import { createRoot } from 'react-dom/client';
-import Page from './pages/code';
+import Page from './pages/highlight';
import './index.css';
createRoot(document.getElementById('app')!).render();
diff --git a/packages/text-editor/dev/src/pages/highlight/examples.tsx b/packages/text-editor/dev/src/pages/highlight/examples.tsx
index a55a7e0b..084868d2 100644
--- a/packages/text-editor/dev/src/pages/highlight/examples.tsx
+++ b/packages/text-editor/dev/src/pages/highlight/examples.tsx
@@ -1,4 +1,4 @@
-export const examples = [
+const baseExamples = [
{
code: `
@@ -145,16 +145,774 @@ if __name__ == '__main__':
import "fmt"
-// sayHello 打印一条问候语
func sayHello() {
- fmt.Println("Hello, World!")
+ fmt.Println("Hello, World!")
}
func main() {
- // 调用自定义函数
- sayHello()
+ sayHello()
}
`,
- path: 'g.go'
+ path: 'g.go',
+ },
+];
+
+const missingExamples = [
+ {
+ code: `
+body
+ color: #333
+ font-family: sans-serif
+`,
+ path: 'a.sass',
+ },
+ {
+ code: `
+@primary: #4d90fe;
+
+.card {
+ color: @primary;
+}
+`,
+ path: 'a.less',
+ },
+ {
+ code: `(module
+ (func (export "add") (param i32 i32) (result i32)
+ local.get 0
+ local.get 1
+ i32.add))`,
+ path: 'a.wat',
+ },
+ {
+ code: `#include
+
+int main() {
+ std::cout << "Hello, C++" << std::endl;
+ return 0;
+}
+`,
+ path: 'a.cpp',
+ },
+ {
+ code: `#include
+
+int main(void) {
+ printf("Hello, C\\n");
+ return 0;
+}
+`,
+ path: 'a.c',
+ },
+ {
+ code: `fn main() {
+ println!("Hello, Rust!");
+}
+`,
+ path: 'a.rs',
+ },
+ {
+ code: `
+ Hello XML
+
+`,
+ path: 'a.xml',
+ },
+ {
+ code: "sum←+/1 2 3\n⎕←sum\n",
+ path: 'a.apl',
+ },
+ {
+ code: `-----BEGIN PGP MESSAGE-----
+Version: Demo
+
+SGVsbG8=
+-----END PGP MESSAGE-----
+`,
+ path: 'a.pgp',
+ },
+ {
+ code: `Demo DEFINITIONS ::= BEGIN
+Message ::= IA5String
+END
+`,
+ path: 'a.asn',
+ },
+ {
+ code: `
+[default]
+static = yes
+writeprotect = no
+`,
+ path: 'extensions.conf',
+ },
+ {
+ code: '+++++[>++++++++<-]>+.+.',
+ path: 'a.bf',
+ },
+ {
+ code: ` IDENTIFICATION DIVISION.
+ PROGRAM-ID. HELLO.
+ PROCEDURE DIVISION.
+ DISPLAY "HELLO COBOL".
+ STOP RUN.
+`,
+ path: 'a.cob',
+ },
+ {
+ code: `using System;
+
+class Program {
+ static void Main() {
+ Console.WriteLine("Hello, C#");
+ }
+}
+`,
+ path: 'a.cs',
+ },
+ {
+ code: `(ns demo.core)
+
+(defn greet [name]
+ (str "Hello, " name))
+`,
+ path: 'a.clj',
+ },
+ {
+ code: `(ns demo.core)
+
+(defn square [n]
+ (* n n))
+`,
+ path: 'a.cljs',
+ },
+ {
+ code: `
+@def color primary #0f62fe;
+
+.button {
+ color: value(primary);
+}
+`,
+ path: 'a.gss',
+ },
+ {
+ code: `cmake_minimum_required(VERSION 3.20)
+project(Demo)
+add_executable(demo main.cpp)
+`,
+ path: 'CMakeLists.txt',
+ },
+ {
+ code: `square = (n) -> n * n
+console.log square(4)
+`,
+ path: 'a.coffee',
+ },
+ {
+ code: `(defun greet (name)
+ (format t "Hello, ~A~%" name))
+`,
+ path: 'a.cl',
+ },
+ {
+ code: `MATCH (n:Person)
+RETURN n.name
+`,
+ path: 'a.cypher',
+ },
+ {
+ code: `cpdef int add(int a, int b):
+ return a + b
+`,
+ path: 'a.pyx',
+ },
+ {
+ code: `puts "Hello from Crystal"
+`,
+ path: 'a.cr',
+ },
+ {
+ code: `import std.stdio;
+
+void main() {
+ writeln("Hello, D");
+}
+`,
+ path: 'a.d',
+ },
+ {
+ code: `void main() {
+ print('Hello, Dart');
+}
+`,
+ path: 'a.dart',
+ },
+ {
+ code: `diff --git a/file.txt b/file.txt
+--- a/file.txt
++++ b/file.txt
+@@ -1 +1 @@
+-old
++new
+`,
+ path: 'a.diff',
+ },
+ {
+ code: `FROM node:20-alpine
+WORKDIR /app
+COPY . .
+RUN npm install
+`,
+ path: 'Dockerfile',
+ },
+ {
+ code: `
+
+
+
+`,
+ path: 'a.dtd',
+ },
+ {
+ code: `define method greet(name)
+ format-out("Hello, %s", name);
+end method;
+`,
+ path: 'a.dylan',
+ },
+ {
+ code: `EXPORT Hello := 'world';
+OUTPUT(Hello);
+`,
+ path: 'a.ecl',
+ },
+ {
+ code: `{:name "demo"
+ :enabled true}
+`,
+ path: 'a.edn',
+ },
+ {
+ code: `class HELLO
+create make
+feature
+ make
+ do
+ print ("Hello Eiffel%N")
+ end
+end
+`,
+ path: 'a.e',
+ },
+ {
+ code: `module Main exposing (main)
+
+import Html exposing (text)
+
+main =
+ text "Hello, Elm"
+`,
+ path: 'a.elm',
+ },
+ {
+ code: `-module(demo).
+-export([hello/0]).
+
+hello() ->
+ io:format("Hello, Erlang~n").
+`,
+ path: 'a.erl',
+ },
+ {
+ code: `USING: io ;
+"Hello, Factor" print
+`,
+ path: 'a.factor',
+ },
+ {
+ code: `: greet ( -- )
+ ." Hello, Forth" ;
+`,
+ path: 'a.forth',
+ },
+ {
+ code: `program hello
+ print *, "Hello, Fortran"
+end program hello
+`,
+ path: 'a.f90',
+ },
+ {
+ code: `let add a b = a + b
+printfn "%d" (add 1 2)
+`,
+ path: 'a.fs',
+ },
+ {
+ code: `.global _start
+_start:
+ mov $60, %rax
+ xor %rdi, %rdi
+ syscall
+`,
+ path: 'a.s',
+ },
+ {
+ code: `Feature: Greeting
+ Scenario: Say hello
+ Given a user opens the app
+`,
+ path: 'a.feature',
+ },
+ {
+ code: `class Main {
+ static void main(String[] args) {
+ println 'Hello, Groovy'
+ }
+}
+`,
+ path: 'a.groovy',
+ },
+ {
+ code: `main :: IO ()
+main = putStrLn "Hello, Haskell"
+`,
+ path: 'a.hs',
+ },
+ {
+ code: `class Main {
+ static function main() {
+ trace('Hello, Haxe');
+ }
+}
+`,
+ path: 'a.hx',
+ },
+ {
+ code: `-main Main
+-js main.js
+`,
+ path: 'a.hxml',
+ },
+ {
+ code: `pro greet
+ print, 'Hello IDL'
+end
+`,
+ path: 'a.pro',
+ },
+ {
+ code: `{
+ "@context": "https://schema.org",
+ "@type": "Person",
+ "name": "John Doe"
+}
+`,
+ path: 'a.jsonld',
+ },
+ {
+ code: `println("Hello, Julia")
+`,
+ path: 'a.jl',
+ },
+ {
+ code: `fun main() {
+ println("Hello, Kotlin")
+}
+`,
+ path: 'a.kt',
+ },
+ {
+ code: `square = (x) --> x * x
+console.log square 3
+`,
+ path: 'a.ls',
+ },
+ {
+ code: `local function greet(name)
+ return 'Hello, ' .. name
+end
+`,
+ path: 'a.lua',
+ },
+ {
+ code: `alias greet {
+ echo -a Hello mIRC
+}
+`,
+ path: 'a.mrc',
+ },
+ {
+ code: `Print["Hello, Mathematica"]
+`,
+ path: 'a.wl',
+ },
+ {
+ code: `model Hello
+ Real x;
+end Hello;
+`,
+ path: 'a.mo',
+ },
+ {
+ code: `WRITE "Hello MUMPS" !
+QUIT
+`,
+ path: 'a.mps',
+ },
+ {
+ code: `From demo@example.com Fri Jan 01 00:00:00 2024
+Subject: Hello
+
+Mailbox content
+`,
+ path: 'a.mbox',
+ },
+ {
+ code: `server {
+ listen 80;
+ server_name example.com;
+}
+`,
+ path: 'nginx.conf',
+ },
+ {
+ code: `Name "Demo"
+OutFile "demo.exe"
+Section
+SectionEnd
+`,
+ path: 'a.nsi',
+ },
+ {
+ code: ` "o" .
+`,
+ path: 'a.nt',
+ },
+ {
+ code: `#import
+
+int main() {
+ NSLog(@"Hello Objective-C++");
+ return 0;
+}
+`,
+ path: 'a.mm',
+ },
+ {
+ code: `let greet name = print_endline ("Hello, " ^ name)
+`,
+ path: 'a.ml',
+ },
+ {
+ code: `declare
+ {Browse 'Hello Oz'}
+end
+`,
+ path: 'a.oz',
+ },
+ {
+ code: `program Hello;
+begin
+ writeln('Hello, Pascal');
+end.
+`,
+ path: 'a.pas',
+ },
+ {
+ code: `print "Hello, Perl\n";
+`,
+ path: 'a.pl',
+ },
+ {
+ code: `A = LOAD 'input' USING PigStorage(',');
+DUMP A;
+`,
+ path: 'a.pig',
+ },
+ {
+ code: `Write-Output 'Hello, PowerShell'
+`,
+ path: 'a.ps1',
+ },
+ {
+ code: `name=demo
+enabled=true
+`,
+ path: 'a.ini',
+ },
+ {
+ code: `syntax = "proto3";
+
+message Hello {
+ string name = 1;
+}
+`,
+ path: 'a.proto',
+ },
+ {
+ code: `div.card
+ h1 Hello Pug
+`,
+ path: 'a.pug',
+ },
+ {
+ code: `class demo {
+ notify { 'hello puppet': }
+}
+`,
+ path: 'a.pp',
+ },
+ {
+ code: `show 1 + 2
+`,
+ path: 'a.q',
+ },
+ {
+ code: `message <- 'Hello, R'
+print(message)
+`,
+ path: 'a.r',
+ },
+ {
+ code: `Name: demo
+Version: 1.0.0
+Release: 1
+Summary: demo package
+`,
+ path: 'a.spec',
+ },
+ {
+ code: `puts 'Hello, Ruby'
+`,
+ path: 'a.rb',
+ },
+ {
+ code: `data demo;
+ message = 'Hello SAS';
+run;
+`,
+ path: 'a.sas',
+ },
+ {
+ code: `object Main extends App {
+ println("Hello, Scala")
+}
+`,
+ path: 'a.scala',
+ },
+ {
+ code: `(display "Hello, Scheme")
+(newline)
+`,
+ path: 'a.scm',
+ },
+ {
+ code: `require ["fileinto"];
+fileinto "Archive";
+`,
+ path: 'a.siv',
+ },
+ {
+ code: `Transcript show: 'Hello, Smalltalk'.
+`,
+ path: 'a.st',
+ },
+ {
+ code: `signature GREETER =
+sig
+ val greet : string -> unit
+end
+`,
+ path: 'a.sml',
+ },
+ {
+ code: `SELECT * WHERE {
+ ?s ?p ?o .
+}
+`,
+ path: 'a.rq',
+ },
+ {
+ code: `function main() {
+ ::print("Hello, Squirrel")
+}
+`,
+ path: 'a.nut',
+ },
+ {
+ code: `body
+ color #333
+`,
+ path: 'a.styl',
+ },
+ {
+ code: `print("Hello, Swift")
+`,
+ path: 'a.swift',
+ },
+ {
+ code: `\\documentclass{article}
+\\begin{document}
+Hello, LaTeX
+\\end{document}
+`,
+ path: 'a.tex',
+ },
+ {
+ code: `module demo;
+ initial begin
+ $display("Hello, SystemVerilog");
+ end
+endmodule
+`,
+ path: 'a.sv',
+ },
+ {
+ code: `puts "Hello, Tcl"
+`,
+ path: 'a.tcl',
+ },
+ {
+ code: `h1. Hello Textile
+`,
+ path: 'a.textile',
+ },
+ {
+ code: `title = "demo"
+[server]
+port = 3000
+`,
+ path: 'a.toml',
+ },
+ {
+ code: `.TH DEMO 1
+.SH NAME
+demo \\- hello world
+`,
+ path: 'a.1',
+ },
+ {
+ code: `module Demo {
+ testcase tc_demo() runs on MTC {}
+}
+`,
+ path: 'a.ttcn',
+ },
+ {
+ code: `[LOGGING]
+LogFile := "demo.log"
+`,
+ path: 'a.cfg',
+ },
+ {
+ code: `@prefix ex: .
+ex:item ex:name "demo" .
+`,
+ path: 'a.ttl',
+ },
+ {
+ code: `interface Demo {
+ attribute DOMString name;
+};
+`,
+ path: 'a.webidl',
+ },
+ {
+ code: `Module Demo
+ Sub Main()
+ Console.WriteLine("Hello, VB.NET")
+ End Sub
+End Module
+`,
+ path: 'a.vb',
+ },
+ {
+ code: `MsgBox "Hello, VBScript"
+`,
+ path: 'a.vbs',
+ },
+ {
+ code: `#set($name = 'Velocity')
+Hello, $name
+`,
+ path: 'a.vtl',
+ },
+ {
+ code: `entity demo is
+end entity;
+`,
+ path: 'a.vhd',
+ },
+ {
+ code: `for $x in doc("demo.xml")/root/item
+return $x
+`,
+ path: 'a.xq',
+ },
+ {
+ code: `Echo("Hello, Yacas");
+`,
+ path: 'a.ys',
+ },
+ {
+ code: `ld a, 1
+halt
+`,
+ path: 'a.z80',
+ },
+ {
+ code: `msc {
+ a => b [ label = "hello" ];
+}
+`,
+ path: 'a.mscgen',
+ },
+ {
+ code: `xu {
+ a -> b : hello;
+}
+`,
+ path: 'a.xu',
+ },
+ {
+ code: `msgenny {
+ a => b [ label = "hello" ];
+}
+`,
+ path: 'a.msgenny',
+ },
];
+
+export const examples = [...baseExamples, ...missingExamples];
diff --git a/packages/text-editor/preset-code-languages/package.json b/packages/text-editor/preset-code-languages/package.json
index fa3d1394..60090333 100644
--- a/packages/text-editor/preset-code-languages/package.json
+++ b/packages/text-editor/preset-code-languages/package.json
@@ -26,13 +26,20 @@
"@codemirror/lang-css": "^6.3.1",
"@codemirror/lang-go": "^6.0.1",
"@codemirror/lang-html": "^6.4.9",
+ "@codemirror/lang-java": "^6.0.2",
"@codemirror/lang-json": "^6.0.1",
+ "@codemirror/lang-less": "^6.0.2",
"@codemirror/lang-markdown": "^6.3.2",
+ "@codemirror/lang-php": "^6.0.2",
"@codemirror/lang-python": "^6.1.7",
+ "@codemirror/lang-rust": "^6.0.2",
"@codemirror/lang-sass": "^6.0.2",
"@codemirror/lang-sql": "^6.10.0",
"@codemirror/lang-vue": "^0.1.3",
"@codemirror/lang-wast": "^6.0.2",
+ "@codemirror/lang-xml": "^6.1.0",
+ "@codemirror/lang-yaml": "^6.1.3",
+ "@codemirror/legacy-modes": "^6.5.3",
"@coze-editor/code-language-shell": "workspace:*",
"@coze-editor/core": "workspace:*",
"@coze-editor/lang-javascript": "workspace:*"
diff --git a/packages/text-editor/preset-code-languages/src/languages.ts b/packages/text-editor/preset-code-languages/src/languages.ts
index 8cf7ce24..862e63a6 100644
--- a/packages/text-editor/preset-code-languages/src/languages.ts
+++ b/packages/text-editor/preset-code-languages/src/languages.ts
@@ -1,5 +1,15 @@
+/* eslint-disable max-lines */
import { type Extension } from '@codemirror/state';
-import { LanguageDescription, LanguageSupport } from '@codemirror/language';
+import {
+ LanguageDescription,
+ LanguageSupport,
+ StreamLanguage,
+ type StreamParser,
+} from '@codemirror/language';
+
+function legacy(parser: StreamParser): LanguageSupport {
+ return new LanguageSupport(StreamLanguage.define(parser));
+}
export const supportedLanguages = [
LanguageDescription.of({
@@ -50,7 +60,7 @@ export const supportedLanguages = [
}),
LanguageDescription.of({
name: 'HTML',
- extensions: ['html', 'svg'],
+ extensions: ['html', 'htm', 'handlebars', 'hbs'],
async load() {
return import('@codemirror/lang-html').then(module => module.html());
},
@@ -80,6 +90,13 @@ export const supportedLanguages = [
);
},
}),
+ LanguageDescription.of({
+ name: 'LESS',
+ extensions: ['less'],
+ load() {
+ return import('@codemirror/lang-less').then(m => m.less());
+ },
+ }),
LanguageDescription.of({
name: 'JSON',
extensions: ['json'],
@@ -89,7 +106,7 @@ export const supportedLanguages = [
}),
LanguageDescription.of({
name: 'Markdown',
- extensions: ['md'],
+ extensions: ['md', 'markdown', 'mkd'],
async load() {
return import('@codemirror/lang-markdown').then(module =>
module.markdown(),
@@ -117,6 +134,13 @@ export const supportedLanguages = [
return import('@codemirror/lang-cpp').then(module => module.cpp());
},
}),
+ LanguageDescription.of({
+ name: 'C',
+ extensions: ['c'],
+ async load() {
+ return import('@codemirror/lang-cpp').then(module => module.cpp());
+ },
+ }),
LanguageDescription.of({
name: 'Shell',
extensions: ['sh'],
@@ -140,6 +164,1034 @@ export const supportedLanguages = [
return import('@codemirror/lang-go').then(module => module.go());
},
}),
+ LanguageDescription.of({
+ name: 'Rust',
+ extensions: ['rs'],
+ async load() {
+ return import('@codemirror/lang-rust').then(module => module.rust());
+ },
+ }),
+ LanguageDescription.of({
+ name: 'PHP',
+ extensions: ['php', 'php3', 'php4', 'php5', 'php7', 'phtml'],
+ async load() {
+ return import('@codemirror/lang-php').then(module => module.php());
+ },
+ }),
+ LanguageDescription.of({
+ name: 'Java',
+ extensions: ['java'],
+ async load() {
+ return import('@codemirror/lang-java').then(module => module.java());
+ },
+ }),
+ LanguageDescription.of({
+ name: 'YAML',
+ extensions: ['yml', 'yaml'],
+ async load() {
+ return import('@codemirror/lang-yaml').then(module => module.yaml());
+ },
+ }),
+ LanguageDescription.of({
+ name: 'XML',
+ extensions: ['xml', 'xsl', 'xsd', 'svg'],
+ async load() {
+ return import('@codemirror/lang-xml').then(module => module.xml());
+ },
+ }),
+
+ // legacy
+ LanguageDescription.of({
+ name: 'APL',
+ extensions: ['dyalog', 'apl'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/apl').then(m =>
+ legacy(m.apl),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'PGP',
+ alias: ['asciiarmor'],
+ extensions: ['asc', 'pgp', 'sig'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/asciiarmor').then(m =>
+ legacy(m.asciiArmor),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'ASN.1',
+ extensions: ['asn', 'asn1'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/asn1').then(m =>
+ legacy(m.asn1({})),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'Asterisk',
+ filename: /^extensions\.conf$/i,
+ load() {
+ return import('@codemirror/legacy-modes/mode/asterisk').then(m =>
+ legacy(m.asterisk),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'Brainfuck',
+ extensions: ['b', 'bf'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/brainfuck').then(m =>
+ legacy(m.brainfuck),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'Cobol',
+ extensions: ['cob', 'cpy'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/cobol').then(m =>
+ legacy(m.cobol),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'C#',
+ alias: ['csharp', 'cs'],
+ extensions: ['cs'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/clike').then(m =>
+ legacy(m.csharp),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'Clojure',
+ extensions: ['clj', 'cljc', 'cljx'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/clojure').then(m =>
+ legacy(m.clojure),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'ClojureScript',
+ extensions: ['cljs'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/clojure').then(m =>
+ legacy(m.clojure),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'Closure Stylesheets (GSS)',
+ extensions: ['gss'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/css').then(m =>
+ legacy(m.gss),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'CMake',
+ extensions: ['cmake', 'cmake.in'],
+ filename: /^CMakeLists\.txt$/,
+ load() {
+ return import('@codemirror/legacy-modes/mode/cmake').then(m =>
+ legacy(m.cmake),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'CoffeeScript',
+ alias: ['coffee', 'coffee-script'],
+ extensions: ['coffee'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/coffeescript').then(m =>
+ legacy(m.coffeeScript),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'Common Lisp',
+ alias: ['lisp'],
+ extensions: ['cl', 'lisp', 'el'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/commonlisp').then(m =>
+ legacy(m.commonLisp),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'Cypher',
+ extensions: ['cyp', 'cypher'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/cypher').then(m =>
+ legacy(m.cypher),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'Cython',
+ extensions: ['pyx', 'pxd', 'pxi'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/python').then(m =>
+ legacy(m.cython),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'Crystal',
+ extensions: ['cr'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/crystal').then(m =>
+ legacy(m.crystal),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'D',
+ extensions: ['d'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/d').then(m => legacy(m.d));
+ },
+ }),
+ LanguageDescription.of({
+ name: 'Dart',
+ extensions: ['dart'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/clike').then(m =>
+ legacy(m.dart),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'diff',
+ extensions: ['diff', 'patch'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/diff').then(m =>
+ legacy(m.diff),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'Dockerfile',
+ filename: /^Dockerfile$/,
+ load() {
+ return import('@codemirror/legacy-modes/mode/dockerfile').then(m =>
+ legacy(m.dockerFile),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'DTD',
+ extensions: ['dtd'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/dtd').then(m =>
+ legacy(m.dtd),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'Dylan',
+ extensions: ['dylan', 'dyl', 'intr'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/dylan').then(m =>
+ legacy(m.dylan),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'EBNF',
+ load() {
+ return import('@codemirror/legacy-modes/mode/ebnf').then(m =>
+ legacy(m.ebnf),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'ECL',
+ extensions: ['ecl'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/ecl').then(m =>
+ legacy(m.ecl),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'edn',
+ extensions: ['edn'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/clojure').then(m =>
+ legacy(m.clojure),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'Eiffel',
+ extensions: ['e'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/eiffel').then(m =>
+ legacy(m.eiffel),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'Elm',
+ extensions: ['elm'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/elm').then(m =>
+ legacy(m.elm),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'Erlang',
+ extensions: ['erl'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/erlang').then(m =>
+ legacy(m.erlang),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'Esper',
+ load() {
+ return import('@codemirror/legacy-modes/mode/sql').then(m =>
+ legacy(m.esper),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'Factor',
+ extensions: ['factor'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/factor').then(m =>
+ legacy(m.factor),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'FCL',
+ load() {
+ return import('@codemirror/legacy-modes/mode/fcl').then(m =>
+ legacy(m.fcl),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'Forth',
+ extensions: ['forth', 'fth', '4th'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/forth').then(m =>
+ legacy(m.forth),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'Fortran',
+ extensions: ['f', 'for', 'f77', 'f90', 'f95'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/fortran').then(m =>
+ legacy(m.fortran),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'F#',
+ alias: ['fsharp'],
+ extensions: ['fs'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/mllike').then(m =>
+ legacy(m.fSharp),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'Gas',
+ extensions: ['s'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/gas').then(m =>
+ legacy(m.gas),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'Gherkin',
+ extensions: ['feature'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/gherkin').then(m =>
+ legacy(m.gherkin),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'Groovy',
+ extensions: ['groovy', 'gradle'],
+ filename: /^Jenkinsfile$/,
+ load() {
+ return import('@codemirror/legacy-modes/mode/groovy').then(m =>
+ legacy(m.groovy),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'Haskell',
+ extensions: ['hs'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/haskell').then(m =>
+ legacy(m.haskell),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'Haxe',
+ extensions: ['hx'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/haxe').then(m =>
+ legacy(m.haxe),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'HXML',
+ extensions: ['hxml'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/haxe').then(m =>
+ legacy(m.hxml),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'HTTP',
+ load() {
+ return import('@codemirror/legacy-modes/mode/http').then(m =>
+ legacy(m.http),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'IDL',
+ extensions: ['pro'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/idl').then(m =>
+ legacy(m.idl),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'JSON-LD',
+ alias: ['jsonld'],
+ extensions: ['jsonld'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/javascript').then(m =>
+ legacy(m.jsonld),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'Julia',
+ extensions: ['jl'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/julia').then(m =>
+ legacy(m.julia),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'Kotlin',
+ extensions: ['kt', 'kts'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/clike').then(m =>
+ legacy(m.kotlin),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'LiveScript',
+ alias: ['ls'],
+ extensions: ['ls'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/livescript').then(m =>
+ legacy(m.liveScript),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'Lua',
+ extensions: ['lua'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/lua').then(m =>
+ legacy(m.lua),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'mIRC',
+ extensions: ['mrc'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/mirc').then(m =>
+ legacy(m.mirc),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'Mathematica',
+ extensions: ['m', 'nb', 'wl', 'wls'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/mathematica').then(m =>
+ legacy(m.mathematica),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'Modelica',
+ extensions: ['mo'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/modelica').then(m =>
+ legacy(m.modelica),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'MUMPS',
+ extensions: ['mps'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/mumps').then(m =>
+ legacy(m.mumps),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'Mbox',
+ extensions: ['mbox'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/mbox').then(m =>
+ legacy(m.mbox),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'Nginx',
+ filename: /nginx.*\.conf$/i,
+ load() {
+ return import('@codemirror/legacy-modes/mode/nginx').then(m =>
+ legacy(m.nginx),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'NSIS',
+ extensions: ['nsh', 'nsi'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/nsis').then(m =>
+ legacy(m.nsis),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'NTriples',
+ extensions: ['nt', 'nq'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/ntriples').then(m =>
+ legacy(m.ntriples),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'Objective-C',
+ alias: ['objective-c', 'objc'],
+ extensions: ['m'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/clike').then(m =>
+ legacy(m.objectiveC),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'Objective-C++',
+ alias: ['objective-c++', 'objc++'],
+ extensions: ['mm'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/clike').then(m =>
+ legacy(m.objectiveCpp),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'OCaml',
+ extensions: ['ml', 'mli', 'mll', 'mly'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/mllike').then(m =>
+ legacy(m.oCaml),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'Octave',
+ extensions: ['m'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/octave').then(m =>
+ legacy(m.octave),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'Oz',
+ extensions: ['oz'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/oz').then(m => legacy(m.oz));
+ },
+ }),
+ LanguageDescription.of({
+ name: 'Pascal',
+ extensions: ['p', 'pas'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/pascal').then(m =>
+ legacy(m.pascal),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'Perl',
+ extensions: ['pl', 'pm'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/perl').then(m =>
+ legacy(m.perl),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'Pig',
+ extensions: ['pig'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/pig').then(m =>
+ legacy(m.pig),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'PowerShell',
+ extensions: ['ps1', 'psd1', 'psm1'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/powershell').then(m =>
+ legacy(m.powerShell),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'Properties files',
+ alias: ['ini', 'properties'],
+ extensions: ['properties', 'ini', 'in'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/properties').then(m =>
+ legacy(m.properties),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'ProtoBuf',
+ extensions: ['proto'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/protobuf').then(m =>
+ legacy(m.protobuf),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'Pug',
+ alias: ['jade'],
+ extensions: ['pug', 'jade'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/pug').then(m =>
+ legacy(m.pug),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'Puppet',
+ extensions: ['pp'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/puppet').then(m =>
+ legacy(m.puppet),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'Q',
+ extensions: ['q'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/q').then(m => legacy(m.q));
+ },
+ }),
+ LanguageDescription.of({
+ name: 'R',
+ alias: ['rscript'],
+ extensions: ['r', 'R'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/r').then(m => legacy(m.r));
+ },
+ }),
+ LanguageDescription.of({
+ name: 'RPM Changes',
+ load() {
+ return import('@codemirror/legacy-modes/mode/rpm').then(m =>
+ legacy(m.rpmChanges),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'RPM Spec',
+ extensions: ['spec'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/rpm').then(m =>
+ legacy(m.rpmSpec),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'Ruby',
+ alias: ['jruby', 'macruby', 'rake', 'rb', 'rbx'],
+ extensions: ['rb'],
+ filename: /^(Gemfile|Rakefile)$/,
+ load() {
+ return import('@codemirror/legacy-modes/mode/ruby').then(m =>
+ legacy(m.ruby),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'SAS',
+ extensions: ['sas'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/sas').then(m =>
+ legacy(m.sas),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'Scala',
+ extensions: ['scala'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/clike').then(m =>
+ legacy(m.scala),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'Scheme',
+ extensions: ['scm', 'ss'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/scheme').then(m =>
+ legacy(m.scheme),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'Shell',
+ alias: ['bash', 'sh', 'zsh'],
+ extensions: ['sh', 'ksh', 'bash'],
+ filename: /^PKGBUILD$/,
+ load() {
+ return import('@codemirror/legacy-modes/mode/shell').then(m =>
+ legacy(m.shell),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'Sieve',
+ extensions: ['siv', 'sieve'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/sieve').then(m =>
+ legacy(m.sieve),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'Smalltalk',
+ extensions: ['st'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/smalltalk').then(m =>
+ legacy(m.smalltalk),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'Solr',
+ load() {
+ return import('@codemirror/legacy-modes/mode/solr').then(m =>
+ legacy(m.solr),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'SML',
+ extensions: ['sml', 'sig', 'fun', 'smackspec'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/mllike').then(m =>
+ legacy(m.sml),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'SPARQL',
+ alias: ['sparul'],
+ extensions: ['rq', 'sparql'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/sparql').then(m =>
+ legacy(m.sparql),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'Spreadsheet',
+ alias: ['excel', 'formula'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/spreadsheet').then(m =>
+ legacy(m.spreadsheet),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'Squirrel',
+ extensions: ['nut'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/clike').then(m =>
+ legacy(m.squirrel),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'Stylus',
+ extensions: ['styl'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/stylus').then(m =>
+ legacy(m.stylus),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'Swift',
+ extensions: ['swift'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/swift').then(m =>
+ legacy(m.swift),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'sTeX',
+ load() {
+ return import('@codemirror/legacy-modes/mode/stex').then(m =>
+ legacy(m.stex),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'LaTeX',
+ alias: ['tex'],
+ extensions: ['text', 'ltx', 'tex'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/stex').then(m =>
+ legacy(m.stex),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'SystemVerilog',
+ extensions: ['v', 'sv', 'svh'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/verilog').then(m =>
+ legacy(m.verilog),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'Tcl',
+ extensions: ['tcl'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/tcl').then(m =>
+ legacy(m.tcl),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'Textile',
+ extensions: ['textile'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/textile').then(m =>
+ legacy(m.textile),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'TiddlyWiki',
+ load() {
+ return import('@codemirror/legacy-modes/mode/tiddlywiki').then(m =>
+ legacy(m.tiddlyWiki),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'Tiki wiki',
+ load() {
+ return import('@codemirror/legacy-modes/mode/tiki').then(m =>
+ legacy(m.tiki),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'TOML',
+ extensions: ['toml'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/toml').then(m =>
+ legacy(m.toml),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'Troff',
+ extensions: ['1', '2', '3', '4', '5', '6', '7', '8', '9'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/troff').then(m =>
+ legacy(m.troff),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'TTCN',
+ extensions: ['ttcn', 'ttcn3', 'ttcnpp'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/ttcn').then(m =>
+ legacy(m.ttcn),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'TTCN_CFG',
+ extensions: ['cfg'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/ttcn-cfg').then(m =>
+ legacy(m.ttcnCfg),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'Turtle',
+ extensions: ['ttl'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/turtle').then(m =>
+ legacy(m.turtle),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'Web IDL',
+ extensions: ['webidl'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/webidl').then(m =>
+ legacy(m.webIDL),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'VB.NET',
+ extensions: ['vb'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/vb').then(m => legacy(m.vb));
+ },
+ }),
+ LanguageDescription.of({
+ name: 'VBScript',
+ extensions: ['vbs'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/vbscript').then(m =>
+ legacy(m.vbScript),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'Velocity',
+ extensions: ['vtl'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/velocity').then(m =>
+ legacy(m.velocity),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'Verilog',
+ extensions: ['v'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/verilog').then(m =>
+ legacy(m.verilog),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'VHDL',
+ extensions: ['vhd', 'vhdl'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/vhdl').then(m =>
+ legacy(m.vhdl),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'XQuery',
+ extensions: ['xy', 'xquery', 'xq', 'xqm', 'xqy'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/xquery').then(m =>
+ legacy(m.xQuery),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'Yacas',
+ extensions: ['ys'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/yacas').then(m =>
+ legacy(m.yacas),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'Z80',
+ extensions: ['z80'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/z80').then(m =>
+ legacy(m.z80),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'MscGen',
+ extensions: ['mscgen', 'mscin', 'msc'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/mscgen').then(m =>
+ legacy(m.mscgen),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'Xù',
+ extensions: ['xu'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/mscgen').then(m =>
+ legacy(m.xu),
+ );
+ },
+ }),
+ LanguageDescription.of({
+ name: 'MsGenny',
+ extensions: ['msgenny'],
+ load() {
+ return import('@codemirror/legacy-modes/mode/mscgen').then(m =>
+ legacy(m.msgenny),
+ );
+ },
+ }),
];
// 添加缓存机制