diff options
| author | 魏曹先生 <1992414357@qq.com> | 2026-02-10 04:07:12 +0800 |
|---|---|---|
| committer | 魏曹先生 <1992414357@qq.com> | 2026-02-10 04:07:12 +0800 |
| commit | 275084f025b81da78f2a6c5cb23bc4a846a7b909 (patch) | |
| tree | f8899947ad53534318c7d531f1b0df2506620d9f /converter/src/syntax_checker.rs | |
| parent | ade7980b250d0d679355d9583edd03deed871ff2 (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.rs | 20 |
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(()) +} |
