fn header_len(src: &str) -> usize {
let mut off = 0usize;
for line in src.split_inclusive('\n') {
let t = line.trim_end();
if t.is_empty() || t.starts_with("//") {
off += line.len();
} else {
break;
}
}
off
}
pub fn run(src: String, mode: crate::classdec::CureMode) -> String {
if src.contains("$DDC") {
return src;
}
let cut = header_len(&src);
let (header, body) = src.split_at(cut);
let mut outcome = cure_java_parser::parse(body);
if !outcome.errors.is_empty() {
return src;
}
if mode == crate::classdec::CureMode::Full {
cure_java_simplify::simplify_unit(
&mut outcome.ast,
&mut outcome.unit,
&cure_engine::Config::default(),
);
}
let printed = cure_java_print::print_unit(&outcome.ast, &outcome.unit);
let mut out = String::with_capacity(header.len() + printed.len() + 1);
out.push_str(header);
if !header.is_empty() && !header.ends_with("\n\n") {
out.push('\n');
}
out.push_str(&printed);
out
}