kr580 2.0.0

Desktop KR580VM80 / Intel 8080 emulator.
Documentation
use super::tables;
use super::{has_cyrillic, is_opaque_option, split_words};
use crate::i18n::Lang;
use crate::view::printer_setup::driver_locale;

pub(super) fn feature(name: &str, driver_label: &str) -> String {
    tables::feature(name, Lang::En)
        .map(str::to_owned)
        .or_else(|| driver_english(driver_label))
        .unwrap_or_else(|| humanize(name))
}

pub(super) fn option(feature: &str, name: &str, driver_label: &str) -> String {
    tables::contextual(feature, name, Lang::En)
        .or_else(|| tables::option(name, Lang::En))
        .map(str::to_owned)
        .or_else(|| driver_locale::english(driver_label))
        .or_else(|| driver_english(driver_label))
        .unwrap_or_else(|| {
            if is_opaque_option(name) {
                format!("Option {}", &name[1..])
            } else {
                humanize(name)
            }
        })
}

pub(super) fn parameter(name: &str, driver_label: &str) -> String {
    tables::parameter(name, Lang::En)
        .map(str::to_owned)
        .or_else(|| driver_english(driver_label))
        .unwrap_or_else(|| humanize(name))
}

fn driver_english(label: &str) -> Option<String> {
    let label = label.trim();
    (!label.is_empty() && !has_cyrillic(label)).then(|| label.to_owned())
}

fn humanize(value: &str) -> String {
    split_words(value).join(" ")
}