Shared Rust kernels

format/names

All modules · quoted at commit 9e1884369a67 of DnaCalc/DnaCalc. Comments are the source's own.

month_name · 31 lines · calc-func/src/format/names.rs on GitHub
pub(crate) fn month_name(profile: &FormatProfile, month: i64, abbreviated: bool, tagged: bool) -> String {
    let Ok(index) = usize::try_from(month - 1) else {
        return String::new();
    };
    // Fn1 and fn3 measure names under explicit format tags. These tagged forms
    // differ from the locale data's ordinary abbreviations.
    if tagged && profile.id == LocaleId::DeDe && month == 3 && abbreviated {
        return "Mrz".to_owned();
    }
    let names = locale_names(profile.id);
    if tagged && abbreviated {
        match profile.id {
            LocaleId::JaJp => return names.months_short.get(index)
                .map(|_| month.to_string()).unwrap_or_default(),
            LocaleId::RuRu => return names.months_long.get(index).copied().unwrap_or("")
                .chars().take(3).collect(),
            _ => {}
        }
    }
    let name = if abbreviated {
        names.months_short.get(index).copied().unwrap_or("")
    } else {
        names.months_long.get(index).copied().unwrap_or("")
    };
    if tagged && profile.id == LocaleId::RuRu {
        let mut chars = name.chars();
        chars.next().map(|first| first.to_uppercase().chain(chars).collect()).unwrap_or_default()
    } else {
        name.to_owned()
    }
}

Used by 18 functions.

weekday_name · 14 lines · calc-func/src/format/names.rs on GitHub
pub(crate) fn weekday_name(profile: &FormatProfile, index: usize, abbreviated: bool, tagged: bool) -> String {
    let names = locale_names(profile.id);
    let name = if abbreviated {
        names.weekdays_short.get(index).copied().unwrap_or("")
    } else {
        names.weekdays_long.get(index).copied().unwrap_or("")
    };
    if tagged && abbreviated && profile.id == LocaleId::RuRu {
        let mut chars = name.chars();
        chars.next().map(|first| first.to_uppercase().chain(chars).collect()).unwrap_or_default()
    } else {
        name.to_owned()
    }
}

Used by 18 functions.

locale_names · 35 lines · calc-func/src/format/names.rs on GitHub
fn locale_names(id: LocaleId) -> &'static LocaleNames {
    match id {
        LocaleId::EnUs => &EN_US,
        LocaleId::EnGb => &EN_GB,
        LocaleId::EnIe => &EN_IE,
        LocaleId::EnAu => &EN_AU,
        LocaleId::EnNz => &EN_NZ,
        LocaleId::EnZa => &EN_ZA,
        LocaleId::EnIn => &EN_IN,
        LocaleId::EnCa => &EN_CA,
        LocaleId::EnPh => &EN_PH,
        LocaleId::DeDe => &DE_DE,
        LocaleId::RuRu => &RU_RU,
        LocaleId::FiFi => &FI_FI,
        LocaleId::EtEe => &ET_EE,
        LocaleId::LvLv => &LV_LV,
        LocaleId::LtLt => &LT_LT,
        LocaleId::SkSk => &SK_SK,
        LocaleId::CsCz => &CS_CZ,
        LocaleId::NbNo => &NB_NO,
        LocaleId::NnNo => &NN_NO,
        LocaleId::FrFr => &FR_FR,
        LocaleId::EsEs => &ES_ES,
        LocaleId::PtPt => &PT_PT,
        LocaleId::ItIt => &IT_IT,
        LocaleId::NlNl => &NL_NL,
        LocaleId::PlPl => &PL_PL,
        LocaleId::PtBr => &PT_BR,
        LocaleId::JaJp => &JA_JP,
        LocaleId::KoKr => &KO_KR,
        LocaleId::ZhCn => &ZH_CN,
        LocaleId::HuHu => &HU_HU,
        LocaleId::CurrentExcelHost => &EN_US,
    }
}

Used by 18 functions.