use std::sync::OnceLock;
#[derive(Debug, Clone, Copy)]
pub(crate) struct LayoutDebugFlags {
pub(crate) no_demote: bool,
pub(crate) no_promote: bool,
pub(crate) no_layout_tables: bool,
pub(crate) no_geometric_tables: bool,
#[cfg_attr(not(feature = "layout-detection"), allow(dead_code))]
pub(crate) no_reorder: bool,
pub(crate) log_overrides: bool,
}
fn env_is_set(name: &str) -> bool {
std::env::var_os(name).is_some_and(|value| {
let value = value.to_string_lossy();
let trimmed = value.trim();
!trimmed.is_empty() && trimmed != "0" && !trimmed.eq_ignore_ascii_case("false")
})
}
pub(crate) fn layout_debug_flags() -> LayoutDebugFlags {
static FLAGS: OnceLock<LayoutDebugFlags> = OnceLock::new();
*FLAGS.get_or_init(|| LayoutDebugFlags {
no_demote: env_is_set("XBERG_LAYOUT_NO_DEMOTE"),
no_promote: env_is_set("XBERG_LAYOUT_NO_PROMOTE"),
no_layout_tables: env_is_set("XBERG_LAYOUT_NO_LAYOUT_TABLES"),
no_geometric_tables: env_is_set("XBERG_LAYOUT_NO_GEOMETRIC_TABLES"),
no_reorder: env_is_set("XBERG_LAYOUT_NO_REORDER"),
log_overrides: env_is_set("XBERG_LAYOUT_LOG_OVERRIDES"),
})
}