Commit b5a27a5c authored by Ilya.Kirillov's avatar Ilya.Kirillov Committed by Alexander.Trofimov

Исправлен баг в сохранении документа (баг 26649). Исправлен баг с обновлением...

Исправлен баг в сохранении документа (баг 26649). Исправлен баг с обновлением линеек после Undo/Redo, или изменения ориентации, размера страниц или полей, или изменения положения буквицы  (баги 26655, 26621, 26597, 26593). Исправлен баг с перескаиванием в конец документа при нажатии Ctrl+A (баг 26607). Исправлен баг с быстрым пересчетом в пустом параграфе с окончанием секции (баг 26606). Исправлен баг с пересчетом строк с переносом строки (баг 26677). Исправлен баг с пересчетом строки с разрывом параграфа(баг 26678). Исправлен баг с рассчетом текста, который идет в одном ране с автофигурой (баг 26667). Сделано, чтобы знак закрывающейся ковычки воспринимался как апостроф для орфографии (баг 26626). Исправлены баги, связанные с работой цвета текста (баги 26594, 26592).

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@58494 954022d7-b5bf-4e40-9824-e11837661b57
parent 7c0e6105
......@@ -569,7 +569,7 @@ function CCollaborativeChanges()
if ( "undefined" != typeof(Class.Save_Changes2) )
{
var Writer2 = CollaborativeEditing.m_oMemory;
Writer.Seek(0);
Writer2.Seek(0);
if ( true === Class.Save_Changes2( Data, Writer2 ) )
return Len + ";" + Writer.GetBase64Memory2(Pos, Len) + ";" + Writer2.GetCurPosition() + ";" + Writer2.GetBase64Memory();
}
......
......@@ -12,6 +12,9 @@
//
// Графическая часть:
// TODO: Сейчас Paragraph.Recalculate_FastWholePAragraph работает только на добавлении текста, надо переделать
// алгоритм определения изменений, чтобы данная функция работала и при других изменениях.
var Page_Width = 210;
var Page_Height = 297;
......@@ -7524,6 +7527,7 @@ CDocument.prototype =
this.Document_UpdateSelectionState();
this.Document_UpdateInterfaceState();
this.Document_UpdateRulersState();
},
Set_DocumentPageSize : function(W, H, bNoRecalc)
......@@ -7542,6 +7546,7 @@ CDocument.prototype =
this.Document_UpdateSelectionState();
this.Document_UpdateInterfaceState();
this.Document_UpdateRulersState();
}
},
......@@ -7575,6 +7580,7 @@ CDocument.prototype =
this.Document_UpdateSelectionState();
this.Document_UpdateInterfaceState();
this.Document_UpdateRulersState();
}
},
......@@ -8591,9 +8597,13 @@ CDocument.prototype =
}
}
// TODO: Пока делаем Start = true, чтобы при Ctrl+A не происходил переход к концу селекта, надо будет
// сделать по нормальному
this.Selection.Start = true;
this.Document_UpdateSelectionState();
this.Document_UpdateInterfaceState();
this.Document_UpdateRulersState();
this.Selection.Start = false;
},
On_DragTextEnd : function(NearPos, bCopy)
......@@ -9565,6 +9575,7 @@ CDocument.prototype =
else if ( e.KeyCode == 65 && true === e.CtrlKey ) // Ctrl + A - выделяем все
{
this.Select_All();
bUpdateSelection = false;
bRetValue = true;
}
else if ( e.KeyCode == 66 && false === editor.isViewMode && true === e.CtrlKey ) // Ctrl + B - делаем текст жирным
......@@ -11893,6 +11904,7 @@ CDocument.prototype =
this.Document_UpdateSelectionState();
this.Document_UpdateInterfaceState();
this.Document_UpdateRulersState();
},
Document_Redo : function()
......@@ -11909,6 +11921,7 @@ CDocument.prototype =
this.Document_UpdateSelectionState();
this.Document_UpdateInterfaceState();
this.Document_UpdateRulersState();
},
Get_SelectionState : function()
......
......@@ -8816,6 +8816,7 @@ Paragraph.prototype =
LogicDocument.Recalculate();
LogicDocument.Document_UpdateInterfaceState();
LogicDocument.Document_UpdateRulersState();
}
},
......
......@@ -80,6 +80,8 @@ g_aPunctuation[0x201C] = 1; // символ “
g_aPunctuation[0x201D] = 1; // символ ”
g_aPunctuation[0x2026] = 1; // символ ...
var g_aNumber = [];
g_aNumber[0x0030] = 1;
g_aNumber[0x0031] = 1;
......@@ -270,6 +272,21 @@ ParaText.prototype =
{
return (this.Flags & PARATEXT_FLAGS_SPACEAFTER ? true : false);
},
Get_CharForSpellCheck : function(bCaps)
{
// Закрывающуюся кавычку (0x2019), посылаем как апостроф
if (0x2019 === this.Value)
return String.fromCharCode(0x0027);
else
{
if (true === bCaps)
return (String.fromCharCode(this.Value)).toUpperCase();
else
return String.fromCharCode(this.Value);
}
},
Set_SpaceAfter : function(bSpaceAfter)
{
......@@ -608,7 +625,10 @@ ParaTextPr.prototype =
this.Set_FontSizeCS( TextPr.FontSizeCS );
if ( undefined != TextPr.Color )
this.Set_Color( TextPr.Color );
{
this.Set_Color(TextPr.Color);
this.Set_Unifill(undefined);
}
if ( undefined != TextPr.VertAlign )
this.Set_VertAlign( TextPr.VertAlign );
......@@ -643,6 +663,7 @@ ParaTextPr.prototype =
if(undefined != TextPr.Unifill)
{
this.Set_Unifill(TextPr.Unifill.createDuplicate());
this.Set_Color(undefined);
}
},
......@@ -1071,11 +1092,13 @@ ParaTextPr.prototype =
Set_Unifill : function(Value)
{
var OldValue = this.Value.Unifill;
if ( undefined != Value )
this.Value.Unifill = Value;
else
this.Value.Unifill = undefined;
History.Add(this, {Type: historyitem_TextPr_Unifill, New: Value, Old: this.Value.Unifill});
History.Add(this, {Type: historyitem_TextPr_Unifill, New: Value, Old: OldValue});
},
//-----------------------------------------------------------------------------------
// Undo/Redo функции
......
......@@ -21,6 +21,10 @@ Paragraph.prototype.Recalculate_FastWholeParagraph = function()
if (true === this.Parent.Is_HdrFtr(false))
return [];
// Если изменения происходят в специальном пустом параграфе-конце секции, тогда запускаем обычный пересчет
if (true === this.LogicDocument.Pages[this.Get_StartPage_Absolute()].Check_EndSectionPara(this))
return [];
// Здесь мы отдельно обрабатываем случаи быстрого пересчета параграфов, которые были разбиты на 1-2
// страницы. Если параграф был разбит более чем на 2 страницы, то такое ускорение уже не имеет смысла.
if (1 === this.Pages.length)
......@@ -139,7 +143,7 @@ Paragraph.prototype.Recalculate_FastRange = function(SimpleChanges)
}
// Если у нас есть PageBreak в строке, запускаем обычный пересчет, либо если это пустой параграф.
if ( this.Lines[Line].LineInfo & 1 || ( this.Lines[Line].LineInfo & 2 && this.Lines[Line].LineInfo & 4 ) )
if (this.Lines[Line].Info & paralineinfo_BreakPage || (this.Lines[Line].Info & paralineinfo_Empty && this.Lines[Line].Info & paralineinfo_End))
return -1;
// Если у нас отрезок, в котором произошли изменения является отрезком с нумерацией, тогда надо запустить
......@@ -696,48 +700,48 @@ Paragraph.prototype.private_RecalculateLine = function(CurLine, CurPa
return;
//-------------------------------------------------------------------------------------------------------------
// 1. Заполняем информацию о строке
// 5. Заполняем информацию о строке
//-------------------------------------------------------------------------------------------------------------
this.private_RecalculateLineInfo(CurLine, CurPage, PRS, ParaPr);
//-------------------------------------------------------------------------------------------------------------
// 1. Пересчитываем метрики данной строки
// 6. Пересчитываем метрики данной строки
//-------------------------------------------------------------------------------------------------------------
this.private_RecalculateLineMetrics(CurLine, CurPage, PRS, ParaPr);
//-------------------------------------------------------------------------------------------------------------
// 2. Рассчитываем высоту строки, а также положение верхней и нижней границ
// 7. Рассчитываем высоту строки, а также положение верхней и нижней границ
//-------------------------------------------------------------------------------------------------------------
this.private_RecalculateLinePosition(CurLine, CurPage, PRS, ParaPr);
//-------------------------------------------------------------------------------------------------------------
// 3. Проверяем достигла ли данная строка конца страницы
// 8. Проверяем достигла ли данная строка конца страницы
//-------------------------------------------------------------------------------------------------------------
if (false === this.private_RecalculateLineBottomBound(CurLine, CurPage, PRS, ParaPr))
return;
//-------------------------------------------------------------------------------------------------------------
// 4. Проверяем обтекание данной строки относительно плавающих объектов
// 9. Проверяем обтекание данной строки относительно плавающих объектов
//-------------------------------------------------------------------------------------------------------------
if (false === this.private_RecalculateLineCheckRanges(CurLine, CurPage, PRS, ParaPr))
return;
//-------------------------------------------------------------------------------------------------------------
// 5. Выставляем вертикальное смещение данной строки
// 10. Пересчитываем сдвиги элементов внутри параграфа и видимые ширины пробелов, в зависимости от align.
//-------------------------------------------------------------------------------------------------------------
if (false === this.private_RecalculateLineBaseLine(CurLine, CurPage, PRS, ParaPr))
return;
this.private_RecalculateLineAlign(CurLine, CurPage, PRS, ParaPr, false);
//-------------------------------------------------------------------------------------------------------------
// 6. Последние проверки
// 11. Выставляем вертикальное смещение данной строки
//-------------------------------------------------------------------------------------------------------------
if (false === this.private_RecalculateLineEnd(CurLine, CurPage, PRS, ParaPr))
if (false === this.private_RecalculateLineBaseLine(CurLine, CurPage, PRS, ParaPr))
return;
//-------------------------------------------------------------------------------------------------------------
// 7. Пересчитываем сдвиги элементов внутри параграфа и видимые ширины пробелов, в зависимости от align.
// 12. Последние проверки
//-------------------------------------------------------------------------------------------------------------
this.private_RecalculateLineAlign(CurLine, CurPage, PRS, ParaPr, false);
if (false === this.private_RecalculateLineEnd(CurLine, CurPage, PRS, ParaPr))
return;
};
Paragraph.prototype.private_RecalculateLineWidow = function(CurLine, CurPage, PRS, ParaPr)
......@@ -850,7 +854,7 @@ Paragraph.prototype.private_RecalculateLineMetrics = function(CurLine, CurPa
// текста, на котором закончилась данная строка.
if ( true === PRS.EmptyLine || PRS.LineAscent < 0.001 )
{
var LastItem = ( true === PRS.End ? this.Content[this.Content.length - 1] : this.Content[this.Lines[CurLine].EndPos] );
var LastItem = (true === PRS.End ? this.Content[this.Content.length - 1] : this.Content[this.Lines[CurLine].Ranges[this.Lines[CurLine].Ranges.length - 1].EndPos]);
if ( true === PRS.End )
{
......@@ -1293,7 +1297,7 @@ Paragraph.prototype.private_RecalculateLineEnd = function(CurLine, CurPa
if ( true === ParaPr.WidowControl && CurLine === this.Pages[CurPage].StartLine && CurLine >= 1 )
{
// Проверим не встречается ли в предыдущей строке BreakPage, если да, тогда не учитываем WidowControl
var BreakPagePrevLine = (this.Lines[CurLine].Info & paralineinfo_BreakPage) | 0;
var BreakPagePrevLine = (this.Lines[CurLine - 1].Info & paralineinfo_BreakPage) | 0;
if ( this.Parent instanceof CDocument && true === this.Parent.RecalcInfo.Can_RecalcObject() && 0 === BreakPagePrevLine && ( 1 === CurPage && null != this.Get_DocumentPrev() ) && this.Lines[CurLine - 1].Ranges.length <= 1 )
{
......
......@@ -1459,6 +1459,13 @@ ParaRun.prototype.Recalculate_MeasureContent = function()
}
Item.Measure( g_oTextMeasurer, Pr );
if (para_Drawing === Item.Type)
{
// После автофигур надо заново выставлять настройки
g_oTextMeasurer.SetTextPr(Pr, Theme);
g_oTextMeasurer.SetFontSlot(fontslot_ASCII);
}
}
this.RecalcInfo.Recalc = true;
......@@ -3520,6 +3527,7 @@ ParaRun.prototype.Draw_Elements = function(PDSE)
EndTextPr.Unifill.check(PDSE.Theme, PDSE.ColorMap);
var RGBAEnd = EndTextPr.Unifill.getRGBAColor();
pGraphics.SetTextPr(EndTextPr, PDSE.Theme);
pGraphics.b_color1(RGBAEnd.R, RGBAEnd.G, RGBAEnd.B, 255);
}
else
{
......
......@@ -933,20 +933,14 @@ ParaRun.prototype.Check_Spelling = function(SpellCheckerEngine, Depth)
bWord = true;
if ( true != CurTextPr.Caps )
sWord = String.fromCharCode(Item.Value);
else
sWord = (String.fromCharCode(Item.Value)).toUpperCase();
sWord = Item.Get_CharForSpellCheck(CurTextPr.Caps);
SpellCheckerEngine.StartPos = StartPos;
SpellCheckerEngine.EndPos = EndPos;
}
else
{
if ( true != CurTextPr.Caps )
sWord += String.fromCharCode(Item.Value);
else
sWord += (String.fromCharCode(Item.Value)).toUpperCase();
sWord += Item.Get_CharForSpellCheck(CurTextPr.Caps);
var EndPos = ContentPos.Copy();
EndPos.Update( Pos + 1, Depth );
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment