Commit 266b8698 authored by Anna.Pavlova's avatar Anna.Pavlova

Переделала Recalculate_Range: исправлены многочисленные баги, связанные с...

Переделала Recalculate_Range: исправлены многочисленные баги, связанные с разбивкой формул на строки

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@61229 954022d7-b5bf-4e40-9824-e11837661b57
parent f9fcc7a0
...@@ -44,7 +44,7 @@ function CMathPropertiesSettings() ...@@ -44,7 +44,7 @@ function CMathPropertiesSettings()
} }
CMathPropertiesSettings.prototype.SetDefaultPr = function() CMathPropertiesSettings.prototype.SetDefaultPr = function()
{ {
this.brkBin = BREAK_BEFORE; this.brkBin = BREAK_AFTER;
this.defJc = align_Justify; this.defJc = align_Justify;
this.dispDef = true; this.dispDef = true;
this.intLim = NARY_SubSup; this.intLim = NARY_SubSup;
...@@ -874,6 +874,9 @@ ParaMath.prototype.Recalculate_Range = function(PRS, ParaPr, Depth) ...@@ -874,6 +874,9 @@ ParaMath.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
PRS.XRange = PRS.X; PRS.XRange = PRS.X;
PRS.RecalcResult = recalcresult_NextLine;
PRS.PrevLineRecalcInfo.Object = null;
this.Root.Recalculate_Range(PRS, ParaPr, Depth); this.Root.Recalculate_Range(PRS, ParaPr, Depth);
if(bFirstPage && PRS.bMathWordLarge && this.State !== ALIGN_EMPTY) if(bFirstPage && PRS.bMathWordLarge && this.State !== ALIGN_EMPTY)
...@@ -885,7 +888,7 @@ ParaMath.prototype.Recalculate_Range = function(PRS, ParaPr, Depth) ...@@ -885,7 +888,7 @@ ParaMath.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
if(PRS.NewRange == false) if(PRS.NewRange == false)
{ {
var WidthLine = PRS.X - PRS.XRange + PRS.SpaceLen + PRS.WordLen; var WidthLine = PRS.X - PRS.XRange + PRS.SpaceLen + PRS.WordLen;
this.UpdateMaxWidthLine(PRS, WidthLine); this.UpdateWidthLine(PRS, WidthLine);
} }
this.ParaMathRPI.ClearRecalculate(); this.ParaMathRPI.ClearRecalculate();
...@@ -900,14 +903,14 @@ ParaMath.prototype.UpdateInfoForBreak = function(PRS) ...@@ -900,14 +903,14 @@ ParaMath.prototype.UpdateInfoForBreak = function(PRS)
ParaMath.prototype.Recalculate_Reset = function(CurRange, CurLine) ParaMath.prototype.Recalculate_Reset = function(CurRange, CurLine)
{ {
this.Root.Recalculate_Reset(CurRange, CurLine); // обновим StartLine и StartRange только для Root (в CParagraphContentWithContentBase), для внутренних элементов обновится на Recalculate_Range this.Root.Recalculate_Reset(CurRange, CurLine); // обновим StartLine и StartRange только для Root (в CParagraphContentWithContentBase), для внутренних элементов обновится на Recalculate_Range
} };
ParaMath.prototype.Recalculate_Set_RangeEndPos = function(PRS, PRP, Depth) ParaMath.prototype.Recalculate_Set_RangeEndPos = function(PRS, PRP, Depth)
{ {
this.Root.Recalculate_Set_RangeEndPos(PRS, PRP, Depth); this.Root.Recalculate_Set_RangeEndPos(PRS, PRP, Depth);
}; };
ParaMath.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine, _CurRange) ParaMath.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine, _CurRange)
{ {
this.Root.Recalculate_LineMetrics(PRS, ParaPr, _CurLine, _CurRange);
}; };
ParaMath.prototype.Recalculate_Range_Width = function(PRSC, _CurLine, _CurRange) ParaMath.prototype.Recalculate_Range_Width = function(PRSC, _CurLine, _CurRange)
{ {
...@@ -918,7 +921,7 @@ ParaMath.prototype.Recalculate_Range_Width = function(PRSC, _CurLine, _CurRange) ...@@ -918,7 +921,7 @@ ParaMath.prototype.Recalculate_Range_Width = function(PRSC, _CurLine, _CurRange)
var CurLine = _CurLine - this.Root.StartLine; var CurLine = _CurLine - this.Root.StartLine;
this.LinesWidths[CurLine] = W; this.LinesWidths[CurLine] = W;
}; };
ParaMath.prototype.UpdateMaxWidthLine = function(PRS, Width) ParaMath.prototype.UpdateWidthLine = function(PRS, Width)
{ {
var MaxW = this.CurPageInfo.MaxLineW, var MaxW = this.CurPageInfo.MaxLineW,
CurLine = PRS.Line - this.Root.StartLine; CurLine = PRS.Line - this.Root.StartLine;
...@@ -1077,10 +1080,6 @@ ParaMath.prototype.Recalculate_MinMaxContentWidth = function(MinMax) ...@@ -1077,10 +1080,6 @@ ParaMath.prototype.Recalculate_MinMaxContentWidth = function(MinMax)
RPI.NeedResize = true; RPI.NeedResize = true;
RPI.PRS = this.Paragraph.m_oPRSW; RPI.PRS = this.Paragraph.m_oPRSW;
//RPI.bInline = this.bInline;
//RPI.bChangeInline = this.bChangeInline;
this.Root.PreRecalc(null, this, new CMathArgSize(), RPI); this.Root.PreRecalc(null, this, new CMathArgSize(), RPI);
this.Root.Resize(g_oTextMeasurer, RPI); this.Root.Resize(g_oTextMeasurer, RPI);
......
...@@ -2169,6 +2169,7 @@ function CParagraphRecalculateStateWrap(Para) ...@@ -2169,6 +2169,7 @@ function CParagraphRecalculateStateWrap(Para)
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();
} }
CParagraphRecalculateStateWrap.prototype = CParagraphRecalculateStateWrap.prototype =
......
...@@ -633,7 +633,7 @@ ParaRun.prototype.Get_CurrentParaPos = function() ...@@ -633,7 +633,7 @@ ParaRun.prototype.Get_CurrentParaPos = function()
EndPos = this.protected_GetRangeEndPos(Line, Range); EndPos = this.protected_GetRangeEndPos(Line, Range);
// учтем, что в одной строке в формуле может быть только один Range // учтем, что в одной строке в формуле может быть только один Range
while(StartPos == EndPos && Line >= 0) // == this.Content.length, т.к. последний Range while(StartPos == EndPos && Line > 0 && this.Content.length !== 0) // == this.Content.length, т.к. последний Range
{ {
Line--; Line--;
StartPos = this.protected_GetRangeStartPos(Line, Range); StartPos = this.protected_GetRangeStartPos(Line, Range);
...@@ -1647,8 +1647,6 @@ ParaRun.prototype.Recalculate_Range = function(PRS, ParaPr, Depth) ...@@ -1647,8 +1647,6 @@ ParaRun.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
var Pos = RangeStartPos; var Pos = RangeStartPos;
var ContentLen = this.Content.length; var ContentLen = this.Content.length;
var WidthLine = PRS.XEnd - PRS.X;
var XRange = PRS.XRange; var XRange = PRS.XRange;
if (false === StartWord && true === FirstItemOnLine && XEnd - X < 0.001 && RangesCount > 0) if (false === StartWord && true === FirstItemOnLine && XEnd - X < 0.001 && RangesCount > 0)
...@@ -1801,55 +1799,49 @@ ParaRun.prototype.Recalculate_Range = function(PRS, ParaPr, Depth) ...@@ -1801,55 +1799,49 @@ ParaRun.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
} }
case para_Math_BreakOperator: case para_Math_BreakOperator:
{ {
var bCurrWord = Word;
if (true === Word)
{
// Добавляем длину пробелов до слова + длина самого слова. Не надо проверять
// убирается ли слово, мы это проверяем при добавленнии букв.
X += SpaceLen + WordLen;
Word = false;
EmptyLine = false;
SpaceLen = 0;
WordLen = 0;
}
// На пробеле не делаем перенос. Перенос строки или внутристрочный
// перенос делаем при добавлении любого непробельного символа
SpaceLen += Item.Width / TEXTWIDTH_DIVIDER;//SpaceLen += Item.Get_Width();
if(this.ParaMath.Is_BrkBinBefore() == true) if(this.ParaMath.Is_BrkBinBefore() == true)
{ {
if(bCurrWord == true) if(Word == true)
{ {
X += SpaceLen + WordLen;
PRS.Set_LineBreakPos(Pos); PRS.Set_LineBreakPos(Pos);
WordLen = SpaceLen; EmptyLine = false;
WordLen = Item.Width/TEXTWIDTH_DIVIDER;
SpaceLen = 0; SpaceLen = 0;
Word = true;
FirstItemOnLine = false; FirstItemOnLine = false;
} }
else
{
SpaceLen += Item.Width / TEXTWIDTH_DIVIDER;//SpaceLen += Item.Get_Width();
}
} }
else else
{ {
if(X + SpaceLen > XEnd && FirstItemOnLine == false) // Слово не убирается в отрезке. Переносим слово в следующий отрезок SpaceLen = Item.Width / TEXTWIDTH_DIVIDER;
if(X + WordLen + SpaceLen > XEnd && FirstItemOnLine == false) // Слово не убирается в отрезке. Переносим слово в следующий отрезок
{ {
MoveToLBP = true; MoveToLBP = true;
NewRange = true; NewRange = true;
if(bCurrWord == false) if(Word == false)
{
PRS.Set_LineBreakPos(Pos); PRS.Set_LineBreakPos(Pos);
}
else
{
X += SpaceLen + WordLen;
EmptyLine = false;
SpaceLen = 0;
WordLen = 0;
if(Word == true)
FirstItemOnLine = false;
SpaceLen = Item.Width / TEXTWIDTH_DIVIDER; Word = false;
}
} }
FirstItemOnLine = false;
} }
break; break;
...@@ -2153,19 +2145,34 @@ ParaRun.prototype.Recalculate_Range = function(PRS, ParaPr, Depth) ...@@ -2153,19 +2145,34 @@ ParaRun.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
} }
} }
if(true === Word)
{
WidthLine = X - XRange;
}
if (true === NewRange) if (true === NewRange)
break; break;
} }
} }
if(this.Type == para_Math_Run && true === NewRange) if(this.Type == para_Math_Run)
{ {
this.ParaMath.UpdateMaxWidthLine(PRS, WidthLine); if(true === NewRange)
{
var WidthLine = X - XRange;
if(this.ParaMath.Is_BrkBinBefore() == false)
WidthLine += SpaceLen;
this.ParaMath.UpdateWidthLine(PRS, WidthLine);
}
// для пустого Run, обновляем LineBreakPos на случай, если пустой Run находится между break_operator и мат объектом
else if(this.Content.length == 0 && this.ParaMath.Is_BrkBinBefore() == false && Word == false && FirstItemOnLine == false)
{
PRS.Set_LineBreakPos(Pos);
X += SpaceLen;
SpaceLen = 0;
}
// запоминаем конец Run
PRS.PosEndRun = PRS.CurPos.Copy();
PRS.PosEndRun.Update2(this.Content.length, Depth);
} }
PRS.MoveToLBP = MoveToLBP; PRS.MoveToLBP = MoveToLBP;
...@@ -8251,85 +8258,6 @@ ParaRun.prototype.Recalculate_Range_OneLine = function(PRS, ParaPr, Depth) ...@@ -8251,85 +8258,6 @@ ParaRun.prototype.Recalculate_Range_OneLine = function(PRS, ParaPr, Depth)
this.bEqArray = true; this.bEqArray = true;
this.Recalculate_MeasureContent(WidthPoints); this.Recalculate_MeasureContent(WidthPoints);
};*/ };*/
ParaRun.prototype.new_Math_Recalculate = function(oMeasure, WidthPoints)
{
// ParaText (ParagraphContent.js)
// для настройки TextPr
// Measure
// FontClassification.js
// Get_FontClass
var RangeStartPos = 0;
var RangeEndPos = this.Content.length;
// обновляем позиции start и end для Range
//this.Lines[0].Add_Range(0, RangeStartPos, RangeEndPos);
this.protected_AddRange(0, 0);
this.protected_FillRange(0, 0, RangeStartPos, RangeEndPos);
var oWPrp = this.Get_CompiledPr(false);
var Theme = this.Paragraph.Get_Theme();
var ArgSize = this.Parent.Compiled_ArgSz.value,
bNormalText = this.IsNormalText();
// argSize
g_oTextMeasurer.SetTextPr(oWPrp,Theme);
var InfoMathText = new CMathInfoTextPr_2(oWPrp, ArgSize, bNormalText);
//this.bEqArray = RPI.bEqArray;
this.size.SetZero();
var ascent = 0, descent = 0;
var Lng = this.Content.length;
for (var i = 0 ; i < Lng; i++)
{
this.Content[i].Measure(oMeasure, oWPrp, InfoMathText);
var oSize = this.Content[i].size;
this.size.width += oSize.width;
var oDescent = oSize.height - oSize.ascent;
ascent = ascent > oSize.ascent ? ascent : oSize.ascent;
descent = descent < oDescent ? oDescent : descent;
if(this.Parent.IsEqArray())
{
if(this.Content[i].Type !== para_Math_Ampersand)
WidthPoints.UpdatePoint(oSize.width);
else
WidthPoints.AddNewAlignRange();
}
this.size.ascent = ascent;
this.size.height = ascent + descent;
// Запрашиваем текущие метрики шрифта, под TextAscent мы будем понимать ascent + linegap(которые записаны в шрифте)
/*this.TextHeight = g_oTextMeasurer.GetHeight();
this.TextDescent = Math.abs( g_oTextMeasurer.GetDescender() );
this.TextAscent = this.TextHeight - this.TextDescent;
this.TextAscent2 = g_oTextMeasurer.GetAscender();*/
}
// Пересчитаем метрику строки относительно размера данного текста
/*if (RPI.PRS.LineTextAscent < this.TextAscent)
RPI.PRS.LineTextAscent = this.TextAscent;
if (RPI.PRS.LineTextAscent2 < this.TextAscent2)
RPI.PRS.LineTextAscent2 = this.TextAscent2;
if (RPI.PRS.LineTextDescent < this.TextDescent)
RPI.PRS.LineTextDescent = this.TextDescent;*/
};
ParaRun.prototype.Math_Apply_Style = function(Value) ParaRun.prototype.Math_Apply_Style = function(Value)
{ {
if(Value !== this.MathPrp.sty) if(Value !== this.MathPrp.sty)
...@@ -8511,7 +8439,7 @@ ParaRun.prototype.ApplyPoints = function(PointsInfo) ...@@ -8511,7 +8439,7 @@ ParaRun.prototype.ApplyPoints = function(PointsInfo)
} }
} }
}; };
ParaRun.prototype.Update_LineBreakPos = function(PRS, bAfterRun) /*ParaRun.prototype.Update_LineBreakPos = function(PRS, bAfterRun)
{ {
if(bAfterRun) if(bAfterRun)
{ {
...@@ -8521,7 +8449,7 @@ ParaRun.prototype.Update_LineBreakPos = function(PRS, bAfterRun) ...@@ -8521,7 +8449,7 @@ ParaRun.prototype.Update_LineBreakPos = function(PRS, bAfterRun)
{ {
PRS.Set_LineBreakPos(0); PRS.Set_LineBreakPos(0);
} }
}; };*/
ParaRun.prototype.Get_TextForAutoCorrect = function(AutoCorrectEngine, RunPos) ParaRun.prototype.Get_TextForAutoCorrect = function(AutoCorrectEngine, RunPos)
{ {
var ActionElement = AutoCorrectEngine.Get_ActionElement(); var ActionElement = AutoCorrectEngine.Get_ActionElement();
......
...@@ -1647,6 +1647,14 @@ CMathBase.prototype.Recalculate_Range_OneLine = function(PRS, ParaPr, Depth) ...@@ -1647,6 +1647,14 @@ CMathBase.prototype.Recalculate_Range_OneLine = function(PRS, ParaPr, Depth)
{ {
this.Recalculate_Range(PRS, ParaPr, Depth); this.Recalculate_Range(PRS, ParaPr, Depth);
}; };
CMathBase.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine, _CurRange)
{
if ( PRS.LineAscent < this.size.ascent )
PRS.LineAscent = this.size.ascent;
if ( PRS.LineDescent < this.size.height - this.size.ascent )
PRS.LineDescent = this.size.height - this.size.ascent;
};
CMathBase.prototype.Recalculate_Reset = function() CMathBase.prototype.Recalculate_Reset = function()
{ {
//TODO //TODO
......
...@@ -510,16 +510,20 @@ CBox.prototype.init = function(props) ...@@ -510,16 +510,20 @@ CBox.prototype.init = function(props)
this.setProperties(props); this.setProperties(props);
this.fillContent(); this.fillContent();
} };
CBox.prototype.fillContent = function() CBox.prototype.fillContent = function()
{ {
this.setDimension(1, 1); this.setDimension(1, 1);
this.elements[0][0] = this.getBase(); this.elements[0][0] = this.getBase();
} };
CBox.prototype.getBase = function() CBox.prototype.getBase = function()
{ {
return this.Content[0]; return this.Content[0];
} };
CBox.prototype.Update_WordLen = function(PRS, WordLen)
{
PRS.WordLen = WordLen;
};
function CMathBarPr() function CMathBarPr()
......
...@@ -3985,14 +3985,13 @@ CMathContent.prototype.Recalculate_Range = function(PRS, ParaPr, Depth) ...@@ -3985,14 +3985,13 @@ CMathContent.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
var ascent = 0, descent = 0; var ascent = 0, descent = 0;
this.size.width = 0; this.size.width = 0;
var bInline = this.ParaMath.Is_Inline(); var bInline = this.ParaMath.Is_Inline();
var Brk_Before = this.ParaMath.Is_BrkBinBefore();
var LineAscent = PRS.LineAscent, LineDescent = PRS.LineDescent, // для внутристроковой формулы : начало формулы - начало нового слова
LastPos = ContentLen;
if(this.bRoot && bInline && RangeStartPos == 0) if(this.bRoot && bInline && RangeStartPos == 0)
{ {
PRS.Update_CurPos(0, Depth); PRS.Update_CurPos(0, Depth);
this.Content[0].Update_LineBreakPos(PRS, false); // обновим : начало нового слова - конец предыдущего Run PRS.Update_CurPos(0, Depth+1); // нулевой элемент всегда Run
if(PRS.Word == true) if(PRS.Word == true)
{ {
...@@ -4012,7 +4011,7 @@ CMathContent.prototype.Recalculate_Range = function(PRS, ParaPr, Depth) ...@@ -4012,7 +4011,7 @@ CMathContent.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
Type = Item.Type; Type = Item.Type;
// для однострочных мат объектов обновляем CurLine и CurRange, Run в этом случае не могут разбиваться на несколько строк // для однострочных мат объектов обновляем CurLine и CurRange, Run в этом случае не могут разбиваться на несколько строк
if ( this.bMath_OneLine || (0 === Pos && 0 === CurLine && 0 === CurRange ) || Pos !== RangeStartPos) if (this.bMath_OneLine || (0 === Pos && 0 === CurLine && 0 === CurRange ) || Pos !== RangeStartPos)
Item.Recalculate_Reset( PRS.Range, PRS.Line ); Item.Recalculate_Reset( PRS.Range, PRS.Line );
PRS.Update_CurPos( Pos, Depth ); PRS.Update_CurPos( Pos, Depth );
...@@ -4039,75 +4038,87 @@ CMathContent.prototype.Recalculate_Range = function(PRS, ParaPr, Depth) ...@@ -4039,75 +4038,87 @@ CMathContent.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
{ {
Item.Recalculate_Range(PRS, ParaPr, Depth + 1); Item.Recalculate_Range(PRS, ParaPr, Depth + 1);
// обновляем LineAscent и LineDescent для мат объектов только тогда, когда встретили новое слово: if(Type == para_Math_Composition)
// LastPos < PRS.LineBreakPos.Get(Depth) - новое слово в Run
// (Type == para_Math_Composition && bInline && PRS.Word == false) - мат объект, перед ним break_operator => новое слово в конце предыдущего Run
// иначе LastPos текцщего мат объекта перетрет предыдущий и не будут учтены метрики предшествующих мат объектов (из предыдущего слова)
// для крайнего случая (в контенте не осталось больше элементов проверяем после цикла)
if(Type == para_Math_Composition )
{ {
// перед мат объектом идет break_operator и он не является первым элементом в строке
// перед мат объектом идет break_operator (то есть перед мат объектом начинается слово) if(Item.kind == MATH_BOX )
// или мат оператор (при этом мат объект не является первым элементом в строке)
if((PRS.Word == false || (Item.kind == MATH_BOX && PRS.Word == true)))
{ {
if(PRS.Word == true) var BoxLen = Item.size.width;
if(Brk_Before == true) // break_operator должен идти в начале слова
{ {
PRS.FirstItemOnLine = false; if(PRS.Word == true)
} {
// обновим : начало нового слова - конец предыдущего Run
PRS.FirstItemOnLine = false;
PRS.Word = true; PRS.Update_CurPos(PRS.PosEndRun.Get(Depth), Depth);
PRS.Set_LineBreakPos(PRS.PosEndRun.Get(Depth + 1));
LastPos = Pos - 1; //PRS.Update_CurPos(Pos - 1, Depth);
//this.Content[Pos - 1].Update_LineBreakPos(PRS, true);
}
if(bInline || Item.kind == MATH_BOX) PRS.X += PRS.SpaceLen + PRS.WordLen;
{ PRS.SpaceLen = BoxLen;
PRS.Update_CurPos(LastPos, Depth); PRS.WordLen = 0;
this.Content[LastPos].Update_LineBreakPos(PRS, true); // обновим : начало нового слова - конец предыдущего Run
if(PRS.Word)
PRS.FirstItemOnLine = false;
PRS.Word = true;
} }
else
{
PRS.SpaceLen += BoxLen;
// Слово не убирается в отрезке. Переносим слово в следующий отрезок
// FirstItemOnLine == false - слово оказалось не единственным элементом в промежутке, делаем перенос
if (PRS.FirstItemOnLine == false && PRS.X + PRS.SpaceLen + PRS.WordLen > PRS.XEnd)
{
PRS.MoveToLBP = true;
PRS.NewRange = true;
this.ParaMath.UpdateWidthLine(PRS, PRS.X - PRS.XRange);
}
// новое слово => обновляем метрики PRS.X += PRS.SpaceLen + PRS.WordLen;
if (PRS.LineAscent < LineAscent) PRS.SpaceLen = 0;
PRS.LineAscent = LineAscent; PRS.WordLen = 0;
if (PRS.LineDescent < LineDescent) PRS.Word = false;
PRS.LineDescent = LineDescent; PRS.FirstItemOnLine = false;
}
} }
else else
{ {
LastPos = PRS.LineBreakPos.Get(Depth); // Слово не убирается в отрезке. Переносим слово в следующий отрезок
} // FirstItemOnLine == false - слово оказалось не единственным элементом в промежутке, делаем перенос
if (PRS.FirstItemOnLine == false && PRS.X + PRS.SpaceLen + PRS.WordLen > PRS.XEnd)
{
PRS.MoveToLBP = true;
PRS.NewRange = true;
// Слово не убирается в отрезке. Переносим слово в следующий отрезок this.ParaMath.UpdateWidthLine(PRS, PRS.X - PRS.XRange);
// FirstItemOnLine == false - слово оказалось не единственным элементом в промежутке, делаем перенос }
if (PRS.FirstItemOnLine == false && PRS.X + PRS.SpaceLen + PRS.WordLen > PRS.XEnd)
{
PRS.MoveToLBP = true;
PRS.NewRange = true;
}
if(Brk_Before == false && PRS.Word == false)
{
// Отмечаем начало нового слова
//PRS.Update_CurPos(Pos - 1, Depth);
//this.Content[Pos - 1].Update_LineBreakPos(PRS, true); // обновим : начало нового слова - конец предыдущего Run
if( LineAscent < Item.size.ascent ) // обновим : начало нового слова - конец предыдущего Run
LineAscent = Item.size.ascent; PRS.Update_CurPos(PRS.PosEndRun.Get(Depth), Depth);
PRS.Set_LineBreakPos(PRS.PosEndRun.Get(Depth + 1));
}
if( LineDescent < Item.size.height - Item.size.ascent ) PRS.Word = true;
LineDescent = Item.size.height - Item.size.ascent;
}
else if(LastPos < PRS.LineBreakPos.Get(Depth)) // Run, новое слово обновляем метрики
{
if (PRS.LineAscent < LineAscent)
PRS.LineAscent = LineAscent;
if (PRS.LineDescent < LineDescent) }
PRS.LineDescent = LineDescent;
LastPos = ContentLen;
} }
if ( true === PRS.NewRange ) if ( true === PRS.NewRange )
{ {
RangeEndPos = Pos; RangeEndPos = Pos;
...@@ -4116,16 +4127,6 @@ CMathContent.prototype.Recalculate_Range = function(PRS, ParaPr, Depth) ...@@ -4116,16 +4127,6 @@ CMathContent.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
} }
} }
if(PRS.NewRange == false) // элементы в контенте закончились, перехода на новую строчку нет => обновляем LineAscent и LineDescent
{
if (PRS.LineAscent < LineAscent)
PRS.LineAscent = LineAscent;
if (PRS.LineDescent < LineDescent)
PRS.LineDescent = LineDescent;
}
if ( Pos >= ContentLen ) if ( Pos >= ContentLen )
{ {
RangeEndPos = Pos - 1; RangeEndPos = Pos - 1;
...@@ -4140,7 +4141,6 @@ CMathContent.prototype.IsFirstLine = function(Line) ...@@ -4140,7 +4141,6 @@ CMathContent.prototype.IsFirstLine = function(Line)
var CurLine = Line - this.StartLine; var CurLine = Line - this.StartLine;
return CurLine == 0; return CurLine == 0;
}; };
CMathContent.prototype.Get_SelectionDirection = function() CMathContent.prototype.Get_SelectionDirection = function()
{ {
if (true !== this.Selection.Use) if (true !== this.Selection.Use)
......
...@@ -858,7 +858,7 @@ CMathText.prototype = ...@@ -858,7 +858,7 @@ CMathText.prototype =
}, },
Can_AddNumbering: function() Can_AddNumbering: function()
{ {
return false; return true;
}, },
//// ////
Copy: function() Copy: function()
......
...@@ -1034,17 +1034,12 @@ COperatorParenthesis.prototype.calcCoord = function(stretch) ...@@ -1034,17 +1034,12 @@ COperatorParenthesis.prototype.calcCoord = function(stretch)
} }
// X // X
var DistW = []; var DistW = X[4] - X[5];
for(var j= 0; j< 5; j++)
DistW[j] = X[18-j] - X[9+j];
for(var i=0; i< 5; i++)
DistW[i] = X[9-j] - X[j];
for(var i=5; i<10; i++ ) for(var i=5; i<10; i++ )
{ {
X[i] = X[i]*RX; X[i] = X[i]*RX;
X[9-i] = X[i] + DistW[9-i]; X[9-i] = X[i] + DistW;
} }
var XX = [], var XX = [],
......
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