Skip to content

Commit cc7a194

Browse files
committed
Propagate font-variant from name element to name parts
1 parent a9d855b commit cc7a194

File tree

1 file changed

+27
-2
lines changed

1 file changed

+27
-2
lines changed

src/csl/rendering/names.rs

+27-2
Original file line numberDiff line numberDiff line change
@@ -588,15 +588,40 @@ fn write_name<T: EntryLike>(
588588
let hyphen_init = ctx.style.csl.settings.initialize_with_hyphen;
589589
let sort_sep = name_opts.sort_separator;
590590

591+
// Get the formatting from the name element itself
592+
let name_formatting = cs_name.formatting;
593+
591594
let first_part = cs_name.name_part_given();
592595
let family_part = cs_name.name_part_family();
593-
let first_format = first_part.map(|p| p.formatting).unwrap_or_default();
596+
597+
// Combine the name formatting with specific part formatting
598+
let first_format = first_part
599+
.map(|p| {
600+
let mut fmt = p.formatting;
601+
// If the name has font-variant set but the part doesn't, inherit it
602+
if name_formatting.font_variant.is_some() && fmt.font_variant.is_none() {
603+
fmt.font_variant = name_formatting.font_variant;
604+
}
605+
fmt
606+
})
607+
.unwrap_or(name_formatting);
608+
609+
let family_format = family_part
610+
.map(|p| {
611+
let mut fmt = p.formatting;
612+
// If the name has font-variant set but the part doesn't, inherit it
613+
if name_formatting.font_variant.is_some() && fmt.font_variant.is_none() {
614+
fmt.font_variant = name_formatting.font_variant;
615+
}
616+
fmt
617+
})
618+
.unwrap_or(name_formatting);
619+
594620
let first_case = first_part.map(|p| p.text_case).unwrap_or_default();
595621
let first_affixes = [
596622
first_part.map(|p| &p.affixes).and_then(|f| f.prefix.as_ref()),
597623
first_part.map(|p| &p.affixes).and_then(|f| f.suffix.as_ref()),
598624
];
599-
let family_format = family_part.map(|p| p.formatting).unwrap_or_default();
600625
let family_case = family_part.map(|p| p.text_case).unwrap_or_default();
601626
let family_affixes = [
602627
family_part.map(|p| &p.affixes).and_then(|f| f.prefix.as_ref()),

0 commit comments

Comments
 (0)