use sylpheed_formats::{pak, ui_layout}; fn main() { let mut a = std::env::args().skip(1); let pk = a.next().unwrap(); let i: usize = a.next().unwrap().parse().unwrap(); let ar = pak::PakArchive::open(pk).unwrap(); let by = ar.read(&ar.entries()[i]).unwrap(); let b = ui_layout::parse_build(&by).unwrap(); println!( "entry {i}: {} elements, {} records, {} sprites", b.elements.len(), b.records.len(), b.sprites.len() ); let mut rk: Vec<&String> = b.records.keys().collect(); rk.sort(); println!(" records: {:?}", rk); for (rn, &(o, sz)) in &b.records { if o + sz > by.len() { continue; } let Some(lb) = ui_layout::parse_build(&by[o..o + sz]) else { continue; }; println!(" RECORD {rn}: {} elements", lb.elements.len()); for le in &lb.elements { let lts: Vec = le .keyframes .iter() .map(|k| { format!( "t{}a{}", k.time.map(|v| v as i64).unwrap_or(-1), k.fade >> 24 ) }) .collect(); println!( " [{}] {:<22} kind=0x{:<6x} {}", le.index, le.name, le.kind, lts.join(" ") ); } } for e in &b.elements { let ts: Vec = e .keyframes .iter() .map(|k| { format!( "t{}a{}", k.time.map(|v| v as i64).unwrap_or(-1), k.fade >> 24 ) }) .collect(); println!( " [{}] {:<24} kind=0x{:<6x} {}", e.index, e.name, e.kind, ts.join(" ") ); if let Some(&(o, s)) = b.records.get(&e.name) { if o + s <= by.len() { if let Some(lb) = ui_layout::parse_build(&by[o..o + s]) { for le in &lb.elements { let lts: Vec = le .keyframes .iter() .map(|k| { format!( "t{}a{}", k.time.map(|v| v as i64).unwrap_or(-1), k.fade >> 24 ) }) .collect(); println!( " leaf {:<20} kind=0x{:<6x} {}", le.name, le.kind, lts.join(" ") ); } } } } } }