From 458436c4c3cc618e0445880742d96cbb8ccabd60 Mon Sep 17 00:00:00 2001 From: melekhin Date: Tue, 1 Sep 2026 16:23:37 +0700 Subject: [PATCH] table font props override --- QWERTYkez.WordProcessor/Builders/FontProps.cs | 86 ++++++++++++------- QWERTYkez.WordProcessor/ReplaceToTableExt.cs | 7 +- 2 files changed, 58 insertions(+), 35 deletions(-) diff --git a/QWERTYkez.WordProcessor/Builders/FontProps.cs b/QWERTYkez.WordProcessor/Builders/FontProps.cs index 1d463ca..5fc1573 100644 --- a/QWERTYkez.WordProcessor/Builders/FontProps.cs +++ b/QWERTYkez.WordProcessor/Builders/FontProps.cs @@ -16,9 +16,9 @@ public record FontProps } 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; } @@ -34,23 +34,23 @@ public record FontProps if (!string.IsNullOrWhiteSpace(FontFamily)) list.Add(new RunFonts { Ascii = FontFamily, HighAnsi = FontFamily }); - if (_SizeD is not null) - list.Add(new FontSize { Val = _SizeD.Value.ToString() }); + if (_SizeD is { } sizeD) + list.Add(new FontSize { Val = sizeD.ToString() }); - if (IsBold) + if (IsBold is { } isBold && isBold) list.Add(new Bold()); - if (IsItalic) + if (IsItalic is { } isItalic && isItalic) list.Add(new Italic()); - if (Underline is not null) - list.Add(new Underline { Val = Underline }); + if (Underline is { } underline) + list.Add(new Underline { Val = underline }); if (!string.IsNullOrWhiteSpace(Color)) list.Add(new Color { Val = Color }); - if (SubSup is not null) - list.Add(new VerticalTextAlignment { Val = SubSup }); + if (SubSup is { } subsup) + list.Add(new VerticalTextAlignment { Val = subsup }); return list.Count > 0; } @@ -58,23 +58,23 @@ public record FontProps { list = []; - if (_SizeD is not null) - list.Add(new FontSize { Val = _SizeD.Value.ToString() }); + if (_SizeD is { } sizeD) + list.Add(new FontSize { Val = sizeD.ToString() }); - if (IsBold) + if (IsBold is { } isBold && isBold) list.Add(new Bold()); - if (IsItalic) + if (IsItalic is { } isItalic && isItalic) list.Add(new Italic()); - if (Underline is not null) - list.Add(new Underline { Val = Underline }); + if (Underline is { } underline) + list.Add(new Underline { Val = underline }); if (!string.IsNullOrWhiteSpace(Color)) list.Add(new Color { Val = Color }); - if (SubSup is not null) - list.Add(new VerticalTextAlignment { Val = SubSup }); + if (SubSup is { } subsup) + list.Add(new VerticalTextAlignment { Val = subsup }); return list.Count > 0; } @@ -85,17 +85,17 @@ public record FontProps if (!string.IsNullOrWhiteSpace(FontFamily)) list.Add(new RunFonts { Ascii = FontFamily, HighAnsi = FontFamily }); - if (_SizeD is not null) - list.Add(new FontSize { Val = _SizeD.Value.ToString() }); + if (_SizeD is { } sizeD) + list.Add(new FontSize { Val = sizeD.ToString() }); - if (IsBold) + if (IsBold is { } isBold && isBold) list.Add(new Bold()); - if (IsItalic) + if (IsItalic is { } isItalic && isItalic) list.Add(new Italic()); - if (Underline is not null) - list.Add(new Underline { Val = Underline }); + if (Underline is { } underline) + list.Add(new Underline { Val = underline }); if (!string.IsNullOrWhiteSpace(Color)) list.Add(new Color { Val = Color }); @@ -111,17 +111,17 @@ public record FontProps if (!string.IsNullOrWhiteSpace(FontFamily)) list.Add(new RunFonts { Ascii = FontFamily, HighAnsi = FontFamily }); - if (_SizeD is not null) - list.Add(new FontSize { Val = _SizeD.Value.ToString() }); + if (_SizeD is { } sizeD) + list.Add(new FontSize { Val = sizeD.ToString() }); - if (IsBold) + if (IsBold is { } isBold && isBold) list.Add(new Bold()); - if (IsItalic) + if (IsItalic is { } isItalic && isItalic) list.Add(new Italic()); - if (Underline is not null) - list.Add(new Underline { Val = Underline }); + if (Underline is { } underline) + list.Add(new Underline { Val = underline }); if (!string.IsNullOrWhiteSpace(Color)) list.Add(new Color { Val = Color }); @@ -136,9 +136,13 @@ public record FontProps list = []; // Для математики используем только элемент Style - if (IsBold) - list.Add(new MathStyle { Val = MathStyleValues.BoldItalic }); - else list.Add(new MathStyle { Val = MathStyleValues.Italic }); + if (IsBold is { } isBold && isBold) + list.Add(new MathStyle + { + Val = isBold + ? MathStyleValues.BoldItalic + : MathStyleValues.Italic + }); // Обычное начертание можно не добавлять, так как по умолчанию и так обычное // (но если нужно явно сбросить, можно добавить Style { Val = StyleValues.Plain }) @@ -159,4 +163,20 @@ public record FontProps public static FontProps WithColor(string 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, + }; + } } \ No newline at end of file diff --git a/QWERTYkez.WordProcessor/ReplaceToTableExt.cs b/QWERTYkez.WordProcessor/ReplaceToTableExt.cs index e8b9174..6a39ea8 100644 --- a/QWERTYkez.WordProcessor/ReplaceToTableExt.cs +++ b/QWERTYkez.WordProcessor/ReplaceToTableExt.cs @@ -64,10 +64,13 @@ internal static class ReplaceToTableExt continue; // Извлекаем свойства шрифта для передачи в 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); } }