Version 5.2.0 (2024-02-07)
- Eliminate syntect library's dependency on serde's "derive" feature. Increases build parallelism.
- Add parsing of gutterSettings.
- Update
regex-syntax
to 0.8.
Version 5.1.0 (2023-08-01)
- Fix how
syntect::util::split_at()
handles multi-byte characters - Allow case insensitive search for .tmtheme paths
- impl
PartialEq
forTheme
- Upgrade
fancy-regex
to 0.11 - Upgrade
regex-syntax
to 0.7 - Replace
lazy_static
withonce_cell
- Change MSRV policy to "last three stable versions"
- Make
Debug
impl ofsyntect::highlighting::Color
less verbose
Version 5.0.0 (2022-05-03)
Breaking changes
- Lazy-load syntaxes to significantly improve startup time. This changes the binary format of syntax dump files.
- Remove
ContextId::new()
from public API to support lazy-loading of syntaxes - Rename
HighlightLines::highlight()
toHighlightLines::highlight_line()
to make it clear that the function takes one line at a time - Make
plist
dependency (used for loading themes) optional via newplist-load
feature - Remove obsolete
dump-load-rs
anddump-create-rs
features that has been identical todump-load
anddump-create
for two years - Remove deprecated items
ThemeSettings::highlight_foreground
,ThemeSettings::selection_background
,ClassedHTMLGenerator::new
,ClassedHTMLGenerator::parse_html_for_line
,html::css_for_theme
,html::tokens_to_classed_html
andhtml::tokens_to_classed_spans
- Mark all error enums as
#[non_exhaustive]
- These functions have been changed to return a
Result
to allow propagation of errors:html::ClassedHTMLGenerator::parse_html_for_line_which_includes_newline
html::append_highlighted_html_for_styled_line
html::css_for_theme_with_class_style
html::highlighted_html_for_string
html::line_tokens_to_classed_spans
html::styled_line_to_highlighted_html
parsing::ParseState::parse_line
parsing::ScopeStack::apply
parsing::ScopeStack::apply_with_hook
parsing::syntax_definition::Context::match_at
parsing::syntax_definition::ContextReference::id
parsing::syntax_definition::ContextReference::resolve
Other changes
- Fall back to
Plain Text
if a referenced syntax is missing - Add support for
hidden_file_extensions
key in syntaxes. - Implement
Error
andDisplay
for all error enums by usingthiserror
- Replace
lazycell
withonce_cell
to fix crash on lazy initialization - Add
ScopeRangeIterator
- Add CI check for Minimum Supported Rust Version. This is currently Rust 1.53.
- Make looking up a syntax by extension use case-insensitive comparison
- Make
from_dump_file()
~15% faster - Blend alpha value on converting colors to ANSI color sequences
- Fix sample code in documentation to avoid double newlines
- Fix lots of build warnings and lints
- Add Criterion benchmarks for a whole syntect pipeline and for
from_dump_file()
Version 4.7.1 (2022-01-03)
This version was yanked from crates.io due to a semver violation issue.
Version 4.7.0 (2021-12-25)
This version was yanked from crates.io due to a semver violation issue.
Version 4.6.0 (2021-08-01)
- Add
html::line_tokens_to_classed_spans
to also take a mutable ScopeStack, deprecatetokens_to_classed_spans
, to avoid panics and incorrect highlighting. - Derive Hash for Color and Style
- Add
find_unlinked_contexts
toSyntaxSet
- Add
syntaxes
method toSyntaxSetBuilder
- Bump
fancy-regex
to v0.7 andyaml-rust
to v0.4.5
Version 4.5.0 (2020-12-09)
- Added a new function for producing classed HTML which handles newlines correctly and deprecated old one. #307
Version 4.4.0 (2020-08-19)
- Errors are now
Send + Sync + 'static
#304
Version 4.3.0 (2020-08-01)
- Fixes unnecesary dependency of the
html
feature on theassets
feature. #300 - Adds ability to add prefixes to
html
module CSS class names. #296
Version 4.2.0 (2020-04-20)
- Updates to new versions of
onig
andplist
. The newonig
version doesn't requirebindgen
thus making compilation easier. #293
Version 4.1.1 (2020-04-20)
- Properly handle backreferences in included contexts #288
Version 4.1.0 (2020-03-30)
Thanks @sharkdp for the bug fixes! Bumping second part of semver since Send
is adding functionality (back).
Version 4.0.0 (2020-03-29)
Users can now opt in to a pure-Rust regex engine using Cargo features, making
compilation easier in general. People experiencing difficulty compiling for
Windows and Wasm should try switching to fancy-regex
. Note this currently
approximately halves highlighting speed.
See the Readme and #270 for details. Thanks to @robinst for implementing this!
- Ability to generate CSS for a theme for use with classed HTML generation (won't always be correct) #274
- Don't generate empty spans in classed HTML #276
- Miscellaneous dependency bumps and cleanup
Upgrading should cause no errors for nearly all users. Users using more unusual APIs may have a small amount of tweaking to do.
- If you use
default-features = false
you may need to update your features to choose a regex engine - A bunch of technically public APIs that I don't know if anyone uses changed due to the regex engine refactor, common uses shouldn't break
Version 3.3.0 (2019-09-22)
Bug fixes and new utilities
- Fixes multiple bugs
- Add RangedHighlightIterator
- Add
as_latex_escaped
util
Version 3.2.1 (2019-08-10)
- Bump onig dependency
- inconsequential patches
Version 3.2.0 (2019-03-09)
- Actually make
tokens_to_classed_spans
public like intended
Version 3.1.0 (2019-02-24)
Metadata and new classed HTML generation
- Add support for loading metadata (#223 #225 #230)
- Improve support for generating classed HTML and fix a bug, old function is deprecated because it's impossible to use correctly (#235)
- Update
plist
tov0.4
andpretty_assertions
tov0.6
(#232 #236)
Version 3.0.2 (2018-11-11)
Bug fixes
- Fix application of multiple
with_prototype
s (#220, fixes #160, #178, ASP highlighting) - Fix prototype marking logic (#221, fixes #219)
Version 3.0.1 (2018-10-16)
Minor bug fixes
- Fix a bug with syntaxes that used captures in lookarounds (#176 #215)
- Fix the precedence order of syntaxes to match Sublime (#217 #216)
Version 3.0.0 (2018-10-09)
Breaking changes and major new features
This is a major release with multiple breaking API changes, although upgrading shouldn't be too difficult. It fixes bugs and comes with some nice new features.
- The
SyntaxSet
API has been revamped to use a builder and an arena of contexts. See example usage. - Many functions now need to be passed the
SyntaxSet
that goes with the rest of their arguments because of this new arena. - Filename added to
LoadingError::ParseSyntax
- Many functions in the
html
module now take thenewlines
version of syntaxes.- These methods have also been renamed, partially so that code that needs updating doesn't break without a compile error.
- The HTML they output also treats newlines slightly differently and I think more correctly but uglier when you look at the HTML.
SyntaxSet::add_syntax -> SyntaxSetBuilder::add
SyntaxSet::load_syntaxes -> SyntaxSetBuilder::add_from_folder
SyntaxSet::load_plain_text_syntax -> SyntaxSetBuilder::add_plain_text_syntax
html::highlighted_snippet_for_string -> html::highlighted_html_for_string
: also change tonewlines
SyntaxSet
html::highlighted_snippet_for_file -> html::highlighted_html_for_file
: also change tonewlines
SyntaxSet
html::styles_to_coloured_html -> html::styled_line_to_highlighted_html
: also change tonewlines
SyntaxSet
html::start_coloured_html_snippet -> html::start_highlighted_html_snippet
: return type also changed
- Use arena for contexts (#182 #186 #187 #190 #195): This makes the code cleaner, enables use of syntaxes from multiple threads, and prevents accidental misuse.
- This involves a new
SyntaxSetBuilder
API for constructing newSyntaxSet
s - See the revamped parsyncat example.
- This involves a new
- Encourage use of newlines (#197 #207 #196): The
nonewlines
mode is often buggy so we made it easier to use thenewlines
mode.- Added a
LinesWithEndings
utility for iterating over the lines of a string with\n
characters. - Reengineer the
html
module to usenewlines
syntaxes.
- Added a
- Add helpers for modifying highlighted lines (#198): For use cases like highlighting a piece of text in a blog code snippet or debugger. This allows you to reach into the highlighted spans and add styles.
- Check out
split_at
andmodify_range
in theutil
module.
- Check out
- New
ThemeSet::add_from_folder
function (#200): For modifying existing theme sets.
- Improve nonewlines regex rewriting: #212 #211
- Reengineer theme application to match Sublime: #209
- Also mark contexts referenced by name as "no prototype" (same as ST): #180
- keep with_prototype when switching contexts with
set
: #177 #166 - Fix unused import warning: #174
- Ignore trailing dots in selectors: #173
- Fix
embed
to not include prototypes: #172 #160
- plist:
0.2 -> 0.3
- regex:
0.2 -> 1.0
- onig:
3.2.1 -> 4.1
Version 2.1.0 (2018-05-31)
Regex checking and plain file names
- Check regexes compile upon loading from YAML (There's technically a small breaking change here if you match on the previously unused regex error, but I don't think anyone does)
- Can detect the correct syntax on full file names like
CMakeLists.txt
- Make
nonewlines
mode marginally less buggy (still prefer usingnewlines
mode) - Better error types
- Better examples and tests
Version 2.0.1 (2018-04-28)
More robust parsing
- Parsing now abandons a regex after reaching a recursion depth limit instead of taking forever
- Loop detection better matches Sublime Text
- Parsing is faster!
- Dependency upgrades
- Other minor tweaks
Thanks to @robinst for the headline features of this release!
Version 2.0.0 (2018-01-02)
Breaking Changes and New Stuff
- The
static-onig
feature was removed, static linking is now the default - Font styles and color constants now use associated consts because of bitflags upgrade
SyntaxDefinition::load_from_str
now has an extra parameter
- Support for new
embed
syntax, see #124 - Updates to many dependencies
- Updated dumps
- More compact HTML output
Version 1.8.2 (2017-11-11)
New Inspired GitHub and libonig
Version 1.8.0 (2017-10-14)
Update bitflags & packages
This release changes how the constants for FontStyle
and Color
, relying on the new associated consts feature in Rust 1.20
. The old constants are still available but are deprecated and will be removed in v2.0
.
Packages were also updated to newer versions.
Version 1.7.3 (2017-09-15)
Enable comparison of parse states
Fixes comparisons of parse states so they are fast and don't recurse infinitely. Thanks @raphlinus
Version 1.7.2 (2017-09-05)
Bug fixes and package updates
- Fixes #101, which caused some syntaxes like PHP to behave incorrectly.
- Updates Packages with new syntax versions
- Adds new handy flags to the
syncat
example
Version 1.7.0 (2017-06-30)
Pure Rust dump loading / creation features
Version 1.6.0 (2017-06-21)
Helper methods and more theme attributes
Version 1.5.0 (2017-05-31)
Highlighting stacks
Small release, adds a convenience method for highlighting an entire stack, and derives some more things on Scope
.
Version 1.4.0 (2017-05-25)
Serde and optional parsing
This release switches the dump format from rustc-serialize
to Serde
, anyone using custom dumps will have to update them.
It also makes the parsing part of the library optional behind a feature flag, anyone not using the default feature flags probably will want to add the parsing
flag.
Version 1.3.0 (2017-04-05)
Bug fixes, tests, updates and feature flags
- Syntax tests: there is a new
syntest
example for running Sublime Text syntax tests - Bug fixes: there's a ton of bugs fixed in this release, mostly found via the syntax tests. These mostly affected certain syntaxes which pushed/set multiple contexts at once.
- Updated packages: The Sublime packages have been updated to the latest version
- Feature flags: there's now Cargo feature flags for disabling some parts of syntect if you don't want unnecessary binary and dependency bloat.