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(" ")); } } } } } }