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

Реализовала приоритеты операторов в формулах

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@62319 954022d7-b5bf-4e40-9824-e11837661b57
parent 017bc0fa
......@@ -875,8 +875,19 @@ ParaMath.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
PRS.X += MathSettings.Get_LeftMargin(this.State);
PRS.XEnd -= MathSettings.Get_RightMargin(this.State);
//PRS.X += MathSettings.Get_WrapIndent(this.State);
var WrapIndent = MathSettings.Get_WrapIndent(this.State);
if(bFirstLine == false)
PRS.X += MathSettings.Get_WrapIndent(this.State);
{
PRS.X += WrapIndent;
PRS.WrapIndent = 0;
}
else
{
PRS.WrapIndent = WrapIndent;
}
PRS.XRange = PRS.X;
......
......@@ -2174,6 +2174,9 @@ function CParagraphRecalculateStateWrap(Para)
this.bEndRunToContent = false;
this.PosEndRun = new CParagraphContentPos();
this.WrapIndent = 0; // WrapIndent нужен для сравнения с длиной слова (когда слово разбивается по Compare Oper): ширина первой строки формулы не должна быть меньше WrapIndent
this.bFirstCompareOper = true;
}
CParagraphRecalculateStateWrap.prototype =
......@@ -2199,6 +2202,11 @@ CParagraphRecalculateStateWrap.prototype =
this.bMath_OneLine = false;
this.bMathWordLarge = false;
this.bEndRunToContent = false;
this.PosEndRun = new CParagraphContentPos();
this.WrapIndent = 0;
this.bFirstCompareOper = true;
},
// Обнуляем некоторые параметры перед новым отрезком
......@@ -2219,6 +2227,15 @@ CParagraphRecalculateStateWrap.prototype =
this.MoveToLBP = false;
this.LineBreakPos = new CParagraphContentPos();
// for ParaMath
this.bMath_OneLine = false;
this.bMathWordLarge = false;
this.bEndRunToContent = false;
this.PosEndRun = new CParagraphContentPos();
this.WrapIndent = 0;
this.bFirstCompareOper = true;
},
Reset_PrevLineRecalcInfo : function()
......
......@@ -2179,9 +2179,14 @@ ParaRun.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
{
var BrkLen = Item.Width/TEXTWIDTH_DIVIDER;
if(PRS.bEndRunToContent == true && Pos == ContentLen - 1 && Word == true)
var bCompareOper = Item.Is_CompareOperator();
var bOperInEndContent = PRS.bEndRunToContent == true && Pos == ContentLen - 1 && Word == true, // необходимо для того, чтобы у контентов мат объектов (к-ые могут разбиваться на строки) не было отметки Set_LineBreakPos, иначе скобка (или GapLeft), перед которой стоит break_Operator, перенесется на следующую строку (без текста !)
bLowPriority = bCompareOper == false && PRS.bFirstCompareOper == false;
if(bOperInEndContent || bLowPriority)
{
if(X + SpaceLen + WordLen + LetterLen + BrkLen > XEnd)
if(X + SpaceLen + WordLen + BrkLen > XEnd)
{
if(true === FirstItemOnLine)
{
......@@ -2201,7 +2206,14 @@ ParaRun.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
}
else
{
if(this.ParaMath.Is_BrkBinBefore() == true)
var bOperBefore = this.ParaMath.Is_BrkBinBefore() == true;
var WorLenCompareOper = WordLen + X - XRange + (bOperBefore ? SpaceLen : BrkLen);
if(bCompareOper && PRS.bFirstCompareOper == true && WorLenCompareOper > PRS.WrapIndent && !(Word == false && FirstItemOnLine == true)) // (Word == true && FirstItemOnLine == true) - не первый элемент в строке
PRS.bFirstCompareOper = false;
if(bOperBefore) // оператор "до"
{
if(X + WordLen + SpaceLen > XEnd && FirstItemOnLine == false) // Слово не убирается в отрезке. Переносим слово в следующий отрезок
{
......@@ -2232,7 +2244,7 @@ ParaRun.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
SpaceLen += BrkLen;
}
}
else
else // оператор "после"
{
if(X + WordLen + BrkLen > XEnd && FirstItemOnLine == false) // Слово не убирается в отрезке. Переносим слово в следующий отрезок
{
......@@ -2260,6 +2272,7 @@ ParaRun.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
Word = false;
}
}
}
break;
......
......@@ -798,25 +798,6 @@ CMathText.prototype =
{
this.Parent = parent;
},
/*IsIncline: function()
{
// возвращаем не Italic, т.к. могут быть мат. текст, но буквы без наклона (placeholder и т.п.)
var bIncline = false;
bIncline = bIncline || (this.value == 0x210E);
bIncline = bIncline || (this.value == 0x1D6A4);
bIncline = bIncline || (this.value == 0x1D6A5);
bIncline = bIncline || (this.value > 0x0040 && this.value < 0x005B);
bIncline = bIncline || (this.value > 0x0060 && this.value < 0x007b);
return bIncline;
},
setJustDraw: function(bJustDraw)
{
this.bJDraw = bJustDraw;
},*/
IsPlaceholder: function()
{
return this.Type == para_Math_Placeholder;
......@@ -838,6 +819,10 @@ CMathText.prototype =
return bSimpleOper || bArrows || bOtherSymbols || bFishes;
},
Is_CompareOperator: function()
{
return this.value == 0x3C || this.value == 0x3D || this.value == 0x3E;
},
// For ParaRun
Is_Punctuation: function()
{
......
......@@ -496,7 +496,8 @@ CNary.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
if(true !== PRS.Word)
{
PRS.WordLen = this.Base.size.width;
PRS.WordLen += this.Base.size.width;
if(false == PRS.FirstItemOnLine)
PRS.Word = true;
}
else
......
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