Files
Yajbir Singh f1b860b25c
check / markdownlint (push) Has been cancelled
check / spellchecker (push) Has been cancelled
updated
2025-12-11 19:03:17 +05:30

3490 lines
98 KiB
JavaScript

/*
* (c) Copyright Ascensio System SIA 2010-2024
*
* This program is a free software product. You can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License (AGPL)
* version 3 as published by the Free Software Foundation. In accordance with
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
* that Ascensio System SIA expressly excludes the warranty of non-infringement
* of any third-party rights.
*
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
*
* You can contact Ascensio System SIA at 20A-6 Ernesta Birznieka-Upish
* street, Riga, Latvia, EU, LV-1050.
*
* The interactive user interfaces in modified source and object code versions
* of the Program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU AGPL version 3.
*
* Pursuant to Section 7(b) of the License you must retain the original Product
* logo when distributing the program. Pursuant to Section 7(e) we decline to
* grant you any rights under trademark law for use of our trademarks.
*
* All the Product's GUI elements, including illustrations and icon sets, as
* well as technical writing content are licensed under the terms of the
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
*
*/
"use strict";
// Import
var g_oTextMeasurer = AscCommon.g_oTextMeasurer;
var c_oAscRevisionsChangeType = Asc.c_oAscRevisionsChangeType;
/** @enum {number} */
var c_oAscMathInterfaceMatrixRowRule = {
Single : 0x00,
OneAndHalf : 0x01,
Double : 0x02,
Exactly : 0x03,
Multiple : 0x04
};
/** @enum {number} */
var c_oAscMathInterfaceMatrixColumnRule = {
Single : 0x00,
OneAndHalf : 0x01,
Double : 0x02,
Exactly : 0x03,
Multiple : 0x04
};
/** @enum {number} */
var c_oAscMathInterfaceEqArrayLineRule = {
Single : 0x00,
OneAndHalf : 0x01,
Double : 0x02,
Exactly : 0x03,
Multiple : 0x04
};
/** @enum {number} */
var c_oAscMathInterfaceSettingsBrkBin = {
BreakRepeat : 0x00,
BreakBefore : 0x01,
BreakAfter : 0x02
};
/** @enum {number} */
var c_oAscMathInterfaceSettingsAlign = {
Left : 0,
Center : 1,
Right : 2,
Justify : 3
};
/** @enum {number} */
var c_oAscMathMainType = {
Symbol : 0x00,
Fraction : 0x01,
Script : 0x02,
Radical : 0x03,
Integral : 0x04,
LargeOperator : 0x05,
Bracket : 0x06,
Function : 0x07,
Accent : 0x08,
LimitLog : 0x09,
Operator : 0x0a,
Matrix : 0x0b,
Empty_Content : 0x0c
};
/**
*
* @param bInside
* @returns {CMathBase}
* @constructor
* @extends {CParagraphContentWithParagraphLikeContent}
*/
function CMathBase(bInside)
{
CParagraphContentWithParagraphLikeContent.call(this);
this.Type = para_Math_Composition;
this.pos = new CMathPosition();
this.size = new CMathSize();
// Properties
this.Parent = null;
this.ParaMath = null; // ссылка на общую формулу
this.CtrPrp = new CTextPr();
this.CompiledCtrPrp = new CTextPr();
this.TextPrControlLetter = new CTextPr();
this.ArgSize = new CMathArgSize();
/////////////////
this.nRow = 0;
this.nCol = 0;
this.bInside = bInside === true;
this.bOneLine = true;
this.bCanBreak = false;
this.NumBreakContent = -1;
this.elements = [];
this.Bounds = new CMathBounds();
this.dW = 0; //column gap, gap width
this.dH = 0; //row gap, gap height
this.alignment =
{
hgt: null,
wdt: null
};
this.GapLeft = 0;
this.GapRight = 0;
this.BrGapLeft = 0;
this.BrGapRight = 0;
this.RecalcInfo =
{
bCtrPrp: true,
bProps: true
};
this.Content = [];
this.CurPos = 0;
this.Selection =
{
StartPos : 0,
EndPos : 0,
Use : false
};
this.NearPosArray = [];
this.ReviewType = reviewtype_Common;
this.ReviewInfo = new AscWord.ReviewInfo();
var Api = editor;
if (Api && !Api.isPresentationEditor && Api.WordControl && Api.WordControl.m_oLogicDocument && true === Api.WordControl.m_oLogicDocument.IsTrackRevisions())
{
this.ReviewType = reviewtype_Add;
this.ReviewInfo.Update();
}
this.m_oContentChanges = new AscCommon.CContentChanges(); // список изменений(добавление/удаление элементов)
return this;
}
CMathBase.prototype = Object.create(CParagraphContentWithParagraphLikeContent.prototype);
CMathBase.prototype.constructor = CMathBase;
CMathBase.prototype.setContent = function()
{
for(var i=0; i < this.nRow; i++)
{
this.elements[i] = [];
for(var j = 0; j < this.nCol; j++)
this.elements[i][j] = new CMathContent();
}
};
CMathBase.prototype.setDimension = function(countRow, countCol)
{
this.nRow = countRow;
this.nCol = countCol;
this.alignment.hgt = [];
this.alignment.wdt = [];
for(var i = 0; i < this.nCol ; i++)
{
this.alignment.wdt[i] = MCJC_CENTER;
}
for(var j=0; j < this.nRow; j++)
{
this.elements[j] = [];
this.alignment.hgt[j] = MCJC_CENTER;
}
};
CMathBase.prototype.SetParent = function(parent)
{
this.Parent = parent;
};
CMathBase.prototype.NeedBreakContent = function(Number)
{
this.bCanBreak = true;
this.NumBreakContent = Number;
};
///////// RunPrp, CtrPrp
CMathBase.prototype.setCtrPrp = function(txtPrp) // выставляем ctrPrp на чтение
{
if(txtPrp !== null && typeof(txtPrp) !== "undefined")
{
this.CtrPrp.Merge(txtPrp);
}
};
CMathBase.prototype.Get_CtrPrp = function(bCopy)
{
var CtrPrp;
if(this.bInside === true)
CtrPrp = this.Parent.Get_CtrPrp(bCopy);
else
CtrPrp = bCopy ? this.CtrPrp.Copy() : this.CtrPrp;
return CtrPrp;
};
CMathBase.prototype.Get_CompiledCtrPrp = function(bAllowInline)
{
this.Set_CompiledCtrPrp(this.Parent, this.ParaMath);
var CompiledCtrPrp;
if(this.bInside === true)
{
CompiledCtrPrp = this.Parent.Get_CompiledCtrPrp();
}
else
{
CompiledCtrPrp = this.Get_CompiledCtrPrp_2();
if(bAllowInline !== false && this.ParaMath)
CompiledCtrPrp.FontSize *= MatGetKoeffArgSize(CompiledCtrPrp.FontSize, this.Parent.Get_CompiledArgSize().value);
}
if(bAllowInline !== false && this.ParaMath)
CompiledCtrPrp.FontSize *= MatGetKoeffArgSize(CompiledCtrPrp.FontSize, this.ArgSize.value);// для настроек inline формул
return CompiledCtrPrp;
};
CMathBase.prototype.Get_CompiledCtrPrp_2 = function() // without arg Size
{
this.Set_CompiledCtrPrp(this.Parent, this.ParaMath);
var CompiledCtrPrp;
if(this.bInside === true)
CompiledCtrPrp = this.Parent.Get_CompiledCtrPrp_2();
else
CompiledCtrPrp = this.CompiledCtrPrp.Copy();
return CompiledCtrPrp;
};
CMathBase.prototype.Get_CompiledArgSize = function()
{
return this.Parent.Get_CompiledArgSize();
};
CMathBase.prototype.Get_TxtPrControlLetter = function(RPI) // TextPrControlLetter не копируются !
{
this.Set_CompiledCtrPrp(this.Parent, this.ParaMath, RPI);
return this.TextPrControlLetter;
};
CMathBase.prototype.SetPlaceholder = function()
{
for (var i = 0; i < this.nRow; i++)
{
for (var j = 0; j < this.nCol; j++)
{
if (!this.elements[i][j].IsJustDraw())
this.elements[i][j].SetPlaceholder();
}
}
};
CMathBase.prototype.CheckRunContent = function(fCheck)
{
for(var i = 0; i < this.Content.length; ++i)
{
this.Content[i].CheckRunContent(fCheck);
}
};
CMathBase.prototype.addMCToContent = function(elements)
{
if(elements.length == this.nRow*this.nCol)
{
this.elements.length = 0;
for(var i = 0; i < this.nRow; i++)
{
this.elements[i] = [];
for(var j = 0; j < this.nCol; j++)
this.elements[i][j] = elements[j + i*this.nCol];
}
}
else
this.setContent();
};
// эта функция здесь необходима для случая с n-арными операторами : когда передаем n-арный оператор с итераторами и аргумент
CMathBase.prototype.IsJustDraw = function()
{
return false;
};
CMathBase.prototype.IsAccent = function()
{
return false;
};
CMathBase.prototype.IsEqArray = function()
{
return false;
};
CMathBase.prototype.getWidthsHeights = function()
{
var Widths = [];
for(var tt = 0; tt < this.nCol; tt++ )
Widths[tt] = 0;
var Ascents = [];
var Descents = [];
for(tt = 0; tt < this.nRow; tt++ )
{
Ascents[tt] = 0;
Descents[tt] = 0;
}
for(var i=0; i < this.nRow; i++)
for(var j = 0; j < this.nCol ; j++)
{
var size = this.elements[i][j].size;
Widths[j] = ( Widths[j] > size.width ) ? Widths[j] : size.width;
Ascents[i] = (Ascents[i] > size.ascent ) ? Ascents[i] : size.ascent;
Descents[i] = (Descents[i] > size.height - size.ascent ) ? Descents[i] : size.height - size.ascent;
}
var Heights = [];
for(tt = 0; tt < this.nRow; tt++ )
{
Heights[tt] = Ascents[tt] + Descents[tt];
}
return { widths: Widths, heights: Heights };
};
CMathBase.prototype.align = function(pos_x, pos_y)
{
var PosAlign = new CMathPosition();
if(this.alignment.hgt[pos_x] == MCJC_CENTER)
{
var maxAsc = 0;
for(var j = 0; j < this.nCol; j++)
{
var _ascent = this.elements[pos_x][j].size.ascent;
maxAsc = ( maxAsc > _ascent ) ? maxAsc : _ascent;
}
PosAlign.y = maxAsc - this.elements[pos_x][pos_y].size.ascent;
}
else if(this.alignment.hgt[pos_x] == MCJC_LEFT)
{
PosAlign.y = 0;
}
else // MCJC_RIGHT
{
var maxH = 0;
for(var j = 0; j < this.nCol; j++)
{
var _h = this.elements[pos_x][j].size.height;
maxH = ( maxH > _h ) ? maxH : _h;
}
PosAlign.y = maxH - this.elements[pos_x][pos_y].size.height;
}
var maxW = 0;
for(var i=0; i < this.nRow; i++)
{
var _w = this.elements[i][pos_y].size.width;
maxW = ( maxW > _w ) ? maxW : _w;
}
if(this.alignment.wdt[pos_y] == MCJC_CENTER)
PosAlign.x = (maxW - this.elements[pos_x][pos_y].size.width)*0.5;
else if(this.alignment.wdt[pos_y] == MCJC_LEFT)
PosAlign.x = 0;
else // MCJC_RIGHT
PosAlign.x = maxW - this.elements[pos_x][pos_y].size.width;
return PosAlign;
};
CMathBase.prototype.setPosition = function(pos, PosInfo)
{
this.UpdatePosBound(pos, PosInfo);
if(this.bOneLine)
{
this.pos.x = pos.x;
if(this.bInside === true)
this.pos.y = pos.y;
else
this.pos.y = pos.y - this.size.ascent; ///!!!!
var maxWH = this.getWidthsHeights();
var Widths = maxWH.widths;
var Heights = maxWH.heights;
var h = 0, w = 0;
for(var i=0; i < this.nRow; i++)
{
w = 0;
for(var j = 0; j < this.nCol; j++)
{
var NewPos = new CMathPosition();
var al = this.align(i, j);
NewPos.x = this.pos.x + this.GapLeft + al.x + this.dW*j + w;
NewPos.y = this.pos.y + al.y + this.dH*i + h;
if(this.elements[i][j].Type == para_Math_Content) // прибавим ascent только для контентов, для вложенных мат объектов не добавляем !
NewPos.y += this.elements[i][j].size.ascent;
this.elements[i][j].setPosition(NewPos, PosInfo);
w += Widths[j];
}
h += Heights[i];
}
pos.x += this.size.width;
}
else
{
var Line = PosInfo.CurLine,
Range = PosInfo.CurRange;
var CurLine = Line - this.StartLine;
var CurRange = ( 0 === CurLine ? Range - this.StartRange : Range );
var StartPos = this.protected_GetRangeStartPos(CurLine, CurRange);
var EndPos = this.protected_GetRangeEndPos(CurLine, CurRange);
if(CurLine == 0 && CurRange == 0)
pos.x += this.BrGapLeft;
this.Content[StartPos].setPosition(pos, PosInfo);
for(var Pos = StartPos + 1; Pos <= EndPos; Pos++)
{
pos.x += this.dW;
this.Content[Pos].setPosition(pos, PosInfo);
}
var Len = this.Content.length;
// Здесь проверяем не на то, что это последний Range (т.к. на данном этапе еще идет вычисление строк) а на конец контента !
var EndBrContentEnd = this.NumBreakContent == EndPos && this.Content[EndPos].Math_Is_End(Line, Range),
NotBrContent = this.NumBreakContent !== EndPos;
var bEnd = EndBrContentEnd || NotBrContent;
if(EndPos == Len - 1 && true === bEnd)
pos.x += this.BrGapRight;
}
};
CMathBase.prototype.ShiftPage = function(Dx)
{
this.Bounds.ShiftPage(Dx);
for(var i=0; i < this.nRow; i++)
{
for(var j = 0; j < this.nCol; j++)
{
var Item = this.elements[i][j];
if(false == Item.IsJustDraw())
Item.ShiftPage(Dx);
}
}
};
CMathBase.prototype.Shift_Range = function(Dx, Dy, _CurLine, _CurRange, _CurPage)
{
var CurLine = _CurLine - this.StartLine;
var CurRange = ( 0 === CurLine ? _CurRange - this.StartRange : _CurRange );
if(this.bOneLine)
{
this.Bounds.ShiftPos(CurLine, CurRange, Dx, Dy);
for(var i=0; i < this.nRow; i++)
{
for(var j = 0; j < this.nCol; j++)
{
var Item = this.elements[i][j];
if(false == Item.IsJustDraw())
Item.Shift_Range(Dx, Dy, _CurLine, _CurRange, _CurPage);
}
}
}
else
{
this.Bounds.ShiftPos(CurLine, CurRange, Dx, Dy);
CParagraphContentWithParagraphLikeContent.prototype.Shift_Range.call(this, Dx, Dy, _CurLine, _CurRange, _CurPage);
}
};
CMathBase.prototype.IsStartRange = function(_CurLine, _CurRange)
{
var CurLine = _CurLine - this.StartLine;
var CurRange = ( 0 === CurLine ? _CurRange - this.StartRange : _CurRange );
return CurLine == 0 && CurRange == 0;
};
CMathBase.prototype.IsLastRange = function(_CurLine, _CurRange)
{
var CurLine = _CurLine - this.StartLine;
var CurRange = ( 0 === CurLine ? _CurRange - this.StartRange : _CurRange );
var LinesCount = this.protected_GetLinesCount(),
RangesCount = this.protected_GetRangesCount(CurLine);
return CurLine == LinesCount - 1 && CurRange == RangesCount - 1;
};
CMathBase.prototype.UpdatePosBound = function(pos, PosInfo)
{
var CurLine = PosInfo.CurLine - this.StartLine;
var CurRange = ( 0 === CurLine ? PosInfo.CurRange - this.StartRange : PosInfo.CurRange);
this.Bounds.SetPos(CurLine, CurRange, pos);
};
CMathBase.prototype.UpdateBoundsPosInfo = function(PRSA, _CurLine, _CurRange, _CurPage)
{
var CurLine = _CurLine - this.StartLine;
var CurRange = ( 0 === CurLine ? _CurRange - this.StartRange : _CurRange);
this.Bounds.SetGenPos(CurLine, CurRange, PRSA);
this.Bounds.SetPage(CurLine, CurRange, _CurPage);
if(this.bOneLine == true)
{
for(var i=0; i < this.nRow; i++)
{
for(var j = 0; j < this.nCol; j++)
{
if(false == this.elements[i][j].IsJustDraw())
this.elements[i][j].UpdateBoundsPosInfo(PRSA, _CurLine, _CurRange, _CurPage);
}
}
}
else
{
var StartPos = this.protected_GetRangeStartPos(CurLine, CurRange);
var EndPos = this.protected_GetRangeEndPos(CurLine, CurRange);
for(var Pos = StartPos; Pos <= EndPos; Pos++)
{
this.Content[Pos].UpdateBoundsPosInfo(PRSA, _CurLine, _CurRange, _CurPage);
}
}
};
CMathBase.prototype.draw = function(x, y, pGraphics, PDSE)
{
this.Make_ShdColor(PDSE, this.Get_CompiledCtrPrp()); // для Just-Draw элементов
for(var i=0; i < this.nRow; i++)
for(var j = 0; j < this.nCol; j++)
{
if(this.elements[i][j].IsJustDraw()) // для Just-Draw элементов надо выставить Font
{
var ctrPrp = this.Get_TxtPrControlLetter();
var Font =
{
FontSize: ctrPrp.FontSize,
FontFamily: {Name : ctrPrp.FontFamily.Name, Index : ctrPrp.FontFamily.Index},
Italic: false,
Bold: false //ctrPrp.Bold
};
pGraphics.SetFont(Font);
}
this.elements[i][j].draw(x, y, pGraphics, PDSE);
}
};
CMathBase.prototype.Draw_Elements = function(PDSE)
{
if(this.bOneLine)
{
var X = PDSE.X;
this.Make_ShdColor(PDSE, this.Get_CompiledCtrPrp()); // для Just-Draw элементов
for(var i=0; i < this.nRow; i++)
{
for(var j = 0; j < this.nCol; j++)
{
if(this.elements[i][j].IsJustDraw()) // для Just-Draw элементов надо выставить Font
{
var ctrPrp = this.Get_TxtPrControlLetter();
var Font =
{
FontSize: ctrPrp.FontSize,
FontFamily: {Name : ctrPrp.FontFamily.Name, Index : ctrPrp.FontFamily.Index},
Italic: false,
Bold: false //ctrPrp.Bold
};
PDSE.Graphics.SetFont(Font);
}
this.elements[i][j].Draw_Elements(PDSE);
}
}
PDSE.X = X + this.size.width;
}
else
{
var CurLine = PDSE.Line - this.StartLine;
var CurRange = ( 0 === CurLine ? PDSE.Range - this.StartRange : PDSE.Range );
var StartPos = this.protected_GetRangeStartPos(CurLine, CurRange);
var EndPos = this.protected_GetRangeEndPos(CurLine, CurRange);
for (var CurPos = StartPos; CurPos <= EndPos; CurPos++ )
{
this.Content[CurPos].Draw_Elements(PDSE);
}
}
};
CMathBase.prototype.remove = function(order)
{
return this.Parent.remove(order);
};
CMathBase.prototype.ApplyProperties = function(RPI)
{};
CMathBase.prototype.PreRecalc = function(Parent, ParaMath, ArgSize, RPI, GapsInfo)
{
this.Parent = Parent;
this.ParaMath = ParaMath;
this.Set_CompiledCtrPrp(Parent, ParaMath, RPI);
this.ApplyProperties(RPI);
// setGaps обязательно после того как смержили CtrPrp (Set_CompiledCtrPrp)
if(this.bInside == false)
GapsInfo.setGaps(this, this.TextPrControlLetter.FontSize);
for(var i=0; i < this.nRow; i++)
for(var j = 0; j < this.nCol; j++)
this.elements[i][j].PreRecalc(this, ParaMath, ArgSize, RPI);
};
CMathBase.prototype.Math_UpdateGaps = function(_CurLine, _CurRange, GapsInfo)
{
GapsInfo.updateCurrentObject(this, this.TextPrControlLetter.FontSize);
if(GapsInfo.bUpdate == true)
{
GapsInfo.updateGaps();
}
if(this.bOneLine == false)
{
var BrPos = this.NumBreakContent;
this.Content[BrPos].Math_UpdateGaps(_CurLine, _CurRange);
}
};
CMathBase.prototype.UpdLastElementForGaps = function(CurLine, CurRange, GapsInfo)
{
GapsInfo.updateCurrentObject(this, this.TextPrControlLetter.FontSize);
};
CMathBase.prototype.recalculateSize = function(oMeasure, RPI)
{
var width = 0;
var height = 0;
var maxWH = this.getWidthsHeights();
this.setDistance();
var Widths = maxWH.widths;
var Heights = maxWH.heights;
for( var j = 0 ; j < this.nRow; j++ )
height += Heights[j];
height += this.dH*(this.nRow - 1);
for(var i=0; i < this.nCol ; i++)
width += Widths[i];
width += this.dW*(this.nCol - 1) + this.GapLeft + this.GapRight;
var ascent = this.getAscent(oMeasure, height);
this.size.width = width;
this.size.height = height;
this.size.ascent = ascent;
};
CMathBase.prototype.ProcessingOldEquationConvert = function ()
{
for (let i = 0; i < this.Content.length; i++)
{
this.Content[i].ProcessingOldEquationConvert();
}
}
CMathBase.prototype.recalculateAllSize = function(textMeasurer)
{
this.setDistance();
for (let index = 0, count = this.Content.length; index < count; ++index)
{
this.Content[index].recalculateAllSize(textMeasurer);
}
for (let iRow = 0; iRow < this.nRow; ++iRow)
{
for (let iCol = 0; iCol < this.nCol; ++iCol)
{
let item = this.elements[iRow][iCol];
if (item.IsJustDraw())
this.MeasureJustDraw(item);
else if (item.recalculateSize)
item.recalculateSize(textMeasurer);
}
}
this.recalculateSize(textMeasurer);
};
CMathBase.prototype.Resize = function(oMeasure, RPI)
{
for(var i=0; i < this.nRow; i++)
for(var j = 0; j < this.nCol; j++)
{
if(this.elements[i][j].IsJustDraw()) // для Just-Draw элементов надо выставить Font
{
var ctrPrp = this.Get_TxtPrControlLetter();
var Font =
{
FontSize: ctrPrp.FontSize,
FontFamily: {Name : ctrPrp.FontFamily.Name, Index : ctrPrp.FontFamily.Index},
Italic: false,
Bold: false //ctrPrp.Bold
};
g_oTextMeasurer.SetFont(Font);
}
this.elements[i][j].Resize(oMeasure, RPI);
}
this.recalculateSize(oMeasure, RPI);
};
CMathBase.prototype.Resize_2 = function(oMeasure, Parent, ParaMath, RPI, ArgSize)
{
for(var i=0; i < this.nRow; i++)
for(var j = 0; j < this.nCol; j++)
if(!this.elements[i][j].IsJustDraw())
this.elements[i][j].Resize_2(oMeasure, this, ParaMath, RPI, ArgSize);
};
CMathBase.prototype.Set_CompiledCtrPrp = function(Parent, ParaMath, RPI)
{
if(this.RecalcInfo.bCtrPrp == true || (RPI !== null && RPI !== undefined && RPI.bRecalcCtrPrp == true))
{
if (undefined === ParaMath || null === ParaMath)
{
this.CompiledCtrPrp = new CTextPr();
this.CompiledCtrPrp.InitDefault();
return;
}
// Получим настройки текста, для данного параграфа
this.CompiledCtrPrp = ParaMath.Paragraph.Get_CompiledPr2(false).TextPr.Copy();
this.CompiledCtrPrp.Merge(ParaMath.Get_Default_TPrp());
// Если в прямых настройках задан стиль, тогда смержим настройки стиля
if ( undefined != this.CtrPrp.RStyle )
{
var Styles = ParaMath.Paragraph.Parent.Get_Styles();
if (Styles instanceof AscWord.CStyles)
{
var StyleTextPr = Styles.Get_Pr( this.CtrPrp.RStyle, styletype_Character ).TextPr;
this.CompiledCtrPrp.Merge(StyleTextPr);
}
}
var defaultTxtPrp = ParaMath.Get_Default_TPrp();
this.CompiledCtrPrp.FontFamily =
{
Name: defaultTxtPrp.FontFamily.Name,
Index: defaultTxtPrp.FontFamily.Index
};
this.CompiledCtrPrp.Merge(this.CtrPrp);
// for Control Letter
var FontSize = ParaMath.GetFirstRPrp().FontSize;
if(this.bInside == true)
{
var TxtPr = Parent.Get_TxtPrControlLetter(RPI); // чтобы применился ArgSize Parent
FontSize = TxtPr.FontSize;
FontSize *= MatGetKoeffArgSize(FontSize, this.ArgSize.value);
}
else
{
FontSize *= MatGetKoeffArgSize(FontSize, Parent.Get_CompiledArgSize().value);
FontSize *= MatGetKoeffArgSize(FontSize, this.ArgSize.value);
}
this.TextPrControlLetter.FontSize = FontSize;
this.TextPrControlLetter.FontFamily =
{
Name: defaultTxtPrp.FontFamily.Name,
Index: defaultTxtPrp.FontFamily.Index
}; // Cambria Math
this.RecalcInfo.bCtrPrp = false;
}
};
CMathBase.prototype.getAscent = function(oMeasure, _height)
{
var Ascent = 0;
if(this.nRow > 1)
{
Ascent = _height;
Ascent /=2;
var MergedCtrPrp = this.Get_CompiledCtrPrp();
Ascent += this.ParaMath.GetShiftCenter(oMeasure, MergedCtrPrp);
}
else
for(var i=0; i< this.nCol; i++)
Ascent = (this.elements[0][i].size.ascent > Ascent) ? this.elements[0][i].size.ascent : Ascent;
return Ascent;
};
CMathBase.prototype.alignHor = function(pos, coeff)
{
if(pos!=-1)
this.alignment.wdt[pos] = coeff;
else
for(var j = 0; j< this.alignment.wdt.length; j++)
this.alignment.wdt[j] = coeff;
}
CMathBase.prototype.alignVer = function(pos, coeff)
{
if(pos!=-1)
this.alignment.hgt[pos] = coeff;
else
for(var j = 0; j < this.alignment.hgt.length; j++)
this.alignment.hgt[j] = coeff;
};
CMathBase.prototype.setDistance = function()
{
};
CMathBase.prototype.hidePlaceholder = function(flag)
{
for(var i=0; i < this.nRow; i++)
for(var j = 0; j < this.nCol; j++)
{
if( this.elements[i][j].IsJustDraw() == false )
this.elements[i][j].hidePlaceholder(flag);
}
};
CMathBase.prototype.getElement = function(x, y)
{
return this.elements[x][y];
};
CMathBase.prototype.IsOneLineText = function() // for degree
{
var bOneLineText = true;
if(this.nRow == 1)
{
for(var j = 0; j < this.nCol; j++)
{
if(!this.elements[0][j].IsJustDraw() && !this.elements[0][j].IsOneLineText())
{
bOneLineText = false;
break;
}
}
}
else
bOneLineText = false;
return bOneLineText;
};
//// For Edit /////
CMathBase.prototype.getGapsInside = function(GapsInfo)
{
var kind = this.kind;
var gaps = {left: 0, right: 0};
var checkBase = kind == MATH_DEGREE || kind == MATH_DEGREESubSup || kind == MATH_ACCENT || kind == MATH_RADICAL || kind == MATH_LIMIT || kind == MATH_BORDER_BOX;
if(checkBase)
{
var base = this.getBase();
gaps = base.getGapsInside(GapsInfo);
}
return gaps;
};
CMathBase.prototype.SetGaps = function(GapsInfo)
{
//this.Parent = GapsInfo.Parent;
//this.ParaMath = GapsInfo.ParaMath;
GapsInfo.Left = GapsInfo.Current;
GapsInfo.leftRunPrp = GapsInfo.currRunPrp;
GapsInfo.Current = this;
GapsInfo.currRunPrp = this.Get_CompiledCtrPrp();
GapsInfo.setGaps();
};
CMathBase.prototype.Is_EmptyGaps = function()
{
return false;
};
//////////////////////////////////
CMathBase.prototype.IsPlaceholder = function()
{
return false;
};
CMathBase.prototype.IsMathText = function()
{
return false;
};
CMathBase.prototype.GetParent = function()
{
return (this.Parent ? (this.Parent.Type !== para_Math_Composition ? this.Parent : this.Parent.GetParent()) : null);
};
CMathBase.prototype.Get_TextPr = function(ContentPos, Depth)
{
var pos = ContentPos.Get(Depth);
return this.Content[pos].Get_TextPr(ContentPos, Depth+1);
};
CMathBase.prototype.Get_CompiledTextPr = function(Copy)
{
var TextPr = null;
var nStartPos = 0;
var nCount = this.Content.length;
while (null === TextPr && nStartPos < nCount)
{
if (this.Is_ContentUse(this.Content[nStartPos]))
TextPr = this.Content[nStartPos].Get_CompiledTextPr(true, true);
nStartPos++;
}
for (var nPos = nStartPos; nPos < nCount; ++nPos)
{
var CurTextPr = this.Content[nPos].Get_CompiledTextPr(false, true);
if (null !== CurTextPr)
TextPr = TextPr.Compare(CurTextPr);
}
return TextPr;
};
CMathBase.prototype.Get_CompiledPr = function(Copy)
{
return this.Get_CompiledTextPr(Copy);
};
CMathBase.prototype.Apply_TextPr = function(TextPr, IncFontSize, ApplyToAll)
{
this.Apply_TextPrToCtrPr(TextPr, IncFontSize, ApplyToAll);
for (var nIndex = 0; nIndex < this.Content.length; ++nIndex)
{
this.Content[nIndex].Apply_TextPr(TextPr, IncFontSize, ApplyToAll);
}
};
CMathBase.prototype.Apply_TextPrToCtrPr = function(TextPr, IncFontSize, ApplyToAll)
{
if (true === ApplyToAll)
this.RecalcInfo.bCtrPrp = true;
if (!TextPr)
{
var CtrPrp = this.Get_CompiledCtrPrp_2();
this.Set_FontSizeCtrPrp(CtrPrp.GetIncDecFontSize(IncFontSize));
}
else
{
if (undefined !== TextPr.Bold)
this.SetBold(null === TextPr.Bold ? undefined : TextPr.Bold);
if (undefined !== TextPr.Italic)
this.SetItalic(null === TextPr.Italic ? undefined : TextPr.Italic);
if (TextPr.AscFill || TextPr.AscLine || TextPr.AscUnifill)
{
var oCompiledPr = this.Get_CompiledCtrPrp();
if (TextPr.AscFill)
{
this.Set_TextFill(AscFormat.CorrectUniFill(TextPr.AscFill, oCompiledPr.TextFill, 1));
}
if (TextPr.AscUnifill)
{
this.Set_Unifill(AscFormat.CorrectUniFill(TextPr.AscUnifill, oCompiledPr.Unifill, 0));
}
if (TextPr.AscLine)
{
this.Set_TextOutline(AscFormat.CorrectUniStroke(TextPr.AscLine, oCompiledPr.TextOutline, 0));
}
return;
}
if (undefined !== TextPr.FontSize)
this.Set_FontSizeCtrPrp(null === TextPr.FontSize ? undefined : TextPr.FontSize);
if (undefined !== TextPr.Shd)
this.Set_Shd(null === TextPr.Shd ? undefined : TextPr.Shd);
if (undefined !== TextPr.Color)
{
this.Set_Color(TextPr.Color);
if(null !== TextPr.Color)
{
if (this.CtrPrp.Unifill)
this.Set_Unifill(undefined);
if (this.CtrPrp.TextFill)
this.Set_TextFill(undefined);
}
}
if (undefined !== TextPr.Unifill)
{
this.Set_Unifill(null === TextPr.Unifill ? undefined : TextPr.Unifill.createDuplicate());
if (null !== TextPr.Unifill)
{
if (this.CtrPrp.Color)
this.Set_Color(undefined);
if (this.CtrPrp.TextFill)
this.Set_TextFill(undefined);
}
}
if (undefined !== TextPr.TextOutline)
this.Set_TextOutline(null === TextPr.TextOutline ? undefined : TextPr.TextOutline);
if (undefined !== TextPr.TextFill)
{
this.Set_TextFill(null === TextPr.TextFill ? undefined : TextPr.TextFill);
if (null !== TextPr.TextFill)
{
if (this.CtrPrp.Color)
this.Set_Color(undefined);
if (this.CtrPrp.Unifill)
this.Set_Unifill(undefined);
}
}
if (undefined !== TextPr.HighLight)
this.Set_HighLight(null === TextPr.HighLight ? undefined : TextPr.HighLight);
if (undefined !== TextPr.HighlightColor)
this.SetHighlightColor(null === TextPr.HighlightColor ? undefined : TextPr.HighlightColor);
if (undefined !== TextPr.Underline)
this.SetUnderline(null === TextPr.Underline ? undefined : TextPr.Underline);
if (undefined !== TextPr.Strikeout)
this.SetStrikeout(null === TextPr.Strikeout ? undefined : TextPr.Strikeout);
if (undefined !== TextPr.DStrikeout)
this.SetDoubleStrikeout(null === TextPr.DStrikeout ? undefined : TextPr.DStrikeout);
if (undefined !== TextPr.RFonts)
{
var RFonts = new CRFonts();
RFonts.SetAll("Cambria Math", -1);
this.raw_SetRFonts(RFonts);
}
}
};
CMathBase.prototype.GetMathTextPrForMenu = function(ContentPos, Depth)
{
var pos = ContentPos.Get(Depth);
return this.Content[pos].GetMathTextPrForMenu(ContentPos, Depth+1);
};
CMathBase.prototype.Set_MathTextPr2 = function(TextPr, MathPr, bAll)
{
this.Set_FontSizeCtrPrp(TextPr.FontSize);
for(var i = 0; i < this.Content.length; i++)
this.Content[i].Set_MathTextPr2(TextPr, MathPr, bAll);
};
CMathBase.prototype.Set_FontSizeCtrPrp = function(Value)
{
if (null === Value)
Value = undefined;
if (Value !== this.CtrPrp.FontSize)
{
AscCommon.History.Add(new CChangesMathBaseFontSize(this, this.CtrPrp.FontSize, Value));
this.raw_SetFontSize(Value);
}
};
CMathBase.prototype.Set_Color = function(Value)
{
if (null === Value)
Value = undefined;
if ((undefined === Value && undefined !== this.CtrPrp.Color) || (Value instanceof CDocumentColor && (undefined === this.CtrPrp.Color || false === Value.Compare(this.CtrPrp.Color))))
{
AscCommon.History.Add(new CChangesMathBaseColor(this, this.CtrPrp.Color, Value));
this.raw_SetColor(Value);
}
};
CMathBase.prototype.Set_Unifill = function(Value)
{
if (null === Value)
Value = undefined;
if ((undefined === Value && undefined !== this.CtrPrp.Unifill) || (Value instanceof AscFormat.CUniFill && (undefined === this.CtrPrp.Unifill || false === AscFormat.CompareUnifillBool(this.CtrPrp.Unifill, Value))))
{
AscCommon.History.Add(new CChangesMathBaseUnifill(this, this.CtrPrp.Unifill, Value));
this.raw_SetUnifill(Value);
}
};
CMathBase.prototype.Set_TextFill = function(Value)
{
if (null === Value)
Value = undefined;
if ((undefined === Value && undefined !== this.CtrPrp.TextFill) || (Value instanceof AscFormat.CUniFill && (undefined === this.CtrPrp.TextFill || false === AscFormat.CompareUnifillBool(this.CtrPrp.TextFill, Value))))
{
AscCommon.History.Add(new CChangesMathBaseTextFill(this, this.CtrPrp.TextFill, Value));
this.raw_SetTextFill(Value);
}
};
CMathBase.prototype.Set_TextOutline = function(Value)
{
if (null === Value)
Value = undefined;
if ((undefined === Value && undefined !== this.CtrPrp.TextOutline) || (Value instanceof AscFormat.CLn && (undefined === this.CtrPrp.TextOutline || false === Value.IsIdentical(this.CtrPrp.TextOutline))))
{
AscCommon.History.Add(new CChangesMathBaseTextOutline(this, this.CtrPrp.TextOutline, Value));
this.raw_SetTextOutline(Value);
}
};
CMathBase.prototype.Set_HighLight = function(Value)
{
if (null === Value)
Value = undefined;
var OldValue = this.CtrPrp.HighLight;
if ((undefined === Value && undefined !== OldValue) || (highlight_None === Value && highlight_None !== OldValue) || (Value instanceof CDocumentColor && (undefined === OldValue || highlight_None === OldValue || false === Value.Compare(OldValue))))
{
AscCommon.History.Add(new CChangesMathBaseHighLight(this, this.CtrPrp.HighLight, Value));
this.raw_SetHighLight(Value);
}
};
CMathBase.prototype.SetHighlightColor = function(Value)
{
if (null === Value)
Value = undefined;
var OldValue = this.CtrPrp.HighlightColor;
if (OldValue && !OldValue.IsIdentical(Value) || Value && !Value.IsIdentical(OldValue))
{
AscCommon.History.Add(new CChangesMathBaseHighlightColor(this, OldValue, Value));
this.raw_SetHighlightColor(Value);
}
};
CMathBase.prototype.Set_Shd = function(Shd)
{
if (null === Shd)
Shd = undefined;
if (!(undefined === this.CtrPrp.Shd && undefined === Shd) && !(undefined !== this.CtrPrp.Shd && undefined !== Shd && true === this.CtrPrp.Shd.Compare(Shd)))
{
AscCommon.History.Add(new CChangesMathBaseShd(this, this.CtrPrp.Shd, Shd));
this.raw_SetShd(Shd);
}
};
CMathBase.prototype.SetUnderline = function(Value)
{
if (null === Value)
Value = undefined;
if (Value !== this.CtrPrp.Underline)
{
AscCommon.History.Add(new CChangesMathBaseUnderline(this, this.CtrPrp.Underline, Value));
this.raw_SetUnderline(Value);
}
};
CMathBase.prototype.SetStrikeout = function(Value)
{
if (null === Value)
Value = undefined;
if (Value !== this.CtrPrp.Strikeout)
{
AscCommon.History.Add(new CChangesMathBaseStrikeout(this, this.CtrPrp.Strikeout, Value));
this.raw_SetStrikeout(Value);
}
};
CMathBase.prototype.SetDoubleStrikeout = function(Value)
{
if (null === Value)
Value = undefined;
if (Value !== this.CtrPrp.DStrikeout)
{
AscCommon.History.Add(new CChangesMathBaseDoubleStrikeout(this, this.CtrPrp.DStrikeout, Value));
this.raw_Set_DoubleStrikeout(Value);
}
};
CMathBase.prototype.SetBold = function(Value)
{
if (null === Value)
Value = undefined;
if (Value !== this.CtrPrp.Bold)
{
AscCommon.History.Add(new CChangesMathBaseBold(this, this.CtrPrp.Bold, Value));
this.raw_SetBold(Value);
}
};
CMathBase.prototype.SetItalic = function(Value)
{
if (null === Value)
Value = undefined;
if (Value !== this.CtrPrp.Italic)
{
AscCommon.History.Add(new CChangesMathBaseItalic(this, this.CtrPrp.Italic, Value));
this.raw_SetItalic(Value);
}
};
CMathBase.prototype.SetRFontsAscii = function(Value)
{
if (null === Value)
Value = undefined;
if (this.CtrPrp.RFonts.Ascii !== Value)
{
AscCommon.History.Add(new CChangesMathBaseRFontsAscii(this, this.CtrPrp.RFonts.Ascii, Value));
this.raw_SetRFontsAscii(Value);
}
};
CMathBase.prototype.SetRFontsHAnsi = function(Value)
{
if (null === Value)
Value = undefined;
if (this.CtrPrp.RFonts.HAnsi !== Value)
{
AscCommon.History.Add(new CChangesMathBaseRFontsHAnsi(this, this.CtrPrp.RFonts.HAnsi, Value));
this.raw_SetRFontsHAnsi(Value);
}
};
CMathBase.prototype.SetRFontsCS = function(Value)
{
if (null === Value)
Value = undefined;
if (this.CtrPrp.RFonts.CS !== Value)
{
AscCommon.History.Add(new CChangesMathBaseRFontsCS(this, this.CtrPrp.RFonts.CS, Value));
this.raw_SetRFontsCS(Value);
}
};
CMathBase.prototype.SetRFontsEastAsia = function(Value)
{
if (null === Value)
Value = undefined;
if (this.CtrPrp.RFonts.EastAsia !== Value)
{
AscCommon.History.Add(new CChangesMathBaseRFontsEastAsia(this, this.CtrPrp.RFonts.EastAsia, Value));
this.raw_SetRFontsEastAsia(Value);
}
};
CMathBase.prototype.SetRFontsHint = function(Value)
{
if (null === Value)
Value = undefined;
if (this.CtrPrp.RFonts.Hint !== Value)
{
AscCommon.History.Add(new CChangesMathBaseRFontsHint(this, this.CtrPrp.RFonts.Hint, Value));
this.raw_SetRFontsHint(Value);
}
};
CMathBase.prototype.raw_SetBold = function(Value)
{
this.CtrPrp.Bold = Value;
this.NeedUpdate_CtrPrp();
};
CMathBase.prototype.raw_SetItalic = function(Value)
{
this.CtrPrp.Italic = Value;
this.NeedUpdate_CtrPrp();
};
CMathBase.prototype.raw_SetUnderline = function(Value)
{
this.CtrPrp.Underline = Value;
this.NeedUpdate_CtrPrp();
};
CMathBase.prototype.raw_SetStrikeout = function(Value)
{
this.CtrPrp.Strikeout = Value;
this.NeedUpdate_CtrPrp();
};
CMathBase.prototype.raw_Set_DoubleStrikeout = function(Value)
{
this.CtrPrp.DStrikeout = Value;
this.NeedUpdate_CtrPrp();
};
CMathBase.prototype.raw_SetFontSize = function(Value)
{
this.CtrPrp.FontSize = Value;
this.NeedUpdate_CtrPrp();
};
CMathBase.prototype.raw_SetShd = function(Shd)
{
if ( undefined !== Shd )
{
this.CtrPrp.Shd = new CDocumentShd();
this.CtrPrp.Shd.Set_FromObject( Shd );
}
else
this.CtrPrp.Shd = undefined;
this.NeedUpdate_CtrPrp();
};
CMathBase.prototype.raw_SetColor = function(Value)
{
this.CtrPrp.Color = Value;
this.NeedUpdate_CtrPrp();
};
CMathBase.prototype.raw_SetUnifill = function(Value)
{
this.CtrPrp.Unifill = Value;
this.NeedUpdate_CtrPrp();
};
CMathBase.prototype.raw_SetTextFill = function(Value)
{
this.CtrPrp.TextFill = Value;
this.NeedUpdate_CtrPrp();
};
CMathBase.prototype.raw_SetTextOutline = function(Value)
{
this.CtrPrp.TextOutline = Value;
this.NeedUpdate_CtrPrp();
};
CMathBase.prototype.raw_SetHighLight = function(Value)
{
this.CtrPrp.HighLight = Value;
this.NeedUpdate_CtrPrp();
};
CMathBase.prototype.raw_SetHighlightColor = function(Value)
{
this.CtrPrp.HighlightColor = Value;
this.NeedUpdate_CtrPrp();
};
CMathBase.prototype.raw_SetRFonts = function(RFonts)
{
if (RFonts)
{
if (undefined !== RFonts.Ascii)
this.SetRFontsAscii(RFonts.Ascii);
if (undefined !== RFonts.HAnsi)
this.SetRFontsHAnsi(RFonts.HAnsi);
if (undefined !== RFonts.CS)
this.SetRFontsCS(RFonts.CS);
if (undefined !== RFonts.EastAsia)
this.SetRFontsEastAsia(RFonts.EastAsia);
if (undefined !== RFonts.Hint)
this.SetRFontsHint(RFonts.Hint);
}
else
{
this.SetRFontsAscii(undefined);
this.SetRFontsHAnsi(undefined);
this.SetRFontsCS(undefined);
this.SetRFontsEastAsia(undefined);
this.SetRFontsHint(undefined);
}
};
CMathBase.prototype.raw_SetRFontsAscii = function(Value)
{
this.CtrPrp.RFonts.Ascii = Value;
this.NeedUpdate_CtrPrp();
};
CMathBase.prototype.raw_SetRFontsHAnsi = function(Value)
{
this.CtrPrp.RFonts.HAnsi = Value;
this.NeedUpdate_CtrPrp();
};
CMathBase.prototype.raw_SetRFontsCS = function(Value)
{
this.CtrPrp.RFonts.CS = Value;
this.NeedUpdate_CtrPrp();
};
CMathBase.prototype.raw_SetRFontsEastAsia = function(Value)
{
this.CtrPrp.RFonts.EastAsia = Value;
this.NeedUpdate_CtrPrp();
};
CMathBase.prototype.raw_SetRFontsHint = function(Value)
{
this.CtrPrp.RFonts.Hint = Value;
this.NeedUpdate_CtrPrp();
};
CMathBase.prototype.NeedUpdate_CtrPrp = function()
{
this.RecalcInfo.bCtrPrp = true;
};
CMathBase.prototype.SelectToParent = function(bCorrect)
{
this.bSelectionUse = true;
this.Parent.SelectToParent(bCorrect);
};
CMathBase.prototype.Get_StartRangePos = function(_CurLine, _CurRange, SearchPos, Depth, bStartPos)
{
var Pos = bStartPos == true ? this.NumBreakContent : this.CurPos;
var Result = this.Content[Pos].Get_StartRangePos(_CurLine, _CurRange, SearchPos, Depth+1, bStartPos);
if ( true === Result )
SearchPos.Pos.Update(Pos, Depth );
return Result;
};
CMathBase.prototype.Get_EndRangePos = function(_CurLine, _CurRange, SearchPos, Depth, bEndPos)
{
var Pos = bEndPos == true ? this.NumBreakContent : this.CurPos;
var Result = this.Content[Pos].Get_EndRangePos(_CurLine, _CurRange, SearchPos, Depth+1, bEndPos);
if ( true === Result )
SearchPos.Pos.Update( Pos, Depth );
return Result;
};
CMathBase.prototype.Recalculate_Range_Spaces = function(PRSA, _CurLine, _CurRange, _CurPage)
{
var CurLine = _CurLine - this.StartLine;
var CurRange = ( 0 === CurLine ? _CurRange - this.StartRange : _CurRange );
var WidthVisible;
if ( 0 !== PRSA.LettersSkip )
{
WidthVisible = this.Bounds.GetWidth(CurLine, CurRange);
PRSA.LettersSkip--;
}
else
{
WidthVisible = this.Bounds.GetWidth(CurLine, CurRange) + PRSA.JustifyWord;
}
PRSA.X += WidthVisible;
PRSA.LastW = WidthVisible;
};
CMathBase.prototype.GetWidth = function(_CurLine, _CurRange)
{
var CurLine = _CurLine - this.StartLine,
CurRange = ( 0 === CurLine ? _CurRange - this.StartRange : _CurRange );
return this.Bounds.GetWidth(CurLine, CurRange);
};
CMathBase.prototype.SaveRecalculateObject = function(Copy)
{
var RecalcObj;
if(this.bOneLine)
{
RecalcObj = new CEmptyRunRecalculateObject(this.StartLine, this.StartRange);
}
else
{
var Num = this.NumBreakContent;
RecalcObj = new CRunRecalculateObject(this.StartLine, this.StartRange);
RecalcObj.Save_Lines( this, Copy );
for(var Pos = 0; Pos < this.Content.length; Pos++)
{
if(Pos == Num)
{
RecalcObj.Content[Pos] = this.Content[Pos].SaveRecalculateObject(Copy);
}
else
{
RecalcObj.Content[Pos] = new CEmptyRunRecalculateObject(this.StartLine, this.StartRange);
}
}
}
return RecalcObj;
};
CMathBase.prototype.LoadRecalculateObject = function(RecalcObj)
{
if (this.bOneLine == false)
CParagraphContentWithParagraphLikeContent.prototype.LoadRecalculateObject.call(this, RecalcObj);
};
CMathBase.prototype.Fill_LogicalContent = function(nCount, opt_content)
{
if (!opt_content) {
opt_content = [];
}
for (var nIndex = 0; nIndex < nCount; nIndex++)
{
let elem = opt_content[nIndex];
if (!elem) {
elem = new CMathContent();
}
this.Content[nIndex] = elem;
this.Content[nIndex].ParentElement = this;
this.Content[nIndex].Parent = this;
}
};
CMathBase.prototype.Copy = function(Selected, oPr)
{
var oProps = this.Pr.Copy();
oProps.ctrPrp = this.CtrPrp.Copy();
var NewElement = new this.constructor(oProps);
for (var nIndex = 0, nCount = this.Content.length; nIndex < nCount; nIndex++)
{
this.Content[nIndex].CopyTo(NewElement.Content[nIndex], false, oPr);
}
if(oPr && oPr.Comparison)
{
oPr.Comparison.checkReviewInfoOfCopiedElements(NewElement, this);
}
return NewElement;
};
CMathBase.prototype.Refresh_RecalcData = function(Data)
{
if(this.ParaMath !== null)
this.ParaMath.Refresh_RecalcData(); // Refresh_RecalcData сообщает родительскому классу, что у него произошли изменения, нужно пересчитать
};
CMathBase.prototype.Write_ToBinary2 = function( Writer )
{
Writer.WriteLong(this.ClassType);
// String : Id
// Long : Content.length
// Array of Strings : Content[Index].Id
// Variable : Pr
// Variable(CTextPr): CtrPrp
// Long : ReviewType
// Bool : undefined == ReviewInfo
// if false : ReviewInfo
Writer.WriteString2(this.Id);
var nCount = this.Content.length;
Writer.WriteLong(nCount);
for (var nIndex = 0; nIndex < nCount; nIndex++)
{
Writer.WriteString2(this.Content[nIndex].Id);
}
this.Pr.Write_ToBinary(Writer);
this.CtrPrp.Write_ToBinary(Writer);
Writer.WriteLong(this.ReviewType);
if (undefined !== this.ReviewInfo)
{
Writer.WriteBool(false);
this.ReviewInfo.Write_ToBinary(Writer);
}
else
{
Writer.WriteBool(true);
}
};
CMathBase.prototype.Read_FromBinary2 = function( Reader )
{
// String : Id
// Long : Content.length
// Array of Strings : Content[Index].Id
// Variable : Pr
// Variable(CTextPr): CtrPrp
// Long : ReviewType
// Bool : undefined == ReviewInfo
// if false : ReviewInfo
this.Id = Reader.GetString2();
var nCount = Reader.GetLong();
this.Content = [];
for (var nIndex = 0; nIndex < nCount; nIndex++)
{
this.Content[nIndex] = AscCommon.g_oTableId.Get_ById(Reader.GetString2());
this.Content[nIndex].ParentElement = this;
this.Content[nIndex].Parent = this;
}
this.Pr.Read_FromBinary(Reader);
this.CtrPrp.Read_FromBinary(Reader);
this.ReviewType = Reader.GetLong();
if (true === Reader.GetBool())
{
this.ReviewInfo = undefined;
}
else
{
this.ReviewInfo = new AscWord.ReviewInfo();
this.ReviewInfo.Read_FromBinary(Reader);
}
this.fillContent();
};
CMathBase.prototype.Get_Id = function()
{
return this.Id;
};
CMathBase.prototype.getPropsForWrite = function()
{
return this.Pr;
};
CMathBase.prototype.setProperties = function(oProps)
{
this.Pr.Set_FromObject(oProps);
this.setCtrPrp(oProps.ctrPrp);
this.RecalcInfo.bProps = true;
}
CMathBase.prototype.Correct_Content = function(bInnerCorrection)
{
var nCount = this.Content.length;
for (var nIndex = 0; nIndex < nCount; nIndex++)
{
this.Content[nIndex].Correct_Content(bInnerCorrection);
}
if (this.CurPos >= this.Content.length)
this.CurPos = this.Content.length - 1;
if (this.CurPos < 0)
this.CurPos = 0;
};
CMathBase.prototype.Undo = function(Data)
{
Data.Undo(this);
};
CMathBase.prototype.Redo = function(Data)
{
Data.Redo(this);
};
CMathBase.prototype.Get_AllFontNames = function(AllFonts)
{
this.CtrPrp.Document_Get_AllFontNames(AllFonts);
for (var nIndex = 0, nCount = this.Content.length; nIndex < nCount; nIndex++)
{
this.Content[nIndex].Get_AllFontNames(AllFonts);
}
};
CMathBase.prototype.Create_FontMap = function(Map)
{
if (null === this.ParaMath)
return;
var CtrPrp = this.Get_CompiledCtrPrp();
CtrPrp.Document_CreateFontMap(Map, this.ParaMath.Paragraph.Get_Theme().themeElements.fontScheme);
for (var nIndex = 0, nCount = this.Content.length; nIndex < nCount; nIndex++)
this.Content[nIndex].Create_FontMap(Map);
};
CMathBase.prototype.recalculateCursorPosition = function(positionCalculator, isCurrent)
{
if (isCurrent)
this.Content[this.CurPos].recalculateCursorPosition(positionCalculator, true);
else
positionCalculator.handleMathElement(this);
};
CMathBase.prototype.getParagraphContentPosByXY = function(searchState)
{
searchState.handleMathBase(this);
};
CMathBase.prototype.Get_ParaContentPos = function(bSelection, bStart, ContentPos, bUseCorrection)
{
var nPos = (true !== bSelection ? this.CurPos : (false !== bStart ? this.Selection.StartPos : this.Selection.EndPos));
ContentPos.Add(nPos);
if (undefined !== this.Content[nPos])
this.Content[nPos].Get_ParaContentPos(bSelection, bStart, ContentPos, bUseCorrection);
};
CMathBase.prototype.Set_ParaContentPos = function(ContentPos, Depth)
{
var CurPos = ContentPos.Get(Depth);
if (undefined === CurPos || this.CurPos < 0)
{
this.CurPos = 0;
this.Content[this.CurPos].MoveCursorToStartPos();
}
else if (CurPos > this.Content.length - 1)
{
this.CurPos = this.Content.length - 1;
this.Content[this.CurPos].MoveCursorToEndPos(false);
}
else
{
this.CurPos = CurPos;
this.Content[this.CurPos].Set_ParaContentPos(ContentPos, Depth + 1);
}
};
CMathBase.prototype.drawSelectionInRange = function(line, range, drawSelectionState)
{
let selectionStart = this.Selection.StartPos;
let selectionEnd = this.Selection.EndPos;
let isSelected = this.Selection.Use;
if (isSelected && !this.bOneLine)
{
let rangeInfo = this.getRangePos(line, range);
let rangeStart = rangeInfo[0];
let rangeEnd = rangeInfo[1];
isSelected = selectionStart >= rangeStart && selectionEnd <= rangeEnd;
}
if (isSelected && selectionStart === selectionEnd)
{
let item = this.Content[this.Selection.StartPos];
let bounds = item.Get_LineBound(line, range);
drawSelectionState.x = bounds.X;
item.drawSelectionInRange(line, range, drawSelectionState);
}
else
{
drawSelectionState.handleMathElement(this, isSelected);
}
};
/**
* Get first find parent typeof CMathContent or MathBase
* @return {*}
*/
CMathBase.prototype.GetMathBaseFirst = function()
{
return this;
};
CMathBase.prototype.IsSelectionEmpty = function()
{
if (true !== this.Selection.Use)
return true;
if (this.Selection.StartPos === this.Selection.EndPos)
return this.Content[this.Selection.StartPos].IsSelectionEmpty();
return false;
};
CMathBase.prototype.GetSelectContent = function()
{
var nPos = (true === this.Selection.Use ? this.Selection.StartPos : this.CurPos);
return this.Content[nPos].GetSelectContent();
};
CMathBase.prototype.Is_InnerSelection = function()
{
if (true === this.Selection.Use && this.Selection.StartPos === this.Selection.EndPos)
return true;
return false;
};
CMathBase.prototype.Select_WholeElement = function()
{
if (null !== this.Parent)
this.Parent.Select_Element(this, true);
};
CMathBase.prototype.Select_MathContent = function(MathContent)
{
for (var nPos = 0, nCount = this.Content.length; nPos < nCount; nPos++)
{
if (this.Content[nPos] === MathContent)
{
if (null !== this.Parent)
{
this.Selection.Use = true;
this.Selection.StartPos = nPos;
this.Selection.EndPos = nPos;
this.Parent.Select_Element(this, false);
}
break;
}
}
};
CMathBase.prototype.SetCurrentMathContent = function(oMathContent)
{
for (let nPos = 0, nCount = this.Content.length; nPos < nCount; ++nPos)
{
if (this.Content[nPos] === oMathContent)
{
this.CurPos = nPos;
if (null !== this.Parent)
this.Parent.SetCurrentElement(this);
break;
}
}
};
CMathBase.prototype.Draw_HighLights = function(drawState, bAll)
{
drawState.handleMathBase(this);
};
CMathBase.prototype.Draw_Lines = function(PDSL)
{
var CtrPrp = this.Get_CompiledCtrPrp(false);
var aStrikeout = PDSL.Strikeout;
var aDStrikeout = PDSL.DStrikeout;
var ReviewType = this.GetReviewType();
var bAddReview = reviewtype_Add === ReviewType ? true : false;
var bRemReview = reviewtype_Remove === ReviewType ? true : false;
var ReviewColor = null;
if (bAddReview || bRemReview)
ReviewColor = this.ReviewInfo.Get_Color();
var ArgSize = this.Get_CompiledArgSize();
var fontCoeff = MatGetKoeffArgSize(CtrPrp.FontSize, ArgSize.value);
// вычисляем координату Y и LineW также как в Run
var X = PDSL.X;
var Y = PDSL.Baseline - CtrPrp.FontSize * fontCoeff * g_dKoef_pt_to_mm * 0.27;
var LineW = (CtrPrp.FontSize / 18) * g_dKoef_pt_to_mm;
var Para = PDSL.Paragraph;
// set aStrikeout && aDStrikeout
if (true === bRemReview || true === CtrPrp.Strikeout)
aStrikeout.set(Y, LineW);
else if (true === CtrPrp.DStrikeout)
aDStrikeout.set(Y, LineW);
var BgColor = PDSL.BgColor;
if (CtrPrp.Shd && !CtrPrp.Shd.IsNil())
BgColor = CtrPrp.Shd.GetSimpleColor(Para.GetTheme(), Para.GetColorMap());
var AutoColor = ( undefined != BgColor && false === BgColor.Check_BlackAutoColor() )
? new CDocumentColor( 255, 255, 255, false)
: new CDocumentColor( 0, 0, 0, false );
var CurColor,
RGBA,
Theme = this.Paragraph.Get_Theme(),
ColorMap = this.Paragraph.Get_ColorMap();
// Выставляем цвет обводки
if ( true === PDSL.VisitedHyperlink && ( undefined === this.Pr.Color && undefined === this.Pr.Unifill ) )
CurColor = new CDocumentColor( 128, 0, 151 );
else if ( true === CtrPrp.Color.Auto && !CtrPrp.Unifill)
CurColor = new CDocumentColor( AutoColor.r, AutoColor.g, AutoColor.b );
else
{
if(CtrPrp.Unifill)
{
CtrPrp.Unifill.check(Theme, ColorMap);
RGBA = CtrPrp.Unifill.getRGBAColor();
CurColor = new CDocumentColor( RGBA.R, RGBA.G, RGBA.B );
}
else
{
CurColor = new CDocumentColor( CtrPrp.Color.r, CtrPrp.Color.g, CtrPrp.Color.b );
}
}
var CurLine = PDSL.Line - this.StartLine;
var CurRange = ( 0 === CurLine ? PDSL.Range - this.StartRange : PDSL.Range );
var Bound = this.Bounds.Get_LineBound(CurLine, CurRange);
if ( true === bRemReview )
aStrikeout.Add( X, X + Bound.W, CurColor );
else if ( true === CtrPrp.DStrikeout )
aDStrikeout.Add( X, X + Bound.W, CurColor );
else if ( true === CtrPrp.Strikeout )
aStrikeout.Add( X, X + Bound.W, CurColor );
this.Draw_LinesForContent(PDSL);
PDSL.X = Bound.X + Bound.W;
};
CMathBase.prototype.Draw_LinesForContent = function(PDSL)
{
var CurLine = PDSL.Line - this.StartLine;
var CurRange = ( 0 === CurLine ? PDSL.Range - this.StartRange : PDSL.Range );
var StartPos, EndPos;
if(this.bOneLine)
{
StartPos = 0;
EndPos = this.Content.length - 1;
}
else
{
StartPos = this.protected_GetRangeStartPos(CurLine, CurRange);
EndPos = this.protected_GetRangeEndPos(CurLine, CurRange);
}
for ( var CurPos = StartPos; CurPos <= EndPos; CurPos++ )
this.Content[CurPos].Draw_Lines(PDSL);
};
CMathBase.prototype.Make_ShdColor = function(PDSE, CurTextPr)
{
var Para = PDSE.Paragraph;
var pGraphics = PDSE.Graphics;
var BgColor = PDSE.BgColor;
if ( undefined !== CurTextPr.Shd && Asc.c_oAscShdNil !== CurTextPr.Shd.Value )
BgColor = CurTextPr.Shd.Get_Color( Para );
var AutoColor = ( undefined != BgColor && false === BgColor.Check_BlackAutoColor() ? new CDocumentColor( 255, 255, 255, false ) : new CDocumentColor( 0, 0, 0, false ) );
var RGBA;
if(CurTextPr.FontRef && CurTextPr.FontRef.Color)
{
CurTextPr.FontRef.Color.check(PDSE.Theme, PDSE.ColorMap);
RGBA = CurTextPr.FontRef.Color.RGBA;
AutoColor = new CDocumentColor( RGBA.R, RGBA.G, RGBA.B, RGBA.A );
}
if(CurTextPr.Unifill)
{
CurTextPr.Unifill.check(PDSE.Theme, PDSE.ColorMap);
RGBA = CurTextPr.Unifill.getRGBAColor();
if ( true === PDSE.VisitedHyperlink && ( undefined === this.CtrPrp.Color && undefined === this.CtrPrp.Unifill ) )
{
AscFormat.G_O_VISITED_HLINK_COLOR.check(PDSE.Theme, PDSE.ColorMap);
RGBA = AscFormat.G_O_VISITED_HLINK_COLOR.getRGBAColor();
pGraphics.p_color( RGBA.R, RGBA.G, RGBA.B, RGBA.A );
pGraphics.b_color1( RGBA.R, RGBA.G, RGBA.B, RGBA.A );
}
else
{
pGraphics.p_color( RGBA.R, RGBA.G, RGBA.B, RGBA.A );
pGraphics.b_color1( RGBA.R, RGBA.G, RGBA.B, RGBA.A);
}
}
else
{
if ( true === PDSE.VisitedHyperlink && ( undefined === this.CtrPrp.Color && undefined === this.CtrPrp.Unifill ) )
{
AscFormat.G_O_VISITED_HLINK_COLOR.check(PDSE.Theme, PDSE.ColorMap);
RGBA = AscFormat.G_O_VISITED_HLINK_COLOR.getRGBAColor();
pGraphics.p_color( RGBA.R, RGBA.G, RGBA.B, RGBA.A );
pGraphics.b_color1( RGBA.R, RGBA.G, RGBA.B, RGBA.A );
}
else
{
if(!pGraphics.m_bIsTextDrawer || !CurTextPr.TextFill)
{
if ( true === CurTextPr.Color.Auto )
{
pGraphics.p_color( AutoColor.r, AutoColor.g, AutoColor.b, 255);
pGraphics.b_color1( AutoColor.r, AutoColor.g, AutoColor.b, 255);
}
else
{
pGraphics.p_color( CurTextPr.Color.r, CurTextPr.Color.g, CurTextPr.Color.b, 255);
pGraphics.b_color1( CurTextPr.Color.r, CurTextPr.Color.g, CurTextPr.Color.b, 255);
}
}
else if (pGraphics.m_bIsTextDrawer)
{
pGraphics.SetTextPr(CurTextPr, PDSE.Theme);
}
}
}
if (reviewtype_Common !== this.GetReviewType())
{
var ReviewColor = this.GetReviewColor();
pGraphics.p_color(ReviewColor.r, ReviewColor.g, ReviewColor.b, 255);
pGraphics.b_color1(ReviewColor.r, ReviewColor.g, ReviewColor.b, 255);
}
if(BgColor == undefined)
BgColor = new CDocumentColor( 255, 255, 255, false );
return BgColor;
};
CMathBase.prototype.protected_AddToContent = function(Pos, Items, bUpdatePosition)
{
AscCommon.History.Add(new CChangesMathBaseAddItems(this, Pos, Items));
this.raw_AddToContent(Pos, Items, bUpdatePosition);
this.private_UpdatePosOnAdd(Pos, bUpdatePosition);
};
CMathBase.prototype.protected_RemoveItems = function(Pos, Items, bUpdatePosition)
{
AscCommon.History.Add(new CChangesMathBaseRemoveItems(this, Pos, Items));
var Count = Items.length;
this.raw_RemoveFromContent(Pos, Count);
// Обновим текущую позицию
if (this.CurPos > Pos + Count)
this.CurPos -= Count;
else if (this.CurPos > Pos)
this.CurPos = Pos;
this.private_CorrectCurPos();
this.private_UpdatePosOnRemove(Pos, Count);
};
CMathBase.prototype.raw_AddToContent = function(Pos, Items, bUpdatePosition)
{
for (var Index = 0, Count = Items.length; Index < Count; Index++)
{
var Item = Items[Index];
this.Content.splice(Pos + Index, 0, Item);
if (Item.Set_ParaMath)
Item.Set_ParaMath(this.ParaMath);
if (Item.SetParagraph)
Item.SetParagraph(this.Paragraph);
Item.ParentElement = this;
}
this.fillContent();
};
CMathBase.prototype.raw_RemoveFromContent = function(Pos, Count)
{
this.Content.splice(Pos, Count);
this.fillContent();
};
CMathBase.prototype.raw_SetColumn = function(Value)
{
if(Value > 0)
this.Pr.Set_Column(Value);
};
CMathBase.prototype.Recalc_RunsCompiledPr = function()
{
this.RecalcInfo.bCtrPrp = true;
for(var i=0; i < this.nRow; i++)
for(var j = 0; j < this.nCol; j++)
{
var Item = this.elements[i][j];
if(!Item.IsJustDraw())
Item.Recalc_RunsCompiledPr();
}
};
CMathBase.prototype.GetLastElement = function()
{
return this;
};
CMathBase.prototype.GetFirstElement = function()
{
return this;
};
CMathBase.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
{
var WordLen = PRS.WordLen; // запоминаем, чтобы внутр мат объекты не увеличили WordLen
var bContainCompareOper = PRS.bContainCompareOper;
var bOneLine = PRS.bMath_OneLine;
this.bOneLine = this.bCanBreak == false || PRS.bMath_OneLine == true;
if(this.kind !== MATH_DELIMITER)
{
this.BrGapLeft = this.GapLeft;
this.BrGapRight = this.GapRight;
}
if(this.bOneLine == true)
{
PRS.bMath_OneLine = this.bOneLine;
for(var i=0; i < this.nRow; i++)
{
for(var j = 0; j < this.nCol; j++)
{
var Item = this.elements[i][j];
if(Item.IsJustDraw()) // для Just-Draw элементов надо выставить Font
{
this.MeasureJustDraw(Item);
}
else
{
Item.Recalculate_Reset(PRS.Range, PRS.Line, PRS); // обновим StartLine и StartRange
Item.Recalculate_Range(PRS, ParaPr, Depth);
}
}
}
this.recalculateSize(g_oTextMeasurer);
this.UpdatePRS_OneLine(PRS, WordLen, PRS.MathFirstItem);
this.Bounds.SetWidth(0, 0, this.size.width);
this.Bounds.UpdateMetrics(0, 0, this.size);
}
else
{
var CurLine = PRS.Line - this.StartLine;
var CurRange = ( 0 === CurLine ? PRS.Range - this.StartRange : PRS.Range );
this.setDistance();
var Numb = this.NumBreakContent;
var Len = this.Content.length;
var RangeStartPos = this.protected_AddRange(CurLine, CurRange),
RangeEndPos = Len - 1;
if(CurLine == 0 && CurRange == 0)
{
PRS.WordLen += this.BrGapLeft;
}
for(var Pos = RangeStartPos; Pos < Len; Pos++)
{
var Item = this.Content[Pos];
var NeedSetReset = CurLine == 0 && CurRange == 0 || Pos !== RangeStartPos;
if(Item.Type == para_Math_Content && NeedSetReset)
Item.Recalculate_Reset(PRS.Range, PRS.Line, PRS); // обновим StartLine и StartRange
if(Pos == Numb)
{
PRS.Update_CurPos(Pos, Depth);
PRS.bMath_OneLine = false;
Item.Recalculate_Range(PRS, ParaPr, Depth+1);
if(true === PRS.NewRange)
{
RangeEndPos = Numb;
break;
}
}
else
{
PRS.bMath_OneLine = true;
var WWordLen = PRS.WordLen;
Item.Recalculate_Range(PRS, ParaPr, Depth+1);
PRS.WordLen = WWordLen + Item.size.width;
PRS.Word = true;
}
if(PRS.NewRange == false && Pos < Len - 1)
PRS.WordLen += this.dW;
}
if(PRS.NewRange == false)
{
PRS.WordLen += this.BrGapRight;
}
this.protected_FillRange(CurLine, CurRange, RangeStartPos, RangeEndPos);
}
PRS.bMath_OneLine = bOneLine;
PRS.bContainCompareOper = bContainCompareOper;
};
CMathBase.prototype.RecalculateMinMaxContentWidth = function(MinMax)
{
if(this.kind !== MATH_DELIMITER)
{
this.BrGapLeft = this.GapLeft;
this.BrGapRight = this.GapRight;
}
let mathContent = this.Content[this.NumBreakContent];
if (mathContent)
{
// Всю формулу воспринимаем как слово
MinMax.addLetter(this.BrGapLeft);
mathContent.RecalculateMinMaxContentWidth(MinMax);
MinMax.addLetter(this.BrGapRight);
}
else
{
MinMax.addLetter(this.size.width);
}
};
CMathBase.prototype.MeasureJustDraw = function(Item)
{
var ctrPrp = this.Get_TxtPrControlLetter();
var Font =
{
FontSize: ctrPrp.FontSize,
FontFamily: {Name : ctrPrp.FontFamily.Name, Index : ctrPrp.FontFamily.Index},
Italic: false,
Bold: false //ctrPrp.Bold
};
g_oTextMeasurer.SetFont(Font);
Item.Measure(g_oTextMeasurer);
};
CMathBase.prototype.UpdatePRS_OneLine = function(PRS, WordLen)
{
if(this.bInside == false)
{
PRS.WordLen = WordLen + this.size.width;
PRS.MathFirstItem = false;
}
};
CMathBase.prototype.Recalculate_Range_OneLine = function(PRS, ParaPr, Depth)
{
this.Recalculate_Range(PRS, ParaPr, Depth);
};
CMathBase.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine, _CurRange, ContentMetrics)
{
var CurLine = _CurLine - this.StartLine;
var CurRange = (0 === CurLine ? _CurRange - this.StartRange : _CurRange);
if(PRS.bFastRecalculate === false)
{
this.Bounds.Reset(CurLine, CurRange);
}
var StartPos, EndPos;
if(this.bOneLine)
{
var NewContentMetrics = new CMathBoundsMeasures();
for (var CurPos = 0; CurPos < this.Content.length; CurPos++)
{
this.Content[CurPos].Recalculate_LineMetrics(PRS, ParaPr, _CurLine, _CurRange, NewContentMetrics);
}
//this.Bounds.UpdateMetrics(CurLine, CurRange, this.size);
this.Bounds.UpdateMetrics(0, 0, this.size);
// чтобы внутр объекты не перебили метрики (например, у внутр мат объекта Asc может быть больше Asc текущего объекта)
ContentMetrics.UpdateMetrics(this.size);
if(this.Parent.bRoot)
{
this.UpdatePRS(PRS, this.size);
}
}
else
{
StartPos = this.protected_GetRangeStartPos(CurLine, CurRange);
EndPos = this.protected_GetRangeEndPos(CurLine, CurRange);
for (var CurPos = StartPos; CurPos <= EndPos; CurPos++)
{
var Item = this.Content[CurPos];
Item.Recalculate_LineMetrics(PRS, ParaPr, _CurLine, _CurRange, ContentMetrics);
var BoundItem = Item.Get_LineBound(_CurLine, _CurRange);
this.Bounds.UpdateMetrics(CurLine, CurRange, BoundItem);
//ContentMetrics.UpdateMetrics(BoundItem);
this.UpdatePRS(PRS, BoundItem);
}
}
};
CMathBase.prototype.Math_UpdateLineMetrics = function(PRS, paraPr)
{
};
CMathBase.prototype.IsEmptyRange = function(nCurLine, nCurRange)
{
if (!this.bOneLine)
return this.Content[this.NumBreakContent].IsEmptyRange(nCurLine, nCurRange);
return false;
};
CMathBase.prototype.Get_LineBound = function(_CurLine, _CurRange)
{
var CurLine = _CurLine - this.StartLine;
var CurRange = ( 0 === CurLine ? _CurRange - this.StartRange : _CurRange );
return this.Bounds.Get_LineBound(CurLine, CurRange);
};
CMathBase.prototype.UpdatePRS = function(PRS, Metric)
{
var MetricAsc = Metric.Type == MATH_SIZE ? Metric.ascent : Metric.Asc;
var MetricDesc = Metric.Type == MATH_SIZE ? Metric.height - Metric.ascent : Metric.H - Metric.Asc;
if(PRS.LineAscent < MetricAsc)
PRS.LineAscent = MetricAsc;
if(PRS.LineDescent < MetricDesc)
PRS.LineDescent = MetricDesc;
};
CMathBase.prototype.UpdateMetrics = function(PRS, Size)
{
if(PRS.LineAscent < Size.ascent)
PRS.LineAscent = Size.ascent;
if(PRS.LineDescent < Size.height - Size.ascent)
PRS.LineDescent = Size.height - Size.ascent;
};
CMathBase.prototype.Recalculate_Range_Width = function(PRSC, _CurLine, _CurRange)
{
var RangeW = PRSC.Range.W;
var CurLine = _CurLine - this.StartLine;
var CurRange = ( 0 === CurLine ? _CurRange - this.StartRange : _CurRange );
if(this.bOneLine)
{
for (var Pos = 0; Pos <= this.Content.length - 1; Pos++)
{
this.Content[Pos].Recalculate_Range_Width( PRSC, _CurLine, _CurRange );
}
PRSC.Range.W = RangeW + this.size.width;
}
else
{
var StartPos = this.protected_GetRangeStartPos(CurLine, CurRange);
var EndPos = this.protected_GetRangeEndPos(CurLine, CurRange);
if(CurLine == 0 && CurRange == 0)
PRSC.Range.W += this.BrGapLeft;
for (var CurPos = StartPos; CurPos <= EndPos; CurPos++)
{
this.Content[CurPos].Recalculate_Range_Width( PRSC, _CurLine, _CurRange );
}
PRSC.Range.W += this.dW*(EndPos - StartPos);
// Здесь проверяем не на то, что это последний Range (т.к. на данном этапе еще идет вычисление строк) а на конец контента !
var Len = this.Content.length;
var EndBrContentEnd = this.NumBreakContent == EndPos && this.Content[EndPos].Math_Is_End( _CurLine, _CurRange),
NotBrContent = this.NumBreakContent !== EndPos;
var bEnd = EndBrContentEnd || NotBrContent;
if(EndPos == Len - 1 && true === bEnd)
{
PRSC.Range.W += this.BrGapRight;
}
}
this.Bounds.SetWidth(CurLine, CurRange, PRSC.Range.W - RangeW);
};
CMathBase.prototype.UpdateOperators = function(_CurLine, _CurRange, bEmptyGapLeft, bEmptyGapRight)
{
if(this.bOneLine == false)
{
// Content[this.NumBreakContent] должен содержаться в каждой строке многострочного объекта
this.Content[this.NumBreakContent].UpdateOperators(_CurLine, _CurRange, bEmptyGapLeft, bEmptyGapRight);
}
};
CMathBase.prototype.IsShade = function()
{
var oShd = this.Get_CompiledCtrPrp().Shd;
return !(oShd === undefined || Asc.c_oAscShdNil === oShd.Value);
};
CMathBase.prototype.Get_Range_VisibleWidth = function(RangeW, _CurLine, _CurRange)
{
if(this.bOneLine)
{
RangeW.W += this.size.width;
}
else
{
var CurLine = _CurLine - this.StartLine;
var CurRange = ( 0 === CurLine ? _CurRange - this.StartRange : _CurRange );
var StartPos = this.protected_GetRangeStartPos(CurLine, CurRange);
var EndPos = this.protected_GetRangeEndPos(CurLine, CurRange);
for (var CurPos = StartPos; CurPos <= EndPos; CurPos++ )
{
this.Content[CurPos].Get_Range_VisibleWidth(RangeW, _CurLine, _CurRange);
}
}
};
CMathBase.prototype.Displace_BreakOperator = function(isForward, bBrkBefore, CountOperators)
{
if (!this.Content[this.NumBreakContent])
return;
this.Content[this.NumBreakContent].Displace_BreakOperator(isForward, bBrkBefore, CountOperators);
};
CMathBase.prototype.Get_AlignBrk = function(_CurLine, bBrkBefore)
{
if (!this.Content[this.NumBreakContent])
return null;
return this.Content[this.NumBreakContent].Get_AlignBrk(_CurLine, bBrkBefore);
};
CMathBase.prototype.raw_SetReviewInfo = function(reviewInfo)
{
this.ReviewInfo = reviewInfo;
this.updateTrackRevisions();
};
CMathBase.prototype.GetReviewType = function()
{
let reviewInfo = this.GetReviewInfo();
return reviewInfo ? reviewInfo.getType() : reviewtype_Common;
};
CMathBase.prototype.GetReviewInfo = function()
{
if (this.Id)
return this.ReviewInfo;
else if (this.Parent && this.Parent.GetReviewInfo)
return this.Parent.GetReviewInfo();
return new AscWord.ReviewInfo();
};
CMathBase.prototype.GetReviewMoveType = function()
{
return this.GetReviewInfo().MoveType;
};
CMathBase.prototype.GetReviewColor = function()
{
if (this.Id)
{
if (this.ReviewInfo)
return this.ReviewInfo.Get_Color();
else
return new CDocumentColor(255, 0, 0);
}
else if (this.Parent && this.Parent.GetReviewColor)
{
return this.Parent.GetReviewColor();
}
return REVIEW_COLOR;
};
CMathBase.prototype.SetReviewType = function(reviewType, isSetToContent)
{
if (!this.Id)
return;
if (false !== isSetToContent)
CParagraphContentWithParagraphLikeContent.prototype.SetReviewType.apply(this, arguments);
if (reviewType === this.GetReviewType())
return;
let oldInfo = this.GetReviewInfo();
let newInfo = undefined;
if (reviewType !== reviewtype_Common)
{
newInfo = new AscWord.ReviewInfo();
newInfo.setType(reviewType);
newInfo.Update();
}
AscCommon.History.Add(new CChangesMathBaseReviewInfo(this, oldInfo ? oldInfo.Copy() : undefined, newInfo ? newInfo.Copy() : undefined));
this.raw_SetReviewInfo(newInfo);
};
CMathBase.prototype.SetReviewTypeWithInfo = function(reviewType, reviewInfo)
{
if (!this.Id)
return;
CParagraphContentWithParagraphLikeContent.prototype.SetReviewTypeWithInfo.apply(this, arguments);
let oldInfo = this.GetReviewInfo();
if (reviewType === reviewtype_Common)
reviewInfo = undefined;
else if (!reviewInfo)
reviewInfo = new AscWord.ReviewInfo();
if (reviewInfo)
reviewInfo.setType(reviewType);
AscCommon.History.Add(new CChangesMathBaseReviewInfo(this, oldInfo ? oldInfo.Copy() : undefined, reviewInfo ? reviewInfo.Copy() : undefined));
this.raw_SetReviewInfo(reviewInfo);
};
CMathBase.prototype.CheckRevisionsChanges = function(Checker, ContentPos, Depth)
{
var ReviewType = this.GetReviewType();
if (true !== Checker.Is_CheckOnlyTextPr())
{
if (Checker.IsStopAddRemoveChange(ReviewType, this.GetReviewInfo()))
{
Checker.FlushAddRemoveChange();
ContentPos.Update(0, Depth);
if (reviewtype_Add === ReviewType || reviewtype_Remove === ReviewType)
{
this.Get_StartPos(ContentPos, Depth);
Checker.StartAddRemove(ReviewType, ContentPos, this.GetReviewMoveType());
}
}
if (reviewtype_Add === ReviewType || reviewtype_Remove === ReviewType)
{
Checker.Add_Math(this);
Checker.Update_AddRemoveReviewInfo(this.ReviewInfo);
this.Get_EndPos(false, ContentPos, Depth);
Checker.Set_AddRemoveEndPos(ContentPos);
// Нам нужно проставить конечную позицию в начало следующего рана, чтобы выделился данный элемент целиком
if (this.Paragraph)
{
var TempContentPos = this.Paragraph.Get_PosByElement(this);
if (TempContentPos)
{
var InParentPos = TempContentPos.Get(TempContentPos.GetDepth());
TempContentPos.DecreaseDepth(1);
var Parent = this.Paragraph.Get_ElementByPos(TempContentPos);
if (Parent && Parent.Content && this === Parent.Content[InParentPos] && Parent.Content[InParentPos + 1] && para_Math_Run === Parent.Content[InParentPos + 1].Type)
{
ContentPos.Update(InParentPos + 1, Depth - 1);
Parent.Content[InParentPos + 1].Get_StartPos(ContentPos, Depth);
Checker.Set_AddRemoveEndPos(ContentPos);
}
}
}
}
}
if (reviewtype_Common !== ReviewType)
Checker.Begin_CheckOnlyTextPr();
CParagraphContentWithParagraphLikeContent.prototype.CheckRevisionsChanges.apply(this, arguments);
if (reviewtype_Common !== ReviewType)
Checker.End_CheckOnlyTextPr();
};
CMathBase.prototype.AcceptRevisionChanges = function(Type, bAll)
{
var ReviewType = this.ReviewType;
if (reviewtype_Add === ReviewType && (undefined === Type || c_oAscRevisionsChangeType.TextAdd === Type))
{
this.SetReviewType(reviewtype_Common, false);
}
else if (reviewtype_Remove === ReviewType && (undefined === Type || c_oAscRevisionsChangeType.TextRem === Type))
{
var Parent = this.Get_Parent();
var PosInParent = this.Get_PosInParent(Parent);
if (!Parent || -1 === PosInParent)
{
this.SetReviewType(reviewtype_Common, false);
}
else
{
Parent.Remove_FromContent(PosInParent, 1);
return;
}
}
CParagraphContentWithParagraphLikeContent.prototype.AcceptRevisionChanges.apply(this, arguments);
};
CMathBase.prototype.RejectRevisionChanges = function(Type, bAll)
{
var ReviewType = this.ReviewType;
if (reviewtype_Remove === ReviewType && (undefined === Type || c_oAscRevisionsChangeType.TextRem === Type))
{
this.SetReviewType(reviewtype_Common, false);
}
else if (reviewtype_Add === ReviewType && (undefined === Type || c_oAscRevisionsChangeType.TextAdd === Type))
{
var Parent = this.Get_Parent();
var PosInParent = this.Get_PosInParent(Parent);
if (!Parent || -1 === PosInParent)
{
this.SetReviewType(reviewtype_Common, false);
}
else
{
Parent.Remove_FromContent(PosInParent, 1);
return;
}
}
CParagraphContentWithParagraphLikeContent.prototype.RejectRevisionChanges.apply(this, arguments);
};
CMathBase.prototype.Set_MenuProps = function(Props)
{
this.Apply_ForcedBreak(Props);
if(this.Selection.Use == false)
{
this.Content[this.CurPos].Set_MenuProps(Props);
}
else if(this.Selection.Use == true && this.Selection.StartPos == this.Selection.EndPos)
{
var Pos = this.Selection.StartPos;
this.Content[Pos].Set_MenuProps(Props);
}
};
CMathBase.prototype.Can_ApplyMenuPropsToObject = function()
{
var bApplyToCurrent = false;
if(this.Selection.Use == true && this.Selection.StartPos !== this.Selection.EndPos)
{
bApplyToCurrent = true;
}
else
{
var Pos = this.Selection.Use == false ? this.CurPos : this.Selection.StartPos;
bApplyToCurrent = true === this.Content[Pos].Is_CurrentContent();
}
return bApplyToCurrent;
};
CMathBase.prototype.Get_MenuProps = function()
{
var Pr = {};
var Pos = null;
if(this.Selection.Use == false)
{
Pos = this.CurPos;
}
else if(this.Selection.StartPos == this.Selection.EndPos)
{
Pos = this.Selection.StartPos;
}
var bOutsideComposition = Pos !== null && true == this.Content[Pos].Check_Composition(),
bSelectAllComposition = Pos == null;
if(bOutsideComposition)
{
Pr = this.Content[Pos].Get_MenuProps();
this.Can_ModifyForcedBreak(Pr);
}
else if(bSelectAllComposition == false)
{
Pr = this.Get_InterfaceProps();
this.Content[Pos].Can_ModifyForcedBreak(Pr);
}
else
{
Pr = this.Get_InterfaceProps();
}
return Pr;
};
CMathBase.prototype.Apply_MenuProps = function()
{};
CMathBase.prototype.Can_ModifyForcedBreak = function(Pr)
{
};
CMathBase.prototype.Apply_ForcedBreak = function()
{
};
CMathBase.prototype.Get_DeletedItemsThroughInterface = function()
{
var baseContent = this.getBase();
var DeletedItems = baseContent !== null ? baseContent.Content : null;
return DeletedItems;
};
CMathBase.prototype.Can_DecreaseArgumentSize = function()
{
var bDecreaseArgSize = false;
if(true === this.Can_ModifyArgSize())
{
var CompiledArgSize = this.Content[this.CurPos].Get_CompiledArgSize();
bDecreaseArgSize = CompiledArgSize.Can_Decrease();
}
return bDecreaseArgSize;
};
CMathBase.prototype.Can_IncreaseArgumentSize = function()
{
var bIncreaseArgSize = false;
if(true === this.Can_ModifyArgSize())
{
var CompiledArgSize = this.Content[this.CurPos].Get_CompiledArgSize();
bIncreaseArgSize = CompiledArgSize.Can_Increase();
}
return bIncreaseArgSize;
};
CMathBase.prototype.Get_InterfaceProps = function()
{
return new CMathMenuBase();
};
CMathBase.prototype.Can_ModifyArgSize = function()
{
return false;
};
CMathBase.prototype.Is_SelectInside = function()
{
return this.Selection.Use == true && this.Selection.StartPos !== this.Selection.EndPos;
};
CMathBase.prototype.Can_InsertForcedBreak = function()
{
return false;
};
CMathBase.prototype.Can_DeleteForcedBreak = function()
{
return false;
};
CMathBase.prototype.Correct_ContentCurPos = function()
{
for(var Pos = 0; Pos < this.Content.length; Pos++)
{
this.Content[Pos].Correct_ContentCurPos();
}
};
CMathBase.prototype.Math_Set_EmptyRange = CMathContent.prototype.Math_Set_EmptyRange;
CMathBase.prototype.Set_ParaMath = CMathContent.prototype.Set_ParaMath;
CMathBase.prototype.Recalculate_Reset = CMathContent.prototype.Recalculate_Reset;
CMathBase.prototype.Set_ParaContentPos = CMathContent.prototype.Set_ParaContentPos;
CMathBase.prototype.GetCurrentParaPos = CMathContent.prototype.GetCurrentParaPos;
CMathBase.prototype.private_UpdatePosOnAdd = CMathContent.prototype.private_UpdatePosOnAdd;
CMathBase.prototype.private_UpdatePosOnRemove = CMathContent.prototype.private_UpdatePosOnRemove;
CMathBase.prototype.private_CorrectSelectionPos = CMathContent.prototype.private_CorrectSelectionPos;
CMathBase.prototype.private_CorrectCurPos = function()
{
if (this.CurPos > this.Content.length - 1)
{
this.CurPos = this.Content.length - 1;
this.Content[this.CurPos].MoveCursorToEndPos(false);
}
if (this.CurPos < 0)
{
this.CurPos = this.Content.length - 1;
this.Content[this.CurPos].MoveCursorToStartPos();
}
};
CMathBase.prototype.Selection_CheckParaContentPos = function(ContentPos, Depth, bStart, bEnd)
{
if (true !== this.Selection.Use)
return false;
var CurPos = ContentPos.Get(Depth);
if (this.Selection.StartPos === this.Selection.EndPos && this.Selection.StartPos === CurPos)
return this.Content[CurPos].Selection_CheckParaContentPos(ContentPos, Depth + 1, bStart, bEnd);
if (this.Selection.StartPos !== this.Selection.EndPos)
return true;
return false;
};
CMathBase.prototype.Is_ContentUse = function(MathContent)
{
for (var Pos = 0, Count = this.Content.length; Pos < Count; Pos++)
{
if (MathContent === this.Content[Pos])
return true;
}
return false;
};
CMathBase.prototype.Is_FromDocument = function()
{
return (this.ParaMath && this.ParaMath.Paragraph && this.ParaMath.Paragraph.bFromDocument);
};
CMathBase.prototype.Clear_ContentChanges = function()
{
this.m_oContentChanges.Clear();
};
CMathBase.prototype.Add_ContentChanges = function(Changes)
{
this.m_oContentChanges.Add(Changes);
};
CMathBase.prototype.Refresh_ContentChanges = function()
{
this.m_oContentChanges.Refresh();
};
CMathBase.prototype.ConvertStrToOperator= function(text)
{
var aUnicode = AscCommon.convertUTF16toUnicode(text);
return (aUnicode.length <= 0 ? OPERATOR_EMPTY : aUnicode[0]);
};
CMathBase.prototype.ConvertOperatorToStr = function(operator)
{
if (null == operator) {
return operator;
}
return OPERATOR_EMPTY === operator ? "" : AscCommon.convertUnicodeToUTF16([operator]);
};
CMathBase.prototype.GetTextOfElement = function(oMathText)
{
oMathText = new AscMath.MathTextAndStyles(oMathText);
return oMathText;
};
CMathBase.prototype.CheckRunContent = function (fCheck, oStartPos, oEndPos, nDepth, oCurrentPos, isForward)
{
if (undefined === isForward)
isForward = true;
let nStartPos = oStartPos && oStartPos.GetDepth() >= nDepth ? oStartPos.Get(nDepth) : 0;
let nEndPos = oEndPos && oEndPos.GetDepth() >= nDepth ? oEndPos.Get(nDepth) : this.Content.length - 1;
if (isForward)
{
for (var nPos = nStartPos; nPos <= nEndPos; ++nPos)
{
let _s = oStartPos && nPos === nStartPos ? oStartPos : null;
let _e = oEndPos && nPos === nEndPos ? oEndPos : null;
if (oCurrentPos)
oCurrentPos.Update(nPos, nDepth);
if (this.Content[nPos].CheckRunContent(fCheck, _s, _e, nDepth + 1, oCurrentPos, isForward))
return true;
}
}
else
{
for (var nPos = nEndPos; nPos >= nStartPos; --nPos)
{
let _s = oStartPos && nPos === nStartPos ? oStartPos : null;
let _e = oEndPos && nPos === nEndPos ? oEndPos : null;
if (oCurrentPos)
oCurrentPos.Update(nPos, nDepth);
if (this.Content[nPos].CheckRunContent(fCheck, _s, _e, nDepth + 1, oCurrentPos, isForward))
return true;
}
}
};
function CMathBasePr()
{
}
CMathBasePr.prototype.Set_FromObject = function(Obj){};
CMathBasePr.prototype.Copy = function(){return new CMathBasePr();};
CMathBasePr.prototype.Write_ToBinary = function(Writer){};
CMathBasePr.prototype.Read_FromBinary = function(Reader){};
function CMathBounds()
{
this.Bounds = [];
}
CMathBounds.prototype.Reset = function(CurLine, CurRange)
{
if(CurRange == 0)
this.Bounds.length = CurLine;
};
CMathBounds.prototype.CheckLineBound = function(Line, Range)
{
if(this.Bounds.length <= Line)
{
this.Bounds[Line] = [];
}
else if (undefined === this.Bounds[Line])
{
this.Bounds[Line] = [];
}
if(this.Bounds[Line].length <= Range)
{
this.Bounds[Line][Range] = new CMathBoundsMeasures();
}
};
CMathBounds.prototype.UpdateMetrics = function(Line, Range, Metric)
{
this.CheckLineBound(Line, Range);
this.Bounds[Line][Range].UpdateMetrics(Metric);
};
CMathBounds.prototype.SetWidth = function(Line, Range, Width)
{
this.CheckLineBound(Line, Range);
this.Bounds[Line][Range].SetWidth(Width);
};
CMathBounds.prototype.SetPage = function(Line, Range, Page)
{
this.CheckLineBound(Line);
this.Bounds[Line][Range].SetPage(Page);
};
CMathBounds.prototype.GetWidth = function(Line, Range)
{
this.CheckLineBound(Line);
return this.Bounds[Line][Range].W;
};
CMathBounds.prototype.GetAscent = function(Line, Range)
{
this.CheckLineBound(Line);
return this.Bounds[Line][Range].Asc;
};
CMathBounds.prototype.GetDescent = function(Line, Range)
{
this.CheckLineBound(Line);
return this.Bounds[Line][Range].H - this.Bounds[Line][Range].Asc;
};
CMathBounds.prototype.ShiftPage = function(Dx)
{
var CountLines = this.Bounds.length;
for(var CurLine = 0; CurLine < CountLines; CurLine++)
{
var CountRanges = this.Bounds[CurLine].length;
for(var CurRange = 0; CurRange < CountRanges; CurRange++)
{
this.Bounds[CurLine][CurRange].ShiftPage(Dx);
}
}
};
CMathBounds.prototype.Get_Bounds = function()
{
return this.Bounds;
};
CMathBounds.prototype.Get_LineBound = function(CurLine, CurRange)
{
var Bound;
if(CurLine < this.Bounds.length && CurRange < this.Bounds[CurLine].length)
{
Bound = this.Bounds[CurLine][CurRange];
}
else // заглушка, если еще не пересчитали, а запрос Bonds пришел (например, на поиске)
{
Bound = new CMathBoundsMeasures();
}
return Bound;
};
CMathBounds.prototype.SetPos = function(Line, Range, Pos)
{
this.CheckLineBound(Line, Range);
this.Bounds[Line][Range].SetPos(Pos);
};
CMathBounds.prototype.SetGenPos = function(Line, Range, PRSA)
{
this.CheckLineBound(Line, Range);
this.Bounds[Line][Range].SetGenPos(PRSA);
};
CMathBounds.prototype.ShiftPos = function(Line, Range, Dx, Dy)
{
this.CheckLineBound(Line, Range);
this.Bounds[Line][Range].ShiftPos(Dx, Dy);
};
CMathBounds.prototype.GetPos = function(Line, Range)
{
this.CheckLineBound(Line);
var Pos = new CMathPosition();
Pos.x = this.Bounds[Line][Range].GetX();
Pos.y = this.Bounds[Line][Range].GetY();
return Pos;
};
function CMathBoundsMeasures()
{
this.Type = MATH_BOUNDS_MEASURES;
// нужны ля расчета выравниваний относительно операторов
this._X = 0;
this._Y = 0;
// необходимы для отрисовки рамки, подсветки
this.X = 0;
this.Y = 0;
this.W = 0;
this.H = 0;
this.Asc = 0;
this.Page = 0;
}
CMathBoundsMeasures.prototype.UpdateMetrics = function(Metric)
{
var MetricH = Metric.Type == MATH_SIZE ? Metric.height : Metric.H;
var MetricAsc = Metric.Type == MATH_SIZE ? Metric.ascent : Metric.Asc;
var Descent = this.H - this.Asc;
var MetricDescent = MetricH - MetricAsc;
if(this.Asc < MetricAsc)
this.Asc = MetricAsc;
if(Descent < MetricDescent)
{
this.H = MetricDescent + this.Asc;
}
else
{
this.H = Descent + this.Asc;
}
};
CMathBoundsMeasures.prototype.SetWidth = function(Width)
{
this.W = Width;
};
CMathBoundsMeasures.prototype.SetGenPos = function(PRSA)
{
this.X = PRSA.X + this._X;
this.Y = PRSA.Y + this._Y;
};
CMathBoundsMeasures.prototype.SetPos = function(Pos)
{
this._X = Pos.x;
this._Y = Pos.y - this.Asc;
};
CMathBoundsMeasures.prototype.ShiftPos = function(Dx, Dy)
{
this.X += Dx;
this.Y += Dy;
};
CMathBoundsMeasures.prototype.GetX = function()
{
return this.X;
};
CMathBoundsMeasures.prototype.GetY = function()
{
return this.Y + this.Asc;
};
CMathBoundsMeasures.prototype.SetPage = function(Page)
{
this.Page = Page;
};
CMathBoundsMeasures.prototype.ShiftPage = function(Dx)
{
this.Page += Dx;
};
function CEmptyRunRecalculateObject(StartLine, StartRange)
{
this.StartLine = StartLine;
this.StartRange = StartRange;
this.Lines = [];
this.Content = [];
this.WrapState = ALIGN_EMPTY;
}
CEmptyRunRecalculateObject.prototype =
{
Save_Lines : function(Obj, Copy)
{
},
Save_Content : function(Obj, Copy)
{
},
Save_WrapState: function(Obj, Copy)
{
},
Load_Lines : function(Obj)
{
},
Load_Content : function(Obj)
{
},
Load_WrapState: function(Obj)
{
},
SaveRunContent : function(Run, Copy)
{
},
LoadRunContent : function(Run)
{
},
Get_DrawingFlowPos : function(FlowPos)
{
},
Compare : function(_CurLine, _CurRange, OtherLinesInfo)
{
return true;
}
};
var c_oMathMenuAction = {
None : 0x00000000,
RemoveAccentCharacter : 0x00000001,
RemoveBar : 0x00000002,
InsertMatrixRow : 0x00000004,
InsertMatrixColumn : 0x00000008,
InsertBefore : 0x00000010,
DeleteMatrixRow : 0x00000020,
DeleteMatrixColumn : 0x00000040,
InsertEquation : 0x00000080,
DeleteEquation : 0x00000100,
InsertDelimiterArgument : 0x00000200,
DeleteDelimiterArgument : 0x00000400,
IncreaseArgumentSize : 0x00000800,
DecreaseArgumentSize : 0x00001000,
InsertForcedBreak : 0x00002000,
DeleteForcedBreak : 0x00004000,
AlignToCharacter : 0x00008000,
RemoveDelimiter : 0x00010000,
RemoveRadical : 0x00020000
};
function CMathMenuBase(oMath)
{
this.Type = Asc.c_oAscMathInterfaceType.Common;
this.Action = c_oMathMenuAction.None;
if(oMath == undefined)
{
this.CanIncreaseArgumentSize = false;
this.CanDecreaseArgumentSize = false;
this.CanInsertForcedBreak = false;
this.CanDeleteForcedBreak = false;
this.CanAlignToCharacter = false;
}
else
{
this.CanIncreaseArgumentSize = oMath.Can_IncreaseArgumentSize();
this.CanDecreaseArgumentSize = oMath.Can_DecreaseArgumentSize();
this.CanInsertForcedBreak = oMath.Can_InsertForcedBreak();
this.CanDeleteForcedBreak = oMath.Can_DeleteForcedBreak();
this.CanAlignToCharacter = false;
}
}
CMathMenuBase.prototype.get_Type = function()
{
return this.Type;
};
CMathMenuBase.prototype.remove_AccentCharacter = function()
{
this.Action |= c_oMathMenuAction.RemoveAccentCharacter;
};
CMathMenuBase.prototype.remove_Bar = function()
{
this.Action |= c_oMathMenuAction.RemoveBar;
};
CMathMenuBase.prototype.insert_MatrixRow = function(bBefore)
{
if (bBefore)
this.Action |= c_oMathMenuAction.InsertBefore;
this.Action |= c_oMathMenuAction.InsertMatrixRow;
};
CMathMenuBase.prototype.insert_MatrixColumn = function(bBefore)
{
if (bBefore)
this.Action |= c_oMathMenuAction.InsertBefore;
this.Action |= c_oMathMenuAction.InsertMatrixColumn;
};
CMathMenuBase.prototype.delete_MatrixRow = function()
{
this.Action |= c_oMathMenuAction.DeleteMatrixRow;
};
CMathMenuBase.prototype.delete_MatrixColumn = function()
{
this.Action |= c_oMathMenuAction.DeleteMatrixColumn;
};
CMathMenuBase.prototype.insert_Equation = function(bBefore)
{
if (bBefore)
this.Action |= c_oMathMenuAction.InsertBefore;
this.Action |= c_oMathMenuAction.InsertEquation;
};
CMathMenuBase.prototype.delete_Equation = function()
{
this.Action |= c_oMathMenuAction.DeleteEquation;
};
CMathMenuBase.prototype.insert_DelimiterArgument = function(bBefore)
{
if (bBefore)
this.Action |= c_oMathMenuAction.InsertBefore;
this.Action |= c_oMathMenuAction.InsertDelimiterArgument;
};
CMathMenuBase.prototype.delete_DelimiterArgument = function()
{
this.Action |= c_oMathMenuAction.DeleteDelimiterArgument;
};
CMathMenuBase.prototype.can_IncreaseArgumentSize = function()
{
return this.CanIncreaseArgumentSize;
};
CMathMenuBase.prototype.can_DecreaseArgumentSize = function()
{
return this.CanDecreaseArgumentSize;
};
CMathMenuBase.prototype.increase_ArgumentSize = function()
{
this.Action |= c_oMathMenuAction.IncreaseArgumentSize;
};
CMathMenuBase.prototype.decrease_ArgumentSize = function()
{
this.Action |= c_oMathMenuAction.DecreaseArgumentSize;
};
CMathMenuBase.prototype.can_InsertManualBreak = function()
{
return this.CanInsertForcedBreak;
};
CMathMenuBase.prototype.can_DeleteManualBreak = function()
{
return this.CanDeleteForcedBreak;
};
CMathMenuBase.prototype.can_AlignToCharacter = function()
{
return this.CanAlignToCharacter;
};
CMathMenuBase.prototype.insert_ManualBreak = function()
{
this.Action |= c_oMathMenuAction.InsertForcedBreak;
};
CMathMenuBase.prototype.delete_ManualBreak = function()
{
this.Action |= c_oMathMenuAction.DeleteForcedBreak;
};
CMathMenuBase.prototype.align_ToCharacter = function()
{
this.Action |= c_oMathMenuAction.AlignToCharacter;
};
CMathMenuBase.prototype.remove_DelimiterCharacters = function()
{
this.Action |= c_oMathMenuAction.RemoveDelimiter;
};
CMathMenuBase.prototype.remove_Radical = function()
{
this.Action |= c_oMathMenuAction.RemoveRadical;
};
CMathMenuBase.prototype.Set_InsertForcedBreak = function()
{
this.CanInsertForcedBreak = true;
this.CanDeleteForcedBreak = false;
};
CMathMenuBase.prototype.Set_DeleteForcedBreak = function()
{
this.CanInsertForcedBreak = false;
this.CanDeleteForcedBreak = true;
};
/**
* ctrlPr - Control Properties
* @constructor
*/
function CMathCtrlPr(ctrPr)
{
this.rPr = ctrPr || new CTextPr(); //по умолчанию должен наследоваться от текущего абзаца
this.del = new CTextPr();
this.ins = new CTextPr();
}
/**
* Set Run Properties
* rPr set properties of control characters that cannot be selected.
* Examples of control characters are n-ary operators (excluding their limits and bases),
* fraction bars (excluding the numerator and denominator), and grouping characters (excluding the base).
* @param rPr {CTextPr}
* @constructor
*/
CMathCtrlPr.prototype.SetRPr = function (rPr)
{
if (!rPr)
return;
this.rPr = rPr;
}
/**
* Get current rPr
* @return {CTextPr}
* @constructor
*/
CMathCtrlPr.prototype.GetRPr = function ()
{
return this.rPr;
}
/**
* Deleted Math Control Character
*
* This element specifies that the Office Open XML Math control character which contains this element was
* deleted and tracked as a revision
*
* @param delPr {CTextPr}
* @constructor
*/
CMathCtrlPr.prototype.SetDel = function (delPr)
{
this.del = delPr
}
/**
* Inserted Math Control Character
*
* This element specifies that the Office Open XML Math control character which contains this element was
* inserted and tracked as a revision.
* @param insPr {CTextPr}
* @constructor
*/
CMathCtrlPr.prototype.SetIns = function (insPr)
{
this.ins = insPr;
}
/**
*
* @param Obj {Object}
* @param Obj.rPr {CTextPr | undefined}
* @param Obj.delPr {CTextPr | undefined}
* @param Obj.insPr {CTextPr | undefined}
* @constructor
*/
CMathCtrlPr.prototype.SetFromObject = function (Obj)
{
if (Obj.rPr !== undefined)
{
this.rPr = Obj.rPr;
}
if (Obj.delPr !== undefined)
{
this.delPr = Obj.delPr;
}
if (Obj.insPr !== undefined)
{
this.insPr = Obj.insPr;
}
}
CMathCtrlPr.prototype.Write_ToBinary = function (Writer)
{
if (this.rPr)
{
Writer.WriteBool(true);
this.rPr.WriteToBinary(Writer);
}
else
{
Writer.WriteBool(false);
}
if (this.del)
{
Writer.WriteBool(true);
this.del.WriteToBinary(Writer);
}
else
{
Writer.WriteBool(false);
}
if (this.ins)
{
Writer.WriteBool(true);
this.ins.WriteToBinary(Writer);
}
else
{
Writer.WriteBool(false);
}
}
CMathCtrlPr.prototype.Read_FromBinary = function (Reader)
{
this.rPr = undefined;
if (Reader.GetBool())
{
this.rPr = new CTextPr();
this.rPr.ReadFromBinary(Reader);
}
this.del = undefined;
if (Reader.GetBool())
{
this.del = new CTextPr();
this.del.ReadFromBinary(Reader);
}
this.ins = undefined;
if (Reader.GetBool())
{
this.ins = new CTextPr();
this.ins.ReadFromBinary(Reader);
}
};
window["CMathCtrlPr"] = CMathCtrlPr;
window["CMathMenuBase"] = CMathMenuBase;
CMathMenuBase.prototype["get_Type"] = CMathMenuBase.prototype.get_Type;
CMathMenuBase.prototype["remove_AccentCharacter"] = CMathMenuBase.prototype.remove_AccentCharacter;
CMathMenuBase.prototype["remove_Bar"] = CMathMenuBase.prototype.remove_Bar;
CMathMenuBase.prototype["insert_MatrixRow"] = CMathMenuBase.prototype.insert_MatrixRow;
CMathMenuBase.prototype["insert_MatrixColumn"] = CMathMenuBase.prototype.insert_MatrixColumn;
CMathMenuBase.prototype["delete_MatrixRow"] = CMathMenuBase.prototype.delete_MatrixRow;
CMathMenuBase.prototype["delete_MatrixColumn"] = CMathMenuBase.prototype.delete_MatrixColumn;
CMathMenuBase.prototype["insert_Equation"] = CMathMenuBase.prototype.insert_Equation;
CMathMenuBase.prototype["delete_Equation"] = CMathMenuBase.prototype.delete_Equation;
CMathMenuBase.prototype["insert_DelimiterArgument"] = CMathMenuBase.prototype.insert_DelimiterArgument;
CMathMenuBase.prototype["delete_DelimiterArgument"] = CMathMenuBase.prototype.delete_DelimiterArgument;
CMathMenuBase.prototype["can_IncreaseArgumentSize"] = CMathMenuBase.prototype.can_IncreaseArgumentSize;
CMathMenuBase.prototype["can_DecreaseArgumentSize"] = CMathMenuBase.prototype.can_DecreaseArgumentSize;
CMathMenuBase.prototype["increase_ArgumentSize"] = CMathMenuBase.prototype.increase_ArgumentSize;
CMathMenuBase.prototype["decrease_ArgumentSize"] = CMathMenuBase.prototype.decrease_ArgumentSize;
CMathMenuBase.prototype["can_InsertManualBreak"] = CMathMenuBase.prototype.can_InsertManualBreak;
CMathMenuBase.prototype["insert_ManualBreak"] = CMathMenuBase.prototype.insert_ManualBreak;
CMathMenuBase.prototype["can_DeleteManualBreak"] = CMathMenuBase.prototype.can_DeleteManualBreak;
CMathMenuBase.prototype["delete_ManualBreak"] = CMathMenuBase.prototype.delete_ManualBreak;
CMathMenuBase.prototype["can_AlignToCharacter"] = CMathMenuBase.prototype.can_AlignToCharacter;
CMathMenuBase.prototype["align_ToCharacter"] = CMathMenuBase.prototype.align_ToCharacter;
CMathMenuBase.prototype["remove_DelimiterCharacters"] = CMathMenuBase.prototype.remove_DelimiterCharacters;
CMathMenuBase.prototype["remove_Radical"] = CMathMenuBase.prototype.remove_Radical;