Add Syntax Highlighting To Code Blocks With Classes
This does classes instead of hard coded values for the styling.
TODO
☐
Merge this into: id: 2b1ep9iz
```cargo
[dependencies]
syntect = "5.2.0"
```
use syntect::html::{ClassedHTMLGenerator, ClassStyle};
use syntect::parsing::SyntaxSet;
use syntect::util::LinesWithEndings;
fn main() {
let code = r#"fn main() {
println!("Hello, World");
}"#;
let lang = "rust";
let output = highlight_code(code, lang);
println!("{}", output)
}
fn highlight_code(code: &str, lang: &str) -> String {
let syntax_set = SyntaxSet::load_defaults_newlines();
let syntax = syntax_set.find_syntax_by_token(&lang).unwrap_or_else(|| syntax_set.find_syntax_plain_text());
let mut html_generator = ClassedHTMLGenerator::new_with_class_style(syntax, &syntax_set, ClassStyle::Spaced);
for line in LinesWithEndings::from(code) {
let _ = html_generator.parse_html_for_line_which_includes_newline(line);
}
let output_html = html_generator.finalize();
format!(r#"<pre><code>{}</code></pre>"#, output_html)
}
Output:
<pre><code><span class="source rust"><span class="meta function rust"><span class="meta function rust"><span class="storage type function rust">fn</span> </span><span class="entity name function rust">main</span></span><span class="meta function rust"><span class="meta function parameters rust"><span class="punctuation section parameters begin rust">(</span></span><span class="meta function rust"><span class="meta function parameters rust"><span class="punctuation section parameters end rust">)</span></span></span></span><span class="meta function rust"> </span><span class="meta function rust"><span class="meta block rust"><span class="punctuation section block begin rust">{</span>
<span class="support macro rust">println!</span><span class="meta group rust"><span class="punctuation section group begin rust">(</span></span><span class="meta group rust"><span class="string quoted double rust"><span class="punctuation definition string begin rust">"</span>Hello, World<span class="punctuation definition string end rust">"</span></span></span><span class="meta group rust"><span class="punctuation section group end rust">)</span></span><span class="punctuation terminator rust">;</span>
</span><span class="meta block rust"><span class="punctuation section block end rust">}</span></span></span></span></code></pre>
-- end of line --