/* * (c) Copyright Ascensio System SIA 2010-2014 * * 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 * */ var type_Paragraph = 1; var UnknownValue = null; function Paragraph(DrawingDocument, Parent, PageNum, X, Y, XLimit, YLimit) { this.Id = g_oIdCounter.Get_NewId(); this.Prev = null; this.Next = null; this.Index = -1; this.Parent = Parent; this.PageNum = PageNum; this.X = X; this.Y = Y; this.XLimit = XLimit; this.YLimit = YLimit; this.CompiledPr = { Pr: null, NeedRecalc: true }; this.Pr = new CParaPr(); this.CalculatedFrame = { L: 0, T: 0, W: 0, H: 0, L2: 0, T2: 0, W2: 0, H2: 0, PageIndex: 0 }; this.TextPr = new ParaTextPr(); this.TextPr.Parent = this; this.Bounds = new CDocumentBounds(X, Y, X_Right_Field, Y); this.RecalcInfo = new CParaRecalcInfo(); this.Pages = new Array(); this.Lines = new Array(); this.Content = new Array(); this.Content[0] = new ParaEnd(); this.Content[1] = new ParaEmpty(); this.Numbering = new ParaNumbering(); this.CurPos = { X: 0, Y: 0, ContentPos: 0, Line: -1, RealX: 0, RealY: 0, PagesPos: 0 }; this.Selection = { Start: false, Use: false, StartPos: 0, EndPos: 0, Flag: selectionflag_Common }; this.NeedReDraw = true; this.DrawingDocument = DrawingDocument; this.LogicDocument = editor.WordControl.m_oLogicDocument; this.TurnOffRecalcEvent = false; this.ApplyToAll = false; this.Lock = new CLock(); if (false === g_oIdCounter.m_bLoad) { this.Lock.Set_Type(locktype_Mine, false); CollaborativeEditing.Add_Unlock2(this); } this.DeleteCollaborativeMarks = true; this.DeleteCommentOnRemove = true; this.m_oContentChanges = new CContentChanges(); this.PresentationPr = { Level: 0, Bullet: new CPresentationBullet() }; this.FontMap = { Map: {}, NeedRecalc: true }; this.SearchResults = new Object(); this.SpellChecker = new CParaSpellChecker(); g_oTableId.Add(this, this.Id); } Paragraph.prototype = { GetType: function () { return type_Paragraph; }, GetId: function () { return this.Id; }, SetId: function (newId) { g_oTableId.Reset_Id(this, newId, this.Id); this.Id = newId; }, Get_Id: function () { return this.GetId(); }, Set_Id: function (newId) { return this.SetId(newId); }, Use_Wrap: function () { if (undefined != this.Get_FramePr()) { return false; } return true; }, Use_YLimit: function () { if (undefined != this.Get_FramePr() && this.Parent instanceof CDocument) { return false; } return true; }, Set_Pr: function (oNewPr) { var Pr_old = this.Pr; var Pr_new = oNewPr; History.Add(this, { Type: historyitem_Paragraph_Pr, Old: Pr_old, New: Pr_new }); this.Pr = oNewPr; }, Copy: function (Parent) { var Para = new Paragraph(this.DrawingDocument, Parent, 0, 0, 0, 0, 0); Para.Set_Pr(this.Pr.Copy()); Para.TextPr.Set_Value(this.TextPr.Value); Para.Internal_Content_Remove2(0, Para.Content.length); var Count = this.Content.length; for (var Index = 0; Index < Count; Index++) { var Item = this.Content[Index]; if (true === Item.Is_RealContent()) { Para.Internal_Content_Add(Para.Content.length, Item.Copy(), false); } } return Para; }, Get_AllDrawingObjects: function (DrawingObjs) { if (undefined === DrawingObjs) { DrawingObjs = new Array(); } var Count = this.Content.length; for (var Pos = 0; Pos < Count; Pos++) { var Item = this.Content[Pos]; if (para_Drawing === Item.Type) { DrawingObjs.push(Item); } } return DrawingObjs; }, Get_AllParagraphs_ByNumbering: function (NumPr, ParaArray) { var _NumPr = this.Numbering_Get(); if (undefined != _NumPr && _NumPr.NumId === NumPr.NumId && (_NumPr.Lvl === NumPr.Lvl || undefined === NumPr.Lvl)) { ParaArray.push(this); } var Count = this.Content.length; for (var Pos = 0; Pos < Count; Pos++) { var Item = this.Content[Pos]; if (para_Drawing === Item.Type) { Item.Get_AllParagraphs_ByNumbering(NumPr, ParaArray); } } }, Get_PageBounds: function (PageIndex) { return this.Pages[PageIndex].Bounds; }, Get_EmptyHeight: function () { var Pr = this.Get_CompiledPr(); var EndTextPr = Pr.TextPr.Copy(); EndTextPr.Merge(this.TextPr.Value); g_oTextMeasurer.SetTextPr(EndTextPr); g_oTextMeasurer.SetFontSlot(fontslot_ASCII); return g_oTextMeasurer.GetHeight(); }, Reset: function (X, Y, XLimit, YLimit, PageNum) { this.X = X; this.Y = Y; this.XLimit = XLimit; this.YLimit = YLimit; this.PageNum = PageNum; if (true === this.Parent.RecalcInfo.Can_RecalcObject()) { var Ranges = this.Parent.CheckRange(X, Y, XLimit, Y, Y, Y, X, XLimit, this.PageNum, true); if (Ranges.length > 0) { if (Math.abs(Ranges[0].X0 - X) < 0.001) { this.X_ColumnStart = Ranges[0].X1; } else { this.X_ColumnStart = X; } if (Math.abs(Ranges[Ranges.length - 1].X1 - XLimit) < 0.001) { this.X_ColumnEnd = Ranges[Ranges.length - 1].X0; } else { this.X_ColumnEnd = XLimit; } } else { this.X_ColumnStart = X; this.X_ColumnEnd = XLimit; } } }, CopyPr: function (OtherParagraph) { return this.CopyPr_Open(OtherParagraph); }, CopyPr_Open: function (OtherParagraph) { OtherParagraph.X = this.X; OtherParagraph.XLimit = this.XLimit; if ("undefined" != typeof(OtherParagraph.NumPr)) { OtherParagraph.Numbering_Remove(); } var NumPr = this.Numbering_Get(); if (undefined != NumPr) { OtherParagraph.Numbering_Set(NumPr.NumId, NumPr.Lvl); } var Bullet = this.Get_PresentationNumbering(); if (numbering_presentationnumfrmt_None != Bullet.Get_Type()) { OtherParagraph.Add_PresentationNumbering(Bullet.Copy()); } OtherParagraph.Set_PresentationLevel(this.PresentationPr.Level); var oOldPr = OtherParagraph.Pr; OtherParagraph.Pr = this.Pr.Copy(); History.Add(OtherParagraph, { Type: historyitem_Paragraph_Pr, Old: oOldPr, New: OtherParagraph.Pr }); OtherParagraph.Style_Add(this.Style_Get(), true); }, Internal_Content_Add: function (Pos, Item, bCorrectPos) { if (true === Item.Is_RealContent()) { var ClearPos = this.Internal_Get_ClearPos(Pos); History.Add(this, { Type: historyitem_Paragraph_AddItem, Pos: ClearPos, EndPos: ClearPos, Items: [Item] }); } this.Content.splice(Pos, 0, Item); if (this.CurPos.ContentPos >= Pos) { this.Set_ContentPos(this.CurPos.ContentPos + 1, bCorrectPos); } if (this.Selection.StartPos >= Pos) { this.Selection.StartPos++; } if (this.Selection.EndPos >= Pos) { this.Selection.EndPos++; } if (this.Numbering.Pos >= Pos) { this.Numbering.Pos++; } var LinesCount = this.Lines.length; for (var CurLine = 0; CurLine < LinesCount; CurLine++) { if (this.Lines[CurLine].StartPos > Pos) { this.Lines[CurLine].StartPos++; } if (this.Lines[CurLine].EndPos + 1 > Pos) { this.Lines[CurLine].EndPos++; } var RangesCount = this.Lines[CurLine].Ranges.length; for (var CurRange = 0; CurRange < RangesCount; CurRange++) { if (this.Lines[CurLine].Ranges[CurRange].StartPos > Pos) { this.Lines[CurLine].Ranges[CurRange].StartPos++; } } } for (var CurSearch in this.SearchResults) { if (this.SearchResults[CurSearch].StartPos >= Pos) { this.SearchResults[CurSearch].StartPos++; } if (this.SearchResults[CurSearch].EndPos >= Pos) { this.SearchResults[CurSearch].EndPos++; } } this.SpellChecker.Update_OnAdd(this, Pos, Item); }, Internal_Content_Add2: function (Pos, Item, bCorrectPos) { if (true === Item.Is_RealContent()) { var ClearPos = this.Internal_Get_ClearPos(Pos); History.Add(this, { Type: historyitem_Paragraph_AddItem, Pos: ClearPos, EndPos: ClearPos, Items: [Item] }); } this.Content.splice(Pos, 0, Item); for (var CurSearch in this.SearchResults) { if (this.SearchResults[CurSearch].StartPos >= Pos) { this.SearchResults[CurSearch].StartPos++; } if (this.SearchResults[CurSearch].EndPos >= Pos) { this.SearchResults[CurSearch].EndPos++; } } }, Internal_Content_Concat: function (Items) { var NewItems = new Array(); var ItemsCount = Items.length; for (var Index = 0; Index < ItemsCount; Index++) { if (true === Items[Index].Is_RealContent()) { NewItems.push(Items[Index]); } } if (NewItems.length <= 0) { return; } var StartPos = this.Content.length; this.Content = this.Content.concat(NewItems); History.Add(this, { Type: historyitem_Paragraph_AddItem, Pos: this.Internal_Get_ClearPos(StartPos), EndPos: this.Internal_Get_ClearPos(this.Content.length - 1), Items: NewItems }); this.RecalcInfo.Set_Type_0_Spell(pararecalc_0_Spell_All); }, Internal_Content_Remove: function (Pos, bCorrectPos) { var Item = this.Content[Pos]; if (true === Item.Is_RealContent()) { var ClearPos = this.Internal_Get_ClearPos(Pos); History.Add(this, { Type: historyitem_Paragraph_RemoveItem, Pos: ClearPos, EndPos: ClearPos, Items: [Item] }); } if (this.Selection.StartPos <= this.Selection.EndPos) { if (this.Selection.StartPos > Pos) { this.Selection.StartPos--; } if (this.Selection.EndPos > Pos) { this.Selection.EndPos--; } } else { if (this.Selection.StartPos > Pos) { this.Selection.StartPos--; } if (this.Selection.EndPos > Pos) { this.Selection.EndPos--; } } if (this.Numbering.Pos > Pos) { this.Numbering.Pos--; } var LinesCount = this.Lines.length; for (var CurLine = 0; CurLine < LinesCount; CurLine++) { if (this.Lines[CurLine].StartPos > Pos) { this.Lines[CurLine].StartPos--; } if (this.Lines[CurLine].EndPos >= Pos) { this.Lines[CurLine].EndPos--; } var RangesCount = this.Lines[CurLine].Ranges.length; for (var CurRange = 0; CurRange < RangesCount; CurRange++) { if (this.Lines[CurLine].Ranges[CurRange].StartPos > Pos) { this.Lines[CurLine].Ranges[CurRange].StartPos--; } } } for (var CurSearch in this.SearchResults) { if (this.SearchResults[CurSearch].StartPos > Pos) { this.SearchResults[CurSearch].StartPos--; } if (this.SearchResults[CurSearch].EndPos > Pos) { this.SearchResults[CurSearch].EndPos--; } } this.Content.splice(Pos, 1); if (this.CurPos.ContentPos > Pos) { this.Set_ContentPos(this.CurPos.ContentPos - 1, bCorrectPos); } if (true === this.DeleteCommentOnRemove && (para_CommentStart === Item.Type || para_CommentEnd === Item.Type)) { if (para_CommentStart === Item.Type) { editor.WordControl.m_oLogicDocument.Comments.Set_StartInfo(Item.Id, 0, 0, 0, 0, null); } else { editor.WordControl.m_oLogicDocument.Comments.Set_EndInfo(Item.Id, 0, 0, 0, 0, null); } editor.WordControl.m_oLogicDocument.Remove_Comment(Item.Id, true); } this.SpellChecker.Update_OnRemove(this, Pos, 1); }, Internal_Content_Remove2: function (Pos, Count) { var DocumentComments = editor.WordControl.m_oLogicDocument.Comments; var CommentsToDelete = new Object(); for (var Index = Pos; Index < Pos + Count; Index++) { var ItemType = this.Content[Index].Type; if (true === this.DeleteCommentOnRemove && (para_CommentStart === ItemType || para_CommentEnd === ItemType)) { if (para_CommentStart === ItemType) { DocumentComments.Set_StartInfo(this.Content[Index].Id, 0, 0, 0, 0, null); } else { DocumentComments.Set_EndInfo(this.Content[Index].Id, 0, 0, 0, 0, null); } CommentsToDelete[this.Content[Index].Id] = 1; } } var LastArray = this.Content.slice(Pos, Pos + Count); var LastItems = new Array(); var ItemsCount = LastArray.length; for (var Index = 0; Index < ItemsCount; Index++) { if (true === LastArray[Index].Is_RealContent()) { LastItems.push(LastArray[Index]); } } History.Add(this, { Type: historyitem_Paragraph_RemoveItem, Pos: this.Internal_Get_ClearPos(Pos), EndPos: this.Internal_Get_ClearPos(Pos + Count - 1), Items: LastItems }); if (this.CurPos.ContentPos > Pos) { if (this.CurPos.ContentPos > Pos + Count) { this.Set_ContentPos(this.CurPos.ContentPos - Count, true, -1); } else { this.Set_ContentPos(Pos, true, -1); } } if (this.Selection.StartPos <= this.Selection.EndPos) { if (this.Selection.StartPos > Pos) { if (this.Selection.StartPos > Pos + Count) { this.Selection.StartPos -= Count; } else { this.Selection.StartPos = Pos; } } if (this.Selection.EndPos > Pos) { if (this.Selection.EndPos >= Pos + Count) { this.Selection.EndPos -= Count; } else { this.Selection.EndPos = Math.max(0, Pos - 1); } } } else { if (this.Selection.StartPos > Pos) { if (this.Selection.StartPos >= Pos + Count) { this.Selection.StartPos -= Count; } else { this.Selection.StartPos = Math.max(0, Pos - 1); } } if (this.Selection.EndPos > Pos) { if (this.Selection.EndPos > Pos + Count) { this.Selection.EndPos -= Count; } else { this.Selection.EndPos = Pos; } } } var LinesCount = this.Lines.length; for (var CurLine = 0; CurLine < LinesCount; CurLine++) { if (this.Lines[CurLine].StartPos > Pos) { if (this.Lines[CurLine].StartPos > Pos + Count) { this.Lines[CurLine].StartPos -= Count; } else { this.Lines[CurLine].StartPos = Math.max(0, Pos); } } if (this.Lines[CurLine].EndPos >= Pos) { if (this.Lines[CurLine].EndPos >= Pos + Count) { this.Lines[CurLine].EndPos -= Count; } else { this.Lines[CurLine].EndPos = Math.max(0, Pos); } } var RangesCount = this.Lines[CurLine].Ranges.length; for (var CurRange = 0; CurRange < RangesCount; CurRange++) { if (this.Lines[CurLine].Ranges[CurRange].StartPos > Pos) { if (this.Lines[CurLine].Ranges[CurRange].StartPos > Pos + Count) { this.Lines[CurLine].Ranges[CurRange].StartPos -= Count; } else { this.Lines[CurLine].Ranges[CurRange].StartPos = Math.max(0, Pos); } } } } this.Content.splice(Pos, Count); for (var Id in CommentsToDelete) { editor.WordControl.m_oLogicDocument.Remove_Comment(Id, true); } this.SpellChecker.Update_OnRemove(this, Pos, Count); }, Internal_Check_EmptyHyperlink: function (Pos) { var Start = this.Internal_FindBackward(Pos, [para_Text, para_Drawing, para_Space, para_Tab, para_PageNum, para_HyperlinkStart]); var End = this.Internal_FindForward(Pos, [para_Text, para_Drawing, para_Space, para_Tab, para_PageNum, para_HyperlinkEnd, para_End]); if (true === Start.Found && para_HyperlinkStart === Start.Type && true === End.Found && para_HyperlinkEnd === End.Type) { this.Internal_Content_Remove(End.LetterPos); this.Internal_Content_Remove(Start.LetterPos); } }, Clear_ContentChanges: function () { this.m_oContentChanges.Clear(); }, Add_ContentChanges: function (Changes) { this.m_oContentChanges.Add(Changes); }, Refresh_ContentChanges: function () { this.m_oContentChanges.Refresh(); }, Internal_Get_ParaPos_By_Pos: function (ContentPos) { var _ContentPos = Math.max(0, Math.min(ContentPos, this.Content.length - 1)); while (undefined === this.Content[_ContentPos].CurPage) { _ContentPos--; if (_ContentPos < 0) { return new CParaPos(0, 0, 0, 0); } } if (_ContentPos === this.CurPos.ContentPos && -1 != this.CurPos.Line) { return new CParaPos(this.Content[_ContentPos].CurRange, this.CurPos.Line, this.Content[_ContentPos].CurPage, ContentPos); } return new CParaPos(this.Content[_ContentPos].CurRange, this.Content[_ContentPos].CurLine, this.Content[_ContentPos].CurPage, ContentPos); }, Internal_Get_ParaPos_By_Page: function (Page) { var CurPage = Page; var CurLine = this.Pages[CurPage].StartLine; var CurRange = 0; var CurPos = this.Lines[CurLine].StartPos; return new CParaPos(CurRange, CurLine, CurPage, CurPos); }, Internal_Update_ParaPos: function (CurPage, CurLine, CurRange, CurPos) { var _CurPage = CurPage; var _CurLine = CurLine; var _CurRange = CurRange; while (_CurPage < this.Pages.length - 1) { if (this.Lines[this.Pages[_CurPage + 1].StartLine].StartPos <= CurPos) { _CurPage++; _CurLine = this.Pages[_CurPage].StartLine; _CurRange = 0; } else { break; } } while (_CurLine < this.Lines.length - 1) { if (this.Lines[_CurLine + 1].StartPos <= CurPos) { _CurLine++; _CurRange = 0; } else { break; } } while (_CurRange < this.Lines[_CurLine].Ranges.length - 1) { if (this.Lines[_CurLine].Ranges[_CurRange + 1].StartPos <= CurPos) { _CurRange++; } else { break; } } return new CParaPos(_CurRange, _CurLine, _CurPage, CurPos); }, Internal_Recalculate_0: function () { if (pararecalc_0_None === this.RecalcInfo.Recalc_0_Type) { return; } var Pr = this.Get_CompiledPr(); var ParaPr = Pr.ParaPr; var CurTextPr = Pr.TextPr; g_oTextMeasurer.SetTextPr(CurTextPr); var TextAscent = 0; var TextHeight = 0; var TextDescent = 0; g_oTextMeasurer.SetFontSlot(fontslot_ASCII); TextHeight = g_oTextMeasurer.GetHeight(); TextDescent = Math.abs(g_oTextMeasurer.GetDescender()); TextAscent = TextHeight - TextDescent; TextAscent2 = g_oTextMeasurer.GetAscender(); var ContentLength = this.Content.length; if (para_PresentationNumbering === this.Numbering.Type) { var Item = this.Numbering; var Level = this.PresentationPr.Level; var Bullet = this.PresentationPr.Bullet; var BulletNum = 0; if (Bullet.Get_Type() >= numbering_presentationnumfrmt_ArabicPeriod) { var Prev = this.Prev; while (null != Prev && type_Paragraph === Prev.GetType()) { var PrevLevel = Prev.PresentationPr.Level; var PrevBullet = Prev.Get_PresentationNumbering(); if (Level < PrevLevel) { Prev = Prev.Prev; continue; } else { if (Level > PrevLevel) { break; } else { if (PrevBullet.Get_Type() === Bullet.Get_Type() && PrevBullet.Get_StartAt() === PrevBullet.Get_StartAt()) { if (true != Prev.IsEmpty()) { BulletNum++; } Prev = Prev.Prev; } else { break; } } } } } var FirstTextPr = this.Internal_CalculateTextPr(this.Internal_GetStartPos()); Item.Bullet = Bullet; Item.BulletNum = BulletNum + 1; Item.Measure(g_oTextMeasurer, FirstTextPr); } for (var Pos = 0; Pos < ContentLength; Pos++) { var Item = this.Content[Pos]; switch (Item.Type) { case para_Text: case para_Space: case para_PageNum: Item.Measure(g_oTextMeasurer, CurTextPr); break; case para_Drawing: Item.Parent = this; Item.DocumentContent = this.Parent; Item.DrawingDocument = this.Parent.DrawingDocument; Item.Measure(g_oTextMeasurer, CurTextPr); break; case para_Tab: case para_NewLine: Item.Measure(g_oTextMeasurer); break; case para_TextPr: Item.Parent = this; CurTextPr = this.Internal_CalculateTextPr(Pos); Item.CalcValue = CurTextPr; g_oTextMeasurer.SetTextPr(CurTextPr); g_oTextMeasurer.SetFontSlot(fontslot_ASCII); TextDescent = Math.abs(g_oTextMeasurer.GetDescender()); TextHeight = g_oTextMeasurer.GetHeight(); TextAscent = TextHeight - TextDescent; TextAscent2 = g_oTextMeasurer.GetAscender(); break; case para_End: var bEndCell = false; if (null === this.Get_DocumentNext() && true === this.Parent.Is_TableCellContent()) { bEndCell = true; } var EndTextPr = this.Get_CompiledPr2(false).TextPr.Copy(); EndTextPr.Merge(this.TextPr.Value); Item.TextPr = EndTextPr; g_oTextMeasurer.SetTextPr(EndTextPr); Item.Measure(g_oTextMeasurer, bEndCell); TextDescent = Math.abs(g_oTextMeasurer.GetDescender()); TextHeight = g_oTextMeasurer.GetHeight(); TextAscent = TextHeight - TextDescent; TextAscent2 = g_oTextMeasurer.GetAscender(); g_oTextMeasurer.SetTextPr(CurTextPr); break; } Item.TextAscent = TextAscent; Item.TextDescent = TextDescent; Item.TextHeight = TextHeight; Item.TextAscent2 = TextAscent2; Item.YOffset = CurTextPr.Position; } this.RecalcInfo.Set_Type_0(pararecalc_0_None); }, Internal_Recalculate_1_: function (StartPos, CurPage, _CurLine) { var Pr = this.Get_CompiledPr(); var ParaPr = Pr.ParaPr; var CurLine = _CurLine; var X, Y, XLimit, YLimit, _X, _XLimit; if (0 === CurPage || (undefined != this.Get_FramePr() && this.Parent instanceof CDocument)) { X = this.X + ParaPr.Ind.Left + ParaPr.Ind.FirstLine; Y = this.Y; XLimit = this.XLimit - ParaPr.Ind.Right; YLimit = this.YLimit; _X = this.X; _XLimit = this.XLimit; } else { var PageStart = this.Parent.Get_PageContentStartPos(this.PageNum + CurPage); X = (0 != CurLine ? PageStart.X + ParaPr.Ind.Left : PageStart.X + ParaPr.Ind.Left + ParaPr.Ind.FirstLine); Y = PageStart.Y; XLimit = PageStart.XLimit - ParaPr.Ind.Right; YLimit = PageStart.YLimit; _X = PageStart.X; _XLimit = PageStart.XLimit; } this.Pages.length = CurPage + 1; this.Pages[CurPage] = new CParaPage(_X, Y, _XLimit, YLimit, CurLine); this.Pages[CurPage].TextPr = this.Internal_CalculateTextPr(StartPos, Pr); var LineStart_Pos = StartPos; if (0 === CurPage) { if (ParaPr.Ind.FirstLine <= 0) { this.Bounds.Left = X; } else { this.Bounds.Left = this.X + ParaPr.Ind.Left; } this.Bounds.Right = XLimit; } var bFirstItemOnLine = true; var bEmptyLine = true; var bStartWord = false; var bWord = false; var nWordStartPos = 0; var nWordLen = 0; var nSpaceLen = 0; var nSpacesCount = 0; var pLastTab = { TabPos: 0, X: 0, Value: -1, Item: null }; var bNewLine = false; var bNewRange = false; var bNewPage = false; var bExtendBoundToBottom = false; var bEnd = false; var bForceNewPage = false; var bBreakPageLine = false; if (CurPage > 1) { bAddNumbering = false; } else { if (0 === CurPage) { bAddNumbering = true; } else { for (var Pos = 0; Pos < StartPos; Pos++) { var Item = this.Content[Pos]; if (true === Item.Can_AddNumbering()) { bAddNumbering = false; } } } } var Ranges = []; var RangesCount = Ranges.length; var TextAscent = 0; var TextDescent = 0; var TextAscent2 = 0; this.Lines.length = CurLine + 1; this.Lines[CurLine] = new CParaLine(StartPos); var LineTextAscent = 0; var LineTextDescent = 0; var LineTextAscent2 = 0; var LineAscent = 0; var LineDescent = 0; this.Lines[CurLine].Add_Range(X, (RangesCount == 0 ? XLimit : Ranges[0].X0)); this.Lines[CurLine].Set_RangeStartPos(0, StartPos); for (var Index = 1; Index < Ranges.length + 1; Index++) { this.Lines[CurLine].Add_Range(Ranges[Index - 1].X1, (Index == RangesCount ? XLimit : Ranges[Index].X0)); } var CurRange = 0; var XEnd = 0; if (RangesCount == 0) { XEnd = XLimit; } else { XEnd = Ranges[0].X0; } if (this.Parent instanceof CDocument) { if (0 === CurPage && true === ParaPr.PageBreakBefore) { var Prev = this.Get_DocumentPrev(); if (null != Prev) { this.Pages[CurPage].Set_EndLine(CurLine - 1); if (0 === CurLine) { this.Lines[-1] = new CParaLine(0); this.Lines[-1].Set_EndPos(StartPos - 1, this); } return recalcresult_NextPage; } } else { if (true === this.Parent.RecalcInfo.Check_WidowControl(this, CurLine)) { this.Parent.RecalcInfo.Reset_WidowControl(); this.Pages[CurPage].Set_EndLine(CurLine - 1); if (0 === CurLine) { this.Lines[-1] = new CParaLine(0); this.Lines[-1].Set_EndPos(LineStart_Pos - 1, this); } return recalcresult_NextPage; } else { if (true === this.Parent.RecalcInfo.Check_KeepNext(this) && 0 === CurPage && null != this.Get_DocumentPrev()) { this.Parent.RecalcInfo.Reset(); this.Pages[CurPage].Set_EndLine(CurLine - 1); if (0 === CurLine) { this.Lines[-1] = new CParaLine(0); this.Lines[-1].Set_EndPos(LineStart_Pos - 1, this); } return recalcresult_NextPage; } } } } var RecalcResult = recalcresult_NextElement; var bAddNumbering = this.Internal_CheckAddNumbering(CurPage, CurLine, CurRange); for (var Pos = LineStart_Pos; Pos < this.Content.length; Pos++) { if (false === bStartWord && true === bFirstItemOnLine && Math.abs(XEnd - X) < 0.001 && RangesCount > 0) { if (RangesCount == CurRange) { Pos--; bNewLine = true; } else { Pos--; bNewRange = true; } } if (true != bNewLine && true != bNewRange) { var Item = this.Content[Pos]; Item.Parent = this; Item.DocumentContent = this.Parent; Item.DrawingDocument = this.Parent.DrawingDocument; if (undefined != Item.TextAscent) { TextAscent = Item.TextAscent; } if (undefined != Item.TextAscent2) { TextAscent2 = Item.TextAscent2; } if (undefined != Item.TextDescent) { TextDescent = Item.TextDescent; } Item.CurPage = CurPage; Item.CurLine = CurLine; Item.CurRange = CurRange; var bBreak = false; if (true === bAddNumbering) { if (true === Item.Can_AddNumbering()) { var NumberingItem = this.Numbering; var NumberingType = this.Numbering.Type; if (para_Numbering === NumberingType) { var NumPr = ParaPr.NumPr; if (undefined === NumPr || undefined === NumPr.NumId || 0 === NumPr.NumId || "0" === NumPr.NumId) { NumberingItem.Measure(g_oTextMeasurer, undefined); } else { var Numbering = this.Parent.Get_Numbering(); var NumLvl = Numbering.Get_AbstractNum(NumPr.NumId).Lvl[NumPr.Lvl]; var NumSuff = NumLvl.Suff; var NumJc = NumLvl.Jc; var NumInfo = this.Parent.Internal_GetNumInfo(this.Id, NumPr); var NumTextPr = this.Get_CompiledPr2(false).TextPr.Copy(); NumTextPr.Merge(this.TextPr.Value); NumTextPr.Merge(NumLvl.TextPr); NumberingItem.Measure(g_oTextMeasurer, Numbering, NumInfo, NumTextPr, NumPr); if (LineAscent < NumberingItem.Height) { LineAscent = NumberingItem.Height; } switch (NumJc) { case align_Right: NumberingItem.WidthVisible = 0; break; case align_Center: NumberingItem.WidthVisible = NumberingItem.WidthNum / 2; X += NumberingItem.WidthNum / 2; break; case align_Left: default: NumberingItem.WidthVisible = NumberingItem.WidthNum; X += NumberingItem.WidthNum; break; } switch (NumSuff) { case numbering_suff_Nothing: break; case numbering_suff_Space: var OldTextPr = g_oTextMeasurer.GetTextPr(); g_oTextMeasurer.SetTextPr(NumTextPr); g_oTextMeasurer.SetFontSlot(fontslot_ASCII); NumberingItem.WidthSuff = g_oTextMeasurer.Measure(" ").Width; g_oTextMeasurer.SetTextPr(OldTextPr); break; case numbering_suff_Tab: var NewX = null; var PageStart = this.Parent.Get_PageContentStartPos(this.PageNum + CurPage); var TabsCount = ParaPr.Tabs.Get_Count(); var TabsPos = new Array(); var bCheckLeft = true; for (var Index = 0; Index < TabsCount; Index++) { var Tab = ParaPr.Tabs.Get(Index); var TabPos = Tab.Pos + PageStart.X; if (true === bCheckLeft && TabPos > PageStart.X + ParaPr.Ind.Left) { TabsPos.push(PageStart.X + ParaPr.Ind.Left); bCheckLeft = false; } if (tab_Clear != Tab.Value) { TabsPos.push(TabPos); } } if (true === bCheckLeft) { TabsPos.push(PageStart.X + ParaPr.Ind.Left); } TabsCount++; for (var Index = 0; Index < TabsCount; Index++) { var TabPos = TabsPos[Index]; if (X < TabPos) { NewX = TabPos; break; } } if (null === NewX) { if (X < PageStart.X + ParaPr.Ind.Left) { NewX = PageStart.X + ParaPr.Ind.Left; } else { NewX = this.X; while (X >= NewX) { NewX += Default_Tab_Stop; } } } NumberingItem.WidthSuff = NewX - X; break; } NumberingItem.Width = NumberingItem.WidthNum; NumberingItem.WidthVisible += NumberingItem.WidthSuff; X += NumberingItem.WidthSuff; this.Numbering.Pos = Pos; } } else { if (para_PresentationNumbering === NumberingType) { var Bullet = this.PresentationPr.Bullet; if (numbering_presentationnumfrmt_None != Bullet.Get_Type()) { if (ParaPr.Ind.FirstLine < 0) { NumberingItem.WidthVisible = Math.max(NumberingItem.Width, this.X + ParaPr.Ind.Left + ParaPr.Ind.FirstLine - X, this.X + ParaPr.Ind.Left - X); } else { NumberingItem.WidthVisible = Math.max(this.X + ParaPr.Ind.Left + NumberingItem.Width - X, this.X + ParaPr.Ind.Left + ParaPr.Ind.FirstLine - X, this.X + ParaPr.Ind.Left - X); } } X += NumberingItem.WidthVisible; this.Numbering.Pos = Pos; } } bAddNumbering = false; } } switch (Item.Type) { case para_Text: bStartWord = true; if (LineTextAscent < TextAscent) { LineTextAscent = TextAscent; } if (LineTextAscent2 < TextAscent2) { LineTextAscent2 = TextAscent2; } if (LineTextDescent < TextDescent) { LineTextDescent = TextDescent; } if (linerule_Exact === ParaPr.Spacing.LineRule) { if (LineAscent < TextAscent) { LineAscent = TextAscent; } if (LineDescent < TextDescent) { LineDescent = TextDescent; } } else { if (LineAscent < TextAscent + Item.YOffset) { LineAscent = TextAscent + Item.YOffset; } if (LineDescent < TextDescent - Item.YOffset) { LineDescent = TextDescent - Item.YOffset; } } if (!bWord) { var LetterLen = Item.Width; if (!bFirstItemOnLine || false === this.Internal_Check_Ranges(CurLine, CurRange)) { if (X + nSpaceLen + LetterLen > XEnd) { if (RangesCount == CurRange) { bNewLine = true; Pos--; } else { bNewRange = true; Pos--; } } } if (!bNewLine && !bNewRange) { nWordStartPos = Pos; nWordLen = Item.Width; bWord = true; } } else { var LetterLen = Item.Width; if (X + nSpaceLen + nWordLen + LetterLen > XEnd) { if (bFirstItemOnLine) { if (false === this.Internal_Check_Ranges(CurLine, CurRange)) { Pos = nWordStartPos - 1; if (RangesCount != CurRange) { bNewRange = true; } else { bNewLine = true; } } else { bEmptyLine = false; X += nWordLen; Pos--; if (RangesCount != CurRange) { bNewRange = true; } else { bNewLine = true; } } } else { Pos = nWordStartPos; if (RangesCount == CurRange) { Pos--; bNewLine = true; } else { Pos--; bNewRange = true; } } } if (!bNewLine && !bNewRange) { nWordLen += LetterLen; if (true === Item.SpaceAfter) { X += nSpaceLen; X += nWordLen; bWord = false; bFirstItemOnLine = false; bEmptyLine = false; nSpaceLen = 0; nWordLen = 0; nSpacesCount = 0; } } } break; case para_Space: bFirstItemOnLine = false; var SpaceLen = Item.Width; if (bWord) { X += nSpaceLen; X += nWordLen; bWord = false; bEmptyLine = false; nSpaceLen = 0; nWordLen = 0; nSpacesCount = 1; } else { nSpacesCount++; } nSpaceLen += SpaceLen; break; case para_Drawing: if (true === Item.Is_Inline() || true === this.Parent.Is_DrawingShape()) { if (true != Item.Is_Inline()) { Item.Set_DrawingType(drawing_Inline); } if (true === bStartWord) { bFirstItemOnLine = false; } if (bWord || nWordLen > 0) { X += nSpaceLen; X += nWordLen; bWord = false; nSpaceLen = 0; nSpacesCount = 0; nWordLen = 0; } if (X + nSpaceLen + Item.Width > XEnd && (false === bFirstItemOnLine || false === this.Internal_Check_Ranges(CurLine, CurRange))) { if (RangesCount == CurRange) { bNewLine = true; Pos--; } else { bNewRange = true; Pos--; } } else { X += nSpaceLen; if (linerule_Exact === ParaPr.Spacing.LineRule) { if (LineAscent < Item.Height) { LineAscent = Item.Height; } if (Item.Height > this.Lines[CurLine].Metrics.Ascent) { this.Lines[CurLine].Metrics.Ascent = Item.Height; } } else { if (LineAscent < Item.Height + Item.YOffset) { LineAscent = Item.Height + Item.YOffset; } if (Item.Height + Item.YOffset > this.Lines[CurLine].Metrics.Ascent) { this.Lines[CurLine].Metrics.Ascent = Item.Height + Item.YOffset; } if (-Item.YOffset > this.Lines[CurLine].Metrics.Descent) { this.Lines[CurLine].Metrics.Descent = -Item.YOffset; } } X += Item.Width; bFirstItemOnLine = false; bEmptyLine = false; } nSpaceLen = 0; nSpacesCount = 0; } else { var LogicDocument = this.Parent; var LDRecalcInfo = LogicDocument.RecalcInfo; var DrawingObjects = LogicDocument.DrawingObjects; if (true === LDRecalcInfo.Check_FlowObject(Item) && true === LDRecalcInfo.Is_PageBreakBefore()) { LDRecalcInfo.Reset(); if (null != this.Get_DocumentPrev() && true != this.Parent.Is_TableCellContent() && 0 === CurPage) { for (var TempPos = StartPos; TempPos < Pos; TempPos++) { var TempItem = this.Content[TempPos]; if (para_Drawing === TempItem.Type && drawing_Anchor === TempItem.DrawingType && true === TempItem.Use_TextWrap()) { DrawingObjects.removeById(TempItem.PageNum, TempItem.Get_Id()); } } this.Pages[CurPage].Set_EndLine(-1); if (0 === CurLine) { this.Lines[-1] = new CParaLine(0); this.Lines[-1].Set_EndPos(LineStart_Pos - 1, this); } RecalcResult = recalcresult_NextPage; return; } else { if (CurLine != this.Pages[CurPage].FirstLine) { this.Pages[CurPage].Set_EndLine(CurLine - 1); if (0 === CurLine) { this.Lines[-1] = new CParaLine(0); this.Lines[-1].Set_EndPos(LineStart_Pos - 1, this); } RecalcResult = recalcresult_NextPage; bBreak = true; break; } else { Pos--; bNewLine = true; bForceNewPage = true; } } if (bWord || nWordLen > 0) { X += nSpaceLen; X += nWordLen; bWord = false; nSpaceLen = 0; nSpacesCount = 0; nWordLen = 0; } } } break; case para_PageNum: if (bWord || nWordLen > 0) { X += nSpaceLen; X += nWordLen; bWord = false; nSpaceLen = 0; nSpacesCount = 0; nWordLen = 0; } if (true === bStartWord) { bFirstItemOnLine = false; } if (LineTextAscent < TextAscent) { LineTextAscent = TextAscent; } if (LineTextAscent2 < TextAscent2) { LineTextAscent2 = TextAscent2; } if (LineTextDescent < TextDescent) { LineTextDescent = TextDescent; } if (linerule_Exact === ParaPr.Spacing.LineRule) { if (LineAscent < TextAscent) { LineAscent = TextAscent; } if (LineDescent < TextDescent) { LineDescent = TextDescent; } } else { if (LineAscent < TextAscent + Item.YOffset) { LineAscent = TextAscent + Item.YOffset; } if (LineDescent < TextDescent - Item.YOffset) { LineDescent = TextDescent - Item.YOffset; } } if (X + nSpaceLen + Item.Width > XEnd && (false === bFirstItemOnLine || RangesCount > 0)) { if (RangesCount == CurRange) { bNewLine = true; Pos--; } else { bNewRange = true; Pos--; } } else { X += nSpaceLen; X += Item.Width; bFirstItemOnLine = false; bEmptyLine = false; } nSpaceLen = 0; nSpacesCount = 0; break; case para_Tab: if (-1 != pLastTab.Value) { var TempTabX = X; if (bWord || nWordLen > 0) { TempTabX += nSpaceLen + nWordLen; } var TabItem = pLastTab.Item; var TabStartX = pLastTab.X; var TabRangeW = TempTabX - TabStartX; var TabValue = pLastTab.Value; var TabPos = pLastTab.TabPos; var TabCalcW = 0; if (tab_Right === TabValue) { TabCalcW = Math.max(TabPos - (TabStartX + TabRangeW), 0); } else { if (tab_Center === TabValue) { TabCalcW = Math.max(TabPos - (TabStartX + TabRangeW / 2), 0); } } if (X + TabCalcW > XEnd) { TabCalcW = XEnd - X; } TabItem.Width = TabCalcW; TabItem.WidthVisible = TabCalcW; pLastTab.Value = -1; X += TabCalcW; } X += nSpaceLen; X += nWordLen; bWord = false; nSpaceLen = 0; nWordLen = 0; nSpacesCount = 0; this.Lines[CurLine].Ranges[CurRange].Spaces = 0; this.Lines[CurLine].Ranges[CurRange].TabPos = Pos; var PageStart = this.Parent.Get_PageContentStartPos(this.PageNum + CurPage); if (undefined != this.Get_FramePr()) { PageStart.X = 0; } var TabsCount = ParaPr.Tabs.Get_Count(); var TabsPos = new Array(); var bCheckLeft = true; for (var Index = 0; Index < TabsCount; Index++) { var Tab = ParaPr.Tabs.Get(Index); var TabPos = Tab.Pos + PageStart.X; if (true === bCheckLeft && TabPos > PageStart.X + ParaPr.Ind.Left) { TabsPos.push(PageStart.X + ParaPr.Ind.Left); bCheckLeft = false; } if (tab_Clear != Tab.Value) { TabsPos.push(Tab); } } if (true === bCheckLeft) { TabsPos.push(PageStart.X + ParaPr.Ind.Left); } TabsCount = TabsPos.length; var Tab = null; for (var Index = 0; Index < TabsCount; Index++) { var TempTab = TabsPos[Index]; if (X < TempTab.Pos + PageStart.X) { Tab = TempTab; break; } } var NewX = null; if (null === Tab) { if (X < PageStart.X + ParaPr.Ind.Left) { NewX = PageStart.X + ParaPr.Ind.Left; } else { NewX = this.X; while (X >= NewX - 0.001) { NewX += Default_Tab_Stop; } } } else { if (tab_Left === Tab.Value) { NewX = Tab.Pos + PageStart.X; } else { pLastTab.TabPos = Tab.Pos + PageStart.X; pLastTab.Value = Tab.Value; pLastTab.X = X; pLastTab.Item = Item; Item.Width = 0; Item.WidthVisible = 0; } } if (null != NewX) { if (NewX > XEnd && (false === bFirstItemOnLine || RangesCount > 0)) { nWordLen = NewX - X; if (RangesCount == CurRange) { bNewLine = true; Pos--; } else { bNewRange = true; Pos--; } } else { Item.Width = NewX - X; Item.WidthVisible = NewX - X; X = NewX; } } if (RangesCount === CurRange) { if (true === bStartWord) { bFirstItemOnLine = false; bEmptyLine = false; } nWordStartPos = Pos; } nSpacesCount = 0; bStartWord = true; bWord = true; nWordStartPos = Pos; break; case para_TextPr: break; case para_NewLine: if (break_Page === Item.BreakType) { if (! (this.Parent instanceof CDocument)) { this.Internal_Content_Remove(Pos); Pos--; break; } bNewPage = true; bNewLine = true; bBreakPageLine = true; } else { if (RangesCount === CurRange) { bNewLine = true; } else { bNewRange = true; } bEmptyLine = false; } X += nWordLen; if (bWord && this.Lines[CurLine].Words > 1) { this.Lines[CurLine].Spaces += nSpacesCount; } if (bWord && this.Lines[CurLine].Ranges[CurRange].Words > 1) { this.Lines[CurLine].Ranges[CurRange].Spaces += nSpacesCount; } if (bWord) { bEmptyLine = false; bWord = false; X += nSpaceLen; nSpaceLen = 0; } break; case para_End: if (true === bWord) { bFirstItemOnLine = false; bEmptyLine = false; } if (false === bExtendBoundToBottom) { X += nWordLen; if (bWord) { this.Lines[CurLine].Spaces += nSpacesCount; this.Lines[CurLine].Ranges[CurRange].Spaces += nSpacesCount; } if (bWord) { X += nSpaceLen; nSpaceLen = 0; } if (-1 != pLastTab.Value) { var TabItem = pLastTab.Item; var TabStartX = pLastTab.X; var TabRangeW = X - TabStartX; var TabValue = pLastTab.Value; var TabPos = pLastTab.TabPos; var TabCalcW = 0; if (tab_Right === TabValue) { TabCalcW = Math.max(TabPos - (TabStartX + TabRangeW), 0); } else { if (tab_Center === TabValue) { TabCalcW = Math.max(TabPos - (TabStartX + TabRangeW / 2), 0); } } if (X + TabCalcW > XEnd) { TabCalcW = XEnd - X; } TabItem.Width = TabCalcW; TabItem.WidthVisible = TabCalcW; pLastTab.Value = -1; X += TabCalcW; } } bNewLine = true; bEnd = true; break; } if (bBreak) { break; } } if (bNewLine) { pLastTab.Value = -1; nSpaceLen = 0; if (true === bEmptyLine || LineAscent < 0.001) { if (true === bEnd) { TextAscent = Item.TextAscent; TextDescent = Item.TextDescent; TextAscent2 = Item.TextAscent2; } if (LineTextAscent < TextAscent) { LineTextAscent = TextAscent; } if (LineTextAscent2 < TextAscent2) { LineTextAscent2 = TextAscent2; } if (LineTextDescent < TextDescent) { LineTextDescent = TextDescent; } if (LineAscent < TextAscent) { LineAscent = TextAscent; } if (LineDescent < TextDescent) { LineDescent = TextDescent; } } this.Lines[CurLine].Metrics.Update(LineTextAscent, LineTextAscent2, LineTextDescent, LineAscent, LineDescent, ParaPr); bFirstItemOnLine = true; bStartWord = false; bNewLine = false; bNewRange = false; var TempDy = this.Lines[this.Pages[CurPage].FirstLine].Metrics.Ascent; if (0 === this.Pages[CurPage].FirstLine && (0 === CurPage || true === this.Parent.Is_TableCellContent() || true === ParaPr.PageBreakBefore)) { TempDy += ParaPr.Spacing.Before; } if (0 === this.Pages[CurPage].FirstLine) { if ((true === ParaPr.Brd.First || 1 === CurPage) && border_Single === ParaPr.Brd.Top.Value) { TempDy += ParaPr.Brd.Top.Size + ParaPr.Brd.Top.Space; } else { if (false === ParaPr.Brd.First && border_Single === ParaPr.Brd.Between.Value) { TempDy += ParaPr.Brd.Between.Size + ParaPr.Brd.Between.Space; } } } var Top, Bottom; var Top2, Bottom2; var LastPage_Bottom = this.Pages[CurPage].Bounds.Bottom; if (true === this.Lines[CurLine].RangeY) { Top = Y; Top2 = Y; this.Lines[CurLine].Top = Top - this.Pages[CurPage].Y; if (0 === CurLine) { if (0 === CurPage || true === this.Parent.Is_TableCellContent()) { Top2 = Top + ParaPr.Spacing.Before; Bottom2 = Top + ParaPr.Spacing.Before + this.Lines[0].Metrics.Ascent + this.Lines[0].Metrics.Descent; Bottom = Top + ParaPr.Spacing.Before + this.Lines[0].Metrics.Ascent + this.Lines[0].Metrics.Descent + this.Lines[0].Metrics.LineGap; if (true === ParaPr.Brd.First && border_Single === ParaPr.Brd.Top.Value) { Top2 += ParaPr.Brd.Top.Size + ParaPr.Brd.Top.Space; Bottom2 += ParaPr.Brd.Top.Size + ParaPr.Brd.Top.Space; Bottom += ParaPr.Brd.Top.Size + ParaPr.Brd.Top.Space; } else { if (false === ParaPr.Brd.First && border_Single === ParaPr.Brd.Between.Value) { Top2 += ParaPr.Brd.Between.Size + ParaPr.Brd.Between.Space; Bottom2 += ParaPr.Brd.Between.Size + ParaPr.Brd.Between.Space; Bottom += ParaPr.Brd.Between.Size + ParaPr.Brd.Between.Space; } } } else { Bottom2 = Top + this.Lines[0].Metrics.Ascent + this.Lines[0].Metrics.Descent; Bottom = Top + this.Lines[0].Metrics.Ascent + this.Lines[0].Metrics.Descent + this.Lines[0].Metrics.LineGap; if (border_Single === ParaPr.Brd.Top.Value) { Top2 += ParaPr.Brd.Top.Size + ParaPr.Brd.Top.Space; Bottom2 += ParaPr.Brd.Top.Size + ParaPr.Brd.Top.Space; Bottom += ParaPr.Brd.Top.Size + ParaPr.Brd.Top.Space; } } } else { Bottom2 = Top + this.Lines[CurLine].Metrics.Ascent + this.Lines[CurLine].Metrics.Descent; Bottom = Top + this.Lines[CurLine].Metrics.Ascent + this.Lines[CurLine].Metrics.Descent + this.Lines[CurLine].Metrics.LineGap; } if (bEnd) { Bottom += ParaPr.Spacing.After; if (true === ParaPr.Brd.Last) { if (border_Single === ParaPr.Brd.Bottom.Value) { Bottom += ParaPr.Brd.Bottom.Size + ParaPr.Brd.Bottom.Space; } } else { if (border_Single === ParaPr.Brd.Between.Value) { Bottom += ParaPr.Brd.Between.Space; } } if (false === this.Parent.Is_TableCellContent() && Bottom > this.YLimit && Bottom - this.YLimit <= ParaPr.Spacing.After) { Bottom = this.YLimit; } } this.Lines[CurLine].Bottom = Bottom - this.Pages[CurPage].Y; this.Bounds.Bottom = Bottom; this.Pages[CurPage].Bounds.Bottom = Bottom; } else { if (0 != CurLine) { if (CurLine != this.Pages[CurPage].FirstLine) { Top = Y + TempDy + this.Lines[CurLine - 1].Metrics.Descent + this.Lines[CurLine - 1].Metrics.LineGap; Bottom = Top + this.Lines[CurLine].Metrics.Ascent + this.Lines[CurLine].Metrics.Descent + this.Lines[CurLine].Metrics.LineGap; Top2 = Top; Bottom2 = Top + this.Lines[CurLine].Metrics.Ascent + this.Lines[CurLine].Metrics.Descent; this.Lines[CurLine].Top = Top - this.Pages[CurPage].Y; if (bEnd) { Bottom += ParaPr.Spacing.After; if (true === ParaPr.Brd.Last) { if (border_Single === ParaPr.Brd.Bottom.Value) { Bottom += ParaPr.Brd.Bottom.Size + ParaPr.Brd.Bottom.Space; } } else { if (border_Single === ParaPr.Brd.Between.Value) { Bottom += ParaPr.Brd.Between.Space; } } if (false === this.Parent.Is_TableCellContent() && Bottom > this.YLimit && Bottom - this.YLimit <= ParaPr.Spacing.After) { Bottom = this.YLimit; } } this.Lines[CurLine].Bottom = Bottom - this.Pages[CurPage].Y; this.Bounds.Bottom = Bottom; this.Pages[CurPage].Bounds.Bottom = Bottom; } else { Top = this.Pages[CurPage].Y; Bottom = Top + this.Lines[CurLine].Metrics.Ascent + this.Lines[CurLine].Metrics.Descent + this.Lines[CurLine].Metrics.LineGap; Top2 = Top; Bottom2 = Top + this.Lines[CurLine].Metrics.Ascent + this.Lines[CurLine].Metrics.Descent; this.Lines[CurLine].Top = 0; if (bEnd) { Bottom += ParaPr.Spacing.After; if (true === ParaPr.Brd.Last) { if (border_Single === ParaPr.Brd.Bottom.Value) { Bottom += ParaPr.Brd.Bottom.Size + ParaPr.Brd.Bottom.Space; } } else { if (border_Single === ParaPr.Brd.Between.Value) { Bottom += ParaPr.Brd.Between.Space; } } if (false === this.Parent.Is_TableCellContent() && Bottom > this.YLimit && Bottom - this.YLimit <= ParaPr.Spacing.After) { Bottom = this.YLimit; } } this.Lines[CurLine].Bottom = Bottom - this.Pages[CurPage].Y; this.Bounds.Bottom = Bottom; this.Pages[CurPage].Bounds.Bottom = Bottom; } } else { Top = Y; Top2 = Y; if (0 === CurPage || true === this.Parent.Is_TableCellContent() || true === ParaPr.PageBreakBefore) { Top2 = Top + ParaPr.Spacing.Before; Bottom = Top + ParaPr.Spacing.Before + this.Lines[0].Metrics.Ascent + this.Lines[0].Metrics.Descent + this.Lines[0].Metrics.LineGap; Bottom2 = Top + ParaPr.Spacing.Before + this.Lines[0].Metrics.Ascent + this.Lines[0].Metrics.Descent; if (true === ParaPr.Brd.First && border_Single === ParaPr.Brd.Top.Value) { Top2 += ParaPr.Brd.Top.Size + ParaPr.Brd.Top.Space; Bottom2 += ParaPr.Brd.Top.Size + ParaPr.Brd.Top.Space; Bottom += ParaPr.Brd.Top.Size + ParaPr.Brd.Top.Space; } else { if (false === ParaPr.Brd.First && border_Single === ParaPr.Brd.Between.Value) { Top2 += ParaPr.Brd.Between.Size + ParaPr.Brd.Between.Space; Bottom2 += ParaPr.Brd.Between.Size + ParaPr.Brd.Between.Space; Bottom += ParaPr.Brd.Between.Size + ParaPr.Brd.Between.Space; } } } else { Bottom = Top + this.Lines[0].Metrics.Ascent + this.Lines[0].Metrics.Descent + this.Lines[0].Metrics.LineGap; Bottom2 = Top + this.Lines[0].Metrics.Ascent + this.Lines[0].Metrics.Descent; if (border_Single === ParaPr.Brd.Top.Value) { Top2 += ParaPr.Brd.Top.Size + ParaPr.Brd.Top.Space; Bottom2 += ParaPr.Brd.Top.Size + ParaPr.Brd.Top.Space; Bottom += ParaPr.Brd.Top.Size + ParaPr.Brd.Top.Space; } } if (bEnd) { Bottom += ParaPr.Spacing.After; if (true === ParaPr.Brd.Last) { if (border_Single === ParaPr.Brd.Bottom.Value) { Bottom += ParaPr.Brd.Bottom.Size + ParaPr.Brd.Bottom.Space; } } else { if (border_Single === ParaPr.Brd.Between.Value) { Bottom += ParaPr.Brd.Between.Space; } } if (false === this.Parent.Is_TableCellContent() && Bottom > this.YLimit && Bottom - this.YLimit <= ParaPr.Spacing.After) { Bottom = this.YLimit; } } this.Lines[0].Top = Top - this.Pages[CurPage].Y; this.Lines[0].Bottom = Bottom - this.Pages[CurPage].Y; this.Bounds.Top = Top; this.Bounds.Bottom = Bottom; this.Pages[CurPage].Bounds.Top = Top; this.Pages[CurPage].Bounds.Bottom = Bottom; } } var bBreakPageLineEmpty = false; if (true === bBreakPageLine) { bBreakPageLineEmpty = true; for (var _Pos = Pos - 1; _Pos >= LineStart_Pos; _Pos--) { var _Item = this.Content[_Pos]; var _Type = _Item.Type; if (para_Drawing === _Type || para_End === _Type || (para_NewLine === _Type && break_Line === _Item.BreakType) || para_PageNum === _Type || para_Space === _Type || para_Tab === _Type || para_Text === _Type) { bBreakPageLineEmpty = false; break; } } } if (true === this.Use_YLimit() && (Top > this.YLimit || Bottom2 > this.YLimit) && (CurLine != this.Pages[CurPage].FirstLine || (0 === CurPage && (null != this.Get_DocumentPrev() || true === this.Parent.Is_TableCellContent()))) && false === bBreakPageLineEmpty) { if (this.Parent instanceof CDocument && true === this.Parent.RecalcInfo.Can_RecalcObject() && true === ParaPr.WidowControl && CurLine - this.Pages[CurPage].StartLine <= 1 && CurLine >= 1 && true != bBreakPageLine && (0 === CurPage && null != this.Get_DocumentPrev())) { this.Parent.RecalcInfo.Set_WidowControl(this, CurLine - 1); RecalcResult = recalcresult_CurPage; break; } else { if (true === ParaPr.KeepLines && null != this.Get_DocumentPrev() && true != this.Parent.Is_TableCellContent() && 0 === CurPage) { CurLine = 0; LineStart_Pos = 0; } this.Pages[CurPage].Bounds.Bottom = LastPage_Bottom; this.Pages[CurPage].Set_EndLine(CurLine - 1); if (0 === CurLine) { this.Lines[-1] = new CParaLine(0); this.Lines[-1].Set_EndPos(LineStart_Pos - 1, this); } RecalcResult = recalcresult_NextPage; break; } } bBreakPageLine = false; var Left = (0 != CurLine ? this.X + ParaPr.Ind.Left : this.X + ParaPr.Ind.Left + ParaPr.Ind.FirstLine); var Right = this.XLimit - ParaPr.Ind.Right; var PageFields = this.Parent.Get_PageFields(this.PageNum + CurPage); var Ranges2; if (true === this.Use_Wrap()) { Ranges2 = this.Parent.CheckRange(Left, Top, Right, Bottom, Top2, Bottom2, PageFields.X, PageFields.XLimit, this.PageNum + CurPage, true); } else { Ranges2 = new Array(); } if (-1 == FlowObjects_CompareRanges(Ranges, Ranges2) && true === FlowObjects_CheckInjection(Ranges, Ranges2) && false === bBreakPageLineEmpty) { bEnd = false; Ranges = Ranges2; Pos = LineStart_Pos - 1; if (0 == CurLine) { X = this.X + ParaPr.Ind.Left + ParaPr.Ind.FirstLine; } else { X = this.X + ParaPr.Ind.Left; } this.Lines[CurLine].Reset(); LineTextAscent = 0; LineTextAscent2 = 0; LineTextDescent = 0; LineAscent = 0; LineDescent = 0; TextAscent = 0; TextDescent = 0; TextAscent2 = 0; RangesCount = Ranges.length; this.Lines[CurLine].Add_Range((0 == CurLine ? this.X + ParaPr.Ind.Left + ParaPr.Ind.FirstLine : this.X + ParaPr.Ind.Left), (RangesCount == 0 ? XLimit : Ranges[0].X0)); this.Lines[CurLine].Set_RangeStartPos(0, Pos + 1); for (var Index = 1; Index < Ranges.length + 1; Index++) { this.Lines[CurLine].Add_Range(Ranges[Index - 1].X1, (RangesCount == Index ? XLimit : Ranges[Index].X0)); } CurRange = 0; XEnd = 0; if (RangesCount == 0) { XEnd = XLimit; } else { XEnd = Ranges[0].X0; } bStartWord = false; bWord = false; bNewPage = false; bForceNewPage = false; bExtendBoundToBottom = false; nWordLen = 0; nSpacesCount = 0; bAddNumbering = this.Internal_CheckAddNumbering(CurPage, CurLine, CurRange); } else { if (0 != CurLine) { this.Lines[CurLine].W = X - this.X - ParaPr.Ind.Left; } else { this.Lines[CurLine].W = X - this.X - ParaPr.Ind.Left - ParaPr.Ind.FirstLine; } if (0 == CurRange) { if (0 != CurLine) { this.Lines[CurLine].Ranges[CurRange].W = X - this.X - ParaPr.Ind.Left; } else { this.Lines[CurLine].Ranges[CurRange].W = X - this.X - ParaPr.Ind.Left - ParaPr.Ind.FirstLine; } } else { if (true === this.Lines[CurLine].Ranges[CurRange].FirstRange) { if (ParaPr.Ind.FirstLine < 0) { Ranges[CurRange - 1].X1 += ParaPr.Ind.Left + ParaPr.Ind.FirstLine; } else { Ranges[CurRange - 1].X1 += ParaPr.Ind.FirstLine; } } this.Lines[CurLine].Ranges[CurRange].W = X - Ranges[CurRange - 1].X1; } if (true === bNewPage) { bNewPage = false; var ____Pos = Pos + 1; var Next = this.Internal_FindForward(____Pos, [para_End, para_NewLine, para_Space, para_Text, para_Drawing, para_Tab, para_PageNum]); while (true === Next.Found && para_Drawing === Next.Type && drawing_Anchor === this.Content[Next.LetterPos].Get_DrawingType()) { Next = this.Internal_FindForward(++____Pos, [para_End, para_NewLine, para_Space, para_Text, para_Drawing, para_Tab, para_PageNum]); } if (true === Next.Found && para_End === Next.Type) { Item.Flags.NewLine = false; bExtendBoundToBottom = true; continue; } if (true === this.Lines[CurLine].RangeY) { this.Lines[CurLine].Y = Y - this.Pages[CurPage].Y; } else { if (CurLine > 0) { if (CurLine != this.Pages[CurPage].FirstLine) { Y += this.Lines[CurLine - 1].Metrics.Descent + this.Lines[CurLine - 1].Metrics.LineGap + this.Lines[CurLine].Metrics.Ascent; } this.Lines[CurLine].Y = Y - this.Pages[CurPage].Y; } } this.Pages[CurPage].Set_EndLine(CurLine); this.Lines[CurLine].Set_EndPos(Pos, this); RecalcResult = recalcresult_NextPage; break; } else { if (true === this.Lines[CurLine].RangeY) { this.Lines[CurLine].Y = Y - this.Pages[CurPage].Y; } else { if (CurLine > 0) { if (CurLine != this.Pages[CurPage].FirstLine) { Y += this.Lines[CurLine - 1].Metrics.Descent + this.Lines[CurLine - 1].Metrics.LineGap + this.Lines[CurLine].Metrics.Ascent; } this.Lines[CurLine].Y = Y - this.Pages[CurPage].Y; } } if ((true === bEmptyLine && RangesCount > 0 && LineStart_Pos < 0) || Pos < 0) { X = this.X + ParaPr.Ind.Left + ParaPr.Ind.FirstLine; } else { X = this.X + ParaPr.Ind.Left; } } if (!bEnd) { if (true === bEmptyLine && RangesCount > 0) { Pos = LineStart_Pos - 1; var RangesY = Ranges[0].Y1; for (var Index = 1; Index < Ranges.length; Index++) { if (RangesY > Ranges[Index].Y1) { RangesY = Ranges[Index].Y1; } } if (Math.abs(RangesY - Y) < 0.01) { Y = RangesY + 1; } else { Y = RangesY + 0.001; } if (0 === CurLine) { X = this.X + ParaPr.Ind.Left + ParaPr.Ind.FirstLine; } else { X = this.X + ParaPr.Ind.Left; } } else { this.Lines[CurLine].Set_EndPos(Pos, this); CurLine++; if (this.Parent instanceof CDocument && true === this.Parent.RecalcInfo.Check_WidowControl(this, CurLine)) { this.Parent.RecalcInfo.Reset_WidowControl(); this.Pages[CurPage].Set_EndLine(CurLine - 1); if (0 === CurLine) { this.Lines[-1] = new CParaLine(0); this.Lines[-1].Set_EndPos(LineStart_Pos - 1, this); } RecalcResult = recalcresult_NextPage; break; } } this.Lines[CurLine] = new CParaLine(Pos + 1); LineTextAscent = 0; LineTextDescent = 0; LineTextAscent2 = 0; LineAscent = 0; LineDescent = 0; TextAscent = 0; TextDescent = 0; TextAscent2 = 0; var TempY; if (true === bEmptyLine && RangesCount > 0) { TempY = Y; this.Lines[CurLine].RangeY = true; } else { if (CurLine > 0) { if (CurLine != this.Pages[CurPage].FirstLine) { TempY = TempDy + Y + this.Lines[CurLine - 1].Metrics.Descent + this.Lines[CurLine - 1].Metrics.LineGap; } else { TempY = this.Pages[CurPage].Y; } } else { TempY = this.Y; } } Ranges = []; RangesCount = Ranges.length; this.Lines[CurLine].Add_Range(X, (RangesCount == 0 ? XLimit : Ranges[0].X0)); this.Lines[CurLine].Set_RangeStartPos(0, Pos + 1); for (var Index = 1; Index < Ranges.length + 1; Index++) { this.Lines[CurLine].Add_Range(Ranges[Index - 1].X1, (RangesCount == Index ? XLimit : Ranges[Index].X0)); } CurRange = 0; XEnd = 0; if (RangesCount == 0) { XEnd = XLimit; } else { XEnd = Ranges[0].X0; } bWord = false; nWordLen = 0; nSpacesCount = 0; LineStart_Pos = Pos + 1; if (true === bForceNewPage) { this.Pages[CurPage].Set_EndLine(CurLine - 1); if (0 === CurLine) { this.Lines[-1] = new CParaLine(0); this.Lines[-1].Set_EndPos(LineStart_Pos - 1, this); } RecalcResult = recalcresult_NextPage; break; } bAddNumbering = this.Internal_CheckAddNumbering(CurPage, CurLine, CurRange); } else { for (var TempRange = CurRange + 1; TempRange <= RangesCount; TempRange++) { this.Lines[CurLine].Set_RangeStartPos(TempRange, Pos + 1); } this.Lines[CurLine].Set_EndPos(Pos, this); if (true === ParaPr.WidowControl && CurLine === this.Pages[CurPage].StartLine && CurLine >= 1) { var bBreakPagePrevLine = false; var StartPos = (CurLine == 2 ? this.Lines[CurLine - 2].StartPos : this.Lines[CurLine - 1].StartPos); var EndPos = this.Lines[CurLine - 1].EndPos; for (var TempPos = StartPos; TempPos <= EndPos; TempPos++) { var TempItem = this.Content[TempPos]; if (para_NewLine === TempItem.Type && break_Page === TempItem.BreakType) { bBreakPagePrevLine = true; break; } } if (this.Parent instanceof CDocument && true === this.Parent.RecalcInfo.Can_RecalcObject() && false === bBreakPagePrevLine && (1 === CurPage && null != this.Get_DocumentPrev()) && this.Lines[CurLine - 1].Ranges.length <= 1) { this.Parent.RecalcInfo.Set_WidowControl(this, (CurLine > 2 ? CurLine - 1 : 0)); RecalcResult = recalcresult_PrevPage; break; } } if (true === bEnd && true === bExtendBoundToBottom) { this.Pages[CurPage].Bounds.Bottom = this.Pages[CurPage].YLimit; this.Bounds.Bottom = this.Pages[CurPage].YLimit; this.Lines[CurLine].Set_EndPos(Pos, this); this.Pages[CurPage].Set_EndLine(CurLine); for (var TempRange = CurRange + 1; TempRange <= RangesCount; TempRange++) { this.Lines[CurLine].Set_RangeStartPos(TempRange, Pos); } if (Pos === this.Numbering.Pos) { this.Numbering.Pos = -1; } } else { this.Lines[CurLine].Set_EndPos(Pos, this); this.Pages[CurPage].Set_EndLine(CurLine); for (var TempRange = CurRange + 1; TempRange <= RangesCount; TempRange++) { this.Lines[CurLine].Set_RangeStartPos(TempRange, Pos + 1); } } } } bEmptyLine = true; } else { if (bNewRange) { pLastTab.Value = -1; this.Lines[CurLine].Set_RangeStartPos(CurRange + 1, Pos + 1); nSpaceLen = 0; bNewRange = false; bFirstItemOnLine = true; bStartWord = false; if (0 == CurRange) { if (0 != CurLine) { this.Lines[CurLine].Ranges[CurRange].W = X - this.X - ParaPr.Ind.Left; } else { this.Lines[CurLine].Ranges[CurRange].W = X - this.X - ParaPr.Ind.Left - ParaPr.Ind.FirstLine; } } else { if (true === this.Lines[CurLine].Ranges[CurRange].FirstRange) { if (ParaPr.Ind.FirstLine < 0) { Ranges[CurRange - 1].X1 += ParaPr.Ind.Left + ParaPr.Ind.FirstLine; } else { Ranges[CurRange - 1].X1 += ParaPr.Ind.FirstLine; } } this.Lines[CurLine].Ranges[CurRange].W = X - Ranges[CurRange - 1].X1; } CurRange++; if (0 === CurLine && true === bEmptyLine) { if (ParaPr.Ind.FirstLine < 0) { this.Lines[CurLine].Ranges[CurRange].X += ParaPr.Ind.Left + ParaPr.Ind.FirstLine; } else { this.Lines[CurLine].Ranges[CurRange].X += ParaPr.Ind.FirstLine; } this.Lines[CurLine].Ranges[CurRange].FirstRange = true; } X = this.Lines[CurLine].Ranges[CurRange].X; if (CurRange == RangesCount) { XEnd = XLimit; } else { XEnd = Ranges[CurRange].X0; } bWord = false; nWordLen = 0; nSpacesCount = 0; bAddNumbering = this.Internal_CheckAddNumbering(CurPage, CurLine, CurRange); } } } var StartLine = this.Pages[CurPage].FirstLine; var EndLine = this.Lines.length - 1; var TempDy = this.Lines[this.Pages[CurPage].FirstLine].Metrics.Ascent; if (0 === StartLine && (0 === CurPage || true === this.Parent.Is_TableCellContent() || true === ParaPr.PageBreakBefore)) { TempDy += ParaPr.Spacing.Before; } if (0 === StartLine) { if ((true === ParaPr.Brd.First || 1 === CurPage) && border_Single === ParaPr.Brd.Top.Value) { TempDy += ParaPr.Brd.Top.Size + ParaPr.Brd.Top.Space; } else { if (false === ParaPr.Brd.First && border_Single === ParaPr.Brd.Between.Value) { TempDy += ParaPr.Brd.Between.Size + ParaPr.Brd.Between.Space; } } } for (var Index = StartLine; Index <= EndLine; Index++) { this.Lines[Index].Y += TempDy; if (this.Lines[Index].Metrics.LineGap < 0) { this.Lines[Index].Y += this.Lines[Index].Metrics.LineGap; } } return RecalcResult; }, Internal_Recalculate_2_: function (StartPos, _CurPage, _CurLine) { var Pr = this.Get_CompiledPr2(false); var ParaPr = Pr.ParaPr; var CurRange = 0; var CurLine = _CurLine; var CurPage = _CurPage; if (this.Pages[CurPage].EndLine < 0) { return recalcresult_NextPage; } var EndPos = this.Lines[this.Pages[CurPage].EndLine].EndPos; var JustifyWord = 0; var JustifySpace = 0; var Y = this.Pages[CurPage].Y + this.Lines[CurLine].Y; var bFirstLineItem = true; var Range = this.Lines[CurLine].Ranges[CurRange]; var RangesCount = this.Lines[CurLine].Ranges.length; var RangeWidth = Range.XEnd - Range.X; var X = 0; switch (ParaPr.Jc) { case align_Left: X = Range.X; break; case align_Right: X = Math.max(Range.X + RangeWidth - Range.W, Range.X); break; case align_Center: X = Math.max(Range.X + (RangeWidth - Range.W) / 2, Range.X); break; case align_Justify: X = Range.X; if (1 == Range.Words) { if (1 == RangesCount && this.Lines.length > 1) { var LettersCount = 0; var TempPos = StartPos; var LastW = 0; var __CurLine = CurLine; var __CurRange = CurRange; while (this.Content[TempPos].Type != para_End) { var __Item = this.Content[TempPos]; if (undefined != __Item.CurPage) { if (__CurLine != __Item.CurLine || __CurRange != __Item.Range) { break; } } if (para_Text == this.Content[TempPos].Type) { LettersCount++; LastW = this.Content[TempPos].Width; } TempPos++; } if (RangeWidth - Range.W <= 0.05 * RangeWidth && LettersCount > 1) { JustifyWord = (RangeWidth - Range.W) / (LettersCount - 1); } } else { if (0 == CurRange || (CurLine == this.Lines.length - 1 && CurRange == this.Lines[CurLine].Ranges.length - 1)) {} else { if (CurRange == this.Lines[CurLine].Ranges.length - 1) { X = Range.X + RangeWidth - Range.W; } else { X = Range.X + (RangeWidth - Range.W) / 2; } } } } else { if (Range.Spaces > 0 && (CurLine != this.Lines.length - 1 || CurRange != this.Lines[CurLine].Ranges.length - 1)) { JustifySpace = (RangeWidth - Range.W) / Range.Spaces; } else { JustifySpace = 0; } } break; default: X = Range.X; break; } var SpacesCounter = this.Lines[CurLine].Ranges[CurRange].Spaces; this.Lines[CurLine].Ranges[CurRange].XVisible = X; this.Lines[CurLine].X = X - this.X; var LastW = 0; for (var ItemNum = StartPos; ItemNum <= EndPos; ItemNum++) { var Item = this.Content[ItemNum]; if (undefined != Item.CurPage) { if (CurLine < Item.CurLine) { CurLine = Item.CurLine; CurRange = Item.CurRange; JustifyWord = 0; JustifySpace = 0; Y = this.Pages[CurPage].Y + this.Lines[CurLine].Y; bFirstLineItem = true; Range = this.Lines[CurLine].Ranges[CurRange]; RangesCount = this.Lines[CurLine].Ranges.length; RangeWidth = Range.XEnd - Range.X; switch (ParaPr.Jc) { case align_Left: X = Range.X; break; case align_Right: X = Math.max(Range.X + RangeWidth - Range.W, Range.X); break; case align_Center: X = Math.max(Range.X + (RangeWidth - Range.W) / 2, Range.X); break; case align_Justify: X = Range.X; if (1 == Range.Words) { if (1 == RangesCount && this.Lines.length > 1) { var LettersCount = 0; var TempPos = ItemNum + 1; var LastW = 0; var __CurLine = CurLine; var __CurRange = CurRange; while (this.Content[TempPos].Type != para_End) { var __Item = this.Content[TempPos]; if (undefined != __Item.CurPage) { if (__CurLine != __Item.CurLine || __CurRange != __Item.Range) { break; } } if (para_Text == this.Content[TempPos].Type) { LettersCount++; LastW = this.Content[TempPos].Width; } TempPos++; } if (RangeWidth - Range.W <= 0.05 * RangeWidth && LettersCount > 1) { JustifyWord = (RangeWidth - Range.W) / (LettersCount - 1); } } else { if (0 == CurRange || (CurLine == this.Lines.length - 1 && CurRange == this.Lines[CurLine].Ranges.length - 1)) {} else { if (CurRange == this.Lines[CurLine].Ranges.length - 1) { X = Range.X + RangeWidth - Range.W; } else { X = Range.X + (RangeWidth - Range.W) / 2; } } } } else { if (Range.Spaces > 0 && (CurLine != this.Lines.length - 1 || CurRange != this.Lines[CurLine].Ranges.length - 1)) { JustifySpace = (RangeWidth - Range.W) / Range.Spaces; } else { JustifySpace = 0; } } break; default: X = Range.X; break; } SpacesCounter = this.Lines[CurLine].Ranges[CurRange].Spaces; this.Lines[CurLine].Ranges[CurRange].XVisible = X; this.Lines[CurLine].X = X - this.X; } else { if (CurRange < Item.CurRange) { CurRange = Item.CurRange; Range = this.Lines[CurLine].Ranges[CurRange]; RangeWidth = Range.XEnd - Range.X; switch (ParaPr.Jc) { case align_Left: X = Range.X; break; case align_Right: X = Math.max(Range.X + RangeWidth - Range.W, Range.X); break; case align_Center: X = Math.max(Range.X + (RangeWidth - Range.W) / 2, Range.X); break; case align_Justify: X = Range.X; if (1 == Range.Words) { if (1 == RangesCount && this.Lines.length > 1) { var LettersCount = 0; var TempPos = ItemNum + 1; var LastW = 0; var __CurLine = CurLine; var __CurRange = CurRange; while (this.Content[TempPos].Type != para_End) { var __Item = this.Content[TempPos]; if (undefined != __Item.CurPage) { if (__CurLine != __Item.CurLine || __CurRange != __Item.Range) { break; } } if (para_Text == this.Content[TempPos].Type) { LettersCount++; LastW = this.Content[TempPos].Width; } TempPos++; } if (RangeWidth - Range.W <= 0.05 * RangeWidth && LettersCount > 1) { JustifyWord = (RangeWidth - Range.W) / (LettersCount - 1); } } else { if (0 == CurRange || (CurLine == this.Lines.length - 1 && CurRange == this.Lines[CurLine].Ranges.length - 1)) {} else { if (CurRange == this.Lines[CurLine].Ranges.length - 1) { X = Range.X + RangeWidth - Range.W; } else { X = Range.X + (RangeWidth - Range.W) / 2; } } } } else { if (Range.Spaces > 0 && (CurLine != this.Lines.length - 1 || CurRange != this.Lines[CurLine].Ranges.length - 1)) { JustifySpace = (RangeWidth - Range.W) / Range.Spaces; } else { JustifySpace = 0; } } break; default: X = Range.X; break; } SpacesCounter = this.Lines[CurLine].Ranges[CurRange].Spaces; this.Lines[CurLine].Ranges[CurRange].XVisible = X; } } } if (ItemNum == this.CurPos.ContentPos) { this.CurPos.X = X; this.CurPos.Y = Y; this.CurPos.PagesPos = CurPage; } if (ItemNum == this.Numbering.Pos) { X += this.Numbering.WidthVisible; } switch (Item.Type) { case para_Text: bFirstLineItem = false; if (CurLine != this.Lines.length - 1 && JustifyWord > 0) { Item.WidthVisible = Item.Width + JustifyWord; } else { Item.WidthVisible = Item.Width; } X += Item.WidthVisible; LastW = Item.WidthVisible; break; case para_Space: if (!bFirstLineItem && CurLine != this.Lines.length - 1 && SpacesCounter > 0 && (ItemNum > this.Lines[CurLine].Ranges[CurRange].SpacePos)) { Item.WidthVisible = Item.Width + JustifySpace; SpacesCounter--; } else { Item.WidthVisible = Item.Width; } X += Item.WidthVisible; LastW = Item.WidthVisible; break; case para_Drawing: var DrawingObjects = this.Parent.DrawingObjects; var PageLimits = this.Parent.Get_PageLimits(this.PageNum + CurPage); var PageFields = this.Parent.Get_PageFields(this.PageNum + CurPage); var ColumnStartX = (0 === CurPage ? this.X_ColumnStart : this.Pages[CurPage].X); var ColumnEndX = (0 === CurPage ? this.X_ColumnEnd : this.Pages[CurPage].XLimit); var Top_Margin = Y_Top_Margin; var Bottom_Margin = Y_Bottom_Margin; var Page_H = Page_Height; if (true === this.Parent.Is_TableCellContent() && true == Item.Use_TextWrap()) { Top_Margin = 0; Bottom_Margin = 0; Page_H = 0; } if (true != Item.Use_TextWrap()) { PageFields.X = X_Left_Field; PageFields.Y = Y_Top_Field; PageFields.XLimit = X_Right_Field; PageFields.YLimit = Y_Bottom_Field; PageLimits.X = 0; PageLimits.Y = 0; PageLimits.XLimit = Page_Width; PageLimits.YLimit = Page_Height; } if (true === Item.Is_Inline() || true === this.Parent.Is_DrawingShape()) { Item.Update_Position(new CParagraphLayout(X, Y, this.Get_StartPage_Absolute() + CurPage, LastW, ColumnStartX, ColumnEndX, X_Left_Margin, X_Right_Margin, Page_Width, Top_Margin, Bottom_Margin, Page_H, PageFields.X, PageFields.Y, this.Pages[CurPage].Y + this.Lines[CurLine].Y - this.Lines[CurLine].Metrics.Ascent, this.Pages[CurPage].Y), PageLimits); Item.Reset_SavedPosition(); bFirstLineItem = false; X += Item.WidthVisible; LastW = Item.WidthVisible; } else { if (true === Item.Use_TextWrap()) { var LogicDocument = this.Parent; var LDRecalcInfo = this.Parent.RecalcInfo; var Page_abs = this.Get_StartPage_Absolute() + CurPage; if (true === LDRecalcInfo.Can_RecalcObject()) { Item.Update_Position(new CParagraphLayout(X, Y, this.Get_StartPage_Absolute() + CurPage, LastW, ColumnStartX, ColumnEndX, X_Left_Margin, X_Right_Margin, Page_Width, Top_Margin, Bottom_Margin, Page_H, PageFields.X, PageFields.Y, this.Pages[CurPage].Y + this.Lines[CurLine].Y - this.Lines[CurLine].Metrics.Ascent, this.Pages[CurPage].Y), PageLimits); LDRecalcInfo.Set_FlowObject(Item, 0, recalcresult_NextElement); return recalcresult_CurPage; } else { if (true === LDRecalcInfo.Check_FlowObject(Item)) { if (Item.PageNum === Page_abs) { LDRecalcInfo.Reset(); Item.Reset_SavedPosition(); } else { if (true === this.Parent.Is_TableCellContent()) { Item.Update_Position(new CParagraphLayout(X, Y, this.Get_StartPage_Absolute() + CurPage, LastW, ColumnStartX, ColumnEndX, X_Left_Margin, X_Right_Margin, Page_Width, Top_Margin, Bottom_Margin, Page_H, PageFields.X, PageFields.Y, this.Pages[CurPage].Y + this.Lines[CurLine].Y - this.Lines[CurLine].Metrics.Ascent, this.Pages[CurPage].Y), PageLimits); LDRecalcInfo.Set_FlowObject(Item, 0, recalcresult_NextElement); LDRecalcInfo.Set_PageBreakBefore(false); return recalcresult_CurPage; } else { LDRecalcInfo.Set_PageBreakBefore(true); DrawingObjects.removeById(Item.PageNum, Item.Get_Id()); return recalcresult_PrevPage; } } } else {} } continue; } else { Item.Update_Position(new CParagraphLayout(X, Y, this.Get_StartPage_Absolute() + CurPage, LastW, ColumnStartX, ColumnEndX, X_Left_Margin, X_Right_Margin, Page_Width, Top_Margin, Bottom_Margin, Page_H, PageFields.X, PageFields.Y, this.Pages[CurPage].Y + this.Lines[CurLine].Y - this.Lines[CurLine].Metrics.Ascent, this.Pages[CurPage].Y), PageLimits); Item.Reset_SavedPosition(); continue; } } break; case para_PageNum: bFirstLineItem = false; X += Item.WidthVisible; LastW = Item.WidthVisible; break; case para_Tab: X += Item.WidthVisible; break; case para_TextPr: break; case para_End: X += Item.Width; break; case para_NewLine: X += Item.WidthVisible; break; case para_CommentStart: var DocumentComments = editor.WordControl.m_oLogicDocument.Comments; var CommentId = Item.Id; var CommentY = this.Pages[CurPage].Y + this.Lines[CurLine].Top; var CommentH = this.Lines[CurLine].Bottom - this.Lines[CurLine].Top; DocumentComments.Set_StartInfo(CommentId, this.Get_StartPage_Absolute() + CurPage, X, CommentY, CommentH, this.Id); break; case para_CommentEnd: var DocumentComments = editor.WordControl.m_oLogicDocument.Comments; var CommentId = Item.Id; var CommentY = this.Pages[CurPage].Y + this.Lines[CurLine].Top; var CommentH = this.Lines[CurLine].Bottom - this.Lines[CurLine].Top; DocumentComments.Set_EndInfo(CommentId, this.Get_StartPage_Absolute() + CurPage, X, CommentY, CommentH, this.Id); break; } } return recalcresult_NextElement; }, Internal_Recalculate_CurPos: function (Pos, UpdateCurPos, UpdateTarget, ReturnTarget) { if (this.Lines.length <= 0) { return { X: 0, Y: 0, Height: 0, Internal: { Line: 0, Page: 0, Range: 0 } }; } var LinePos = this.Internal_Get_ParaPos_By_Pos(Pos); var CurLine = LinePos.Line; var CurRange = LinePos.Range; var CurPage = LinePos.Page; if (Pos === this.CurPos.ContentPos && -1 != this.CurPos.Line) { CurLine = this.CurPos.Line; } var X = this.Lines[CurLine].Ranges[CurRange].XVisible; var Y = this.Pages[CurPage].Y + this.Lines[CurLine].Y; if (Pos < this.Lines[CurLine].Ranges[CurRange].StartPos) { var _X = X; if (Pos < this.Numbering.Pos) { _X += this.Numbering.WidthVisible; } if (true === UpdateCurPos) { this.Internal_UpdateCurPos(_X, Y, Pos, CurLine, CurPage, UpdateTarget); } if (true === ReturnTarget) { return { X: _X, Y: Y, Height: 0, Internal: { Line: CurLine, Page: CurPage, Range: CurRange } }; } else { return { X: _X, Y: Y, PageNum: CurPage + this.Get_StartPage_Absolute(), Internal: { Line: CurLine, Page: CurPage, Range: CurRange } }; } } for (var ItemNum = this.Lines[CurLine].Ranges[CurRange].StartPos; ItemNum < this.Content.length; ItemNum++) { var Item = this.Content[ItemNum]; if (ItemNum === this.Numbering.Pos) { X += this.Numbering.WidthVisible; } if (Pos === ItemNum) { var _X = X; if (ItemNum < this.Numbering.Pos) { _X += this.Numbering.WidthVisible; } if (true === UpdateCurPos) { this.Internal_UpdateCurPos(_X, Y, ItemNum, CurLine, CurPage, UpdateTarget); } if (true === ReturnTarget) { var CurTextPr = this.Internal_CalculateTextPr(ItemNum); g_oTextMeasurer.SetTextPr(CurTextPr); g_oTextMeasurer.SetFontSlot(fontslot_ASCII, CurTextPr.Get_FontKoef()); var Height = g_oTextMeasurer.GetHeight(); var Descender = Math.abs(g_oTextMeasurer.GetDescender()); var Ascender = Height - Descender; var TargetY = Y - Ascender - CurTextPr.Position; switch (CurTextPr.VertAlign) { case vertalign_SubScript: TargetY -= CurTextPr.FontSize * g_dKoef_pt_to_mm * vertalign_Koef_Sub; break; case vertalign_SuperScript: TargetY -= CurTextPr.FontSize * g_dKoef_pt_to_mm * vertalign_Koef_Super; break; } return { X: _X, Y: TargetY, Height: Height, Internal: { Line: CurLine, Page: CurPage, Range: CurRange } }; } else { return { X: _X, Y: Y, PageNum: CurPage + this.Get_StartPage_Absolute(), Internal: { Line: CurLine, Page: CurPage, Range: CurRange } }; } } switch (Item.Type) { case para_Text: case para_Space: case para_PageNum: case para_Tab: case para_TextPr: case para_End: case para_NewLine: X += Item.WidthVisible; break; case para_Drawing: if (drawing_Inline != Item.DrawingType) { break; } X += Item.WidthVisible; break; } } if (true === ReturnTarget) { return { X: X, Y: TargetY, Height: Height, Internal: { Line: CurLine, Page: CurPage, Range: CurRange } }; } else { return { X: X, Y: Y, PageNum: CurPage + this.Get_StartPage_Absolute(), Internal: { Line: CurLine, Page: CurPage, Range: CurRange } }; } }, Internal_UpdateCurPos: function (X, Y, CurPos, CurLine, CurPage, UpdateTarget) { this.CurPos.X = X; this.CurPos.Y = Y; this.CurPos.PagesPos = CurPage; if (true === UpdateTarget) { var CurTextPr = this.Internal_CalculateTextPr(CurPos); g_oTextMeasurer.SetTextPr(CurTextPr); g_oTextMeasurer.SetFontSlot(fontslot_ASCII, CurTextPr.Get_FontKoef()); var Height = g_oTextMeasurer.GetHeight(); var Descender = Math.abs(g_oTextMeasurer.GetDescender()); var Ascender = Height - Descender; this.DrawingDocument.SetTargetSize(Height); this.DrawingDocument.SetTargetColor(CurTextPr.Color.r, CurTextPr.Color.g, CurTextPr.Color.b); var TargetY = Y - Ascender - CurTextPr.Position; switch (CurTextPr.VertAlign) { case vertalign_SubScript: TargetY -= CurTextPr.FontSize * g_dKoef_pt_to_mm * vertalign_Koef_Sub; break; case vertalign_SuperScript: TargetY -= CurTextPr.FontSize * g_dKoef_pt_to_mm * vertalign_Koef_Super; break; } var Page_Abs = this.Get_StartPage_Absolute() + CurPage; this.DrawingDocument.UpdateTarget(X, TargetY, Page_Abs); if (undefined != this.Get_FramePr()) { var __Y0 = TargetY, __Y1 = TargetY + Height; var ___Y0 = this.Pages[CurPage].Y + this.Lines[CurLine].Top; var ___Y1 = this.Pages[CurPage].Y + this.Lines[CurLine].Bottom; var __Y0 = Math.max(__Y0, ___Y0); var __Y1 = Math.min(__Y1, ___Y1); this.DrawingDocument.SetTargetSize(__Y1 - __Y0); this.DrawingDocument.UpdateTarget(X, __Y0, Page_Abs); } } }, Internal_CheckAddNumbering: function (CurPage, CurLine, CurRange) { var StartLine = this.Pages[CurPage].StartLine; var bRes = false; if (CurLine != StartLine) { bRes = false; } else { if (CurPage > 1) { bRes = false; } else { var StartPos = this.Lines[CurLine].Ranges[CurRange].StartPos; bRes = true; for (var Pos = 0; Pos < StartPos; Pos++) { var Item = this.Content[Pos]; if (true === Item.Can_AddNumbering()) { bRes = false; break; } } } } if (true === bRes) { this.Numbering.Pos = -1; } return bRes; }, Internal_CompareBrd: function (Pr1, Pr2) { var Left_1 = Math.min(Pr1.Ind.Left, Pr1.Ind.Left + Pr1.Ind.FirstLine); var Right_1 = Pr1.Ind.Right; var Left_2 = Math.min(Pr2.Ind.Left, Pr2.Ind.Left + Pr2.Ind.FirstLine); var Right_2 = Pr2.Ind.Right; if (Math.abs(Left_1 - Left_2) > 0.001 || Math.abs(Right_1 - Right_2) > 0.001) { return false; } if (false === Pr1.Brd.Top.Compare(Pr2.Brd.Top) || false === Pr1.Brd.Bottom.Compare(Pr2.Brd.Bottom) || false === Pr1.Brd.Left.Compare(Pr2.Brd.Left) || false === Pr1.Brd.Right.Compare(Pr2.Brd.Right) || false === Pr1.Brd.Between.Compare(Pr2.Brd.Between)) { return false; } return true; }, Internal_Is_NullBorders: function (Borders) { if (border_None != Borders.Top.Value || border_None != Borders.Bottom.Value || border_None != Borders.Left.Value || border_None != Borders.Right.Value || border_None != Borders.Between.Value) { return false; } return true; }, Internal_Check_Ranges: function (CurLine, CurRange) { var Ranges = this.Lines[CurLine].Ranges; var RangesCount = Ranges.length; if (RangesCount <= 1) { return true; } else { if (2 === RangesCount) { var Range0 = Ranges[0]; var Range1 = Ranges[1]; if (Range0.XEnd - Range0.X < 0.001 && 1 === CurRange && Range1.XEnd - Range1.X >= 0.001) { return true; } else { if (Range1.XEnd - Range1.X < 0.001 && 0 === CurRange && Range0.XEnd - Range0.X >= 0.001) { return true; } else { return false; } } } else { if (3 === RangesCount && 1 === CurRange) { var Range0 = Ranges[0]; var Range2 = Ranges[2]; if (Range0.XEnd - Range0.X < 0.001 && Range2.XEnd - Range2.X < 0.001) { return true; } else { return false; } } else { return false; } } } }, Internal_Get_NumberingTextPr: function () { var Pr = this.Get_CompiledPr(); var ParaPr = Pr.ParaPr; var NumPr = ParaPr.NumPr; if (undefined === NumPr || undefined === NumPr.NumId || 0 === NumPr.NumId || "0" === NumPr.NumId) { return new CTextPr(); } var Numbering = this.Parent.Get_Numbering(); var NumLvl = Numbering.Get_AbstractNum(NumPr.NumId).Lvl[NumPr.Lvl]; var NumTextPr = this.Get_CompiledPr2(false).TextPr.Copy(); NumTextPr.Merge(this.TextPr.Value); NumTextPr.Merge(NumLvl.TextPr); NumTextPr.FontFamily.Name = NumTextPr.RFonts.Ascii.Name; return NumTextPr; }, Internal_Get_ClearPos: function (Pos) { var Counter = 0; for (var Index = 0; Index < Math.min(Pos, this.Content.length - 1); Index++) { if (false === this.Content[Index].Is_RealContent() || para_Numbering === this.Content[Index].Type) { Counter++; } } return Pos - Counter; }, Internal_Get_RealPos: function (Pos) { var Counter = Pos; for (var Index = 0; Index <= Math.min(Counter, this.Content.length - 1); Index++) { if (false === this.Content[Index].Is_RealContent() || para_Numbering === this.Content[Index].Type) { Counter++; } } return Counter; }, Internal_Get_ClearContentLength: function () { var Len = this.Content.length; var ClearLen = Len; for (var Index = 0; Index < Len; Index++) { var Item = this.Content[Index]; if (false === Item.Is_RealContent()) { ClearLen--; } } return ClearLen; }, Recalculate_Fast: function () {}, Start_FromNewPage: function () { this.Pages.length = 1; this.Pages[0].Set_EndLine(-1); this.Lines[-1] = new CParaLine(0); this.Lines[-1].Set_EndPos(-1, this); }, Reset_RecalculateCache: function () {}, Recalculate_Page: function (_PageIndex) { this.CurPos.Line = -1; var PageIndex = _PageIndex - this.PageNum; var CurPage, StartPos, CurLine; if (0 === PageIndex) { CurPage = 0; StartPos = 0; CurLine = 0; } else { CurPage = PageIndex; if (CurPage > 0) { CurLine = this.Pages[CurPage - 1].EndLine + 1; } else { CurLine = 0; } if (CurLine > 0) { StartPos = this.Lines[CurLine - 1].EndPos + 1; } else { StartPos = 0; } } if (1 === CurPage && this.Pages[0].EndLine < 0 && this.Parent instanceof CDocument && false === this.Get_CompiledPr2(false).ParaPr.PageBreakBefore) { var Curr = this.Get_DocumentPrev(); while (null != Curr && type_Paragraph === Curr.GetType()) { var CurrKeepNext = Curr.Get_CompiledPr2(false).ParaPr.KeepNext; if ((true === CurrKeepNext && Curr.Pages.length > 1) || false === CurrKeepNext) { break; } else { var Prev = Curr.Get_DocumentPrev(); if (null === Prev || type_Paragraph != Prev.GetType()) { break; } var PrevKeepNext = Prev.Get_CompiledPr2(false).ParaPr.KeepNext; if (false === PrevKeepNext) { if (true === this.Parent.RecalcInfo.Can_RecalcObject()) { this.Parent.RecalcInfo.Set_KeepNext(Curr); return recalcresult_PrevPage; } else { break; } } else { Curr = Prev; } } } } this.FontMap.NeedRecalc = true; this.Internal_Recalculate_0(); this.Internal_CheckSpelling(); var RecalcResult_1 = this.Internal_Recalculate_1_(StartPos, CurPage, CurLine); var RecalcResult_2 = this.Internal_Recalculate_2_(StartPos, CurPage, CurLine); if (true === this.Parent.RecalcInfo.WidowControlReset) { this.Parent.RecalcInfo.Reset(); } var RecalcResult = (recalcresult_NextElement != RecalcResult_2 ? RecalcResult_2 : RecalcResult_1); return RecalcResult; }, RecalculateCurPos: function () { this.Internal_Recalculate_CurPos(this.CurPos.ContentPos, true, true, false); }, Recalculate_MinMaxContentWidth: function () { this.Internal_Recalculate_0(); var bWord = false; var nWordLen = 0; var nSpaceLen = 0; var nMinWidth = 0; var nMaxWidth = 0; var nCurMaxWidth = 0; var Count = this.Content.length; for (var Pos = 0; Pos < Count; Pos++) { var Item = this.Content[Pos]; switch (Item.Type) { case para_Text: if (false === bWord) { bWord = true; nWordLen = Item.Width; } else { nWordLen += Item.Width; if (true === Item.SpaceAfter) { if (nMinWidth < nWordLen) { nMinWidth = nWordLen; } bWord = false; nWordLen = 0; } } if (nSpaceLen > 0) { nCurMaxWidth += nSpaceLen; nSpaceLen = 0; } nCurMaxWidth += Item.Width; break; case para_Space: if (true === bWord) { if (nMinWidth < nWordLen) { nMinWidth = nWordLen; } bWord = false; nWordLen = 0; } nSpaceLen += Item.Width; break; case para_Drawing: if (true === bWord) { if (nMinWidth < nWordLen) { nMinWidth = nWordLen; } bWord = false; nWordLen = 0; } if ((true === Item.Is_Inline() || true === this.Parent.Is_DrawingShape()) && Item.Width > nMinWidth) { nMinWidth = Item.Width; } if (nSpaceLen > 0) { nCurMaxWidth += nSpaceLen; nSpaceLen = 0; } nCurMaxWidth += Item.Width; break; case para_PageNum: if (true === bWord) { if (nMinWidth < nWordLen) { nMinWidth = nWordLen; } bWord = false; nWordLen = 0; } if (Item.Width > nMinWidth) { nMinWidth = Item.Width; } if (nSpaceLen > 0) { nCurMaxWidth += nSpaceLen; nSpaceLen = 0; } nCurMaxWidth += Item.Width; break; case para_Tab: nWordLen += Item.Width; if (nMinWidth < nWordLen) { nMinWidth = nWordLen; } bWord = false; nWordLen = 0; if (nSpaceLen > 0) { nCurMaxWidth += nSpaceLen; nSpaceLen = 0; } nCurMaxWidth += Item.Width; break; case para_NewLine: if (nMinWidth < nWordLen) { nMinWidth = nWordLen; } bWord = false; nWordLen = 0; nSpaceLen = 0; if (nCurMaxWidth > nMaxWidth) { nMaxWidth = nCurMaxWidth; } nCurMaxWidth = 0; break; case para_End: if (nMinWidth < nWordLen) { nMinWidth = nWordLen; } if (nCurMaxWidth > nMaxWidth) { nMaxWidth = nCurMaxWidth; } break; } } return { Min: (nMinWidth > 0 ? nMinWidth + 0.001 : 0), Max: (nMaxWidth > 0 ? nMaxWidth + 0.001 : 0) }; }, Draw: function (PageNum, pGraphics) { var CurPage = PageNum - this.PageNum; if (this.Pages[CurPage].EndLine < 0) { return; } var Pr = this.Get_CompiledPr(); var FramePr = this.Get_FramePr(); if (undefined != FramePr && this.Parent instanceof CDocument) { var PixelError = editor.WordControl.m_oLogicDocument.DrawingDocument.GetMMPerDot(1); var BoundsL = this.CalculatedFrame.L2 - PixelError; var BoundsT = this.CalculatedFrame.T2 - PixelError; var BoundsH = this.CalculatedFrame.H2 + 2 * PixelError; var BoundsW = this.CalculatedFrame.W2 + 2 * PixelError; pGraphics.SaveGrState(); pGraphics.AddClipRect(BoundsL, BoundsT, BoundsW, BoundsH); } this.Internal_Draw_1(CurPage, pGraphics, Pr); this.Internal_Draw_2(CurPage, pGraphics, Pr); this.Internal_Draw_3(CurPage, pGraphics, Pr); this.Internal_Draw_4(CurPage, pGraphics, Pr); this.Internal_Draw_5(CurPage, pGraphics, Pr); this.Internal_Draw_6(CurPage, pGraphics, Pr); if (undefined != FramePr && this.Parent instanceof CDocument) { pGraphics.RestoreGrState(); } }, Internal_Draw_1: function (CurPage, pGraphics, Pr) { if (locktype_None != this.Lock.Get_Type()) { if ((CurPage > 0 || false === this.Is_StartFromNewPage() || null === this.Get_DocumentPrev())) { var X_min = -1 + Math.min(this.Pages[CurPage].X, this.Pages[CurPage].X + Pr.ParaPr.Ind.Left, this.Pages[CurPage].X + Pr.ParaPr.Ind.Left + Pr.ParaPr.Ind.FirstLine); var Y_top = this.Pages[CurPage].Bounds.Top; var Y_bottom = this.Pages[CurPage].Bounds.Bottom; if (true === editor.isCoMarksDraw || locktype_Mine != this.Lock.Get_Type()) { pGraphics.DrawLockParagraph(this.Lock.Get_Type(), X_min, Y_top, Y_bottom); } } } }, Internal_Draw_2: function (CurPage, pGraphics, Pr) { if (true === editor.ShowParaMarks && ((0 === CurPage && (this.Pages.length <= 1 || this.Pages[1].FirstLine > 0)) || (1 === CurPage && this.Pages.length > 1 && this.Pages[1].FirstLine === 0)) && (true === Pr.ParaPr.KeepNext || true === Pr.ParaPr.KeepLines || true === Pr.ParaPr.PageBreakBefore)) { var SpecFont = { FontFamily: { Name: "Arial", Index: -1 }, FontSize: 12, Italic: false, Bold: false }; var SpecSym = String.fromCharCode(9642); pGraphics.SetFont(SpecFont); pGraphics.b_color1(0, 0, 0, 255); var CurLine = this.Pages[CurPage].FirstLine; var CurRange = 0; var X = this.Lines[CurLine].Ranges[CurRange].XVisible; var Y = this.Pages[CurPage].Y + this.Lines[CurLine].Y; var SpecW = 2.5; var SpecX = Math.min(X, this.X) - SpecW; pGraphics.FillText(SpecX, Y, SpecSym); } }, Internal_Draw_3: function (CurPage, pGraphics, Pr) { var _Page = this.Pages[CurPage]; var DocumentComments = editor.WordControl.m_oLogicDocument.Comments; var bDrawComments = (DocumentComments.Is_Use() && true != editor.isViewMode); var CommentsFlag = DocumentComments.Check_CurrentDraw(); var CollaborativeChanges = 0; var StartPagePos = this.Lines[_Page.StartLine].StartPos; var DrawSearch = editor.WordControl.m_oLogicDocument.SearchEngine.Selection; if (undefined === pGraphics.RENDERER_PDF_FLAG) { var Pos = 0; while (Pos < StartPagePos) { Item = this.Content[Pos]; if (para_CollaborativeChangesEnd == Item.Type) { CollaborativeChanges--; } else { if (para_CollaborativeChangesStart == Item.Type) { CollaborativeChanges++; } } Pos++; } } var CurTextPr = _Page.TextPr; var StartLine = _Page.StartLine; var EndLine = _Page.EndLine; var aHigh = new CParaDrawingRangeLines(); var aColl = new CParaDrawingRangeLines(); var aFind = new CParaDrawingRangeLines(); var aComm = new CParaDrawingRangeLines(); for (var CurLine = StartLine; CurLine <= EndLine; CurLine++) { var _Line = this.Lines[CurLine]; var _LineMetrics = _Line.Metrics; var EndLinePos = _Line.EndPos; var Y0 = (_Page.Y + _Line.Y - _LineMetrics.Ascent); var Y1 = (_Page.Y + _Line.Y + _LineMetrics.Descent); if (_LineMetrics.LineGap < 0) { Y1 += _LineMetrics.LineGap; } var RangesCount = _Line.Ranges.length; for (var CurRange = 0; CurRange < RangesCount; CurRange++) { var _Range = _Line.Ranges[CurRange]; aHigh.Clear(); aColl.Clear(); aFind.Clear(); aComm.Clear(); var X = _Range.XVisible; var StartPos = _Range.StartPos; var EndPos = (CurRange === RangesCount - 1 ? EndLinePos : _Line.Ranges[CurRange + 1].StartPos - 1); for (var Pos = StartPos; Pos <= EndPos; Pos++) { var Item = this.Content[Pos]; var bSearchResult = false; if (true === DrawSearch) { for (var SId in this.SearchResults) { var SResult = this.SearchResults[SId]; if (Pos >= SResult.StartPos && Pos < SResult.EndPos) { bSearchResult = true; break; } } } if (Pos === this.Numbering.Pos) { var NumberingType = this.Numbering.Type; var NumberingItem = this.Numbering; if (para_Numbering === NumberingType) { var NumPr = Pr.ParaPr.NumPr; if (undefined === NumPr || undefined === NumPr.NumId || 0 === NumPr.NumId || "0" === NumPr.NumId) { break; } var Numbering = this.Parent.Get_Numbering(); var NumLvl = Numbering.Get_AbstractNum(NumPr.NumId).Lvl[NumPr.Lvl]; var NumJc = NumLvl.Jc; var NumTextPr = this.Get_CompiledPr2(false).TextPr.Copy(); NumTextPr.Merge(this.TextPr.Value); NumTextPr.Merge(NumLvl.TextPr); var X_start = X; if (align_Right === NumJc) { X_start = X - NumberingItem.WidthNum; } else { if (align_Center === NumJc) { X_start = X - NumberingItem.WidthNum / 2; } } if (highlight_None != NumTextPr.HighLight) { aHigh.Add(Y0, Y1, X_start, X_start + NumberingItem.WidthNum + NumberingItem.WidthSuff, 0, NumTextPr.HighLight.r, NumTextPr.HighLight.g, NumTextPr.HighLight.b); } if (CollaborativeChanges > 0) { aColl.Add(Y0, Y1, X_start, X_start + NumberingItem.WidthNum + NumberingItem.WidthSuff, 0, 0, 0, 0); } X += NumberingItem.WidthVisible; } else { if (para_PresentationNumbering === NumberingType) { X += NumberingItem.WidthVisible; } } } switch (Item.Type) { case para_PageNum: case para_Drawing: case para_Tab: case para_Text: if (para_Drawing === Item.Type && drawing_Anchor === Item.DrawingType) { break; } if (CommentsFlag != comments_NoComment && true === bDrawComments) { aComm.Add(Y0, Y1, X, X + Item.WidthVisible, 0, 0, 0, 0, { Active: CommentsFlag === comments_ActiveComment ? true : false }); } else { if (highlight_None != CurTextPr.HighLight) { aHigh.Add(Y0, Y1, X, X + Item.WidthVisible, 0, CurTextPr.HighLight.r, CurTextPr.HighLight.g, CurTextPr.HighLight.b); } } if (true === bSearchResult) { aFind.Add(Y0, Y1, X, X + Item.WidthVisible, 0, 0, 0, 0); } else { if (CollaborativeChanges > 0) { aColl.Add(Y0, Y1, X, X + Item.WidthVisible, 0, 0, 0, 0); } } if (para_Drawing != Item.Type || drawing_Anchor != Item.DrawingType) { X += Item.WidthVisible; } break; case para_Space: if (Pos >= _Range.StartPos2 && Pos <= _Range.EndPos2) { if (CommentsFlag != comments_NoComment && bDrawComments) { aComm.Add(Y0, Y1, X, X + Item.WidthVisible, 0, 0, 0, 0, { Active: CommentsFlag === comments_ActiveComment ? true : false }); } else { if (highlight_None != CurTextPr.HighLight) { aHigh.Add(Y0, Y1, X, X + Item.WidthVisible, 0, CurTextPr.HighLight.r, CurTextPr.HighLight.g, CurTextPr.HighLight.b); } } } if (true === bSearchResult) { aFind.Add(Y0, Y1, X, X + Item.WidthVisible, 0, 0, 0, 0); } else { if (CollaborativeChanges > 0) { aColl.Add(Y0, Y1, X, X + Item.WidthVisible, 0, 0, 0, 0); } } X += Item.WidthVisible; break; case para_TextPr: CurTextPr = Item.CalcValue; break; case para_End: if (CollaborativeChanges > 0) { aColl.Add(Y0, Y1, X, X + Item.WidthVisible, 0, 0, 0, 0); } X += Item.Width; break; case para_NewLine: X += Item.WidthVisible; break; case para_CollaborativeChangesStart: CollaborativeChanges++; break; case para_CollaborativeChangesEnd: CollaborativeChanges--; break; case para_CommentStart: if (undefined === pGraphics.RENDERER_PDF_FLAG) { var CommentId = Item.Id; var CommentY = this.Pages[CurPage].Y + this.Lines[CurLine].Top; var CommentH = this.Lines[CurLine].Bottom - this.Lines[CurLine].Top; DocumentComments.Set_StartInfo(CommentId, this.Get_StartPage_Absolute() + CurPage, X, CommentY, CommentH, this.Id); DocumentComments.Add_CurrentDraw(CommentId); CommentsFlag = DocumentComments.Check_CurrentDraw(); } break; case para_CommentEnd: if (undefined === pGraphics.RENDERER_PDF_FLAG) { var CommentId = Item.Id; var CommentY = this.Pages[CurPage].Y + this.Lines[CurLine].Top; var CommentH = this.Lines[CurLine].Bottom - this.Lines[CurLine].Top; DocumentComments.Set_EndInfo(CommentId, this.Get_StartPage_Absolute() + CurPage, X, CommentY, CommentH, this.Id); DocumentComments.Remove_CurrentDraw(CommentId); CommentsFlag = DocumentComments.Check_CurrentDraw(); } break; } } if ((_Range.W > 0.001 || true === this.IsEmpty()) && ((this.Pages.length - 1 === CurPage) || (CurLine < this.Pages[CurPage + 1].FirstLine)) && shd_Clear === Pr.ParaPr.Shd.Value) { var TempX0 = this.Lines[CurLine].Ranges[CurRange].X; if (0 === CurRange) { TempX0 = Math.min(TempX0, this.Pages[CurPage].X + Pr.ParaPr.Ind.Left, this.Pages[CurPage].X + Pr.ParaPr.Ind.Left + Pr.ParaPr.Ind.FirstLine); } var TempX1 = this.Lines[CurLine].Ranges[CurRange].XEnd; var TempTop = this.Lines[CurLine].Top; var TempBottom = this.Lines[CurLine].Bottom; if (0 === CurLine) { var PrevEl = this.Get_DocumentPrev(); var PrevPr = null; var PrevLeft = 0; var PrevRight = 0; var CurLeft = Math.min(Pr.ParaPr.Ind.Left, Pr.ParaPr.Ind.Left + Pr.ParaPr.Ind.FirstLine); var CurRight = Pr.ParaPr.Ind.Right; if (null != PrevEl && type_Paragraph === PrevEl.GetType()) { PrevPr = PrevEl.Get_CompiledPr2(); PrevLeft = Math.min(PrevPr.ParaPr.Ind.Left, PrevPr.ParaPr.Ind.Left + PrevPr.ParaPr.Ind.FirstLine); PrevRight = PrevPr.ParaPr.Ind.Right; } if (true === Pr.ParaPr.Brd.First) { if (null === PrevEl || true === this.Is_StartFromNewPage() || null === PrevPr || shd_Nil === PrevPr.ParaPr.Shd.Value || PrevLeft != CurLeft || CurRight != PrevRight || false === this.Internal_Is_NullBorders(PrevPr.ParaPr.Brd) || false === this.Internal_Is_NullBorders(Pr.ParaPr.Brd)) { if (false === this.Is_StartFromNewPage() || null === PrevEl) { TempTop += Pr.ParaPr.Spacing.Before; } } } } if (this.Lines.length - 1 === CurLine) { var NextEl = this.Get_DocumentNext(); var NextPr = null; var NextLeft = 0; var NextRight = 0; var CurLeft = Math.min(Pr.ParaPr.Ind.Left, Pr.ParaPr.Ind.Left + Pr.ParaPr.Ind.FirstLine); var CurRight = Pr.ParaPr.Ind.Right; if (null != NextEl && type_Paragraph === NextEl.GetType()) { NextPr = NextEl.Get_CompiledPr2(); NextLeft = Math.min(NextPr.ParaPr.Ind.Left, NextPr.ParaPr.Ind.Left + NextPr.ParaPr.Ind.FirstLine); NextRight = NextPr.ParaPr.Ind.Right; } if (null != NextEl && type_Paragraph === NextEl.GetType() && true === NextEl.Is_StartFromNewPage()) { TempBottom = this.Lines[CurLine].Y + this.Lines[CurLine].Metrics.Descent + this.Lines[CurLine].Metrics.LineGap; } else { if (true === Pr.ParaPr.Brd.Last) { if (null === NextEl || true === NextEl.Is_StartFromNewPage() || null === NextPr || shd_Nil === NextPr.ParaPr.Shd.Value || NextLeft != CurLeft || CurRight != NextRight || false === this.Internal_Is_NullBorders(NextPr.ParaPr.Brd) || false === this.Internal_Is_NullBorders(Pr.ParaPr.Brd)) { TempBottom -= Pr.ParaPr.Spacing.After; } } } } if (0 === CurRange) { if (Pr.ParaPr.Brd.Left.Value === border_Single) { TempX0 -= 1 + Pr.ParaPr.Brd.Left.Size + Pr.ParaPr.Brd.Left.Space; } else { TempX0 -= 1; } } if (this.Lines[CurLine].Ranges.length - 1 === CurRange) { if (Pr.ParaPr.Brd.Right.Value === border_Single) { TempX1 += 1 + Pr.ParaPr.Brd.Right.Size + Pr.ParaPr.Brd.Right.Space; } else { TempX1 += 1; } } pGraphics.b_color1(Pr.ParaPr.Shd.Color.r, Pr.ParaPr.Shd.Color.g, Pr.ParaPr.Shd.Color.b, 255); pGraphics.rect(TempX0, this.Pages[CurPage].Y + TempTop, TempX1 - TempX0, TempBottom - TempTop); pGraphics.df(); } var Element = aHigh.Get_Next(); while (null != Element) { pGraphics.b_color1(Element.r, Element.g, Element.b, 255); pGraphics.rect(Element.x0, Element.y0, Element.x1 - Element.x0, Element.y1 - Element.y0); pGraphics.df(); Element = aHigh.Get_Next(); } Element = aComm.Get_Next(); while (null != Element) { if (Element.Additional.Active === true) { pGraphics.b_color1(240, 200, 120, 255); } else { pGraphics.b_color1(248, 231, 195, 255); } pGraphics.rect(Element.x0, Element.y0, Element.x1 - Element.x0, Element.y1 - Element.y0); pGraphics.df(); Element = aComm.Get_Next(); } Element = aColl.Get_Next(); while (null != Element) { pGraphics.drawCollaborativeChanges(Element.x0, Element.y0, Element.x1 - Element.x0, Element.y1 - Element.y0); Element = aColl.Get_Next(); } Element = aFind.Get_Next(); while (null != Element) { pGraphics.drawSearchResult(Element.x0, Element.y0, Element.x1 - Element.x0, Element.y1 - Element.y0); Element = aFind.Get_Next(); } } if ((this.Pages.length - 1 === CurPage) || (CurLine < this.Pages[CurPage + 1].FirstLine)) { var TempX0 = Math.min(this.Lines[CurLine].Ranges[0].X, this.Pages[CurPage].X + Pr.ParaPr.Ind.Left, this.Pages[CurPage].X + Pr.ParaPr.Ind.Left + Pr.ParaPr.Ind.FirstLine); var TempX1 = this.Lines[CurLine].Ranges[this.Lines[CurLine].Ranges.length - 1].XEnd; if (true === this.Is_LineDropCap()) { TempX1 = TempX0 + this.Get_LineDropCapWidth(); } var TempTop = this.Lines[CurLine].Top; var TempBottom = this.Lines[CurLine].Bottom; if (0 === CurLine) { if (true === Pr.ParaPr.Brd.First && (Pr.ParaPr.Brd.Top.Value === border_Single || shd_Clear === Pr.ParaPr.Shd.Value)) { if (false === this.Is_StartFromNewPage() || null === this.Get_DocumentPrev()) { TempTop += Pr.ParaPr.Spacing.Before; } } } if (this.Lines.length - 1 === CurLine) { var NextEl = this.Get_DocumentNext(); if (null != NextEl && type_Paragraph === NextEl.GetType() && true === NextEl.Is_StartFromNewPage()) { TempBottom = this.Lines[CurLine].Y + this.Lines[CurLine].Metrics.Descent + this.Lines[CurLine].Metrics.LineGap; } else { if (true === Pr.ParaPr.Brd.Last && (Pr.ParaPr.Brd.Bottom.Value === border_Single || shd_Clear === Pr.ParaPr.Shd.Value)) { TempBottom -= Pr.ParaPr.Spacing.After; } } } if (Pr.ParaPr.Brd.Right.Value === border_Single) { pGraphics.p_color(Pr.ParaPr.Brd.Right.Color.r, Pr.ParaPr.Brd.Right.Color.g, Pr.ParaPr.Brd.Right.Color.b, 255); pGraphics.drawVerLine(c_oAscLineDrawingRule.Right, TempX1 + 1 + Pr.ParaPr.Brd.Right.Size + Pr.ParaPr.Brd.Right.Space, this.Pages[CurPage].Y + TempTop, this.Pages[CurPage].Y + TempBottom, Pr.ParaPr.Brd.Right.Size); } if (Pr.ParaPr.Brd.Left.Value === border_Single) { pGraphics.p_color(Pr.ParaPr.Brd.Left.Color.r, Pr.ParaPr.Brd.Left.Color.g, Pr.ParaPr.Brd.Left.Color.b, 255); pGraphics.drawVerLine(c_oAscLineDrawingRule.Left, TempX0 - 1 - Pr.ParaPr.Brd.Left.Size - Pr.ParaPr.Brd.Left.Space, this.Pages[CurPage].Y + TempTop, this.Pages[CurPage].Y + TempBottom, Pr.ParaPr.Brd.Left.Size); } } } }, Internal_Draw_4: function (CurPage, pGraphics, Pr) { var StartPagePos = this.Lines[this.Pages[CurPage].StartLine].StartPos; var HyperPos = this.Internal_FindBackward(StartPagePos, [para_HyperlinkStart, para_HyperlinkEnd]); var bVisitedHyperlink = false; if (true === HyperPos.Found && para_HyperlinkStart === HyperPos.Type) { bVisitedHyperlink = this.Content[HyperPos.LetterPos].Get_Visited(); } var CurTextPr = this.Pages[CurPage].TextPr; pGraphics.SetTextPr(CurTextPr); if (true === bVisitedHyperlink) { pGraphics.b_color1(128, 0, 151, 255); } else { pGraphics.b_color1(CurTextPr.Color.r, CurTextPr.Color.g, CurTextPr.Color.b, 255); } var StartLine = this.Pages[CurPage].StartLine; var EndLine = this.Pages[CurPage].EndLine; for (var CurLine = StartLine; CurLine <= EndLine; CurLine++) { var StartPos = this.Lines[CurLine].StartPos; var EndPos = this.Lines[CurLine].EndPos; var bFirstLineItem = true; var CurRange = 0; var Y = this.Pages[CurPage].Y + this.Lines[CurLine].Y; var X = this.Lines[CurLine].Ranges[CurRange].XVisible; var bEnd = false; for (var Pos = StartPos; Pos <= EndPos; Pos++) { var Item = this.Content[Pos]; if (undefined != Item.CurRange) { if (Item.CurRange > CurRange) { CurRange = Item.CurRange; X = this.Lines[CurLine].Ranges[CurRange].XVisible; } } var TempY = Y; switch (CurTextPr.VertAlign) { case vertalign_SubScript: Y -= vertalign_Koef_Sub * CurTextPr.FontSize * g_dKoef_pt_to_mm; break; case vertalign_SuperScript: Y -= vertalign_Koef_Super * CurTextPr.FontSize * g_dKoef_pt_to_mm; break; } if (Pos === this.Numbering.Pos) { var NumberingItem = this.Numbering; if (para_Numbering === this.Numbering.Type) { var NumPr = Pr.ParaPr.NumPr; if (undefined === NumPr || undefined === NumPr.NumId || 0 === NumPr.NumId || "0" === NumPr.NumId) { break; } var Numbering = this.Parent.Get_Numbering(); var NumLvl = Numbering.Get_AbstractNum(NumPr.NumId).Lvl[NumPr.Lvl]; var NumSuff = NumLvl.Suff; var NumJc = NumLvl.Jc; var NumTextPr = this.Get_CompiledPr2(false).TextPr.Copy(); var TextPr_temp = this.TextPr.Value.Copy(); TextPr_temp.Underline = undefined; NumTextPr.Merge(TextPr_temp); NumTextPr.Merge(NumLvl.TextPr); var X_start = X; if (align_Right === NumJc) { X_start = X - NumberingItem.WidthNum; } else { if (align_Center === NumJc) { X_start = X - NumberingItem.WidthNum / 2; } } pGraphics.b_color1(NumTextPr.Color.r, NumTextPr.Color.g, NumTextPr.Color.b, 255); switch (NumJc) { case align_Right: NumberingItem.Draw(X - NumberingItem.WidthNum, Y, pGraphics, Numbering, NumTextPr, NumPr); break; case align_Center: NumberingItem.Draw(X - NumberingItem.WidthNum / 2, Y, pGraphics, Numbering, NumTextPr, NumPr); break; case align_Left: default: NumberingItem.Draw(X, Y, pGraphics, Numbering, NumTextPr, NumPr); break; } if (true === editor.ShowParaMarks && numbering_suff_Tab === NumSuff) { var TempWidth = NumberingItem.WidthSuff; var TempRealWidth = 3.143; var X1 = X; switch (NumJc) { case align_Right: break; case align_Center: X1 += NumberingItem.WidthNum / 2; break; case align_Left: default: X1 += NumberingItem.WidthNum; break; } var X0 = TempWidth / 2 - TempRealWidth / 2; pGraphics.SetFont({ FontFamily: { Name: "ASCW3", Index: -1 }, FontSize: 10, Italic: false, Bold: false }); if (X0 > 0) { pGraphics.FillText2(X1 + X0, Y, String.fromCharCode(tab_Symbol), 0, TempWidth); } else { pGraphics.FillText2(X1, Y, String.fromCharCode(tab_Symbol), TempRealWidth - TempWidth, TempWidth); } } if (true === NumTextPr.Strikeout || true === NumTextPr.Underline) { pGraphics.p_color(NumTextPr.Color.r, NumTextPr.Color.g, NumTextPr.Color.b, 255); } if (true === NumTextPr.Strikeout) { pGraphics.drawHorLine(0, (Y - NumTextPr.FontSize * g_dKoef_pt_to_mm * 0.27), X_start, X_start + NumberingItem.WidthNum, (NumTextPr.FontSize / 18) * g_dKoef_pt_to_mm); } if (true === NumTextPr.Underline) { pGraphics.drawHorLine(0, (Y + this.Lines[CurLine].Metrics.TextDescent * 0.4), X_start, X_start + NumberingItem.WidthNum, (NumTextPr.FontSize / 18) * g_dKoef_pt_to_mm); } X += NumberingItem.WidthVisible; pGraphics.SetTextPr(CurTextPr); if (true === bVisitedHyperlink) { pGraphics.b_color1(128, 0, 151, 255); } else { pGraphics.b_color1(CurTextPr.Color.r, CurTextPr.Color.g, CurTextPr.Color.b, 255); } } else { if (para_PresentationNumbering === this.Numbering.Type) { if (true != this.IsEmpty()) { var FirstTextPr = this.Internal_CalculateTextPr(this.Internal_GetStartPos()); if (Pr.ParaPr.Ind.FirstLine < 0) { NumberingItem.Draw(X, Y, pGraphics, FirstTextPr); } else { NumberingItem.Draw(this.X + Pr.ParaPr.Ind.Left, Y, pGraphics, FirstTextPr); } } X += NumberingItem.WidthVisible; } } } switch (Item.Type) { case para_PageNum: case para_Drawing: case para_Tab: case para_Text: if (para_Drawing != Item.Type || drawing_Anchor != Item.DrawingType) { bFirstLineItem = false; if (para_PageNum != Item.Type) { Item.Draw(X, Y - Item.YOffset, pGraphics); } else { Item.Draw(X, Y - Item.YOffset, pGraphics, this.Get_StartPage_Absolute() + CurPage, Pr.ParaPr.Jc); } X += Item.WidthVisible; } if (para_Drawing === Item.Type && drawing_Inline === Item.DrawingType) { pGraphics.SetTextPr(CurTextPr); pGraphics.b_color1(CurTextPr.Color.r, CurTextPr.Color.g, CurTextPr.Color.b, 255); pGraphics.p_color(CurTextPr.Color.r, CurTextPr.Color.g, CurTextPr.Color.b, 255); } break; case para_Space: Item.Draw(X, Y - Item.YOffset, pGraphics); X += Item.WidthVisible; break; case para_TextPr: CurTextPr = Item.CalcValue; pGraphics.SetTextPr(CurTextPr); if (true === bVisitedHyperlink) { pGraphics.b_color1(128, 0, 151, 255); } else { pGraphics.b_color1(CurTextPr.Color.r, CurTextPr.Color.g, CurTextPr.Color.b, 255); } break; case para_End: var EndTextPr = Item.TextPr; pGraphics.SetTextPr(EndTextPr); pGraphics.b_color1(EndTextPr.Color.r, EndTextPr.Color.g, EndTextPr.Color.b, 255); bEnd = true; var bEndCell = false; if (null === this.Get_DocumentNext() && true === this.Parent.Is_TableCellContent()) { bEndCell = true; } Item.Draw(X, Y - Item.YOffset, pGraphics, bEndCell); X += Item.Width; break; case para_NewLine: Item.Draw(X, Y - Item.YOffset, pGraphics); X += Item.WidthVisible; break; case para_HyperlinkStart: bVisitedHyperlink = Item.Get_Visited(); if (true === bVisitedHyperlink) { pGraphics.b_color1(128, 0, 151, 255); } else { pGraphics.b_color1(CurTextPr.Color.r, CurTextPr.Color.g, CurTextPr.Color.b, 255); } break; case para_HyperlinkEnd: bVisitedHyperlink = false; pGraphics.b_color1(CurTextPr.Color.r, CurTextPr.Color.g, CurTextPr.Color.b, 255); break; } Y = TempY; } } }, Internal_Draw_5: function (CurPage, pGraphics, Pr) { var _Page = this.Pages[CurPage]; var StartPagePos = this.Lines[_Page.StartLine].StartPos; var HyperPos = this.Internal_FindBackward(StartPagePos, [para_HyperlinkStart, para_HyperlinkEnd]); var bVisitedHyperlink = false; if (true === HyperPos.Found && para_HyperlinkStart === HyperPos.Type) { bVisitedHyperlink = this.Content[HyperPos.LetterPos].Get_Visited(); } var CurTextPr = _Page.TextPr; var CurColor; if (true === bVisitedHyperlink) { CurColor = new CDocumentColor(128, 0, 151); } else { CurColor = new CDocumentColor(CurTextPr.Color.r, CurTextPr.Color.g, CurTextPr.Color.b); } var StartLine = _Page.StartLine; var EndLine = _Page.EndLine; var CheckSpelling = this.SpellChecker.Get_DrawingInfo(); var aStrikeout = new CParaDrawingRangeLines(); var aDStrikeout = new CParaDrawingRangeLines(); var aUnderline = new CParaDrawingRangeLines(); var aSpelling = new CParaDrawingRangeLines(); for (var CurLine = StartLine; CurLine <= EndLine; CurLine++) { var _Line = this.Lines[CurLine]; var EndLinePos = _Line.EndPos; var LineY = _Page.Y + _Line.Y; var Y = LineY; var LineM = _Line.Metrics; var LineM_D_04 = LineM.TextDescent * 0.4; var RangesCount = _Line.Ranges.length; aStrikeout.Clear(); aDStrikeout.Clear(); aUnderline.Clear(); aSpelling.Clear(); for (var CurRange = 0; CurRange < RangesCount; CurRange++) { var _Range = _Line.Ranges[CurRange]; var X = _Range.XVisible; var StartPos = _Range.StartPos; var EndPos = (CurRange === RangesCount - 1 ? EndLinePos : _Line.Ranges[CurRange + 1].StartPos - 1); for (var Pos = StartPos; Pos <= EndPos; Pos++) { var Item = this.Content[Pos]; if (Pos === this.Numbering.Pos) { X += this.Numbering.WidthVisible; } switch (Item.Type) { case para_End: case para_NewLine: X += Item.WidthVisible; break; case para_PageNum: case para_Drawing: case para_Tab: case para_Text: if (para_Drawing != Item.Type || drawing_Anchor != Item.DrawingType) { if (true === CurTextPr.DStrikeout) { aDStrikeout.Add(Y - CurTextPr.FontSize * g_dKoef_pt_to_mm * 0.27, Y - CurTextPr.FontSize * g_dKoef_pt_to_mm * 0.27, X, X + Item.WidthVisible, (CurTextPr.FontSize / 18) * g_dKoef_pt_to_mm, CurColor.r, CurColor.g, CurColor.b); } else { if (true === CurTextPr.Strikeout) { aStrikeout.Add(Y - CurTextPr.FontSize * g_dKoef_pt_to_mm * 0.27, Y - CurTextPr.FontSize * g_dKoef_pt_to_mm * 0.27, X, X + Item.WidthVisible, (CurTextPr.FontSize / 18) * g_dKoef_pt_to_mm, CurColor.r, CurColor.g, CurColor.b); } } if (true === CurTextPr.Underline) { aUnderline.Add(Y + this.Lines[CurLine].Metrics.TextDescent * 0.4, Y + this.Lines[CurLine].Metrics.TextDescent * 0.4, X, X + Item.WidthVisible, (CurTextPr.FontSize / 18) * g_dKoef_pt_to_mm, CurColor.r, CurColor.g, CurColor.b); } if (true === CheckSpelling[Pos]) { aSpelling.Add(Y + LineM_D_04, Y + LineM_D_04, X, X + Item.WidthVisible, (CurTextPr.FontSize / 18) * g_dKoef_pt_to_mm, 0, 0, 0); } X += Item.WidthVisible; } break; case para_Space: if (Pos >= _Range.StartPos2 && Pos <= _Range.EndPos2) { if (true === CurTextPr.DStrikeout) { aDStrikeout.Add(Y - CurTextPr.FontSize * g_dKoef_pt_to_mm * 0.27, Y - CurTextPr.FontSize * g_dKoef_pt_to_mm * 0.27, X, X + Item.WidthVisible, (CurTextPr.FontSize / 18) * g_dKoef_pt_to_mm, CurColor.r, CurColor.g, CurColor.b); } else { if (true === CurTextPr.Strikeout) { aStrikeout.Add(Y - CurTextPr.FontSize * g_dKoef_pt_to_mm * 0.27, Y - CurTextPr.FontSize * g_dKoef_pt_to_mm * 0.27, X, X + Item.WidthVisible, (CurTextPr.FontSize / 18) * g_dKoef_pt_to_mm, CurColor.r, CurColor.g, CurColor.b); } } if (true === CurTextPr.Underline) { aUnderline.Add(Y + LineM_D_04, Y + LineM_D_04, X, X + Item.WidthVisible, (CurTextPr.FontSize / 18) * g_dKoef_pt_to_mm, CurColor.r, CurColor.g, CurColor.b); } } X += Item.WidthVisible; break; case para_TextPr: CurTextPr = Item.CalcValue; if (true === bVisitedHyperlink) { CurColor.Set(128, 0, 151, 255); } else { CurColor.Set(CurTextPr.Color.r, CurTextPr.Color.g, CurTextPr.Color.b, 255); } switch (CurTextPr.VertAlign) { case vertalign_SubScript: Y = LineY - vertalign_Koef_Sub * CurTextPr.FontSize * g_dKoef_pt_to_mm; break; case vertalign_SuperScript: Y = LineY - vertalign_Koef_Super * CurTextPr.FontSize * g_dKoef_pt_to_mm; break; default: Y = LineY; break; } break; case para_HyperlinkStart: bVisitedHyperlink = Item.Get_Visited(); if (true === bVisitedHyperlink) { CurColor.Set(128, 0, 151, 255); } else { CurColor.Set(CurTextPr.Color.r, CurTextPr.Color.g, CurTextPr.Color.b, 255); } break; case para_HyperlinkEnd: bVisitedHyperlink = false; CurColor.Set(CurTextPr.Color.r, CurTextPr.Color.g, CurTextPr.Color.b, 255); break; } } } var Element = aStrikeout.Get_Next(); while (null != Element) { pGraphics.p_color(Element.r, Element.g, Element.b, 255); pGraphics.drawHorLine(c_oAscLineDrawingRule.Top, Element.y0, Element.x0, Element.x1, Element.w); Element = aStrikeout.Get_Next(); } Element = aDStrikeout.Get_Next(); while (null != Element) { pGraphics.p_color(Element.r, Element.g, Element.b, 255); pGraphics.drawHorLine2(c_oAscLineDrawingRule.Top, Element.y0, Element.x0, Element.x1, Element.w); Element = aDStrikeout.Get_Next(); } aUnderline.Correct_w_ForUnderline(); Element = aUnderline.Get_Next(); while (null != Element) { pGraphics.p_color(Element.r, Element.g, Element.b, 255); pGraphics.drawHorLine(0, Element.y0, Element.x0, Element.x1, Element.w); Element = aUnderline.Get_Next(); } pGraphics.p_color(255, 0, 0, 255); var SpellingW = editor.WordControl.m_oDrawingDocument.GetMMPerDot(1); Element = aSpelling.Get_Next(); while (null != Element) { pGraphics.DrawSpellingLine(Element.y0, Element.x0, Element.x1, SpellingW); Element = aSpelling.Get_Next(); } } }, Internal_Draw_6: function (CurPage, pGraphics, Pr) { var bEmpty = this.IsEmpty(); var X_left = Math.min(this.Pages[CurPage].X + Pr.ParaPr.Ind.Left, this.Pages[CurPage].X + Pr.ParaPr.Ind.Left + Pr.ParaPr.Ind.FirstLine); var X_right = this.Pages[CurPage].XLimit - Pr.ParaPr.Ind.Right; if (true === this.Is_LineDropCap()) { X_right = X_left + this.Get_LineDropCapWidth(); } if (Pr.ParaPr.Brd.Left.Value === border_Single) { X_left -= 1 + Pr.ParaPr.Brd.Left.Space; } else { X_left -= 1; } if (Pr.ParaPr.Brd.Right.Value === border_Single) { X_right += 1 + Pr.ParaPr.Brd.Right.Space; } else { X_right += 1; } var LeftMW = -(border_Single === Pr.ParaPr.Brd.Left.Value ? Pr.ParaPr.Brd.Left.Size : 0); var RightMW = (border_Single === Pr.ParaPr.Brd.Right.Value ? Pr.ParaPr.Brd.Right.Size : 0); if (true === Pr.ParaPr.Brd.First && border_Single === Pr.ParaPr.Brd.Top.Value && ((0 === CurPage && (false === this.Is_StartFromNewPage() || null === this.Get_DocumentPrev())) || (1 === CurPage && true === this.Is_StartFromNewPage()))) { var Y_top = this.Pages[CurPage].Y; if (0 === CurPage) { Y_top += Pr.ParaPr.Spacing.Before; } pGraphics.p_color(Pr.ParaPr.Brd.Top.Color.r, Pr.ParaPr.Brd.Top.Color.g, Pr.ParaPr.Brd.Top.Color.b, 255); var StartLine = this.Pages[CurPage].StartLine; var RangesCount = this.Lines[StartLine].Ranges.length; for (var CurRange = 0; CurRange < RangesCount; CurRange++) { var X0 = (0 === CurRange ? X_left : this.Lines[StartLine].Ranges[CurRange].X); var X1 = (RangesCount - 1 === CurRange ? X_right : this.Lines[StartLine].Ranges[CurRange].XEnd); if (this.Lines[StartLine].Ranges[CurRange].W > 0.001 || (true === bEmpty && 1 === RangesCount)) { pGraphics.drawHorLineExt(c_oAscLineDrawingRule.Top, Y_top, X0, X1, Pr.ParaPr.Brd.Top.Size, LeftMW, RightMW); } } } else { if (false === Pr.ParaPr.Brd.First) { var bDraw = false; var Size = 0; var Y = 0; if (1 === CurPage && true === this.Is_StartFromNewPage() && border_Single === Pr.ParaPr.Brd.Top.Value) { pGraphics.p_color(Pr.ParaPr.Brd.Top.Color.r, Pr.ParaPr.Brd.Top.Color.g, Pr.ParaPr.Brd.Top.Color.b, 255); Size = Pr.ParaPr.Brd.Top.Size; Y = this.Pages[CurPage].Y + this.Lines[this.Pages[CurPage].FirstLine].Top; bDraw = true; } else { if (0 === CurPage && false === this.Is_StartFromNewPage() && border_Single === Pr.ParaPr.Brd.Between.Value) { pGraphics.p_color(Pr.ParaPr.Brd.Between.Color.r, Pr.ParaPr.Brd.Between.Color.g, Pr.ParaPr.Brd.Between.Color.b, 255); Size = Pr.ParaPr.Brd.Between.Size; Y = this.Pages[CurPage].Y; bDraw = true; } } if (true === bDraw) { var StartLine = this.Pages[CurPage].StartLine; var RangesCount = this.Lines[StartLine].Ranges.length; for (var CurRange = 0; CurRange < RangesCount; CurRange++) { var X0 = (0 === CurRange ? X_left : this.Lines[StartLine].Ranges[CurRange].X); var X1 = (RangesCount - 1 === CurRange ? X_right : this.Lines[StartLine].Ranges[CurRange].XEnd); if (this.Lines[StartLine].Ranges[CurRange].W > 0.001 || (true === bEmpty && 1 === RangesCount)) { pGraphics.drawHorLineExt(c_oAscLineDrawingRule.Top, Y, X0, X1, Size, LeftMW, RightMW); } } } } } var CurLine = this.Pages[CurPage].EndLine; var bEnd = (this.Content.length - 2 <= this.Lines[CurLine].EndPos ? true : false); if (true === bEnd && true === Pr.ParaPr.Brd.Last && border_Single === Pr.ParaPr.Brd.Bottom.Value) { var TempY = this.Pages[CurPage].Y; var NextEl = this.Get_DocumentNext(); var DrawLineRule = c_oAscLineDrawingRule.Bottom; if (null != NextEl && type_Paragraph === NextEl.GetType() && true === NextEl.Is_StartFromNewPage()) { TempY = this.Pages[CurPage].Y + this.Lines[CurLine].Y + this.Lines[CurLine].Metrics.Descent + this.Lines[CurLine].Metrics.LineGap; DrawLineRule = c_oAscLineDrawingRule.Top; } else { TempY = this.Pages[CurPage].Y + this.Lines[CurLine].Bottom - Pr.ParaPr.Spacing.After; DrawLineRule = c_oAscLineDrawingRule.Bottom; } pGraphics.p_color(Pr.ParaPr.Brd.Bottom.Color.r, Pr.ParaPr.Brd.Bottom.Color.g, Pr.ParaPr.Brd.Bottom.Color.b, 255); var EndLine = this.Pages[CurPage].EndLine; var RangesCount = this.Lines[EndLine].Ranges.length; for (var CurRange = 0; CurRange < RangesCount; CurRange++) { var X0 = (0 === CurRange ? X_left : this.Lines[EndLine].Ranges[CurRange].X); var X1 = (RangesCount - 1 === CurRange ? X_right : this.Lines[EndLine].Ranges[CurRange].XEnd); if (this.Lines[EndLine].Ranges[CurRange].W > 0.001 || (true === bEmpty && 1 === RangesCount)) { pGraphics.drawHorLineExt(DrawLineRule, TempY, X0, X1, Pr.ParaPr.Brd.Bottom.Size, LeftMW, RightMW); } } } else { if (true === bEnd && false === Pr.ParaPr.Brd.Last && border_Single === Pr.ParaPr.Brd.Bottom.Value) { var NextEl = this.Get_DocumentNext(); if (null != NextEl && type_Paragraph === NextEl.GetType() && true === NextEl.Is_StartFromNewPage()) { pGraphics.p_color(Pr.ParaPr.Brd.Bottom.Color.r, Pr.ParaPr.Brd.Bottom.Color.g, Pr.ParaPr.Brd.Bottom.Color.b, 255); var EndLine = this.Pages[CurPage].EndLine; var RangesCount = this.Lines[EndLine].Ranges.length; for (var CurRange = 0; CurRange < RangesCount; CurRange++) { var X0 = (0 === CurRange ? X_left : this.Lines[EndLine].Ranges[CurRange].X); var X1 = (RangesCount - 1 === CurRange ? X_right : this.Lines[EndLine].Ranges[CurRange].XEnd); if (this.Lines[EndLine].Ranges[CurRange].W > 0.001 || (true === bEmpty && 1 === RangesCount)) { pGraphics.drawHorLineExt(c_oAscLineDrawingRule.Top, this.Pages[CurPage].Y + this.Lines[CurLine].Y + this.Lines[CurLine].Metrics.Descent + this.Lines[CurLine].Metrics.LineGap, X0, X1, Pr.ParaPr.Brd.Bottom.Size, LeftMW, RightMW); } } } } } }, ReDraw: function () { this.Parent.OnContentReDraw(this.Get_StartPage_Absolute(), this.Get_StartPage_Absolute() + this.Pages.length - 1); }, Shift: function (PageIndex, Dx, Dy) { if (0 === PageIndex) { this.X += Dx; this.Y += Dy; this.XLimit += Dx; this.YLimit += Dy; } var Page_abs = PageIndex + this.Get_StartPage_Absolute(); this.Pages[PageIndex].Shift(Dx, Dy); var StartLine = this.Pages[PageIndex].FirstLine; var EndLine = (PageIndex >= this.Pages.length - 1 ? this.Lines.length - 1 : this.Pages[PageIndex + 1].FirstLine - 1); for (var CurLine = StartLine; CurLine <= EndLine; CurLine++) { this.Lines[CurLine].Shift(Dx, Dy); } var Count = this.Content.length; for (var Index = 0; Index < Count; Index++) { var Item = this.Content[Index]; if (para_Drawing === Item.Type && Item.PageNum === Page_abs) { Item.Shift(Dx, Dy); } } }, Internal_Remove_CollaborativeMarks: function (bCorrectPos) { for (var Pos = 0; Pos < this.Content.length; Pos++) { var Item = this.Content[Pos]; if (para_CollaborativeChangesEnd === Item.Type || para_CollaborativeChangesStart === Item.Type) { this.Internal_Content_Remove(Pos, bCorrectPos); Pos--; } } }, Remove: function (nCount, bOnlyText) { this.Internal_Remove_CollaborativeMarks(true); this.RecalcInfo.Set_Type_0(pararecalc_0_All); if (true === this.Selection.Use) { var StartPos = this.Selection.StartPos; var EndPos = this.Selection.EndPos; if (StartPos > EndPos) { var Temp = EndPos; EndPos = StartPos; StartPos = Temp; } if (EndPos >= this.Content.length - 1) { for (var Index = StartPos; Index < this.Content.length - 2; Index++) { var Item = this.Content[Index]; if (para_Drawing === Item.Type) { var ObjId = Item.Get_Id(); this.Parent.DrawingObjects.Remove_ById(ObjId); } } var Hyper_start = null; if (StartPos < EndPos) { Hyper_start = this.Check_Hyperlink2(StartPos); } this.Internal_Content_Remove2(StartPos, this.Content.length - 2 - StartPos); StartPos = this.Selection.StartPos; EndPos = this.Selection.EndPos; if (StartPos > EndPos) { var Temp = EndPos; EndPos = StartPos; StartPos = Temp; } this.Set_ContentPos(StartPos, true, -1); if (null != Hyper_start) { this.Internal_Content_Add(StartPos, new ParaTextPr()); this.Internal_Content_Add(StartPos, new ParaHyperlinkEnd()); } return false; } else { var Hyper_start = this.Check_Hyperlink2(StartPos); var Hyper_end = this.Check_Hyperlink2(EndPos); var LastTextPr = null; for (var Index = StartPos; Index < EndPos; Index++) { var Item = this.Content[Index]; if (para_Drawing === Item.Type) { var ObjId = Item.Get_Id(); this.Parent.DrawingObjects.Remove_ById(ObjId); } else { if (para_TextPr === Item.Type) { LastTextPr = Item; } } } this.Internal_Content_Remove2(StartPos, EndPos - StartPos); StartPos = this.Selection.StartPos; EndPos = this.Selection.EndPos; if (StartPos > EndPos) { var Temp = EndPos; EndPos = StartPos; StartPos = Temp; } if (null != LastTextPr) { this.Internal_Content_Add(StartPos, new ParaTextPr(LastTextPr.Value)); } this.Set_ContentPos(StartPos, true, -1); if (Hyper_start != Hyper_end) { if (null != Hyper_end) { this.Internal_Content_Add(StartPos, Hyper_end); this.Set_ContentPos(this.CurPos.ContentPos + 1); } if (null != Hyper_start) { this.Internal_Content_Add(StartPos, new ParaHyperlinkEnd()); this.Set_ContentPos(this.CurPos.ContentPos + 1); } } else { this.Internal_Content_Add(StartPos, new ParaHyperlinkEnd()); this.Internal_Check_EmptyHyperlink(StartPos); } } return; } if (0 == nCount) { return; } var absCount = (nCount < 0 ? -nCount : nCount); for (var Index = 0; Index < absCount; Index++) { var OldPos = this.CurPos.ContentPos; if (nCount < 0) { if (false === this.Internal_RemoveBackward(bOnlyText)) { return false; } } else { if (false === this.Internal_RemoveForward(bOnlyText)) { return false; } } this.Internal_Check_EmptyHyperlink(OldPos); } return true; }, Internal_RemoveBackward: function (bOnlyText) { var Line = this.Content; var CurPos = this.CurPos.ContentPos; if (!bOnlyText) { if (CurPos == 0) { return false; } else { this.Internal_Content_Remove(CurPos - 1); } } else { var LetterPos = CurPos - 1; var oPos = this.Internal_FindBackward(LetterPos, [para_PageNum, para_Drawing, para_Tab, para_Text, para_Space, para_NewLine]); if (oPos.Found) { if (para_Drawing === oPos.Type) { this.Parent.Select_DrawingObject(this.Content[oPos.LetterPos].Get_Id()); } else { this.Internal_Content_Remove(oPos.LetterPos); this.Set_ContentPos(oPos.LetterPos, true, -1); } } else { var Pr = this.Get_CompiledPr2(false).ParaPr; if (undefined != this.Numbering_Get()) { this.Numbering_Remove(); this.Set_Ind({ FirstLine: 0, Left: Math.max(Pr.Ind.Left, Pr.Ind.Left + Pr.Ind.FirstLine) }, false); } else { if (numbering_presentationnumfrmt_None != this.PresentationPr.Bullet.Get_Type()) { this.Remove_PresentationNumbering(); } else { if (align_Right === Pr.Jc) { this.Set_Align(align_Center); } else { if (align_Center === Pr.Jc) { this.Set_Align(align_Left); } else { if (Math.abs(Pr.Ind.FirstLine) > 0.001) { if (Pr.Ind.FirstLine > 0) { this.Set_Ind({ FirstLine: 0 }, false); } else { this.Set_Ind({ Left: Pr.Ind.Left + Pr.Ind.FirstLine, FirstLine: 0 }, false); } } else { if (Math.abs(Pr.Ind.Left) > 0.001) { this.Set_Ind({ Left: 0 }, false); } else { return false; } } } } } } } } return true; }, Internal_RemoveForward: function (bOnlyText) { var Line = this.Content; var CurPos = this.CurPos.ContentPos; if (!bOnlyText) { if (CurPos == Line.length - 1) { return false; } else { this.Internal_Content_Remove(CurPos + 1); } } else { var LetterPos = CurPos; var oPos = this.Internal_FindForward(LetterPos, [para_PageNum, para_Drawing, para_Tab, para_Text, para_Space, para_NewLine]); if (oPos.Found) { if (para_Drawing === oPos.Type) { this.Parent.Select_DrawingObject(this.Content[oPos.LetterPos].Get_Id()); } else { this.Internal_Content_Remove(oPos.LetterPos); this.Set_ContentPos(oPos.LetterPos, true, -1); } } else { return false; } } return true; }, Internal_FindForward: function (CurPos, arrId) { var LetterPos = CurPos; var bFound = false; var Type = para_Unknown; if (CurPos < 0 || CurPos >= this.Content.length) { return { Found: false }; } while (!bFound) { Type = this.Content[LetterPos].Type; for (var Id = 0; Id < arrId.length; Id++) { if (arrId[Id] == Type) { bFound = true; break; } } if (bFound) { break; } LetterPos++; if (LetterPos > this.Content.length - 1) { break; } } return { LetterPos: LetterPos, Found: bFound, Type: Type }; }, Internal_FindBackward: function (CurPos, arrId) { var LetterPos = CurPos; var bFound = false; var Type = para_Unknown; if (CurPos < 0 || CurPos >= this.Content.length) { return { Found: false }; } while (!bFound) { Type = this.Content[LetterPos].Type; for (var Id = 0; Id < arrId.length; Id++) { if (arrId[Id] == Type) { bFound = true; break; } } if (bFound) { break; } LetterPos--; if (LetterPos < 0) { break; } } return { LetterPos: LetterPos, Found: bFound, Type: Type }; }, Internal_CalculateTextPr: function (LetterPos, StartPr) { var Pr; if ("undefined" != typeof(StartPr)) { Pr = this.Get_CompiledPr(); StartPr.ParaPr = Pr.ParaPr; StartPr.TextPr = Pr.TextPr; } else { Pr = this.Get_CompiledPr2(false); } var TextPr = Pr.TextPr.Copy(); if (LetterPos < 0) { return TextPr; } var Pos = this.Internal_FindBackward(LetterPos, [para_TextPr]); if (true === Pos.Found) { var CurTextPr = this.Content[Pos.LetterPos].Value; if (undefined != CurTextPr.RStyle) { var Styles = this.Parent.Get_Styles(); var StyleTextPr = Styles.Get_Pr(CurTextPr.RStyle, styletype_Character).TextPr; TextPr.Merge(StyleTextPr); } TextPr.Merge(CurTextPr); } TextPr.FontFamily.Name = TextPr.RFonts.Ascii.Name; TextPr.FontFamily.Index = TextPr.RFonts.Ascii.Index; return TextPr; }, Internal_GetLang: function (LetterPos) { var Lang = this.Get_CompiledPr2(false).TextPr.Lang.Copy(); if (LetterPos < 0) { return Lang; } var Pos = this.Internal_FindBackward(LetterPos, [para_TextPr]); if (true === Pos.Found) { var CurTextPr = this.Content[Pos.LetterPos].Value; if (undefined != CurTextPr.RStyle) { var Styles = this.Parent.Get_Styles(); var StyleTextPr = Styles.Get_Pr(CurTextPr.RStyle, styletype_Character).TextPr; Lang.Merge(StyleTextPr.Lang); } Lang.Merge(CurTextPr.Lang); } return Lang; }, Internal_GetTextPr: function (LetterPos) { var TextPr = new CTextPr(); if (LetterPos < 0) { return TextPr; } var Pos = this.Internal_FindBackward(LetterPos, [para_TextPr]); if (true === Pos.Found) { var CurTextPr = this.Content[Pos.LetterPos].Value; TextPr.Merge(CurTextPr); } return TextPr; }, Add: function (Item) { var CurPos = this.CurPos.ContentPos; if ("undefined" != typeof(Item.Parent)) { Item.Parent = this; } switch (Item.Type) { case para_Text: this.Internal_Content_Add(CurPos, Item); break; case para_Space: this.Internal_Content_Add(CurPos, Item); break; case para_TextPr: this.Internal_AddTextPr(Item.Value); break; case para_HyperlinkStart: this.Internal_AddHyperlink(Item); break; case para_PageNum: case para_Tab: case para_Drawing: default: this.Internal_Content_Add(CurPos, Item); break; } if (para_TextPr != Item.Type) { this.DeleteCollaborativeMarks = true; } this.RecalcInfo.Set_Type_0(pararecalc_0_All); }, Add_Tab: function (bShift) { var NumPr = this.Numbering_Get(); if (undefined != NumPr) { if (true != this.Selection.Use) { var NumId = NumPr.NumId; var Lvl = NumPr.Lvl; var NumInfo = this.Parent.Internal_GetNumInfo(this.Id, NumPr); if (0 === Lvl && NumInfo[Lvl] <= 1) { var Numbering = this.Parent.Get_Numbering(); var AbstractNum = Numbering.Get_AbstractNum(NumId); var NumLvl = AbstractNum.Lvl[Lvl]; var NumParaPr = NumLvl.ParaPr; var ParaPr = this.Get_CompiledPr2(false).ParaPr; if (undefined != NumParaPr.Ind && undefined != NumParaPr.Ind.Left) { var NewX = ParaPr.Ind.Left; if (true != bShift) { NewX += Default_Tab_Stop; } else { NewX -= Default_Tab_Stop; if (NewX < 0) { NewX = 0; } if (ParaPr.Ind.FirstLine < 0 && NewX + ParaPr.Ind.FirstLine < 0) { NewX = -ParaPr.Ind.FirstLine; } } AbstractNum.Change_LeftInd(NewX); History.Add(this, { Type: historyitem_Paragraph_Ind_First, Old: (undefined != this.Pr.Ind.FirstLine ? this.Pr.Ind.FirstLine : undefined), New: undefined }); History.Add(this, { Type: historyitem_Paragraph_Ind_Left, Old: (undefined != this.Pr.Ind.Left ? this.Pr.Ind.Left : undefined), New: undefined }); this.Pr.Ind.FirstLine = undefined; this.Pr.Ind.Left = undefined; this.CompiledPr.NeedRecalc = true; } } else { this.Numbering_IndDec_Level(!bShift); } } else { this.Numbering_IndDec_Level(!bShift); } } else { if (true === this.Is_SelectionUse()) { this.IncDec_Indent(!bShift); } else { var ParaPr = this.Get_CompiledPr2(false).ParaPr; if (true != bShift) { if (ParaPr.Ind.FirstLine < 0) { this.Set_Ind({ FirstLine: 0 }, false); this.CompiledPr.NeedRecalc = true; } else { if (ParaPr.Ind.FirstLine < 12.5) { this.Set_Ind({ FirstLine: 12.5 }, false); this.CompiledPr.NeedRecalc = true; } else { if (X_Right_Field - X_Left_Margin > ParaPr.Ind.Left + 25) { this.Set_Ind({ Left: ParaPr.Ind.Left + 12.5 }, false); this.CompiledPr.NeedRecalc = true; } } } } else { if (ParaPr.Ind.FirstLine > 0) { if (ParaPr.Ind.FirstLine > 12.5) { this.Set_Ind({ FirstLine: ParaPr.Ind.FirstLine - 12.5 }, false); } else { this.Set_Ind({ FirstLine: 0 }, false); } this.CompiledPr.NeedRecalc = true; } else { var Left = ParaPr.Ind.Left + ParaPr.Ind.FirstLine; if (Left < 0) { this.Set_Ind({ Left: -ParaPr.Ind.FirstLine }, false); this.CompiledPr.NeedRecalc = true; } else { if (Left > 12.5) { this.Set_Ind({ Left: ParaPr.Ind.Left - 12.5 }, false); } else { this.Set_Ind({ Left: -ParaPr.Ind.FirstLine }, false); } this.CompiledPr.NeedRecalc = true; } } } } } }, Extend_ToPos: function (_X) { var Page = this.Pages[this.Pages.length - 1]; var X0 = Page.X; var X1 = Page.XLimit - X0; var X = _X - X0; if (true === this.IsEmpty()) { if (Math.abs(X - X1 / 2) < 12.5) { return this.Set_Align(align_Center); } else { if (X > X1 - 12.5) { return this.Set_Align(align_Right); } else { if (X < 12.5) { return this.Set_Ind({ FirstLine: 12.5 }, false); } } } } var Tabs = this.Get_CompiledPr2(false).ParaPr.Tabs.Copy(); var CurPos = this.Internal_GetEndPos(); if (Math.abs(X - X1 / 2) < 12.5) { Tabs.Add(new CParaTab(tab_Center, X1 / 2)); } else { if (X > X1 - 12.5) { Tabs.Add(new CParaTab(tab_Right, X1 - 0.001)); } else { Tabs.Add(new CParaTab(tab_Left, X)); } } this.Set_Tabs(Tabs); this.Internal_Content_Add(CurPos, new ParaTab()); }, Internal_IncDecFontSize: function (bIncrease, Value) { var Sizes = [8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 26, 28, 36, 48, 72]; var NewValue = Value; if (true === bIncrease) { if (Value < Sizes[0]) { if (Value >= Sizes[0] - 1) { NewValue = Sizes[0]; } else { NewValue = Math.floor(Value + 1); } } else { if (Value >= Sizes[Sizes.length - 1]) { NewValue = Math.min(300, Math.floor(Value / 10 + 1) * 10); } else { for (var Index = 0; Index < Sizes.length; Index++) { if (Value < Sizes[Index]) { NewValue = Sizes[Index]; break; } } } } } else { if (Value <= Sizes[0]) { NewValue = Math.max(Math.floor(Value - 1), 1); } else { if (Value > Sizes[Sizes.length - 1]) { if (Value <= Math.floor(Sizes[Sizes.length - 1] / 10 + 1) * 10) { NewValue = Sizes[Sizes.length - 1]; } else { NewValue = Math.floor(Math.ceil(Value / 10) - 1) * 10; } } else { for (var Index = Sizes.length - 1; Index >= 0; Index--) { if (Value > Sizes[Index]) { NewValue = Sizes[Index]; break; } } } } } return NewValue; }, IncDec_FontSize: function (bIncrease) { this.RecalcInfo.Set_Type_0(pararecalc_0_All); var StartTextPr = this.Get_CompiledPr().TextPr; if (true === this.ApplyToAll) { var StartFontSize = this.Internal_IncDecFontSize(bIncrease, StartTextPr.FontSize); this.Internal_Content_Add(0, new ParaTextPr({ FontSize: StartFontSize })); for (var Index = 1; Index < this.Content.length; Index++) { var Item = this.Content[Index]; if (para_TextPr === Item.Type) { if (undefined != Item.Value.FontSize) { Item.Set_FontSize(this.Internal_IncDecFontSize(bIncrease, Item.Value.FontSize)); } else { Item.Set_FontSize(this.Internal_IncDecFontSize(bIncrease, StartTextPr.FontSize)); } } } if (undefined != this.TextPr.Value.FontSize) { this.TextPr.Set_FontSize(this.Internal_IncDecFontSize(bIncrease, this.TextPr.Value.FontSize)); } else { this.TextPr.Set_FontSize(this.Internal_IncDecFontSize(bIncrease, StartTextPr.FontSize)); } return true; } var Line = this.Content; var CurPos = this.CurPos.ContentPos; if (true === this.Selection.Use) { var StartPos = this.Selection.StartPos; var EndPos = this.Selection.EndPos; if (StartPos > EndPos) { var Temp = EndPos; EndPos = StartPos; StartPos = Temp; } var LastPos = this.Internal_GetEndPos(); var bEnd = false; if (EndPos > LastPos) { EndPos = LastPos; bEnd = true; } var TextPr_end = this.Internal_GetTextPr(EndPos); var TextPr_start = this.Internal_GetTextPr(StartPos); if (undefined != TextPr_start.FontSize) { TextPr_start.FontSize = this.Internal_IncDecFontSize(bIncrease, TextPr_start.FontSize); } else { TextPr_start.FontSize = this.Internal_IncDecFontSize(bIncrease, StartTextPr.FontSize); } this.Internal_Content_Add(StartPos, new ParaTextPr(TextPr_start)); if (false === bEnd) { this.Internal_Content_Add(EndPos + 1, new ParaTextPr(TextPr_end)); } else { if (undefined != this.TextPr.Value.FontSize) { this.TextPr.Set_FontSize(this.Internal_IncDecFontSize(bIncrease, this.TextPr.Value.FontSize)); } else { this.TextPr.Set_FontSize(this.Internal_IncDecFontSize(bIncrease, StartTextPr.FontSize)); } } for (var Pos = StartPos + 1; Pos < EndPos; Pos++) { Item = this.Content[Pos]; if (para_TextPr === Item.Type) { if (undefined != Item.Value.FontSize) { Item.Set_FontSize(this.Internal_IncDecFontSize(bIncrease, Item.Value.FontSize)); } else { Item.Set_FontSize(this.Internal_IncDecFontSize(bIncrease, StartTextPr.FontSize)); } } } return true; } var oEnd = this.Internal_FindForward(CurPos, [para_PageNum, para_Drawing, para_Tab, para_Text, para_Space, para_End, para_NewLine]); var oStart = this.Internal_FindBackward(CurPos - 1, [para_PageNum, para_Drawing, para_Tab, para_Text, para_Space, para_NewLine]); var CurType = this.Content[CurPos].Type; if (!oEnd.Found) { return false; } if (para_End == oEnd.Type) { var Pos = oEnd.LetterPos; var TextPr_start = this.Internal_GetTextPr(Pos); if (undefined != TextPr_start.FontSize) { TextPr_start.FontSize = this.Internal_IncDecFontSize(bIncrease, TextPr_start.FontSize); } else { TextPr_start.FontSize = this.Internal_IncDecFontSize(bIncrease, StartTextPr.FontSize); } this.Internal_Content_Add(Pos, new ParaTextPr(TextPr_start)); this.Set_ContentPos(Pos + 1, true, -1); if (undefined != this.TextPr.Value.FontSize) { this.TextPr.Set_FontSize(this.Internal_IncDecFontSize(bIncrease, this.TextPr.Value.FontSize)); } else { this.TextPr.Set_FontSize(this.Internal_IncDecFontSize(bIncrease, StartTextPr.FontSize)); } return true; } else { if (para_PageNum === CurType || para_Drawing === CurType || para_Tab == CurType || para_Space == CurType || para_NewLine == CurType || !oStart.Found || para_NewLine == oEnd.Type || para_Space == oEnd.Type || para_NewLine == oStart.Type || para_Space == oStart.Type || para_Tab == oEnd.Type || para_Tab == oStart.Type || para_Drawing == oEnd.Type || para_Drawing == oStart.Type || para_PageNum == oEnd.Type || para_PageNum == oStart.Type) { var TextPr_old = this.Internal_GetTextPr(CurPos); var TextPr_new = TextPr_old.Copy(); if (undefined != TextPr_new.FontSize) { TextPr_new.FontSize = this.Internal_IncDecFontSize(bIncrease, TextPr_new.FontSize); } else { TextPr_new.FontSize = this.Internal_IncDecFontSize(bIncrease, StartTextPr.FontSize); } this.Internal_Content_Add(CurPos, new ParaTextPr(TextPr_old)); this.Internal_Content_Add(CurPos, new ParaEmpty(true)); this.Internal_Content_Add(CurPos, new ParaTextPr(TextPr_new)); this.Set_ContentPos(CurPos + 1, true, -1); this.RecalculateCurPos(); return false; } else { var oWordStart = this.Internal_FindBackward(CurPos, [para_PageNum, para_Drawing, para_Tab, para_Space, para_NewLine]); if (!oWordStart.Found) { oWordStart = this.Internal_FindForward(0, [para_Text]); } else { oWordStart.LetterPos++; } var oWordEnd = this.Internal_FindForward(CurPos, [para_PageNum, para_Drawing, para_Tab, para_Space, para_End, para_NewLine]); if (!oWordStart.Found || !oWordEnd.Found) { return; } var TextPr_end = this.Internal_GetTextPr(oWordEnd.LetterPos); var TextPr_start = this.Internal_GetTextPr(oWordStart.LetterPos); if (undefined != TextPr_start.FontSize) { TextPr_start.FontSize = this.Internal_IncDecFontSize(bIncrease, TextPr_start.FontSize); } else { TextPr_start.FontSize = this.Internal_IncDecFontSize(bIncrease, StartTextPr.FontSize); } this.Internal_Content_Add(oWordStart.LetterPos, new ParaTextPr(TextPr_start)); this.Internal_Content_Add(oWordEnd.LetterPos + 1, new ParaTextPr(TextPr_end)); this.Set_ContentPos(CurPos + 1, true, -1); for (var Pos = oWordStart.LetterPos + 1; Pos < oWordEnd.LetterPos; Pos++) { Item = this.Content[Pos]; if (para_TextPr === Item.Type) { if (undefined != Item.Value.FontSize) { Item.Set_FontSize(this.Internal_IncDecFontSize(bIncrease, Item.Value.FontSize)); } else { Item.Set_FontSize(this.Internal_IncDecFontSize(bIncrease, StartTextPr.FontSize)); } } } return true; } } }, IncDec_Indent: function (bIncrease) { var NumPr = this.Numbering_Get(); if (undefined != NumPr) { this.Numbering_IndDec_Level(bIncrease); } else { var ParaPr = this.Get_CompiledPr2(false).ParaPr; var LeftMargin = ParaPr.Ind.Left; if (UnknownValue === LeftMargin) { LeftMargin = 0; } else { if (LeftMargin < 0) { this.Set_Ind({ Left: 0 }, false); return; } } var LeftMargin_new = 0; if (true === bIncrease) { if (LeftMargin >= 0) { LeftMargin = 12.5 * parseInt(10 * LeftMargin / 125); LeftMargin_new = ((LeftMargin - (10 * LeftMargin) % 125 / 10) / 12.5 + 1) * 12.5; } if (LeftMargin_new < 0) { LeftMargin_new = 12.5; } } else { var TempValue = (125 - (10 * LeftMargin) % 125); TempValue = (125 === TempValue ? 0 : TempValue); LeftMargin_new = Math.max(((LeftMargin + TempValue / 10) / 12.5 - 1) * 12.5, 0); } this.Set_Ind({ Left: LeftMargin_new }, false); } var NewPresLvl = (true === bIncrease ? Math.min(8, this.PresentationPr.Level + 1) : Math.max(0, this.PresentationPr.Level - 1)); this.Set_PresentationLevel(NewPresLvl); }, Cursor_GetPos: function () { return { X: this.CurPos.RealX, Y: this.CurPos.RealY }; }, Cursor_MoveLeft: function (Count, AddToSelect, Word) { if (this.CurPos.ContentPos < 0) { return false; } if (0 == Count || !Count) { return; } var absCount = (Count < 0 ? -Count : Count); for (var Index = 0; Index < absCount; Index++) { if (false === this.Internal_MoveCursorBackward(AddToSelect, Word)) { return false; } } this.Internal_Recalculate_CurPos(this.CurPos.ContentPos, true, false, false); this.CurPos.RealX = this.CurPos.X; this.CurPos.RealY = this.CurPos.Y; return true; }, Cursor_MoveRight: function (Count, AddToSelect, Word) { if (this.CurPos.ContentPos < 0) { return false; } if (0 == Count || !Count) { return; } var absCount = (Count < 0 ? -Count : Count); for (var Index = 0; Index < absCount; Index++) { if (false === this.Internal_MoveCursorForward(AddToSelect, Word)) { return false; } } this.Internal_Recalculate_CurPos(this.CurPos.ContentPos, true, false, false); this.CurPos.RealX = this.CurPos.X; this.CurPos.RealY = this.CurPos.Y; return true; }, Cursor_MoveUp: function (Count, AddToSelect) { var CursorPos_max = this.Internal_GetEndPos(); var CursorPos_min = this.Internal_GetStartPos(); if (this.CurPos.ContentPos < 0) { return false; } if (!Count || 0 == Count) { return; } var absCount = (Count < 0 ? -Count : Count); var CurLine = this.Internal_Get_ParaPos_By_Pos(this.CurPos.ContentPos).Line; var Result = true; if (true === this.Selection.Use) { if (true === AddToSelect) { this.Set_ContentPos(this.Selection.EndPos, true, -1); CurLine = this.Internal_Get_ParaPos_By_Pos(this.CurPos.ContentPos).Line; this.RecalculateCurPos(); this.CurPos.RealY = this.CurPos.Y; if (0 == CurLine) { Result = false; this.Selection.EndPos = this.Internal_GetStartPos(); } else { this.Cursor_MoveAt(this.CurPos.RealX, CurLine - 1, true, true); this.CurPos.RealY = this.CurPos.Y; this.Selection.EndPos = this.CurPos.ContentPos; } if (this.Selection.StartPos == this.Selection.EndPos) { this.Selection_Remove(); this.Selection.Use = false; this.Set_ContentPos(Math.max(CursorPos_min, Math.min(this.Selection.EndPos, CursorPos_max)), true, -1); this.RecalculateCurPos(); return Result; } } else { var StartPos = this.Selection.StartPos; var EndPos = this.Selection.EndPos; if (StartPos > EndPos) { var Temp = EndPos; EndPos = StartPos; StartPos = Temp; } this.Set_ContentPos(StartPos, true, -1); this.Selection_Remove(); CurLine = this.Internal_Get_ParaPos_By_Pos(this.CurPos.ContentPos).Line; this.Internal_Recalculate_CurPos(this.CurPos.ContentPos, true, false, false); this.CurPos.RealX = this.CurPos.X; this.CurPos.RealY = this.CurPos.Y; if (0 == CurLine) { Result = false; } else { this.Cursor_MoveAt(this.CurPos.RealX, CurLine - 1, true, true); this.CurPos.RealX = this.CurPos.X; this.CurPos.RealY = this.CurPos.Y; } } } else { if (true === AddToSelect) { this.Selection.Use = true; this.Selection.StartPos = this.CurPos.ContentPos; CurLine = this.Internal_Get_ParaPos_By_Pos(this.CurPos.ContentPos).Line; this.RecalculateCurPos(); this.CurPos.RealY = this.CurPos.Y; if (0 == CurLine) { Result = false; this.Selection.EndPos = this.Internal_GetStartPos(); } else { this.Cursor_MoveAt(this.CurPos.RealX, CurLine - 1, true, true); this.CurPos.RealY = this.CurPos.Y; this.Selection.EndPos = this.CurPos.ContentPos; } if (this.Selection.StartPos == this.Selection.EndPos) { this.Selection_Remove(); this.Selection.Use = false; this.Set_ContentPos(Math.max(CursorPos_min, Math.min(this.Selection.EndPos, CursorPos_max)), true, -1); this.RecalculateCurPos(); return Result; } } else { if (0 == CurLine) { return false; } else { this.Cursor_MoveAt(this.CurPos.RealX, CurLine - 1, true, true); this.CurPos.RealY = this.CurPos.Y; } } } return Result; }, Cursor_MoveDown: function (Count, AddToSelect) { var CursorPos_max = this.Internal_GetEndPos(); var CursorPos_min = this.Internal_GetStartPos(); if (this.CurPos.ContentPos < 0) { return false; } if (!Count || 0 == Count) { return; } var absCount = (Count < 0 ? -Count : Count); var CurLine = this.Internal_Get_ParaPos_By_Pos(this.CurPos.ContentPos).Line; var Result = true; if (true === this.Selection.Use) { if (true === AddToSelect) { this.Set_ContentPos(this.Selection.EndPos, true, -1); CurLine = this.Internal_Get_ParaPos_By_Pos(this.CurPos.ContentPos).Line; this.RecalculateCurPos(); this.CurPos.RealY = this.CurPos.Y; if (this.Lines.length - 1 == CurLine) { Result = false; this.Selection.EndPos = this.Content.length - 1; } else { this.Cursor_MoveAt(this.CurPos.RealX, CurLine + 1, true, true); this.CurPos.RealY = this.CurPos.Y; this.Selection.EndPos = this.CurPos.ContentPos; } if (this.Selection.StartPos == this.Selection.EndPos) { this.Selection_Remove(); this.Selection.Use = false; this.Set_ContentPos(Math.max(CursorPos_min, Math.min(this.Selection.EndPos, CursorPos_max)), true, -1); this.RecalculateCurPos(); return Result; } } else { var StartPos = this.Selection.StartPos; var EndPos = this.Selection.EndPos; if (StartPos > EndPos) { var Temp = EndPos; EndPos = StartPos; StartPos = Temp; } this.Set_ContentPos(Math.max(CursorPos_min, Math.min(EndPos, CursorPos_max)), true, -1); this.Selection_Remove(); CurLine = this.Internal_Get_ParaPos_By_Pos(this.CurPos.ContentPos).Line; this.Internal_Recalculate_CurPos(this.CurPos.ContentPos, true, false, false); this.CurPos.RealX = this.CurPos.X; this.CurPos.RealY = this.CurPos.Y; if (this.Lines.length - 1 == CurLine) { Result = false; } else { this.Cursor_MoveAt(this.CurPos.RealX, CurLine + 1, true, true); this.CurPos.RealX = this.CurPos.X; this.CurPos.RealY = this.CurPos.Y; } } } else { if (AddToSelect) { this.Selection.Use = true; this.Selection.StartPos = this.CurPos.ContentPos; CurLine = this.Internal_Get_ParaPos_By_Pos(this.CurPos.ContentPos).Line; this.RecalculateCurPos(); this.CurPos.RealY = this.CurPos.Y; if (this.Lines.length - 1 == CurLine) { Result = false; this.Selection.EndPos = this.Content.length - 1; } else { this.Cursor_MoveAt(this.CurPos.RealX, CurLine + 1, true, true); this.CurPos.RealY = this.CurPos.Y; this.Selection.EndPos = this.CurPos.ContentPos; } if (this.Selection.StartPos == this.Selection.EndPos) { this.Selection_Remove(); this.Selection.Use = false; this.Set_ContentPos(Math.max(CursorPos_min, Math.min(this.Selection.EndPos, CursorPos_max)), true, -1); this.RecalculateCurPos(); return Result; } } else { if (this.Lines.length - 1 == CurLine) { return false; } else { this.Cursor_MoveAt(this.CurPos.RealX, CurLine + 1, true, true); this.CurPos.RealY = this.CurPos.Y; } } } return Result; }, Cursor_MoveEndOfLine: function (AddToSelect) { var CursorPos_max = this.Internal_GetEndPos(); var CursorPos_min = this.Internal_GetStartPos(); if (this.CurPos.ContentPos < 0) { return false; } if (true === this.Selection.Use) { if (true === AddToSelect) { this.Set_ContentPos(this.Selection.EndPos, true, -1); } else { this.Set_ContentPos(Math.max(CursorPos_min, Math.min(CursorPos_max, (this.Selection.EndPos >= this.Selection.StartPos ? this.Selection.EndPos : this.Selection.StartPos))), true, -1); this.Selection_Remove(); } } var CurLine = this.Internal_Get_ParaPos_By_Pos(this.CurPos.ContentPos).Line; var LineEndPos = (CurLine >= this.Lines.length - 1 ? this.Internal_GetEndPos() : this.Lines[CurLine + 1].StartPos - 1); if (true === this.Selection.Use && true === AddToSelect) { this.Selection.EndPos = LineEndPos; if (this.Selection.StartPos == this.Selection.EndPos) { this.Selection_Remove(); this.Selection.Use = false; this.Set_ContentPos(Math.max(CursorPos_min, Math.min(this.Selection.EndPos, CursorPos_max)), true, -1); this.RecalculateCurPos(); return; } } else { if (AddToSelect) { this.Selection.StartPos = this.CurPos.ContentPos; this.Selection.Use = true; this.Selection.EndPos = LineEndPos; if (this.Selection.StartPos == this.Selection.EndPos) { this.Selection_Remove(); this.Selection.Use = false; this.Set_ContentPos(Math.max(CursorPos_min, Math.min(this.Selection.EndPos, CursorPos_max)), true, -1); this.RecalculateCurPos(); return; } } else { this.Set_ContentPos(LineEndPos, true, -1); this.RecalculateCurPos(); this.CurPos.RealX = this.CurPos.X; this.CurPos.RealY = this.CurPos.Y; } } }, Cursor_MoveStartOfLine: function (AddToSelect) { var CursorPos_max = this.Internal_GetEndPos(); var CursorPos_min = this.Internal_GetStartPos(); if (this.CurPos.ContentPos < 0) { return false; } if (true === this.Selection.Use) { if (true === AddToSelect) { this.Set_ContentPos(this.Selection.EndPos, true, -1); } else { this.Set_ContentPos((this.Selection.StartPos <= this.Selection.EndPos ? this.Selection.StartPos : this.Selection.EndPos), true, -1); this.Selection_Remove(); } } var CurLine = this.Internal_Get_ParaPos_By_Pos(this.CurPos.ContentPos).Line; var LineStartPos = this.Lines[CurLine].StartPos; if (true === this.Selection.Use && true === AddToSelect) { this.Selection.EndPos = LineStartPos; if (this.Selection.StartPos == this.Selection.EndPos) { this.Selection_Remove(); this.Selection.Use = false; this.Set_ContentPos(Math.max(CursorPos_min, Math.min(this.Selection.EndPos, CursorPos_max)), true, -1); this.RecalculateCurPos(); return; } } else { if (AddToSelect) { this.Selection.EndPos = LineStartPos; this.Selection.StartPos = this.CurPos.ContentPos; this.Selection.Use = true; if (this.Selection.StartPos == this.Selection.EndPos) { this.Selection_Remove(); this.Selection.Use = false; this.Set_ContentPos(Math.max(CursorPos_min, Math.min(this.Selection.EndPos, CursorPos_max)), true, -1); this.RecalculateCurPos(); return; } } else { this.Set_ContentPos(LineStartPos, true, -1); this.RecalculateCurPos(); this.CurPos.RealX = this.CurPos.X; this.CurPos.RealY = this.CurPos.Y; } } }, Cursor_MoveToStartPos: function () { this.Selection.Use = false; this.Set_ContentPos(this.Internal_GetStartPos(), true, -1); }, Cursor_MoveToEndPos: function () { this.Selection.Use = false; this.Set_ContentPos(this.Internal_GetEndPos(), true, -1); }, Cursor_MoveUp_To_LastRow: function (X, Y, AddToSelect) { this.CurPos.RealX = X; this.CurPos.RealY = Y; this.Cursor_MoveAt(X, this.Lines.length - 1, true, true, this.PageNum); if (true === AddToSelect) { if (false === this.Selection.Use) { this.Selection.Use = true; this.Selection.StartPos = this.Content.length - 1; } this.Selection.EndPos = this.CurPos.ContentPos; } }, Cursor_MoveDown_To_FirstRow: function (X, Y, AddToSelect) { this.CurPos.RealX = X; this.CurPos.RealY = Y; this.Cursor_MoveAt(X, 0, true, true, this.PageNum); if (true === AddToSelect) { if (false === this.Selection.Use) { this.Selection.Use = true; this.Selection.StartPos = this.Internal_GetStartPos(); } this.Selection.EndPos = this.CurPos.ContentPos; } }, Cursor_MoveTo_Drawing: function (Id, bBefore) { if (undefined === bBefore) { bBefore = true; } var Pos = -1; var Count = this.Content.length; for (var Index = 0; Index < Count; Index++) { var Item = this.Content[Index]; if (para_Drawing === Item.Type && Id === Item.Get_Id()) { Pos = Index; } } if (-1 === Pos) { return; } if (true != bBefore) { Pos = Pos + 1; } this.Set_ContentPos(Pos, false, -1); this.RecalculateCurPos(); this.CurPos.RealX = this.CurPos.X; this.CurPos.RealY = this.CurPos.Y; }, Set_ContentPos: function (Pos, bCorrectPos, Line) { this.CurPos.ContentPos = Math.max(0, Math.min(this.Content.length - 1, Pos)); this.CurPos.Line = (undefined === Line ? -1 : Line); if (false != bCorrectPos) { this.Internal_Correct_ContentPos(); } }, Internal_Correct_ContentPos: function () { var Count = this.Content.length; var CurPos = this.CurPos.ContentPos; var TempPos = CurPos; while (TempPos >= 0 && TempPos < Count && undefined === this.Content[TempPos].CurLine) { TempPos--; } var CurLine = (this.CurPos.Line === -1 ? (TempPos >= 0 && TempPos < Count ? this.Content[TempPos].CurLine : -1) : this.CurPos.Line); while (CurPos < Count - 1) { var Item = this.Content[CurPos]; var ItemType = Item.Type; if (para_Text === ItemType || para_Space === ItemType || para_End === ItemType || para_Tab === ItemType || (para_Drawing === ItemType && true === Item.Is_Inline()) || para_PageNum === ItemType || para_NewLine === ItemType || para_HyperlinkStart === ItemType) { break; } CurPos++; } while (CurPos > 0) { CurPos--; var Item = this.Content[CurPos]; var ItemType = Item.Type; var bEnd = false; if (para_Text === ItemType || para_Space === ItemType || para_End === ItemType || para_Tab === ItemType || (para_Drawing === ItemType && true === Item.Is_Inline()) || para_PageNum === ItemType || para_NewLine === ItemType) { this.CurPos.ContentPos = CurPos + 1; bEnd = true; } else { if (para_HyperlinkEnd === ItemType) { while (CurPos < Count - 1 && para_TextPr === this.Content[CurPos + 1].Type) { CurPos++; } this.CurPos.ContentPos = CurPos + 1; bEnd = true; } } if (true === bEnd) { TempPos = CurPos; while (TempPos >= 0 && TempPos < Count && undefined === this.Content[TempPos].CurLine) { TempPos--; } var NewLine = (TempPos >= 0 && TempPos < Count ? this.Content[TempPos].CurLine : -1); if (NewLine != CurLine && -1 != CurLine) { this.CurPos.Line = CurLine; } return; } } if (CurPos <= 0) { CurPos = 0; while (para_TextPr === this.Content[CurPos].Type || para_CollaborativeChangesEnd === this.Content[CurPos].Type || para_CollaborativeChangesStart === this.Content[CurPos].Type) { CurPos++; } this.CurPos.ContentPos = CurPos; } }, Get_CurPosXY: function () { return { X: this.CurPos.RealX, Y: this.CurPos.RealY }; }, Is_SelectionUse: function () { return this.Selection.Use; }, Internal_GetStartPos: function () { var oPos = this.Internal_FindForward(0, [para_PageNum, para_Drawing, para_Tab, para_Text, para_Space, para_NewLine, para_End]); if (true === oPos.Found) { return oPos.LetterPos; } return 0; }, Internal_GetEndPos: function () { var Res = this.Internal_FindBackward(this.Content.length - 1, [para_End]); if (true === Res.Found) { return Res.LetterPos; } return 0; }, Internal_MoveCursorBackward: function (AddToSelect, Word) { var CursorPos_max = this.Internal_GetEndPos(); var CursorPos_min = this.Internal_GetStartPos(); if (true === this.Selection.Use) { if (true === AddToSelect) { this.Set_ContentPos(this.Selection.EndPos, true, -1); } else { var StartPos = this.Selection.StartPos; var EndPos = this.Selection.EndPos; if (StartPos > EndPos) { var Temp = EndPos; EndPos = StartPos; StartPos = Temp; } this.Selection_Remove(); this.Set_ContentPos(StartPos, true, -1); return; } } if (true === this.Selection.Use) { var oPos; if (true != Word) { oPos = this.Internal_FindBackward(this.CurPos.ContentPos - 1, [para_PageNum, para_Drawing, para_Tab, para_Text, para_Space, para_NewLine, para_End]); } else { oPos = this.Internal_FindWordStart(this.CurPos.ContentPos - 1, CursorPos_min); } if (oPos.Found) { this.Selection.EndPos = oPos.LetterPos; if (this.Selection.StartPos == this.Selection.EndPos) { this.Selection_Remove(); this.Selection.Use = false; this.Set_ContentPos(Math.max(CursorPos_min, Math.min(this.Selection.EndPos, CursorPos_max)), true, -1); this.RecalculateCurPos(); return true; } return true; } else { return false; } } else { if (true == AddToSelect) { var oPos; if (true != Word) { oPos = this.Internal_FindBackward(this.CurPos.ContentPos - 1, [para_PageNum, para_Drawing, para_Tab, para_Text, para_Space, para_NewLine, para_End]); } else { oPos = this.Internal_FindWordStart(this.CurPos.ContentPos - 1, CursorPos_min); } this.Selection.StartPos = this.CurPos.ContentPos; this.Selection.Use = true; if (oPos.Found) { this.Selection.EndPos = oPos.LetterPos; return true; } else { this.Selection.Use = false; return false; } } else { var oPos; if (true != Word) { oPos = this.Internal_FindBackward(this.CurPos.ContentPos - 1, [para_PageNum, para_Drawing, para_Tab, para_Text, para_Space, para_NewLine]); } else { oPos = this.Internal_FindWordStart(this.CurPos.ContentPos - 1, CursorPos_min); } if (oPos.Found) { this.Set_ContentPos(oPos.LetterPos, true, -1); return true; } else { return false; } } } }, Internal_FindWordStart: function (Pos, Pos_min) { var LetterPos = Pos; if (Pos < Pos_min || Pos >= this.Content.length) { return { Found: false }; } while (true) { var Item = this.Content[LetterPos]; var Type = Item.Type; var bSpace = false; if (para_TextPr === Type || para_Space === Type || para_HyperlinkStart === Type || para_HyperlinkEnd === Type || para_Tab === Type || para_Empty === Type || para_CommentStart === Type || para_CommentEnd === Type || para_CollaborativeChangesEnd === Type || para_CollaborativeChangesStart === Type || (para_Text === Type && true === Item.Is_NBSP())) { bSpace = true; } if (true === bSpace) { LetterPos--; if (LetterPos < 0) { break; } } else { break; } } if (LetterPos <= Pos_min) { return { LetterPos: Pos_min, Found: true, Type: this.Content[Pos_min].Type }; } if (para_Text != this.Content[LetterPos].Type) { return { LetterPos: LetterPos, Found: true, Type: this.Content[LetterPos].Type }; } else { var bPunctuation = this.Content[LetterPos].Is_Punctuation(); var TempPos = LetterPos; while (TempPos > Pos_min) { TempPos--; var Item = this.Content[TempPos]; var TempType = Item.Type; if (! (true != Item.Is_RealContent() || para_TextPr === TempType || (para_Text === TempType && true != Item.Is_NBSP() && ((true === bPunctuation && true === Item.Is_Punctuation()) || (false === bPunctuation && false === Item.Is_Punctuation()))) || para_CommentStart === TempType || para_CommentEnd === TempType || para_HyperlinkEnd === TempType || para_HyperlinkEnd === TempType)) { break; } else { LetterPos = TempPos; } } return { LetterPos: LetterPos, Found: true, Type: this.Content[LetterPos].Type }; } return { Found: false }; }, Internal_FindWordEnd: function (Pos, Pos_max) { var LetterPos = Pos; if (Pos > Pos_max || Pos >= this.Content.length) { return { Found: false }; } var bFirst = true; var bFirstPunctuation = false; while (true) { var Item = this.Content[LetterPos]; var Type = Item.Type; var bText = false; if (para_TextPr === Type || para_HyperlinkStart === Type || para_HyperlinkEnd === Type || para_Empty === Type || (para_Text === Type && true != Item.Is_NBSP() && (true === bFirst || (bFirstPunctuation === Item.Is_Punctuation()))) || para_CommentStart === Type || para_CommentEnd === Type || para_CollaborativeChangesEnd === Type || para_CollaborativeChangesStart === Type) { bText = true; } if (true === bText) { if (true === bFirst && para_Text === Type) { bFirst = false; bFirstPunctuation = Item.Is_Punctuation(); } LetterPos++; if (LetterPos > Pos_max || LetterPos >= this.Content.length) { break; } } else { break; } } if (true === bFirst) { LetterPos++; } if (LetterPos > Pos_max) { return { Found: false }; } if (! (para_Space === this.Content[LetterPos].Type || (para_Text === this.Content[LetterPos].Type && true === this.Content[LetterPos].Is_NBSP()))) { return { LetterPos: LetterPos, Found: true, Type: this.Content[LetterPos].Type }; } else { var TempPos = LetterPos; while (TempPos < Pos_max) { TempPos++; var Item = this.Content[TempPos]; var TempType = Item.Type; if (! (true != Item.Is_RealContent() || para_TextPr === TempType || para_Space === this.Content[LetterPos].Type || (para_Text === this.Content[LetterPos].Type && true === this.Content[LetterPos].Is_NBSP()) || para_CommentStart === TempType || para_CommentEnd === TempType || para_HyperlinkEnd === TempType || para_HyperlinkEnd === TempType)) { break; } else { LetterPos = TempPos; } } return { LetterPos: LetterPos, Found: true, Type: this.Content[LetterPos].Type }; } return { Found: false }; }, Internal_MoveCursorForward: function (AddToSelect, Word) { var CursorPos_max = this.Internal_GetEndPos(); var CursorPos_min = this.Internal_GetStartPos(); if (true === this.Selection.Use) { if (true === AddToSelect) { this.Set_ContentPos(this.Selection.EndPos, false, -1); } else { var StartPos = this.Selection.StartPos; var EndPos = this.Selection.EndPos; if (StartPos > EndPos) { var Temp = EndPos; EndPos = StartPos; StartPos = Temp; } this.Selection_Remove(); this.Set_ContentPos(Math.max(CursorPos_min, Math.min(EndPos, CursorPos_max)), true, -1); return true; } } if (true == this.Selection.Use && true == AddToSelect) { var oPos; if (true != Word) { oPos = this.Internal_FindForward(this.CurPos.ContentPos + 1, [para_PageNum, para_Drawing, para_Tab, para_Text, para_Space, para_NewLine, para_End, para_Empty]); } else { oPos = this.Internal_FindWordEnd(this.CurPos.ContentPos, CursorPos_max + 1); } if (oPos.Found) { this.Selection.EndPos = oPos.LetterPos; if (this.Selection.StartPos == this.Selection.EndPos) { this.Selection_Remove(); this.Selection.Use = false; this.Set_ContentPos(Math.max(CursorPos_min, Math.min(this.Selection.EndPos, CursorPos_max)), true, -1); this.RecalculateCurPos(); return; } return true; } else { return false; } } else { if (true == AddToSelect) { var oPos; if (true != Word) { oPos = this.Internal_FindForward(this.CurPos.ContentPos + 1, [para_PageNum, para_Drawing, para_Tab, para_Text, para_Space, para_NewLine, para_End, para_Empty]); } else { oPos = this.Internal_FindWordEnd(this.CurPos.ContentPos, CursorPos_max + 1); } this.Selection.StartPos = this.CurPos.ContentPos; this.Selection.Use = true; if (oPos.Found) { this.Selection.EndPos = oPos.LetterPos; return true; } else { this.Selection.Use = false; return false; } } else { var oPos; if (true != Word) { oPos = this.Internal_FindForward(this.CurPos.ContentPos, [para_PageNum, para_Drawing, para_Tab, para_Text, para_Space, para_NewLine]); if (oPos.Found) { oPos.LetterPos++; } } else { oPos = this.Internal_FindWordEnd(this.CurPos.ContentPos, CursorPos_max); } if (oPos.Found) { this.Set_ContentPos(oPos.LetterPos, true, -1); return true; } else { return false; } } } }, Internal_Clear_EmptyTextPr: function () { var Count = this.Content.length; for (var Pos = 0; Pos < Count - 1; Pos++) { if (para_TextPr === this.Content[Pos].Type && para_TextPr === this.Content[Pos + 1].Type) { this.Internal_Content_Remove(Pos); Pos--; Count--; } } }, Internal_AddTextPr: function (TextPr) { this.Internal_Clear_EmptyTextPr(); if (undefined != TextPr.FontFamily) { var FName = TextPr.FontFamily.Name; var FIndex = TextPr.FontFamily.Index; TextPr.RFonts = new CRFonts(); TextPr.RFonts.Ascii = { Name: FName, Index: FIndex }; TextPr.RFonts.EastAsia = { Name: FName, Index: FIndex }; TextPr.RFonts.HAnsi = { Name: FName, Index: FIndex }; TextPr.RFonts.CS = { Name: FName, Index: FIndex }; } if (true === this.ApplyToAll) { this.Internal_Content_Add(0, new ParaTextPr(TextPr)); for (var Pos = 0; Pos < this.Content.length; Pos++) { if (this.Content[Pos].Type == para_TextPr) { this.Content[Pos].Apply_TextPr(TextPr); } } this.TextPr.Apply_TextPr(TextPr); return; } var Line = this.Content; var CurPos = this.CurPos.ContentPos; if (true === this.Selection.Use) { var StartPos = this.Selection.StartPos; var EndPos = this.Selection.EndPos; if (StartPos > EndPos) { var Temp = EndPos; EndPos = StartPos; StartPos = Temp; } var LastPos = this.Internal_GetEndPos(); var bEnd = false; if (EndPos > LastPos) { EndPos = LastPos; bEnd = true; } var TextPr_end = this.Internal_GetTextPr(EndPos); var TextPr_start = this.Internal_GetTextPr(StartPos); TextPr_start.Merge(TextPr); this.Internal_Content_Add(StartPos, new ParaTextPr(TextPr_start)); if (false === bEnd) { this.Internal_Content_Add(EndPos + 1, new ParaTextPr(TextPr_end)); } else { this.TextPr.Apply_TextPr(TextPr); } for (var Pos = StartPos + 1; Pos < EndPos; Pos++) { if (this.Content[Pos].Type == para_TextPr) { this.Content[Pos].Apply_TextPr(TextPr); } } return; } var oEnd = this.Internal_FindForward(CurPos, [para_PageNum, para_Drawing, para_Tab, para_Text, para_Space, para_End, para_NewLine]); var oStart = this.Internal_FindBackward(CurPos - 1, [para_PageNum, para_Drawing, para_Tab, para_Text, para_Space, para_NewLine]); var CurType = this.Content[CurPos].Type; if (!oEnd.Found) { return; } if (para_End == oEnd.Type) { var Pos = oEnd.LetterPos; var TextPr_start = this.Internal_GetTextPr(Pos); TextPr_start.Merge(TextPr); this.Internal_Content_Add(Pos, new ParaTextPr(TextPr_start)); this.Set_ContentPos(Pos + 1, false, -1); if (true === this.IsEmpty() && undefined === this.Numbering_Get()) { this.TextPr.Apply_TextPr(TextPr); } } else { if (para_PageNum === CurType || para_Drawing === CurType || para_Tab == CurType || para_Space == CurType || para_NewLine == CurType || !oStart.Found || para_NewLine == oEnd.Type || para_Space == oEnd.Type || para_NewLine == oStart.Type || para_Space == oStart.Type || para_Tab == oEnd.Type || para_Tab == oStart.Type || para_Drawing == oEnd.Type || para_Drawing == oStart.Type || para_PageNum == oEnd.Type || para_PageNum == oStart.Type) { var TextPr_old = this.Internal_GetTextPr(CurPos); var TextPr_new = TextPr_old.Copy(); TextPr_new.Merge(TextPr); this.Internal_Content_Add(CurPos, new ParaTextPr(TextPr_old)); this.Internal_Content_Add(CurPos, new ParaTextPr(TextPr_new)); this.Set_ContentPos(CurPos + 1, false, -1); this.RecalculateCurPos(); } else { var oWordStart = this.Internal_FindBackward(CurPos, [para_PageNum, para_Drawing, para_Tab, para_Space, para_NewLine]); if (!oWordStart.Found) { oWordStart = this.Internal_FindForward(0, [para_Text]); } else { oWordStart.LetterPos++; } var oWordEnd = this.Internal_FindForward(CurPos, [para_PageNum, para_Drawing, para_Tab, para_Space, para_End, para_NewLine]); if (!oWordStart.Found || !oWordEnd.Found) { return; } var TextPr_end = this.Internal_GetTextPr(oWordEnd.LetterPos); var TextPr_start = this.Internal_GetTextPr(oWordStart.LetterPos); TextPr_start.Merge(TextPr); this.Internal_Content_Add(oWordStart.LetterPos, new ParaTextPr(TextPr_start)); this.Internal_Content_Add(oWordEnd.LetterPos + 1, new ParaTextPr(TextPr_end)); this.Set_ContentPos(CurPos + 1, false, -1); for (var Pos = oWordStart.LetterPos + 1; Pos < oWordEnd.LetterPos; Pos++) { if (this.Content[Pos].Type == para_TextPr) { this.Content[Pos].Apply_TextPr(TextPr); } } } } }, Internal_AddHyperlink: function (Hyperlink_start) { var Hyperlink_end = new ParaHyperlinkEnd(); var RStyle = editor.WordControl.m_oLogicDocument.Get_Styles().Get_Default_Hyperlink(); if (true === this.ApplyToAll) { return; } var CurPos = this.CurPos.ContentPos; if (true === this.Selection.Use) { var StartPos = this.Selection.StartPos; var EndPos = this.Selection.EndPos; if (StartPos > EndPos) { var Temp = EndPos; EndPos = StartPos; StartPos = Temp; } var LastPos = this.Internal_GetEndPos(); if (EndPos > LastPos) { EndPos = LastPos; } var TextPr_end = this.Internal_GetTextPr(EndPos); var TextPr_start = this.Internal_GetTextPr(StartPos); TextPr_start.RStyle = RStyle; TextPr_start.Underline = undefined; TextPr_start.Color = undefined; this.Internal_Content_Add(EndPos, new ParaTextPr(TextPr_end)); this.Internal_Content_Add(EndPos, Hyperlink_end); this.Internal_Content_Add(StartPos, new ParaTextPr(TextPr_start)); this.Internal_Content_Add(StartPos, Hyperlink_start); for (var Pos = StartPos + 2; Pos < EndPos + 1; Pos++) { if (this.Content[Pos].Type == para_TextPr) { var Item = this.Content[Pos]; Item.Set_RStyle(RStyle); Item.Set_Underline(undefined); Item.Set_Color(undefined); } } return; } return; var oEnd = this.Internal_FindForward(CurPos, [para_PageNum, para_Drawing, para_Tab, para_Text, para_Space, para_End, para_NewLine]); var oStart = this.Internal_FindBackward(CurPos - 1, [para_PageNum, para_Drawing, para_Tab, para_Text, para_Space, para_NewLine]); var CurType = this.Content[CurPos].Type; if (!oEnd.Found) { return; } if (para_End == oEnd.Type) { var Pos = oEnd.LetterPos; var TextPr_start = this.Internal_GetTextPr(Pos); TextPr_start.Merge(TextPr); this.Internal_Content_Add(Pos, new ParaTextPr(TextPr_start)); this.Set_ContentPos(Pos + 1, false, -1); } else { if (para_PageNum === CurType || para_Drawing === CurType || para_Tab == CurType || para_Space == CurType || para_NewLine == CurType || !oStart.Found || para_NewLine == oEnd.Type || para_Space == oEnd.Type || para_NewLine == oStart.Type || para_Space == oStart.Type || para_Tab == oEnd.Type || para_Tab == oStart.Type || para_Drawing == oEnd.Type || para_Drawing == oStart.Type || para_PageNum == oEnd.Type || para_PageNum == oStart.Type) { var TextPr_old = this.Internal_GetTextPr(CurPos); var TextPr_new = TextPr_old.Copy(); TextPr_new.Merge(TextPr); this.Internal_Content_Add(CurPos, new ParaTextPr(TextPr_old)); this.Internal_Content_Add(CurPos, new ParaTextPr(TextPr_new)); this.Set_ContentPos(CurPos + 1, false, -1); this.RecalculateCurPos(); } else { var oWordStart = this.Internal_FindBackward(CurPos, [para_PageNum, para_Drawing, para_Tab, para_Space, para_NewLine]); if (!oWordStart.Found) { oWordStart = this.Internal_FindForward(0, [para_Text]); } else { oWordStart.LetterPos++; } var oWordEnd = this.Internal_FindForward(CurPos, [para_PageNum, para_Drawing, para_Tab, para_Space, para_End, para_NewLine]); if (!oWordStart.Found || !oWordEnd.Found) { return; } var TextPr_end = this.Internal_GetTextPr(oWordEnd.LetterPos); var TextPr_start = this.Internal_GetTextPr(oWordStart.LetterPos); TextPr_start.Merge(TextPr); this.Internal_Content_Add(oWordStart.LetterPos, new ParaTextPr(TextPr_start)); this.Internal_Content_Add(oWordEnd.LetterPos + 1, new ParaTextPr(TextPr_end)); this.Set_ContentPos(CurPos + 1, false, -1); for (var Pos = oWordStart.LetterPos + 1; Pos < oWordEnd.LetterPos; Pos++) { if (this.Content[Pos].Type == para_TextPr) { this.Content[Pos].Apply_TextPr(TextPr); } } } } }, Internal_GetContentPosByXY: function (X, Y, bLine, PageNum, bCheckNumbering) { if (this.Lines.length <= 0) { return { Pos: 0, End: false, InText: false }; } var PNum = 0; if ("number" == typeof(PageNum)) { PNum = PageNum - this.PageNum; } else { PNum = 0; } if (PNum >= this.Pages.length) { PNum = this.Pages.length - 1; bLine = true; Y = this.Lines.length - 1; } else { if (PNum < 0) { PNum = 0; bLine = true; Y = 0; } } var bFindY = false; var CurLine = this.Pages[PNum].FirstLine; var CurLineY = this.Pages[PNum].Y + this.Lines[CurLine].Y + this.Lines[CurLine].Metrics.Descent + this.Lines[CurLine].Metrics.LineGap; var LastLine = (PNum >= this.Pages.length - 1 ? this.Lines.length - 1 : this.Pages[PNum + 1].FirstLine - 1); if (true === bLine) { CurLine = Y; } else { while (!bFindY) { if (Y < CurLineY) { break; } if (CurLine >= LastLine) { break; } CurLine++; CurLineY = this.Lines[CurLine].Y + this.Pages[PNum].Y + this.Lines[CurLine].Metrics.Descent + this.Lines[CurLine].Metrics.LineGap; } } var CurRange = 0; var CurX = this.Lines[CurLine].Ranges[CurRange].XVisible; var DiffX = 1000000; var NumberingDiffX = 1000000; var DiffPos = -1; var bEnd = false; var bInText = false; var Result = { Pos: 0, End: false }; var StartPos = this.Lines[CurLine].StartPos; var ResultLine = -1; for (var ItemNum = StartPos; ItemNum < this.Content.length; ItemNum++) { var Item = this.Content[ItemNum]; if (undefined != Item.CurLine) { if (CurLine != Item.CurLine) { break; } if (CurRange != Item.CurRange) { CurRange = Item.CurRange; CurX = this.Lines[CurLine].Ranges[CurRange].XVisible; } } var TempDx = 0; var bCheck = false; if (ItemNum === this.Numbering.Pos) { if (para_Numbering === this.Numbering.Type) { var NumberingItem = this.Numbering; var NumPr = this.Numbering_Get(); var NumJc = this.Parent.Get_Numbering().Get_AbstractNum(NumPr.NumId).Lvl[NumPr.Lvl].Jc; var NumX0 = CurX; var NumX1 = CurX; switch (NumJc) { case align_Right: NumX0 -= NumberingItem.WidthNum; break; case align_Center: NumX0 -= NumberingItem.WidthNum / 2; NumX1 += NumberingItem.WidthNum / 2; break; case align_Left: default: NumX1 += NumberingItem.WidthNum; break; } if (X >= NumX0 && X <= NumX1) { NumberingDiffX = 0; } } CurX += this.Numbering.WidthVisible; if (-1 != DiffPos) { DiffX = Math.abs(X - CurX); DiffPos = ItemNum; } } switch (Item.Type) { case para_Drawing: if (Item.DrawingType != drawing_Inline) { bCheck = false; TempDx = 0; } else { TempDx = Item.WidthVisible; bCheck = true; } break; case para_PageNum: case para_Text: TempDx = Item.WidthVisible; bCheck = true; break; case para_Space: TempDx = Item.WidthVisible; bCheck = true; break; case para_Tab: TempDx = Item.WidthVisible; bCheck = true; break; case para_NewLine: bCheck = true; TempDx = Item.WidthVisible; break; case para_End: bEnd = true; bCheck = true; TempDx = Item.WidthVisible; break; case para_TextPr: case para_CommentEnd: case para_CommentStart: case para_CollaborativeChangesEnd: case para_CollaborativeChangesStart: case para_HyperlinkEnd: case para_HyperlinkStart: bCheck = true; TempDx = 0; break; } if (bCheck) { if (Math.abs(X - CurX) < DiffX + 0.001) { DiffX = Math.abs(X - CurX); DiffPos = ItemNum; } if (true != bEnd && ItemNum === this.Lines[CurLine].EndPos && X > CurX + TempDx && para_NewLine != Item.Type) { ResultLine = CurLine; DiffPos = ItemNum + 1; } if (bEnd) { CurX += TempDx; if (Math.abs(X - CurX) < DiffX) { Result.End = true; } break; } } if (X >= CurX - 0.001 && X <= CurX + TempDx + 0.001) { bInText = true; } CurX += TempDx; } if (true === bInText && Y >= this.Pages[PNum].Y + this.Lines[CurLine].Y - this.Lines[CurLine].Metrics.Ascent - 0.01 && Y <= this.Pages[PNum].Y + this.Lines[CurLine].Y + this.Lines[CurLine].Metrics.Descent + this.Lines[CurLine].Metrics.LineGap + 0.01) { Result.InText = true; } else { Result.InText = false; } if (NumberingDiffX <= DiffX) { Result.Numbering = true; } else { Result.Numbering = false; } Result.Pos = DiffPos; Result.Line = ResultLine; return Result; }, Internal_GetXYByContentPos: function (Pos) { return this.Internal_Recalculate_CurPos(Pos, false, false, false); }, Internal_Selection_CheckHyperlink: function () { var Direction = 1; var StartPos = this.Selection.StartPos; var EndPos = this.Selection.EndPos; if (StartPos > EndPos) { StartPos = this.Selection.EndPos; EndPos = this.Selection.StartPos; Direction = -1; } var Hyperlink_start = this.Check_Hyperlink2(StartPos); var Hyperlink_end = this.Check_Hyperlink2(EndPos); if (null != Hyperlink_start && Hyperlink_end != Hyperlink_start) { StartPos = this.Internal_FindBackward(StartPos, [para_HyperlinkStart]).LetterPos; } if (null != Hyperlink_end && Hyperlink_end != Hyperlink_start) { EndPos = this.Internal_FindForward(EndPos, [para_HyperlinkEnd]).LetterPos + 1; } if (Direction > 0) { this.Selection.StartPos = StartPos; this.Selection.EndPos = EndPos; } else { this.Selection.StartPos = EndPos; this.Selection.EndPos = StartPos; } }, Check_Hyperlink: function (X, Y, PageNum) { var Result = this.Internal_GetContentPosByXY(X, Y, false, PageNum, false); if (-1 != Result.Pos && true === Result.InText) { var Find = this.Internal_FindBackward(Result.Pos, [para_HyperlinkStart, para_HyperlinkEnd]); if (true === Find.Found && para_HyperlinkStart === Find.Type) { return this.Content[Find.LetterPos]; } } return null; }, Check_Hyperlink2: function (Pos, bCheckEnd, bNoSelectCheck) { if (undefined === bNoSelectCheck) { bNoSelectCheck = false; } if (undefined === bCheckEnd) { bCheckEnd = true; } if (true === bCheckEnd && Pos > 0) { while (this.Content[Pos - 1].Type === para_TextPr || this.Content[Pos - 1].Type === para_HyperlinkEnd || this.Content[Pos - 1].Type === para_CollaborativeChangesStart || this.Content[Pos - 1].Type === para_CollaborativeChangesEnd) { Pos--; if (Pos <= 0) { return null; } } } if (true === bNoSelectCheck) { Pos = this.Internal_Correct_HyperlinkPos(Pos); } var Find = this.Internal_FindBackward(Pos - 1, [para_HyperlinkStart, para_HyperlinkEnd]); if (true === Find.Found && para_HyperlinkStart === Find.Type) { return this.Content[Find.LetterPos]; } return null; }, Internal_Correct_HyperlinkPos: function (_Pos) { var Pos = _Pos; var Count = this.Content.length; while (Pos < Count) { var TempType = this.Content[Pos].Type; if (para_HyperlinkStart === TempType || para_TextPr === TempType || para_CollaborativeChangesEnd === TempType || para_CollaborativeChangesStart === TempType) { Pos++; } else { break; } } return Pos; }, Hyperlink_Add: function (HyperProps) { var Hyperlink = new ParaHyperlinkStart(); Hyperlink.Set_Value(HyperProps.Value); if ("undefined" != typeof(HyperProps.ToolTip) && null != HyperProps.ToolTip) { Hyperlink.Set_ToolTip(HyperProps.ToolTip); } if (true === this.Selection.Use) { this.Add(Hyperlink); } else { if (null != HyperProps.Text && "" != HyperProps.Text) { var TextPr_hyper = this.Internal_GetTextPr(this.CurPos.ContentPos); var Styles = editor.WordControl.m_oLogicDocument.Get_Styles(); TextPr_hyper.RStyle = Styles.Get_Default_Hyperlink(); TextPr_hyper.Color = undefined; TextPr_hyper.Underline = undefined; var TextPr_old = this.Internal_GetTextPr(this.CurPos.ContentPos); var Pos = this.CurPos.ContentPos; this.Internal_Content_Add(Pos, new ParaTextPr(TextPr_old)); this.Internal_Content_Add(Pos, new ParaHyperlinkEnd()); this.Internal_Content_Add(Pos, new ParaTextPr(TextPr_hyper)); this.Internal_Content_Add(Pos, Hyperlink); for (var NewPos = 0; NewPos < HyperProps.Text.length; NewPos++) { var Char = HyperProps.Text.charAt(NewPos); if (" " == Char) { this.Internal_Content_Add(Pos + 2 + NewPos, new ParaSpace()); } else { this.Internal_Content_Add(Pos + 2 + NewPos, new ParaText(Char)); } } this.Set_ContentPos(Pos + 2, false, -1); } } }, Hyperlink_Modify: function (HyperProps) { var Hyperlink = null; var Pos = -1; if (true === this.Selection.Use) { var Hyper_start = this.Check_Hyperlink2(this.Selection.StartPos); var Hyper_end = this.Check_Hyperlink2(this.Selection.EndPos); if (null != Hyper_start && Hyper_start === Hyper_end) { Hyperlink = Hyper_start; Pos = this.Selection.StartPos; } } else { Hyperlink = this.Check_Hyperlink2(this.CurPos.ContentPos, false, true); Pos = this.Internal_Correct_HyperlinkPos(this.CurPos.ContentPos); } if (null != Hyperlink) { if ("undefined" != typeof(HyperProps.Value) && null != HyperProps.Value) { Hyperlink.Set_Value(HyperProps.Value); } if ("undefined" != typeof(HyperProps.ToolTip) && null != HyperProps.ToolTip) { Hyperlink.Set_ToolTip(HyperProps.ToolTip); } if (null != HyperProps.Text) { var Find = this.Internal_FindBackward(Pos, [para_HyperlinkStart, para_HyperlinkEnd]); if (true != Find.Found || para_HyperlinkStart != Find.Type) { return false; } var Start = Find.LetterPos; var Find = this.Internal_FindForward(Pos, [para_HyperlinkStart, para_HyperlinkEnd]); if (true != Find.Found || para_HyperlinkEnd != Find.Type) { return false; } var End = Find.LetterPos; var TextPr = this.Internal_GetTextPr(End); TextPr.RStyle = editor.WordControl.m_oLogicDocument.Get_Styles().Get_Default_Hyperlink(); TextPr.Color = undefined; TextPr.Underline = undefined; this.Internal_Content_Remove2(Start + 1, End - Start - 1); this.Internal_Content_Add(Start + 1, new ParaTextPr(TextPr)); for (var NewPos = 0; NewPos < HyperProps.Text.length; NewPos++) { var Char = HyperProps.Text.charAt(NewPos); if (" " == Char) { this.Internal_Content_Add(Start + 2 + NewPos, new ParaSpace()); } else { this.Internal_Content_Add(Start + 2 + NewPos, new ParaText(Char)); } } if (true === this.Selection.Use) { this.Selection.StartPos = Start + 1; this.Selection.EndPos = Start + 2 + HyperProps.Text.length; this.Set_ContentPos(this.Selection.EndPos); } else { this.Set_ContentPos(Start + 2, false); } return true; } return false; } return false; }, Hyperlink_Remove: function () { var Pos = -1; if (true === this.Selection.Use) { var Hyper_start = this.Check_Hyperlink2(this.Selection.StartPos); var Hyper_end = this.Check_Hyperlink2(this.Selection.EndPos); if (null != Hyper_start && Hyper_start === Hyper_end) { Pos = (this.Selection.StartPos <= this.Selection.EndPos ? this.Selection.StartPos : this.Selection.EndPos); } } else { var Hyper_cur = this.Check_Hyperlink2(this.CurPos.ContentPos, false, true); if (null != Hyper_cur) { Pos = this.Internal_Correct_HyperlinkPos(this.CurPos.ContentPos); } } if (-1 != Pos) { var Find = this.Internal_FindForward(Pos, [para_HyperlinkStart, para_HyperlinkEnd]); if (true === Find.Found && para_HyperlinkEnd === Find.Type) { this.Internal_Content_Remove(Find.LetterPos); } var EndPos = Find.LetterPos - 2; Find = this.Internal_FindBackward(Pos, [para_HyperlinkStart, para_HyperlinkEnd]); if (true === Find.Found && para_HyperlinkStart === Find.Type) { this.Internal_Content_Remove(Find.LetterPos); } var StartPos = Find.LetterPos; var RStyle = editor.WordControl.m_oLogicDocument.Get_Styles().Get_Default_Hyperlink(); for (var Index = StartPos; Index <= EndPos; Index++) { var Item = this.Content[Index]; if (para_TextPr === Item.Type && Item.Value.RStyle === RStyle) { Item.Set_RStyle(undefined); } } this.RecalcInfo.Set_Type_0(pararecalc_0_All); this.Internal_Recalculate_0(); this.ReDraw(); return true; } return false; }, Hyperlink_CanAdd: function (bCheckInHyperlink) { if (true === bCheckInHyperlink) { if (true === this.Selection.Use) { var StartPos = this.Selection.StartPos; var EndPos = this.Selection.EndPos; if (EndPos < StartPos) { StartPos = this.Selection.EndPos; EndPos = this.Selection.StartPos; } var Find = this.Internal_FindBackward(StartPos, [para_HyperlinkStart, para_HyperlinkEnd]); if (true === Find.Found && para_HyperlinkStart === Find.Type) { return false; } for (var Pos = StartPos; Pos < EndPos; Pos++) { var Item = this.Content[Pos]; switch (Item.Type) { case para_HyperlinkStart: case para_HyperlinkEnd: case para_End: return false; } } return true; } else { var Hyper_cur = this.Check_Hyperlink2(this.CurPos.ContentPos); if (null != Hyper_cur) { return false; } else { return true; } } } else { if (true === this.Selection.Use) { var StartPos = this.Selection.StartPos; var EndPos = this.Selection.EndPos; if (EndPos < StartPos) { StartPos = this.Selection.EndPos; EndPos = this.Selection.StartPos; } var bHyper = false; for (var Pos = StartPos; Pos < EndPos; Pos++) { var Item = this.Content[Pos]; switch (Item.Type) { case para_HyperlinkStart: if (true === bHyper) { return false; } bHyper = true; break; case para_HyperlinkEnd: bHyper = true; break; case para_End: return false; } } return true; } else { return true; } } }, Hyperlink_Check: function (bCheckEnd) { if (true === this.Selection.Use) { var Hyper_start = this.Check_Hyperlink2(this.Selection.StartPos); var Hyper_end = this.Check_Hyperlink2(this.Selection.EndPos); if (Hyper_start === Hyper_end && null != Hyper_start) { return Hyper_start; } } else { var Hyper_cur = this.Check_Hyperlink2(this.CurPos.ContentPos, bCheckEnd); if (null != Hyper_cur) { return Hyper_cur; } } return null; }, Cursor_MoveAt: function (X, Y, bLine, bDontChangeRealPos, PageNum) { var TempPos = this.Internal_GetContentPosByXY(X, Y, bLine, PageNum); var Pos = TempPos.Pos; var Line = TempPos.Line; if (-1 != Pos) { this.Set_ContentPos(Pos, true, Line); } this.Internal_Recalculate_CurPos(Pos, false, false, false); if (bDontChangeRealPos != true) { this.CurPos.RealX = this.CurPos.X; this.CurPos.RealY = this.CurPos.Y; } if (true != bLine) { this.CurPos.RealX = X; this.CurPos.RealY = Y; } }, Selection_SetStart: function (X, Y, PageNum, bTableBorder) { var Pos = this.Internal_GetContentPosByXY(X, Y, false, PageNum); if (-1 != Pos.Pos) { if (true === Pos.End) { this.Selection.StartPos = Pos.Pos + 1; } else { this.Selection.StartPos = Pos.Pos; } this.Set_ContentPos(Pos.Pos, true, Pos.Line); this.Selection.Use = true; this.Selection.Start = true; this.Selection.Flag = selectionflag_Common; } }, Selection_SetEnd: function (X, Y, PageNum, MouseEvent, bTableBorder) { var PagesCount = this.Pages.length; if (false === editor.isViewMode && null === this.Parent.Is_HdrFtr(true) && null == this.Get_DocumentNext() && PageNum - this.PageNum >= PagesCount - 1 && Y > this.Pages[PagesCount - 1].Bounds.Bottom && MouseEvent.ClickCount >= 2) { return this.Parent.Extend_ToPos(X, Y); } this.CurPos.RealX = X; this.CurPos.RealY = Y; var Temp = this.Internal_GetContentPosByXY(X, Y, false, PageNum); var Pos = Temp.Pos; if (-1 != Pos) { this.Set_ContentPos(Pos, true, Temp.Line); if (true === Temp.End) { if (PageNum - this.PageNum >= PagesCount - 1 && X > this.Lines[this.Lines.length - 1].Ranges[this.Lines[this.Lines.length - 1].Ranges.length - 1].W && MouseEvent.ClickCount >= 2 && Y <= this.Pages[PagesCount - 1].Bounds.Bottom) { if (false === editor.isViewMode && false === editor.WordControl.m_oLogicDocument.Document_Is_SelectionLocked(changestype_None, { Type: changestype_2_Element_and_Type, Element: this, CheckType: changestype_Paragraph_Content })) { History.Create_NewPoint(); History.Set_Additional_ExtendDocumentToPos(); this.Extend_ToPos(X); this.Cursor_MoveToEndPos(); this.Document_SetThisElementCurrent(); editor.WordControl.m_oLogicDocument.Recalculate(); return; } } this.Selection.EndPos = Pos + 1; } else { this.Selection.EndPos = Pos; } if (this.Selection.EndPos == this.Selection.StartPos && g_mouse_event_type_up === MouseEvent.Type) { var NumPr = this.Numbering_Get(); if (true === Temp.Numbering && undefined != NumPr) { this.Set_ContentPos(0, true, -1); this.Parent.Document_SelectNumbering(NumPr); } else { var Temp2 = MouseEvent.ClickCount % 2; if (1 >= MouseEvent.ClickCount) { this.Selection_Remove(); this.Selection.Use = false; this.Set_ContentPos(Pos, true, Temp.Line); this.RecalculateCurPos(); return; } else { if (0 == Temp2) { var oStart; if (this.Content[Pos].Type == para_Space) { oStart = this.Internal_FindBackward(Pos, [para_Text, para_NewLine]); if (!oStart.Found) { oStart.LetterPos = this.Internal_GetStartPos(); } else { if (oStart.Type == para_NewLine) { oStart.LetterPos++; } else { oStart = this.Internal_FindBackward(oStart.LetterPos, [para_Tab, para_Space, para_NewLine]); if (!oStart.Found) { oStart.LetterPos = this.Internal_GetStartPos(); } else { oStart = this.Internal_FindForward(oStart.LetterPos, [para_Text]); if (!oStart.Found) { oStart.LetterPos = this.Internal_GetStartPos(); } } } } } else { oStart = this.Internal_FindBackward(Pos, [para_Tab, para_Space, para_NewLine]); if (!oStart.Found) { oStart.LetterPos = this.Internal_GetStartPos(); } else { oStart = this.Internal_FindForward(oStart.LetterPos, [para_Text, para_NewLine]); if (!oStart.Found) { oStart.LetterPos = this.Internal_GetStartPos(); } } } var oEnd = this.Internal_FindForward(Pos, [para_Tab, para_Space, para_NewLine]); if (!oEnd.Found) { oEnd.LetterPos = this.Content.length - 1; } else { if (oEnd.Type != para_NewLine) { oEnd = this.Internal_FindForward(oEnd.LetterPos, [para_Text]); if (!oEnd.Found) { oEnd.LetterPos = this.Content.length - 1; } } } this.Selection.StartPos = oStart.LetterPos; this.Selection.EndPos = oEnd.LetterPos; this.Selection.Use = true; } else { this.Selection.StartPos = this.Internal_GetStartPos(); this.Selection.EndPos = this.Content.length - 1; this.Selection.Use = true; } } } } } if (-1 === this.Selection.EndPos) { return; } }, Selection_Stop: function (X, Y, PageNum, MouseEvent) { this.Selection.Start = false; }, Selection_Remove: function () { this.Selection.Use = false; this.Selection.Flag = selectionflag_Common; this.Selection_Clear(); }, Selection_Clear: function () {}, Selection_Draw_Page: function (Page_abs) { if (true != this.Selection.Use) { return; } var CurPage = Page_abs - this.Get_StartPage_Absolute(); if (CurPage < 0 || CurPage >= this.Pages.length) { return; } if (0 === CurPage && this.Pages[0].EndLine < 0) { return; } switch (this.Selection.Flag) { case selectionflag_Common: var StartPos = this.Selection.StartPos; var EndPos = this.Selection.EndPos; if (StartPos > EndPos) { var Temp = EndPos; EndPos = StartPos; StartPos = Temp; } var _StartLine = this.Pages[CurPage].StartLine; var _EndLine = this.Pages[CurPage].EndLine; if (StartPos > this.Lines[_EndLine].EndPos + 1 || EndPos < this.Lines[_StartLine].StartPos) { return; } else { StartPos = Math.max(StartPos, this.Lines[_StartLine].StartPos); EndPos = Math.min(EndPos, (_EndLine != this.Lines.length - 1 ? this.Lines[_EndLine].EndPos + 1 : this.Content.length - 1)); } var StartParaPos = this.Internal_Get_ParaPos_By_Pos(StartPos); var CurLine = StartParaPos.Line; var CurRange = StartParaPos.Range; var PNum = StartParaPos.Page; var StartX = this.Lines[CurLine].Ranges[CurRange].XVisible; var Pos, Item; if (this.Numbering.Pos >= this.Lines[CurLine].Ranges[CurRange].StartPos) { StartX += this.Numbering.WidthVisible; } for (Pos = this.Lines[CurLine].Ranges[CurRange].StartPos; Pos <= StartPos - 1; Pos++) { Item = this.Content[Pos]; if (undefined != Item.WidthVisible && (para_Drawing != Item.Type || drawing_Inline === Item.DrawingType)) { StartX += Item.WidthVisible; } } if (this.Pages[PNum].StartLine > CurLine) { CurLine = this.Pages[PNum].StartLine; CurRange = 0; StartX = this.Lines[CurLine].Ranges[CurRange].XVisible; StartPos = this.Lines[this.Pages[PNum].StartLine].StartPos; } var StartY = this.Pages[PNum].Y + this.Lines[CurLine].Top; var H = this.Lines[CurLine].Bottom - this.Lines[CurLine].Top; var W = 0; for (Pos = StartPos; Pos < EndPos; Pos++) { Item = this.Content[Pos]; if (undefined != Item.CurPage) { if (CurLine < Item.CurLine) { this.DrawingDocument.AddPageSelection(Page_abs, StartX, StartY, W, H); CurLine = Item.CurLine; CurRange = Item.CurRange; StartX = this.Lines[CurLine].Ranges[CurRange].XVisible; StartY = this.Pages[PNum].Y + this.Lines[CurLine].Top; H = this.Lines[CurLine].Bottom - this.Lines[CurLine].Top; W = 0; } else { if (CurRange < Item.CurRange) { this.DrawingDocument.AddPageSelection(Page_abs, StartX, StartY, W, H); CurRange = Item.CurRange; StartX = this.Lines[CurLine].Ranges[CurRange].XVisible; W = 0; } } } if (undefined != Item.WidthVisible) { if (para_Drawing != Item.Type || drawing_Inline === Item.DrawingType) { W += Item.WidthVisible; } else { Item.Draw_Selection(); } } if (Pos == EndPos - 1) { this.DrawingDocument.AddPageSelection(Page_abs, StartX, StartY, W, H); } } break; case selectionflag_Numbering: var ParaNum = this.Numbering; var NumberingPos = this.Numbering.Pos; if (-1 === NumberingPos) { break; } var ParaNumPos = this.Internal_Get_ParaPos_By_Pos(NumberingPos); if (ParaNumPos.Page != CurPage) { break; } var CurRange = ParaNumPos.Range; var CurLine = ParaNumPos.Line; var NumPr = this.Numbering_Get(); var SelectX = this.Lines[CurLine].Ranges[CurRange].XVisible; var SelectW = ParaNum.WidthVisible; var NumJc = this.Parent.Get_Numbering().Get_AbstractNum(NumPr.NumId).Lvl[NumPr.Lvl].Jc; switch (NumJc) { case align_Center: SelectX = this.Lines[CurLine].Ranges[CurRange].XVisible - ParaNum.WidthNum / 2; SelectW = ParaNum.WidthVisible + ParaNum.WidthNum / 2; break; case align_Right: SelectX = this.Lines[CurLine].Ranges[CurRange].XVisible - ParaNum.WidthNum; SelectW = ParaNum.WidthVisible + ParaNum.WidthNum; break; case align_Left: default: SelectX = this.Lines[CurLine].Ranges[CurRange].XVisible; SelectW = ParaNum.WidthVisible; break; } this.DrawingDocument.AddPageSelection(Page_abs, SelectX, this.Lines[CurLine].Top + this.Pages[CurPage].Y, SelectW, this.Lines[CurLine].Bottom - this.Lines[CurLine].Top); break; } }, Selection_Check: function (X, Y, Page_Abs) { var PageIndex = Page_Abs - this.Get_StartPage_Absolute(); if (PageIndex < 0 || PageIndex >= this.Pages.length || true != this.Selection.Use) { return false; } var Start = this.Selection.StartPos; var End = this.Selection.EndPos; if (Start > End) { Start = this.Selection.EndPos; End = this.Selection.StartPos; } var ContentPos = this.Internal_GetContentPosByXY(X, Y, false, PageIndex + this.PageNum, false); if (-1 != ContentPos.Pos && Start <= ContentPos.Pos && End >= ContentPos.Pos) { return true; } return false; }, Selection_CalculateTextPr: function () { if (true === this.Selection.Use || true === this.ApplyToAll) { var StartPos = this.Selection.StartPos; var EndPos = this.Selection.EndPos; if (true === this.ApplyToAll) { StartPos = 0; EndPos = this.Content.length - 1; } if (StartPos > EndPos) { var Temp = EndPos; EndPos = StartPos; StartPos = Temp; } if (EndPos >= this.Content.length) { EndPos = this.Content.length - 1; } if (StartPos < 0) { StartPos = 0; } if (StartPos == EndPos) { return this.Internal_CalculateTextPr(StartPos); } while (this.Content[StartPos].Type == para_TextPr) { StartPos++; } var oEnd = this.Internal_FindBackward(EndPos - 1, [para_Text, para_Space]); if (oEnd.Found) { EndPos = oEnd.LetterPos; } else { while (this.Content[EndPos].Type == para_TextPr) { EndPos--; } } var TextPr_start = this.Internal_CalculateTextPr(StartPos); var TextPr_vis = TextPr_start; for (var Pos = StartPos + 1; Pos < EndPos; Pos++) { var Item = this.Content[Pos]; if (para_TextPr == Item.Type && Pos < this.Content.length - 1 && para_TextPr != this.Content[Pos + 1].Type) { var TextPr_cur = this.Internal_CalculateTextPr(Pos); TextPr_vis = TextPr_vis.Compare(TextPr_cur); } } return TextPr_vis; } else { return new CTextPr(); } }, Selection_SelectNumbering: function () { if (undefined != this.Numbering_Get()) { this.Selection.Use = true; this.Selection.Flag = selectionflag_Numbering; } }, Select_All: function () { this.Selection.Use = true; this.Selection.StartPos = this.Internal_GetStartPos(); this.Selection.EndPos = this.Content.length - 1; }, Get_SelectedText: function (bClearText) { if (true === this.ApplyToAll) { var Str = ""; var Count = this.Content.length; for (var Pos = 0; Pos < Count; Pos++) { var Item = this.Content[Pos]; switch (Item.Type) { case para_Drawing: case para_End: case para_Numbering: case para_PresentationNumbering: case para_PageNum: if (true === bClearText) { return null; } break; case para_Text: Str += Item.Value; break; case para_Space: case para_Tab: Str += " "; break; } } return Str; } if (true === this.Selection.Use) { var StartPos = this.Selection.StartPos; var EndPos = this.Selection.EndPos; if (EndPos < StartPos) { StartPos = this.Selection.EndPos; EndPos = this.Selection.StartPos; } var Str = ""; for (var Pos = StartPos; Pos < EndPos; Pos++) { var Item = this.Content[Pos]; switch (Item.Type) { case para_Drawing: case para_End: case para_Numbering: case para_PresentationNumbering: case para_PageNum: if (true === bClearText) { return null; } break; case para_Text: Str += Item.Value; break; case para_Space: case para_Tab: Str += " "; break; } } return Str; } return ""; }, Get_SelectedElementsInfo: function (Info) { Info.Set_Paragraph(this); }, IsEmpty: function () { var Pos = this.Internal_FindForward(0, [para_Tab, para_Drawing, para_PageNum, para_Text, para_Space, para_NewLine]); return (Pos.Found === true ? false : true); }, Is_InText: function (X, Y, PageNum_Abs) { var PNum = PageNum_Abs - this.Get_StartPage_Absolute(); if (PNum < 0 || PNum >= this.Pages.length) { return null; } var Result = this.Internal_GetContentPosByXY(X, Y, false, PNum + this.PageNum, false); if (true === Result.InText) { return this; } return null; }, Is_UseInDocument: function () { if (null != this.Parent) { return this.Parent.Is_UseInDocument(this.Get_Id()); } return false; }, Selection_IsEmpty: function (bCheckHidden) { if (undefined === bCheckHidden) { bCheckHidden = true; } if (true === this.Selection.Use) { var StartPos = this.Selection.StartPos; var EndPos = this.Selection.EndPos; if (StartPos > EndPos) { var Temp = EndPos; EndPos = StartPos; StartPos = Temp; } var CheckArray = [para_PageNum, para_Drawing, para_Tab, para_Text, para_Space, para_NewLine]; if (true === bCheckHidden) { CheckArray.push(para_End); } var Pos = this.Internal_FindForward(StartPos, CheckArray); if (true != Pos.Found) { return true; } if (Pos.LetterPos >= EndPos) { return true; } return false; } return true; }, Numbering_Add: function (NumId, Lvl) { var ParaPr = this.Get_CompiledPr2(false).ParaPr; var NumPr_old = this.Numbering_Get(); this.Numbering_Remove(); var SelectionUse = this.Is_SelectionUse(); var SelectedOneElement = this.Parent.Selection_Is_OneElement(); var Count = this.Content.length; var TabsCount = 0; var TabsPos = new Array(); for (var Pos = 0; Pos < Count; Pos++) { var Item = this.Content[Pos]; var ItemType = Item.Type; if (para_Tab === ItemType) { TabsCount++; TabsPos.push(Pos); } else { if (para_Text === ItemType || para_Space === ItemType || (para_Drawing === ItemType && true === Item.Is_Inline()) || para_PageNum === ItemType) { break; } } } var X = ParaPr.Ind.Left + ParaPr.Ind.FirstLine; var LeftX = X; if (TabsCount > 0 && ParaPr.Ind.FirstLine < 0) { X = ParaPr.Ind.Left; LeftX = X; TabsCount--; } var ParaTabsCount = ParaPr.Tabs.Get_Count(); while (TabsCount) { var TabFound = false; for (var TabIndex = 0; TabIndex < ParaTabsCount; TabIndex++) { var Tab = ParaPr.Tabs.Get(TabIndex); if (Tab.Pos > X) { X = Tab.Pos; TabFound = true; break; } } if (false === TabFound) { var NewX = 0; while (X >= NewX) { NewX += Default_Tab_Stop; } X = NewX; } TabsCount--; } var Numbering = this.Parent.Get_Numbering(); var AbstractNum = Numbering.Get_AbstractNum(NumId); if (undefined === NumPr_old) { if (true === SelectedOneElement || false === SelectionUse) { var Prev = this.Get_DocumentPrev(); var PrevNumbering = (null != Prev ? (type_Paragraph === Prev.GetType() ? Prev.Numbering_Get() : undefined) : undefined); if (undefined != PrevNumbering && NumId === PrevNumbering.NumId && Lvl === PrevNumbering.Lvl) { var NewFirstLine = Prev.Pr.Ind.FirstLine; var NewLeft = Prev.Pr.Ind.Left; History.Add(this, { Type: historyitem_Paragraph_Ind_First, Old: (undefined != this.Pr.Ind.FirstLine ? this.Pr.Ind.FirstLine : undefined), New: NewFirstLine }); History.Add(this, { Type: historyitem_Paragraph_Ind_Left, Old: (undefined != this.Pr.Ind.Left ? this.Pr.Ind.Left : undefined), New: NewLeft }); this.Pr.Ind.FirstLine = NewFirstLine; this.Pr.Ind.Left = NewLeft; } else { var NumLvl = AbstractNum.Lvl[Lvl]; var NumParaPr = NumLvl.ParaPr; if (undefined != NumParaPr.Ind && undefined != NumParaPr.Ind.Left) { AbstractNum.Change_LeftInd(X + NumParaPr.Ind.Left); History.Add(this, { Type: historyitem_Paragraph_Ind_First, Old: (undefined != this.Pr.Ind.FirstLine ? this.Pr.Ind.FirstLine : undefined), New: undefined }); History.Add(this, { Type: historyitem_Paragraph_Ind_Left, Old: (undefined != this.Pr.Ind.Left ? this.Pr.Ind.Left : undefined), New: undefined }); this.Pr.Ind.FirstLine = undefined; this.Pr.Ind.Left = undefined; } } this.Pr.NumPr = new CNumPr(); this.Pr.NumPr.Set(NumId, Lvl); History.Add(this, { Type: historyitem_Paragraph_Numbering, Old: NumPr_old, New: this.Pr.NumPr }); } else { var LvlFound = -1; var LvlsCount = AbstractNum.Lvl.length; for (var LvlIndex = 0; LvlIndex < LvlsCount; LvlIndex++) { var NumLvl = AbstractNum.Lvl[LvlIndex]; var NumParaPr = NumLvl.ParaPr; if (undefined != NumParaPr.Ind && undefined != NumParaPr.Ind.Left && X <= NumParaPr.Ind.Left) { LvlFound = LvlIndex; break; } } if (-1 === LvlFound) { LvlFound = LvlsCount - 1; } if (undefined != this.Pr.Ind && undefined != NumParaPr.Ind && undefined != NumParaPr.Ind.Left) { History.Add(this, { Type: historyitem_Paragraph_Ind_First, Old: (undefined != this.Pr.Ind.FirstLine ? this.Pr.Ind.FirstLine : undefined), New: undefined }); History.Add(this, { Type: historyitem_Paragraph_Ind_Left, Old: (undefined != this.Pr.Ind.Left ? this.Pr.Ind.Left : undefined), New: undefined }); this.Pr.Ind.FirstLine = undefined; this.Pr.Ind.Left = undefined; } this.Pr.NumPr = new CNumPr(); this.Pr.NumPr.Set(NumId, LvlFound); History.Add(this, { Type: historyitem_Paragraph_Numbering, Old: NumPr_old, New: this.Pr.NumPr }); } TabsCount = TabsPos.length; while (TabsCount) { var Pos = TabsPos[TabsCount - 1]; this.Internal_Content_Remove(Pos); TabsCount--; } } else { this.Pr.NumPr = new CNumPr(); this.Pr.NumPr.Set(NumId, Lvl); History.Add(this, { Type: historyitem_Paragraph_Numbering, Old: NumPr_old, New: this.Pr.NumPr }); var Left = (NumPr_old.Lvl === Lvl ? undefined : ParaPr.Ind.Left); var FirstLine = (NumPr_old.Lvl === Lvl ? undefined : ParaPr.Ind.FirstLine); History.Add(this, { Type: historyitem_Paragraph_Ind_First, Old: (undefined != this.Pr.Ind.FirstLine ? this.Pr.Ind.FirstLine : undefined), New: Left }); History.Add(this, { Type: historyitem_Paragraph_Ind_Left, Old: (undefined != this.Pr.Ind.Left ? this.Pr.Ind.Left : undefined), New: FirstLine }); this.Pr.Ind.FirstLine = FirstLine; this.Pr.Ind.Left = Left; } if (undefined === this.Style_Get()) { this.Style_Add(this.Parent.Get_Styles().Get_Default_ParaList()); } this.CompiledPr.NeedRecalc = true; }, Numbering_Set: function (NumId, Lvl) { var NumPr_old = this.Pr.NumPr; this.Pr.NumPr = new CNumPr(); this.Pr.NumPr.Set(NumId, Lvl); History.Add(this, { Type: historyitem_Paragraph_Numbering, Old: NumPr_old, New: this.Pr.NumPr }); this.CompiledPr.NeedRecalc = true; }, Numbering_IndDec_Level: function (bIncrease) { var NumPr = this.Numbering_Get(); if (undefined != NumPr) { var NewLvl; if (true === bIncrease) { NewLvl = Math.min(8, NumPr.Lvl + 1); } else { NewLvl = Math.max(0, NumPr.Lvl - 1); } this.Pr.NumPr = new CNumPr(); this.Pr.NumPr.Set(NumPr.NumId, NewLvl); History.Add(this, { Type: historyitem_Paragraph_Numbering, Old: NumPr, New: this.Pr.NumPr }); this.CompiledPr.NeedRecalc = true; } }, Numbering_Add_Open: function (NumId, Lvl) { this.Pr.NumPr = new CNumPr(); this.Pr.NumPr.Set(NumId, Lvl); this.CompiledPr.NeedRecalc = true; }, Numbering_Get: function () { var NumPr = this.Get_CompiledPr2(false).ParaPr.NumPr; if (undefined != NumPr && 0 != NumPr.NumId) { return NumPr.Copy(); } return undefined; }, Numbering_Remove: function () { var OldNumPr = this.Numbering_Get(); var NewNumPr = undefined; if (undefined != this.CompiledPr.Pr.ParaPr.StyleNumPr) { NewNumPr = new CNumPr(); NewNumPr.Set(0, 0); } History.Add(this, { Type: historyitem_Paragraph_Numbering, Old: undefined != this.Pr.NumPr ? this.Pr.NumPr : undefined, New: NewNumPr }); this.Pr.NumPr = NewNumPr; if (undefined != this.Pr.Ind && undefined != OldNumPr) { if (undefined === this.Pr.Ind.FirstLine || Math.abs(this.Pr.Ind.FirstLine) < 0.001) { if (undefined != OldNumPr && undefined != OldNumPr.NumId) { var Lvl = this.Parent.Get_Numbering().Get_AbstractNum(OldNumPr.NumId).Lvl[OldNumPr.Lvl]; if (undefined != Lvl && undefined != Lvl.ParaPr.Ind && undefined != Lvl.ParaPr.Ind.Left) { var CurParaPr = this.Get_CompiledPr2(false).ParaPr; var Left = CurParaPr.Ind.Left + CurParaPr.Ind.FirstLine; History.Add(this, { Type: historyitem_Paragraph_Ind_Left, New: Left, Old: this.Pr.Ind.Left }); History.Add(this, { Type: historyitem_Paragraph_Ind_First, New: 0, Old: this.Pr.Ind.FirstLine }); this.Pr.Ind.Left = Left; this.Pr.Ind.FirstLine = 0; } } } else { if (this.Pr.Ind.FirstLine < 0) { History.Add(this, { Type: historyitem_Paragraph_Ind_First, New: 0, Old: this.Pr.Ind.FirstLine }); this.Pr.Ind.FirstLine = 0; } else { if (undefined != this.Pr.Ind.Left && this.Pr.Ind.FirstLine > 0) { History.Add(this, { Type: historyitem_Paragraph_Ind_Left, New: this.Pr.Ind.Left + this.Pr.Ind.FirstLine, Old: this.Pr.Ind.Left }); History.Add(this, { Type: historyitem_Paragraph_Ind_First, New: 0, Old: this.Pr.Ind.FirstLine }); this.Pr.Ind.Left += this.Pr.Ind.FirstLine; this.Pr.Ind.FirstLine = 0; } } } } var StyleId = this.Style_Get(); var NumStyleId = this.Parent.Get_Styles().Get_Default_ParaList(); if (StyleId === NumStyleId) { this.Style_Remove(); } this.CompiledPr.NeedRecalc = true; }, Numbering_IsUse: function (NumId, Lvl) { var bLvl = (undefined === Lvl ? false : true); var NumPr = this.Numbering_Get(); if (undefined != NumPr && NumId === NumPr.NumId && (false === bLvl || Lvl === NumPr.Lvl)) { return true; } return false; }, Add_PresentationNumbering: function (_Bullet) { var Bullet = _Bullet.Copy(); History.Add(this, { Type: historyitem_Paragraph_PresentationPr_Bullet, New: Bullet, Old: this.PresentationPr.Bullet }); var OldType = this.PresentationPr.Bullet.Get_Type(); var NewType = Bullet.Get_Type(); this.PresentationPr.Bullet = Bullet; if (OldType != NewType) { var ParaPr = this.Get_CompiledPr2(false).ParaPr; var LeftInd = Math.min(ParaPr.Ind.Left, ParaPr.Ind.Left + ParaPr.Ind.FirstLine); if (numbering_presentationnumfrmt_None === NewType) { this.Set_Ind({ FirstLine: 0, Left: LeftInd }); } else { if (numbering_presentationnumfrmt_RomanLcPeriod === NewType || numbering_presentationnumfrmt_RomanUcPeriod === NewType) { this.Set_Ind({ Left: LeftInd + 15.9, FirstLine: -15.9 }); } else { this.Set_Ind({ Left: LeftInd + 14.3, FirstLine: -14.3 }); } } } }, Get_PresentationNumbering: function () { return this.PresentationPr.Bullet; }, Remove_PresentationNumbering: function () { this.Add_PresentationNumbering(new CPresentationBullet()); }, Set_PresentationLevel: function (Level) { if (this.PresentationPr.Level != Level) { History.Add(this, { Type: historyitem_Paragraph_PresentationPr_Level, Old: this.PresentationPr.Level, New: Level }); this.PresentationPr.Level = Level; } }, Get_CompiledPr: function () { var Pr = this.Get_CompiledPr2(); var StyleId = this.Style_Get(); var PrevEl = this.Get_DocumentPrev(); var NextEl = this.Get_DocumentNext(); var NumPr = this.Numbering_Get(); if (null != PrevEl && type_Paragraph === PrevEl.GetType()) { var PrevStyle = PrevEl.Style_Get(); var Prev_Pr = PrevEl.Get_CompiledPr2(false).ParaPr; var Prev_After = Prev_Pr.Spacing.After; var Prev_AfterAuto = Prev_Pr.Spacing.AfterAutoSpacing; var Cur_Before = Pr.ParaPr.Spacing.Before; var Cur_BeforeAuto = Pr.ParaPr.Spacing.BeforeAutoSpacing; var Prev_NumPr = PrevEl.Numbering_Get(); if (PrevStyle === StyleId && true === Pr.ParaPr.ContextualSpacing) { Pr.ParaPr.Spacing.Before = 0; } else { if (true === Cur_BeforeAuto && PrevStyle === StyleId && undefined != Prev_NumPr && undefined != NumPr && Prev_NumPr.NumId === NumPr.NumId) { Pr.ParaPr.Spacing.Before = 0; } else { Cur_Before = this.Internal_CalculateAutoSpacing(Cur_Before, Cur_BeforeAuto, this); Prev_After = this.Internal_CalculateAutoSpacing(Prev_After, Prev_AfterAuto, this); if (true === Prev_Pr.ContextualSpacing && PrevStyle === StyleId) { Prev_After = 0; } Pr.ParaPr.Spacing.Before = Math.max(Prev_After, Cur_Before) - Prev_After; } } if (false === this.Internal_Is_NullBorders(Pr.ParaPr.Brd) && true === this.Internal_CompareBrd(Prev_Pr, Pr.ParaPr)) { Pr.ParaPr.Brd.First = false; } else { Pr.ParaPr.Brd.First = true; } } else { if (null === PrevEl) { if (true === Pr.ParaPr.Spacing.BeforeAutoSpacing) { Pr.ParaPr.Spacing.Before = 0; } } else { if (type_Table === PrevEl.GetType()) { if (true === Pr.ParaPr.Spacing.BeforeAutoSpacing) { Pr.ParaPr.Spacing.Before = 14 * g_dKoef_pt_to_mm; } } } } if (null != NextEl) { if (type_Paragraph === NextEl.GetType()) { var NextStyle = NextEl.Style_Get(); var Next_Pr = NextEl.Get_CompiledPr2(false).ParaPr; var Next_Before = Next_Pr.Spacing.Before; var Next_BeforeAuto = Next_Pr.Spacing.BeforeAutoSpacing; var Cur_After = Pr.ParaPr.Spacing.After; var Cur_AfterAuto = Pr.ParaPr.Spacing.AfterAutoSpacing; var Next_NumPr = NextEl.Numbering_Get(); if (NextStyle === StyleId && true === Pr.ParaPr.ContextualSpacing) { Pr.ParaPr.Spacing.After = 0; } else { if (true === Cur_AfterAuto && NextStyle === StyleId && undefined != Next_NumPr && undefined != NumPr && Next_NumPr.NumId === NumPr.NumId) { Pr.ParaPr.Spacing.After = 0; } else { Pr.ParaPr.Spacing.After = this.Internal_CalculateAutoSpacing(Cur_After, Cur_AfterAuto, this); } } if (false === this.Internal_Is_NullBorders(Pr.ParaPr.Brd) && true === this.Internal_CompareBrd(Next_Pr, Pr.ParaPr)) { Pr.ParaPr.Brd.Last = false; } else { Pr.ParaPr.Brd.Last = true; } } else { if (type_Table === NextEl.GetType()) { var TableFirstParagraph = NextEl.Get_FirstParagraph(); if (null != TableFirstParagraph && undefined != TableFirstParagraph) { var NextStyle = TableFirstParagraph.Style_Get(); var Next_Before = TableFirstParagraph.Get_CompiledPr2(false).ParaPr.Spacing.Before; var Next_BeforeAuto = TableFirstParagraph.Get_CompiledPr2(false).ParaPr.Spacing.BeforeAutoSpacing; var Cur_After = Pr.ParaPr.Spacing.After; var Cur_AfterAuto = Pr.ParaPr.Spacing.AfterAutoSpacing; if (NextStyle === StyleId && true === Pr.ParaPr.ContextualSpacing) { Cur_After = this.Internal_CalculateAutoSpacing(Cur_After, Cur_AfterAuto, this); Next_Before = this.Internal_CalculateAutoSpacing(Next_Before, Next_BeforeAuto, this); Pr.ParaPr.Spacing.After = Math.max(Next_Before, Cur_After) - Cur_After; } else { Pr.ParaPr.Spacing.After = this.Internal_CalculateAutoSpacing(Pr.ParaPr.Spacing.After, Cur_AfterAuto, this); } } } } } else { Pr.ParaPr.Spacing.After = this.Internal_CalculateAutoSpacing(Pr.ParaPr.Spacing.After, Pr.ParaPr.Spacing.AfterAutoSpacing, this); } return Pr; }, Recalc_CompiledPr: function () { this.CompiledPr.NeedRecalc = true; }, Get_CompiledPr2: function (bCopy) { if (true === this.CompiledPr.NeedRecalc) { this.CompiledPr.Pr = this.Internal_CompileParaPr(); this.CompiledPr.NeedRecalc = false; } if (false === bCopy) { return this.CompiledPr.Pr; } else { var Pr = {}; Pr.TextPr = this.CompiledPr.Pr.TextPr.Copy(); Pr.ParaPr = this.CompiledPr.Pr.ParaPr.Copy(); return Pr; } }, Internal_CompileParaPr: function () { var Styles = this.Parent.Get_Styles(); var Numbering = this.Parent.Get_Numbering(); var TableStyle = this.Parent.Get_TableStyleForPara(); var StyleId = this.Style_Get(); var Pr = Styles.Get_Pr(StyleId, styletype_Paragraph, TableStyle); if (undefined != Pr.ParaPr.NumPr) { Pr.ParaPr.StyleNumPr = Pr.ParaPr.NumPr.Copy(); } var Lvl = -1; if (undefined != this.Pr.NumPr) { if (undefined != this.Pr.NumPr.NumId && 0 != this.Pr.NumPr.NumId) { Lvl = this.Pr.NumPr.Lvl; if (Lvl >= 0 && Lvl <= 8) { Pr.ParaPr.Merge(Numbering.Get_ParaPr(this.Pr.NumPr.NumId, this.Pr.NumPr.Lvl)); } else { Lvl = -1; Pr.ParaPr.NumPr = undefined; } } } else { if (undefined != Pr.ParaPr.NumPr) { if (undefined != Pr.ParaPr.NumPr.NumId && 0 != Pr.ParaPr.NumPr.NumId) { var AbstractNum = Numbering.Get_AbstractNum(Pr.ParaPr.NumPr.NumId); Lvl = AbstractNum.Get_LvlByStyle(StyleId); if (-1 != Lvl) {} else { Pr.ParaPr.NumPr = undefined; } } } } Pr.ParaPr.StyleTabs = (undefined != Pr.ParaPr.Tabs ? Pr.ParaPr.Tabs.Copy() : new CParaTabs()); Pr.ParaPr.Merge(this.Pr); if (-1 != Lvl && undefined != Pr.ParaPr.NumPr) { Pr.ParaPr.NumPr.Lvl = Lvl; } if (undefined === this.Pr.FramePr) { Pr.ParaPr.FramePr = undefined; } else { Pr.ParaPr.FramePr = this.Pr.FramePr.Copy(); } return Pr; }, Recalc_CompileParaPr: function () { this.CompiledPr.NeedRecalc = true; }, Internal_CalculateAutoSpacing: function (Value, UseAuto, Para) { var Result = Value; if (true === UseAuto) { if (true === Para.Parent.Is_TableCellContent()) { Result = 0; } else { Result = 14 * g_dKoef_pt_to_mm; } } return Result; }, Get_Paragraph_ParaPr_Copy: function () { var ParaPr = this.Pr.Copy(); return ParaPr; }, Paragraph_Format_Paste: function (TextPr, ParaPr, ApplyPara) { if (null != TextPr) { this.Add(new ParaTextPr(TextPr)); } var _ApplyPara = ApplyPara; if (false === _ApplyPara) { if (true === this.Selection.Use) { _ApplyPara = true; var Start = this.Selection.StartPos; var End = this.Selection.EndPos; if (Start > End) { Start = this.Selection.EndPos; End = this.Selection.StartPos; } if (true === this.Internal_FindForward(End, [para_PageNum, para_Drawing, para_Tab, para_Text, para_Space, para_NewLine, para_End]).Found) { _ApplyPara = false; } else { if (true === this.Internal_FindBackward(Start - 1, [para_PageNum, para_Drawing, para_Tab, para_Text, para_Space, para_NewLine, para_End]).Found) { _ApplyPara = false; } } } else { _ApplyPara = true; } } if (true === _ApplyPara && null != ParaPr) { if (undefined != ParaPr.Ind) { this.Set_Ind(ParaPr.Ind, false); } if (undefined != ParaPr.Jc) { this.Set_Align(ParaPr.Jc); } if (undefined != ParaPr.Spacing) { this.Set_Spacing(ParaPr.Spacing, false); } if (undefined != ParaPr.PageBreakBefore) { this.Set_PageBreakBefore(ParaPr.PageBreakBefore); } if (undefined != ParaPr.KeepLines) { this.Set_KeepLines(ParaPr.KeepLines); } if (undefined != ParaPr.ContextualSpacing) { this.Set_ContextualSpacing(ParaPr.ContextualSpacing); } if (undefined != ParaPr.Shd) { this.Set_Shd(ParaPr.Shd, false); } if (undefined != ParaPr.NumPr) { this.Numbering_Set(ParaPr.NumPr.NumId, ParaPr.NumPr.Lvl); } else { this.Numbering_Remove(); } if (undefined != ParaPr.PStyle) { this.Style_Add(ParaPr.PStyle, true); } else { this.Style_Remove(); } if (undefined != ParaPr.Brd) { this.Set_Borders(ParaPr.Brd); } } }, Style_Get: function () { if (undefined != this.Pr.PStyle) { return this.Pr.PStyle; } return undefined; }, Style_Add: function (Id, bDoNotDeleteProps) { this.RecalcInfo.Set_Type_0(pararecalc_0_All); var Id_old = this.Pr.PStyle; if (undefined === this.Pr.PStyle) { Id_old = null; } else { this.Style_Remove(); } if (null === Id) { return; } if (Id != this.Parent.Get_Styles().Get_Default_Paragraph()) { History.Add(this, { Type: historyitem_Paragraph_PStyle, Old: Id_old, New: Id }); this.Pr.PStyle = Id; } this.CompiledPr.NeedRecalc = true; if (true === bDoNotDeleteProps) { return; } var DefNumId = this.Parent.Get_Styles().Get_Default_ParaList(); if (Id != DefNumId && (Id_old != DefNumId || Id != this.Parent.Get_Styles().Get_Default_Paragraph())) { this.Set_ContextualSpacing(undefined); this.Set_Ind(new CParaInd(), true); this.Set_Align(undefined); this.Set_KeepLines(undefined); this.Set_KeepNext(undefined); this.Set_PageBreakBefore(undefined); this.Set_Spacing(new CParaSpacing(), true); this.Set_Shd(undefined, true); this.Set_WidowControl(undefined); this.Set_Tabs(new CParaTabs()); this.Set_Border(undefined, historyitem_Paragraph_Borders_Between); this.Set_Border(undefined, historyitem_Paragraph_Borders_Bottom); this.Set_Border(undefined, historyitem_Paragraph_Borders_Left); this.Set_Border(undefined, historyitem_Paragraph_Borders_Right); this.Set_Border(undefined, historyitem_Paragraph_Borders_Top); for (var Index = 0; Index < this.Content.length; Index++) { var Item = this.Content[Index]; if (para_TextPr === Item.Type) { Item.Clear_Style(); } } } }, Style_Add_Open: function (Id) { this.Pr.PStyle = Id; this.CompiledPr.NeedRecalc = true; }, Style_Remove: function () { if (undefined != this.Pr.PStyle) { History.Add(this, { Type: historyitem_Paragraph_PStyle, Old: this.Pr.PStyle, New: undefined }); this.Pr.PStyle = undefined; } this.CompiledPr.NeedRecalc = true; }, Cursor_IsEnd: function (ContentPos) { if (undefined === ContentPos) { ContentPos = this.CurPos.ContentPos; } var oPos = this.Internal_FindForward(ContentPos, [para_PageNum, para_Drawing, para_Tab, para_Text, para_Space, para_NewLine]); if (true === oPos.Found) { return false; } else { return true; } }, Cursor_IsStart: function (ContentPos) { if (undefined === ContentPos) { ContentPos = this.CurPos.ContentPos; } var oPos = this.Internal_FindBackward(ContentPos - 1, [para_PageNum, para_Drawing, para_Tab, para_Text, para_Space, para_NewLine]); if (true === oPos.Found) { return false; } else { return true; } }, Selection_IsFromStart: function () { if (true === this.Is_SelectionUse()) { var StartPos = (this.Selection.StartPos > this.Selection.EndPos ? this.Selection.EndPos : this.Selection.StartPos); if (true != this.Cursor_IsStart(StartPos)) { return false; } return true; } return false; }, Clear_Formatting: function () { this.Style_Remove(); this.Numbering_Remove(); this.Set_ContextualSpacing(undefined); this.Set_Ind(new CParaInd(), true); this.Set_Align(undefined, false); this.Set_KeepLines(undefined); this.Set_KeepNext(undefined); this.Set_PageBreakBefore(undefined); this.Set_Spacing(new CParaSpacing(), true); this.Set_Shd(new CDocumentShd(), true); this.Set_WidowControl(undefined); this.Set_Tabs(new CParaTabs()); this.Set_Border(undefined, historyitem_Paragraph_Borders_Between); this.Set_Border(undefined, historyitem_Paragraph_Borders_Bottom); this.Set_Border(undefined, historyitem_Paragraph_Borders_Left); this.Set_Border(undefined, historyitem_Paragraph_Borders_Right); this.Set_Border(undefined, historyitem_Paragraph_Borders_Top); this.CompiledPr.NeedRecalc = true; }, Clear_TextFormatting: function () { var Styles = this.Parent.Get_Styles(); var DefHyper = Styles.Get_Default_Hyperlink(); for (var Index = 0; Index < this.Content.length; Index++) { var Item = this.Content[Index]; if (para_TextPr === Item.Type) { Item.Set_Bold(undefined); Item.Set_Italic(undefined); Item.Set_Strikeout(undefined); Item.Set_Underline(undefined); Item.Set_FontFamily(undefined); Item.Set_FontSize(undefined); Item.Set_Color(undefined); Item.Set_VertAlign(undefined); Item.Set_HighLight(undefined); Item.Set_Spacing(undefined); Item.Set_DStrikeout(undefined); Item.Set_Caps(undefined); Item.Set_SmallCaps(undefined); Item.Set_Position(undefined); Item.Set_RFonts2(undefined); Item.Set_Lang(undefined); if (undefined === Item.Value.RStyle || Item.Value.RStyle != DefHyper) { Item.Set_RStyle(undefined); } } } }, Set_Ind: function (Ind, bDeleteUndefined) { if (undefined === this.Pr.Ind) { this.Pr.Ind = new CParaInd(); } if ((undefined != Ind.FirstLine || true === bDeleteUndefined) && this.Pr.Ind.FirstLine !== Ind.FirstLine) { History.Add(this, { Type: historyitem_Paragraph_Ind_First, New: Ind.FirstLine, Old: (undefined != this.Pr.Ind.FirstLine ? this.Pr.Ind.FirstLine : undefined) }); this.Pr.Ind.FirstLine = Ind.FirstLine; } if ((undefined != Ind.Left || true === bDeleteUndefined) && this.Pr.Ind.Left !== Ind.Left) { History.Add(this, { Type: historyitem_Paragraph_Ind_Left, New: Ind.Left, Old: (undefined != this.Pr.Ind.Left ? this.Pr.Ind.Left : undefined) }); this.Pr.Ind.Left = Ind.Left; } if ((undefined != Ind.Right || true === bDeleteUndefined) && this.Pr.Ind.Right !== Ind.Right) { History.Add(this, { Type: historyitem_Paragraph_Ind_Right, New: Ind.Right, Old: (undefined != this.Pr.Ind.Right ? this.Pr.Ind.Right : undefined) }); this.Pr.Ind.Right = Ind.Right; } this.CompiledPr.NeedRecalc = true; }, Set_Spacing: function (Spacing, bDeleteUndefined) { if (undefined === this.Pr.Spacing) { this.Pr.Spacing = new CParaSpacing(); } if ((undefined != Spacing.Line || true === bDeleteUndefined) && this.Pr.Spacing.Line !== Spacing.Line) { History.Add(this, { Type: historyitem_Paragraph_Spacing_Line, New: Spacing.Line, Old: (undefined != this.Pr.Spacing.Line ? this.Pr.Spacing.Line : undefined) }); this.Pr.Spacing.Line = Spacing.Line; } if ((undefined != Spacing.LineRule || true === bDeleteUndefined) && this.Pr.Spacing.LineRule !== Spacing.LineRule) { History.Add(this, { Type: historyitem_Paragraph_Spacing_LineRule, New: Spacing.LineRule, Old: (undefined != this.Pr.Spacing.LineRule ? this.Pr.Spacing.LineRule : undefined) }); this.Pr.Spacing.LineRule = Spacing.LineRule; } if ((undefined != Spacing.Before || true === bDeleteUndefined) && this.Pr.Spacing.Before !== Spacing.Before) { History.Add(this, { Type: historyitem_Paragraph_Spacing_Before, New: Spacing.Before, Old: (undefined != this.Pr.Spacing.Before ? this.Pr.Spacing.Before : undefined) }); this.Pr.Spacing.Before = Spacing.Before; } if ((undefined != Spacing.After || true === bDeleteUndefined) && this.Pr.Spacing.After !== Spacing.After) { History.Add(this, { Type: historyitem_Paragraph_Spacing_After, New: Spacing.After, Old: (undefined != this.Pr.Spacing.After ? this.Pr.Spacing.After : undefined) }); this.Pr.Spacing.After = Spacing.After; } if ((undefined != Spacing.AfterAutoSpacing || true === bDeleteUndefined) && this.Pr.Spacing.AfterAutoSpacing !== Spacing.AfterAutoSpacing) { History.Add(this, { Type: historyitem_Paragraph_Spacing_AfterAutoSpacing, New: Spacing.AfterAutoSpacing, Old: (undefined != this.Pr.Spacing.AfterAutoSpacing ? this.Pr.Spacing.AfterAutoSpacing : undefined) }); this.Pr.Spacing.AfterAutoSpacing = Spacing.AfterAutoSpacing; } if ((undefined != Spacing.BeforeAutoSpacing || true === bDeleteUndefined) && this.Pr.Spacing.BeforeAutoSpacing !== Spacing.BeforeAutoSpacing) { History.Add(this, { Type: historyitem_Paragraph_Spacing_BeforeAutoSpacing, New: Spacing.BeforeAutoSpacing, Old: (undefined != this.Pr.Spacing.BeforeAutoSpacing ? this.Pr.Spacing.BeforeAutoSpacing : undefined) }); this.Pr.Spacing.BeforeAutoSpacing = Spacing.BeforeAutoSpacing; } this.CompiledPr.NeedRecalc = true; }, Set_Align: function (Align) { if (this.Pr.Jc != Align) { History.Add(this, { Type: historyitem_Paragraph_Align, New: Align, Old: (undefined != this.Pr.Jc ? this.Pr.Jc : undefined) }); this.Pr.Jc = Align; this.CompiledPr.NeedRecalc = true; } }, Set_Shd: function (_Shd, bDeleteUndefined) { if (undefined === _Shd) { if (undefined != this.Pr.Shd) { History.Add(this, { Type: historyitem_Paragraph_Shd, New: undefined, Old: this.Pr.Shd }); this.Pr.Shd = undefined; } } else { var Shd = new CDocumentShd(); Shd.Set_FromObject(_Shd); if (undefined === this.Pr.Shd) { this.Pr.Shd = new CDocumentShd(); } if ((undefined != Shd.Value || true === bDeleteUndefined) && this.Pr.Shd.Value !== Shd.Value) { History.Add(this, { Type: historyitem_Paragraph_Shd_Value, New: Shd.Value, Old: (undefined != this.Pr.Shd.Value ? this.Pr.Shd.Value : undefined) }); this.Pr.Shd.Value = Shd.Value; } if (undefined != Shd.Color || true === bDeleteUndefined) { History.Add(this, { Type: historyitem_Paragraph_Shd_Color, New: Shd.Color, Old: (undefined != this.Pr.Shd.Color ? this.Pr.Shd.Color : undefined) }); this.Pr.Shd.Color = Shd.Color; } } this.CompiledPr.NeedRecalc = true; }, Set_Tabs: function (Tabs) { var _Tabs = new CParaTabs(); var StyleTabs = this.Get_CompiledPr2(false).ParaPr.StyleTabs; for (var Index = 0; Index < Tabs.Tabs.length; Index++) { var Value = StyleTabs.Get_Value(Tabs.Tabs[Index].Pos); if (-1 === Value) { _Tabs.Add(Tabs.Tabs[Index]); } } for (var Index = 0; Index < StyleTabs.Tabs.length; Index++) { var Value = _Tabs.Get_Value(StyleTabs.Tabs[Index].Pos); if (tab_Clear != StyleTabs.Tabs[Index] && -1 === Value) { _Tabs.Add(new CParaTab(tab_Clear, StyleTabs.Tabs[Index].Pos)); } } History.Add(this, { Type: historyitem_Paragraph_Tabs, New: _Tabs, Old: this.Pr.Tabs }); this.Pr.Tabs = _Tabs; this.CompiledPr.NeedRecalc = true; }, Set_ContextualSpacing: function (Value) { if (Value != this.Pr.ContextualSpacing) { History.Add(this, { Type: historyitem_Paragraph_ContextualSpacing, New: Value, Old: (undefined != this.Pr.ContextualSpacing ? this.Pr.ContextualSpacing : undefined) }); this.Pr.ContextualSpacing = Value; this.CompiledPr.NeedRecalc = true; } }, Set_PageBreakBefore: function (Value) { if (Value != this.Pr.PageBreakBefore) { History.Add(this, { Type: historyitem_Paragraph_PageBreakBefore, New: Value, Old: (undefined != this.Pr.PageBreakBefore ? this.Pr.PageBreakBefore : undefined) }); this.Pr.PageBreakBefore = Value; this.CompiledPr.NeedRecalc = true; } }, Set_KeepLines: function (Value) { if (Value != this.Pr.KeepLines) { History.Add(this, { Type: historyitem_Paragraph_KeepLines, New: Value, Old: (undefined != this.Pr.KeepLines ? this.Pr.KeepLines : undefined) }); this.Pr.KeepLines = Value; this.CompiledPr.NeedRecalc = true; } }, Set_KeepNext: function (Value) { if (Value != this.Pr.KeepNext) { History.Add(this, { Type: historyitem_Paragraph_KeepNext, New: Value, Old: (undefined != this.Pr.KeepNext ? this.Pr.KeepNext : undefined) }); this.Pr.KeepNext = Value; this.CompiledPr.NeedRecalc = true; } }, Set_WidowControl: function (Value) { if (Value != this.Pr.WidowControl) { History.Add(this, { Type: historyitem_Paragraph_WidowControl, New: Value, Old: (undefined != this.Pr.WidowControl ? this.Pr.WidowControl : undefined) }); this.Pr.WidowControl = Value; this.CompiledPr.NeedRecalc = true; } }, Set_Borders: function (Borders) { if (undefined === Borders) { return; } var OldBorders = this.Get_CompiledPr2(false).ParaPr.Brd; if (undefined != Borders.Between) { var NewBorder = undefined; if (undefined != Borders.Between.Value) { NewBorder = new CDocumentBorder(); NewBorder.Color = (undefined != Borders.Between.Color ? new CDocumentColor(Borders.Between.Color.r, Borders.Between.Color.g, Borders.Between.Color.b) : new CDocumentColor(OldBorders.Between.Color.r, OldBorders.Between.Color.g, OldBorders.Between.Color.b)); NewBorder.Space = (undefined != Borders.Between.Space ? Borders.Between.Space : OldBorders.Between.Space); NewBorder.Size = (undefined != Borders.Between.Size ? Borders.Between.Size : OldBorders.Between.Size); NewBorder.Value = (undefined != Borders.Between.Value ? Borders.Between.Value : OldBorders.Between.Value); } History.Add(this, { Type: historyitem_Paragraph_Borders_Between, New: NewBorder, Old: this.Pr.Brd.Between }); this.Pr.Brd.Between = NewBorder; } if (undefined != Borders.Top) { var NewBorder = undefined; if (undefined != Borders.Top.Value) { NewBorder = new CDocumentBorder(); NewBorder.Color = (undefined != Borders.Top.Color ? new CDocumentColor(Borders.Top.Color.r, Borders.Top.Color.g, Borders.Top.Color.b) : new CDocumentColor(OldBorders.Top.Color.r, OldBorders.Top.Color.g, OldBorders.Top.Color.b)); NewBorder.Space = (undefined != Borders.Top.Space ? Borders.Top.Space : OldBorders.Top.Space); NewBorder.Size = (undefined != Borders.Top.Size ? Borders.Top.Size : OldBorders.Top.Size); NewBorder.Value = (undefined != Borders.Top.Value ? Borders.Top.Value : OldBorders.Top.Value); } History.Add(this, { Type: historyitem_Paragraph_Borders_Top, New: NewBorder, Old: this.Pr.Brd.Top }); this.Pr.Brd.Top = NewBorder; } if (undefined != Borders.Right) { var NewBorder = undefined; if (undefined != Borders.Right.Value) { NewBorder = new CDocumentBorder(); NewBorder.Color = (undefined != Borders.Right.Color ? new CDocumentColor(Borders.Right.Color.r, Borders.Right.Color.g, Borders.Right.Color.b) : new CDocumentColor(OldBorders.Right.Color.r, OldBorders.Right.Color.g, OldBorders.Right.Color.b)); NewBorder.Space = (undefined != Borders.Right.Space ? Borders.Right.Space : OldBorders.Right.Space); NewBorder.Size = (undefined != Borders.Right.Size ? Borders.Right.Size : OldBorders.Right.Size); NewBorder.Value = (undefined != Borders.Right.Value ? Borders.Right.Value : OldBorders.Right.Value); } History.Add(this, { Type: historyitem_Paragraph_Borders_Right, New: NewBorder, Old: this.Pr.Brd.Right }); this.Pr.Brd.Right = NewBorder; } if (undefined != Borders.Bottom) { var NewBorder = undefined; if (undefined != Borders.Bottom.Value) { NewBorder = new CDocumentBorder(); NewBorder.Color = (undefined != Borders.Bottom.Color ? new CDocumentColor(Borders.Bottom.Color.r, Borders.Bottom.Color.g, Borders.Bottom.Color.b) : new CDocumentColor(OldBorders.Bottom.Color.r, OldBorders.Bottom.Color.g, OldBorders.Bottom.Color.b)); NewBorder.Space = (undefined != Borders.Bottom.Space ? Borders.Bottom.Space : OldBorders.Bottom.Space); NewBorder.Size = (undefined != Borders.Bottom.Size ? Borders.Bottom.Size : OldBorders.Bottom.Size); NewBorder.Value = (undefined != Borders.Bottom.Value ? Borders.Bottom.Value : OldBorders.Bottom.Value); } History.Add(this, { Type: historyitem_Paragraph_Borders_Bottom, New: NewBorder, Old: this.Pr.Brd.Bottom }); this.Pr.Brd.Bottom = NewBorder; } if (undefined != Borders.Left) { var NewBorder = undefined; if (undefined != Borders.Left.Value) { NewBorder = new CDocumentBorder(); NewBorder.Color = (undefined != Borders.Left.Color ? new CDocumentColor(Borders.Left.Color.r, Borders.Left.Color.g, Borders.Left.Color.b) : new CDocumentColor(OldBorders.Left.Color.r, OldBorders.Left.Color.g, OldBorders.Left.Color.b)); NewBorder.Space = (undefined != Borders.Left.Space ? Borders.Left.Space : OldBorders.Left.Space); NewBorder.Size = (undefined != Borders.Left.Size ? Borders.Left.Size : OldBorders.Left.Size); NewBorder.Value = (undefined != Borders.Left.Value ? Borders.Left.Value : OldBorders.Left.Value); } History.Add(this, { Type: historyitem_Paragraph_Borders_Left, New: NewBorder, Old: this.Pr.Brd.Left }); this.Pr.Brd.Left = NewBorder; } this.CompiledPr.NeedRecalc = true; }, Set_Border: function (Border, HistoryType) { var OldValue; switch (HistoryType) { case historyitem_Paragraph_Borders_Between: OldValue = this.Pr.Brd.Between; this.Pr.Brd.Between = Border; break; case historyitem_Paragraph_Borders_Bottom: OldValue = this.Pr.Brd.Bottom; this.Pr.Brd.Bottom = Border; break; case historyitem_Paragraph_Borders_Left: OldValue = this.Pr.Brd.Left; this.Pr.Brd.Left = Border; break; case historyitem_Paragraph_Borders_Right: OldValue = this.Pr.Brd.Right; this.Pr.Brd.Right = Border; break; case historyitem_Paragraph_Borders_Top: OldValue = this.Pr.Brd.Top; this.Pr.Brd.Top = Border; break; } History.Add(this, { Type: HistoryType, New: Border, Old: OldValue }); this.CompiledPr.NeedRecalc = true; }, Is_StartFromNewPage: function () { if ((this.Pages.length > 1 && 0 === this.Pages[1].FirstLine) || (null === this.Get_DocumentPrev())) { return true; } return false; }, Internal_GetPage: function (Pos) { if (undefined === Pos) { Pos = this.CurPos.ContentPos; } return this.Internal_Get_ParaPos_By_Pos(Pos).Page; }, Remove_DrawingObject: function (Id) { for (var Index = 0; Index < this.Content.length; Index++) { var Item = this.Content[Index]; if (para_Drawing === Item.Type && Id === Item.Get_Id()) { var HdrFtr = this.Parent.Is_HdrFtr(true); if (null != HdrFtr && true != Item.Is_Inline()) { HdrFtr.RecalcInfo.NeedRecalc = true; } this.Internal_Content_Remove(Index); return Index; } } return -1; }, Internal_CorrectAnchorPos: function (Result, Drawing, PageNum) { var RelH = Drawing.PositionH.RelativeFrom; var RelV = Drawing.PositionV.RelativeFrom; var ContentPos = 0; if (c_oAscRelativeFromH.Character != RelH || c_oAscRelativeFromV.Line != RelV) { var CurLine = Result.Internal.Line; if (c_oAscRelativeFromV.Line != RelV) { var CurPage = Result.Internal.Page; CurLine = this.Pages[CurPage].StartLine; } var StartLinesPos = this.Lines[CurLine].StartPos; var EndLinesPos = this.Lines[CurLine].EndPos; var CurRange = this.Internal_Get_ParaPos_By_Pos(StartLinesPos).Range; Result.X = this.Lines[CurLine].Ranges[CurRange].X - 3.8; ContentPos = Math.min(StartLinesPos + 1, EndLinesPos); } if (c_oAscRelativeFromV.Line != RelV) { var CurPage = Result.Internal.Page; var CurLine = this.Pages[CurPage].StartLine; Result.Y = this.Pages[CurPage].Y + this.Lines[CurLine].Y - this.Lines[CurLine].Metrics.Ascent; } if (c_oAscRelativeFromH.Character === RelH) {} else { if (c_oAscRelativeFromV.Line === RelV) { var CurLine = this.Internal_Get_ParaPos_By_Pos(Result.ContentPos).Line; Result.ContentPos = this.Lines[CurLine].StartPos; } else { Result.ContentPos = ContentPos; } } }, Get_NearestPos: function (PageNum, X, Y, bAnchor, Drawing) { var ContentPos = this.Internal_GetContentPosByXY(X, Y, false, PageNum).Pos; var Result = this.Internal_Recalculate_CurPos(ContentPos, false, false, true); Result.ContentPos = ContentPos; Result.Paragraph = this; if (true === bAnchor && undefined != Drawing && null != Drawing) { this.Internal_CorrectAnchorPos(Result, Drawing, PageNum - this.PageNum); } return Result; }, Get_Layout: function (ContentPos, Drawing) { var LinePos = this.Internal_Get_ParaPos_By_Pos(ContentPos); var CurLine = LinePos.Line; var CurRange = LinePos.Range; var CurPage = LinePos.Page; var X = this.Lines[CurLine].Ranges[CurRange].XVisible; var Y = this.Pages[CurPage].Y + this.Lines[CurLine].Y; var StartPos = this.Lines[CurLine].Ranges[CurRange].StartPos; if (StartPos < this.Numbering.Pos) { X += this.Numbering.WidthVisible; } var LastW = 0; for (var ItemNum = StartPos; ItemNum < this.Content.length; ItemNum++) { var Item = this.Content[ItemNum]; if (ItemNum === ContentPos) { var DrawingObjects = this.Parent.DrawingObjects; var PageLimits = this.Parent.Get_PageLimits(this.PageNum + CurPage); var PageFields = this.Parent.Get_PageFields(this.PageNum + CurPage); var ColumnStartX = (0 === CurPage ? this.X_ColumnStart : this.Pages[CurPage].X); var ColumnEndX = (0 === CurPage ? this.X_ColumnEnd : this.Pages[CurPage].XLimit); var Top_Margin = Y_Top_Margin; var Bottom_Margin = Y_Bottom_Margin; var Page_H = Page_Height; if (true === this.Parent.Is_TableCellContent() && undefined != Drawing && true == Drawing.Use_TextWrap()) { Top_Margin = 0; Bottom_Margin = 0; Page_H = 0; } if (undefined != Drawing && true != Drawing.Use_TextWrap()) { PageFields.X = X_Left_Field; PageFields.Y = Y_Top_Field; PageFields.XLimit = X_Right_Field; PageFields.YLimit = Y_Bottom_Field; PageLimits.X = 0; PageLimits.Y = 0; PageLimits.XLimit = Page_Width; PageLimits.YLimit = Page_Height; } return { ParagraphLayout: new CParagraphLayout(X, Y, this.Get_StartPage_Absolute() + CurPage, LastW, ColumnStartX, ColumnEndX, X_Left_Margin, X_Right_Margin, Page_Width, Top_Margin, Bottom_Margin, Page_H, PageFields.X, PageFields.Y, this.Pages[CurPage].Y + this.Lines[CurLine].Y - this.Lines[CurLine].Metrics.Ascent, this.Pages[CurPage].Y), PageLimits: PageLimits }; } switch (Item.Type) { case para_Text: case para_Space: case para_PageNum: LastW = Item.WidthVisible; break; case para_Drawing: if (true === Item.Is_Inline() || true === this.Parent.Is_DrawingShape()) { LastW = Item.WidthVisible; } break; } X += Item.WidthVisible; } return undefined; }, Get_AnchorPos: function (Drawing) { var ContentPos = -1; var Count = this.Content.length; for (var Index = 0; Index < Count; Index++) { var Item = this.Content[Index]; if (para_Drawing === Item.Type && Item.Get_Id() === Drawing.Get_Id()) { ContentPos = Index; break; } } var CurPage = this.Internal_Get_ParaPos_By_Pos(ContentPos).Page; if (-1 === ContentPos) { return { X: 0, Y: 0, Height: 0 }; } var Result = this.Internal_Recalculate_CurPos(ContentPos, false, false, true); Result.Paragraph = this; Result.ContentPos = ContentPos; this.Internal_CorrectAnchorPos(Result, Drawing, CurPage); return Result; }, Set_DocumentNext: function (Object) { History.Add(this, { Type: historyitem_Paragraph_DocNext, New: Object, Old: this.Next }); this.Next = Object; }, Set_DocumentPrev: function (Object) { History.Add(this, { Type: historyitem_Paragraph_DocPrev, New: Object, Old: this.Prev }); this.Prev = Object; }, Get_DocumentNext: function () { return this.Next; }, Get_DocumentPrev: function () { return this.Prev; }, Set_DocumentIndex: function (Index) { this.Index = Index; }, Set_Parent: function (ParentObject) { History.Add(this, { Type: historyitem_Paragraph_Parent, New: ParentObject, Old: this.Parent }); this.Parent = ParentObject; }, Get_Parent: function () { return this.Parent; }, Is_ContentOnFirstPage: function () { if (this.Pages[0].EndLine < 0) { return false; } return true; }, Get_CurrentPage_Absolute: function () { this.Internal_Recalculate_CurPos(this.CurPos.ContentPos, true, false, false); return (this.Get_StartPage_Absolute() + this.CurPos.PagesPos); }, Get_CurrentPage_Relative: function () { this.Internal_Recalculate_CurPos(this.CurPos.ContentPos, true, false, false); return (this.PageNum + this.CurPos.PagesPos); }, DocumentSearch: function (Str, ElementType) { var Pr = this.Get_CompiledPr(); var StartPage = this.Get_StartPage_Absolute(); var SearchResults = new Array(); for (var Pos = 0; Pos < this.Content.length; Pos++) { var Item = this.Content[Pos]; if (para_Numbering === Item.Type || para_PresentationNumbering === Item.Type || para_TextPr === Item.Type) { continue; } if ((" " === Str[0] && para_Space === Item.Type) || (para_Text === Item.Type && (Item.Value).toLowerCase() === Str[0].toLowerCase())) { if (1 === Str.length) { SearchResults.push({ StartPos: Pos, EndPos: Pos + 1 }); } else { var bFind = true; var Pos2 = Pos + 1; for (var Index = 1; Index < Str.length; Index++) { while (Pos2 < this.Content.length && (para_TextPr === this.Content[Pos2].Type)) { Pos2++; } if ((Pos2 >= this.Content.length) || (" " === Str[Index] && para_Space != this.Content[Pos2].Type) || (" " != Str[Index] && ((para_Text != this.Content[Pos2].Type) || (para_Text === this.Content[Pos2].Type && this.Content[Pos2].Value.toLowerCase() != Str[Index].toLowerCase())))) { bFind = false; break; } Pos2++; } if (true === bFind) { SearchResults.push({ StartPos: Pos, EndPos: Pos2 }); } } } } var MaxShowValue = 100; for (var FoundIndex = 0; FoundIndex < SearchResults.length; FoundIndex++) { var Rects = new Array(); var StartPos = SearchResults[FoundIndex].StartPos; var EndPos = SearchResults[FoundIndex].EndPos; var StartParaPos = this.Internal_Get_ParaPos_By_Pos(StartPos); var CurLine = StartParaPos.Line; var CurRange = StartParaPos.Range; var PNum = StartParaPos.Page; var StartX = this.Lines[CurLine].Ranges[CurRange].XVisible; var Pos, Item; for (Pos = this.Lines[CurLine].Ranges[CurRange].StartPos; Pos <= StartPos - 1; Pos++) { Item = this.Content[Pos]; if (Pos === this.Numbering.Pos) { StartX += this.Numbering.WidthVisible; } if (undefined != Item.WidthVisible && (para_Drawing != Item.Type || drawing_Inline === Item.DrawingType)) { StartX += Item.WidthVisible; } } if (this.Pages[PNum].StartLine > CurLine) { CurLine = this.Pages[PNum].StartLine; CurRange = 0; StartX = this.Lines[CurLine].Ranges[CurRange].XVisible; StartPos = this.Lines[this.Pages[PNum].StartLine].StartPos; } var StartY = (this.Pages[PNum].Y + this.Lines[CurLine].Y - this.Lines[CurLine].Metrics.Ascent); var EndY = (this.Pages[PNum].Y + this.Lines[CurLine].Y + this.Lines[CurLine].Metrics.Descent); if (this.Lines[CurLine].Metrics.LineGap < 0) { EndY += this.Lines[CurLine].Metrics.LineGap; } var W = 0; for (Pos = StartPos; Pos < EndPos; Pos++) { Item = this.Content[Pos]; if (undefined != Item.CurPage) { if (Item.CurPage > PNum) { PNum = Item.CurPage; } if (CurLine < Item.CurLine) { Rects.push({ PageNum: StartPage + PNum, X: StartX, Y: StartY, W: W, H: EndY - StartY }); CurLine = Item.CurLine; CurRange = Item.CurRange; StartX = this.Lines[CurLine].Ranges[CurRange].XVisible; StartY = (this.Pages[PNum].Y + this.Lines[CurLine].Y - this.Lines[CurLine].Metrics.Ascent); EndY = (this.Pages[PNum].Y + this.Lines[CurLine].Y + this.Lines[CurLine].Metrics.Descent); if (this.Lines[CurLine].Metrics.LineGap < 0) { EndY += this.Lines[CurLine].Metrics.LineGap; } W = 0; } else { if (CurRange < Item.CurRange) { Rects.push({ PageNum: StartPage + PNum, X: StartX, Y: StartY, W: W, H: EndY - StartY }); CurRange = Item.CurRange; StartX = this.Lines[CurLine].Ranges[CurRange].XVisible; W = 0; } } } if (undefined != Item.WidthVisible) { W += Item.WidthVisible; } if (Pos == EndPos - 1) { Rects.push({ PageNum: StartPage + PNum, X: StartX, Y: StartY, W: W, H: EndY - StartY }); } } var ResultStr = new String(); var _Str = ""; for (var Pos = StartPos; Pos < EndPos; Pos++) { Item = this.Content[Pos]; if (para_Text === Item.Type) { _Str += Item.Value; } else { if (para_Space === Item.Type) { _Str += " "; } } } if (_Str.length >= MaxShowValue) { ResultStr = ""; for (var Index = 0; Index < MaxShowValue - 1; Index++) { ResultStr += _Str[Index]; } ResultStr += "..."; } else { ResultStr = "" + _Str + ""; var Pos_before = StartPos - 1; var Pos_after = EndPos; var LeaveCount = MaxShowValue - _Str.length; var bAfter = true; while (LeaveCount > 0 && (Pos_before >= 0 || Pos_after < this.Content.length)) { var TempPos = (true === bAfter ? Pos_after : Pos_before); var Flag = 0; while (((TempPos >= 0 && false === bAfter) || (TempPos < this.Content.length && true === bAfter)) && para_Text != this.Content[TempPos].Type && para_Space != this.Content[TempPos].Type) { if (true === bAfter) { TempPos++; if (TempPos >= this.Content.length) { TempPos = Pos_before; bAfter = false; Flag++; } } else { TempPos--; if (TempPos < 0) { TempPos = Pos_after; bAfter = true; Flag++; } } if (Flag >= 2) { break; } } if (Flag >= 2 || !((TempPos >= 0 && false === bAfter) || (TempPos < this.Content.length && true === bAfter))) { break; } if (true === bAfter) { ResultStr += (para_Space === this.Content[TempPos].Type ? " " : this.Content[TempPos].Value); Pos_after = TempPos + 1; LeaveCount--; if (Pos_before >= 0) { bAfter = false; } if (Pos_after >= this.Content.length) { bAfter = false; } } else { ResultStr = (para_Space === this.Content[TempPos].Type ? " " : this.Content[TempPos].Value) + ResultStr; Pos_before = TempPos - 1; LeaveCount--; if (Pos_after < this.Content.length) { bAfter = true; } if (Pos_before < 0) { bAfter = true; } } } } this.DrawingDocument.AddPageSearch(ResultStr, Rects, ElementType); } }, DocumentStatistics: function (Stats) { var bEmptyParagraph = true; var bWord = false; for (var Index = 0; Index < this.Content.length; Index++) { var Item = this.Content[Index]; var bSymbol = false; var bSpace = false; var bNewWord = false; if ((para_Text === Item.Type && false === Item.Is_NBSP()) || (para_PageNum === Item.Type)) { if (false === bWord) { bNewWord = true; } bWord = true; bSymbol = true; bSpace = false; bEmptyParagraph = false; } else { if ((para_Text === Item.Type && true === Item.Is_NBSP()) || para_Space === Item.Type || para_Tab === Item.Type) { bWord = false; bSymbol = true; bSpace = true; } } if (true === bSymbol) { Stats.Add_Symbol(bSpace); } if (true === bNewWord) { Stats.Add_Word(); } } var NumPr = this.Numbering_Get(); if (undefined != NumPr) { bEmptyParagraph = false; this.Parent.Get_Numbering().Get_AbstractNum(NumPr.NumId).DocumentStatistics(NumPr.Lvl, Stats); } if (false === bEmptyParagraph) { Stats.Add_Paragraph(); } }, TurnOff_RecalcEvent: function () { this.TurnOffRecalcEvent = true; }, TurnOn_RecalcEvent: function () { this.TurnOffRecalcEvent = false; }, Set_ApplyToAll: function (bValue) { this.ApplyToAll = bValue; }, Get_ApplyToAll: function () { return this.ApplyToAll; }, Update_CursorType: function (X, Y, PageIndex) { var text_transform = null; var cur_parent = this.Parent; if (this.Parent.Is_TableCellContent()) { while (isRealObject(cur_parent) && cur_parent.Is_TableCellContent()) { cur_parent = cur_parent.Parent.Row.Table.Parent; } } if (cur_parent.Parent instanceof WordShape) { if (isRealObject(cur_parent.Parent.transformText)) { text_transform = cur_parent.Parent.transformText; } } var MMData = new CMouseMoveData(); var Coords = this.DrawingDocument.ConvertCoordsToCursorWR(X, Y, this.Get_StartPage_Absolute() + (PageIndex - this.PageNum), text_transform); MMData.X_abs = Coords.X; MMData.Y_abs = Coords.Y; var Hyperlink = this.Check_Hyperlink(X, Y, PageIndex); var PNum = PageIndex - this.PageNum; if (null != Hyperlink && (PNum >= 0 && PNum < this.Pages.length && Y <= this.Pages[PNum].Bounds.Bottom && Y >= this.Pages[PNum].Bounds.Top)) { MMData.Type = c_oAscMouseMoveDataTypes.Hyperlink; MMData.Hyperlink = new CHyperlinkProperty(Hyperlink); } else { MMData.Type = c_oAscMouseMoveDataTypes.Common; } if (null != Hyperlink && true === global_keyboardEvent.CtrlKey) { this.DrawingDocument.SetCursorType("pointer", MMData); } else { this.DrawingDocument.SetCursorType("default", MMData); } var PNum = Math.max(0, Math.min(PageIndex - this.PageNum, this.Pages.length - 1)); var Bounds = this.Pages[PNum].Bounds; if (true === this.Lock.Is_Locked() && X < Bounds.Right && X > Bounds.Left && Y > Bounds.Top && Y < Bounds.Bottom) { var _X = this.Pages[PNum].X; var _Y = this.Pages[PNum].Y; var MMData = new CMouseMoveData(); var Coords = this.DrawingDocument.ConvertCoordsToCursorWR(_X, _Y, this.Get_StartPage_Absolute() + (PageIndex - this.PageNum), text_transform); MMData.X_abs = Coords.X - 5; MMData.Y_abs = Coords.Y; MMData.Type = c_oAscMouseMoveDataTypes.LockedObject; MMData.UserId = this.Lock.Get_UserId(); MMData.HaveChanges = this.Lock.Have_Changes(); MMData.LockedObjectType = c_oAscMouseMoveLockedObjectType.Common; editor.sync_MouseMoveCallback(MMData); } }, Document_CreateFontMap: function (FontMap) { if (true === this.FontMap.NeedRecalc) { this.FontMap.Map = new Object(); if (true === this.CompiledPr.NeedRecalc) { this.CompiledPr.Pr = this.Internal_CompileParaPr(); this.CompiledPr.NeedRecalc = false; } var CurTextPr = this.CompiledPr.Pr.TextPr.Copy(); CurTextPr.Document_CreateFontMap(this.FontMap.Map); CurTextPr.Merge(this.TextPr.Value); CurTextPr.Document_CreateFontMap(this.FontMap.Map); for (var Index = 0; Index < this.Content.length; Index++) { var Item = this.Content[Index]; if (para_TextPr === Item.Type) { CurTextPr = this.CompiledPr.Pr.TextPr.Copy(); var _CurTextPr = Item.Value; if (undefined != _CurTextPr.RStyle) { var Styles = this.Parent.Get_Styles(); var StyleTextPr = Styles.Get_Pr(_CurTextPr.RStyle, styletype_Character).TextPr; CurTextPr.Merge(StyleTextPr); } CurTextPr.Merge(_CurTextPr); CurTextPr.Document_CreateFontMap(this.FontMap.Map); } } this.FontMap.NeedRecalc = false; } for (Key in this.FontMap.Map) { FontMap[Key] = this.FontMap.Map[Key]; } }, Document_CreateFontCharMap: function (FontCharMap) { if (true === this.CompiledPr.NeedRecalc) { this.CompiledPr.Pr = this.Internal_CompileParaPr(); this.CompiledPr.NeedRecalc = false; } var CurTextPr = this.CompiledPr.Pr.TextPr.Copy(); FontCharMap.StartFont(CurTextPr.FontFamily.Name, CurTextPr.Bold, CurTextPr.Italic, CurTextPr.FontSize); for (var Index = 0; Index < this.Content.length; Index++) { var Item = this.Content[Index]; if (para_TextPr === Item.Type) { CurTextPr = this.CompiledPr.Pr.TextPr.Copy(); var _CurTextPr = Item.Value; if (undefined != _CurTextPr.RStyle) { var Styles = this.Parent.Get_Styles(); var StyleTextPr = Styles.Get_Pr(_CurTextPr.RStyle, styletype_Character).TextPr; CurTextPr.Merge(StyleTextPr); } CurTextPr.Merge(_CurTextPr); FontCharMap.StartFont(CurTextPr.FontFamily.Name, CurTextPr.Bold, CurTextPr.Italic, CurTextPr.FontSize); } else { if (para_Text === Item.Type) { FontCharMap.AddChar(Item.Value); } else { if (para_Space === Item.Type) { FontCharMap.AddChar(" "); } else { if (para_Numbering === Item.Type) { var ParaPr = this.CompiledPr.Pr.ParaPr; var NumPr = ParaPr.NumPr; if (undefined === NumPr || undefined === NumPr.NumId || 0 === NumPr.NumId || "0" === NumPr.NumId) { continue; } var Numbering = this.Parent.Get_Numbering(); var NumInfo = this.Parent.Internal_GetNumInfo(this.Id, NumPr); var NumTextPr = this.CompiledPr.Pr.TextPr.Copy(); NumTextPr.Merge(this.TextPr.Value); NumTextPr.Merge(NumLvl.TextPr); Numbering.Document_CreateFontCharMap(FontCharMap, NumTextPr, NumPr, NumInfo); FontCharMap.StartFont(CurTextPr.FontFamily.Name, CurTextPr.Bold, CurTextPr.Italic, CurTextPr.FontSize); } else { if (para_PageNum === Item.Type) { Item.Document_CreateFontCharMap(FontCharMap); } } } } } } CurTextPr.Merge(this.TextPr.Value); }, Document_Get_AllFontNames: function (AllFonts) { this.TextPr.Value.Document_Get_AllFontNames(AllFonts); var Count = this.Content.length; for (var Index = 0; Index < Count; Index++) { var Item = this.Content[Index]; if (para_TextPr === Item.Type) { Item.Value.Document_Get_AllFontNames(AllFonts); } else { if (para_Drawing === Item.Type) { Item.documentGetAllFontNames(AllFonts); } } } }, Document_UpdateRulersState: function () { var FramePr = this.Get_FramePr(); if (undefined === FramePr) { this.Parent.DrawingDocument.Set_RulerState_Paragraph(null); } else { var Frame = this.CalculatedFrame; this.Parent.DrawingDocument.Set_RulerState_Paragraph({ L: Frame.L, T: Frame.T, R: Frame.L + Frame.W, B: Frame.T + Frame.H, PageIndex: Frame.PageIndex, Frame: this }); } }, Document_UpdateInterfaceState: function () { if (true === this.Selection.Use) { var StartPos = this.Selection.StartPos; var EndPos = this.Selection.EndPos; if (StartPos > EndPos) { StartPos = this.Selection.EndPos; EndPos = this.Selection.StartPos; } var Hyper_start = this.Check_Hyperlink2(this.Selection.StartPos); var Hyper_end = this.Check_Hyperlink2(this.Selection.EndPos); if (Hyper_start === Hyper_end && null != Hyper_start) { var Find = this.Internal_FindBackward(this.Selection.StartPos, [para_HyperlinkStart]); if (true != Find.Found) { return; } var Str = ""; for (var Pos = Find.LetterPos + 1; Pos < this.Content.length; Pos++) { var Item = this.Content[Pos]; var bBreak = false; switch (Item.Type) { case para_Drawing: case para_End: case para_Numbering: case para_PresentationNumbering: case para_PageNum: Str = null; bBreak = true; break; case para_Text: Str += Item.Value; break; case para_Space: case para_Tab: Str += " "; break; case para_HyperlinkEnd: bBreak = true; break; case para_HyperlinkStart: return; } if (true === bBreak) { break; } } var HyperProps = new CHyperlinkProperty(Hyper_start); HyperProps.put_Text(Str); editor.sync_HyperlinkPropCallback(HyperProps); } this.SpellChecker.Document_UpdateInterfaceState(StartPos, EndPos); } else { var Hyper_cur = this.Check_Hyperlink2(this.CurPos.ContentPos, false, true); if (null != Hyper_cur) { var Find = this.Internal_FindBackward(this.CurPos.ContentPos, [para_HyperlinkStart]); if (true != Find.Found) { return; } var Str = ""; for (var Pos = Find.LetterPos + 1; Pos < this.Content.length; Pos++) { var Item = this.Content[Pos]; var bBreak = false; switch (Item.Type) { case para_Drawing: case para_End: case para_Numbering: case para_PresentationNumbering: case para_PageNum: Str = null; bBreak = true; break; case para_Text: Str += Item.Value; break; case para_Space: case para_Tab: Str += " "; break; case para_HyperlinkEnd: bBreak = true; break; case para_HyperlinkStart: return; } if (true === bBreak) { break; } } var HyperProps = new CHyperlinkProperty(Hyper_cur); HyperProps.put_Text(Str); editor.sync_HyperlinkPropCallback(HyperProps); } this.SpellChecker.Document_UpdateInterfaceState(this.CurPos.ContentPos, this.CurPos.ContentPos); } }, PreDelete: function () { this.Internal_Remove_CollaborativeMarks(false); for (var Index = 0; Index < this.Content.length; Index++) { var Item = this.Content[Index]; if (para_CommentEnd === Item.Type || para_CommentStart === Item.Type) { editor.WordControl.m_oLogicDocument.Remove_Comment(Item.Id, true); } } }, Get_StartPage_Absolute: function () { return this.Parent.Get_StartPage_Absolute() + this.Get_StartPage_Relative(); }, Get_StartPage_Relative: function () { return this.PageNum; }, Document_SetThisElementCurrent: function () { this.Parent.Set_CurrentElement(this.Index); }, Is_ThisElementCurrent: function () { var Parent = this.Parent; if (docpostype_Content === Parent.CurPos.Type && false === Parent.Selection.Use && this.Index === Parent.CurPos.ContentPos) { return this.Parent.Is_ThisElementCurrent(); } return false; }, Is_Inline: function () { if (undefined != this.Pr.FramePr) { return false; } return true; }, Get_FramePr: function () { return this.Pr.FramePr; }, Set_FramePr: function (FramePr, bDelete) { var FramePr_old = this.Pr.FramePr; if (undefined === bDelete) { bDelete = false; } if (true === bDelete) { this.Pr.FramePr = undefined; History.Add(this, { Type: historyitem_Paragraph_FramePr, Old: FramePr_old, New: undefined }); this.CompiledPr.NeedRecalc = true; return; } var FrameParas = this.Internal_Get_FrameParagraphs(); if (true === FramePr.FromDropCapMenu && 1 === FrameParas.length) { var NewFramePr = FramePr_old.Copy(); if (undefined != FramePr.DropCap) { var OldLines = NewFramePr.Lines; NewFramePr.Init_Default_DropCap(FramePr.DropCap === c_oAscDropCap.Drop ? true : false); NewFramePr.Lines = OldLines; } if (undefined != FramePr.Lines) { var AnchorPara = this.Get_FrameAnchorPara(); if (null === AnchorPara || AnchorPara.Lines.length <= 0) { return; } var LineH = AnchorPara.Lines[0].Bottom - AnchorPara.Lines[0].Top; var LineTA = AnchorPara.Lines[0].Metrics.TextAscent2; var LineTD = AnchorPara.Lines[0].Metrics.TextDescent + AnchorPara.Lines[0].Metrics.LineGap; this.Set_Spacing({ LineRule: linerule_Exact, Line: FramePr.Lines * LineH }, false); this.Update_DropCapByLines(this.Internal_CalculateTextPr(this.Internal_GetStartPos()), FramePr.Lines, LineH, LineTA, LineTD); } if (undefined != FramePr.FontFamily) { var FF = new ParaTextPr({ RFonts: { Ascii: { Name: FramePr.FontFamily.Name, Index: -1 } } }); this.Select_All(); this.Add(FF); this.Selection_Remove(); } if (undefined != FramePr.HSpace) { NewFramePr.HSpace = FramePr.HSpace; } this.Pr.FramePr = NewFramePr; } else { var NewFramePr = FramePr_old.Copy(); if (undefined != FramePr.H) { NewFramePr.H = FramePr.H; } if (undefined != FramePr.HAnchor) { NewFramePr.HAnchor = FramePr.HAnchor; } if (undefined != FramePr.HRule) { NewFramePr.HRule = FramePr.HRule; } if (undefined != FramePr.HSpace) { NewFramePr.HSpace = FramePr.HSpace; } if (undefined != FramePr.Lines) { NewFramePr.Lines = FramePr.Lines; } if (undefined != FramePr.VAnchor) { NewFramePr.VAnchor = FramePr.VAnchor; } if (undefined != FramePr.VSpace) { NewFramePr.VSpace = FramePr.VSpace; } NewFramePr.W = FramePr.W; if (undefined != FramePr.Wrap) { NewFramePr.Wrap = FramePr.Wrap; } if (undefined != FramePr.X) { NewFramePr.X = FramePr.X; } if (undefined != FramePr.XAlign) { NewFramePr.XAlign = FramePr.XAlign; } if (undefined != FramePr.Y) { NewFramePr.Y = FramePr.Y; } if (undefined != FramePr.YAlign) { NewFramePr.YAlign = FramePr.YAlign; } this.Pr.FramePr = NewFramePr; } if (undefined != FramePr.Brd) { var Count = FrameParas.length; for (var Index = 0; Index < Count; Index++) { FrameParas[Index].Set_Borders(FramePr.Brd); } } if (undefined != FramePr.Shd) { var Count = FrameParas.length; for (var Index = 0; Index < Count; Index++) { FrameParas[Index].Set_Shd(FramePr.Shd); } } History.Add(this, { Type: historyitem_Paragraph_FramePr, Old: FramePr_old, New: this.Pr.FramePr }); this.CompiledPr.NeedRecalc = true; }, Set_FramePr2: function (FramePr) { History.Add(this, { Type: historyitem_Paragraph_FramePr, Old: this.Pr.FramePr, New: FramePr }); this.Pr.FramePr = FramePr; this.CompiledPr.NeedRecalc = true; }, Set_FrameParaPr: function (Para) { Para.CopyPr(this); this.Set_Spacing({ After: 0 }, false); this.Numbering_Remove(); }, Get_FrameBounds: function (FrameX, FrameY, FrameW, FrameH) { var X0 = FrameX, Y0 = FrameY, X1 = FrameX + FrameW, Y1 = FrameY + FrameH; var Paras = this.Internal_Get_FrameParagraphs(); var Count = Paras.length; var FramePr = this.Get_FramePr(); if (0 >= Count) { return { X: X0, Y: Y0, W: X1 - X0, H: Y1 - Y0 }; } for (var Index = 0; Index < Count; Index++) { var Para = Paras[Index]; var ParaPr = Para.Get_CompiledPr2(false).ParaPr; var Brd = ParaPr.Brd; var _X0 = X0 + ParaPr.Ind.Left + ParaPr.Ind.FirstLine; if (undefined != Brd.Left && border_None != Brd.Left.Value) { _X0 -= Brd.Left.Size + Brd.Left.Space + 1; } if (_X0 < X0) { X0 = _X0; } var _X1 = X1 - ParaPr.Ind.Right; if (undefined != Brd.Right && border_None != Brd.Right.Value) { _X1 += Brd.Right.Size + Brd.Right.Space + 1; } if (_X1 > X1) { X1 = _X1; } } var _Y1 = Y1; var BottomBorder = Paras[Count - 1].Get_CompiledPr2(false).ParaPr.Brd.Bottom; if (undefined != BottomBorder && border_None != BottomBorder.Value) { _Y1 += BottomBorder.Size + BottomBorder.Space; } if (_Y1 > Y1 && (heightrule_Auto === FramePr.HRule || (heightrule_AtLeast === FramePr.HRule && FrameH >= FramePr.H))) { Y1 = _Y1; } return { X: X0, Y: Y0, W: X1 - X0, H: Y1 - Y0 }; }, Set_CalculatedFrame: function (L, T, W, H, L2, T2, W2, H2, PageIndex) { this.CalculatedFrame.T = T; this.CalculatedFrame.L = L; this.CalculatedFrame.W = W; this.CalculatedFrame.H = H; this.CalculatedFrame.T2 = T2; this.CalculatedFrame.L2 = L2; this.CalculatedFrame.W2 = W2; this.CalculatedFrame.H2 = H2; this.CalculatedFrame.PageIndex = PageIndex; }, Internal_Get_FrameParagraphs: function () { var FrameParas = new Array(); var FramePr = this.Get_FramePr(); if (undefined === FramePr) { return FrameParas; } FrameParas.push(this); var Prev = this.Get_DocumentPrev(); while (null != Prev) { if (type_Paragraph === Prev.GetType()) { var PrevFramePr = Prev.Get_FramePr(); if (undefined != PrevFramePr && true === FramePr.Compare(PrevFramePr)) { FrameParas.push(Prev); Prev = Prev.Get_DocumentPrev(); } else { break; } } else { break; } } var Next = this.Get_DocumentNext(); while (null != Next) { if (type_Paragraph === Next.GetType()) { var NextFramePr = Next.Get_FramePr(); if (undefined != NextFramePr && true === FramePr.Compare(NextFramePr)) { FrameParas.push(Next); Next = Next.Get_DocumentNext(); } else { break; } } else { break; } } return FrameParas; }, Is_LineDropCap: function () { var FrameParas = this.Internal_Get_FrameParagraphs(); if (1 !== FrameParas.length || 1 !== this.Lines.length) { return false; } return true; }, Get_LineDropCapWidth: function () { var W = this.Lines[0].Ranges[0].W; var ParaPr = this.Get_CompiledPr2(false).ParaPr; W += ParaPr.Ind.Left + ParaPr.Ind.FirstLine; return W; }, Change_Frame: function (X, Y, W, H, PageIndex) { var LogicDocument = editor.WordControl.m_oLogicDocument; var FramePr = this.Get_FramePr(); if (undefined === FramePr || (Math.abs(Y - this.CalculatedFrame.T) < 0.001 && Math.abs(X - this.CalculatedFrame.L) < 0.001 && Math.abs(W - this.CalculatedFrame.W) < 0.001 && Math.abs(H - this.CalculatedFrame.H) < 0.001 && PageIndex === this.CalculatedFrame.PageIndex)) { return; } var FrameParas = this.Internal_Get_FrameParagraphs(); if (false === LogicDocument.Document_Is_SelectionLocked(changestype_None, { Type: changestype_2_ElementsArray_and_Type, Elements: FrameParas, CheckType: changestype_Paragraph_Content })) { History.Create_NewPoint(); var NewFramePr = FramePr.Copy(); if (Math.abs(X - this.CalculatedFrame.L) > 0.001) { NewFramePr.X = X; NewFramePr.XAlign = undefined; NewFramePr.HAnchor = c_oAscHAnchor.Page; } if (Math.abs(Y - this.CalculatedFrame.T) > 0.001) { NewFramePr.Y = Y; NewFramePr.YAlign = undefined; NewFramePr.VAnchor = c_oAscVAnchor.Page; } if (Math.abs(W - this.CalculatedFrame.W) > 0.001) { NewFramePr.W = W; } if (Math.abs(H - this.CalculatedFrame.H) > 0.001) { if (undefined != FramePr.DropCap && dropcap_None != FramePr.DropCap && 1 === FrameParas.length) { var _H = Math.min(H, Page_Height); NewFramePr.Lines = this.Update_DropCapByHeight(_H); NewFramePr.HRule = linerule_Auto; } else { if (H <= this.CalculatedFrame.H) { NewFramePr.HRule = linerule_Exact; } else { NewFramePr.HRule = linerule_AtLeast; } NewFramePr.H = H; } } var Count = FrameParas.length; for (var Index = 0; Index < Count; Index++) { var Para = FrameParas[Index]; Para.Set_FramePr(NewFramePr, false); } LogicDocument.Recalculate(); LogicDocument.Document_UpdateInterfaceState(); } }, Supplement_FramePr: function (FramePr) { if (undefined != FramePr.DropCap && dropcap_None != FramePr.DropCap) { var _FramePr = this.Get_FramePr(); var FirstFramePara = this; var Prev = FirstFramePara.Get_DocumentPrev(); while (null != Prev) { if (type_Paragraph === Prev.GetType()) { var PrevFramePr = Prev.Get_FramePr(); if (undefined != PrevFramePr && true === _FramePr.Compare(PrevFramePr)) { FirstFramePara = Prev; Prev = Prev.Get_DocumentPrev(); } else { break; } } else { break; } } var TextPr = FirstFramePara.Internal_CalculateTextPr(0); FramePr.FontFamily = { Name: TextPr.RFonts.Ascii.Name, Index: TextPr.RFonts.Ascii.Index }; } var FrameParas = this.Internal_Get_FrameParagraphs(); var Count = FrameParas.length; var ParaPr = FrameParas[0].Get_CompiledPr2(false).ParaPr.Copy(); for (var Index = 1; Index < Count; Index++) { var TempPr = FrameParas[Index].Get_CompiledPr2(false).ParaPr; ParaPr = ParaPr.Compare(TempPr); } FramePr.Brd = ParaPr.Brd; FramePr.Shd = ParaPr.Shd; }, Can_AddDropCap: function () { var Count = this.Content.length; for (var Pos = 0; Pos < Count; Pos++) { if (para_Text === this.Content[Pos].Type) { return true; } } return false; }, Split_DropCap: function (NewParagraph) { var Count = this.Content.length; var EndPos = this.Selection.StartPos > this.Selection.EndPos ? this.Selection.StartPos : this.Selection.EndPos; var bSelection = false; var LastTextPr = null; if (true === this.Selection.Use) { var EndPos = Math.min(this.Selection.StartPos > this.Selection.EndPos ? this.Selection.StartPos : this.Selection.EndPos, this.Content.length); bSelection = true; for (var Pos = 0; Pos < EndPos; Pos++) { var Type = this.Content[Pos].Type; if (para_Text != Type && para_TextPr != Type && para_Tab != Type) { bSelection = false; break; } else { if (para_TextPr === Type) { LastTextPr = this.Content[Pos]; } } } } if (false === bSelection) { var Pos = 0; for (; Pos < Count; Pos++) { var Type = this.Content[Pos].Type; if (para_Text === Type) { break; } else { if (para_TextPr === Type) { LastTextPr = this.Content[Pos]; } } } EndPos = Pos + 1; } for (var Pos = 0; Pos < EndPos; Pos++) { NewParagraph.Internal_Content_Add(Pos, this.Content[Pos]); } var TextPr = this.Internal_CalculateTextPr(EndPos); this.Internal_Content_Remove2(0, EndPos); if (null != LastTextPr) { this.Internal_Content_Add(0, new ParaTextPr(LastTextPr.Value)); } return TextPr; }, Update_DropCapByLines: function (TextPr, Count, LineH, LineTA, LineTD) { this.Set_Spacing({ Before: 0, After: 0, LineRule: linerule_Exact, Line: Count * LineH - 0.001 }, false); var FontSize = 72; TextPr.FontSize = FontSize; g_oTextMeasurer.SetTextPr(TextPr); g_oTextMeasurer.SetFontSlot(fontslot_ASCII, 1); var TDescent = null; var TAscent = null; var TempCount = this.Content.length; for (var Index = 0; Index < TempCount; Index++) { var Item = this.Content[Index]; if (para_Text === Item.Type) { var Temp = g_oTextMeasurer.Measure2(Item.Value); if (null === TAscent || TAscent < Temp.Ascent) { TAscent = Temp.Ascent; } if (null === TDescent || TDescent > Temp.Ascent - Temp.Height) { TDescent = Temp.Ascent - Temp.Height; } } } var THeight = 0; if (null === TAscent || null === TDescent) { THeight = g_oTextMeasurer.GetHeight(); } else { THeight = -TDescent + TAscent; } var EmHeight = THeight; var NewEmHeight = (Count - 1) * LineH + LineTA; var Koef = NewEmHeight / EmHeight; var NewFontSize = TextPr.FontSize * Koef; TextPr.FontSize = parseInt(NewFontSize * 2) / 2; g_oTextMeasurer.SetTextPr(TextPr); g_oTextMeasurer.SetFontSlot(fontslot_ASCII, 1); var TNewDescent = null; var TNewAscent = null; var TempCount = this.Content.length; for (var Index = 0; Index < TempCount; Index++) { var Item = this.Content[Index]; if (para_Text === Item.Type) { var Temp = g_oTextMeasurer.Measure2(Item.Value); if (null === TNewAscent || TNewAscent < Temp.Ascent) { TNewAscent = Temp.Ascent; } if (null === TNewDescent || TNewDescent > Temp.Ascent - Temp.Height) { TNewDescent = Temp.Ascent - Temp.Height; } } } var TNewHeight = 0; if (null === TNewAscent || null === TNewDescent) { TNewHeight = g_oTextMeasurer.GetHeight(); } else { TNewHeight = -TNewDescent + TNewAscent; } var Descent = g_oTextMeasurer.GetDescender(); var Ascent = g_oTextMeasurer.GetAscender(); var Dy = Descent * (LineH * Count) / (Ascent - Descent) + TNewHeight - TNewAscent + LineTD; var PTextPr = new ParaTextPr({ RFonts: { Ascii: { Name: TextPr.RFonts.Ascii.Name, Index: -1 } }, FontSize: TextPr.FontSize, Position: Dy }); this.Select_All(); this.Add(PTextPr); this.Selection_Remove(); }, Update_DropCapByHeight: function (Height) { var AnchorPara = this.Get_FrameAnchorPara(); if (null === AnchorPara || AnchorPara.Lines.length <= 0) { return 1; } this.Set_Spacing({ LineRule: linerule_Exact, Line: Height }, false); var LineH = AnchorPara.Lines[0].Bottom - AnchorPara.Lines[0].Top; var LineTA = AnchorPara.Lines[0].Metrics.TextAscent2; var LineTD = AnchorPara.Lines[0].Metrics.TextDescent + AnchorPara.Lines[0].Metrics.LineGap; var LinesCount = Math.ceil(Height / LineH); var TextPr = this.Internal_CalculateTextPr(this.Internal_GetStartPos()); g_oTextMeasurer.SetTextPr(TextPr); g_oTextMeasurer.SetFontSlot(fontslot_ASCII, 1); var TDescent = null; var TAscent = null; var TempCount = this.Content.length; for (var Index = 0; Index < TempCount; Index++) { var Item = this.Content[Index]; if (para_Text === Item.Type) { var Temp = g_oTextMeasurer.Measure2(Item.Value); if (null === TAscent || TAscent < Temp.Ascent) { TAscent = Temp.Ascent; } if (null === TDescent || TDescent > Temp.Ascent - Temp.Height) { TDescent = Temp.Ascent - Temp.Height; } } } var THeight = 0; if (null === TAscent || null === TDescent) { THeight = g_oTextMeasurer.GetHeight(); } else { THeight = -TDescent + TAscent; } var Koef = (Height - LineTD) / THeight; var NewFontSize = TextPr.FontSize * Koef; TextPr.FontSize = parseInt(NewFontSize * 2) / 2; g_oTextMeasurer.SetTextPr(TextPr); g_oTextMeasurer.SetFontSlot(fontslot_ASCII, 1); var TNewDescent = null; var TNewAscent = null; var TempCount = this.Content.length; for (var Index = 0; Index < TempCount; Index++) { var Item = this.Content[Index]; if (para_Text === Item.Type) { var Temp = g_oTextMeasurer.Measure2(Item.Value); if (null === TNewAscent || TNewAscent < Temp.Ascent) { TNewAscent = Temp.Ascent; } if (null === TNewDescent || TNewDescent > Temp.Ascent - Temp.Height) { TNewDescent = Temp.Ascent - Temp.Height; } } } var TNewHeight = 0; if (null === TNewAscent || null === TNewDescent) { TNewHeight = g_oTextMeasurer.GetHeight(); } else { TNewHeight = -TNewDescent + TNewAscent; } var Descent = g_oTextMeasurer.GetDescender(); var Ascent = g_oTextMeasurer.GetAscender(); var Dy = Descent * (Height) / (Ascent - Descent) + TNewHeight - TNewAscent + LineTD; var PTextPr = new ParaTextPr({ RFonts: { Ascii: { Name: TextPr.RFonts.Ascii.Name, Index: -1 } }, FontSize: TextPr.FontSize, Position: Dy }); this.Select_All(); this.Add(PTextPr); this.Selection_Remove(); return LinesCount; }, Get_FrameAnchorPara: function () { var FramePr = this.Get_FramePr(); if (undefined === FramePr) { return null; } var Next = this.Get_DocumentNext(); while (null != Next) { if (type_Paragraph === Next.GetType()) { var NextFramePr = Next.Get_FramePr(); if (undefined === NextFramePr || false === FramePr.Compare(NextFramePr)) { return Next; } } Next = Next.Get_DocumentNext(); } return Next; }, Split: function (NewParagraph, Pos) { if ("undefined" === typeof(Pos) || null === Pos) { Pos = this.CurPos.ContentPos; } var Hyperlink = this.Check_Hyperlink2(Pos, false); var TextPr = this.Internal_CalculateTextPr(Pos); NewParagraph.DeleteCommentOnRemove = false; NewParagraph.Internal_Content_Remove2(0, NewParagraph.Content.length); NewParagraph.Internal_Content_Concat(this.Content.slice(Pos)); NewParagraph.Internal_Content_Add(0, new ParaTextPr(TextPr)); NewParagraph.Set_ContentPos(0); NewParagraph.DeleteCommentOnRemove = true; NewParagraph.TextPr.Value = this.TextPr.Value.Copy(); if (null != Hyperlink) { NewParagraph.Internal_Content_Add(1, Hyperlink.Copy()); } this.DeleteCommentOnRemove = false; this.Internal_Content_Remove2(Pos, this.Content.length - Pos); this.Internal_Remove_CollaborativeMarks(false); this.DeleteCommentOnRemove = true; if (null != Hyperlink) { this.Internal_Content_Add(this.Content.length, new ParaHyperlinkEnd()); this.Internal_Content_Add(this.Content.length, new ParaTextPr()); } this.Internal_Content_Add(this.Content.length, new ParaEnd()); this.Internal_Content_Add(this.Content.length, new ParaEmpty()); this.CopyPr(NewParagraph); this.RecalcInfo.Set_Type_0(pararecalc_0_All); NewParagraph.RecalcInfo.Set_Type_0(pararecalc_0_All); }, Concat: function (Para) { this.DeleteCommentOnRemove = false; this.Internal_Content_Remove2(this.Content.length - 2, 2); this.DeleteCommentOnRemove = true; Para.Numbering_Remove(); Para.Remove_PresentationNumbering(); this.Internal_Content_Concat(Para.Content); this.RecalcInfo.Set_Type_0(pararecalc_0_All); }, Continue: function (NewParagraph) { this.CopyPr(NewParagraph); var TextPr = this.Internal_CalculateTextPr(this.Internal_GetEndPos()); NewParagraph.Internal_Content_Add(0, new ParaTextPr(TextPr)); NewParagraph.TextPr.Value = this.TextPr.Value.Copy(); }, Undo: function (Data) { var Type = Data.Type; switch (Type) { case historyitem_Paragraph_AddItem: var StartPos = this.Internal_Get_RealPos(Data.Pos); var EndPos = this.Internal_Get_RealPos(Data.EndPos); this.Content.splice(StartPos, EndPos - StartPos + 1); break; case historyitem_Paragraph_RemoveItem: var Pos = this.Internal_Get_RealPos(Data.Pos); var Array_start = this.Content.slice(0, Pos); var Array_end = this.Content.slice(Pos); this.Content = Array_start.concat(Data.Items, Array_end); break; case historyitem_Paragraph_Numbering: var Old = Data.Old; if (undefined != Old) { this.Pr.NumPr = Old; } else { this.Pr.NumPr = undefined; } this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_Align: this.Pr.Jc = Data.Old; this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_Ind_First: if (undefined === this.Pr.Ind) { this.Pr.Ind = new CParaSpacing(); } this.Pr.Ind.FirstLine = Data.Old; this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_Ind_Left: if (undefined === this.Pr.Ind) { this.Pr.Ind = new CParaSpacing(); } this.Pr.Ind.Left = Data.Old; this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_Ind_Right: if (undefined === this.Pr.Ind) { this.Pr.Ind = new CParaSpacing(); } this.Pr.Ind.Right = Data.Old; this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_ContextualSpacing: this.Pr.ContextualSpacing = Data.Old; this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_KeepLines: this.Pr.KeepLines = Data.Old; this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_KeepNext: this.Pr.KeepNext = Data.Old; this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_PageBreakBefore: this.Pr.PageBreakBefore = Data.Old; this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_Spacing_Line: if (undefined === this.Pr.Spacing) { this.Pr.Spacing = new CParaSpacing(); } this.Pr.Spacing.Line = Data.Old; this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_Spacing_LineRule: if (undefined === this.Pr.Spacing) { this.Pr.Spacing = new CParaSpacing(); } this.Pr.Spacing.LineRule = Data.Old; this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_Spacing_Before: if (undefined === this.Pr.Spacing) { this.Pr.Spacing = new CParaSpacing(); } this.Pr.Spacing.Before = Data.Old; this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_Spacing_After: if (undefined === this.Pr.Spacing) { this.Pr.Spacing = new CParaSpacing(); } this.Pr.Spacing.After = Data.Old; this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_Spacing_AfterAutoSpacing: if (undefined === this.Pr.Spacing) { this.Pr.Spacing = new CParaSpacing(); } this.Pr.Spacing.AfterAutoSpacing = Data.Old; this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_Spacing_BeforeAutoSpacing: if (undefined === this.Pr.Spacing) { this.Pr.Spacing = new CParaSpacing(); } this.Pr.Spacing.BeforeAutoSpacing = Data.Old; this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_Shd_Value: if (undefined != Data.Old && undefined === this.Pr.Shd) { this.Pr.Shd = new CDocumentShd(); } if (undefined != Data.Old) { this.Pr.Shd.Value = Data.Old; } this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_Shd_Color: if (undefined != Data.Old && undefined === this.Pr.Shd) { this.Pr.Shd = new CDocumentShd(); } if (undefined != Data.Old) { this.Pr.Shd.Color = Data.Old; } this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_Shd: this.Pr.Shd = Data.Old; this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_WidowControl: this.Pr.WidowControl = Data.Old; this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_Tabs: this.Pr.Tabs = Data.Old; this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_PStyle: var Old = Data.Old; if (undefined != Old) { this.Pr.PStyle = Old; } else { this.Pr.PStyle = undefined; } this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_DocNext: this.Next = Data.Old; break; case historyitem_Paragraph_DocPrev: this.Prev = Data.Old; break; case historyitem_Paragraph_Parent: this.Parent = Data.Old; break; case historyitem_Paragraph_Borders_Between: this.Pr.Brd.Between = Data.Old; this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_Borders_Bottom: this.Pr.Brd.Bottom = Data.Old; this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_Borders_Left: this.Pr.Brd.Left = Data.Old; this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_Borders_Right: this.Pr.Brd.Right = Data.Old; this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_Borders_Top: this.Pr.Brd.Top = Data.Old; this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_Pr: var Old = Data.Old; if (undefined != Old) { this.Pr = Old; } else { this.Pr = new CParaPr(); } this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_PresentationPr_Bullet: this.PresentationPr.Bullet = Data.Old; break; case historyitem_Paragraph_PresentationPr_Level: this.PresentationPr.Level = Data.Old; break; case historyitem_Paragraph_FramePr: this.Pr.FramePr = Data.Old; this.CompiledPr.NeedRecalc = true; break; } this.RecalcInfo.Set_Type_0(pararecalc_0_All); this.RecalcInfo.Set_Type_0_Spell(pararecalc_0_Spell_All); }, Redo: function (Data) { var Type = Data.Type; switch (Type) { case historyitem_Paragraph_AddItem: var Pos = this.Internal_Get_RealPos(Data.Pos); var Array_start = this.Content.slice(0, Pos); var Array_end = this.Content.slice(Pos); this.Content = Array_start.concat(Data.Items, Array_end); break; case historyitem_Paragraph_RemoveItem: var StartPos = this.Internal_Get_RealPos(Data.Pos); var EndPos = this.Internal_Get_RealPos(Data.EndPos); this.Content.splice(StartPos, EndPos - StartPos + 1); break; case historyitem_Paragraph_Numbering: var New = Data.New; if (undefined != New) { this.Pr.NumPr = New; } else { this.Pr.NumPr = undefined; } this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_Align: this.Pr.Jc = Data.New; this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_Ind_First: if (undefined === this.Pr.Ind) { this.Pr.Ind = new CParaInd(); } this.Pr.Ind.FirstLine = Data.New; this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_Ind_Left: if (undefined === this.Pr.Ind) { this.Pr.Ind = new CParaInd(); } this.Pr.Ind.Left = Data.New; this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_Ind_Right: if (undefined === this.Pr.Ind) { this.Pr.Ind = new CParaInd(); } this.Pr.Ind.Right = Data.New; this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_ContextualSpacing: this.Pr.ContextualSpacing = Data.New; this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_KeepLines: this.Pr.KeepLines = Data.New; this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_KeepNext: this.Pr.KeepNext = Data.New; this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_PageBreakBefore: this.Pr.PageBreakBefore = Data.New; this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_Spacing_Line: if (undefined === this.Pr.Spacing) { this.Pr.Spacing = new CParaSpacing(); } this.Pr.Spacing.Line = Data.New; this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_Spacing_LineRule: if (undefined === this.Pr.Spacing) { this.Pr.Spacing = new CParaSpacing(); } this.Pr.Spacing.LineRule = Data.New; this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_Spacing_Before: if (undefined === this.Pr.Spacing) { this.Pr.Spacing = new CParaSpacing(); } this.Pr.Spacing.Before = Data.New; this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_Spacing_After: if (undefined === this.Pr.Spacing) { this.Pr.Spacing = new CParaSpacing(); } this.Pr.Spacing.After = Data.New; this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_Spacing_AfterAutoSpacing: if (undefined === this.Pr.Spacing) { this.Pr.Spacing = new CParaSpacing(); } this.Pr.Spacing.AfterAutoSpacing = Data.New; this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_Spacing_BeforeAutoSpacing: if (undefined === this.Pr.Spacing) { this.Pr.Spacing = new CParaSpacing(); } this.Pr.Spacing.BeforeAutoSpacing = Data.New; this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_Shd_Value: if (undefined != Data.New && undefined === this.Pr.Shd) { this.Pr.Shd = new CDocumentShd(); } if (undefined != Data.New) { this.Pr.Shd.Value = Data.New; } this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_Shd_Color: if (undefined != Data.New && undefined === this.Pr.Shd) { this.Pr.Shd = new CDocumentShd(); } if (undefined != Data.New) { this.Pr.Shd.Color = Data.New; } this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_Shd: this.Pr.Shd = Data.New; this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_WidowControl: this.Pr.WidowControl = Data.New; this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_Tabs: this.Pr.Tabs = Data.New; this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_PStyle: var New = Data.New; if (undefined != New) { this.Pr.PStyle = New; } else { this.Pr.PStyle = undefined; } this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_DocNext: this.Next = Data.New; break; case historyitem_Paragraph_DocPrev: this.Prev = Data.New; break; case historyitem_Paragraph_Parent: this.Parent = Data.New; break; case historyitem_Paragraph_Borders_Between: this.Pr.Brd.Between = Data.New; this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_Borders_Bottom: this.Pr.Brd.Bottom = Data.New; this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_Borders_Left: this.Pr.Brd.Left = Data.New; this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_Borders_Right: this.Pr.Brd.Right = Data.New; this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_Borders_Top: this.Pr.Brd.Top = Data.New; this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_Pr: var New = Data.New; if (undefined != New) { this.Pr = New; } else { this.Pr = new CParaPr(); } this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_PresentationPr_Bullet: this.PresentationPr.Bullet = Data.New; break; case historyitem_Paragraph_PresentationPr_Level: this.PresentationPr.Level = Data.New; break; case historyitem_Paragraph_FramePr: this.Pr.FramePr = Data.New; this.CompiledPr.NeedRecalc = true; break; } this.RecalcInfo.Set_Type_0(pararecalc_0_All); this.RecalcInfo.Set_Type_0_Spell(pararecalc_0_Spell_All); }, Get_SelectionState: function () { var ParaState = new Object(); ParaState.CurPos = { X: this.CurPos.X, Y: this.CurPos.Y, Line: this.CurPos.Line, ContentPos: this.Internal_Get_ClearPos(this.CurPos.ContentPos), RealX: this.CurPos.RealX, RealY: this.CurPos.RealY, PagesPos: this.CurPos.PagesPos }; ParaState.Selection = { Start: this.Selection.Start, Use: this.Selection.Use, StartPos: this.Internal_Get_ClearPos(this.Selection.StartPos), EndPos: this.Internal_Get_ClearPos(this.Selection.EndPos), Flag: this.Selection.Flag }; return [ParaState]; }, Set_SelectionState: function (State, StateIndex) { if (State.length <= 0) { return; } var ParaState = State[StateIndex]; this.CurPos = { X: ParaState.CurPos.X, Y: ParaState.CurPos.Y, Line: ParaState.CurPos.Line, ContentPos: this.Internal_Get_RealPos(ParaState.CurPos.ContentPos), RealX: ParaState.CurPos.RealX, RealY: ParaState.CurPos.RealY, PagesPos: ParaState.CurPos.PagesPos }; this.Selection = { Start: ParaState.Selection.Start, Use: ParaState.Selection.Use, StartPos: this.Internal_Get_RealPos(ParaState.Selection.StartPos), EndPos: this.Internal_Get_RealPos(ParaState.Selection.EndPos), Flag: ParaState.Selection.Flag }; var CursorPos_max = this.Internal_GetEndPos(); var CursorPos_min = this.Internal_GetStartPos(); this.Set_ContentPos(Math.max(CursorPos_min, Math.min(CursorPos_max, this.CurPos.ContentPos))); this.Selection.StartPos = Math.max(CursorPos_min, Math.min(CursorPos_max, this.Selection.StartPos)); this.Selection.EndPos = Math.max(CursorPos_min, Math.min(CursorPos_max, this.Selection.EndPos)); }, Get_ParentObject_or_DocumentPos: function () { return this.Parent.Get_ParentObject_or_DocumentPos(this.Index); }, Refresh_RecalcData: function (Data) { var Type = Data.Type; var bNeedRecalc = false; var CurPage = 0; switch (Type) { case historyitem_Paragraph_AddItem: case historyitem_Paragraph_RemoveItem: for (CurPage = this.Pages.length - 1; CurPage > 0; CurPage--) { if (Data.Pos > this.Lines[this.Pages[CurPage].StartLine].StartPos) { break; } } this.RecalcInfo.Set_Type_0(pararecalc_0_All); bNeedRecalc = true; break; case historyitem_Paragraph_Numbering: case historyitem_Paragraph_PStyle: case historyitem_Paragraph_Pr: case historyitem_Paragraph_PresentationPr_Bullet: case historyitem_Paragraph_PresentationPr_Level: this.RecalcInfo.Set_Type_0(pararecalc_0_All); bNeedRecalc = true; break; case historyitem_Paragraph_Align: case historyitem_Paragraph_Ind_First: case historyitem_Paragraph_Ind_Left: case historyitem_Paragraph_Ind_Right: case historyitem_Paragraph_ContextualSpacing: case historyitem_Paragraph_KeepLines: case historyitem_Paragraph_KeepNext: case historyitem_Paragraph_PageBreakBefore: case historyitem_Paragraph_Spacing_Line: case historyitem_Paragraph_Spacing_LineRule: case historyitem_Paragraph_Spacing_Before: case historyitem_Paragraph_Spacing_After: case historyitem_Paragraph_Spacing_AfterAutoSpacing: case historyitem_Paragraph_Spacing_BeforeAutoSpacing: case historyitem_Paragraph_WidowControl: case historyitem_Paragraph_Tabs: case historyitem_Paragraph_Parent: case historyitem_Paragraph_Borders_Between: case historyitem_Paragraph_Borders_Bottom: case historyitem_Paragraph_Borders_Left: case historyitem_Paragraph_Borders_Right: case historyitem_Paragraph_Borders_Top: case historyitem_Paragraph_FramePr: bNeedRecalc = true; break; case historyitem_Paragraph_Shd_Value: case historyitem_Paragraph_Shd_Color: case historyitem_Paragraph_Shd: case historyitem_Paragraph_DocNext: case historyitem_Paragraph_DocPrev: break; } if (true === bNeedRecalc) { var Prev = this.Get_DocumentPrev(); if (0 === CurPage && null != Prev && type_Paragraph === Prev.GetType() && true === Prev.Get_CompiledPr2(false).ParaPr.KeepNext) { Prev.Refresh_RecalcData2(Prev.Pages.length - 1); } return this.Refresh_RecalcData2(CurPage); } }, Refresh_RecalcData2: function (CurPage) { if (undefined === CurPage) { CurPage = 0; } if (this.Index >= 0) { this.Parent.Refresh_RecalcData2(this.Index, this.PageNum + CurPage); } }, Check_HistoryUninon: function (Data1, Data2) { var Type1 = Data1.Type; var Type2 = Data2.Type; if (historyitem_Paragraph_AddItem === Type1 && historyitem_Paragraph_AddItem === Type2) { if (1 === Data1.Items.length && 1 === Data2.Items.length && Data1.Pos === Data2.Pos - 1 && para_Text === Data1.Items[0].Type && para_Text === Data2.Items[0].Type) { return true; } } return false; }, Document_Is_SelectionLocked: function (CheckType) { switch (CheckType) { case changestype_Paragraph_Content: case changestype_Paragraph_Properties: case changestype_Document_Content: case changestype_Document_Content_Add: case changestype_Image_Properties: this.Lock.Check(this.Get_Id()); break; case changestype_Remove: if (true != this.Selection.Use && true == this.Cursor_IsStart()) { var Pr = this.Get_CompiledPr2(false).ParaPr; if (undefined != this.Numbering_Get() || Math.abs(Pr.Ind.FirstLine) > 0.001 || Math.abs(Pr.Ind.Left) > 0.001) {} else { var Prev = this.Get_DocumentPrev(); if (null != Prev && type_Paragraph === Prev.GetType()) { Prev.Lock.Check(Prev.Get_Id()); } } } else { if (true === this.Selection.Use) { var StartPos = this.Selection.StartPos; var EndPos = this.Selection.EndPos; if (StartPos > EndPos) { var Temp = EndPos; EndPos = StartPos; StartPos = Temp; } if (EndPos >= this.Content.length - 1 && StartPos > this.Internal_GetStartPos()) { var Next = this.Get_DocumentNext(); if (null != Next && type_Paragraph === Next.GetType()) { Next.Lock.Check(Next.Get_Id()); } } } } this.Lock.Check(this.Get_Id()); break; case changestype_Delete: if (true != this.Selection.Use && true === this.Cursor_IsEnd()) { var Next = this.Get_DocumentNext(); if (null != Next && type_Paragraph === Next.GetType()) { Next.Lock.Check(Next.Get_Id()); } } else { if (true === this.Selection.Use) { var StartPos = this.Selection.StartPos; var EndPos = this.Selection.EndPos; if (StartPos > EndPos) { var Temp = EndPos; EndPos = StartPos; StartPos = Temp; } if (EndPos >= this.Content.length - 1 && StartPos > this.Internal_GetStartPos()) { var Next = this.Get_DocumentNext(); if (null != Next && type_Paragraph === Next.GetType()) { Next.Lock.Check(Next.Get_Id()); } } } } this.Lock.Check(this.Get_Id()); break; case changestype_Document_SectPr: case changestype_Table_Properties: case changestype_Table_RemoveCells: case changestype_HdrFtr: CollaborativeEditing.Add_CheckLock(true); break; } }, Save_Changes: function (Data, Writer) { Writer.WriteLong(historyitem_type_Paragraph); var Type = Data.Type; Writer.WriteLong(Type); switch (Type) { case historyitem_Paragraph_AddItem: var bArray = Data.UseArray; var Count = Data.Items.length; Writer.WriteLong(Count); for (var Index = 0; Index < Count; Index++) { if (true === bArray) { Writer.WriteLong(Data.PosArray[Index]); } else { Writer.WriteLong(Data.Pos + Index); } Data.Items[Index].Write_ToBinary(Writer); } break; case historyitem_Paragraph_RemoveItem: var bArray = Data.UseArray; var Count = Data.Items.length; var StartPos = Writer.GetCurPosition(); Writer.Skip(4); var RealCount = Count; for (var Index = 0; Index < Count; Index++) { if (true === bArray) { if (false === Data.PosArray[Index]) { RealCount--; } else { Writer.WriteLong(Data.PosArray[Index]); } } else { Writer.WriteLong(Data.Pos); } } var EndPos = Writer.GetCurPosition(); Writer.Seek(StartPos); Writer.WriteLong(RealCount); Writer.Seek(EndPos); break; case historyitem_Paragraph_Numbering: if (undefined === Data.New) { Writer.WriteBool(true); } else { Writer.WriteBool(false); Data.New.Write_ToBinary(Writer); } break; case historyitem_Paragraph_Ind_First: case historyitem_Paragraph_Ind_Left: case historyitem_Paragraph_Ind_Right: case historyitem_Paragraph_Spacing_Line: case historyitem_Paragraph_Spacing_Before: case historyitem_Paragraph_Spacing_After: if (undefined === Data.New) { Writer.WriteBool(true); } else { Writer.WriteBool(false); Writer.WriteDouble(Data.New); } break; case historyitem_Paragraph_Align: case historyitem_Paragraph_Spacing_LineRule: if (undefined === Data.New) { Writer.WriteBool(true); } else { Writer.WriteBool(false); Writer.WriteLong(Data.New); } break; case historyitem_Paragraph_ContextualSpacing: case historyitem_Paragraph_KeepLines: case historyitem_Paragraph_KeepNext: case historyitem_Paragraph_PageBreakBefore: case historyitem_Paragraph_Spacing_AfterAutoSpacing: case historyitem_Paragraph_Spacing_BeforeAutoSpacing: case historyitem_Paragraph_WidowControl: if (undefined === Data.New) { Writer.WriteBool(true); } else { Writer.WriteBool(false); Writer.WriteBool(Data.New); } break; case historyitem_Paragraph_Shd_Value: var New = Data.New; if (undefined != New) { Writer.WriteBool(false); Writer.WriteByte(Data.New); } else { Writer.WriteBool(true); } break; case historyitem_Paragraph_Shd_Color: var New = Data.New; if (undefined != New) { Writer.WriteBool(false); Data.New.Write_ToBinary(Writer); } else { Writer.WriteBool(true); } break; case historyitem_Paragraph_Shd: var New = Data.New; if (undefined != New) { Writer.WriteBool(false); Data.New.Write_ToBinary(Writer); } else { Writer.WriteBool(true); } break; case historyitem_Paragraph_Tabs: if (undefined != Data.New) { Writer.WriteBool(false); Data.New.Write_ToBinary(Writer); } else { Writer.WriteBool(true); } break; case historyitem_Paragraph_PStyle: if (undefined != Data.New) { Writer.WriteBool(false); Writer.WriteString2(Data.New); } else { Writer.WriteBool(true); } break; case historyitem_Paragraph_DocNext: case historyitem_Paragraph_DocPrev: case historyitem_Paragraph_Parent: if (null != Data.New) { Writer.WriteString2(Data.New.Get_Id()); } else { Writer.WriteString2(""); } break; case historyitem_Paragraph_Borders_Between: case historyitem_Paragraph_Borders_Bottom: case historyitem_Paragraph_Borders_Left: case historyitem_Paragraph_Borders_Right: case historyitem_Paragraph_Borders_Top: if (undefined != Data.New) { Writer.WriteBool(false); Data.New.Write_ToBinary(Writer); } else { Writer.WriteBool(true); } break; case historyitem_Paragraph_Pr: if (undefined === Data.New) { Writer.WriteBool(true); } else { Writer.WriteBool(false); Data.New.Write_ToBinary(Writer); } break; case historyitem_Paragraph_PresentationPr_Bullet: Data.New.Write_ToBinary(Writer); break; case historyitem_Paragraph_PresentationPr_Level: Writer.WriteLong(Data.New); break; case historyitem_Paragraph_FramePr: if (undefined === Data.New) { Writer.WriteBool(true); } else { Writer.WriteBool(false); Data.New.Write_ToBinary(Writer); } break; } return Writer; }, Load_Changes: function (Reader) { var ClassType = Reader.GetLong(); if (historyitem_type_Paragraph != ClassType) { return; } var Type = Reader.GetLong(); switch (Type) { case historyitem_Paragraph_AddItem: var Count = Reader.GetLong(); for (var Index = 0; Index < Count; Index++) { var Pos = this.Internal_Get_RealPos(this.m_oContentChanges.Check(contentchanges_Add, Reader.GetLong())); var Element = ParagraphContent_Read_FromBinary(Reader); if (null != Element) { if (Element instanceof ParaCommentStart) { var Comment = g_oTableId.Get_ById(Element.Id); if (null != Comment) { Comment.Set_StartInfo(0, 0, 0, 0, this.Get_Id()); } } else { if (Element instanceof ParaCommentEnd) { var Comment = g_oTableId.Get_ById(Element.Id); if (null != Comment) { Comment.Set_EndInfo(0, 0, 0, 0, this.Get_Id()); } } } this.Content.splice(Pos, 0, new ParaCollaborativeChangesEnd()); this.Content.splice(Pos, 0, Element); this.Content.splice(Pos, 0, new ParaCollaborativeChangesStart()); CollaborativeEditing.Add_ChangedClass(this); } } this.DeleteCollaborativeMarks = false; break; case historyitem_Paragraph_RemoveItem: var Count = Reader.GetLong(); for (var Index = 0; Index < Count; Index++) { var ChangesPos = this.m_oContentChanges.Check(contentchanges_Remove, Reader.GetLong()); if (false === ChangesPos) { continue; } var Pos = this.Internal_Get_RealPos(ChangesPos); this.Content.splice(Pos, 1); } break; case historyitem_Paragraph_Numbering: if (true === Reader.GetBool()) { this.Pr.NumPr = undefined; } else { this.Pr.NumPr = new CNumPr(); this.Pr.NumPr.Read_FromBinary(Reader); } this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_Align: if (true === Reader.GetBool()) { this.Pr.Jc = undefined; } else { this.Pr.Jc = Reader.GetLong(); } this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_Ind_First: if (undefined === this.Pr.Ind) { this.Pr.Ind = new CParaInd(); } if (true === Reader.GetBool()) { this.Pr.Ind.FirstLine = undefined; } else { this.Pr.Ind.FirstLine = Reader.GetDouble(); } this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_Ind_Left: if (undefined === this.Pr.Ind) { this.Pr.Ind = new CParaInd(); } if (true === Reader.GetBool()) { this.Pr.Ind.Left = undefined; } else { this.Pr.Ind.Left = Reader.GetDouble(); } this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_Ind_Right: if (undefined === this.Pr.Ind) { this.Pr.Ind = new CParaInd(); } if (true === Reader.GetBool()) { this.Pr.Ind.Right = undefined; } else { this.Pr.Ind.Right = Reader.GetDouble(); } this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_ContextualSpacing: if (true === Reader.GetBool()) { this.Pr.ContextualSpacing = undefined; } else { this.Pr.ContextualSpacing = Reader.GetBool(); } this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_KeepLines: if (false === Reader.GetBool()) { this.Pr.KeepLines = Reader.GetBool(); } else { this.Pr.KeepLines = undefined; } this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_KeepNext: if (false === Reader.GetBool()) { this.Pr.KeepNext = Reader.GetLong(); } else { this.Pr.KeepNext = undefined; } this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_PageBreakBefore: if (false === Reader.GetBool()) { this.Pr.PageBreakBefore = Reader.GetBool(); } else { this.Pr.PageBreakBefore = undefined; } this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_Spacing_Line: if (undefined === this.Pr.Spacing) { this.Pr.Spacing = new CParaSpacing(); } if (false === Reader.GetBool()) { this.Pr.Spacing.Line = Reader.GetDouble(); } else { this.Pr.Spacing.Line = undefined; } this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_Spacing_LineRule: if (undefined === this.Pr.Spacing) { this.Pr.Spacing = new CParaSpacing(); } if (false === Reader.GetBool()) { this.Pr.Spacing.LineRule = Reader.GetLong(); } else { this.Pr.Spacing.LineRule = undefined; } this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_Spacing_Before: if (undefined === this.Pr.Spacing) { this.Pr.Spacing = new CParaSpacing(); } if (false === Reader.GetBool()) { this.Pr.Spacing.Before = Reader.GetDouble(); } else { this.Pr.Spacing.Before = undefined; } this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_Spacing_After: if (undefined === this.Pr.Spacing) { this.Pr.Spacing = new CParaSpacing(); } if (false === Reader.GetBool()) { this.Pr.Spacing.After = Reader.GetDouble(); } else { this.Pr.Spacing.After = undefined; } this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_Spacing_AfterAutoSpacing: if (undefined === this.Pr.Spacing) { this.Pr.Spacing = new CParaSpacing(); } if (false === Reader.GetBool()) { this.Pr.Spacing.AfterAutoSpacing = Reader.GetBool(); } else { this.Pr.Spacing.AfterAutoSpacing = undefined; } this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_Spacing_BeforeAutoSpacing: if (undefined === this.Pr.Spacing) { this.Pr.Spacing = new CParaSpacing(); } if (false === Reader.GetBool()) { this.Pr.Spacing.AfterAutoSpacing = Reader.GetBool(); } else { this.Pr.Spacing.BeforeAutoSpacing = undefined; } this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_Shd_Value: if (false === Reader.GetBool()) { if (undefined === this.Pr.Shd) { this.Pr.Shd = new CDocumentShd(); } this.Pr.Shd.Value = Reader.GetByte(); } else { if (undefined != this.Pr.Shd) { this.Pr.Shd.Value = undefined; } } this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_Shd_Color: if (false === Reader.GetBool()) { if (undefined === this.Pr.Shd) { this.Pr.Shd = new CDocumentShd(); } this.Pr.Shd.Color = new CDocumentColor(0, 0, 0); this.Pr.Shd.Color.Read_FromBinary(Reader); } else { if (undefined != this.Pr.Shd) { this.Pr.Shd.Color = undefined; } } this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_Shd: if (false === Reader.GetBool()) { this.Pr.Shd = new CDocumentShd(); this.Pr.Shd.Read_FromBinary(Reader); } else { this.Pr.Shd = undefined; } this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_WidowControl: if (false === Reader.GetBool()) { this.Pr.WidowControl = Reader.GetBool(); } else { this.Pr.WidowControl = undefined; } this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_Tabs: if (false === Reader.GetBool()) { this.Pr.Tabs = new CParaTabs(); this.Pr.Tabs.Read_FromBinary(Reader); } else { this.Pr.Tabs = undefined; } this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_PStyle: if (false === Reader.GetBool()) { this.Pr.PStyle = Reader.GetString2(); } else { this.Pr.PStyle = undefined; } this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_DocNext: break; case historyitem_Paragraph_DocPrev: break; case historyitem_Paragraph_Parent: this.Parent = g_oTableId.Get_ById(Reader.GetString2()); break; case historyitem_Paragraph_Borders_Between: if (false === Reader.GetBool()) { this.Pr.Brd.Between = new CDocumentBorder(); this.Pr.Brd.Between.Read_FromBinary(Reader); } else { this.Pr.Brd.Between = undefined; } this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_Borders_Bottom: if (false === Reader.GetBool()) { this.Pr.Brd.Bottom = new CDocumentBorder(); this.Pr.Brd.Bottom.Read_FromBinary(Reader); } else { this.Pr.Brd.Bottom = undefined; } this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_Borders_Left: if (false === Reader.GetBool()) { this.Pr.Brd.Left = new CDocumentBorder(); this.Pr.Brd.Left.Read_FromBinary(Reader); } else { this.Pr.Brd.Left = undefined; } this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_Borders_Right: if (false === Reader.GetBool()) { this.Pr.Brd.Right = new CDocumentBorder(); this.Pr.Brd.Right.Read_FromBinary(Reader); } else { this.Pr.Brd.Right = undefined; } this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_Borders_Top: if (false === Reader.GetBool()) { this.Pr.Brd.Top = new CDocumentBorder(); this.Pr.Brd.Top.Read_FromBinary(Reader); } else { this.Pr.Brd.Top = undefined; } this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_Pr: if (true === Reader.GetBool()) { this.Pr = new CParaPr(); } else { this.Pr = new CParaPr(); this.Pr.Read_FromBinary(Reader); } this.CompiledPr.NeedRecalc = true; break; case historyitem_Paragraph_PresentationPr_Bullet: var Bullet = new CPresentationBullet(); Bullet.Read_FromBinary(Reader); this.PresentationPr.Bullet = Bullet; break; case historyitem_Paragraph_PresentationPr_Level: this.PresentationPr.Level = Reader.GetLong(); break; case historyitem_Paragraph_FramePr: if (false === Reader.GetBool()) { this.Pr.FramePr = new CFramePr(); this.Pr.FramePr.Read_FromBinary(Reader); } else { this.Pr.FramePr = undefined; } this.CompiledPr.NeedRecalc = true; break; } this.RecalcInfo.Set_Type_0(pararecalc_0_All); this.RecalcInfo.Set_Type_0_Spell(pararecalc_0_Spell_All); }, Write_ToBinary2: function (Writer) { Writer.WriteLong(historyitem_type_Paragraph); Writer.WriteString2("" + this.Id); Writer.WriteString2(this.Parent.Get_Id()); this.Pr.Write_ToBinary(Writer); Writer.WriteString2(this.TextPr.Get_Id()); var StartPos = Writer.GetCurPosition(); Writer.Skip(4); var Len = this.Content.length; var Count = 0; for (var Index = 0; Index < Len; Index++) { var Item = this.Content[Index]; if (true === Item.Is_RealContent()) { Item.Write_ToBinary(Writer); Count++; } } var EndPos = Writer.GetCurPosition(); Writer.Seek(StartPos); Writer.WriteLong(Count); Writer.Seek(EndPos); }, Read_FromBinary2: function (Reader) { this.Id = Reader.GetString2(); this.DrawingDocument = editor.WordControl.m_oLogicDocument.DrawingDocument; var LinkData = new Object(); LinkData.Parent = Reader.GetString2(); this.Pr = new CParaPr(); this.Pr.Read_FromBinary(Reader); LinkData.TextPr = Reader.GetString2(); CollaborativeEditing.Add_LinkData(this, LinkData); this.Content = new Array(); var Count = Reader.GetLong(); for (var Index = 0; Index < Count; Index++) { var Element = ParagraphContent_Read_FromBinary(Reader); if (null != Element) { this.Content.push(Element); } } CollaborativeEditing.Add_NewObject(this); }, Load_LinkData: function (LinkData) { if ("undefined" != typeof(LinkData.Parent)) { this.Parent = g_oTableId.Get_ById(LinkData.Parent); } if ("undefined" != typeof(LinkData.TextPr)) { this.TextPr = g_oTableId.Get_ById(LinkData.TextPr); } }, Clear_CollaborativeMarks: function () { for (var Pos = 0; Pos < this.Content.length; Pos++) { var Item = this.Content[Pos]; if (Item.Type == para_CollaborativeChangesEnd || Item.Type == para_CollaborativeChangesStart) { this.Internal_Content_Remove(Pos); Pos--; } } }, Add_Comment: function (Comment, bStart, bEnd) { var CursorPos_max = this.Internal_GetEndPos(); var CursorPos_min = this.Internal_GetStartPos(); if (true === this.ApplyToAll) { if (true === bEnd) { var PagePos = this.Internal_GetXYByContentPos(CursorPos_max); var Line = this.Lines[PagePos.Internal.Line]; var LineA = Line.Metrics.Ascent; var LineH = Line.Bottom - Line.Top; Comment.Set_EndInfo(PagePos.PageNum, PagePos.X, PagePos.Y - LineA, LineH, this.Get_Id()); var Item = new ParaCommentEnd(Comment.Get_Id()); this.Internal_Content_Add(CursorPos_max, Item); } if (true === bStart) { var PagePos = this.Internal_GetXYByContentPos(CursorPos_min); var Line = this.Lines[PagePos.Internal.Line]; var LineA = Line.Metrics.Ascent; var LineH = Line.Bottom - Line.Top; Comment.Set_StartInfo(PagePos.PageNum, PagePos.X, PagePos.Y - LineA, LineH, this.Get_Id()); var Item = new ParaCommentStart(Comment.Get_Id()); this.Internal_Content_Add(CursorPos_min, Item); } } else { if (true === this.Selection.Use) { var StartPos, EndPos; if (this.Selection.StartPos < this.Selection.EndPos) { StartPos = this.Selection.StartPos; EndPos = this.Selection.EndPos; } else { StartPos = this.Selection.EndPos; EndPos = this.Selection.StartPos; } if (true === bEnd) { EndPos = Math.max(CursorPos_min, Math.min(CursorPos_max, EndPos)); var PagePos = this.Internal_GetXYByContentPos(EndPos); var Line = this.Lines[PagePos.Internal.Line]; var LineA = Line.Metrics.Ascent; var LineH = Line.Bottom - Line.Top; Comment.Set_EndInfo(PagePos.PageNum, PagePos.X, PagePos.Y - LineA, LineH, this.Get_Id()); var Item = new ParaCommentEnd(Comment.Get_Id()); this.Internal_Content_Add(EndPos, Item); } if (true === bStart) { StartPos = Math.max(CursorPos_min, Math.min(CursorPos_max, StartPos)); var PagePos = this.Internal_GetXYByContentPos(StartPos); var Line = this.Lines[PagePos.Internal.Line]; var LineA = Line.Metrics.Ascent; var LineH = Line.Bottom - Line.Top; Comment.Set_StartInfo(PagePos.PageNum, PagePos.X, PagePos.Y - LineA, LineH, this.Get_Id()); var Item = new ParaCommentStart(Comment.Get_Id()); this.Internal_Content_Add(StartPos, Item); } } else { if (true === bEnd) { var Pos = Math.max(CursorPos_min, Math.min(CursorPos_max, this.CurPos.ContentPos)); var PagePos = this.Internal_GetXYByContentPos(Pos); var Line = this.Lines[PagePos.Internal.Line]; var LineA = Line.Metrics.Ascent; var LineH = Line.Bottom - Line.Top; Comment.Set_EndInfo(PagePos.PageNum, PagePos.X, PagePos.Y - LineA, LineH, this.Get_Id()); var Item = new ParaCommentEnd(Comment.Get_Id()); this.Internal_Content_Add(Pos, Item); } if (true === bStart) { var Pos = Math.max(CursorPos_min, Math.min(CursorPos_max, this.CurPos.ContentPos)); var PagePos = this.Internal_GetXYByContentPos(Pos); var Line = this.Lines[PagePos.Internal.Line]; var LineA = Line.Metrics.Ascent; var LineH = Line.Bottom - Line.Top; Comment.Set_StartInfo(PagePos.PageNum, PagePos.X, PagePos.Y - LineA, LineH, this.Get_Id()); var Item = new ParaCommentStart(Comment.Get_Id()); this.Internal_Content_Add(Pos, Item); } } } }, Add_Comment2: function (Comment, ObjectId) { var Pos = -1; var Count = this.Content.length; for (var Index = 0; Index < Count; Index++) { var Item = this.Content[Index]; if (para_Drawing === Item.Type) { Pos = Index; break; } } if (-1 != Pos) { var StartPos = Pos; var EndPos = Pos + 1; var PagePos = this.Internal_GetXYByContentPos(EndPos); var Line = this.Lines[PagePos.Internal.Line]; var LineA = Line.Metrics.Ascent; var LineH = Line.Bottom - Line.Top; Comment.Set_EndInfo(PagePos.PageNum, PagePos.X, PagePos.Y - LineA, LineH, this.Get_Id()); var Item = new ParaCommentEnd(Comment.Get_Id()); this.Internal_Content_Add(EndPos, Item); var PagePos = this.Internal_GetXYByContentPos(StartPos); var Line = this.Lines[PagePos.Internal.Line]; var LineA = Line.Metrics.Ascent; var LineH = Line.Bottom - Line.Top; Comment.Set_StartInfo(PagePos.PageNum, PagePos.X, PagePos.Y - LineA, LineH, this.Get_Id()); var Item = new ParaCommentStart(Comment.Get_Id()); this.Internal_Content_Add(StartPos, Item); } }, CanAdd_Comment: function () { if (true === this.Selection.Use && true != this.Selection_IsEmpty()) { return true; } return false; }, Remove_CommentMarks: function (Id) { var DocumentComments = editor.WordControl.m_oLogicDocument.Comments; var Count = this.Content.length; for (var Pos = 0; Pos < Count; Pos++) { var Item = this.Content[Pos]; if ((para_CommentStart === Item.Type || para_CommentEnd === Item.Type) && Id === Item.Id) { if (para_CommentStart === Item.Type) { DocumentComments.Set_StartInfo(Item.Id, 0, 0, 0, 0, null); } else { DocumentComments.Set_EndInfo(Item.Id, 0, 0, 0, 0, null); } this.Internal_Content_Remove(Pos); Pos--; Count--; } } }, Replace_MisspelledWord: function (Word, WordId) { var Element = this.SpellChecker.Elements[WordId]; var StartPos = Element.StartPos; var EndPos = Element.EndPos; for (var Pos = EndPos; Pos >= StartPos; Pos--) { var ItemType = this.Content[Pos].Type; if (para_TextPr != ItemType) { this.Internal_Content_Remove(Pos); } } var Len = Word.length; for (var Pos = 0; Pos < Len; Pos++) { this.Internal_Content_Add(StartPos + Pos, new ParaText(Word[Pos])); } this.RecalcInfo.Set_Type_0(pararecalc_0_All); this.Selection.Use = false; this.Selection.Start = false; this.Selection.StartPos = EndPos; this.Selection.EndPos = EndPos; this.Set_ContentPos(EndPos); }, Ignore_MisspelledWord: function (WordId) { var Element = this.SpellChecker.Elements[WordId]; Element.Checked = true; this.ReDraw(); } }; var pararecalc_0_All = 0; var pararecalc_0_None = 1; var pararecalc_0_Spell_All = 0; var pararecalc_0_Spell_Pos = 1; var pararecalc_0_Spell_Lang = 2; var pararecalc_0_Spell_None = 3; function CParaRecalcInfo() { this.Recalc_0_Type = pararecalc_0_All; this.Recalc_0_Spell = { Type: pararecalc_0_All, StartPos: 0, EndPos: 0 }; } CParaRecalcInfo.prototype = { Set_Type_0: function (Type) { this.Recalc_0_Type = Type; }, Set_Type_0_Spell: function (Type, StartPos, EndPos) { if (pararecalc_0_Spell_All === this.Recalc_0_Spell.Type) { return; } else { if (pararecalc_0_Spell_None === this.Recalc_0_Spell.Type || pararecalc_0_Spell_Lang === this.Recalc_0_Spell.Type) { this.Recalc_0_Spell.Type = Type; if (pararecalc_0_Spell_Pos === Type) { this.Recalc_0_Spell.StartPos = StartPos; this.Recalc_0_Spell.EndPos = EndPos; } } else { if (pararecalc_0_Spell_Pos === this.Recalc_0_Spell.Type) { if (pararecalc_0_Spell_All === Type) { this.Recalc_0_Spell.Type = Type; } else { if (pararecalc_0_Spell_Pos === Type) { this.Recalc_0_Spell.StartPos = Math.min(StartPos, this.Recalc_0_Spell.StartPos); this.Recalc_0_Spell.EndPos = Math.max(EndPos, this.Recalc_0_Spell.EndPos); } } } } } }, Update_Spell_OnChange: function (Pos, Count, bAdd) { if (pararecalc_0_Spell_Pos === this.Recalc_0_Spell.Type) { if (true === bAdd) { if (this.Recalc_0_Spell.StartPos > Pos) { this.Recalc_0_Spell.StartPos++; } if (this.Recalc_0_Spell.EndPos >= Pos) { this.Recalc_0_Spell.EndPos++; } } else { if (this.Recalc_0_Spell.StartPos > Pos) { if (this.Recalc_0_Spell.StartPos > Pos + Count) { this.Recalc_0_Spell.StartPos -= Count; } else { this.Recalc_0_Spell.StartPos = Pos; } } if (this.Recalc_0_Spell.EndPos >= Pos) { if (this.Recalc_0_Spell.EndPos >= Pos + Count) { this.Recalc_0_Spell.EndPos -= Count; } else { this.Recalc_0_Spell.EndPos = Math.max(0, Pos - 1); } } } } } }; function CParaLineRange(X, XEnd) { this.X = X; this.XVisible = 0; this.W = 0; this.Words = 0; this.Spaces = 0; this.XEnd = XEnd; this.StartPos = 0; this.SpacePos = -1; this.StartPos2 = -1; this.EndPos2 = -1; } CParaLineRange.prototype = { Shift: function (Dx, Dy) { this.X += Dx; this.XEnd += Dx; this.XVisible += Dx; } }; function CParaLineMetrics() { this.Ascent = 0; this.Descent = 0; this.TextAscent = 0; this.TextAscent2 = 0; this.TextDescent = 0; this.LineGap = 0; } CParaLineMetrics.prototype = { Update: function (TextAscent, TextAscent2, TextDescent, Ascent, Descent, ParaPr) { if (TextAscent > this.TextAscent) { this.TextAscent = TextAscent; } if (TextAscent2 > this.TextAscent2) { this.TextAscent2 = TextAscent2; } if (TextDescent > this.TextDescent) { this.TextDescent = TextDescent; } if (Ascent > this.Ascent) { this.Ascent = Ascent; } if (Descent > this.Descent) { this.Descent = Descent; } if (this.Ascent < this.TextAscent) { this.TextAscent = this.Ascent; } if (this.Descent < this.TextDescent) { this.TextDescent = this.Descent; } this.LineGap = this.Recalculate_LineGap(ParaPr, this.TextAscent, this.TextDescent); }, Recalculate_LineGap: function (ParaPr, TextAscent, TextDescent) { var LineGap = 0; switch (ParaPr.Spacing.LineRule) { case linerule_Auto: LineGap = (TextAscent + TextDescent) * (ParaPr.Spacing.Line - 1); break; case linerule_Exact: var ExactValue = Math.max(1, ParaPr.Spacing.Line); LineGap = ExactValue - (TextAscent + TextDescent); var Gap = this.Ascent + this.Descent - ExactValue; if (Gap > 0) { var DescentDiff = this.Descent - this.TextDescent; if (DescentDiff > 0) { if (DescentDiff < Gap) { this.Descent = this.TextDescent; Gap -= DescentDiff; } else { this.Descent -= Gap; Gap = 0; } } var AscentDiff = this.Ascent - this.TextAscent; if (AscentDiff > 0) { if (AscentDiff < Gap) { this.Ascent = this.TextAscent; Gap -= AscentDiff; } else { this.Ascent -= Gap; Gap = 0; } } if (Gap > 0) { var OldTA = this.TextAscent; var OldTD = this.TextDescent; var Sum = OldTA + OldTD; this.Ascent = OldTA * (Sum - Gap) / Sum; this.Descent = OldTD * (Sum - Gap) / Sum; } } else { this.Ascent -= Gap; } LineGap = 0; break; case linerule_AtLeast: var LineGap1 = ParaPr.Spacing.Line; var LineGap2 = TextAscent + TextDescent; LineGap = Math.max(LineGap1, LineGap2) - (TextAscent + TextDescent); break; } return LineGap; } }; function CParaLine(StartPos) { this.Y = 0; this.W = 0; this.Top = 0; this.Bottom = 0; this.Words = 0; this.Spaces = 0; this.Metrics = new CParaLineMetrics(); this.Ranges = new Array(); this.RangeY = false; this.StartPos = StartPos; this.EndPos = StartPos; } CParaLine.prototype = { Add_Range: function (X, XEnd) { this.Ranges.push(new CParaLineRange(X, XEnd)); }, Shift: function (Dx, Dy) { var RangesCount = this.Ranges.length; for (var Index = 0; Index < RangesCount; Index++) { this.Ranges[Index].Shift(Dx, Dy); } }, Set_RangeStartPos: function (CurRange, StartPos) { if (0 === CurRange) { this.StartPos = StartPos; } this.Ranges[CurRange].StartPos = StartPos; }, Reset: function (StartPos) { this.Top = 0; this.Bottom = 0; this.Words = 0; this.Spaces = 0; this.Metrics = new CParaLineMetrics(); this.Ranges = new Array(); this.StartPos = StartPos; }, Set_EndPos: function (EndPos, Paragraph) { this.EndPos = EndPos; var Content = Paragraph.Content; var RangesCount = this.Ranges.length; for (var CurRange = 0; CurRange < RangesCount; CurRange++) { var Range = this.Ranges[CurRange]; var StartRangePos = Range.StartPos; var EndRangePos = (CurRange === RangesCount - 1 ? EndPos : this.Ranges[CurRange + 1].StartPos - 1); var nSpacesCount = 0; var bWord = false; var nSpaceLen = 0; var nSpacePos = -1; var nStartPos2 = -1; var nEndPos2 = -1; Range.W = 0; Range.Words = 0; Range.Spaces = 0; for (var Pos = StartRangePos; Pos <= EndRangePos; Pos++) { var Item = Content[Pos]; if (Pos === Paragraph.Numbering.Pos) { Range.W += Paragraph.Numbering.WidthVisible; } switch (Item.Type) { case para_Text: if (true != bWord) { bWord = true; Range.Words++; } Range.W += Item.Width; if (true === Item.SpaceAfter) { Range.W += nSpaceLen; if (Range.Words > 1) { Range.Spaces += nSpacesCount; } bWord = false; nSpaceLen = 0; nSpacesCount = 0; } if (EndRangePos === Pos) { Range.W += nSpaceLen; } if (-1 === nSpacePos) { nSpacePos = Pos; } if (-1 === nStartPos2) { nStartPos2 = Pos; } nEndPos2 = Pos; break; case para_Space: if (true === bWord) { Range.W += nSpaceLen; if (Range.Words > 1) { Range.Spaces += nSpacesCount; } bWord = false; nSpacesCount = 1; nSpaceLen = 0; } else { nSpacesCount++; } nSpaceLen += Item.Width; break; case para_Drawing: Range.Words++; Range.W += nSpaceLen; Range.Spaces += nSpacesCount; bWord = false; nSpacesCount = 0; nSpaceLen = 0; if (true === Item.Is_Inline() || true === Paragraph.Parent.Is_DrawingShape()) { Range.W += Item.Width; if (-1 === nSpacePos) { nSpacePos = Pos; } if (-1 === nStartPos2) { nStartPos2 = Pos; } nEndPos2 = Pos; } break; case para_PageNum: Range.Words++; Range.W += nSpaceLen; Range.Spaces += nSpacesCount; bWord = false; nSpacesCount = 0; nSpaceLen = 0; Range.W += Item.Width; if (-1 === nSpacePos) { nSpacePos = Pos; } if (-1 === nStartPos2) { nStartPos2 = Pos; } nEndPos2 = Pos; break; case para_Tab: Range.W += Item.Width; Range.W += nSpaceLen; Range.Words = 0; Range.Spaces = 0; nSpaceLen = 0; nSpacesCount = 0; bWord = false; nSpacePos = -1; break; case para_NewLine: if (bWord && Range.Words > 1) { Range.Spaces += nSpacesCount; } nSpacesCount = 0; bWord = false; break; case para_End: if (true === bWord) { Range.Spaces += nSpacesCount; } break; } } Range.SpacePos = nSpacePos; Range.StartPos2 = (nStartPos2 === -1 ? StartRangePos : nStartPos2); Range.EndPos2 = (nEndPos2 === -1 ? EndRangePos : nEndPos2); } } }; function CDocumentBounds(Left, Top, Right, Bottom) { this.Bottom = Bottom; this.Left = Left; this.Right = Right; this.Top = Top; } CDocumentBounds.prototype = { Shift: function (Dx, Dy) { this.Bottom += Dy; this.Top += Dy; this.Left += Dx; this.Right += Dx; } }; function CParaPage(X, Y, XLimit, YLimit, FirstLine) { this.X = X; this.Y = Y; this.XLimit = XLimit; this.YLimit = YLimit; this.FirstLine = FirstLine; this.Bounds = new CDocumentBounds(X, Y, XLimit, Y); this.StartLine = FirstLine; this.EndLine = FirstLine; this.TextPr = null; } CParaPage.prototype = { Reset: function (X, Y, XLimit, YLimit, FirstLine) { this.X = X; this.Y = Y; this.XLimit = XLimit; this.YLimit = YLimit; this.FirstLine = FirstLine; this.Bounds = new CDocumentBounds(X, Y, XLimit, Y); this.StartLine = FirstLine; }, Shift: function (Dx, Dy) { this.X += Dx; this.Y += Dy; this.XLimit += Dx; this.YLimit += Dy; this.Bounds.Shift(Dx, Dy); }, Set_EndLine: function (EndLine) { this.EndLine = EndLine; } }; function CParaPos(Range, Line, Page, Pos) { this.Range = Range; this.Line = Line; this.Page = Page; this.Pos = Pos; } function CParaDrawingRangeLinesElement(y0, y1, x0, x1, w, r, g, b, Additional) { this.y0 = y0; this.y1 = y1; this.x0 = x0; this.x1 = x1; this.w = w; this.r = r; this.g = g; this.b = b; this.Additional = Additional; } function CParaDrawingRangeLines() { this.Elements = new Array(); } CParaDrawingRangeLines.prototype = { Clear: function () { this.Elements = new Array(); }, Add: function (y0, y1, x0, x1, w, r, g, b, Additional) { this.Elements.push(new CParaDrawingRangeLinesElement(y0, y1, x0, x1, w, r, g, b, Additional)); }, Get_Next: function () { var Count = this.Elements.length; if (Count <= 0) { return null; } var Element = this.Elements[Count - 1]; Count--; while (Count > 0) { var PrevEl = this.Elements[Count - 1]; if (Math.abs(PrevEl.y0 - Element.y0) < 0.001 && Math.abs(PrevEl.y1 - Element.y1) < 0.001 && Math.abs(PrevEl.x1 - Element.x0) < 0.001 && Math.abs(PrevEl.w - Element.w) < 0.001 && PrevEl.r === Element.r && PrevEl.g === Element.g && PrevEl.b === Element.b) { Element.x0 = PrevEl.x0; Count--; } else { break; } } this.Elements.length = Count; return Element; }, Correct_w_ForUnderline: function () { var Count = this.Elements.length; if (Count <= 0) { return; } var CurElements = new Array(); for (var Index = 0; Index < Count; Index++) { var Element = this.Elements[Index]; var CurCount = CurElements.length; if (0 === CurCount) { CurElements.push(Element); } else { var PrevEl = CurElements[CurCount - 1]; if (Math.abs(PrevEl.y0 - Element.y0) < 0.001 && Math.abs(PrevEl.y1 - Element.y1) < 0.001 && Math.abs(PrevEl.x1 - Element.x0) < 0.001) { if (Element.w > PrevEl.w) { for (var Index2 = 0; Index2 < CurCount; Index2++) { CurElements[Index2].w = Element.w; } } else { Element.w = PrevEl.w; } CurElements.push(Element); } else { CurElements.length = 0; CurElements.push(Element); } } } } };