//! Do adjacent `GP_DIALOG` entries differ in BUTTON COUNT? //! //! I offered an untested reading for why 63 of 65 adjacent pairs have different //! element sets: dialog text baked into language-specific sprites, so EN/JP //! entries differ by construction. `sylpheed-port` refuted it with a count — two //! languages of one dialog cannot differ in how many buttons they have. This //! re-derives that with my own reader before I record the refutation. //! //! cargo run -p sylpheed-formats --example dialog_pair_button_counts use std::path::PathBuf; use sylpheed_formats::{pak::PakArchive, ui_layout}; fn btns(ar: &PakArchive, i: usize) -> Option { let by = ar.read(&ar.entries()[i]).ok()?; let b = ui_layout::parse_build(&by)?; Some(b.elements.iter().filter(|e| e.name.contains("btn")).count()) } fn main() { let root = PathBuf::from(std::env::var("SYLPHEED_DISC").expect("SYLPHEED_DISC")); let ar = PakArchive::open(root.join("dat/GP_DIALOG.pak")).expect("GP_DIALOG"); let n = ar.entries().len(); let (mut diff, mut same, mut skip) = (0, 0, 0); let mut show = 0; for k in (0..n).step_by(2) { match (btns(&ar, k), btns(&ar, k + 1)) { (Some(a), Some(b)) => { if a != b { diff += 1; if show < 6 { println!(" entries {k:3}/{:<3} button counts {a} vs {b}", k + 1); show += 1; } } else { same += 1 } } _ => skip += 1, } } println!("\nadjacent pairs differing in BUTTON COUNT: {diff}"); println!("adjacent pairs with equal button counts : {same}"); println!("unreadable : {skip}"); println!("\ntwo languages of one dialog cannot differ in button count."); }