@@ -1,21 +1,21 @@
using Base = DocumentFormat . OpenXml . Math . Base ;
using Math Base = DocumentFormat . OpenXml . Math . Base ;
using ControlProperties = DocumentFormat . OpenXml . Math . ControlProperties ;
using Math ControlProperties = DocumentFormat . OpenXml . Math . ControlProperties ;
using Degree = DocumentFormat . OpenXml . Math . Degree ;
using Math Degree = DocumentFormat . OpenXml . Math . Degree ;
using Denominator = DocumentFormat . OpenXml . Math . Denominator ;
using Math Denominator = DocumentFormat . OpenXml . Math . Denominator ;
using Fraction = DocumentFormat . OpenXml . Math . Fraction ;
using Math Fraction = DocumentFormat . OpenXml . Math . Fraction ;
using FractionProperties = DocumentFormat . OpenXml . Math . FractionProperties ;
using Math FractionProperties = DocumentFormat . OpenXml . Math . FractionProperties ;
using HideDegree = DocumentFormat . OpenXml . Math . HideDegree ;
using Math HideDegree = DocumentFormat . OpenXml . Math . HideDegree ;
using MathRun = DocumentFormat . OpenXml . Math . Run ;
using MathRun = DocumentFormat . OpenXml . Math . Run ;
using MathRunProperties = DocumentFormat . OpenXml . Math . RunProperties ;
using MathRunProperties = DocumentFormat . OpenXml . Math . RunProperties ;
using MathText = DocumentFormat . OpenXml . Math . Text ;
using MathText = DocumentFormat . OpenXml . Math . Text ;
using Numerator = DocumentFormat . OpenXml . Math . Numerator ;
using Math Numerator = DocumentFormat . OpenXml . Math . Numerator ;
using Radical = DocumentFormat . OpenXml . Math . Radical ;
using Math Radical = DocumentFormat . OpenXml . Math . Radical ;
using RadicalProperties = DocumentFormat . OpenXml . Math . RadicalProperties ;
using Math RadicalProperties = DocumentFormat . OpenXml . Math . RadicalProperties ;
using SubArgument = DocumentFormat . OpenXml . Math . SubArgument ;
using Math SubArgument = DocumentFormat . OpenXml . Math . SubArgument ;
using Subscript = DocumentFormat . OpenXml . Math . Subscript ;
using Math Subscript = DocumentFormat . OpenXml . Math . Subscript ;
using SubSuperscript = DocumentFormat . OpenXml . Math . SubSuperscript ;
using Math SubSuperscript = DocumentFormat . OpenXml . Math . SubSuperscript ;
using SuperArgument = DocumentFormat . OpenXml . Math . SuperArgument ;
using Math SuperArgument = DocumentFormat . OpenXml . Math . SuperArgument ;
using Superscript = DocumentFormat . OpenXml . Math . Superscript ;
using Math Superscript = DocumentFormat . OpenXml . Math . Superscript ;
namespace QWERTYkez.WordProcessor ;
namespace QWERTYkez.WordProcessor ;
@@ -59,19 +59,19 @@ internal static class FormulaHelper
}
}
}
}
public static Fraction CreateFraction (
public static Math Fraction CreateFraction (
Action < IFormula > numeratorBuilder ,
Action < IFormula > numeratorBuilder ,
Action < IFormula > denominatorBuilder ,
Action < IFormula > denominatorBuilder ,
IFormula builder )
IFormula builder )
{
{
var fraction = new Fraction ( ) ;
var fraction = new Math Fraction( ) ;
var font = builder . BaseFont ;
var font = builder . BaseFont ;
// Добавляем свойства дроби с форматированием (для черты дроби)
// Добавляем свойства дроби с форматированием (для черты дроби)
var fPr = new FractionProperties ( ) ;
var fPr = new Math FractionProperties( ) ;
if ( font . TryExtractWithoutFamily ( out var wordElements ) )
if ( font . TryExtractWithoutFamily ( out var wordElements ) )
{
{
var ctrlPr = new ControlProperties ( ) ;
var ctrlPr = new Math ControlProperties( ) ;
var rPr = new RunProperties ( ) ;
var rPr = new RunProperties ( ) ;
foreach ( var elem in wordElements )
foreach ( var elem in wordElements )
rPr . AppendChild ( elem . CloneNode ( true ) ) ;
rPr . AppendChild ( elem . CloneNode ( true ) ) ;
@@ -82,14 +82,14 @@ internal static class FormulaHelper
fraction . AppendChild ( fPr ) ;
fraction . AppendChild ( fPr ) ;
// Числитель
// Числитель
var numeratorElem = new Numerator ( ) ;
var numeratorElem = new Math Numerator( ) ;
fraction . AppendChild ( numeratorElem ) ;
fraction . AppendChild ( numeratorElem ) ;
builder . PushContext ( numeratorElem ) ;
builder . PushContext ( numeratorElem ) ;
numeratorBuilder ( builder ) ;
numeratorBuilder ( builder ) ;
builder . PopContext ( ) ;
builder . PopContext ( ) ;
// Знаменатель
// Знаменатель
var denominatorElem = new Denominator ( ) ;
var denominatorElem = new Math Denominator( ) ;
fraction . AppendChild ( denominatorElem ) ;
fraction . AppendChild ( denominatorElem ) ;
builder . PushContext ( denominatorElem ) ;
builder . PushContext ( denominatorElem ) ;
denominatorBuilder ( builder ) ;
denominatorBuilder ( builder ) ;
@@ -98,20 +98,20 @@ internal static class FormulaHelper
return fraction ;
return fraction ;
}
}
public static Radical CreateRadical (
public static Math Radical CreateRadical (
Action < IFormula > radicandBuilder ,
Action < IFormula > radicandBuilder ,
Action < IFormula > ? degreeBuilder ,
Action < IFormula > ? degreeBuilder ,
IFormula builder )
IFormula builder )
{
{
var radical = new Radical ( ) ;
var radical = new Math Radical( ) ;
var font = builder . BaseFont ;
var font = builder . BaseFont ;
var radPr = new RadicalProperties ( ) ;
var radPr = new Math RadicalProperties( ) ;
// Цвет, размер и подчёркивание для знака корня (ControlProperties)
// Цвет, размер и подчёркивание для знака корня (ControlProperties)
if ( font is not null & & font . TryExtractWithoutFamily ( out var wordElements ) )
if ( font is not null & & font . TryExtractWithoutFamily ( out var wordElements ) )
{
{
var ctrlPr = new ControlProperties ( ) ;
var ctrlPr = new Math ControlProperties( ) ;
var rPr = new RunProperties ( ) ;
var rPr = new RunProperties ( ) ;
foreach ( var elem in wordElements )
foreach ( var elem in wordElements )
rPr . AppendChild ( elem . CloneNode ( true ) ) ;
rPr . AppendChild ( elem . CloneNode ( true ) ) ;
@@ -123,7 +123,7 @@ internal static class FormulaHelper
// Если степень не задана, скрываем её
// Если степень не задана, скрываем её
if ( degreeBuilder is null )
if ( degreeBuilder is null )
{
{
radPr . HideDegree = new HideDegree { Val = DocumentFormat . OpenXml . Math . BooleanValues . One } ;
radPr . HideDegree = new Math HideDegree { Val = DocumentFormat . OpenXml . Math . BooleanValues . One } ;
}
}
// Добавляем свойства радикала (с цветом)
// Добавляем свойства радикала (с цветом)
@@ -132,7 +132,7 @@ internal static class FormulaHelper
// Степень (если есть)
// Степень (если есть)
if ( degreeBuilder is not null )
if ( degreeBuilder is not null )
{
{
var degree = new Degree ( ) ;
var degree = new Math Degree( ) ;
radical . AppendChild ( degree ) ;
radical . AppendChild ( degree ) ;
builder . PushContext ( degree ) ;
builder . PushContext ( degree ) ;
degreeBuilder ( builder ) ;
degreeBuilder ( builder ) ;
@@ -140,7 +140,7 @@ internal static class FormulaHelper
}
}
// Подкоренное выражение
// Подкоренное выражение
var radicand = new Base ( ) ;
var radicand = new Math Base( ) ;
radical . AppendChild ( radicand ) ;
radical . AppendChild ( radicand ) ;
builder . PushContext ( radicand ) ;
builder . PushContext ( radicand ) ;
radicandBuilder ( builder ) ;
radicandBuilder ( builder ) ;
@@ -179,10 +179,10 @@ internal static class FormulaHelper
}
}
else
else
{
{
var integralWithLimits = new SubSuperscript ( ) ;
var integralWithLimits = new Math SubSuperscript( ) ;
currentContext . AppendChild ( integralWithLimits ) ;
currentContext . AppendChild ( integralWithLimits ) ;
var baseElem = new Base ( ) ;
var baseElem = new Math Base( ) ;
var integralRun = CreateMathRun ( font ) ;
var integralRun = CreateMathRun ( font ) ;
integralRun . AppendChild ( new MathText ( "∫" ) ) ;
integralRun . AppendChild ( new MathText ( "∫" ) ) ;
baseElem . AppendChild ( integralRun ) ;
baseElem . AppendChild ( integralRun ) ;
@@ -190,7 +190,7 @@ internal static class FormulaHelper
if ( lowerLimitBuilder is not null )
if ( lowerLimitBuilder is not null )
{
{
var subArg = new SubArgument ( ) ;
var subArg = new Math SubArgument( ) ;
integralWithLimits . AppendChild ( subArg ) ;
integralWithLimits . AppendChild ( subArg ) ;
builder . PushContext ( subArg ) ;
builder . PushContext ( subArg ) ;
lowerLimitBuilder ( builder ) ;
lowerLimitBuilder ( builder ) ;
@@ -198,7 +198,7 @@ internal static class FormulaHelper
}
}
if ( upperLimitBuilder is not null )
if ( upperLimitBuilder is not null )
{
{
var superArg = new SuperArgument ( ) ;
var superArg = new Math SuperArgument( ) ;
integralWithLimits . AppendChild ( superArg ) ;
integralWithLimits . AppendChild ( superArg ) ;
builder . PushContext ( superArg ) ;
builder . PushContext ( superArg ) ;
upperLimitBuilder ( builder ) ;
upperLimitBuilder ( builder ) ;
@@ -242,10 +242,10 @@ internal static class FormulaHelper
}
}
else
else
{
{
var sumWithLimits = new SubSuperscript ( ) ;
var sumWithLimits = new Math SubSuperscript( ) ;
currentContext . AppendChild ( sumWithLimits ) ;
currentContext . AppendChild ( sumWithLimits ) ;
var baseElem = new Base ( ) ;
var baseElem = new Math Base( ) ;
var sumRun = CreateMathRun ( font ) ;
var sumRun = CreateMathRun ( font ) ;
sumRun . AppendChild ( new MathText ( "∑" ) ) ;
sumRun . AppendChild ( new MathText ( "∑" ) ) ;
baseElem . AppendChild ( sumRun ) ;
baseElem . AppendChild ( sumRun ) ;
@@ -253,7 +253,7 @@ internal static class FormulaHelper
if ( lowerLimitBuilder is not null )
if ( lowerLimitBuilder is not null )
{
{
var subArg = new SubArgument ( ) ;
var subArg = new Math SubArgument( ) ;
sumWithLimits . AppendChild ( subArg ) ;
sumWithLimits . AppendChild ( subArg ) ;
builder . PushContext ( subArg ) ;
builder . PushContext ( subArg ) ;
lowerLimitBuilder ( builder ) ;
lowerLimitBuilder ( builder ) ;
@@ -261,7 +261,7 @@ internal static class FormulaHelper
}
}
if ( upperLimitBuilder is not null )
if ( upperLimitBuilder is not null )
{
{
var superArg = new SuperArgument ( ) ;
var superArg = new Math SuperArgument( ) ;
sumWithLimits . AppendChild ( superArg ) ;
sumWithLimits . AppendChild ( superArg ) ;
builder . PushContext ( superArg ) ;
builder . PushContext ( superArg ) ;
upperLimitBuilder ( builder ) ;
upperLimitBuilder ( builder ) ;
@@ -278,22 +278,22 @@ internal static class FormulaHelper
/// <summary>Создаёт степень.</summary>
/// <summary>Создаёт степень.</summary>
public static Superscript CreateSuperscript (
public static Math Superscript CreateSuperscript (
Action < IFormula > baseBuilder ,
Action < IFormula > baseBuilder ,
Action < IFormula > supBuilder ,
Action < IFormula > supBuilder ,
IFormula builder )
IFormula builder )
{
{
var superscript = new Superscript ( ) ;
var superscript = new Math Superscript( ) ;
// Основание
// Основание
var baseElem = new Base ( ) ;
var baseElem = new Math Base( ) ;
superscript . AppendChild ( baseElem ) ;
superscript . AppendChild ( baseElem ) ;
builder . PushContext ( baseElem ) ;
builder . PushContext ( baseElem ) ;
baseBuilder ( builder ) ;
baseBuilder ( builder ) ;
builder . PopContext ( ) ;
builder . PopContext ( ) ;
// Показатель
// Показатель
var superArg = new SuperArgument ( ) ;
var superArg = new Math SuperArgument( ) ;
superscript . AppendChild ( superArg ) ;
superscript . AppendChild ( superArg ) ;
builder . PushContext ( superArg ) ;
builder . PushContext ( superArg ) ;
supBuilder ( builder ) ;
supBuilder ( builder ) ;
@@ -303,20 +303,20 @@ internal static class FormulaHelper
}
}
/// <summary>Создаёт нижний индекс.</summary>
/// <summary>Создаёт нижний индекс.</summary>
public static Subscript CreateSubscript (
public static Math Subscript CreateSubscript (
Action < IFormula > baseBuilder ,
Action < IFormula > baseBuilder ,
Action < IFormula > subBuilder ,
Action < IFormula > subBuilder ,
IFormula builder )
IFormula builder )
{
{
var subscript = new Subscript ( ) ;
var subscript = new Math Subscript( ) ;
var baseElem = new Base ( ) ;
var baseElem = new Math Base( ) ;
subscript . AppendChild ( baseElem ) ;
subscript . AppendChild ( baseElem ) ;
builder . PushContext ( baseElem ) ;
builder . PushContext ( baseElem ) ;
baseBuilder ( builder ) ;
baseBuilder ( builder ) ;
builder . PopContext ( ) ;
builder . PopContext ( ) ;
var subArg = new SubArgument ( ) ;
var subArg = new Math SubArgument( ) ;
subscript . AppendChild ( subArg ) ;
subscript . AppendChild ( subArg ) ;
builder . PushContext ( subArg ) ;
builder . PushContext ( subArg ) ;
subBuilder ( builder ) ;
subBuilder ( builder ) ;
@@ -326,27 +326,27 @@ internal static class FormulaHelper
}
}
/// <summary>Создаёт одновременные нижний и верхний индексы.</summary>
/// <summary>Создаёт одновременные нижний и верхний индексы.</summary>
public static SubSuperscript CreateSubSuperscript (
public static Math SubSuperscript CreateSubSuperscript (
Action < IFormula > baseBuilder ,
Action < IFormula > baseBuilder ,
Action < IFormula > subBuilder ,
Action < IFormula > subBuilder ,
Action < IFormula > supBuilder ,
Action < IFormula > supBuilder ,
IFormula builder )
IFormula builder )
{
{
var subSup = new SubSuperscript ( ) ;
var subSup = new Math SubSuperscript( ) ;
var baseElem = new Base ( ) ;
var baseElem = new Math Base( ) ;
subSup . AppendChild ( baseElem ) ;
subSup . AppendChild ( baseElem ) ;
builder . PushContext ( baseElem ) ;
builder . PushContext ( baseElem ) ;
baseBuilder ( builder ) ;
baseBuilder ( builder ) ;
builder . PopContext ( ) ;
builder . PopContext ( ) ;
var subArg = new SubArgument ( ) ;
var subArg = new Math SubArgument( ) ;
subSup . AppendChild ( subArg ) ;
subSup . AppendChild ( subArg ) ;
builder . PushContext ( subArg ) ;
builder . PushContext ( subArg ) ;
subBuilder ( builder ) ;
subBuilder ( builder ) ;
builder . PopContext ( ) ;
builder . PopContext ( ) ;
var superArg = new SuperArgument ( ) ;
var superArg = new Math SuperArgument( ) ;
subSup . AppendChild ( superArg ) ;
subSup . AppendChild ( superArg ) ;
builder . PushContext ( superArg ) ;
builder . PushContext ( superArg ) ;
supBuilder ( builder ) ;
supBuilder ( builder ) ;