Skip to main content

oak_haskell/highlighter/
mod.rs

1use crate::{language::HaskellLanguage, lexer::HaskellLexer, parser::HaskellParser};
2use oak_core::{Language, errors::ParseResult};
3use oak_highlight::{
4    highlighter::{HighlightResult, Highlighter, OakHighlighter},
5    themes::Theme,
6};
7
8/// Haskell 语法高亮器
9pub struct HaskellHighlighter {
10    use_parser: bool,
11}
12
13impl HaskellHighlighter {
14    pub fn new(use_parser: bool) -> Self {
15        Self { use_parser }
16    }
17}
18
19impl Default for HaskellHighlighter {
20    fn default() -> Self {
21        Self::new(true)
22    }
23}
24
25impl Highlighter for HaskellHighlighter {
26    fn highlight<'a>(&self, source: &'a str, _language: &str, theme: Theme) -> ParseResult<HighlightResult<'a>> {
27        let highlighter = OakHighlighter::new();
28
29        if self.use_parser {
30            let config = HaskellLanguage::default();
31            let parser = HaskellParser::new(&config);
32            let lexer = HaskellLexer::new(&config);
33            highlighter.highlight_with_language::<HaskellLanguage, HaskellParser<'_>, HaskellLexer<'_>>(source, theme, &parser, &lexer)
34        }
35        else {
36            highlighter.highlight(source, HaskellLanguage::NAME, theme)
37        }
38    }
39}