Commit 1c6b02e1 authored by Anna.Pavlova's avatar Anna.Pavlova Committed by Alexander.Trofimov

Рефакторинг : убрала проверку для сдвига первой строки

Рефакторинг ф-ии Recalculate в Run, когда оператор находится в начале строки

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@64962 954022d7-b5bf-4e40-9824-e11837661b57
parent a4ffa3cb
......@@ -1309,11 +1309,6 @@ ParaMath.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
//здесь обновляем WrapState, исходя из этого параметра будем считать WrapIndent
this.PageInfo.UpdateCurrentWrap(DispDef, bInline);
// для неинлайновых формул не учитываем отступ первой строки
if(this.ParaMathRPI.bInline == false && true === PRS.UseFirstLine && true === PRS.EmptyLine)
{
PRS.X -= ParaPr.Ind.FirstLine;
}
// формулы не инлайновая, есть Ranges пересчитываем формулу в макс Range => private_RecalculateRangeInsideInterval
if(this.ParaMathRPI.IntervalState !== MATH_INTERVAL_EMPTY && this.ParaMathRPI.bInternalRanges == true/*this.ParaMathRPI.bStartRanges == true*/) // картинки в другом параграфе и формула пересчитывается с учетом Ranges
......@@ -1501,7 +1496,7 @@ ParaMath.prototype.private_RecalculateRangeWrap = function(PRS, ParaPr, Depth)
//PRS.Reset_RestartPageRecalcInfo();
// не вызываем функцию Reset_RestartPageRecalcInfo, т.к. в данной функции учитывается флаг, что начали пересчитывать заново
PRS.RestartPageRecalcInfo.Line = 0;
// выставляем только для инлайновых формул => может случится так, что в одном параграфе окажутся несколько формул и для того, чтобы при первом пересчете пересчитались настрокйки нужно возвращать null
// выставляем только для инлайновых формул => может случится так, что в одном параграфе окажутся несколько формул и для того, чтобы при первом пересчете пересчитались настройки нужно возвращать null
// при последующих пересчетах PRS.RestartPageRecalcInfo.Object будет выставлен null на Reset_RestartPageRecalcInfo в ф-ии private_RecalculatePage
PRS.RestartPageRecalcInfo.Object = this.ParaMathRPI.bInline ? null : this;
......
......@@ -2344,9 +2344,7 @@ ParaRun.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
var bOperInEndContent = bOperBefore === false && bEndRunToContent === true && Pos == ContentLen - 1 && Word == true, // необходимо для того, чтобы у контентов мат объектов (к-ые могут разбиваться на строки) не было отметки Set_LineBreakPos, иначе скобка (или GapLeft), перед которой стоит break_Operator, перенесется на следующую строку (без текста !)
bLowPriority = bCompareOper == false && bFirstCompareOper == false;
bNoOneBreakOperator = false;
if(Pos == 0 && true === this.MathPrp.IsBreak())
if(Pos == 0 && true === this.MathPrp.IsBreak()) // принудительный перенос
{
if(FirstItemOnLine === true)
{
......@@ -2368,7 +2366,7 @@ ParaRun.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
}
}
}
else if(bOperInEndContent || bLowPriority)
else if(bOperInEndContent || bLowPriority) // у этого break Operator приоритет низкий(находится во вложенном контенте) => по нему не разбиваем, обрабатываем как обычную букву
{
if(X + SpaceLen + WordLen + BrkLen > XEnd)
{
......@@ -2403,20 +2401,47 @@ ParaRun.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
{
bOverXEnd = X + WordLen + SpaceLen + BrkLen > XEnd; // BrkLen прибавляем дла случая, если идут подряд Brk Operators в конце
if(bOverXEnd && FirstItemOnLine === false) // Слово не убирается в отрезке. Переносим слово в следующий отрезок
if(X + WordLen + SpaceLen + BrkLen > XEnd)
{
MoveToLBP = true;
NewRange = true;
// если вышли за границы не обновляем параметр bInsideOper, т.к. если уже были breakOperator, то, соответственно, он уже выставлен в true
// а если на этом уровне не было breakOperator, то и обновлять его нне нужо
if(FirstItemOnLine === false)
{
MoveToLBP = true;
NewRange = true;
}
else
{
if(Word == true)
{
bMathWordLarge = true;
}
X += SpaceLen + WordLen;
PRS.Set_LineBreakPos(Pos);
SpaceLen = 0;
WordLen = 0;
NewRange = true;
EmptyLine = false;
}
}
else
{
if(FirstItemOnLine === false)
bInsideOper = true;
if(Word == true)
if(Word == false && FirstItemOnLine == true )
{
if(bOverXEnd) // FirstItemOnLine == true
bMathWordLarge = true;
SpaceLen += BrkLen;
}
else
{
// проверка на FirstItemOnLine == false нужна для случая, если иду подряд несколько breakOperator
// в этом случае Word == false && FirstItemOnLine == false, нужно также поставить отметку для потенциального переноса
X += SpaceLen + WordLen;
PRS.Set_LineBreakPos(Pos);
......@@ -2424,26 +2449,12 @@ ParaRun.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
WordLen = BrkLen;
SpaceLen = 0;
FirstItemOnLine = false;
}
else
{
if(SpaceLen !== 0)
FirstItemOnLine = false;
if(FirstItemOnLine == false)
{
PRS.Set_LineBreakPos(Pos);
X += SpaceLen + WordLen;
SpaceLen = BrkLen;
WordLen = 0;
}
else
{
SpaceLen += BrkLen;
}
// т.к. оператор идет в начале строки, то соответственно слово в стоке не будет первым, если в строке больше одного оператора
if(bNoOneBreakOperator == false)
FirstItemOnLine = false;
}
}
}
else // оператор "после" => оператор находится в конце строки
......@@ -2486,6 +2497,8 @@ ParaRun.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
}
}
bNoOneBreakOperator = false;
break;
}
case para_Drawing:
......
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