Syntax Highlighting In Rust Apps With The syntect Crate
[] Merge this into : id : 2b1ep9iz
Inline Styles Included
This is the first approach I'm using. It adds inline styles but doesn't wrap things in a ` < pre > [TODO: Code shorthand span ] tag. I'm taking care of that already which lets me add additional styles when I want.
```cargo
= "5.2.0"
```
use HighlightLines;
use ThemeSet;
use ;
use SyntaxSet;
syntect
Core Usage
use syntect::html::{ClassStyle, ClassedHTMLGenerator};
use syntect::parsing::SyntaxSet;
use syntect::util::LinesWithEndings;
fn main() {
let current_code = r#"<h1>Alfa</h1>
<p>Bravo</p>"#;
let syntax_set = SyntaxSet::load_defaults_newlines();
let syntax = syntax_set.find_syntax_by_name("HTML").unwrap();
let mut html_generator =
ClassedHTMLGenerator::new_with_class_style(syntax, &syntax_set, ClassStyle::Spaced);
for line in LinesWithEndings::from(current_code) {
html_generator.parse_html_for_line_which_includes_newline(line);
}
let output_html = html_generator.finalize();
dbg!(output_html);
}
[] show how to generate the css file
Alternate Approach
The crate offers a way to style things directly inline as well. That code looks like this :
use ThemeSet;
use highlighted_html_for_string;
use SyntaxSet;
I installed the crate that got all these working with :
cargo add syntect
Footnotes And References
- syntect
A syntax highlighting library for Rust that uses Sublime Text syntax definitions. It aims to be a good solution for any Rust project that needs syntax highlighting
- •syntect::html::styled_line_to_highlighted_html
I copied the code I'm using directly from this example.
- •Sublime Text Syntax Definitions
Sublime Syntax files are YAML files with a small header, followed by a list of contexts. Each context has a list of patterns that describe how to highlight text in that context, and how to change the current text.
- •