/* * (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"; var g_dMathArgSizeKoeff_1 = 0.76; var g_dMathArgSizeKoeff_2 = 0.76 * 0.855; var g_oMathSettings = {}; function MathMenu(type) { this.Type = para_Math; this.Menu = type; } MathMenu.prototype = { Get_Type: function () { return this.Type; } }; function ParaMath() { ParaMath.superclass.constructor.call(this); this.Id = g_oIdCounter.Get_NewId(); this.Type = para_Math; this.Jc = undefined; this.Root = new CMathContent(); this.Root.bRoot = true; this.Root.ParentElement = this; this.X = 0; this.Y = 0; this.ParaMathRPI = new CMathRecalculateInfo(); this.bSelectionUse = false; this.Paragraph = null; this.NearPosArray = []; this.Width = 0; this.WidthVisible = 0; this.Height = 0; this.Ascent = 0; this.Descent = 0; this.DefaultTextPr = new CTextPr(); this.DefaultTextPr.FontFamily = { Name: "Cambria Math", Index: -1 }; this.DefaultTextPr.RFonts.Set_All("Cambria Math", -1); g_oTableId.Add(this, this.Id); } Asc.extendClass(ParaMath, CParagraphContentWithContentBase); ParaMath.prototype.Get_Type = function () { return this.Type; }; ParaMath.prototype.Get_Id = function () { return this.Id; }; ParaMath.prototype.Copy = function (Selected) { var NewMath = new ParaMath(); NewMath.Root.bRoot = true; if (Selected) { var result = this.GetSelectContent(); result.Content.CopyTo(NewMath.Root, Selected); } else { this.Root.CopyTo(NewMath.Root, Selected); } NewMath.SetNeedResize(); NewMath.Root.Correct_Content(true); return NewMath; }; ParaMath.prototype.Set_Paragraph = function (Paragraph) { this.Paragraph = Paragraph; }; ParaMath.prototype.Get_Text = function (Text) { Text.Text = null; }; ParaMath.prototype.Is_Empty = function () { if (this.Root.Content.length <= 0) { return true; } if (1 === this.Root.Content.length) { return this.Root.Content[0].Is_Empty({ SkipPlcHldr: true }); } return false; }; ParaMath.prototype.Is_CheckingNearestPos = function () { return this.Root.Is_CheckingNearestPos(); }; ParaMath.prototype.Is_StartFromNewLine = function () { return false; }; ParaMath.prototype.Get_TextPr = function (_ContentPos, Depth) { var TextPr = new CTextPr(); var mTextPr = this.Root.Get_TextPr(_ContentPos, Depth); TextPr.Merge(mTextPr); return TextPr; }; ParaMath.prototype.Get_CompiledTextPr = function (Copy) { var oContent = this.GetSelectContent(); var mTextPr = oContent.Content.Get_CompiledTextPr(Copy); return mTextPr; }; ParaMath.prototype.Add = function (Item) { this.ParaMathRPI.NeedResize = true; var Type = Item.Type; var oSelectedContent = this.GetSelectContent(); var oContent = oSelectedContent.Content; var StartPos = oSelectedContent.Start; var Run = oContent.Content[StartPos]; if (para_Math_Run !== Run.Type) { return; } var NewElement = null; if (para_Text === Type) { if (oContent.bRoot == false && Run.IsPlaceholder()) { var ctrPrp = oContent.Parent.Get_CtrPrp(); Run.Apply_TextPr(ctrPrp, undefined, true); } if (Item.Value == 38) { NewElement = new CMathAmp(); Run.Add(NewElement, true); } else { NewElement = new CMathText(false); NewElement.add(Item.Value); Run.Add(NewElement, true); } } else { if (para_Space === Type) { NewElement = new CMathText(false); NewElement.addTxt(" "); Run.Add(NewElement, true); } else { if (para_Math === Type) { var ContentPos = new CParagraphContentPos(); if (this.bSelectionUse == true) { this.Get_ParaContentPos(true, true, ContentPos); } else { this.Get_ParaContentPos(false, false, ContentPos); } var TextPr = this.Root.GetMathTextPrForMenu(ContentPos, 0); var RightRun = Run.Split2(Run.State.ContentPos); oContent.Internal_Content_Add(StartPos + 1, RightRun, false); oContent.CurPos = StartPos + 1; RightRun.Cursor_MoveToStartPos(); var lng = oContent.Content.length; oContent.Load_FromMenu(Item.Menu, this.Paragraph); var lng2 = oContent.Content.length; var Pos_ApplyTextPr = { StartPos: StartPos + 1, EndPos: StartPos + lng2 - lng }; TextPr.RFonts.Set_All("Cambria Math", -1); oContent.Apply_TextPr(TextPr, undefined, false, Pos_ApplyTextPr); } } } if ((para_Text === Type || para_Space === Type) && null !== NewElement) { oContent.Process_AutoCorrect(NewElement); } oContent.Correct_Content(true); }; ParaMath.prototype.Remove = function (Direction, bOnAddText) { this.ParaMathRPI.NeedResize = true; var oSelectedContent = this.GetSelectContent(); var nStartPos = oSelectedContent.Start; var nEndPos = oSelectedContent.End; var oContent = oSelectedContent.Content; if (nStartPos === nEndPos) { var oElement = oContent.getElem(nStartPos); if (para_Math_Run === oElement.Type) { if ((true === oElement.IsPlaceholder()) || (false === oElement.Remove(Direction) && true !== this.bSelectionUse)) { if ((Direction > 0 && oContent.Content.length - 1 === nStartPos) || (Direction < 0 && 0 === nStartPos)) { if (oContent.bRoot) { return false; } oContent.ParentElement.Select_WholeElement(); return true; } if (Direction > 0) { var oNextElement = oContent.getElem(nStartPos + 1); if (para_Math_Run === oNextElement.Type) { oNextElement.Cursor_MoveToStartPos(); oNextElement.Remove(1); if (oNextElement.Is_Empty()) { oContent.Correct_Content(); oContent.Correct_ContentPos(1); } this.Selection_Remove(); } else { oContent.Select_ElementByPos(nStartPos + 1, true); } } else { var oPrevElement = oContent.getElem(nStartPos - 1); if (para_Math_Run === oPrevElement.Type) { oPrevElement.Cursor_MoveToEndPos(); oPrevElement.Remove(-1); if (oPrevElement.Is_Empty()) { oContent.Correct_Content(); oContent.Correct_ContentPos(-1); } this.Selection_Remove(); } else { oContent.Select_ElementByPos(nStartPos - 1, true); } } } else { if (oElement.Is_Empty()) { oContent.CurPos = nStartPos; oContent.Correct_Content(); oContent.Correct_ContentPos(-1); } this.Selection_Remove(); } return true; } else { oContent.Remove_FromContent(nStartPos, 1); oContent.CurPos = nStartPos; if (para_Math_Run === oContent.Content[nStartPos].Type) { oContent.Content[nStartPos].Cursor_MoveToStartPos(); } oContent.Correct_Content(); oContent.Correct_ContentPos(-1); this.Selection_Remove(); } } else { if (nStartPos > nEndPos) { var nTemp = nEndPos; nEndPos = nStartPos; nStartPos = nTemp; } var oStartElement = oContent.getElem(nStartPos); var oEndElement = oContent.getElem(nEndPos); if (para_Math_Run === oEndElement.Type) { oEndElement.Remove(Direction); } else { oContent.Remove_FromContent(nEndPos, 1); } oContent.Remove_FromContent(nStartPos + 1, nEndPos - nStartPos - 1); if (para_Math_Run === oStartElement.Type) { oStartElement.Remove(Direction); } else { oContent.Remove_FromContent(nStartPos, 1); } oContent.CurPos = nStartPos; oContent.Correct_Content(); oContent.Correct_ContentPos(Direction); this.Selection_Remove(); } }; ParaMath.prototype.GetSelectContent = function () { return this.Root.GetSelectContent(); }; ParaMath.prototype.Get_CurrentParaPos = function () { var nLinesCount = this.protected_GetLinesCount(); for (var nLineIndex = 0; nLineIndex < nLinesCount; nLineIndex++) { var nRangesCount = this.protected_GetRangesCount(nLineIndex); for (var nRangeIndex = 0; nRangeIndex < nRangesCount; nRangeIndex++) { var nEndPos = this.protected_GetRangeEndPos(nLineIndex, nRangeIndex); if (nEndPos > 0) { return new CParaPos(0 === nLineIndex ? this.StartRange + nRangeIndex : nRangeIndex, this.StartLine + nLineIndex, 0, 0); } } } return new CParaPos(this.StartRange, this.StartLine, 0, 0); }; ParaMath.prototype.Apply_TextPr = function (TextPr, IncFontSize, ApplyToAll) { this.ParaMathRPI.NeedResize = true; if (ApplyToAll == true) { this.Root.Apply_TextPr(TextPr, IncFontSize, true); } else { var content = this.GetSelectContent().Content; var NewTextPr = new CTextPr(); var bSetInRoot = false; if (IncFontSize == undefined) { if (TextPr.Underline !== undefined) { NewTextPr.Underline = TextPr.Underline; bSetInRoot = true; } if (TextPr.FontSize !== undefined && content.IsNormalTextInRuns() == false) { NewTextPr.FontSize = TextPr.FontSize; bSetInRoot = true; } content.Apply_TextPr(TextPr, IncFontSize, ApplyToAll); if (bSetInRoot) { this.Root.Apply_TextPr(NewTextPr, IncFontSize, true); } } else { if (content.IsNormalTextInRuns() == false) { this.Root.Apply_TextPr(TextPr, IncFontSize, true); } else { content.Apply_TextPr(TextPr, IncFontSize, ApplyToAll); } } } }; ParaMath.prototype.Clear_TextPr = function () {}; ParaMath.prototype.Check_NearestPos = function (ParaNearPos, Depth) { this.Root.Check_NearestPos(ParaNearPos, Depth); }; ParaMath.prototype.Get_DrawingObjectRun = function (Id) { return null; }; ParaMath.prototype.Get_DrawingObjectContentPos = function (Id, ContentPos, Depth) { return false; }; ParaMath.prototype.Get_Layout = function (DrawingLayout, UseContentPos, ContentPos, Depth) { if (true === UseContentPos) { DrawingLayout.Layout = true; } else { DrawingLayout.X += this.Width; } }; ParaMath.prototype.Get_NextRunElements = function (RunElements, UseContentPos, Depth) {}; ParaMath.prototype.Get_PrevRunElements = function (RunElements, UseContentPos, Depth) {}; ParaMath.prototype.Collect_DocumentStatistics = function (ParaStats) {}; ParaMath.prototype.Create_FontMap = function (Map) { this.Root.Create_FontMap(Map); }; ParaMath.prototype.Get_AllFontNames = function (AllFonts) { AllFonts["Cambria Math"] = true; this.Root.Get_AllFontNames(AllFonts); }; ParaMath.prototype.Get_SelectedElementsInfo = function (Info) { Info.Set_Math(this); }; ParaMath.prototype.Get_SelectedText = function (bAll, bClearText) { if (true === bAll || true === this.Selection_IsUse()) { if (true === bClearText) { return null; } return ""; } return ""; }; ParaMath.prototype.Get_SelectionDirection = function () { return this.Root.Get_SelectionDirection(); }; ParaMath.prototype.Clear_TextFormatting = function (DefHyper) {}; ParaMath.prototype.Can_AddDropCap = function () { return false; }; ParaMath.prototype.Get_TextForDropCap = function (DropCapText, UseContentPos, ContentPos, Depth) { if (true === DropCapText.Check) { DropCapText.Mixed = true; } }; ParaMath.prototype.Get_StartTabsCount = function (TabsCounter) { return false; }; ParaMath.prototype.Remove_StartTabs = function (TabsCounter) { return false; }; ParaMath.prototype.Add_ToContent = function (Pos, Item, UpdatePosition) {}; ParaMath.prototype.Recalculate_Range = function (PRS, ParaPr, Depth) { if (this.Paragraph !== PRS.Paragraph) { this.Paragraph = PRS.Paragraph; this.protected_UpdateSpellChecking(); } var CurLine = PRS.Line - this.StartLine; var CurRange = (0 === CurLine ? PRS.Range - this.StartRange : PRS.Range); var Para = PRS.Paragraph; var ParaLine = PRS.Line; var ParaRange = PRS.Range; var RPI = new CRPI(); RPI.MergeMathInfo(this.ParaMathRPI); RPI.PRS = PRS; var ArgSize = new CMathArgSize(); if (PRS.NewRange == false) { this.Root.Recalculate_Reset(PRS.Range, PRS.Line); } if (RPI.NeedResize) { this.Root.Set_Paragraph(Para); this.Root.Set_ParaMath(this, null); this.Root.PreRecalc(null, this, ArgSize, RPI); this.Root.Resize(g_oTextMeasurer, RPI); var pos = new CMathPosition(); pos.x = 0; pos.y = 0; this.Root.setPosition(pos); } else { this.Root.Resize_2(g_oTextMeasurer, null, this, RPI, ArgSize); } this.ParaMathRPI.ClearRecalculate(); var OldLineTextAscent = PRS.LineTextAscent; var OldLineTextAscent2 = PRS.LineTextAscent2; var OldLineTextDescent = PRS.LineTextDescent; this.Width = this.Root.size.width; this.Height = this.Root.size.height; this.WidthVisible = this.Root.size.width; this.Ascent = this.Root.size.ascent; this.Descent = this.Root.size.height - this.Root.size.ascent; var RangeStartPos = this.protected_AddRange(CurLine, CurRange); var RangeEndPos = 0; PRS.StartWord = true; var LetterLen = this.Width; if (true !== PRS.Word) { if (true !== PRS.FirstItemOnLine || false === Para.Internal_Check_Ranges(ParaLine, ParaRange)) { if (PRS.X + PRS.SpaceLen + LetterLen > PRS.XEnd) { PRS.NewRange = true; } } if (true !== PRS.NewRange) { PRS.Set_LineBreakPos(0); PRS.WordLen = this.Width; PRS.Word = true; } } else { if (PRS.X + PRS.SpaceLen + PRS.WordLen + LetterLen > PRS.XEnd) { if (true === PRS.FirstItemOnLine) { if (false === Para.Internal_Check_Ranges(ParaLine, ParaRange)) { PRS.MoveToLBP = true; PRS.NewRange = true; } else { PRS.EmptyLine = false; PRS.NewRange = true; } } else { PRS.MoveToLBP = true; PRS.NewRange = true; } } if (true !== PRS.NewRange) { PRS.WordLen += LetterLen; } } if (true !== PRS.NewRange) { RangeEndPos = this.Root.Content.length; if (PRS.LineAscent < this.Ascent) { PRS.LineAscent = this.Ascent; } if (PRS.LineDescent < this.Descent) { PRS.LineDescent = this.Descent; } } else { PRS.LineTextAscent = OldLineTextAscent; PRS.LineTextAscent2 = OldLineTextAscent2; PRS.LineTextDescent = OldLineTextDescent; } this.protected_FillRange(CurLine, CurRange, RangeStartPos, RangeEndPos); }; ParaMath.prototype.Recalculate_Set_RangeEndPos = function (PRS, PRP, Depth) { var CurLine = PRS.Line - this.StartLine; var CurRange = (0 === CurLine ? PRS.Range - this.StartRange : PRS.Range); var CurPos = PRP.Get(Depth); this.protected_FillRangeEndPos(CurLine, CurRange, CurPos); }; ParaMath.prototype.Recalculate_Range_Width = function (PRSC, _CurLine, _CurRange) { 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); if (EndPos >= 1) { PRSC.Letters++; if (true !== PRSC.Word) { PRSC.Word = true; PRSC.Words++; } PRSC.Range.W += this.Width; PRSC.Range.W += PRSC.SpaceLen; PRSC.SpaceLen = 0; if (PRSC.Words > 1) { PRSC.Spaces += PRSC.SpacesCount; } else { PRSC.SpacesSkip += PRSC.SpacesCount; } PRSC.SpacesCount = 0; } }; ParaMath.prototype.Recalculate_Range_Spaces = function (PRSA, _CurLine, _CurRange, _CurPage) { 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); if (EndPos >= 1) { if (0 !== PRSA.LettersSkip) { this.WidthVisible = this.Width; PRSA.LettersSkip--; } else { this.WidthVisible = this.Width + PRSA.JustifyWord; } this.X = PRSA.X; this.Y = PRSA.Y - this.Root.size.ascent; PRSA.X += this.WidthVisible; PRSA.LastW = this.WidthVisible; } }; ParaMath.prototype.Recalculate_PageEndInfo = function (PRSI, _CurLine, _CurRange) {}; ParaMath.prototype.Save_RecalculateObject = function (Copy) { var RecalcObj = new CRunRecalculateObject(this.StartLine, this.StartRange); RecalcObj.Save_Lines(this, Copy); return RecalcObj; }; ParaMath.prototype.Load_RecalculateObject = function (RecalcObj) { RecalcObj.Load_Lines(this); }; ParaMath.prototype.Prepare_RecalculateObject = function () { this.protected_ClearLines(); }; ParaMath.prototype.Is_EmptyRange = function (_CurLine, _CurRange) { 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); if (EndPos >= 1) { return false; } return true; }; ParaMath.prototype.Check_Range_OnlyMath = function (Checker, CurRange, CurLine) { if (null !== Checker.Math) { Checker.Math = null; Checker.Result = false; } else { Checker.Math = this; } }; ParaMath.prototype.Check_MathPara = function (Checker) { Checker.Found = true; Checker.Result = false; }; ParaMath.prototype.Check_PageBreak = function () { return false; }; ParaMath.prototype.Check_BreakPageEnd = function (PBChecker) { return true; }; ParaMath.prototype.Get_ParaPosByContentPos = function (ContentPos, Depth) { var Pos = ContentPos.Get(Depth); var CurLine = 0; var CurRange = 0; var LinesCount = this.protected_GetLinesCount(); for (; CurLine < LinesCount; CurLine++) { var RangesCount = this.protected_GetRangesCount(CurLine); for (CurRange = 0; CurRange < RangesCount; CurRange++) { var StartPos = this.protected_GetRangeStartPos(CurLine, CurRange); var EndPos = this.protected_GetRangeEndPos(CurLine, CurRange); if (Pos < EndPos && Pos >= StartPos) { return new CParaPos((CurLine === 0 ? CurRange + this.StartRange : CurRange), CurLine + this.StartLine, 0, 0); } } } return new CParaPos((LinesCount === 1 ? this.protected_GetRangesCount(0) - 1 + this.StartRange : this.protected_GetRangesCount(0) - 1), LinesCount - 1 + this.StartLine, 0, 0); }; ParaMath.prototype.Recalculate_CurPos = function (_X, Y, CurrentRun, _CurRange, _CurLine, _CurPage, UpdateCurPos, UpdateTarget, ReturnTarget) { 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); var result = { X: _X + this.Root.size.width }; if (EndPos >= 1 && CurrentRun == true) { result = this.Root.Recalculate_CurPos(_X, Y, CurrentRun, _CurRange, _CurLine, _CurPage, UpdateCurPos, UpdateTarget, ReturnTarget); } return result; }; ParaMath.prototype.Refresh_RecalcData = function (Data) { this.Paragraph.Refresh_RecalcData2(0); }; ParaMath.prototype.Refresh_RecalcData2 = function (Data) { this.Paragraph.Refresh_RecalcData2(0); }; ParaMath.prototype.Recalculate_MinMaxContentWidth = function (MinMax) { if (true === this.NeedResize) { var RPI = new CRPI(); RPI.MergeMathInfo(this.ParaMathRPI); RPI.NeedResize = true; RPI.PRS = this.Paragraph.m_oPRSW; this.Root.PreRecalc(null, this, new CMathArgSize(), RPI); this.Root.Resize(g_oTextMeasurer, RPI); this.Width = this.Root.size.width; } if (false === MinMax.bWord) { MinMax.bWord = true; MinMax.nWordLen = this.Width; } else { MinMax.nWordLen += this.Width; } if (MinMax.nSpaceLen > 0) { MinMax.nCurMaxWidth += MinMax.nSpaceLen; MinMax.nSpaceLen = 0; } MinMax.nCurMaxWidth += this.Width; }; ParaMath.prototype.Get_Range_VisibleWidth = function (RangeW, _CurLine, _CurRange) { 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); if (EndPos >= 1) { RangeW.W += this.Width; } }; ParaMath.prototype.Shift_Range = function (Dx, Dy, _CurLine, _CurRange) { 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); if (EndPos >= 1) { this.X += Dx; this.Y += Dy; } }; ParaMath.prototype.Set_Inline = function (value) { if (value !== this.ParaMathRPI.bInline) { this.ParaMathRPI.bChangeInline = true; this.ParaMathRPI.NeedResize = true; this.ParaMathRPI.bInline = value; } }; ParaMath.prototype.Get_Inline = function () { return this.ParaMathRPI.bInline; }; ParaMath.prototype.Is_Inline = function () { return this.ParaMathRPI.bInline; }; ParaMath.prototype.Get_Align = function () { if (undefined !== this.Jc) { return this.Jc; } return align_Center; }; ParaMath.prototype.Set_Align = function (Align) { if (align_Center !== Align && align_Left !== Align && align_Right !== Align) { Align = align_Center; } if (this.Jc !== Align) { History.Add(this, new CChangesMathParaJc(Align, this.Jc)); this.raw_SetAlign(Align); } }; ParaMath.prototype.raw_SetAlign = function (Align) { this.Jc = Align; this.SetNeedResize(); }; ParaMath.prototype.SetNeedResize = function () { this.ParaMathRPI.NeedResize = true; }; ParaMath.prototype.SetRecalcCtrPrp = function (Class) { if (this.Root.Content.length > 0 && this.ParaMathRPI.bRecalcCtrPrp == false) { this.ParaMathRPI.bRecalcCtrPrp = this.Root.Content[0] == Class; } }; ParaMath.prototype.MathToImageConverter = function (bCopy, _canvasInput, _widthPx, _heightPx, raster_koef) { var bTurnOnId = false, bTurnOnHistory = false; if (false === g_oTableId.m_bTurnOff) { g_oTableId.m_bTurnOff = true; bTurnOnId = true; } if (true === History.Is_On()) { bTurnOnHistory = true; History.TurnOff(); } var oldDefTabStop = Default_Tab_Stop; Default_Tab_Stop = 1; var hdr = new CHeaderFooter(editor.WordControl.m_oLogicDocument.HdrFtr, editor.WordControl.m_oLogicDocument, editor.WordControl.m_oDrawingDocument, hdrftr_Header); var _dc = hdr.Content; var par = new Paragraph(editor.WordControl.m_oDrawingDocument, _dc, 0, 0, 0, 0, false); if (bCopy) { par.Internal_Content_Add(0, this.Copy(false), false); } else { par.Internal_Content_Add(0, this, false); } _dc.Internal_Content_Add(0, par, false); par.Set_Align(align_Left); par.Set_Tabs(new CParaTabs()); var _ind = new CParaInd(); _ind.FirstLine = 0; _ind.Left = 0; _ind.Right = 0; par.Set_Ind(_ind, false); var _sp = new CParaSpacing(); _sp.Line = 1; _sp.LineRule = linerule_Auto; _sp.Before = 0; _sp.BeforeAutoSpacing = false; _sp.After = 0; _sp.AfterAutoSpacing = false; par.Set_Spacing(_sp, false); _dc.Reset(0, 0, 10000, 10000); _dc.Recalculate_Page(0, true); _dc.Reset(0, 0, par.Lines[0].Ranges[0].W + 0.001, 10000); _dc.Recalculate_Page(0, true); Default_Tab_Stop = oldDefTabStop; if (true === bTurnOnId) { g_oTableId.m_bTurnOff = false; } if (true === bTurnOnHistory) { History.TurnOn(); } window.IsShapeToImageConverter = true; var dKoef = g_dKoef_mm_to_pix; var w_mm = this.Width; var h_mm = this.Height; var w_px = (w_mm * dKoef) >> 0; var h_px = (h_mm * dKoef) >> 0; if (undefined !== raster_koef) { w_px *= raster_koef; h_px *= raster_koef; if (undefined !== _widthPx) { _widthPx *= raster_koef; } if (undefined !== _heightPx) { _heightPx *= raster_koef; } } var _canvas = (_canvasInput === undefined) ? document.createElement("canvas") : _canvasInput; _canvas.width = (undefined == _widthPx) ? w_px : _widthPx; _canvas.height = (undefined == _heightPx) ? h_px : _heightPx; var _ctx = _canvas.getContext("2d"); var g = new CGraphics(); g.init(_ctx, w_px, h_px, w_mm, h_mm); g.m_oFontManager = g_fontManager; g.m_oCoordTransform.tx = 0; g.m_oCoordTransform.ty = 0; if (_widthPx !== undefined && _heightPx !== undefined) { g.m_oCoordTransform.tx = (_widthPx - w_px) / 2; g.m_oCoordTransform.ty = (_heightPx - h_px) / 2; } g.transform(1, 0, 0, 1, 0, 0); par.Draw(0, g); window.IsShapeToImageConverter = false; if (undefined === _canvasInput) { var _ret = { ImageNative: _canvas, ImageUrl: "" }; try { _ret.ImageUrl = _canvas.toDataURL("image/png"); } catch(err) { _ret.ImageUrl = ""; } return _ret; } return null; }; ParaMath.prototype.GetFirstRPrp = function () { return this.Root.getFirstRPrp(this); }; ParaMath.prototype.GetShiftCenter = function (oMeasure, font) { oMeasure.SetFont(font); var metrics = oMeasure.Measure2Code(8727); return 0.6 * metrics.Height; }; ParaMath.prototype.GetPlh = function (oMeasure, font) { oMeasure.SetFont(font); return oMeasure.Measure2Code(11034).Height; }; ParaMath.prototype.GetA = function (oMeasure, font) { oMeasure.SetFont(font); return oMeasure.Measure2Code(97).Height; }; ParaMath.prototype.SetMathProperties = function (props) { if (props.naryLim == NARY_UndOvr || props.naryLim == NARY_SubSup) { this.MathPr.naryLim = props.naryLim; } if (props.intLim == NARY_UndOvr || props.intLim == NARY_SubSup) { this.MathPr.intLim = props.intLim; } if (props.brkBin == BREAK_BEFORE || props.brkBin == BREAK_AFTER || props.brkBin == BREAK_REPEAT) { this.MathPr.brkBin = props.brkBin; } if (props.brkSubBin == BREAK_MIN_MIN || props.brkSubBin == BREAK_PLUS_MIN || props.brkSubBin == BREAK_MIN_PLUS) { this.MathPr.brkSubBin = props.brkSubBin; } if (props.smallFrac == true || props.smallFrac == false) { this.MathPr.smallFrac = props.smallFrac; } if (props.wrapIndent + 0 == props.wrapIndent && isNaN(props.wrapIndent)) { this.MathPr.wrapIndent = props.wrapIndent / 1440; } if (props.wrapRight == true || props.wrapRight == false) { this.MathPr.wrapRight = props.wrapRight; } this.MathPr.defJc = props.defJc; this.MathPr.dispDef = props.dispDef; this.MathPr.lMargin = props.lMargin; this.MathPr.rMargin = props.rMargin; this.MathPr.mathFont = props.mathFont; this.MathPr.interSp = props.interSp; this.MathPr.intraSp = intraSp; this.MathPr.postSp = props.postSp; this.MathPr.preSp = props.preSp; }; ParaMath.prototype.GetMathPr = function () { return this.MathPr; }; ParaMath.prototype.Get_Default_TPrp = function () { return this.DefaultTextPr; }; ParaMath.prototype.Draw_HighLights = function (PDSH) { var CurLine = PDSH.Line - this.StartLine; var CurRange = (0 === CurLine ? PDSH.Range - this.StartRange : PDSH.Range); var StartPos = this.protected_GetRangeStartPos(CurLine, CurRange); var EndPos = this.protected_GetRangeEndPos(CurLine, CurRange); var X = PDSH.X; var Y0 = PDSH.Y0; var Y1 = PDSH.Y1; if (EndPos >= 1) { var Comm = PDSH.Save_Comm(); var Coll = PDSH.Save_Coll(); this.Root.Draw_HighLights(PDSH, false); var CommFirst = PDSH.Comm.Get_Next(); var CollFirst = PDSH.Coll.Get_Next(); PDSH.Load_Comm(Comm); PDSH.Load_Coll(Coll); if (null !== CommFirst) { var CommentsCount = PDSH.Comments.length; var CommentId = (CommentsCount > 0 ? PDSH.Comments[CommentsCount - 1] : null); var CommentsFlag = PDSH.CommentsFlag; var Bounds = this.Root.Get_Bounds(); Comm.Add(Bounds.Y, Bounds.Y + Bounds.H, Bounds.X, Bounds.X + Bounds.W, 0, 0, 0, 0, { Active: CommentsFlag === comments_ActiveComment ? true : false, CommentId: CommentId }); } if (null !== CollFirst) { var Bounds = this.Root.Get_Bounds(); Coll.Add(Bounds.Y, Bounds.Y + Bounds.H, Bounds.X, Bounds.X + Bounds.W, 0, CollFirst.r, CollFirst.g, CollFirst.b); } } PDSH.Y0 = Y0; PDSH.Y1 = Y1; }; ParaMath.prototype.Draw_Elements = function (PDSE) { 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); if (EndPos >= 1) { PDSE.Y -= this.Ascent; this.Root.draw(PDSE.X, PDSE.Y, PDSE.Graphics, PDSE); PDSE.Y += this.Ascent; PDSE.X += this.Width; } }; ParaMath.prototype.Draw_Lines = function (PDSL) { var CurLine = PDSL.Line - this.StartLine; var CurRange = (0 === CurLine ? PDSL.Range - this.StartRange : PDSL.Range); var StartPos = this.protected_GetRangeStartPos(CurLine, CurRange); var EndPos = this.protected_GetRangeEndPos(CurLine, CurRange); if (EndPos >= 1) { var FirstRPrp = this.GetFirstRPrp(); var Para = PDSL.Paragraph; var aUnderline = PDSL.Underline; var X = PDSL.X; var Y = PDSL.Baseline; var UndOff = PDSL.UnderlineOffset; var UnderlineY = Y + UndOff; var LineW = (FirstRPrp.FontSize / 18) * g_dKoef_pt_to_mm; var BgColor = PDSL.BgColor; if (undefined !== FirstRPrp.Shd && shd_Nil !== FirstRPrp.Shd.Value) { BgColor = FirstRPrp.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 === FirstRPrp.Color && undefined === FirstRPrp.Unifill)) { CurColor = new CDocumentColor(128, 0, 151); } else { if (true === FirstRPrp.Color.Auto && !FirstRPrp.Unifill) { CurColor = new CDocumentColor(AutoColor.r, AutoColor.g, AutoColor.b); } else { if (FirstRPrp.Unifill) { FirstRPrp.Unifill.check(Theme, ColorMap); RGBA = FirstRPrp.Unifill.getRGBAColor(); CurColor = new CDocumentColor(RGBA.R, RGBA.G, RGBA.B); } else { CurColor = new CDocumentColor(FirstRPrp.Color.r, FirstRPrp.Color.g, FirstRPrp.Color.b); } } } if (true === FirstRPrp.Underline) { aUnderline.Add(UnderlineY, UnderlineY, X, X + this.Width, LineW, CurColor.r, CurColor.g, CurColor.b); } this.Root.Draw_Lines(PDSL); PDSL.X = this.X + this.Width; } }; ParaMath.prototype.Is_CursorPlaceable = function () { return true; }; ParaMath.prototype.Cursor_Is_Start = function () { return this.Root.Cursor_Is_Start(); }; ParaMath.prototype.Cursor_Is_NeededCorrectPos = function () { return false; }; ParaMath.prototype.Cursor_Is_End = function () { return this.Root.Cursor_Is_End(); }; ParaMath.prototype.Cursor_MoveToStartPos = function () { this.Root.Cursor_MoveToStartPos(); }; ParaMath.prototype.Cursor_MoveToEndPos = function (SelectFromEnd) { this.Root.Cursor_MoveToEndPos(SelectFromEnd); }; ParaMath.prototype.Get_ParaContentPosByXY = function (SearchPos, Depth, _CurLine, _CurRange, StepEnd, Flag) { var Result = false; var CurLine = _CurLine - this.StartLine; var CurRange = (0 === CurLine ? _CurRange - this.StartRange : _CurRange); var EndPos = this.protected_GetRangeEndPos(CurLine, CurRange); if (EndPos >= 1) { var Dx = this.Root.size.width; var D = SearchPos.X - SearchPos.CurX; var CurX = SearchPos.CurX; Result = this.Root.Get_ParaContentPosByXY(SearchPos, Depth, _CurLine, _CurRange, StepEnd); if (D >= -0.001 && D <= Dx + 0.001) { SearchPos.InText = true; SearchPos.DiffX = 0.001; SearchPos.InTextPos.Copy_FromDepth(SearchPos.Pos, Depth); } SearchPos.CurX = CurX + Dx; } return Result; }; ParaMath.prototype.Get_ParaContentPos = function (bSelection, bStart, ContentPos) { this.Root.Get_ParaContentPos(bSelection, bStart, ContentPos); }; ParaMath.prototype.Set_ParaContentPos = function (ContentPos, Depth) { this.Root.Set_ParaContentPos(ContentPos, Depth); }; ParaMath.prototype.Get_PosByElement = function (Class, ContentPos, Depth, UseRange, Range, Line) { if (this === Class) { return true; } return false; }; ParaMath.prototype.Get_ElementByPos = function (ContentPos, Depth) { return this.Root.Get_ElementByPos(ContentPos, Depth); }; ParaMath.prototype.Get_PosByDrawing = function (Id, ContentPos, Depth) { return false; }; ParaMath.prototype.Get_RunElementByPos = function (ContentPos, Depth) { return null; }; ParaMath.prototype.Get_LastRunInRange = function (_CurLine, _CurRange) { return null; }; ParaMath.prototype.Get_LeftPos = function (SearchPos, ContentPos, Depth, UseContentPos) { return this.Root.Get_LeftPos(SearchPos, ContentPos, Depth, UseContentPos, false); }; ParaMath.prototype.Get_RightPos = function (SearchPos, ContentPos, Depth, UseContentPos, StepEnd) { return this.Root.Get_RightPos(SearchPos, ContentPos, Depth, UseContentPos, StepEnd, false); }; ParaMath.prototype.Get_WordStartPos = function (SearchPos, ContentPos, Depth, UseContentPos) { this.Root.Get_WordStartPos(SearchPos, ContentPos, Depth, UseContentPos, false); }; ParaMath.prototype.Get_WordEndPos = function (SearchPos, ContentPos, Depth, UseContentPos, StepEnd) { this.Root.Get_WordEndPos(SearchPos, ContentPos, Depth, UseContentPos, StepEnd, false); }; ParaMath.prototype.Get_EndRangePos = function (_CurLine, _CurRange, SearchPos, Depth) { var CurLine = _CurLine - this.StartLine; var CurRange = (0 === CurLine ? _CurRange - this.StartRange : _CurRange); var EndPos = this.protected_GetRangeEndPos(CurLine, CurRange); if (EndPos >= 1) { this.Root.Get_EndPos(false, SearchPos.Pos, Depth); return true; } return false; }; ParaMath.prototype.Get_StartRangePos = function (_CurLine, _CurRange, SearchPos, Depth) { var CurLine = _CurLine - this.StartLine; var CurRange = (0 === CurLine ? _CurRange - this.StartRange : _CurRange); var EndPos = this.protected_GetRangeEndPos(CurLine, CurRange); if (EndPos >= 1) { this.Root.Get_StartPos(SearchPos.Pos, Depth); return true; } return false; }; ParaMath.prototype.Get_StartRangePos2 = function (_CurLine, _CurRange, ContentPos, Depth) { var CurLine = _CurLine - this.StartLine; var CurRange = (0 === CurLine ? _CurRange - this.StartRange : _CurRange); var EndPos = this.protected_GetRangeEndPos(CurLine, CurRange); if (EndPos >= 1) { return this.Root.Get_StartPos(ContentPos, Depth); } return false; }; ParaMath.prototype.Get_StartPos = function (ContentPos, Depth) { this.Root.Get_StartPos(ContentPos, Depth); }; ParaMath.prototype.Get_EndPos = function (BehindEnd, ContentPos, Depth) { this.Root.Get_EndPos(BehindEnd, ContentPos, Depth); }; ParaMath.prototype.Set_SelectionContentPos = function (StartContentPos, EndContentPos, Depth, StartFlag, EndFlag) { this.Root.Set_SelectionContentPos(StartContentPos, EndContentPos, Depth, StartFlag, EndFlag); this.bSelectionUse = true; }; ParaMath.prototype.Selection_IsUse = function () { return this.bSelectionUse; }; ParaMath.prototype.Selection_Stop = function () {}; ParaMath.prototype.Selection_Remove = function () { this.bSelectionUse = false; this.Root.Selection_Remove(); }; ParaMath.prototype.Select_All = function (Direction) { this.bSelectionUse = true; this.Root.Select_All(); }; ParaMath.prototype.Selection_DrawRange = function (_CurLine, _CurRange, SelectionDraw) { var CurLine = _CurLine - this.StartLine; var CurRange = (0 === CurLine ? _CurRange - this.StartRange : _CurRange); var EndPos = this.protected_GetRangeEndPos(CurLine, CurRange); if (EndPos >= 1) { if (true === this.bSelectionUse) { var oSelectedContent = this.GetSelectContent(); oSelectedContent.Content.Selection_DrawRange(_CurLine, _CurRange, SelectionDraw); } else { if (true === SelectionDraw.FindStart) { SelectionDraw.StartX += this.Width; } } } }; ParaMath.prototype.Selection_IsEmpty = function (CheckEnd) { return this.Root.Selection_IsEmpty(); }; ParaMath.prototype.Selection_IsPlaceholder = function () { var bPlaceholder = false; var result = this.GetSelectContent(), SelectContent = result.Content; var start = result.Start, end = result.End; if (start == end) { bPlaceholder = SelectContent.IsPlaceholder(); } return bPlaceholder; }; ParaMath.prototype.Selection_CheckParaEnd = function () { return false; }; ParaMath.prototype.Selection_CheckParaContentPos = function (ContentPos, Depth, bStart, bEnd) { return this.Root.Selection_CheckParaContentPos(ContentPos, Depth, bStart, bEnd); }; ParaMath.prototype.Is_SelectedAll = function (Props) { return this.Root.Is_SelectedAll(Props); }; ParaMath.prototype.Selection_CorrectLeftPos = function (Direction) { return false; }; ParaMath.prototype.Undo = function (Data) { Data.Undo(this); }; ParaMath.prototype.Redo = function (Data) { Data.Redo(this); }; ParaMath.prototype.Save_Changes = function (Data, Writer) { WriteChanges_ToBinary(Data, Writer); }; ParaMath.prototype.Load_Changes = function (Reader) { ReadChanges_FromBinary(Reader, this); }; ParaMath.prototype.Write_ToBinary2 = function (Writer) { Writer.WriteLong(historyitem_type_Math); Writer.WriteString2(this.Id); Writer.WriteLong(this.Type); Writer.WriteString2(this.Root.Id); }; ParaMath.prototype.Read_FromBinary2 = function (Reader) { this.Id = Reader.GetString2(); this.Type = Reader.GetLong(); this.Root = g_oTableId.Get_ById(Reader.GetString2()); this.Root.bRoot = true; this.Root.ParentElement = this; }; ParaMath.prototype.Get_ContentSelection = function () { var oContent = this.GetSelectContent().Content; if (oContent.bRoot) { return null; } var X = oContent.pos.x + this.X; var Y = oContent.pos.y + this.Y; return { X: X, Y: Y, W: oContent.size.width, H: oContent.size.height }; }; ParaMath.prototype.Recalc_RunsCompiledPr = function () { this.Root.Recalc_RunsCompiledPr(); }; ParaMath.prototype.Is_InInnerContent = function () { var oContent = this.GetSelectContent().Content; if (oContent.bRoot) { return false; } return true; }; ParaMath.prototype.Handle_AddNewLine = function () { var ContentPos = new CParagraphContentPos(); var CurrContent = this.GetSelectContent().Content; if (true === CurrContent.bRoot) { return false; } CurrContent.Get_ParaContentPos(this.bSelectionUse, true, ContentPos); var NeedRecalculate = false; if (MATH_EQ_ARRAY === CurrContent.ParentElement.kind) { var NewContent = CurrContent.Parent.addRow(); CurrContent.SplitContent(NewContent, ContentPos, 0); NewContent.Correct_Content(true); CurrContent.Correct_Content(true); NewContent.Cursor_MoveToStartPos(); NeedRecalculate = true; } else { if (MATH_MATRIX !== CurrContent.ParentElement.kind) { var ctrPrp = CurrContent.Parent.CtrPrp.Copy(); var props = { row: 2, ctrPrp: ctrPrp }; var EqArray = new CEqArray(props); var FirstContent = EqArray.getElementMathContent(0); var SecondContent = EqArray.getElementMathContent(1); CurrContent.SplitContent(SecondContent, ContentPos, 0); CurrContent.CopyTo(FirstContent, false); var Run = CurrContent.getElem(0); Run.Remove_FromContent(0, Run.Content.length, true); CurrContent.Remove_FromContent(1, CurrContent.Content.length); CurrContent.Add_ToContent(1, EqArray); CurrContent.Correct_Content(true); var CurrentContent = new CParagraphContentPos(); this.Get_ParaContentPos(false, false, CurrentContent); var RightContentPos = new CParagraphSearchPos(); this.Get_RightPos(RightContentPos, CurrentContent, 0, true); this.Set_ParaContentPos(RightContentPos.Pos, 0); EqArray.CurPos = 1; SecondContent.Cursor_MoveToStartPos(); NeedRecalculate = true; } } if (true === NeedRecalculate) { this.SetNeedResize(); } return NeedRecalculate; }; ParaMath.prototype.Split = function (ContentPos, Depth) { var NewParaMath = new ParaMath(); NewParaMath.Jc = this.Jc; this.Root.SplitContent(NewParaMath.Root, ContentPos, Depth); return NewParaMath; }; ParaMath.prototype.Make_AutoCorrect = function () { return false; }; ParaMath.prototype.Get_Bounds = function () { if (undefined === this.Paragraph || null === this.Paragraph) { return { X: this.X, Y: this.Y, W: this.Width, H: this.Height, Page: 0 }; } else { var LinesCount = this.protected_GetLinesCount(); var CurLine = this.StartLine + LinesCount - 1; var CurPage = this.Paragraph.Get_PageByLine(CurLine); var Y = this.Paragraph.Pages[CurPage].Y + this.Paragraph.Lines[CurLine].Top; var H = this.Paragraph.Lines[CurLine].Bottom - this.Paragraph.Lines[CurLine].Top; return { X: this.X, Y: Y, W: this.Width, H: H, Page: this.Paragraph.Get_StartPage_Absolute() + CurPage }; } }; ParaMath.prototype.Document_UpdateInterfaceState = function () { var SelectedContent = this.GetSelectContent(); var MathContent = SelectedContent.Content; var MathProps = new CMathProp(); if (MathContent.bRoot) { MathProps.Type = c_oAscMathInterfaceType.Common; MathProps.Pr = null; } else { if (undefined !== MathContent.ParentElement && null !== MathContent.ParentElement) { MathContent.ParentElement.Document_UpdateInterfaceState(MathProps); } } editor.sync_MathPropCallback(MathProps); }; ParaMath.prototype.Is_ContentUse = function (MathContent) { if (this.Root === MathContent) { return true; } return false; }; var historyitem_Math_AddItem = 1; var historyitem_Math_RemoveItem = 2; var historyitem_Math_CtrPrpFSize = 3; var historyitem_Math_ParaJc = 4; var historyitem_Math_CtrPrpShd = 5; var historyitem_Math_AddItems_ToMathBase = 6; var historyitem_Math_EqArrayPr = 7; var historyitem_Math_CtrPrpColor = 8; var historyitem_Math_CtrPrpUnifill = 9; var historyitem_Math_CtrPrpUnderline = 10; var historyitem_Math_CtrPrpStrikeout = 11; var historyitem_Math_CtrPrpDoubleStrikeout = 12; var historyitem_Math_CtrPrpItalic = 13; var historyitem_Math_CtrPrpBold = 14; var historyitem_Math_RFontsAscii = 15; var historyitem_Math_RFontsHAnsi = 16; var historyitem_Math_RFontsCS = 17; var historyitem_Math_RFontsEastAsia = 18; var historyitem_Math_RFontsHint = 19; function ReadChanges_FromBinary(Reader, Class) { var Type = Reader.GetLong(); var Changes = null; switch (Type) { case historyitem_Math_CtrPrpFSize: Changes = new CChangesMathFontSize(); break; case historyitem_Math_ParaJc: Changes = new CChangesMathParaJc(); break; case historyitem_Math_CtrPrpShd: Changes = new CChangesMathShd(); break; case historyitem_Math_AddItems_ToMathBase: Changes = new CChangesMathAddItems(); break; case historyitem_Math_CtrPrpColor: Changes = new CChangesMathColor(); break; case historyitem_Math_CtrPrpUnifill: Changes = new CChangesMathUnifill(); break; case historyitem_Math_CtrPrpUnderline: Changes = new CChangesMathUnderline(); break; case historyitem_Math_CtrPrpStrikeout: Changes = new CChangesMathStrikeout(); break; case historyitem_Math_CtrPrpDoubleStrikeout: Changes = new CChangesMath_DoubleStrikeout(); break; case historyitem_Math_CtrPrpItalic: Changes = new CChangesMathItalic(); break; case historyitem_Math_CtrPrpBold: Changes = new CChangesMathBold(); break; case historyitem_Math_RFontsAscii: Changes = new CChangesMath_RFontsAscii(); break; case historyitem_Math_RFontsHAnsi: Changes = new CChangesMath_RFontsHAnsi(); break; case historyitem_Math_RFontsCS: Changes = new CChangesMath_RFontsCS(); break; case historyitem_Math_RFontsEastAsia: Changes = new CChangesMath_RFontsEastAsia(); break; case historyitem_Math_RFontsHint: Changes = new CChangesMath_RFontsHint(); break; } if (null !== Changes) { Changes.Load_Changes(Reader, Class); } } function WriteChanges_ToBinary(Changes, Writer) { Writer.WriteLong(Changes.Type); Changes.Save_Changes(Writer); } function CChangesMathFontSize(NewValue, OldValue) { this.New = NewValue; this.Old = OldValue; } CChangesMathFontSize.prototype.Type = historyitem_Math_CtrPrpFSize; CChangesMathFontSize.prototype.Undo = function (Class) { Class.raw_SetFontSize(this.Old); }; CChangesMathFontSize.prototype.Redo = function (Class) { Class.raw_SetFontSize(this.New); }; CChangesMathFontSize.prototype.Save_Changes = function (Writer) { if (undefined === this.New) { Writer.WriteBool(true); } else { Writer.WriteBool(false); Writer.WriteLong(this.New); } }; CChangesMathFontSize.prototype.Load_Changes = function (Reader, Class) { if (true === Reader.GetBool()) { this.New = undefined; } else { this.New = Reader.GetLong(); } this.Redo(Class); }; function CChangesMathShd(NewValue, OldValue) { this.New = NewValue; this.Old = OldValue; } CChangesMathShd.prototype.Type = historyitem_Math_CtrPrpShd; CChangesMathShd.prototype.Undo = function (Class) { Class.raw_SetShd(this.Old); }; CChangesMathShd.prototype.Redo = function (Class) { Class.raw_SetShd(this.New); }; CChangesMathShd.prototype.Save_Changes = function (Writer) { if (undefined !== this.New) { Writer.WriteBool(false); this.New.Write_ToBinary(Writer); } else { Writer.WriteBool(true); } }; CChangesMathShd.prototype.Load_Changes = function (Reader, Class) { if (Reader.GetBool() == false) { this.New = new CDocumentShd(); this.New.Read_FromBinary(Reader); } else { this.New = undefined; } this.Redo(Class); }; function CChangesMathColor(NewValue, OldValue) { this.New = NewValue; this.Old = OldValue; } CChangesMathColor.prototype.Type = historyitem_Math_CtrPrpColor; CChangesMathColor.prototype.Undo = function (Class) { Class.raw_SetColor(this.Old); }; CChangesMathColor.prototype.Redo = function (Class) { Class.raw_SetColor(this.New); }; CChangesMathColor.prototype.Save_Changes = function (Writer) { if (undefined !== this.New) { Writer.WriteBool(false); this.New.Write_ToBinary(Writer); } else { Writer.WriteBool(true); } }; CChangesMathColor.prototype.Load_Changes = function (Reader, Class) { if (Reader.GetBool() == false) { this.New = new CDocumentColor(0, 0, 0, false); this.New.Read_FromBinary(Reader); } else { this.New = undefined; } this.Redo(Class); }; function CChangesMathUnifill(NewValue, OldValue) { this.New = NewValue; this.Old = OldValue; } CChangesMathUnifill.prototype.Type = historyitem_Math_CtrPrpUnifill; CChangesMathUnifill.prototype.Undo = function (Class) { Class.raw_SetUnifill(this.Old); }; CChangesMathUnifill.prototype.Redo = function (Class) { Class.raw_SetUnifill(this.New); }; CChangesMathUnifill.prototype.Save_Changes = function (Writer) { if (undefined !== this.New) { Writer.WriteBool(false); this.New.Write_ToBinary(Writer); } else { Writer.WriteBool(true); } }; CChangesMathUnifill.prototype.Load_Changes = function (Reader, Class) { if (Reader.GetBool() == false) { this.New = new CUniFill(); this.New.Read_FromBinary(Reader); } else { this.New = undefined; } this.Redo(Class); }; function CChangesMathUnderline(NewValue, OldValue) { this.New = NewValue; this.Old = OldValue; } CChangesMathUnderline.prototype.Type = historyitem_Math_CtrPrpUnderline; CChangesMathUnderline.prototype.Undo = function (Class) { Class.raw_SetUnderline(this.Old); }; CChangesMathUnderline.prototype.Redo = function (Class) { Class.raw_SetUnderline(this.New); }; CChangesMathUnderline.prototype.Save_Changes = function (Writer) { if (undefined === this.New) { Writer.WriteBool(true); } else { Writer.WriteBool(false); Writer.WriteBool(this.New); } }; CChangesMathUnderline.prototype.Load_Changes = function (Reader, Class) { if (true === Reader.GetBool()) { this.New = undefined; } else { this.New = Reader.GetBool(); } this.Redo(Class); }; function CChangesMathStrikeout(NewValue, OldValue) { this.New = NewValue; this.Old = OldValue; } CChangesMathStrikeout.prototype.Type = historyitem_Math_CtrPrpStrikeout; CChangesMathStrikeout.prototype.Undo = function (Class) { Class.raw_SetStrikeout(this.Old); }; CChangesMathStrikeout.prototype.Redo = function (Class) { Class.raw_SetStrikeout(this.New); }; CChangesMathStrikeout.prototype.Save_Changes = function (Writer) { if (undefined === this.New) { Writer.WriteBool(true); } else { Writer.WriteBool(false); Writer.WriteBool(this.New); } }; CChangesMathStrikeout.prototype.Load_Changes = function (Reader, Class) { if (true === Reader.GetBool()) { this.New = undefined; } else { this.New = Reader.GetBool(); } this.Redo(Class); }; function CChangesMath_DoubleStrikeout(NewValue, OldValue) { this.New = NewValue; this.Old = OldValue; } CChangesMath_DoubleStrikeout.prototype.Type = historyitem_Math_CtrPrpDoubleStrikeout; CChangesMath_DoubleStrikeout.prototype.Undo = function (Class) { Class.raw_Set_DoubleStrikeout(this.Old); }; CChangesMath_DoubleStrikeout.prototype.Redo = function (Class) { Class.raw_Set_DoubleStrikeout(this.New); }; CChangesMath_DoubleStrikeout.prototype.Save_Changes = function (Writer) { if (undefined === this.New) { Writer.WriteBool(true); } else { Writer.WriteBool(false); Writer.WriteBool(this.New); } }; CChangesMath_DoubleStrikeout.prototype.Load_Changes = function (Reader, Class) { if (true === Reader.GetBool()) { this.New = undefined; } else { this.New = Reader.GetBool(); } this.Redo(Class); }; function CChangesMathItalic(NewValue, OldValue) { this.New = NewValue; this.Old = OldValue; } CChangesMathItalic.prototype.Type = historyitem_Math_CtrPrpItalic; CChangesMathItalic.prototype.Undo = function (Class) { Class.raw_SetItalic(this.Old); }; CChangesMathItalic.prototype.Redo = function (Class) { Class.raw_SetItalic(this.New); }; CChangesMathItalic.prototype.Save_Changes = function (Writer) { if (undefined === this.New) { Writer.WriteBool(true); } else { Writer.WriteBool(false); Writer.WriteBool(this.New); } }; CChangesMathItalic.prototype.Load_Changes = function (Reader, Class) { if (true === Reader.GetBool()) { this.New = undefined; } else { this.New = Reader.GetBool(); } this.Redo(Class); }; function CChangesMathBold(NewValue, OldValue) { this.New = NewValue; this.Old = OldValue; } CChangesMathBold.prototype.Type = historyitem_Math_CtrPrpBold; CChangesMathBold.prototype.Undo = function (Class) { Class.raw_SetBold(this.Old); }; CChangesMathBold.prototype.Redo = function (Class) { Class.raw_SetBold(this.New); }; CChangesMathBold.prototype.Save_Changes = function (Writer) { if (undefined === this.New) { Writer.WriteBool(true); } else { Writer.WriteBool(false); Writer.WriteBool(this.New); } }; CChangesMathBold.prototype.Load_Changes = function (Reader, Class) { if (true === Reader.GetBool()) { this.New = undefined; } else { this.New = Reader.GetBool(); } this.Redo(Class); }; function CChangesMath_RFontsAscii(NewValue, OldValue) { this.New = NewValue; this.Old = OldValue; } CChangesMath_RFontsAscii.prototype.Type = historyitem_Math_RFontsAscii; CChangesMath_RFontsAscii.prototype.Undo = function (Class) { Class.raw_SetRFontsAscii(this.Old); }; CChangesMath_RFontsAscii.prototype.Redo = function (Class) { Class.raw_SetRFontsAscii(this.New); }; CChangesMath_RFontsAscii.prototype.Save_Changes = function (Writer) { if (undefined === this.New) { Writer.WriteBool(true); } else { Writer.WriteBool(false); Writer.WriteString2(this.New.Name); } }; CChangesMath_RFontsAscii.prototype.Load_Changes = function (Reader, Class) { if (true === Reader.GetBool()) { this.New = undefined; } else { this.New = { Name: Reader.GetString2(), Index: -1 }; } this.Redo(Class); }; function CChangesMath_RFontsHAnsi(NewValue, OldValue) { this.New = NewValue; this.Old = OldValue; } CChangesMath_RFontsHAnsi.prototype.Type = historyitem_Math_RFontsHAnsi; CChangesMath_RFontsHAnsi.prototype.Undo = function (Class) { Class.raw_SetRFontsHAnsi(this.Old); }; CChangesMath_RFontsHAnsi.prototype.Redo = function (Class) { Class.raw_SetRFontsHAnsi(this.New); }; CChangesMath_RFontsHAnsi.prototype.Save_Changes = function (Writer) { if (undefined === this.New) { Writer.WriteBool(true); } else { Writer.WriteBool(false); Writer.WriteString2(this.New.Name); } }; CChangesMath_RFontsHAnsi.prototype.Load_Changes = function (Reader, Class) { if (true === Reader.GetBool()) { this.New = undefined; } else { this.New = { Name: Reader.GetString2(), Index: -1 }; } this.Redo(Class); }; function CChangesMath_RFontsCS(NewValue, OldValue) { this.New = NewValue; this.Old = OldValue; } CChangesMath_RFontsCS.prototype.Type = historyitem_Math_RFontsCS; CChangesMath_RFontsCS.prototype.Undo = function (Class) { Class.raw_SetRFontsCS(this.Old); }; CChangesMath_RFontsCS.prototype.Redo = function (Class) { Class.raw_SetRFontsCS(this.New); }; CChangesMath_RFontsCS.prototype.Save_Changes = function (Writer) { if (undefined === this.New) { Writer.WriteBool(true); } else { Writer.WriteBool(false); Writer.WriteString2(this.New.Name); } }; CChangesMath_RFontsCS.prototype.Load_Changes = function (Reader, Class) { if (true === Reader.GetBool()) { this.New = undefined; } else { this.New = { Name: Reader.GetString2(), Index: -1 }; } this.Redo(Class); }; function CChangesMath_RFontsEastAsia(NewValue, OldValue) { this.New = NewValue; this.Old = OldValue; } CChangesMath_RFontsEastAsia.prototype.Type = historyitem_Math_RFontsEastAsia; CChangesMath_RFontsEastAsia.prototype.Undo = function (Class) { Class.raw_SetRFontsEastAsia(this.Old); }; CChangesMath_RFontsEastAsia.prototype.Redo = function (Class) { Class.raw_SetRFontsEastAsia(this.New); }; CChangesMath_RFontsEastAsia.prototype.Save_Changes = function (Writer) { if (undefined === this.New) { Writer.WriteBool(true); } else { Writer.WriteBool(false); Writer.WriteString2(this.New.Name); } }; CChangesMath_RFontsEastAsia.prototype.Load_Changes = function (Reader, Class) { if (true === Reader.GetBool()) { this.New = undefined; } else { this.New = { Name: Reader.GetString2(), Index: -1 }; } this.Redo(Class); }; function CChangesMath_RFontsHint(NewValue, OldValue) { this.New = NewValue; this.Old = OldValue; } CChangesMath_RFontsHint.prototype.Type = historyitem_Math_RFontsHint; CChangesMath_RFontsHint.prototype.Undo = function (Class) { Class.raw_SetRFontsHint(this.Old); }; CChangesMath_RFontsHint.prototype.Redo = function (Class) { Class.raw_SetRFontsHint(this.New); }; CChangesMath_RFontsHint.prototype.Save_Changes = function (Writer) { if (undefined === this.New) { Writer.WriteBool(true); } else { Writer.WriteBool(false); Writer.WriteLong(this.New); } }; CChangesMath_RFontsHint.prototype.Load_Changes = function (Reader, Class) { if (true === Reader.GetBool()) { this.New = undefined; } else { this.New = Reader.GetLong(); } this.Redo(Class); }; function CChangesMathAddItems(Pos, Items) { this.Pos = Pos; this.Items = Items; } CChangesMathAddItems.prototype.Type = historyitem_Math_AddItems_ToMathBase; CChangesMathAddItems.prototype.Undo = function (Class) { Class.raw_RemoveFromContent(this.Pos, this.Items.length); }; CChangesMathAddItems.prototype.Redo = function (Class) { Class.raw_AddToContent(this.Pos, this.Items, false); }; CChangesMathAddItems.prototype.Save_Changes = function (Writer) { var Count = this.Items.length; Writer.WriteLong(Count); Writer.WriteLong(this.Pos); for (var Index = 0; Index < Count; Index++) { Writer.WriteString2(this.Items[Index].Get_Id()); } }; CChangesMathAddItems.prototype.Load_Changes = function (Reader, Class) { var Count = Reader.GetLong(); this.Pos = Reader.GetLong(); this.Items = []; for (var Index = 0; Index < Count; Index++) { var Element = g_oTableId.Get_ById(Reader.GetString2()); if (null !== Element) { this.Items.push(Element); } } this.Redo(Class); }; function CChangesMathParaJc(NewValue, OldValue) { this.New = NewValue; this.Old = OldValue; } CChangesMathParaJc.prototype.Type = historyitem_Math_ParaJc; CChangesMathParaJc.prototype.Undo = function (Class) { Class.raw_SetAlign(this.Old); }; CChangesMathParaJc.prototype.Redo = function (Class) { Class.raw_SetAlign(this.New); }; CChangesMathParaJc.prototype.Save_Changes = function (Writer) { if (undefined === this.New) { Writer.WriteBool(true); } else { Writer.WriteBool(false); Writer.WriteLong(this.New); } }; CChangesMathParaJc.prototype.Load_Changes = function (Reader, Class) { if (true === Reader.GetBool()) { this.New = undefined; } else { this.New = Reader.GetLong(); } this.Redo(Class); }; function CChangesMathEqArrayPr(NewPr, OldPr) { this.New = NewPr; this.Old = OldPr; } CChangesMathEqArrayPr.prototype.Type = historyitem_Math_EqArrayPr; CChangesMathEqArrayPr.prototype.Undo = function (Class) { Class.raw_SetPr(this.Old); }; CChangesMathEqArrayPr.prototype.Redo = function (Class) { Class.raw_SetPr(this.New); }; CChangesMathEqArrayPr.prototype.Save_Changes = function (Writer) { if (undefined === this.New) { Writer.WriteBool(true); } else { Writer.WriteBool(false); this.New.Write_ToBinary(Writer); } }; CChangesMathEqArrayPr.prototype.Load_Changes = function (Reader, Class) { if (true === Reader.GetBool()) { this.New = undefined; } else { this.New = new CMathEqArrPr(); this.New.Read_FromBinary(Reader); } this.Redo(Class); }; function MatGetKoeffArgSize(FontSize, ArgSize) { var FontKoef = 1; if (ArgSize == -1) { FontKoef = g_dMathArgSizeKoeff_1; } else { if (ArgSize == -2) { FontKoef = g_dMathArgSizeKoeff_2; } } if (1 !== FontKoef) { FontKoef = (((FontSize * FontKoef * 2 + 0.5) | 0) / 2) / FontSize; } return FontKoef; } function CMathRecalculateInfo() { this.NeedResize = true; this.bChangeInline = true; this.bRecalcCtrPrp = false; this.bInline = false; } CMathRecalculateInfo.prototype.ClearRecalculate = function () { this.NeedResize = false; this.bRecalcCtrPrp = false; this.bChangeInline = false; };