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