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

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

1. Поправлен баг : неправильно вычислялся WordLen для контентов (к-ые не бьются на строки) многосторочных мат объектов
2. Запрет переноса скобок и т.п. после break Operator
3. Перенос break Operator на следующую строку, когда в строке одни break Operator ( BREAK_BEFORE )

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@62017 954022d7-b5bf-4e40-9824-e11837661b57
parent ec6c9f4d
......@@ -2169,10 +2169,11 @@ function CParagraphRecalculateStateWrap(Para)
};
// for ParaMath
this.bMath_OneLine = false; // for ParaMath
this.bMathWordLarge = false; // for ParaMath
this.PosEndRun = new CParagraphContentPos();
this.ContentMetrics = new CMathBoundsMeasures();
this.bMath_OneLine = false; // for ParaMath
this.bMathWordLarge = false; // for ParaMath
this.bEndRunToContent = false;
this.PosEndRun = new CParagraphContentPos();
this.ContentMetrics = new CMathBoundsMeasures();
}
CParagraphRecalculateStateWrap.prototype =
......
......@@ -2172,52 +2172,76 @@ ParaRun.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
{
var BrkLen = Item.Width/TEXTWIDTH_DIVIDER;
if(this.ParaMath.Is_BrkBinBefore() == true)
if(PRS.bEndRunToContent == true && Pos == ContentLen - 1 && Word == true)
{
if(X + WordLen + SpaceLen /*+ BrkLen*/ > XEnd && FirstItemOnLine == false) // Слово не убирается в отрезке. Переносим слово в следующий отрезок
if(X + SpaceLen + WordLen + LetterLen + BrkLen > XEnd)
{
MoveToLBP = true;
NewRange = true;
//PRS.Set_LineBreakPos(Pos);
}
else if(Word == true)
{
X += SpaceLen + WordLen;
PRS.Set_LineBreakPos(Pos);
EmptyLine = false;
WordLen = BrkLen;
SpaceLen = 0;
FirstItemOnLine = false;
if(true === FirstItemOnLine)
{
bMathWordLarge = true;
}
else
{
// Слово не убирается в отрезке. Переносим слово в следующий отрезок
MoveToLBP = true;
NewRange = true;
}
}
else
{
SpaceLen += BrkLen;
WordLen += BrkLen;
}
}
else
{
if(X + WordLen + BrkLen > XEnd && FirstItemOnLine == false) // Слово не убирается в отрезке. Переносим слово в следующий отрезок
if(this.ParaMath.Is_BrkBinBefore() == true)
{
MoveToLBP = true;
NewRange = true;
if(X + WordLen + SpaceLen > XEnd && FirstItemOnLine == false) // Слово не убирается в отрезке. Переносим слово в следующий отрезок
{
MoveToLBP = true;
NewRange = true;
}
else if(Word == true)
{
X += SpaceLen + WordLen;
PRS.Set_LineBreakPos(Pos);
EmptyLine = false;
WordLen = BrkLen;
SpaceLen = 0;
if(Word == false)
}
else
{
PRS.Set_LineBreakPos(Pos);
SpaceLen += BrkLen;
}
FirstItemOnLine = false;
}
else
{
X += BrkLen + WordLen;
if(X + WordLen + BrkLen > XEnd && FirstItemOnLine == false) // Слово не убирается в отрезке. Переносим слово в следующий отрезок
{
MoveToLBP = true;
NewRange = true;
EmptyLine = false;
SpaceLen = 0;
WordLen = 0;
if(Word == false)
PRS.Set_LineBreakPos(Pos);
}
else
{
X += BrkLen + WordLen;
EmptyLine = false;
SpaceLen = 0;
WordLen = 0;
PRS.Set_LineBreakPos(Pos+1); // LineBreakPos обновляем здесь, т.к. слово может начаться с мат объекта, а не с Run, в мат объекте нет соответствующей проверки
//if(Word == true)
FirstItemOnLine = false;
Word = false;
Word = false;
}
}
}
......
......@@ -1775,17 +1775,12 @@ CMathBase.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
{
PRS.bMath_OneLine = true;
var WWordLen = PRS.WordLen;
Item.Recalculate_Range(PRS, ParaPr, Depth+1);
if(true !== PRS.Word)
{
PRS.WordLen = Item.size.width;
PRS.Word = true;
}
else
{
PRS.WordLen += Item.size.width;
}
PRS.WordLen = WWordLen + Item.size.width;
PRS.Word = true;
if(Pos < Len - 1)
PRS.WordLen += this.dW;
......@@ -1955,7 +1950,7 @@ CMathBase.prototype.Recalculate_Range_Width = function(PRSC, _CurLine, _CurRange
PRSC.Range.W += this.dW*(EndPos - StartPos);
// Здесь проверяем не на колво строк, т.к. на данном этапе еще идет вычисление строк, а на конец контента !
// Здесь проверяем не на кол-во строк, т.к. на данном этапе еще идет вычисление строк, а на конец контента !
var Len = this.Content.length;
......
......@@ -219,8 +219,6 @@ CMathFunc.prototype.init = function(props)
this.setProperties(props);
this.fillContent();
this.NeedBreakContent(1);
};
CMathFunc.prototype.PreRecalc = function(Parent, ParaMath, ArgSize, RPI, GapsInfo)
{
......@@ -251,6 +249,8 @@ CMathFunc.prototype.getArgument = function()
};
CMathFunc.prototype.fillContent = function()
{
this.NeedBreakContent(1);
this.setDimension(1, 2);
this.elements[0][0] = this.getFName();
this.elements[0][1] = this.getArgument();
......
......@@ -3987,6 +3987,9 @@ CMathContent.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
PRS.EmptyLine = false;
PRS.SpaceLen = 0;
PRS.WordLen = 0;
PRS.XRange = PRS.X;
}
}
......@@ -3995,6 +3998,8 @@ CMathContent.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
var Item = this.Content[Pos],
Type = Item.Type;
PRS.bEndRunToContent = Pos == ContentLen - 1;
// для однострочных мат объектов обновляем CurLine и CurRange, Run в этом случае не могут разбиваться на несколько строк
if (this.bOneLine || (0 === Pos && 0 === CurLine && 0 === CurRange ) || Pos !== RangeStartPos)
Item.Recalculate_Reset( PRS.Range, PRS.Line );
......@@ -4303,6 +4308,13 @@ CMathContent.prototype.IsFirstLine = function(Line)
var CurLine = Line - this.StartLine;
return CurLine == 0;
};
CMathContent.prototype.IsEndLine = function(Line)
{
var CurLine = Line - this.StartLine;
var LinesCount = this.protected_GetLinesCount();
return CurLine == LinesCount - 1;
};
CMathContent.prototype.Get_SelectionDirection = function()
{
if (true !== this.Selection.Use)
......
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