2018-05-18 17:35:45 +00:00
## Syntax Highlighting in bat
`bat` uses the [syntect ](https://github.com/trishume/syntect ) library to highlight source
code. As a basis, syntect uses [Sublime Text ](https://www.sublimetext.com/ ) syntax definitions
in the `.sublime-syntax` format.
In order to add new syntaxes to `bat` , follow these steps:
1. Find a Sublime Text syntax for the given language, preferably in a separate Git repository
which can be included as a submodule (under `assets/syntaxes` ).
2. If the Sublime Text syntax is only available as a `.tmLanguage` file, open the file in
Sublime Text and convert it to a `.sublime-syntax` file via *Tools* -> *Developer* ->
*New Syntax from XXX.tmLanguage...* . Save the new file in the `assets/syntaxes` folder.
2019-02-07 21:31:37 +00:00
3. Run the `create.sh` script. It calls `bat cache --build` to parse all available
2018-05-18 17:35:45 +00:00
`.sublime-syntax` files and serialize them to a `syntaxes.bin` file (in this folder).
4. Re-compile `bat` . At compilation time, the `syntaxes.bin` file will be stored inside the
`bat` binary.
2019-01-16 19:04:46 +00:00
5. If you send a pull request with your changes, please do *not* include the changed `syntaxes.bin`
file. A new binary cache file will be created once before every new release of `bat` .
2018-05-18 17:35:45 +00:00
### Troubleshooting
Make sure that the local cache does not interfere with the internally stored syntaxes and
themes (`bat cache --clear`).
### Manual modifications
The following files have been manually modified after converting from a `.tmLanguage` file:
2020-08-16 20:20:27 +00:00
* `Apache.sublime_syntax` => removed `.conf` and `.CONF` file types.
2018-09-22 07:40:44 +00:00
* `Dart.sublime-syntax` => removed `#regex.dart` include.
2020-10-05 15:52:40 +00:00
* `INI.sublime-syntax` => added `.hgrc` , `hgrc` , and `desktop` file types and support for comments after section headers
2019-05-29 16:35:33 +00:00
* `Org mode.sublime-syntax` => removed `task` file type.
2020-05-17 21:13:55 +00:00
* `SML.sublime_syntax` => removed `ml` file type.
2018-12-14 22:06:45 +00:00
### Non-submodule additions
* `Assembly (x86_64)` has been manually added from https://github.com/13xforever/x86-assembly-textmate-bundle due to `git clone` recursion problems
2019-10-29 19:49:39 +00:00
* `Nim.sublime-syntax` has been added manually from https://github.com/getzola/zola/blob/master/sublime_syntaxes/Nim.sublime-syntax as there was no suitable Git repository for it. The original syntax seems to originate from https://github.com/Varriount/NimLime
2020-03-21 01:07:55 +00:00
* `Rego.sublime-syntax` has been added manually from https://github.com/open-policy-agent/opa/blob/master/misc/syntax/sublime/rego.sublime-syntax
as it is not kept in a standalone repository. The file is generated from
https://github.com/open-policy-agent/opa/blob/master/misc/syntax/textmate/Rego.tmLanguage
2020-05-17 21:13:55 +00:00
* `SML.sublime_syntax` has been added manually from
https://github.com/seanjames777/SML-Language-Definitiona as it is not
kept in a standalone repository. The file generated is from
https://github.com/seanjames777/SML-Language-Definition/blob/master/sml.tmLanguage
2020-05-27 06:58:44 +00:00
* `Cabal.sublime_syntax` has been added manually from
https://github.com/SublimeHaskell/SublimeHaskell/ - we don't want to include the whole submodule because it includes other syntaxes ("Haskell improved") as well.