use crate::plugin::{SectionProcessor, SectionResult};
use alloc::string::String;
pub struct AegisubProjectProcessor;
impl SectionProcessor for AegisubProjectProcessor {
fn name(&self) -> &'static str {
"Aegisub Project"
}
fn process(&self, header: &str, lines: &[&str]) -> SectionResult {
if !header.eq_ignore_ascii_case("Aegisub Project") {
return SectionResult::Ignored;
}
for line in lines {
let line = line.trim();
if line.is_empty() || line.starts_with('!') {
continue;
}
if !line.contains('=') && !line.contains(':') {
return SectionResult::Failed(String::from(
"Invalid Aegisub project line format (expected key=value or key: value)",
));
}
}
SectionResult::Processed
}
fn validate(&self, header: &str, lines: &[&str]) -> bool {
header.eq_ignore_ascii_case("Aegisub Project") && !lines.is_empty()
}
}
pub struct AegisubExtradataProcessor;
impl SectionProcessor for AegisubExtradataProcessor {
fn name(&self) -> &'static str {
"Aegisub Extradata"
}
fn process(&self, header: &str, lines: &[&str]) -> SectionResult {
if !header.eq_ignore_ascii_case("Aegisub Extradata") {
return SectionResult::Ignored;
}
for line in lines {
let line = line.trim();
if line.is_empty() {
continue;
}
if line.len() > 10000 {
return SectionResult::Failed(String::from(
"Extradata line exceeds maximum length",
));
}
}
SectionResult::Processed
}
fn validate(&self, header: &str, _lines: &[&str]) -> bool {
header.eq_ignore_ascii_case("Aegisub Extradata")
}
}