Commit 0a4886d0 authored by Anna.Pavlova's avatar Anna.Pavlova Committed by Alexander.Trofimov

Откатила назад пересчет Run для случая выхода за границы отрезка. При этом баг...

Откатила назад пересчет Run для случая выхода за границы отрезка. При этом баг с зацикливанием, когда картинка стоит перед формулой поправила в ParaMath в ф-ии Recalculate_Range при проверке на bMathWordLarge выставила MoveToLBP = false(строка 1235), чтобы в этом случае всегда в Paragraph_Recalculate выставлялся RangeEndPos (иначе в качестве стартовой позиции для следующего Range возьмем 0, так происходит всегда при PRS.MoveToLBP = true)

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@63463 954022d7-b5bf-4e40-9824-e11837661b57
parent a428fa5a
...@@ -1232,6 +1232,7 @@ ParaMath.prototype.Recalculate_Range = function(PRS, ParaPr, Depth) ...@@ -1232,6 +1232,7 @@ ParaMath.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
this.Root.Math_Set_EmptyRange(PRS); this.Root.Math_Set_EmptyRange(PRS);
PRS.bMathWordLarge = false; PRS.bMathWordLarge = false;
PRS.NewRange = true; PRS.NewRange = true;
PRS.MoveToLBP = false;
} }
var WrapState = this.PageInfo.GetCurrentWrapState(); var WrapState = this.PageInfo.GetCurrentWrapState();
......
...@@ -2209,14 +2209,9 @@ ParaRun.prototype.Recalculate_Range = function(PRS, ParaPr, Depth) ...@@ -2209,14 +2209,9 @@ ParaRun.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
// 2) В противном случае, проверяем убирается ли слово в промежутке. // 2) В противном случае, проверяем убирается ли слово в промежутке.
// Если слово только началось, и до него на строке ничего не было, и в строке нет разрывов, тогда не надо проверять убирается ли оно на строке. // Если слово только началось, и до него на строке ничего не было, и в строке нет разрывов, тогда не надо проверять убирается ли оно на строке.
if (true !== FirstItemOnLine /*|| false === Para.Internal_Check_Ranges(ParaLine, ParaRange)*/)
if(X + SpaceLen + LetterLen > XEnd)
{ {
if(true == FirstItemOnLine) if (X + SpaceLen + LetterLen > XEnd)
{
NewRange = true;
}
else if(FirstItemOnLine == false)
{ {
NewRange = true; NewRange = true;
RangeEndPos = Pos; RangeEndPos = Pos;
...@@ -2227,7 +2222,7 @@ ParaRun.prototype.Recalculate_Range = function(PRS, ParaPr, Depth) ...@@ -2227,7 +2222,7 @@ ParaRun.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
{ {
if(this.Parent.bRoot == true) if(this.Parent.bRoot == true)
PRS.Set_LineBreakPos(Pos); PRS.Set_LineBreakPos(Pos);
WordLen += LetterLen; WordLen += LetterLen;
Word = true; Word = true;
} }
...@@ -2237,7 +2232,7 @@ ParaRun.prototype.Recalculate_Range = function(PRS, ParaPr, Depth) ...@@ -2237,7 +2232,7 @@ ParaRun.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
{ {
if(X + SpaceLen + WordLen + LetterLen > XEnd) if(X + SpaceLen + WordLen + LetterLen > XEnd)
{ {
if(true === FirstItemOnLine) if(true === FirstItemOnLine /*&& true === Para.Internal_Check_Ranges(ParaLine, ParaRange)*/)
{ {
// Слово оказалось единственным элементом в промежутке, и, все равно, // Слово оказалось единственным элементом в промежутке, и, все равно,
// не умещается целиком. Делаем следующее: // не умещается целиком. Делаем следующее:
...@@ -2245,6 +2240,7 @@ ParaRun.prototype.Recalculate_Range = function(PRS, ParaPr, Depth) ...@@ -2245,6 +2240,7 @@ ParaRun.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
// Для Формулы слово не разбиваем, перенос не делаем, пишем в одну строку (слово выйдет за границу как в Ворде) // Для Формулы слово не разбиваем, перенос не делаем, пишем в одну строку (слово выйдет за границу как в Ворде)
bMathWordLarge = true; bMathWordLarge = true;
} }
else else
{ {
...@@ -2296,11 +2292,13 @@ ParaRun.prototype.Recalculate_Range = function(PRS, ParaPr, Depth) ...@@ -2296,11 +2292,13 @@ ParaRun.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
bNoOneBreakOperator = false; bNoOneBreakOperator = false;
var bFirstItem = true === FirstItemOnLine /*&& true === Para.Internal_Check_Ranges(ParaLine, ParaRange)*/;
if(bOperInEndContent || bLowPriority) if(bOperInEndContent || bLowPriority)
{ {
if(X + SpaceLen + WordLen + BrkLen > XEnd) if(X + SpaceLen + WordLen + BrkLen > XEnd)
{ {
if(true === FirstItemOnLine) if(bFirstItem == true)
{ {
bMathWordLarge = true; bMathWordLarge = true;
} }
...@@ -2321,31 +2319,20 @@ ParaRun.prototype.Recalculate_Range = function(PRS, ParaPr, Depth) ...@@ -2321,31 +2319,20 @@ ParaRun.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
var bOperBefore = this.ParaMath.Is_BrkBinBefore() == true; var bOperBefore = this.ParaMath.Is_BrkBinBefore() == true;
var WorLenCompareOper = WordLen + X - XRange + (bOperBefore ? SpaceLen : BrkLen); var WorLenCompareOper = WordLen + X - XRange + (bOperBefore ? SpaceLen : BrkLen);
var bOverXEnd;
if(bCompareOper && bFirstCompareOper == true && PRS.bCompareWrapIndent == true && WorLenCompareOper > PRS.WrapIndent && !(Word == false && true === FirstItemOnLine)) // (Word == true && FirstItemOnLine == true) - не первый элемент в строке if(bCompareOper && bFirstCompareOper == true && PRS.bCompareWrapIndent == true && WorLenCompareOper > PRS.WrapIndent && !(Word == false && bFirstItem == true)) // (Word == true && FirstItemOnLine == true) - не первый элемент в строке
bFirstCompareOper = false; bFirstCompareOper = false;
if(bOperBefore) // оператор "до" if(bOperBefore) // оператор "до"
{ {
if(X + WordLen + SpaceLen > XEnd/*&& bFirstItem == false*/) // Слово не убирается в отрезке. Переносим слово в следующий отрезок bOverXEnd = X + WordLen + SpaceLen > XEnd;
{
if(true === FirstItemOnLine)
{
if(Word == true)
{
bMathWordLarge = true;
}
else
{
SpaceLen += BrkLen - Item.GapLeft;
}
}
else
{
MoveToLBP = true;
NewRange = true;
}
if(bOverXEnd && bFirstItem == false) // Слово не убирается в отрезке. Переносим слово в следующий отрезок
{
MoveToLBP = true;
NewRange = true;
} }
else else
{ {
...@@ -2353,6 +2340,9 @@ ParaRun.prototype.Recalculate_Range = function(PRS, ParaPr, Depth) ...@@ -2353,6 +2340,9 @@ ParaRun.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
if(Word == true) if(Word == true)
{ {
if(bOverXEnd) // FirstItemOnLine == true
bMathWordLarge = true;
X += SpaceLen + WordLen; X += SpaceLen + WordLen;
PRS.Set_LineBreakPos(Pos); PRS.Set_LineBreakPos(Pos);
EmptyLine = false; EmptyLine = false;
...@@ -2380,20 +2370,15 @@ ParaRun.prototype.Recalculate_Range = function(PRS, ParaPr, Depth) ...@@ -2380,20 +2370,15 @@ ParaRun.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
} }
else // оператор "после" else // оператор "после"
{ {
if(X + WordLen + BrkLen - Item.GapRight > XEnd/* && bFirstItem == false*/) // Слово не убирается в отрезке. Переносим слово в следующий отрезок bOverXEnd = X + WordLen + BrkLen - Item.GapRight > XEnd;
if(bOverXEnd && bFirstItem == false) // Слово не убирается в отрезке. Переносим слово в следующий отрезок
{ {
if(true === FirstItemOnLine) MoveToLBP = true;
{ NewRange = true;
bMathWordLarge = true;
}
else
{
MoveToLBP = true;
NewRange = true;
if(Word == false) if(Word == false)
PRS.Set_LineBreakPos(Pos); PRS.Set_LineBreakPos(Pos);
}
} }
else else
{ {
...@@ -2402,6 +2387,11 @@ ParaRun.prototype.Recalculate_Range = function(PRS, ParaPr, Depth) ...@@ -2402,6 +2387,11 @@ ParaRun.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
// осуществляем здесь, чтобы не изменить GapRight в случае, когда новое слово не убирается на break_Operator // осуществляем здесь, чтобы не изменить GapRight в случае, когда новое слово не убирается на break_Operator
OperGapRight = Item.GapRight; OperGapRight = Item.GapRight;
if(bOverXEnd) // FirstItemOnLine == true
{
bMathWordLarge = true;
}
X += BrkLen + WordLen; X += BrkLen + WordLen;
EmptyLine = false; EmptyLine = false;
......
...@@ -2072,6 +2072,10 @@ CMathBase.prototype.IsEmptyLine = function(_CurLine, _CurRange) ...@@ -2072,6 +2072,10 @@ CMathBase.prototype.IsEmptyLine = function(_CurLine, _CurRange)
return bEmpty; return bEmpty;
}; };
CMathBase.prototype.Is_EmptyRange = function(_CurLine, _CurRange)
{
return this.Content[this.NumBreakContent].Is_EmptyRange(_CurLine, _CurRange);
};
CMathBase.prototype.Get_LineBound = function(_CurLine, _CurRange) CMathBase.prototype.Get_LineBound = function(_CurLine, _CurRange)
{ {
var CurLine = _CurLine - this.StartLine; var CurLine = _CurLine - this.StartLine;
...@@ -2159,10 +2163,11 @@ CMathBase.prototype.UpdateOperators = function(_CurLine, _CurRange, bEmptyGapLef ...@@ -2159,10 +2163,11 @@ CMathBase.prototype.UpdateOperators = function(_CurLine, _CurRange, bEmptyGapLef
} }
}; };
CMathBase.prototype.Is_EmptyRange = function() /*CMathBase.prototype.Is_EmptyRange = function()
{ {
return false; return false;
}; };*/
CMathBase.prototype.IsShade = function() CMathBase.prototype.IsShade = function()
{ {
var oShd = this.Get_CompiledCtrPrp().Shd; var oShd = this.Get_CompiledCtrPrp().Shd;
......
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