DocumentServer/OfficeWeb/sdk/Word/Math/base.js
2015-04-28 17:59:00 +03:00

1165 lines
45 KiB
JavaScript

/*
* (c) Copyright Ascensio System SIA 2010-2015
*
* 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 Lubanas st. 125a-25, Riga, Latvia,
* EU, LV-1021.
*
* 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";
function CMathBase(bInside) {
this.Type = para_Math_Composition;
this.pos = new CMathPosition();
this.size = new CMathSize();
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 ? true : false;
this.elements = [];
this.dW = 0;
this.dH = 0;
this.alignment = {
hgt: null,
wdt: null
};
this.GapLeft = 0;
this.GapRight = 0;
this.RecalcInfo = {
bCtrPrp: true,
bProps: true
};
this.Content = [];
this.CurPos = 0;
this.Selection = {
StartPos: 0,
EndPos: 0,
Use: false
};
this.NearPosArray = [];
return this;
}
CMathBase.prototype = {
constructor: CMathBase,
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();
}
}
},
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;
}
},
setCtrPrp: function (txtPrp) {
if (txtPrp !== null && typeof(txtPrp) !== "undefined") {
this.CtrPrp.Merge(txtPrp);
}
},
Get_CtrPrp: function () {
var CtrPrp;
if (this.bInside === true) {
CtrPrp = this.Parent.Get_CtrPrp();
} else {
CtrPrp = this.CtrPrp.Copy();
}
return CtrPrp;
},
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);
}
return CompiledCtrPrp;
},
Get_CompiledCtrPrp_2: function () {
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;
},
Get_CompiledArgSize: function () {
return this.Parent.Get_CompiledArgSize();
},
Get_TxtPrControlLetter: function (RPI) {
this.Set_CompiledCtrPrp(this.Parent, this.ParaMath, RPI);
return this.TextPrControlLetter;
},
fillPlaceholders: 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].fillPlaceholders();
}
}
}
},
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();
}
},
IsJustDraw: function () {
return false;
},
IsAccent: function () {
return false;
},
IsEqqArray: function () {
return false;
},
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
};
},
align: function (pos_x, pos_y) {
var PosAlign = new CMathPosition();
if (this.alignment.hgt[pos_x] == MCJC_CENTER) {
var maxAsc = 0;
var _ascent;
for (var j = 0; j < this.nCol; j++) {
_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 {
var maxH = 0;
var _h;
for (var j = 0; j < this.nCol; j++) {
_h = this.elements[pos_x][j].size.height;
maxH = (maxH > _h) ? maxH : _h;
}
var coeffHgt;
if (this.alignment.hgt[pos_x] == MCJC_RIGHT) {
coeffHgt = 1;
} else {
coeffHgt = 0;
}
PosAlign.y = (maxH - this.elements[pos_x][pos_y].size.height) * coeffHgt;
}
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 {
var coeffWdt;
if (this.alignment.wdt[pos_y] == MCJC_RIGHT) {
coeffWdt = 1;
} else {
coeffWdt = 0;
}
PosAlign.x = (maxW - this.elements[pos_x][pos_y].size.width) * coeffWdt;
}
return PosAlign;
},
setPosition: function (pos, PosInfo) {
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;
var NewPos = new CMathPosition();
for (var i = 0; i < this.nRow; i++) {
w = 0;
for (var j = 0; j < this.nCol; j++) {
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;
this.elements[i][j].setPosition(NewPos, PosInfo);
w += Widths[j];
}
h += Heights[i];
}
},
draw: function (x, y, pGraphics, PDSE) {
this.Make_ShdColor(PDSE, this.Get_CompiledCtrPrp());
for (var i = 0; i < this.nRow; i++) {
for (var j = 0; j < this.nCol; j++) {
if (this.elements[i][j].IsJustDraw()) {
var ctrPrp = this.Get_TxtPrControlLetter();
var Font = {
FontSize: ctrPrp.FontSize,
FontFamily: {
Name: ctrPrp.FontFamily.Name,
Index: ctrPrp.FontFamily.Index
},
Italic: false,
Bold: false
};
pGraphics.SetFont(Font);
}
this.elements[i][j].draw(x, y, pGraphics, PDSE);
}
}
},
remove: function (order) {
return this.Parent.remove(order);
},
ApplyProperties: function (RPI) {},
PreRecalc: function (Parent, ParaMath, ArgSize, RPI, GapsInfo) {
this.Parent = Parent;
this.ParaMath = ParaMath;
this.Set_CompiledCtrPrp(Parent, ParaMath, RPI);
this.ApplyProperties(RPI);
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);
}
}
},
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,
height: height,
ascent: ascent
};
},
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()) {
var ctrPrp = this.Get_TxtPrControlLetter();
var Font = {
FontSize: ctrPrp.FontSize,
FontFamily: {
Name: ctrPrp.FontFamily.Name,
Index: ctrPrp.FontFamily.Index
},
Italic: false,
Bold: false
};
g_oTextMeasurer.SetFont(Font);
}
this.elements[i][j].Resize(oMeasure, RPI);
}
}
this.recalculateSize(oMeasure, RPI);
},
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);
}
}
}
},
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.Init_Default();
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();
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);
var FontSize = ParaMath.GetFirstRPrp().FontSize;
if (this.bInside == true) {
var TxtPr = Parent.Get_TxtPrControlLetter(RPI);
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
};
this.RecalcInfo.bCtrPrp = false;
}
},
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;
},
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;
}
}
},
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;
}
}
},
setDistance: function () {},
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);
}
}
}
},
getElement: function (x, y) {
return this.elements[x][y];
},
IsOneLineText: function () {
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;
},
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_BOX || kind == MATH_BORDER_BOX || (kind == MATH_DELIMITER && this.Pr.grow == true);
if (checkBase) {
var base = this.getBase();
gaps = base.getGapsInside(GapsInfo);
}
return gaps;
},
SetGaps: function (GapsInfo) {
GapsInfo.Left = GapsInfo.Current;
GapsInfo.leftRunPrp = GapsInfo.currRunPrp;
GapsInfo.Current = this;
GapsInfo.currRunPrp = this.Get_CompiledCtrPrp();
GapsInfo.setGaps();
},
IsPlaceholder: function () {
return false;
},
IsText: function () {
return false;
},
GetParent: function () {
return (this.Parent.Type !== para_Math_Composition ? this : this.Parent.GetParent());
},
Get_TextPr: function (ContentPos, Depth) {
var pos = ContentPos.Get(Depth);
return this.Content[pos].Get_TextPr(ContentPos, Depth + 1);
},
Get_CompiledTextPr_11100: function (Copy) {
var start_x = 0,
start_y = 0;
var TextPr = null;
while (start_x < this.nRow && start_y < this.nCol && (TextPr == null || this.elements[start_x][start_y].IsJustDraw())) {
if (!this.elements[start_x][start_y].IsJustDraw()) {
TextPr = this.elements[start_x][start_y].Get_CompiledTextPr(Copy, true);
break;
}
start_y++;
if (start_y == this.nCol) {
start_x++;
start_y = 0;
}
}
for (var i = start_y; i < this.nRow; i++) {
for (var j = start_x; j < this.nCol; j++) {
if (!this.elements[i][j].IsJustDraw()) {
var CurTextPr = this.elements[i][j].Get_CompiledTextPr(true, true);
if (null !== CurTextPr) {
TextPr = TextPr.Compare(CurTextPr);
}
}
}
}
return TextPr;
},
Get_CompiledTextPr: function (Copy) {
var TextPr = this.Content[0].Get_CompiledTextPr(true, true);
for (var i = 1; i < this.Content.length; i++) {
var CurTextPr = this.Content[i].Get_CompiledTextPr(false, true);
if (null !== CurTextPr) {
TextPr = TextPr.Compare(CurTextPr);
}
}
return TextPr;
},
Get_CompiledPr: function (Copy) {
return this.Get_CompiledTextPr(Copy);
},
Apply_TextPr: function (TextPr, IncFontSize, ApplyToAll) {
if (ApplyToAll == true) {
this.RecalcInfo.bCtrPrp = true;
}
if (TextPr == undefined) {
var CtrPrp = this.Get_CompiledCtrPrp_2();
this.Set_FontSizeCtrPrp(FontSize_IncreaseDecreaseValue(IncFontSize, CtrPrp.FontSize));
} else {
if (TextPr.FontSize !== undefined) {
this.Set_FontSizeCtrPrp(TextPr.FontSize);
}
if (TextPr.Shd !== undefined) {
this.Set_Shd(TextPr.Shd);
}
if (undefined !== TextPr.Color && undefined === TextPr.Unifill) {
this.Set_Color(null === TextPr.Color ? undefined : TextPr.Color);
this.Set_Unifill(undefined);
}
if (undefined !== TextPr.Unifill) {
this.Set_Unifill(null === TextPr.Unifill ? undefined : TextPr.Unifill);
this.Set_Color(undefined);
}
if (undefined !== TextPr.Underline) {
this.Set_Underline(TextPr.Underline);
}
if (undefined !== TextPr.Strikeout) {
this.Set_Strikeout(TextPr.Strikeout);
}
if (undefined !== TextPr.DStrikeout) {
this.Set_DoubleStrikeout(TextPr.DStrikeout);
}
if (undefined != TextPr.RFonts) {
var RFonts = new CRFonts();
RFonts.Set_All("Cambria Math", -1);
this.raw_SetRFonts(RFonts);
}
}
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].Apply_TextPr(TextPr, IncFontSize, ApplyToAll);
}
}
}
if (this.nRow == 0 && this.nCol == 0) {
for (var i = 0; i < this.Content.length; i++) {
this.Content[i].Apply_TextPr(TextPr, IncFontSize, ApplyToAll);
}
}
},
GetMathTextPrForMenu: function (ContentPos, Depth) {
var pos = ContentPos.Get(Depth);
return this.Content[pos].GetMathTextPrForMenu(ContentPos, Depth + 1);
},
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);
}
},
Set_FontSizeCtrPrp: function (Value) {
if (Value !== this.CtrPrp.FontSize) {
History.Add(this, new CChangesMathFontSize(Value, this.CtrPrp.FontSize));
this.raw_SetFontSize(Value);
}
},
Set_Color: function (Value) {
if ((undefined === Value && undefined !== this.CtrPrp.Color) || (Value instanceof CDocumentColor && (undefined === this.CtrPrp.Color || false === Value.Compare(this.CtrPrp.Color)))) {
History.Add(this, new CChangesMathColor(Value, this.CtrPrp.Color));
this.raw_SetColor(Value);
}
},
Set_Unifill: function (Value) {
if ((undefined === Value && undefined !== this.CtrPrp.Unifill) || (Value instanceof CUniFill && (undefined === this.CtrPrp.Unifill || false === CompareUnifillBool(this.CtrPrp.Unifill, Value)))) {
History.Add(this, new CChangesMathUnifill(Value, this.CtrPrp.Unifill));
this.raw_SetUnifill(Value);
}
},
Set_Shd: function (Shd) {
if (! (undefined === this.CtrPrp.Shd && undefined === Shd) && !(undefined !== this.CtrPrp.Shd && undefined !== Shd && true === this.CtrPrp.Shd.Compare(Shd))) {
History.Add(this, new CChangesMathShd(Shd, this.CtrPrp.Shd));
this.raw_SetShd(Shd);
}
},
Set_Underline: function (Value) {
if (Value !== this.CtrPrp.Underline) {
History.Add(this, new CChangesMathUnderline(Value, this.CtrPrp.Underline));
this.raw_SetUnderline(Value);
}
},
Set_Strikeout: function (Value) {
if (Value !== this.CtrPrp.Strikeout) {
History.Add(this, new CChangesMathStrikeout(Value, this.CtrPrp.Strikeout));
this.raw_SetStrikeout(Value);
}
},
Set_DoubleStrikeout: function (Value) {
if (Value !== this.CtrPrp.DStrikeout) {
History.Add(this, new CChangesMath_DoubleStrikeout(Value, this.CtrPrp.DStrikeout));
this.raw_Set_DoubleStrikeout(Value);
}
},
Set_Bold: function (Value) {
if (Value !== this.CtrPrp.Bold) {
History.Add(this, new CChangesMathBold(Value, this.CtrPrp.Bold));
this.raw_SetBold(Value);
}
},
Set_Italic: function (Value) {
if (Value !== this.CtrPrp.Italic) {
History.Add(this, new CChangesMathItalic(Value, this.CtrPrp.Italic));
this.raw_SetItalic(Value);
}
},
Set_RFonts_Ascii: function (Value) {
if (this.CtrPrp.RFonts.Ascii !== Value) {
History.Add(this, new CChangesMath_RFontsAscii(Value, this.CtrPrp.RFonts.Ascii));
this.raw_SetRFontsAscii(Value);
}
},
Set_RFonts_HAnsi: function (Value) {
if (this.CtrPrp.RFonts.HAnsi !== Value) {
History.Add(this, new CChangesMath_RFontsHAnsi(Value, this.CtrPrp.RFonts.HAnsi));
this.raw_SetRFontsHAnsi(Value);
}
},
Set_RFonts_CS: function (Value) {
if (this.CtrPrp.RFonts.CS !== Value) {
History.Add(this, new CChangesMath_RFontsCS(Value, this.CtrPrp.RFonts.CS));
this.raw_SetRFontsCS(Value);
}
},
Set_RFonts_EastAsia: function (Value) {
if (this.CtrPrp.RFonts.EastAsia !== Value) {
History.Add(this, new CChangesMath_RFontsEastAsia(Value, this.CtrPrp.RFonts.EastAsia));
this.raw_SetRFontsEastAsia(Value);
}
},
Set_RFonts_Hint: function (Value) {
if (this.CtrPrp.RFonts.Hint !== Value) {
History.Add(this, new CChangesMath_RFontsHint(Value, this.CtrPrp.RFonts.Hint));
this.raw_SetRFontsHint(Value);
}
},
raw_SetBold: function (Value) {
this.CtrPrp.Bold = Value;
this.NeedUpdate_CtrPrp();
},
raw_SetItalic: function (Value) {
this.CtrPrp.Italic = Value;
this.NeedUpdate_CtrPrp();
},
raw_SetUnderline: function (Value) {
this.CtrPrp.Underline = Value;
this.NeedUpdate_CtrPrp();
},
raw_SetStrikeout: function (Value) {
this.CtrPrp.Strikeout = Value;
this.NeedUpdate_CtrPrp();
},
raw_Set_DoubleStrikeout: function (Value) {
this.CtrPrp.DStrikeout = Value;
this.NeedUpdate_CtrPrp();
},
raw_SetFontSize: function (Value) {
this.CtrPrp.FontSize = Value;
this.NeedUpdate_CtrPrp();
},
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();
},
raw_SetColor: function (Value) {
this.CtrPrp.Color = Value;
this.NeedUpdate_CtrPrp();
},
raw_SetUnifill: function (Value) {
this.CtrPrp.Unifill = Value;
this.NeedUpdate_CtrPrp();
},
raw_SetRFonts: function (RFonts) {
if (undefined != RFonts) {
if (undefined != RFonts.Ascii) {
this.Set_RFonts_Ascii(RFonts.Ascii);
}
if (undefined != RFonts.HAnsi) {
this.Set_RFonts_HAnsi(RFonts.HAnsi);
}
if (undefined != RFonts.CS) {
this.Set_RFonts_CS(RFonts.CS);
}
if (undefined != RFonts.EastAsia) {
this.Set_RFonts_EastAsia(RFonts.EastAsia);
}
if (undefined != RFonts.Hint) {
this.Set_RFonts_Hint(RFonts.Hint);
}
} else {
this.Set_RFonts_Ascii(undefined);
this.Set_RFonts_HAnsi(undefined);
this.Set_RFonts_CS(undefined);
this.Set_RFonts_EastAsia(undefined);
this.Set_RFonts_Hint(undefined);
}
},
raw_SetRFontsAscii: function (Value) {
this.CtrPrp.RFonts.Ascii = Value;
this.NeedUpdate_CtrPrp();
},
raw_SetRFontsHAnsi: function (Value) {
this.CtrPrp.RFonts.HAnsi = Value;
this.NeedUpdate_CtrPrp();
},
raw_SetRFontsCS: function (Value) {
this.CtrPrp.RFonts.CS = Value;
this.NeedUpdate_CtrPrp();
},
raw_SetRFontsEastAsia: function (Value) {
this.CtrPrp.RFonts.EastAsia = Value;
this.NeedUpdate_CtrPrp();
},
raw_SetRFontsHint: function (Value) {
this.CtrPrp.RFonts.Hint = Value;
this.NeedUpdate_CtrPrp();
},
NeedUpdate_CtrPrp: function () {
this.RecalcInfo.bCtrPrp = true;
if (null !== this.ParaMath) {
this.ParaMath.SetNeedResize();
}
},
SelectToParent: function (bCorrect) {
this.bSelectionUse = true;
this.Parent.SelectToParent(bCorrect);
}
};
CMathBase.prototype.Set_Paragraph = ParaHyperlink.prototype.Set_Paragraph;
CMathBase.prototype.Get_ElementByPos = ParaHyperlink.prototype.Get_ElementByPos;
CMathBase.prototype.Set_ParaMath = CMathContent.prototype.Set_ParaMath;
CMathBase.prototype.Recalculate_Reset = function (StartRange, StartLine) {
for (var nPos = 0, nCount = this.Content.length; nPos < nCount; nPos++) {
this.Content[nPos].Recalculate_Reset(StartRange, StartLine);
}
};
CMathBase.prototype.Fill_LogicalContent = function (nCount) {
for (var nIndex = 0; nIndex < nCount; nIndex++) {
this.Content[nIndex] = new CMathContent();
this.Content[nIndex].ParentElement = this;
this.Content[nIndex].Parent = this;
}
};
CMathBase.prototype.Copy = function () {
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);
}
return NewElement;
};
CMathBase.prototype.Refresh_RecalcData = function (Data) {
if (this.ParaMath !== null) {
this.ParaMath.Refresh_RecalcData();
}
};
CMathBase.prototype.Write_ToBinary2 = function (Writer) {
Writer.WriteLong(this.ClassType);
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);
};
CMathBase.prototype.Read_FromBinary2 = function (Reader) {
this.Id = Reader.GetString2();
var nCount = Reader.GetLong();
this.Content = [];
for (var nIndex = 0; nIndex < nCount; nIndex++) {
this.Content[nIndex] = 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.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);
}
};
CMathBase.prototype.Undo = function (Data) {
Data.Undo(this);
};
CMathBase.prototype.Redo = function (Data) {
Data.Redo(this);
};
CMathBase.prototype.Save_Changes = function (Data, Writer) {
Writer.WriteLong(this.ClassType);
WriteChanges_ToBinary(Data, Writer);
};
CMathBase.prototype.Load_Changes = function (Reader) {
var ClassType = Reader.GetLong();
if (this.ClassType !== ClassType) {
return;
}
ReadChanges_FromBinary(Reader, 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.Recalculate_CurPos = function (_X, Y, CurrentRun, _CurRange, _CurLine, _CurPage, UpdateCurPos, UpdateTarget, ReturnTarget) {
return this.Content[this.CurPos].Recalculate_CurPos(_X, Y, CurrentRun, _CurRange, _CurLine, _CurPage, UpdateCurPos, UpdateTarget, ReturnTarget);
};
CMathBase.prototype.Get_ParaContentPosByXY = function (SearchPos, Depth, _CurLine, _CurRange, StepEnd) {
var nCount = this.Content.length;
if (nCount <= 0) {
return false;
}
var aBounds = [];
for (var nIndex = 0; nIndex < nCount; nIndex++) {
var oBounds = this.Content[nIndex].Get_Bounds();
if (oBounds.W > 0.001 && oBounds.H > 0.001) {
aBounds.push(oBounds);
} else {
aBounds.push(null);
}
}
var X = SearchPos.X;
var Y = SearchPos.Y;
var dDiff = null;
var nCurIndex = 0;
var nFindIndex = 0;
while (nCurIndex < nCount) {
var oBounds = aBounds[nCurIndex];
if (null !== oBounds) {
if (oBounds.X <= X && X <= oBounds.X + oBounds.W && oBounds.Y <= Y && Y <= oBounds.Y + oBounds.H) {
nFindIndex = nCurIndex;
break;
} else {
var dCurDiffX = X - (oBounds.X + oBounds.W / 2);
var dCurDiffY = Y - (oBounds.Y + oBounds.H / 2);
var dCurDiff = dCurDiffX * dCurDiffX + dCurDiffY * dCurDiffY;
if (null === dDiff || dDiff > dCurDiff) {
dDiff = dCurDiff;
nFindIndex = nCurIndex;
}
}
}
nCurIndex++;
}
if (null === aBounds[nFindIndex]) {
return false;
}
SearchPos.CurX = aBounds[nFindIndex].X;
SearchPos.CurY = aBounds[nFindIndex].Y;
var bResult = this.Content[nFindIndex].Get_ParaContentPosByXY(SearchPos, Depth + 1, _CurLine, _CurRange, StepEnd);
if (true === bResult) {
SearchPos.Pos.Update2(nFindIndex, Depth);
}
return bResult;
};
CMathBase.prototype.Get_ParaContentPos = function (bSelection, bStart, ContentPos) {
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);
}
};
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].Cursor_MoveToStartPos();
} else {
if (CurPos > this.Content.length - 1) {
this.CurPos = this.Content.length - 1;
this.Content[this.CurPos].Cursor_MoveToEndPos(false);
} else {
this.CurPos = CurPos;
this.Content[this.CurPos].Set_ParaContentPos(ContentPos, Depth + 1);
}
}
};
CMathBase.prototype.Selection_IsEmpty = function () {
if (true !== this.Selection.Use) {
return true;
}
if (this.Selection.StartPos === this.Selection.EndPos) {
return this.Content[this.Selection.StartPos].Selection_IsEmpty();
}
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.Draw_HighLights = function (PDSH, bAll) {
var oShd = this.Get_CompiledCtrPrp().Shd;
var bDrawShd = (oShd === undefined || shd_Nil === oShd.Value ? false : true);
var ShdColor = (true === bDrawShd ? oShd.Get_Color(PDSH.Paragraph) : null);
var X = PDSH.X,
Y0 = PDSH.Y0,
Y1 = PDSH.Y1;
var bAllCont = this.Selection.StartPos !== this.Selection.EndPos;
for (var CurPos = 0; CurPos < this.Content.length; CurPos++) {
this.Content[CurPos].Draw_HighLights(PDSH, bAllCont);
}
if (true === bDrawShd) {
PDSH.Shd.Add(Y0, Y1, X, X + this.size.width, 0, ShdColor.r, ShdColor.g, ShdColor.b);
}
PDSH.X = this.pos.x + this.ParaMath.X + this.size.width;
};
CMathBase.prototype.Draw_Lines = function (PDSL) {
var CtrPrp = this.Get_CompiledCtrPrp(false);
var aStrikeout = PDSL.Strikeout;
var aDStrikeout = PDSL.DStrikeout;
var X = PDSL.X;
var Y = PDSL.Baseline - CtrPrp.FontSize * g_dKoef_pt_to_mm * 0.27;
var LineW = (CtrPrp.FontSize / 18) * g_dKoef_pt_to_mm;
var Para = PDSL.Paragraph;
var BgColor = PDSL.BgColor;
if (undefined !== CtrPrp.Shd && shd_Nil !== CtrPrp.Shd.Value) {
BgColor = CtrPrp.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 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);
}
}
}
if (true === CtrPrp.DStrikeout) {
aDStrikeout.Add(Y, Y, X, X + this.size.width, LineW, CurColor.r, CurColor.g, CurColor.b);
} else {
if (true === CtrPrp.Strikeout) {
aStrikeout.Add(Y, Y, X, X + this.size.width, LineW, CurColor.r, CurColor.g, CurColor.b);
}
}
for (var CurPos = 0; CurPos < this.Content.length; CurPos++) {
this.Content[CurPos].Draw_Lines(PDSL);
}
PDSL.X = this.pos.x + this.ParaMath.X + this.size.width;
};
CMathBase.prototype.Make_ShdColor = function (PDSE, CurTextPr) {
var Para = PDSE.Paragraph;
var pGraphics = PDSE.Graphics;
var BgColor = PDSE.BgColor;
if (undefined !== CurTextPr.Shd && shd_Nil !== 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.Unifill) {
CurTextPr.Unifill.check(PDSE.Theme, PDSE.ColorMap);
RGBA = CurTextPr.Unifill.getRGBAColor();
if (true === PDSE.VisitedHyperlink && (undefined === this.CtrPrp.Color && undefined === this.CtrPrp.Unifill)) {
G_O_VISITED_HLINK_COLOR.check(PDSE.Theme, PDSE.ColorMap);
RGBA = 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)) {
G_O_VISITED_HLINK_COLOR.check(PDSE.Theme, PDSE.ColorMap);
RGBA = 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 (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);
}
}
}
if (BgColor == undefined) {
BgColor = new CDocumentColor(255, 255, 255, false);
}
return BgColor;
};
CMathBase.prototype.protected_AddToContent = function (Pos, Items, bUpdatePosition) {
History.Add(this, new CChangesMathAddItems(Pos, Items));
this.raw_AddToContent(Pos, Items, bUpdatePosition);
this.private_UpdatePosOnAdd(Pos, bUpdatePosition);
};
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);
Item.ParentElement = this;
}
this.fillContent();
this.private_SetNeedResize();
};
CMathBase.prototype.raw_RemoveFromContent = function (Pos, Count) {
this.Content.splice(Pos, Count);
this.fillContent();
this.private_SetNeedResize();
};
CMathBase.prototype.Recalc_RunsCompiledPr = function () {
this.RecalcInfo.bCtrPrp = true;
ParaHyperlink.prototype.Recalc_RunsCompiledPr.call(this);
};
CMathBase.prototype.GetLastElement = function () {
return this;
};
CMathBase.prototype.GetFirstElement = function () {
return this;
};
CMathBase.prototype.private_UpdatePosOnAdd = CMathContent.prototype.private_UpdatePosOnAdd;
CMathBase.prototype.private_UpdatePosOnRemove = CMathContent.prototype.private_UpdateOnRemove;
CMathBase.prototype.private_CorrectSelectionPos = CMathContent.prototype.private_CorrectSelectionPos;
CMathBase.prototype.private_SetNeedResize = CMathContent.prototype.private_SetNeedResize;
CMathBase.prototype.private_CorrectCurPos = function () {
if (this.CurPos > this.Content.length - 1) {
this.CurPos = this.Content.length - 1;
this.Content[this.CurPos].Cursor_MoveToEndPos(false);
}
if (this.CurPos < 0) {
this.CurPos = this.Content.length - 1;
this.Content[this.CurPos].Cursor_MoveToStartPos();
}
};
CMathBase.prototype.Search = ParaHyperlink.prototype.Search;
CMathBase.prototype.Add_SearchResult = ParaHyperlink.prototype.Add_SearchResult;
CMathBase.prototype.Clear_SearchResults = ParaHyperlink.prototype.Clear_SearchResults;
CMathBase.prototype.Remove_SearchResult = ParaHyperlink.prototype.Remove_SearchResult;
CMathBase.prototype.Search_GetId = ParaHyperlink.prototype.Search_GetId;
CMathBase.prototype.Set_SelectionContentPos = ParaHyperlink.prototype.Set_SelectionContentPos;
CMathBase.prototype.Get_LeftPos = ParaHyperlink.prototype.Get_LeftPos;
CMathBase.prototype.Get_RightPos = ParaHyperlink.prototype.Get_RightPos;
CMathBase.prototype.Get_WordStartPos = ParaHyperlink.prototype.Get_WordStartPos;
CMathBase.prototype.Get_WordEndPos = ParaHyperlink.prototype.Get_WordEndPos;
CMathBase.prototype.Selection_Remove = ParaHyperlink.prototype.Selection_Remove;
CMathBase.prototype.Select_All = ParaHyperlink.prototype.Select_All;
CMathBase.prototype.Check_NearestPos = ParaHyperlink.prototype.Check_NearestPos;
CMathBase.prototype.Get_SelectionDirection = ParaHyperlink.prototype.Get_SelectionDirection;
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.Document_UpdateInterfaceState = function (MathProps) {};
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;
};
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) {};