use omgkit_depict::{generate, render::drawn_orders, style::Style};
use omgkit_io::molblock::{write_v2000, Record};
fn main() {
let path = std::env::args()
.nth(1)
.unwrap_or_else(|| "harness/corpus/large.smi".into());
let text = std::fs::read_to_string(&path).unwrap_or_else(|e| panic!("读不了 {path}:{e}"));
let style = &Style::ACS_1996;
for (lineno, line) in text.lines().enumerate().map(|(i, l)| (i + 1, l)) {
let smi = line.split_whitespace().next().unwrap_or("");
if smi.is_empty() {
continue;
}
let Ok(mut m) = omgkit_io::smiles::parse(smi) else {
continue;
};
if omgkit_chem::pipeline::sanitize(&mut m).is_err() || m.num_atoms() < 2 {
continue;
}
omgkit_io::stereo::perceive_bond_stereo(&mut m);
let d = generate(&m, style);
if d.wedges.iter().all(|w| w.narrow().is_none()) && d.unwedged.is_empty() {
continue;
}
let grown = d.drawn(&m);
let m = &*grown;
let orders = drawn_orders(m);
println!(">>> {lineno}\t{smi}");
println!(
"#unwedged {}",
d.unwedged
.iter()
.map(ToString::to_string)
.collect::<Vec<_>>()
.join(",")
);
let coords: Vec<[f64; 3]> = d.coords.iter().map(|p| [p.x, p.y, 0.0]).collect();
let unknown = omgkit_io::stereo::unspecified_cis_trans(m);
let rec = Record {
title: "",
coords: &coords,
wedges: &d.wedges,
orders: &orders,
unknown_stereo: &unknown,
};
match write_v2000(m, &rec) {
Ok(block) => print!("{block}"),
Err(e) => {
eprintln!("第 {lineno} 行 {smi} 写不出来:{e}");
continue;
}
}
println!("$$$$");
}
}