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

1. Реализовала свойства у Box : opEmu (в случае если true, то Box выступает в...

1. Реализовала свойства у Box : opEmu  (в случае если true, то Box выступает в качестве break operator, если false, то нет), noBreak, также сделаа первую версию принудительного разрыва (break)
2. Для дроби : после отрисовки глифа сделала beginPath у pGraphics (для того чтобы каждый глиф отрисовывался один раз на Draw)

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@63780 954022d7-b5bf-4e40-9824-e11837661b57
parent d7957837
...@@ -134,6 +134,10 @@ CMathSettings.prototype.Get_WrapIndent = function(WrapState) ...@@ -134,6 +134,10 @@ CMathSettings.prototype.Get_WrapIndent = function(WrapState)
return wrapIndent; return wrapIndent;
}; };
CMathSettings.prototype.IsWrap = function(WrapState)
{
return WrapState == ALIGN_MARGIN_WRAP || WrapState == ALIGN_WRAP;
};
CMathSettings.prototype.Get_LeftMargin = function(WrapState) CMathSettings.prototype.Get_LeftMargin = function(WrapState)
{ {
this.SetCompiledPr(); this.SetCompiledPr();
...@@ -748,7 +752,15 @@ ParaMath.prototype.Get_AlignToLine = function(_CurLine, _CurRange, _Page, _X, _X ...@@ -748,7 +752,15 @@ ParaMath.prototype.Get_AlignToLine = function(_CurLine, _CurRange, _Page, _X, _X
var WrapState = this.PageInfo.GetWrap(Page); var WrapState = this.PageInfo.GetWrap(Page);
var wrapIndent = MathSettings.Get_WrapIndent(WrapState); var wrap = 0;
var bFirstLine = this.Root.IsStartLine(_CurLine);
if(bFirstLine == false && true == MathSettings.IsWrap(WrapState))
{
var wrapIndent = MathSettings.Get_WrapIndent(WrapState);
wrap = this.Root.Get_WrapToLine(_CurLine, _CurRange, wrapIndent);
}
var XStart, XEnd; var XStart, XEnd;
...@@ -781,14 +793,14 @@ ParaMath.prototype.Get_AlignToLine = function(_CurLine, _CurRange, _Page, _X, _X ...@@ -781,14 +793,14 @@ ParaMath.prototype.Get_AlignToLine = function(_CurLine, _CurRange, _Page, _X, _X
if(bSingleLine) // чтобы не сравнивать с wrapIndent, когда формула занимает одну строку if(bSingleLine) // чтобы не сравнивать с wrapIndent, когда формула занимает одну строку
W = StartLineWidth; W = StartLineWidth;
else else
W = Math.max(MaxW + wrapIndent, StartLineWidth); W = Math.max(MaxW + wrap, StartLineWidth);
} }
else else
{ {
W = MaxW; W = MaxW;
} }
if(this.Root.IsStartLine(_CurLine)) // первая строка первой страницы, если строка разбивается на несколько отрезко, то это уже будет inline-формула if(bFirstLine == true) // первая строка первой страницы, если строка разбивается на несколько отрезко, то это уже будет inline-формула
{ {
switch(Jc) switch(Jc)
{ {
...@@ -806,11 +818,11 @@ ParaMath.prototype.Get_AlignToLine = function(_CurLine, _CurRange, _Page, _X, _X ...@@ -806,11 +818,11 @@ ParaMath.prototype.Get_AlignToLine = function(_CurLine, _CurRange, _Page, _X, _X
{ {
if(Jc == align_Justify) if(Jc == align_Justify)
{ {
X = XEnd - XStart > W ? XStart + (XEnd - XStart - W)/2 + wrapIndent : XStart; X = XEnd - XStart > W ? XStart + (XEnd - XStart - W)/2 + wrap : XStart;
} }
else else
{ {
X = XEnd - XStart > W ? XStart + wrapIndent : XStart; X = XEnd - XStart > W ? XStart + wrap : XStart;
} }
} }
...@@ -1453,17 +1465,16 @@ ParaMath.prototype.private_UpdateXLimits = function(PRS) ...@@ -1453,17 +1465,16 @@ ParaMath.prototype.private_UpdateXLimits = function(PRS)
PRS.X += MathSettings.Get_LeftMargin(WrapState); PRS.X += MathSettings.Get_LeftMargin(WrapState);
PRS.XEnd -= MathSettings.Get_RightMargin(WrapState); PRS.XEnd -= MathSettings.Get_RightMargin(WrapState);
var WrapIndent = MathSettings.Get_WrapIndent(WrapState);
PRS.WrapIndent = WrapIndent; PRS.WrapIndent = MathSettings.Get_WrapIndent(WrapState);
PRS.bPriorityOper = this.ParaMathRPI.bInline == false; PRS.bPriorityOper = this.ParaMathRPI.bInline == false;
var bFirstLine = this.Root.IsStartLine(PRS.Line); var bFirstLine = this.Root.IsStartLine(PRS.Line);
PRS.bFirstLine = bFirstLine; PRS.bFirstLine = bFirstLine;
if(bFirstLine == false) if(bFirstLine == false && true == MathSettings.IsWrap(WrapState))
{ {
PRS.X += WrapIndent; PRS.X += this.Root.Get_WrapToLine(PRS.Line, PRS.Range, PRS.WrapIndent);
} }
PRS.XRange = PRS.X; PRS.XRange = PRS.X;
......
...@@ -157,6 +157,14 @@ CParagraphContentWithContentBase.prototype.Is_UseInDocument = function(Id) ...@@ -157,6 +157,14 @@ CParagraphContentWithContentBase.prototype.Is_UseInDocument = function(Id)
return false; return false;
}; };
CParagraphContentWithContentBase.prototype.protected_GetPrevRangeEndPos = function(LineIndex, RangeIndex)
{
var RangeCount = this.protected_GetRangesCount(LineIndex - 1);
var RangeOffset = this.protected_GetRangeOffset(LineIndex - 1, RangeCount - 1);
return LineIndex == 0 && RangeIndex == 0 ? 0 : this.Lines[RangeOffset + 1];
};
//---------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------
// Класс CParagraphContentWithContentBase // Класс CParagraphContentWithContentBase
// Это базовый класс для элементов параграфа, которые сами по себе могут содержать элементы параграфа. // Это базовый класс для элементов параграфа, которые сами по себе могут содержать элементы параграфа.
......
...@@ -2192,6 +2192,7 @@ function CParagraphRecalculateStateWrap(Para) ...@@ -2192,6 +2192,7 @@ function CParagraphRecalculateStateWrap(Para)
this.WrapIndent = 0; // WrapIndent нужен для сравнения с длиной слова (когда слово разбивается по Compare Oper): ширина первой строки формулы не должна быть меньше WrapIndent this.WrapIndent = 0; // WrapIndent нужен для сравнения с длиной слова (когда слово разбивается по Compare Oper): ширина первой строки формулы не должна быть меньше WrapIndent
this.bFirstCompareOper = true; this.bFirstCompareOper = true;
this.bFirstLine = false; this.bFirstLine = false;
this.MathFirstItem = true;
this.bPriorityOper = true; this.bPriorityOper = true;
// у "крайних" в строке операторов/мат объектов сооответствующий Gap равен нулю // у "крайних" в строке операторов/мат объектов сооответствующий Gap равен нулю
...@@ -2232,6 +2233,7 @@ CParagraphRecalculateStateWrap.prototype = ...@@ -2232,6 +2233,7 @@ CParagraphRecalculateStateWrap.prototype =
this.OperGapRight = 0; this.OperGapRight = 0;
this.OperGapLeft = 0; this.OperGapLeft = 0;
this.WrapIndent = 0; this.WrapIndent = 0;
this.MathFirstItem = true;
this.bFirstCompareOper = true; this.bFirstCompareOper = true;
this.bInsideOper = false; this.bInsideOper = false;
this.bNoOneBreakOperator = true; this.bNoOneBreakOperator = true;
......
...@@ -3445,6 +3445,7 @@ ParaRun.prototype.Is_EmptyRange = function(_CurLine, _CurRange) ...@@ -3445,6 +3445,7 @@ ParaRun.prototype.Is_EmptyRange = function(_CurLine, _CurRange)
return false; return false;
}; };
ParaRun.prototype.Check_Range_OnlyMath = function(Checker, _CurRange, _CurLine) ParaRun.prototype.Check_Range_OnlyMath = function(Checker, _CurRange, _CurLine)
{ {
var CurLine = _CurLine - this.StartLine; var CurLine = _CurLine - this.StartLine;
...@@ -9250,6 +9251,21 @@ ParaRun.prototype.Math_PreRecalc = function(Parent, ParaMath, ArgSize, RPI, Gaps ...@@ -9250,6 +9251,21 @@ ParaRun.prototype.Math_PreRecalc = function(Parent, ParaMath, ArgSize, RPI, Gaps
} }
}; };
ParaRun.prototype.Math_EmptyRange = function(_CurLine, _CurRange) // до пересчета нужно узнать будет ли данный Run пустым или нет в данном Range, необходимо для того, чтобы выставить wrapIndent
{
var bEmptyRange = true;
var Lng = this.Content.length;
if(Lng > 0)
{
var CurLine = _CurLine - this.StartLine;
var CurRange = ( 0 === CurLine ? _CurRange - this.StartRange : _CurRange );
bEmptyRange = this.protected_GetPrevRangeEndPos(CurLine, CurRange) >= Lng;
}
return bEmptyRange;
};
ParaRun.prototype.Math_UpdateGaps = function(_CurLine, _CurRange, GapsInfo) ParaRun.prototype.Math_UpdateGaps = function(_CurLine, _CurRange, GapsInfo)
{ {
var CurLine = _CurLine - this.StartLine; var CurLine = _CurLine - this.StartLine;
......
...@@ -1808,7 +1808,7 @@ CMathBase.prototype.Recalculate_Range = function(PRS, ParaPr, Depth) ...@@ -1808,7 +1808,7 @@ CMathBase.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
this.recalculateSize(g_oTextMeasurer); this.recalculateSize(g_oTextMeasurer);
this.Update_WordLen(PRS, WordLen); this.UpdatePRS_OneLine(PRS, WordLen);
this.Bounds.SetWidth(0, 0, this.size.width); this.Bounds.SetWidth(0, 0, this.size.width);
this.Bounds.UpdateMetrics(0, 0, this.size); this.Bounds.UpdateMetrics(0, 0, this.size);
} }
...@@ -1878,6 +1878,22 @@ CMathBase.prototype.Recalculate_Range = function(PRS, ParaPr, Depth) ...@@ -1878,6 +1878,22 @@ CMathBase.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
PRS.bMath_OneLine = bOneLine; PRS.bMath_OneLine = bOneLine;
}; };
CMathBase.prototype.Get_WrapToLine = function(_CurLine, _CurRange, WrapIndent)
{
var Wrap = 0;
if(this.bOneLine)
{
Wrap = WrapIndent;
}
else
{
var Pos = this.NumBreakContent;
Wrap = this.Content[Pos].Get_WrapToLine(_CurLine, _CurRange, WrapIndent);
}
return Wrap;
};
CMathBase.prototype.Recalculate_MinMaxContentWidth = function(MinMax) CMathBase.prototype.Recalculate_MinMaxContentWidth = function(MinMax)
{ {
var bOneLine = MinMax.bMath_OneLine; var bOneLine = MinMax.bMath_OneLine;
...@@ -1992,12 +2008,12 @@ CMathBase.prototype.Math_GetWidth = function(_CurLine, _CurRange) ...@@ -1992,12 +2008,12 @@ CMathBase.prototype.Math_GetWidth = function(_CurLine, _CurRange)
{ {
return this.size.width; return this.size.width;
}; };
CMathBase.prototype.Update_WordLen = function(PRS, WordLen) CMathBase.prototype.UpdatePRS_OneLine = function(PRS, WordLen)
{ {
if(this.bInside == false) if(this.bInside == false)
{ {
PRS.WordLen = WordLen + this.size.width; PRS.WordLen = WordLen + this.size.width;
PRS.MathFirstItem = false;
} }
}; };
CMathBase.prototype.Recalculate_Range_OneLine = function(PRS, ParaPr, Depth) CMathBase.prototype.Recalculate_Range_OneLine = function(PRS, ParaPr, Depth)
......
...@@ -54,7 +54,6 @@ function CMathBorderBoxPr() ...@@ -54,7 +54,6 @@ function CMathBorderBoxPr()
this.strikeTLBR = false; this.strikeTLBR = false;
this.strikeV = false; this.strikeV = false;
} }
CMathBorderBoxPr.prototype.Set_FromObject = function(Obj) CMathBorderBoxPr.prototype.Set_FromObject = function(Obj)
{ {
if (undefined !== Obj.hideBot && null !== Obj.hideBot) if (undefined !== Obj.hideBot && null !== Obj.hideBot)
...@@ -81,7 +80,6 @@ CMathBorderBoxPr.prototype.Set_FromObject = function(Obj) ...@@ -81,7 +80,6 @@ CMathBorderBoxPr.prototype.Set_FromObject = function(Obj)
if (undefined !== Obj.strikeV && null !== Obj.strikeV) if (undefined !== Obj.strikeV && null !== Obj.strikeV)
this.strikeV = Obj.strikeV; this.strikeV = Obj.strikeV;
}; };
CMathBorderBoxPr.prototype.Copy = function() CMathBorderBoxPr.prototype.Copy = function()
{ {
var NewPr = new CMathBorderBoxPr(); var NewPr = new CMathBorderBoxPr();
...@@ -96,7 +94,6 @@ CMathBorderBoxPr.prototype.Copy = function() ...@@ -96,7 +94,6 @@ CMathBorderBoxPr.prototype.Copy = function()
return NewPr; return NewPr;
}; };
CMathBorderBoxPr.prototype.Write_ToBinary = function(Writer) CMathBorderBoxPr.prototype.Write_ToBinary = function(Writer)
{ {
// Bool : hideBot // Bool : hideBot
...@@ -117,7 +114,6 @@ CMathBorderBoxPr.prototype.Write_ToBinary = function(Writer) ...@@ -117,7 +114,6 @@ CMathBorderBoxPr.prototype.Write_ToBinary = function(Writer)
Writer.WriteBool(this.strikeTLBR); Writer.WriteBool(this.strikeTLBR);
Writer.WriteBool(this.strikeV); Writer.WriteBool(this.strikeV);
}; };
CMathBorderBoxPr.prototype.Read_FromBinary = function(Reader) CMathBorderBoxPr.prototype.Read_FromBinary = function(Reader)
{ {
// Bool : hideBot // Bool : hideBot
...@@ -155,7 +151,6 @@ function CBorderBox(props) ...@@ -155,7 +151,6 @@ function CBorderBox(props)
g_oTableId.Add(this, this.Id); g_oTableId.Add(this, this.Id);
} }
Asc.extendClass(CBorderBox, CMathBase); Asc.extendClass(CBorderBox, CMathBase);
CBorderBox.prototype.ClassType = historyitem_type_borderBox; CBorderBox.prototype.ClassType = historyitem_type_borderBox;
CBorderBox.prototype.kind = MATH_BORDER_BOX; CBorderBox.prototype.kind = MATH_BORDER_BOX;
CBorderBox.prototype.init = function(props) CBorderBox.prototype.init = function(props)
...@@ -396,7 +391,6 @@ function CMathBoxPr() ...@@ -396,7 +391,6 @@ function CMathBoxPr()
this.noBreak = false; this.noBreak = false;
this.opEmu = false; this.opEmu = false;
} }
CMathBoxPr.prototype.Set_FromObject = function(Obj) CMathBoxPr.prototype.Set_FromObject = function(Obj)
{ {
if(true === Obj.aln || 1 === Obj.aln) if(true === Obj.aln || 1 === Obj.aln)
...@@ -420,12 +414,15 @@ CMathBoxPr.prototype.Set_FromObject = function(Obj) ...@@ -420,12 +414,15 @@ CMathBoxPr.prototype.Set_FromObject = function(Obj)
else else
this.noBreak = false; this.noBreak = false;
if(true === Obj.opEmu || 1 === Obj.opEmu) if(true === Obj.opEmu || 1 === Obj.opEmu || Obj.opEmu == null) // null - val attribute is absent
this.opEmu = true; this.opEmu = true;
else else
this.opEmu = false; this.opEmu = false;
}; };
/*CMathBoxPr.prototype.IsBreak = function()
{
return this.brk ! == undefined;
};*/
CMathBoxPr.prototype.Copy = function() CMathBoxPr.prototype.Copy = function()
{ {
var NewPr = new CMathBoxPr(); var NewPr = new CMathBoxPr();
...@@ -440,7 +437,6 @@ CMathBoxPr.prototype.Copy = function() ...@@ -440,7 +437,6 @@ CMathBoxPr.prototype.Copy = function()
return NewPr; return NewPr;
}; };
CMathBoxPr.prototype.Write_ToBinary = function(Writer) CMathBoxPr.prototype.Write_ToBinary = function(Writer)
{ {
// Bool : aln // Bool : aln
...@@ -504,10 +500,8 @@ function CBox(props) ...@@ -504,10 +500,8 @@ function CBox(props)
g_oTableId.Add( this, this.Id ); g_oTableId.Add( this, this.Id );
} }
Asc.extendClass(CBox, CMathBase); Asc.extendClass(CBox, CMathBase);
CBox.prototype.ClassType = historyitem_type_box; CBox.prototype.ClassType = historyitem_type_box;
CBox.prototype.kind = MATH_BOX; CBox.prototype.kind = MATH_BOX;
CBox.prototype.init = function(props) CBox.prototype.init = function(props)
{ {
this.Fill_LogicalContent(1); this.Fill_LogicalContent(1);
...@@ -517,6 +511,15 @@ CBox.prototype.init = function(props) ...@@ -517,6 +511,15 @@ CBox.prototype.init = function(props)
}; };
CBox.prototype.fillContent = function() CBox.prototype.fillContent = function()
{ {
if(this.Pr.opEmu == false && this.Pr.noBreak == false)
{
this.NeedBreakContent(0);
}
else
{
this.bCanBreak == false;
}
this.setDimension(1, 1); this.setDimension(1, 1);
this.elements[0][0] = this.getBase(); this.elements[0][0] = this.getBase();
}; };
...@@ -524,25 +527,17 @@ CBox.prototype.getBase = function() ...@@ -524,25 +527,17 @@ CBox.prototype.getBase = function()
{ {
return this.Content[0]; return this.Content[0];
}; };
CBox.prototype.Update_WordLen = function(PRS, WordLen) CBox.prototype.UpdatePRS_OneLine = function(PRS, WordLen)
{ {
PRS.WordLen = WordLen; PRS.WordLen = WordLen;
}; };
CBox.prototype.IsOperatorEmulator = function()
// TO DO передела в base.js
CBox.prototype.UpdateOperators____2 = function(_CurLine, _CurRange)
{ {
if(true == this.ParaMath.Is_BrkBinBefore()) return this.Pr.opEmu == true;
{ };
this.GapLeft = 0; CBox.prototype.IsBreak = function()
} {
else return this.Pr.opEmu == true && this.Pr.brk !== undefined;
{
this.GapRight = 0;
}
this.size.width = this.Content[0].size.width + this.GapLeft + this.GapRight;
}; };
...@@ -555,20 +550,17 @@ CMathBarPr.prototype.Set_FromObject = function(Obj) ...@@ -555,20 +550,17 @@ CMathBarPr.prototype.Set_FromObject = function(Obj)
if(LOCATION_TOP === Obj.pos || LOCATION_BOT === Obj.pos) if(LOCATION_TOP === Obj.pos || LOCATION_BOT === Obj.pos)
this.pos = Obj.pos; this.pos = Obj.pos;
}; };
CMathBarPr.prototype.Copy = function() CMathBarPr.prototype.Copy = function()
{ {
var NewPr = new CMathBarPr(); var NewPr = new CMathBarPr();
NewPr.pos = this.pos; NewPr.pos = this.pos;
return NewPr; return NewPr;
}; };
CMathBarPr.prototype.Write_ToBinary = function(Writer) CMathBarPr.prototype.Write_ToBinary = function(Writer)
{ {
// Long : pos // Long : pos
Writer.WriteLong(this.pos); Writer.WriteLong(this.pos);
}; };
CMathBarPr.prototype.Read_FromBinary = function(Reader) CMathBarPr.prototype.Read_FromBinary = function(Reader)
{ {
// Long : pos // Long : pos
...@@ -591,10 +583,8 @@ function CBar(props) ...@@ -591,10 +583,8 @@ function CBar(props)
g_oTableId.Add( this, this.Id ); g_oTableId.Add( this, this.Id );
} }
Asc.extendClass(CBar, CCharacter); Asc.extendClass(CBar, CCharacter);
CBar.prototype.ClassType = historyitem_type_bar; CBar.prototype.ClassType = historyitem_type_bar;
CBar.prototype.kind = MATH_BAR; CBar.prototype.kind = MATH_BAR;
CBar.prototype.init = function(props) CBar.prototype.init = function(props)
{ {
this.Fill_LogicalContent(1); this.Fill_LogicalContent(1);
...@@ -650,7 +640,6 @@ function CMathPhantomPr() ...@@ -650,7 +640,6 @@ function CMathPhantomPr()
this.zeroDesc = false; this.zeroDesc = false;
this.zeroWid = false; this.zeroWid = false;
} }
CMathPhantomPr.prototype.Set_FromObject = function(Obj) CMathPhantomPr.prototype.Set_FromObject = function(Obj)
{ {
if (true === Obj.show || 1 === Obj.show) if (true === Obj.show || 1 === Obj.show)
...@@ -678,7 +667,6 @@ CMathPhantomPr.prototype.Set_FromObject = function(Obj) ...@@ -678,7 +667,6 @@ CMathPhantomPr.prototype.Set_FromObject = function(Obj)
else else
this.zeroWid = false; this.zeroWid = false;
}; };
CMathPhantomPr.prototype.Copy = function() CMathPhantomPr.prototype.Copy = function()
{ {
var NewPr = new CMathPhantomPr(); var NewPr = new CMathPhantomPr();
...@@ -691,7 +679,6 @@ CMathPhantomPr.prototype.Copy = function() ...@@ -691,7 +679,6 @@ CMathPhantomPr.prototype.Copy = function()
return NewPr; return NewPr;
}; };
CMathPhantomPr.prototype.Write_ToBinary = function(Writer) CMathPhantomPr.prototype.Write_ToBinary = function(Writer)
{ {
// Bool : show // Bool : show
...@@ -706,7 +693,6 @@ CMathPhantomPr.prototype.Write_ToBinary = function(Writer) ...@@ -706,7 +693,6 @@ CMathPhantomPr.prototype.Write_ToBinary = function(Writer)
Writer.WriteBool(this.zeroDesc); Writer.WriteBool(this.zeroDesc);
Writer.WriteBool(this.zeroWid); Writer.WriteBool(this.zeroWid);
}; };
CMathPhantomPr.prototype.Read_FromBinary = function(Reader) CMathPhantomPr.prototype.Read_FromBinary = function(Reader)
{ {
// Bool : show // Bool : show
...@@ -736,10 +722,8 @@ function CPhantom(props) ...@@ -736,10 +722,8 @@ function CPhantom(props)
g_oTableId.Add( this, this.Id ); g_oTableId.Add( this, this.Id );
} }
Asc.extendClass(CPhantom, CMathBase); Asc.extendClass(CPhantom, CMathBase);
CPhantom.prototype.ClassType = historyitem_type_phant; CPhantom.prototype.ClassType = historyitem_type_phant;
CPhantom.prototype.kind = MATH_PHANTOM; CPhantom.prototype.kind = MATH_PHANTOM;
CPhantom.prototype.init = function(props) CPhantom.prototype.init = function(props)
{ {
this.Fill_LogicalContent(1); this.Fill_LogicalContent(1);
......
...@@ -202,6 +202,8 @@ CFraction.prototype.drawSkewedFraction = function(PDSE) ...@@ -202,6 +202,8 @@ CFraction.prototype.drawSkewedFraction = function(PDSE)
PDSE.Graphics._l(xx2, yy2); PDSE.Graphics._l(xx2, yy2);
PDSE.Graphics.ds(); PDSE.Graphics.ds();
PDSE.Graphics._s();
CFraction.superclass.Draw_Elements.call(this, PDSE); CFraction.superclass.Draw_Elements.call(this, PDSE);
}; };
CFraction.prototype.drawLinearFraction = function(PDSE) CFraction.prototype.drawLinearFraction = function(PDSE)
...@@ -231,6 +233,8 @@ CFraction.prototype.drawLinearFraction = function(PDSE) ...@@ -231,6 +233,8 @@ CFraction.prototype.drawLinearFraction = function(PDSE)
PDSE.Graphics._l(x2, y2); PDSE.Graphics._l(x2, y2);
PDSE.Graphics.ds(); PDSE.Graphics.ds();
PDSE.Graphics._s();
CFraction.superclass.Draw_Elements.call(this, PDSE); CFraction.superclass.Draw_Elements.call(this, PDSE);
}; };
CFraction.prototype.getNumerator = function() CFraction.prototype.getNumerator = function()
......
...@@ -2254,7 +2254,7 @@ CMathContent.prototype.private_LoadFromMenuFraction = function(Type, Pr) ...@@ -2254,7 +2254,7 @@ CMathContent.prototype.private_LoadFromMenuFraction = function(Type, Pr)
case c_oAscMathType.FractionHorizontal : this.Add_Fraction({ctrPrp : Pr.ctrPrp, type : LINEAR_FRACTION}, null, null); break; case c_oAscMathType.FractionHorizontal : this.Add_Fraction({ctrPrp : Pr.ctrPrp, type : LINEAR_FRACTION}, null, null); break;
case c_oAscMathType.FractionSmall: case c_oAscMathType.FractionSmall:
var oBox = new CBox(Pr); var oBox = new CBox(Pr);
this.Add_Element(oBox) this.Add_Element(oBox);
var BoxMathContent = oBox.getBase(); var BoxMathContent = oBox.getBase();
BoxMathContent.Add_Fraction(Pr, null, null); BoxMathContent.Add_Fraction(Pr, null, null);
break; break;
...@@ -3926,8 +3926,6 @@ CMathContent.prototype.Recalculate_Range = function(PRS, ParaPr, Depth) ...@@ -3926,8 +3926,6 @@ CMathContent.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
Item.Recalculate_Range(PRS, ParaPr, Depth + 1); Item.Recalculate_Range(PRS, ParaPr, Depth + 1);
bCurInsideOper = bCurInsideOper || PRS.bInsideOper;
PRS.bBoxOperator = Type == para_Math_Composition && Item.kind == MATH_BOX; PRS.bBoxOperator = Type == para_Math_Composition && Item.kind == MATH_BOX;
if(Type == para_Math_Composition) if(Type == para_Math_Composition)
...@@ -3939,48 +3937,87 @@ CMathContent.prototype.Recalculate_Range = function(PRS, ParaPr, Depth) ...@@ -3939,48 +3937,87 @@ CMathContent.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
BoxGapLeft = Item.GapLeft, BoxGapLeft = Item.GapLeft,
BoxGapRight = Item.GapRight; BoxGapRight = Item.GapRight;
if(Brk_Before == true) // break_operator должен идти в начале слова if(true == Item.IsBreak())
{ {
PRS.X += PRS.SpaceLen + PRS.WordLen; if(true == PRS.MathFirstItem)
if(PRS.Word == true)
{ {
// обновим : начало нового слова - конец предыдущего Run PRS.WordLen += BoxLen;
PRS.FirstItemOnLine = false; }
else
{
PRS.bInsideOper = true;
PRS.X += PRS.SpaceLen + PRS.WordLen;
PRS.Update_CurPos(PrevLastPos, _Depth-1); PRS.Update_CurPos(PrevLastPos, _Depth-1);
PRS.Set_LineBreakPos(LastPos); PRS.Set_LineBreakPos(LastPos);
PRS.SpaceLen = BoxLen; this.ParaMath.UpdateWidthLine(PRS, PRS.X - PRS.XRange);
}
PRS.WordLen = 0;
PRS.Word = true; PRS.MoveToLBP = true;
PRS.NewRange = true;
}
} }
else else if(true == Item.IsOperatorEmulator())
{ {
var bOverXEnd = PRS.X + PRS.SpaceLen + PRS.WordLen + BoxLen - BoxGapRight > PRS.XEnd; if(Brk_Before == true) // break_operator должен идти в начале слова
{
PRS.X += PRS.SpaceLen + PRS.WordLen;
PRS.OperGapRight = BoxGapRight; if(true == PRS.MathFirstItem/*PRS.FirstItemOnLine == true && PRS.Word == false*/)
{
PRS.WordLen += BoxLen;
}
else/* if(PRS.Word == true)*/
{
// обновим : начало нового слова - конец предыдущего Run
PRS.bInsideOper = true;
PRS.FirstItemOnLine = false;
// Слово не убирается в отрезке. Переносим слово в следующий отрезок PRS.Update_CurPos(PrevLastPos, _Depth-1);
// FirstItemOnLine == false - слово оказалось не единственным элементом в промежутке, делаем перенос PRS.Set_LineBreakPos(LastPos);
if(PRS.FirstItemOnLine == false && bOverXEnd)
{ PRS.SpaceLen = BoxLen;
PRS.MoveToLBP = true;
PRS.NewRange = true; PRS.WordLen = 0;
PRS.Word = true;
}
this.ParaMath.UpdateWidthLine(PRS, PRS.X - PRS.XRange);
} }
else
{
var bOverXEnd = PRS.X + PRS.SpaceLen + PRS.WordLen + BoxLen - BoxGapRight > PRS.XEnd;
PRS.X += PRS.SpaceLen + PRS.WordLen + BoxLen; PRS.OperGapRight = BoxGapRight;
PRS.SpaceLen = 0;
PRS.WordLen = 0;
PRS.Word = false; // Слово не убирается в отрезке. Переносим слово в следующий отрезок
PRS.FirstItemOnLine = false; // FirstItemOnLine == false - слово оказалось не единственным элементом в промежутке, делаем перенос
if(PRS.FirstItemOnLine == false && bOverXEnd)
{
PRS.MoveToLBP = true;
PRS.NewRange = true;
this.ParaMath.UpdateWidthLine(PRS, PRS.X - PRS.XRange);
}
else
{
PRS.bInsideOper = true;
}
PRS.X += PRS.SpaceLen + PRS.WordLen + BoxLen;
PRS.SpaceLen = 0;
PRS.WordLen = 0;
PRS.Word = false;
PRS.FirstItemOnLine = false;
}
}
else
{
PRS.WordLen += BoxLen;
} }
PRS.MathFirstItem = false;
} }
else else
{ {
...@@ -4035,12 +4072,19 @@ CMathContent.prototype.Recalculate_Range = function(PRS, ParaPr, Depth) ...@@ -4035,12 +4072,19 @@ CMathContent.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
} }
else else
{ {
if(PRS.MathFirstItem == true && false == Item.Is_EmptyRange(PRS.Line, PRS.Range))
{
PRS.MathFirstItem = false;
}
if(PRS.bPriorityOper == true && PRS.bInsideOper == true && PRS.X - PRS.XRange > PRS.WrapIndent) if(PRS.bPriorityOper == true && PRS.bInsideOper == true && PRS.X - PRS.XRange > PRS.WrapIndent)
{ {
bNoBreakMObj = true; bNoBreakMObj = true;
} }
} }
bCurInsideOper = bCurInsideOper || PRS.bInsideOper;
if ( true === PRS.NewRange ) if ( true === PRS.NewRange )
{ {
...@@ -4060,6 +4104,45 @@ CMathContent.prototype.Recalculate_Range = function(PRS, ParaPr, Depth) ...@@ -4060,6 +4104,45 @@ CMathContent.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
this.protected_FillRange(CurLine, CurRange, RangeStartPos, RangeEndPos); this.protected_FillRange(CurLine, CurRange, RangeStartPos, RangeEndPos);
}; };
CMathContent.prototype.Get_WrapToLine = function(_CurLine, _CurRange, WrapIndent)
{
var Pos = this.protected_GetPrevRangeEndPos(_CurLine, _CurRange);
var ContentLen = this.Content.length;
var Wrap = 0;
if(false == this.IsStartLine(_CurLine, _CurRange))
{
while(Pos < ContentLen)
{
var Item = this.Content[Pos];
var bEmptyRun = Item.Type == para_Math_Run && true == Item.Math_EmptyRange(_CurLine, _CurRange); // Get_WrapToLine может прийти до Recalculate_Range
var bBoxBreak = Item.Type == para_Math_Composition && Item.kind == MATH_BOX && true == Item.IsBreak();
if(Item.Type == para_Math_Composition)
{
if(bBoxBreak == true)
{
Wrap = 0;
}
else
{
Wrap = Item.Get_WrapToLine(_CurLine, _CurRange, WrapIndent);
}
break;
}
else if(bEmptyRun == false)
{
Wrap = WrapIndent;
break;
}
Pos++;
}
}
return Wrap;
};
CMathContent.prototype.Math_Set_EmptyRange = function(PRS) CMathContent.prototype.Math_Set_EmptyRange = function(PRS)
{ {
var CurLine = PRS.Line - this.StartLine; var CurLine = PRS.Line - this.StartLine;
......
...@@ -70,135 +70,6 @@ CGlyphOperator.prototype.fixSize = function(stretch) ...@@ -70,135 +70,6 @@ CGlyphOperator.prototype.fixSize = function(stretch)
this.size.ascent = ascent; this.size.ascent = ascent;
this.size.height = height; this.size.height = height;
}; };
CGlyphOperator.prototype.draw_other = function() // с выравниванием к краю (относительно аргумента)
{
var coord = this.calcCoord(this.stretch);
var X = coord.XX, Y = coord.YY,
W = this.size.width, H = this.size.height,
glW, glH;
var a1, a2, b1, b2, c1, c2;
var bHor = this.loc == 0 || this.loc == 1;
if(bHor)
{
glW = coord.W;
glH = coord.H;
}
else
{
glW = coord.H;
glH = coord.W;
}
var shW = (W - glW)/ 2, // выравниваем глиф по длине
shH = (H - glH)/2; // при повороте на 90 градусовы
if(this.loc == 0)
{
a1 = 1; b1 = 0; c1 = shW;
a2 = 0; b2 = 1; c2 = 0;
}
else if(this.loc == 1)
{
a1 = 1; b1 = 0; c1 = shW;
a2 = 0; b2 = 1; c2 = H - glH;
}
else if(this.loc == 2)
{
a1 = 0; b1 = 1; c1 = 0;
a2 = 1; b2 = 0; c2 = shH;
}
else if(this.loc == 3)
{
a1 = 0; b1 = 1; c1 = W - glW;
a2 = 1; b2 = 0; c2 = shH;
}
else if(this.loc == 4)
{
a1 = 0; b1 = 1; c1 = shW;
a2 = 1; b2 = 0; c2 = 0;
}
if(this.turn == 1)
{
a1 *= -1; b1 *= -1; c1 += glW;
}
else if(this.turn == 2)
{
a2 *= -1; b2 *= -1; c2 += glH;
}
else if(this.turn == 3)
{
a1 *= -1; b1 *= -1; c1 += glW;
a2 *= -1; b2 *= -1; c2 += glH;
}
// A*x + B*y + C = 0
if(bHor)
{
a1 = 1; b1 = 0; c1 = shW;
a2 = 0; b2 = 1; c2 = 0;
}
else
{
a1 = 0; b1 = 1; c1 = 0;
a2 = 1; b2 = 0; c2 = shH;
}
if(this.turn == 1)
{
a1 *= -1; b1 *= -1; c1 = W;
}
else if(this.turn == 2)
{
a2 *= -1; b2 *= -1; c2 = H;
}
else if(this.turn == 3)
{
a1 *= -1; b1 *= -1; c1 = W;
a2 *= -1; b2 *= -1; c2 = H;
}
// смещение
var gpX = 0,
gpY = 0;
if(this.loc == 1)
gpY = this.penW*25.4/96;
if(this.loc == 3)
gpX = - this.penW*25.4/96;
var XX = [],
YY = [];
var x = this.pos.x,
y = this.pos.y;
for(var i = 0; i < X.length; i++)
{
XX[i] = x + X[i]*a1 + Y[i]*b1 + c1 + gpX;
YY[i] = y + X[i]*a2 + Y[i]*b2 + c2 + gpY;
}
var intGrid = MathControl.pGraph.GetIntegerGrid();
MathControl.pGraph.SetIntegerGrid(false);
MathControl.pGraph.p_width(this.penW*1000);
MathControl.pGraph.b_color1(0,0,0, 255);
MathControl.pGraph._s();
this.drawPath(XX,YY);
MathControl.pGraph.df();
MathControl.pGraph.SetIntegerGrid(intGrid);
};
CGlyphOperator.prototype.getCoordinateGlyph = function() CGlyphOperator.prototype.getCoordinateGlyph = function()
{ {
var coord = this.calcCoord(this.stretch); var coord = this.calcCoord(this.stretch);
......
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