Языки редактора: список и поддержка¶
Список проверен вызовом GetLanguageByExtension + GetScopeByLanguageId (TextMateSharp.Grammars 1.0.56). Исходники: danipen/TextMateSharp — имена грамматик в src/TextMateSharp.Grammars/GrammarNames.cs, расширения по языкам в package.json каждого пакета в Resources/Grammars/. В редакторе используются только расширения из этого списка.
Что есть в бандле (проверено)¶
Поддерживаются (28 расширений):
.bat, .cjs, .cs, .cshtml, .css, .go, .htm, .html, .js, .json, .less, .markdown, .md, .mjs, .ps1, .psd1, .psm1, .py, .razor, .rs, .scss, .sh, .sql, .ts, .tsx, .xml, .yaml, .yml.
Не поддерживаются (GetLanguageByExtension даёт исключение):
.txt, .toml, .mts, .cts (для .mts/.cts в IDE маппим на грамматику .ts — это расширения TypeScript 5+ для явного типа модуля: ESM и CommonJS).
Поддержка в Cascade IDE¶
Единый источник правды — Services/EditorLanguageSupport: списки Supported и ExtensionToGrammarExtension. Подсветка применяется только для расширений из словаря; при неизвестном расширении грамматика не меняется (остаётся от предыдущего файла).
| Язык | Расширения в IDE |
|---|---|
| C# | .cs |
| Markdown | .md, .markdown |
| XML / XAML | .xml, .axaml, .xaml, .csproj, .config, .props, .targets |
| JSON | .json |
| SQL | .sql |
| HTML | .html, .htm |
| CSS / SCSS / Less | .css, .scss, .less |
| JavaScript | .js, .mjs, .cjs |
| TypeScript | .ts, .tsx, .mts, .cts (последние два → грамматика .ts) |
| YAML | .yml, .yaml |
| PowerShell | .ps1, .psm1, .psd1 |
| Razor | .razor, .cshtml |
| Batch | .bat |
| Bash | .sh |
| Python | .py |
| Go | .go |
| Rust | .rs |
Что не добавляли¶
- .txt — в бандле нет грамматики «plain text»; для неизвестных расширений подсветка не переключается.
- .toml — в бандле нет.
- Dockerfile / .editorconfig / .ini / .gitignore — не проверялись; при появлении в бандле можно добавить в
EditorLanguageSupport.
Как добавить синтаксис другого языка¶
Язык уже есть в бандле TextMateSharp.Grammars¶
Добавить расширения в Services/EditorLanguageSupport.cs: в список Supported и в словарь ExtensionToGrammarExtension. Ключ — расширение файла (например .csx), значение — то расширение, которое принимает GetLanguageByExtension (в репо смотреть в Resources/Grammars/<имя>/package.json → contributes.languages[].extensions).
Языка нет в бандле (TOML, Dockerfile, свой язык)¶
В RegistryOptions (исходники TextMateSharp) есть методы LoadFromLocalDir и LoadFromLocalFile: они подгружают грамматику из локальной папки/файла в тот же реестр, после чего GetLanguageByExtension начнёт находить новые расширения.
Формат пакета грамматики (как в VS Code / TextMate):
- Папка с именем грамматики (латиница, например
toml). - Внутри —
package.jsonс полемcontributes: contributes.languages[]:id,extensions(массив строк, например[".toml"]), опциональноaliases,configuration(путь к language-configuration.json).contributes.grammars[]:language(тот же id),scopeName(напримерsource.toml),path— путь к.tmLanguage.jsonили.tmLanguage(TextMate grammar).- В той же папке — файл грамматики по пути из
path(напримерsyntaxes/toml.tmLanguage.json).
Грамматики в формате TextMate (.tmLanguage.json) можно брать из расширений VS Code или с Open VSX / GitHub (например vscode-toml).
Шаги в Cascade IDE:
- Выбрать или собрать пакет грамматики (папка с
package.json+syntaxes/*.tmLanguage.json). - Положить папку в известное место (например рядом с exe:
Grammars/toml/, или в настройках пользователя). - При инициализации редактора: после создания
RegistryOptions(ThemeName.LightPlus)и доInstallTextMate(registryOptions)вызватьregistryOptions.LoadFromLocalDir(pathToGrammarsFolder). ВLoadFromLocalDirкаждая подпапка считается пакетом (по имени папки ищетсяpackage.jsonвнутри). - Добавить новые расширения в
EditorLanguageSupport(SupportedиExtensionToGrammarExtension), чтобы по ним выбиралась грамматика.
Сейчас в коде вызов LoadFromLocalDir не делается — при добавлении первого «внешнего» языка нужно в MainWindow.axaml.cs в SetupEditorAndTextMate() после _registryOptions = new RegistryOptions(...) добавить проверку: если есть папка с грамматиками (например Path.Combine(AppContext.BaseDirectory, "Grammars")), вызвать _registryOptions.LoadFromLocalDir(thatPath).
Где менять¶
- Список языков и маппинг:
Services/EditorLanguageSupport.cs(Supported,ExtensionToGrammarExtension). - Применение грамматики:
Views/MainWindow.axaml.cs, методApplyGrammarByFilePath. - Подгрузка внешних грамматик: там же, в
SetupEditorAndTextMate(), после создания_registryOptions— вызовLoadFromLocalDir(когда появится папка с пакетами). - Проверка бандла: при необходимости — отдельная консольная программа с
RegistryOptions(ThemeName.LightPlus)и перебором расширений черезGetLanguageByExtension. - Сверка с исходниками: расширения из нашего списка совпадают с объявленными в package.json репо (csharp, razor, javascript, typescriptbasics, html, powershell, shellscript, sql и т.д.). В репо есть дополнительные расширения (напр. .csx, .cake для C#; .pssc, .psrc для PowerShell; .dsql для SQL), при желании их можно добавить в EditorLanguageSupport.