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

Поправлены баги : 1. неправильно рассчитывался WordLen, когда в формуле...

Поправлены баги : 1. неправильно рассчитывался WordLen, когда в формуле находились delimiters, т.к. два раза обсчитывалась ширина внутреннего контента и соответственно в 2 раза увеличивался WordLen;
2. Учитывалась ширина последнего break operator для случая BREAK_BEFORE (с которого должна начинаться следующая строка), при проверке выходит ли за границы строка;
3. Не учитывалась ширина BrGapLeft, если мат объект многострочный и слово начиналось с этого мат объекта
4. Не осуществлялся перенос на следующую строку, когда в строке идут подряд break Operator, а в конце стоит буква

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@61990 954022d7-b5bf-4e40-9824-e11837661b57
parent 5b202597
......@@ -2036,9 +2036,9 @@ ParaMath.prototype.Get_Bounds = function()
var LinesCount = this.Root.protected_GetLinesCount();
var PosLine = Math.min(3, LinesCount - 1);
//var PosLine = Math.min(3, LinesCount - 1);
return this.Root.Get_Bounds()[PosLine];
return this.Root.Get_Bounds()[LinesCount - 1];
}
};
......
......@@ -2174,12 +2174,12 @@ ParaRun.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
if(this.ParaMath.Is_BrkBinBefore() == true)
{
if(X + WordLen + SpaceLen + BrkLen > XEnd && FirstItemOnLine == false) // Слово не убирается в отрезке. Переносим слово в следующий отрезок
if(X + WordLen + SpaceLen /*+ BrkLen*/ > XEnd && FirstItemOnLine == false) // Слово не убирается в отрезке. Переносим слово в следующий отрезок
{
MoveToLBP = true;
NewRange = true;
PRS.Set_LineBreakPos(Pos);
//PRS.Set_LineBreakPos(Pos);
}
else if(Word == true)
{
......@@ -2214,7 +2214,7 @@ ParaRun.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
SpaceLen = 0;
WordLen = 0;
if(Word == true)
//if(Word == true)
FirstItemOnLine = false;
Word = false;
......
......@@ -1743,15 +1743,13 @@ CMathBase.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
var RangeStartPos = this.protected_AddRange(CurLine, CurRange),
RangeEndPos = Len - 1;
this.VerifyWordLen(PRS);
if(CurLine == 0 && CurRange == 0)
{
PRS.WordLen += this.BrGapLeft;
}
//var PosEndRun = PRS.PosEndRun.Copy();
//var Word = PRS.Word;
//var WordLen = PRS.WordLen;
for(var Pos = RangeStartPos; Pos < Len; Pos++)
{
var Item = this.Content[Pos];
......@@ -1792,42 +1790,6 @@ CMathBase.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
if(Pos < Len - 1)
PRS.WordLen += this.dW;
}
/*PRS.bMath_OneLine = true;
var bOneLineContent = Pos !== Numb;
if(bOneLineContent == false)
{
PRS.Update_CurPos(Pos, Depth);
PRS.bMath_OneLine = false;
}
var NeedSetReset = CurLine == 0 && CurRange == 0 || Pos !== RangeStartPos;
if(Item.Type == para_Math_Content && NeedSetReset)
Item.Recalculate_Reset(PRS.Range, PRS.Line); // обновим StartLine и StartRange
Item.Recalculate_Range(PRS, ParaPr, Depth+1);
if(bOneLineContent == true)
{
if(true !== PRS.Word)
{
PRS.WordLen = Item.size.width;
PRS.Word = true;
}
else
{
PRS.WordLen += Item.size.width;
}
}
if(true === PRS.NewRange)
{
RangeEndPos = Numb;
break;
}*/
}
......@@ -1861,10 +1823,18 @@ CMathBase.prototype.Math_GetWidth = function(_CurLine, _CurRange)
{
return this.size.width;
};
CMathBase.prototype.VerifyWordLen = function(PRS)
{
if(true !== PRS.Word)
PRS.WordLen = 0;
};
CMathBase.prototype.Update_WordLen = function(PRS, WordLen)
{
if(this.bInside == false)
{
PRS.WordLen = WordLen + this.size.width;
/*
if(true !== PRS.Word)
{
PRS.WordLen = this.size.width;
......@@ -1872,7 +1842,7 @@ CMathBase.prototype.Update_WordLen = function(PRS, WordLen)
else
{
PRS.WordLen = WordLen + this.size.width;
}
}*/
}
};
CMathBase.prototype.Recalculate_Range_OneLine = function(PRS, ParaPr, Depth)
......
......@@ -4127,12 +4127,6 @@ CMathContent.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
}
}
if(this.bOneLine)
{
this.Bounds.SetWidth(0, this.size.width);
this.Bounds.UpdateMetrics(0, this.size);
}
if ( Pos >= ContentLen )
{
RangeEndPos = Pos - 1;
......
......@@ -30,6 +30,12 @@ CMathSize.prototype.SetZero = function()
this.descent = 0;
this.ascent = 0;
}
CMathSize.prototype.Set = function(size)
{
this.width = size.width;
this.height = size.height;
this.ascent = size.ascent;
};
function CMathText(bJDraw)
{
......
......@@ -473,6 +473,8 @@ CNary.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
var RangeStartPos = this.protected_AddRange(CurLine, CurRange),
RangeEndPos = 2;
this.VerifyWordLen(PRS);
if(CurLine == 0 && CurRange == 0)
{
PRS.WordLen += this.BrGapLeft;
......
......@@ -3449,18 +3449,27 @@ CDelimiter.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
var Content = this.Content[0];
this.VerifyWordLen(PRS);
if(CurLine == 0 && CurRange == 0)
{
// посчитаем контент как одностроковый для вычисления размера скобок
// далее будем считать объект как многостроковый на Recalculate_Range
PRS.bMath_OneLine = true;
var WordLen = PRS.WordLen;
Content.Recalculate_Range(PRS, ParaPr, Depth + 1);
this.RecalculateGeneralSize(g_oTextMeasurer, Content.size.height, Content.size.ascent);
// вычисляем до изменения PRS.WordLen
this.BrGapLeft = this.GapLeft + this.begOper.size.width;
this.BrGapRight = this.GapRight + this.endOper.size.width;
//
Content.Recalculate_Reset(PRS.Range, PRS.Line);
PRS.WordLen += this.BrGapLeft;
PRS.WordLen = WordLen + this.BrGapLeft;
}
PRS.bMath_OneLine = false;
PRS.Update_CurPos(0, Depth);
......@@ -3479,11 +3488,12 @@ CDelimiter.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
{
PRS.bMath_OneLine = true;
this.NumBreakContent = -1;
CDelimiter.superclass.Recalculate_Range.call(this, PRS, ParaPr, Depth);
}
this.BrGapLeft = this.GapLeft + this.begOper.size.width;
this.BrGapRight = this.GapRight + this.endOper.size.width;
this.BrGapLeft = this.GapLeft + this.begOper.size.width;
this.BrGapRight = this.GapRight + this.endOper.size.width;
}
};
CDelimiter.prototype.Is_EmptyGaps = function()
{
......
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