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