Packages
mdex
0.7.0
0.13.3
0.13.2
0.13.1
0.13.0
0.12.5
retired
0.12.4
0.12.3
0.12.2
0.12.1
0.12.0
0.11.7
0.11.6
0.11.5
0.11.4
0.11.3
0.11.2
0.11.1
0.11.0
0.10.0
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.6
0.8.5
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.2
0.6.1
0.6.0
0.5.0
0.4.3
0.4.2
0.4.1
0.4.0
0.3.3
0.3.2
0.3.1
0.3.0
0.2.0
0.1.18
0.1.17
0.1.16
0.1.15
0.1.14
0.1.13
0.1.12
0.1.11
0.1.10
0.1.9
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
Fast and extensible Markdown for Elixir
Security advisory:
This version has known vulnerabilities.
View advisories
Current section
Files
Jump to
Current section
Files
native/comrak_nif/src/autumnus_adapter.rs
use autumnus::formatter::HtmlFormatterBuilder;
use autumnus::languages::Language;
use autumnus::FormatterOption;
use comrak::adapters::SyntaxHighlighterAdapter;
use std::collections::HashMap;
use std::io::{self, Write};
#[derive(Default)]
pub struct AutumnusAdapter<'a> {
formatter: FormatterOption<'a>,
}
impl<'a> AutumnusAdapter<'a> {
pub fn new(formatter: FormatterOption<'a>) -> Self {
Self { formatter }
}
}
impl SyntaxHighlighterAdapter for AutumnusAdapter<'_> {
fn write_pre_tag(
&self,
output: &mut dyn Write,
_attributes: HashMap<String, String>,
) -> io::Result<()> {
let html_formatter = HtmlFormatterBuilder::new()
.with_formatter(self.formatter)
.build();
html_formatter.open_pre_tag(output)?;
Ok(())
}
fn write_code_tag(
&self,
output: &mut dyn Write,
attributes: HashMap<String, String>,
) -> io::Result<()> {
let plaintext = "language-plaintext".to_string();
let language = attributes.get("class").unwrap_or(&plaintext);
let split: Vec<&str> = language.split('-').collect();
let language = split.get(1).unwrap_or(&"plaintext");
let lang: Language = Language::guess(language, "");
let html_formatter = HtmlFormatterBuilder::new()
.with_formatter(self.formatter)
.with_lang(lang)
.build();
html_formatter.open_code_tag(output)?;
Ok(())
}
fn write_highlighted(
&self,
output: &mut dyn Write,
lang: Option<&str>,
source: &str,
) -> io::Result<()> {
let lang: Language = Language::guess(lang.unwrap_or("plaintext"), source);
let html_formatter = HtmlFormatterBuilder::new()
.with_formatter(self.formatter)
.with_lang(lang)
.with_source(source)
.build();
html_formatter.highlights(output)?;
Ok(())
}
}