From 282be475d568d694edfe64799999bcc1d0cfb416 Mon Sep 17 00:00:00 2001 From: melekhin Date: Mon, 15 Jun 2026 14:37:25 +0700 Subject: [PATCH] Formula Debug --- .../Builders/FormulaHelper.cs | 98 +++++++++---------- .../Builders/ParagraphBuilderBase.cs | 8 +- 2 files changed, 54 insertions(+), 52 deletions(-) diff --git a/QWERTYkez.WordProcessor/Builders/FormulaHelper.cs b/QWERTYkez.WordProcessor/Builders/FormulaHelper.cs index 494ec3f..9a5ee39 100644 --- a/QWERTYkez.WordProcessor/Builders/FormulaHelper.cs +++ b/QWERTYkez.WordProcessor/Builders/FormulaHelper.cs @@ -1,21 +1,21 @@ -using Base = DocumentFormat.OpenXml.Math.Base; -using ControlProperties = DocumentFormat.OpenXml.Math.ControlProperties; -using Degree = DocumentFormat.OpenXml.Math.Degree; -using Denominator = DocumentFormat.OpenXml.Math.Denominator; -using Fraction = DocumentFormat.OpenXml.Math.Fraction; -using FractionProperties = DocumentFormat.OpenXml.Math.FractionProperties; -using HideDegree = DocumentFormat.OpenXml.Math.HideDegree; +using MathBase = DocumentFormat.OpenXml.Math.Base; +using MathControlProperties = DocumentFormat.OpenXml.Math.ControlProperties; +using MathDegree = DocumentFormat.OpenXml.Math.Degree; +using MathDenominator = DocumentFormat.OpenXml.Math.Denominator; +using MathFraction = DocumentFormat.OpenXml.Math.Fraction; +using MathFractionProperties = DocumentFormat.OpenXml.Math.FractionProperties; +using MathHideDegree = DocumentFormat.OpenXml.Math.HideDegree; using MathRun = DocumentFormat.OpenXml.Math.Run; using MathRunProperties = DocumentFormat.OpenXml.Math.RunProperties; using MathText = DocumentFormat.OpenXml.Math.Text; -using Numerator = DocumentFormat.OpenXml.Math.Numerator; -using Radical = DocumentFormat.OpenXml.Math.Radical; -using RadicalProperties = DocumentFormat.OpenXml.Math.RadicalProperties; -using SubArgument = DocumentFormat.OpenXml.Math.SubArgument; -using Subscript = DocumentFormat.OpenXml.Math.Subscript; -using SubSuperscript = DocumentFormat.OpenXml.Math.SubSuperscript; -using SuperArgument = DocumentFormat.OpenXml.Math.SuperArgument; -using Superscript = DocumentFormat.OpenXml.Math.Superscript; +using MathNumerator = DocumentFormat.OpenXml.Math.Numerator; +using MathRadical = DocumentFormat.OpenXml.Math.Radical; +using MathRadicalProperties = DocumentFormat.OpenXml.Math.RadicalProperties; +using MathSubArgument = DocumentFormat.OpenXml.Math.SubArgument; +using MathSubscript = DocumentFormat.OpenXml.Math.Subscript; +using MathSubSuperscript = DocumentFormat.OpenXml.Math.SubSuperscript; +using MathSuperArgument = DocumentFormat.OpenXml.Math.SuperArgument; +using MathSuperscript = DocumentFormat.OpenXml.Math.Superscript; namespace QWERTYkez.WordProcessor; @@ -59,19 +59,19 @@ internal static class FormulaHelper } } - public static Fraction CreateFraction( + public static MathFraction CreateFraction( Action numeratorBuilder, Action denominatorBuilder, IFormula builder) { - var fraction = new Fraction(); + var fraction = new MathFraction(); var font = builder.BaseFont; // Добавляем свойства дроби с форматированием (для черты дроби) - var fPr = new FractionProperties(); + var fPr = new MathFractionProperties(); if (font.TryExtractWithoutFamily(out var wordElements)) { - var ctrlPr = new ControlProperties(); + var ctrlPr = new MathControlProperties(); var rPr = new RunProperties(); foreach (var elem in wordElements) rPr.AppendChild(elem.CloneNode(true)); @@ -82,14 +82,14 @@ internal static class FormulaHelper fraction.AppendChild(fPr); // Числитель - var numeratorElem = new Numerator(); + var numeratorElem = new MathNumerator(); fraction.AppendChild(numeratorElem); builder.PushContext(numeratorElem); numeratorBuilder(builder); builder.PopContext(); // Знаменатель - var denominatorElem = new Denominator(); + var denominatorElem = new MathDenominator(); fraction.AppendChild(denominatorElem); builder.PushContext(denominatorElem); denominatorBuilder(builder); @@ -98,20 +98,20 @@ internal static class FormulaHelper return fraction; } - public static Radical CreateRadical( + public static MathRadical CreateRadical( Action radicandBuilder, Action? degreeBuilder, IFormula builder) { - var radical = new Radical(); + var radical = new MathRadical(); var font = builder.BaseFont; - var radPr = new RadicalProperties(); + var radPr = new MathRadicalProperties(); // Цвет, размер и подчёркивание для знака корня (ControlProperties) if (font is not null && font.TryExtractWithoutFamily(out var wordElements)) { - var ctrlPr = new ControlProperties(); + var ctrlPr = new MathControlProperties(); var rPr = new RunProperties(); foreach (var elem in wordElements) rPr.AppendChild(elem.CloneNode(true)); @@ -123,7 +123,7 @@ internal static class FormulaHelper // Если степень не задана, скрываем её if (degreeBuilder is null) { - radPr.HideDegree = new HideDegree { Val = DocumentFormat.OpenXml.Math.BooleanValues.One }; + radPr.HideDegree = new MathHideDegree { Val = DocumentFormat.OpenXml.Math.BooleanValues.One }; } // Добавляем свойства радикала (с цветом) @@ -132,7 +132,7 @@ internal static class FormulaHelper // Степень (если есть) if (degreeBuilder is not null) { - var degree = new Degree(); + var degree = new MathDegree(); radical.AppendChild(degree); builder.PushContext(degree); degreeBuilder(builder); @@ -140,7 +140,7 @@ internal static class FormulaHelper } // Подкоренное выражение - var radicand = new Base(); + var radicand = new MathBase(); radical.AppendChild(radicand); builder.PushContext(radicand); radicandBuilder(builder); @@ -179,10 +179,10 @@ internal static class FormulaHelper } else { - var integralWithLimits = new SubSuperscript(); + var integralWithLimits = new MathSubSuperscript(); currentContext.AppendChild(integralWithLimits); - var baseElem = new Base(); + var baseElem = new MathBase(); var integralRun = CreateMathRun(font); integralRun.AppendChild(new MathText("∫")); baseElem.AppendChild(integralRun); @@ -190,7 +190,7 @@ internal static class FormulaHelper if (lowerLimitBuilder is not null) { - var subArg = new SubArgument(); + var subArg = new MathSubArgument(); integralWithLimits.AppendChild(subArg); builder.PushContext(subArg); lowerLimitBuilder(builder); @@ -198,7 +198,7 @@ internal static class FormulaHelper } if (upperLimitBuilder is not null) { - var superArg = new SuperArgument(); + var superArg = new MathSuperArgument(); integralWithLimits.AppendChild(superArg); builder.PushContext(superArg); upperLimitBuilder(builder); @@ -242,10 +242,10 @@ internal static class FormulaHelper } else { - var sumWithLimits = new SubSuperscript(); + var sumWithLimits = new MathSubSuperscript(); currentContext.AppendChild(sumWithLimits); - var baseElem = new Base(); + var baseElem = new MathBase(); var sumRun = CreateMathRun(font); sumRun.AppendChild(new MathText("∑")); baseElem.AppendChild(sumRun); @@ -253,7 +253,7 @@ internal static class FormulaHelper if (lowerLimitBuilder is not null) { - var subArg = new SubArgument(); + var subArg = new MathSubArgument(); sumWithLimits.AppendChild(subArg); builder.PushContext(subArg); lowerLimitBuilder(builder); @@ -261,7 +261,7 @@ internal static class FormulaHelper } if (upperLimitBuilder is not null) { - var superArg = new SuperArgument(); + var superArg = new MathSuperArgument(); sumWithLimits.AppendChild(superArg); builder.PushContext(superArg); upperLimitBuilder(builder); @@ -278,22 +278,22 @@ internal static class FormulaHelper /// Создаёт степень. - public static Superscript CreateSuperscript( + public static MathSuperscript CreateSuperscript( Action baseBuilder, Action supBuilder, IFormula builder) { - var superscript = new Superscript(); + var superscript = new MathSuperscript(); // Основание - var baseElem = new Base(); + var baseElem = new MathBase(); superscript.AppendChild(baseElem); builder.PushContext(baseElem); baseBuilder(builder); builder.PopContext(); // Показатель - var superArg = new SuperArgument(); + var superArg = new MathSuperArgument(); superscript.AppendChild(superArg); builder.PushContext(superArg); supBuilder(builder); @@ -303,20 +303,20 @@ internal static class FormulaHelper } /// Создаёт нижний индекс. - public static Subscript CreateSubscript( + public static MathSubscript CreateSubscript( Action baseBuilder, Action subBuilder, IFormula builder) { - var subscript = new Subscript(); + var subscript = new MathSubscript(); - var baseElem = new Base(); + var baseElem = new MathBase(); subscript.AppendChild(baseElem); builder.PushContext(baseElem); baseBuilder(builder); builder.PopContext(); - var subArg = new SubArgument(); + var subArg = new MathSubArgument(); subscript.AppendChild(subArg); builder.PushContext(subArg); subBuilder(builder); @@ -326,27 +326,27 @@ internal static class FormulaHelper } /// Создаёт одновременные нижний и верхний индексы. - public static SubSuperscript CreateSubSuperscript( + public static MathSubSuperscript CreateSubSuperscript( Action baseBuilder, Action subBuilder, Action supBuilder, IFormula builder) { - var subSup = new SubSuperscript(); + var subSup = new MathSubSuperscript(); - var baseElem = new Base(); + var baseElem = new MathBase(); subSup.AppendChild(baseElem); builder.PushContext(baseElem); baseBuilder(builder); builder.PopContext(); - var subArg = new SubArgument(); + var subArg = new MathSubArgument(); subSup.AppendChild(subArg); builder.PushContext(subArg); subBuilder(builder); builder.PopContext(); - var superArg = new SuperArgument(); + var superArg = new MathSuperArgument(); subSup.AppendChild(superArg); builder.PushContext(superArg); supBuilder(builder); diff --git a/QWERTYkez.WordProcessor/Builders/ParagraphBuilderBase.cs b/QWERTYkez.WordProcessor/Builders/ParagraphBuilderBase.cs index c002def..edc5773 100644 --- a/QWERTYkez.WordProcessor/Builders/ParagraphBuilderBase.cs +++ b/QWERTYkez.WordProcessor/Builders/ParagraphBuilderBase.cs @@ -1,4 +1,6 @@ -namespace QWERTYkez.WordProcessor; +using MathOfficeMath = DocumentFormat.OpenXml.Math.OfficeMath; + +namespace QWERTYkez.WordProcessor; abstract class ParagraphBuilderBase : IParagraph, IFormula { @@ -176,7 +178,7 @@ abstract class ParagraphBuilderBase : IParagraph, IFormula // Метод AddFormula для IParagraphBuilder IParagraph IParagraph.AddFormula(Action configure) { - var math = new OfficeMath(); + var math = new MathOfficeMath(); try { _mathContextStack.Push(math); @@ -196,7 +198,7 @@ abstract class ParagraphBuilderBase : IParagraph, IFormula // Метод AddFormula для IParagraphBuilder IParagraph IParagraph.AddFormulaBreak(Action configure) { - var math = new OfficeMath(); + var math = new MathOfficeMath(); try { _mathContextStack.Push(math);