table font props override

This commit is contained in:
melekhin
2026-09-01 16:23:37 +07:00
parent 11b4d4674a
commit 458436c4c3
2 changed files with 58 additions and 35 deletions
+53 -33
View File
@@ -16,9 +16,9 @@ public record FontProps
} }
uint? _SizeD; uint? _SizeD;
public bool IsItalic { get; init; } = false; public bool? IsItalic { get; init; } = false;
public bool IsBold { get; init; } = false; public bool? IsBold { get; init; } = false;
public UnderlineValues? Underline { get; init; } public UnderlineValues? Underline { get; init; }
@@ -34,23 +34,23 @@ public record FontProps
if (!string.IsNullOrWhiteSpace(FontFamily)) if (!string.IsNullOrWhiteSpace(FontFamily))
list.Add(new RunFonts { Ascii = FontFamily, HighAnsi = FontFamily }); list.Add(new RunFonts { Ascii = FontFamily, HighAnsi = FontFamily });
if (_SizeD is not null) if (_SizeD is { } sizeD)
list.Add(new FontSize { Val = _SizeD.Value.ToString() }); list.Add(new FontSize { Val = sizeD.ToString() });
if (IsBold) if (IsBold is { } isBold && isBold)
list.Add(new Bold()); list.Add(new Bold());
if (IsItalic) if (IsItalic is { } isItalic && isItalic)
list.Add(new Italic()); list.Add(new Italic());
if (Underline is not null) if (Underline is { } underline)
list.Add(new Underline { Val = Underline }); list.Add(new Underline { Val = underline });
if (!string.IsNullOrWhiteSpace(Color)) if (!string.IsNullOrWhiteSpace(Color))
list.Add(new Color { Val = Color }); list.Add(new Color { Val = Color });
if (SubSup is not null) if (SubSup is { } subsup)
list.Add(new VerticalTextAlignment { Val = SubSup }); list.Add(new VerticalTextAlignment { Val = subsup });
return list.Count > 0; return list.Count > 0;
} }
@@ -58,23 +58,23 @@ public record FontProps
{ {
list = []; list = [];
if (_SizeD is not null) if (_SizeD is { } sizeD)
list.Add(new FontSize { Val = _SizeD.Value.ToString() }); list.Add(new FontSize { Val = sizeD.ToString() });
if (IsBold) if (IsBold is { } isBold && isBold)
list.Add(new Bold()); list.Add(new Bold());
if (IsItalic) if (IsItalic is { } isItalic && isItalic)
list.Add(new Italic()); list.Add(new Italic());
if (Underline is not null) if (Underline is { } underline)
list.Add(new Underline { Val = Underline }); list.Add(new Underline { Val = underline });
if (!string.IsNullOrWhiteSpace(Color)) if (!string.IsNullOrWhiteSpace(Color))
list.Add(new Color { Val = Color }); list.Add(new Color { Val = Color });
if (SubSup is not null) if (SubSup is { } subsup)
list.Add(new VerticalTextAlignment { Val = SubSup }); list.Add(new VerticalTextAlignment { Val = subsup });
return list.Count > 0; return list.Count > 0;
} }
@@ -85,17 +85,17 @@ public record FontProps
if (!string.IsNullOrWhiteSpace(FontFamily)) if (!string.IsNullOrWhiteSpace(FontFamily))
list.Add(new RunFonts { Ascii = FontFamily, HighAnsi = FontFamily }); list.Add(new RunFonts { Ascii = FontFamily, HighAnsi = FontFamily });
if (_SizeD is not null) if (_SizeD is { } sizeD)
list.Add(new FontSize { Val = _SizeD.Value.ToString() }); list.Add(new FontSize { Val = sizeD.ToString() });
if (IsBold) if (IsBold is { } isBold && isBold)
list.Add(new Bold()); list.Add(new Bold());
if (IsItalic) if (IsItalic is { } isItalic && isItalic)
list.Add(new Italic()); list.Add(new Italic());
if (Underline is not null) if (Underline is { } underline)
list.Add(new Underline { Val = Underline }); list.Add(new Underline { Val = underline });
if (!string.IsNullOrWhiteSpace(Color)) if (!string.IsNullOrWhiteSpace(Color))
list.Add(new Color { Val = Color }); list.Add(new Color { Val = Color });
@@ -111,17 +111,17 @@ public record FontProps
if (!string.IsNullOrWhiteSpace(FontFamily)) if (!string.IsNullOrWhiteSpace(FontFamily))
list.Add(new RunFonts { Ascii = FontFamily, HighAnsi = FontFamily }); list.Add(new RunFonts { Ascii = FontFamily, HighAnsi = FontFamily });
if (_SizeD is not null) if (_SizeD is { } sizeD)
list.Add(new FontSize { Val = _SizeD.Value.ToString() }); list.Add(new FontSize { Val = sizeD.ToString() });
if (IsBold) if (IsBold is { } isBold && isBold)
list.Add(new Bold()); list.Add(new Bold());
if (IsItalic) if (IsItalic is { } isItalic && isItalic)
list.Add(new Italic()); list.Add(new Italic());
if (Underline is not null) if (Underline is { } underline)
list.Add(new Underline { Val = Underline }); list.Add(new Underline { Val = underline });
if (!string.IsNullOrWhiteSpace(Color)) if (!string.IsNullOrWhiteSpace(Color))
list.Add(new Color { Val = Color }); list.Add(new Color { Val = Color });
@@ -136,9 +136,13 @@ public record FontProps
list = []; list = [];
// Для математики используем только элемент Style // Для математики используем только элемент Style
if (IsBold) if (IsBold is { } isBold && isBold)
list.Add(new MathStyle { Val = MathStyleValues.BoldItalic }); list.Add(new MathStyle
else list.Add(new MathStyle { Val = MathStyleValues.Italic }); {
Val = isBold
? MathStyleValues.BoldItalic
: MathStyleValues.Italic
});
// Обычное начертание можно не добавлять, так как по умолчанию и так обычное // Обычное начертание можно не добавлять, так как по умолчанию и так обычное
// (но если нужно явно сбросить, можно добавить Style { Val = StyleValues.Plain }) // (но если нужно явно сбросить, можно добавить Style { Val = StyleValues.Plain })
@@ -159,4 +163,20 @@ public record FontProps
public static FontProps WithColor(string hexColor) => public static FontProps WithColor(string hexColor) =>
new() { Color = hexColor }; new() { Color = hexColor };
public FontProps Override(FontProps? second)
{
if (second is null) return this;
return new FontProps
{
FontFamily = second.FontFamily ?? FontFamily,
Size = second.Size ?? Size,
IsItalic = second.IsItalic ?? IsItalic,
IsBold = second.IsBold ?? IsBold,
Underline = second.Underline ?? Underline,
SubSup = second.SubSup ?? SubSup,
Color = second.Color ?? Color,
};
}
} }
+5 -2
View File
@@ -64,10 +64,13 @@ internal static class ReplaceToTableExt
continue; continue;
// Извлекаем свойства шрифта для передачи в TableBuilder // Извлекаем свойства шрифта для передачи в TableBuilder
baseFont ??= ExtractFontPropsFromParagraph(paragraph, oldValue); var fontProps = ExtractFontPropsFromParagraph(paragraph, oldValue);
if (fontProps is { } props)
props.Override(baseFont);
// Заменяем параграф на таблицу // Заменяем параграф на таблицу
ReplaceWithTableBuilder(paragraph, buildTable, baseFont); ReplaceWithTableBuilder(paragraph, buildTable, fontProps);
} }
} }