summaryrefslogtreecommitdiff
path: root/converter/src/syntax_checker.rs
diff options
context:
space:
mode:
author魏曹先生 <1992414357@qq.com>2026-02-10 04:07:12 +0800
committer魏曹先生 <1992414357@qq.com>2026-02-10 04:07:12 +0800
commit275084f025b81da78f2a6c5cb23bc4a846a7b909 (patch)
treef8899947ad53534318c7d531f1b0df2506620d9f /converter/src/syntax_checker.rs
parentade7980b250d0d679355d9583edd03deed871ff2 (diff)
Refactor converter and replace built_res with resource generator
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(())
+}