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) ...@@ -875,8 +875,19 @@ ParaMath.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
PRS.X += MathSettings.Get_LeftMargin(this.State); PRS.X += MathSettings.Get_LeftMargin(this.State);
PRS.XEnd -= MathSettings.Get_RightMargin(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) if(bFirstLine == false)
PRS.X += MathSettings.Get_WrapIndent(this.State); {
PRS.X += WrapIndent;
PRS.WrapIndent = 0;
}
else
{
PRS.WrapIndent = WrapIndent;
}
PRS.XRange = PRS.X; PRS.XRange = PRS.X;
......
...@@ -2174,6 +2174,9 @@ function CParagraphRecalculateStateWrap(Para) ...@@ -2174,6 +2174,9 @@ function CParagraphRecalculateStateWrap(Para)
this.bEndRunToContent = false; this.bEndRunToContent = false;
this.PosEndRun = new CParagraphContentPos(); this.PosEndRun = new CParagraphContentPos();
this.WrapIndent = 0; // WrapIndent нужен для сравнения с длиной слова (когда слово разбивается по Compare Oper): ширина первой строки формулы не должна быть меньше WrapIndent
this.bFirstCompareOper = true;
} }
CParagraphRecalculateStateWrap.prototype = CParagraphRecalculateStateWrap.prototype =
...@@ -2199,6 +2202,11 @@ CParagraphRecalculateStateWrap.prototype = ...@@ -2199,6 +2202,11 @@ CParagraphRecalculateStateWrap.prototype =
this.bMath_OneLine = false; this.bMath_OneLine = false;
this.bMathWordLarge = false; this.bMathWordLarge = false;
this.bEndRunToContent = false;
this.PosEndRun = new CParagraphContentPos();
this.WrapIndent = 0;
this.bFirstCompareOper = true;
}, },
// Обнуляем некоторые параметры перед новым отрезком // Обнуляем некоторые параметры перед новым отрезком
...@@ -2219,6 +2227,15 @@ CParagraphRecalculateStateWrap.prototype = ...@@ -2219,6 +2227,15 @@ CParagraphRecalculateStateWrap.prototype =
this.MoveToLBP = false; this.MoveToLBP = false;
this.LineBreakPos = new CParagraphContentPos(); 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() Reset_PrevLineRecalcInfo : function()
......
...@@ -2179,9 +2179,14 @@ ParaRun.prototype.Recalculate_Range = function(PRS, ParaPr, Depth) ...@@ -2179,9 +2179,14 @@ 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) 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) if(true === FirstItemOnLine)
{ {
...@@ -2201,7 +2206,14 @@ ParaRun.prototype.Recalculate_Range = function(PRS, ParaPr, Depth) ...@@ -2201,7 +2206,14 @@ ParaRun.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
} }
else 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) // Слово не убирается в отрезке. Переносим слово в следующий отрезок if(X + WordLen + SpaceLen > XEnd && FirstItemOnLine == false) // Слово не убирается в отрезке. Переносим слово в следующий отрезок
{ {
...@@ -2232,7 +2244,7 @@ ParaRun.prototype.Recalculate_Range = function(PRS, ParaPr, Depth) ...@@ -2232,7 +2244,7 @@ ParaRun.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
SpaceLen += BrkLen; SpaceLen += BrkLen;
} }
} }
else else // оператор "после"
{ {
if(X + WordLen + BrkLen > XEnd && FirstItemOnLine == false) // Слово не убирается в отрезке. Переносим слово в следующий отрезок if(X + WordLen + BrkLen > XEnd && FirstItemOnLine == false) // Слово не убирается в отрезке. Переносим слово в следующий отрезок
{ {
...@@ -2260,6 +2272,7 @@ ParaRun.prototype.Recalculate_Range = function(PRS, ParaPr, Depth) ...@@ -2260,6 +2272,7 @@ ParaRun.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
Word = false; Word = false;
} }
} }
} }
break; break;
......
...@@ -798,25 +798,6 @@ CMathText.prototype = ...@@ -798,25 +798,6 @@ CMathText.prototype =
{ {
this.Parent = parent; 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() IsPlaceholder: function()
{ {
return this.Type == para_Math_Placeholder; return this.Type == para_Math_Placeholder;
...@@ -838,6 +819,10 @@ CMathText.prototype = ...@@ -838,6 +819,10 @@ CMathText.prototype =
return bSimpleOper || bArrows || bOtherSymbols || bFishes; return bSimpleOper || bArrows || bOtherSymbols || bFishes;
}, },
Is_CompareOperator: function()
{
return this.value == 0x3C || this.value == 0x3D || this.value == 0x3E;
},
// For ParaRun // For ParaRun
Is_Punctuation: function() Is_Punctuation: function()
{ {
......
...@@ -496,8 +496,9 @@ CNary.prototype.Recalculate_Range = function(PRS, ParaPr, Depth) ...@@ -496,8 +496,9 @@ CNary.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
if(true !== PRS.Word) if(true !== PRS.Word)
{ {
PRS.WordLen = this.Base.size.width; PRS.WordLen += this.Base.size.width;
PRS.Word = true; if(false == PRS.FirstItemOnLine)
PRS.Word = true;
} }
else 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