nmd_core/compilation/
compilation_rule.rs1pub mod replacement_rule;
2pub mod html_greek_letter_rule;
3pub mod reference_rule;
4pub mod html_cite_rule;
5pub mod constants;
6
7
8use std::fmt::Debug;
9use regex::{Match, Regex};
10use crate::{compilable_text::CompilableText, output_format::OutputFormat};
11use super::{compilation_configuration::{compilation_configuration_overlay::CompilationConfigurationOverLay, CompilationConfiguration}, compilation_error::CompilationError};
12
13
14pub trait CompilationRule: Send + Sync + Debug {
15
16 fn search_pattern(&self) -> &String;
17
18 fn search_pattern_regex(&self) -> &Regex;
19
20 fn is_match(&self, content: &str) -> bool {
21
22 self.search_pattern_regex().is_match(content)
23 }
24
25 fn find_iter<'r, 'h>(&'r self, content: &'h str) -> Vec<Match<'h>> {
26 self.search_pattern_regex().find_iter(content).collect()
27 }
28
29 fn standard_compile(&self, compilable: &CompilableText, format: &OutputFormat, compilation_configuration: &CompilationConfiguration, compilation_configuration_overlay: CompilationConfigurationOverLay) -> Result<CompilableText, CompilationError>;
31
32 fn fast_compile(&self, compilable: &CompilableText, format: &OutputFormat, compilation_configuration: &CompilationConfiguration, compilation_configuration_overlay: CompilationConfigurationOverLay) -> Result<CompilableText, CompilationError> {
34 self.standard_compile(compilable, format, compilation_configuration, compilation_configuration_overlay)
35 }
36
37 fn compile(&self, compilable: &CompilableText, format: &OutputFormat, compilation_configuration: &CompilationConfiguration, compilation_configuration_overlay: CompilationConfigurationOverLay) -> Result<CompilableText, CompilationError> {
39
40 if compilation_configuration.fast_draft() {
41 return self.fast_compile(compilable, format, compilation_configuration, compilation_configuration_overlay)
42 }
43
44 self.standard_compile(compilable, format, compilation_configuration, compilation_configuration_overlay)
45 }
46
47
48}