Skip to main content

oak_html/highlighter/
mod.rs

1use crate::language::HtmlLanguage;
2use oak_core::{Language, errors::ParseResult};
3use oak_highlight::{
4    highlighter::{HighlightResult, Highlighter, OakHighlighter},
5    themes::Theme,
6};
7
8/// HTML Highlighter
9pub struct HtmlHighlighter {
10    use_parser: bool,
11}
12
13impl HtmlHighlighter {
14    pub fn new(use_parser: bool) -> Self {
15        Self { use_parser }
16    }
17}
18
19impl Highlighter for HtmlHighlighter {
20    fn highlight<'a>(&self, source: &'a str, _language: &str, theme: Theme) -> ParseResult<HighlightResult<'a>> {
21        let highlighter = OakHighlighter::new();
22
23        if self.use_parser {
24            let config = HtmlLanguage::new();
25            let parser = crate::parser::HtmlParser::new(config);
26            let lexer = crate::lexer::HtmlLexer::new(&config);
27            highlighter.highlight_with_language::<HtmlLanguage, crate::parser::HtmlParser, crate::lexer::HtmlLexer<'_>>(source, theme, &parser, &lexer)
28        }
29        else {
30            highlighter.highlight(source, HtmlLanguage::NAME, theme)
31        }
32    }
33}