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
...@@ -2171,6 +2171,7 @@ function CParagraphRecalculateStateWrap(Para) ...@@ -2171,6 +2171,7 @@ 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.bEndRunToContent = false;
this.PosEndRun = new CParagraphContentPos(); this.PosEndRun = new CParagraphContentPos();
this.ContentMetrics = new CMathBoundsMeasures(); this.ContentMetrics = new CMathBoundsMeasures();
} }
......
...@@ -2172,14 +2172,34 @@ ParaRun.prototype.Recalculate_Range = function(PRS, ParaPr, Depth) ...@@ -2172,14 +2172,34 @@ ParaRun.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
{ {
var BrkLen = Item.Width/TEXTWIDTH_DIVIDER; var BrkLen = Item.Width/TEXTWIDTH_DIVIDER;
if(PRS.bEndRunToContent == true && Pos == ContentLen - 1 && Word == true)
{
if(X + SpaceLen + WordLen + LetterLen + BrkLen > XEnd)
{
if(true === FirstItemOnLine)
{
bMathWordLarge = true;
}
else
{
// Слово не убирается в отрезке. Переносим слово в следующий отрезок
MoveToLBP = true;
NewRange = true;
}
}
else
{
WordLen += BrkLen;
}
}
else
{
if(this.ParaMath.Is_BrkBinBefore() == true) if(this.ParaMath.Is_BrkBinBefore() == true)
{ {
if(X + WordLen + SpaceLen /*+ BrkLen*/ > XEnd && FirstItemOnLine == false) // Слово не убирается в отрезке. Переносим слово в следующий отрезок if(X + WordLen + SpaceLen > XEnd && FirstItemOnLine == false) // Слово не убирается в отрезке. Переносим слово в следующий отрезок
{ {
MoveToLBP = true; MoveToLBP = true;
NewRange = true; NewRange = true;
//PRS.Set_LineBreakPos(Pos);
} }
else if(Word == true) else if(Word == true)
{ {
...@@ -2189,12 +2209,14 @@ ParaRun.prototype.Recalculate_Range = function(PRS, ParaPr, Depth) ...@@ -2189,12 +2209,14 @@ ParaRun.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
WordLen = BrkLen; WordLen = BrkLen;
SpaceLen = 0; SpaceLen = 0;
FirstItemOnLine = false;
} }
else else
{ {
PRS.Set_LineBreakPos(Pos);
SpaceLen += BrkLen; SpaceLen += BrkLen;
} }
FirstItemOnLine = false;
} }
else else
{ {
...@@ -2214,12 +2236,14 @@ ParaRun.prototype.Recalculate_Range = function(PRS, ParaPr, Depth) ...@@ -2214,12 +2236,14 @@ ParaRun.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
SpaceLen = 0; SpaceLen = 0;
WordLen = 0; WordLen = 0;
//if(Word == true) PRS.Set_LineBreakPos(Pos+1); // LineBreakPos обновляем здесь, т.к. слово может начаться с мат объекта, а не с Run, в мат объекте нет соответствующей проверки
FirstItemOnLine = false; FirstItemOnLine = false;
Word = false; Word = false;
} }
} }
}
break; break;
} }
......
...@@ -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.WordLen = Item.size.width;
PRS.Word = true; 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