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

Формула не разбивалась по оператору внути N-арного оператора, так как параметр...

Формула не разбивалась по оператору внути N-арного оператора, так как параметр PRS.bInsideOper перебивался при пересчете следующего мат объекта из этого же контента

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@63578 954022d7-b5bf-4e40-9824-e11837661b57
parent 719bb5de
......@@ -2203,11 +2203,6 @@ ParaRun.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
if (true !== Word)
{
// Слово только началось. Делаем следующее:
// 1) Если до него на строке ничего не было и данная строка не
// имеет разрывов, тогда не надо проверять убирается ли слово в строке.
// 2) В противном случае, проверяем убирается ли слово в промежутке.
// Если слово только началось, и до него на строке ничего не было, и в строке нет разрывов, тогда не надо проверять убирается ли оно на строке.
if (true !== FirstItemOnLine /*|| false === Para.Internal_Check_Ranges(ParaLine, ParaRange)*/)
{
......@@ -2234,10 +2229,8 @@ ParaRun.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
{
if(true === FirstItemOnLine /*&& true === Para.Internal_Check_Ranges(ParaLine, ParaRange)*/)
{
// Слово оказалось единственным элементом в промежутке, и, все равно,
// не умещается целиком. Делаем следующее:
//
// Для Формулы слово не разбиваем, перенос не делаем, пишем в одну строку (слово выйдет за границу как в Ворде)
// Слово оказалось единственным элементом в промежутке, и, все равно, не умещается целиком.
// для Формулы слово не разбиваем, перенос не делаем, пишем в одну строку (слово выйдет за границу как в Ворде)
bMathWordLarge = true;
......
......@@ -547,7 +547,6 @@ CAccent.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
var WordLen = PRS.WordLen; // запоминаем, чтобы внутр мат объекты не увеличили WordLen
PRS.bMath_OneLine = true;
PRS.bInsideOper = false;
var oBase = this.getBase();
oBase.Recalculate_Reset(PRS.Range, PRS.Line, PRS ); // обновим StartLine и StartRange
......
......@@ -1784,8 +1784,6 @@ CMathBase.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
this.BrGapRight = this.GapRight;
}
PRS.bInsideOper = false;
if(this.bOneLine == true)
{
PRS.bMath_OneLine = this.bOneLine;
......
......@@ -866,8 +866,6 @@ CDegreeSubSup.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
{
this.bOneLine = PRS.bMath_OneLine;
PRS.bInsideOper = false;
if(this.bOneLine === true)
{
CDegreeSubSup.superclass.Recalculate_Range.call(this, PRS, ParaPr, Depth);
......@@ -894,7 +892,6 @@ CDegreeSubSup.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
PRS.Update_CurPos(0, Depth);
PRS.bMath_OneLine = false;
PRS.bInsideOper = false;
if(this.Pr.type == DEGREE_SubSup) // baseContent, iters
this.baseContent.Recalculate_Range(PRS, ParaPr, Depth+1);
......
......@@ -3870,6 +3870,9 @@ CMathContent.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
}
}
var bParentInsideOper = PRS.bInsideOper,
bCurInsideOper = false;
for(var Pos = RangeStartPos; Pos < ContentLen; Pos++)
{
var Item = this.Content[Pos],
......@@ -3912,8 +3915,12 @@ CMathContent.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
var PrevWord = PRS.Word;
PRS.bInsideOper = false;
Item.Recalculate_Range(PRS, ParaPr, Depth + 1);
bParentInsideOper = bParentInsideOper || PRS.bInsideOper;
PRS.bBoxOperator = Type == para_Math_Composition && Item.kind == MATH_BOX;
if(Type == para_Math_Composition)
......@@ -3970,6 +3977,8 @@ CMathContent.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
}
else
{
bCurInsideOper = bCurInsideOper || PRS.bInsideOper;
// Слово не убирается в отрезке. Переносим слово в следующий отрезок
// FirstItemOnLine == false - слово оказалось не единственным элементом в промежутке, делаем перенос
......@@ -3981,11 +3990,9 @@ CMathContent.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
this.ParaMath.UpdateWidthLine(PRS, PRS.X - PRS.XRange);
}
var bInsideOperator = Item.bOneLine == false && PRS.bInsideOper == true;
// обновляем BreakPos на конец Run, т.к. внутри мат объекта BreakPos может измениться на if(true !== Word)
// обновляем только в том случае, если Word = false, иначе можем здесь перебить корректный LineBreakPos
if(PrevWord == false && Brk_Before == false && bNoOneBreakOperator == false && bInsideOperator == false)
if(PrevWord == false && Brk_Before == false && bNoOneBreakOperator == false && bCurInsideOper == false)
{
// обновим : начало нового слова - конец предыдущего Run
......@@ -4026,6 +4033,8 @@ CMathContent.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
}
}
PRS.bInsideOper = bParentInsideOper;
if ( Pos >= ContentLen )
{
RangeEndPos = Pos - 1;
......
......@@ -461,8 +461,6 @@ CNary.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
{
this.bOneLine = PRS.bMath_OneLine;
PRS.bInsideOper = false;
if(this.bOneLine === true)
{
CNary.superclass.Recalculate_Range.call(this, PRS, ParaPr, Depth);
......
......@@ -3441,8 +3441,6 @@ CDelimiter.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
{
this.bOneLine = PRS.bMath_OneLine == true || this.Content.length > 1; // this.Content.length > 1 - несколько контентов, разделенные сепараторами
PRS.bInsideOper = false;
if(this.bOneLine == false)
{
var CurLine = PRS.Line - this.StartLine;
......
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