A Sublime Text 4 syntax highlighting package for the KDL cuddly document language

## Introduction This package adds support for the `KDL` document language (for files with `.kdl` extension) ## Install - __Via [Package Control](https://packagecontrol.io)__: open `Command Palette` → `Package Control: Install Package` → `kdl`
                                        ^Ctrl/⌘Cmd⇧ShiftP - __Manually__: clone this repository to your [Packages directory](https://www.sublimetext.com/docs/packages.html) and rename it to `kdl` ```sh cd /path/to/sublime/packages/directory git clone https://github.com/eugenesvk/sublime-kdl.git mv sublime-kdl KDL ``` - Your color scheme likely needs to be patched to ignore or take full advantages of the /-slashdashed comment blocks:
Patched examples used for the screenshots below: [solarized](./src/ESCombo.sublime-color-scheme), [default](./src/Mariana.sublime-color-scheme) - to style /-slashdashed elements with muted colors: - add ` -comment` to your scopes, e.g., `{"name":"Tag name","foreground":"var(blue6)","scope":"entity.name.tag -comment"},` - add a copy of the same rule with an extra ` comment` scope and a blending color function, e.g., `{"name":"Tag name C","foreground":"color(var(blue6) blend(#000 60% hsl))","scope":"entity.name.tag comment"},` - to style /-slashdashed elements like regular comments add `comment.line.slash-dash.kdl` scope to your __Comment__ rule (e.g., `{"name":"Comment","foreground":"black","scope":"comment, comment.line.slash-dash.kdl"},`) so that its 4 level specificity overrides other rules like `entity.other.attribute-name` ## Use Open any `kdl` file (e.g., [syntax_example_screen.kdl](./test/syntax_example_screen.kdl)) and verify that the selected syntax is `KDL` and KDL-specific contexts are properly scoped[^1] and highlighted, maybe like so (depending on your color scheme): ![KDL syntax screenshot solarized](https://github.com/eugenesvk/sublime-KDL/blob/main/doc/KDL_syntax_dark.png?raw=true "Custom solarized scheme") ![KDL syntax screenshot default](https://github.com/eugenesvk/sublime-KDL/blob/main/doc/KDL_syntax_light.png?raw=true "Default color scheme") [^1]: scope naming is supposed to conform to [ST's scope naming guidelines](https://www.sublimetext.com/docs/scope_naming.html) ### Exposed scopes
List of scope names | KDL construct | Scope name | :------------ | :---------- | Entity | `entity.name.` `tag.node`¦`type`
`entity.other.attribute-name` `.kdl` | Elemens | `meta.` `node`¦`block.child`¦`argument.value`¦`property.` ` `¦`name`¦`separator`¦`value` `.kdl` | Mappings | `meta.mapping.` `key`¦`separator`¦`value`
`punctuation.separator.key-value` `punctuation.section.mapping.` `begin`¦`end` `.kdl` | Number | `constant.numeric.` `decimal`¦`float`¦`integer.` ` `¦`binary`¦`octal`¦`hexadecimal`
`constant.numeric.` `base`¦`exponent`¦`significand`¦`value`
`punctuation.separator.` `decimal`¦`exponent`¦`number` `.kdl` | String | `meta.string` `storage.type.string` `string.quoted.double.` ` `¦`raw`
`punctuation.definition.string.` `begin`¦`end` `.kdl` | Comment | `comment.block` `comment.block.documentation` `comment.` `block`¦`line.` `double-slash`
`punctuation.definition.comment.` `begin`¦`end` `.kdl` | Annotation | `meta.annotation` `punctuation.separator.annotation.` `begin`¦`end` `.kdl` | Others | `constant.character.` `escape`¦`escape.unicode.16-bit-hex`
`constant.language.` `boolean`¦`null`
`keyword.` `other`¦`operator.arithmetic` `punctuation.separator.continuation.line` `punctuation.terminator.node`
`invalid.illegal.` ` `¦`muted`¦`position`¦`muted.position` `.kdl`
### Keybindings This plugin adds two keybindings for the `kdl` scope: `"`/`'` that auto-pair double/single quotes even after string modifiers Add `"kdl.keybind_disable":true` to your `Preferences.sublime-settings` to disable ## Known issues - Only works in Sublime Text 4 since build __4075__ (10 July 2020) since it's using [version 2](https://www.sublimetext.com/docs/syntax.html) of the syntax ## Credits The default packages' syntax files ([Python](https://github.com/sublimehq/Packages/blob/master/Python/Python.sublime-syntax), [Bash](https://github.com/sublimehq/Packages/blob/master/ShellScript/Bash.sublime-syntax), [PHP](https://github.com/sublimehq/Packages/blob/master/PHP/PHP.sublime-syntax)), as well as [fish](https://github.com/Phidica/sublime-fish/blob/master/fish.sublime-syntax) and [vscode-kdl](https://github.com/kdl-org/vscode-kdl)