summaryrefslogtreecommitdiff
path: root/converter/src/syntax_checker.rs
diff options
context:
space:
mode:
Diffstat (limited to 'converter/src/syntax_checker.rs')
-rw-r--r--converter/src/syntax_checker.rs20
1 files changed, 20 insertions, 0 deletions
diff --git a/converter/src/syntax_checker.rs b/converter/src/syntax_checker.rs
index 334fa9d..52021c7 100644
--- a/converter/src/syntax_checker.rs
+++ b/converter/src/syntax_checker.rs
@@ -1,3 +1,5 @@
+use regex::Regex;
+
use crate::error::Exit;
pub fn check_markdown_syntax(i: &String) -> Result<(), Exit> {
@@ -199,3 +201,21 @@ pub fn check_markdown_syntax(i: &String) -> Result<(), Exit> {
Ok(())
}
+
+/// Check for duplicate markers
+pub fn check_duplicate_marker(input: &String) -> Result<(), Exit> {
+ let mut seen = std::collections::HashSet::new();
+ let heading_re = Regex::new(r"^(#{1,5})\s+(.+)$").unwrap();
+
+ for line in input.lines() {
+ if let Some(caps) = heading_re.captures(line) {
+ let heading_text = caps[2].trim().to_string();
+ if seen.contains(&heading_text) {
+ return Err(Exit::DuplicateMarker(heading_text));
+ }
+ seen.insert(heading_text);
+ }
+ }
+
+ Ok(())
+}