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

1. Реализовала alnAt для свойства brk (для Box и для m:rPrp)

2. Поправила баг: для инлайн формул игнорируется принудительный перенос
3. Дополнила таблицу break Operator

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@64057 954022d7-b5bf-4e40-9824-e11837661b57
parent 24600ebc
......@@ -554,6 +554,8 @@ function ParaMath()
this.Ascent = 0;
this.Descent = 0;
this.DispositionOpers = [];
this.DefaultTextPr = new CTextPr();
this.DefaultTextPr.FontFamily = {Name : "Cambria Math", Index : -1 };
......@@ -752,16 +754,15 @@ ParaMath.prototype.Get_AlignToLine = function(_CurLine, _CurRange, _Page, _X, _X
var Page = AbsolutePage + _Page;
var WrapState = this.PageInfo.GetWrap(Page);
var wrap = 0;
var bFirstLine = this.Root.IsStartLine(_CurLine);
/*var wrap = 0;
var wrapIndent = MathSettings.Get_WrapIndent(WrapState);
if(bFirstLine == false && true == MathSettings.IsWrap(WrapState))
{
wrap = this.Root.Get_WrapToLine(_CurLine, _CurRange, wrapIndent);
}
}*/
var XStart, XEnd;
......@@ -783,8 +784,13 @@ ParaMath.prototype.Get_AlignToLine = function(_CurLine, _CurRange, _Page, _X, _X
var W = this.PageInfo.GetMaxW(Page);
if(bFirstLine == true) // первая строка первой страницы, если строка разбивается на несколько отрезко, то это уже будет inline-формула
{
var alignBrk = this.Root.GetAlignBrk(_CurLine, _CurRange);
var DispLng = this.DispositionOpers.length;
var bAlignAt = WrapState === ALIGN_MARGIN_WRAP && DispLng > 0 && bFirstLine === false && alignBrk > 0;
if(bFirstLine == true || bAlignAt == true) // первая строка первой страницы, если строка разбивается на несколько отрезков, то это уже будет inline-формула => ф-ия Get_AlignToLine не будет вызвана
{ // bAlignAt == true - учтем выравниевание первой строки + прибавим смещение для alnAt
var StartLineWidth = this.PageInfo.GetStarLinetWidth(); // если страница не первая, то ширину первой строки формулы не учитываем
switch(Jc)
......@@ -798,9 +804,23 @@ ParaMath.prototype.Get_AlignToLine = function(_CurLine, _CurRange, _Page, _X, _X
break;
}
}
if(bAlignAt == true)
{
var PosAln = alignBrk < DispLng ? alignBrk -1 : DispLng - 1;
X += this.DispositionOpers[PosAln];
}
}
else
{
var wrap = 0;
var wrapIndent = MathSettings.Get_WrapIndent(WrapState);
if(true == MathSettings.IsWrap(WrapState))
{
wrap = this.Root.Get_WrapToLine(_CurLine, _CurRange, wrapIndent);
}
if(Jc == align_Justify)
{
X = XEnd - XStart > W ? XStart + (XEnd - XStart - W)/2 + wrap : XStart;
......@@ -1186,6 +1206,12 @@ ParaMath.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
this.ParaMathRPI.ResetInfoRanges();
}
if(true == this.NeedDispOperators(PRS))
{
this.DispositionOpers.length = 0;
PRS.DispositionOpers = this.DispositionOpers;
}
if(bUpdateWrapMath == true && this.ParaMathRPI.bInternalRanges == false && PRS.bFastRecalculate == false)
{
this.ParaMathRPI.bInternalRanges = true;
......@@ -1218,8 +1244,7 @@ ParaMath.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
//здесь обновляем WrapState, исходя из этого параметра будем считать WrapIndent
this.PageInfo.UpdateCurrentWrap(DispDef, bInline);
if(this.ParaMathRPI.Wrap !== WRAP_MATH_EMPTY && this.ParaMathRPI.bStartRanges == true)
if(this.ParaMathRPI.Wrap !== WRAP_MATH_EMPTY && this.ParaMathRPI.bStartRanges == true) // картинка в параграфе перед формулой
{
this.private_RecalculateRangeWrap(PRS, ParaPr, Depth);
}
......@@ -1241,7 +1266,7 @@ ParaMath.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
this.private_RecalculateRoot(PRS, ParaPr, Depth);
if(PRS.bMathWordLarge && this.ParaMathRPI.bInline == true && PRS.Ranges.length > 0)
if(PRS.bMathWordLarge == true && this.ParaMathRPI.bInline == true && PRS.Ranges.length > 0)
{
this.Root.Math_Set_EmptyRange(PRS);
PRS.bMathWordLarge = false;
......@@ -1709,6 +1734,10 @@ ParaMath.prototype.Is_Inline = function()
//return this.ParaMathRPI.bInline;
return this.ParaMathRPI.bInline == true || (this.ParaMathRPI.bInternalRanges == true && this.ParaMathRPI.bStartRanges == false);
};
ParaMath.prototype.NeedDispOperators = function(PRS)
{
return false === this.Is_Inline() && true == this.Root.IsStartLine(PRS.Line);
};
ParaMath.prototype.Get_Align = function()
{
var Jc;
......
......@@ -2192,15 +2192,17 @@ function CParagraphRecalculateStateWrap(Para)
this.WrapIndent = 0; // WrapIndent нужен для сравнения с длиной слова (когда слово разбивается по Compare Oper): ширина первой строки формулы не должна быть меньше WrapIndent
this.bFirstCompareOper = true;
this.bFirstLine = false;
this.MathFirstItem = true;
this.MathFirstItem = true; // параметр необходим для принудительного переноса
this.bPriorityOper = true;
// у "крайних" в строке операторов/мат объектов сооответствующий Gap равен нулю
this.OperGapRight = 0;
this.OperGapLeft = 0;
this.bNoOneBreakOperator = true; // прежде чем обновлять позицию в контент Run, учтем были ли до этого операторы (проверки на Word == false не достаточно, т.к. формула мб инлайновая и тогда не нужно обновлять позицию)
this.bNoOneBreakOperator = true; // прежде чем обновлять позицию в контент Run, учтем были ли до этого break-операторы (проверки на Word == false не достаточно, т.к. формула мб инлайновая и тогда не нужно обновлять позицию)
this.DispositionOpers = [];
this.BreakBox = false;
this.bInsideOper = false; // учитываем есть ли разбивка внутри мат объекта, чтобы случайно не вставить в конец пред оператора (при Brk_Before == false)
this.bOnlyForcedBreak = false; // учитывается, если возможна разбивка только по операторам выше уровням => в этом случае можно сделать принуительный разрыв во внутреннем контенте
this.bOnlyForcedBreak = false; // учитывается, если возможна разбивка только по операторам выше уровням => в этом случае можно сделать принудительный разрыв во внутреннем контенте
this.bFastRecalculate = false;
this.bBoxOperator = false;
}
......@@ -2241,6 +2243,8 @@ CParagraphRecalculateStateWrap.prototype =
this.bNoOneBreakOperator = true;
this.bFastRecalculate = false;
this.bBoxOperator = false;
this.BreakBox = false;
this.DispositionOpers = []; // выставляем ссылку на новый массив ! length нельзя обнулять, т.к. при пересчете передаем ссылку на массив из ParaMath, чтобы после не пришлось копировать элементы массива
},
// Обнуляем некоторые параметры перед новым отрезком
......@@ -2275,6 +2279,7 @@ CParagraphRecalculateStateWrap.prototype =
this.bInsideOper = false;
this.bOnlyForcedBreak = false;
this.bNoOneBreakOperator = true;
this.BreakBox = false;
this.bFastRecalculate = false;
this.bBoxOperator = false;
},
......
......@@ -2068,6 +2068,7 @@ ParaRun.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
var bFirstCompareOper = PRS.bFirstCompareOper;
var bEndRunToContent = PRS.bEndRunToContent;
var bNoOneBreakOperator = PRS.bNoOneBreakOperator;
var BreakBox = PRS.BreakBox;
var Pos = RangeStartPos;
......@@ -2211,6 +2212,12 @@ ParaRun.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
NewRange = true;
RangeEndPos = Pos;
}
else if(BreakBox == true)
{
MoveToLBP = true;
NewRange = true;
PRS.Set_LineBreakPos(Pos);
}
}
if(true !== NewRange)
......@@ -2286,7 +2293,29 @@ ParaRun.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
bNoOneBreakOperator = false;
if(bOperInEndContent || bLowPriority)
if(Pos == 0 && true === this.MathPrp.IsBreak())
{
if(FirstItemOnLine === true)
{
WordLen += BrkLen;
}
else
{
if(bOperBefore)
{
X += SpaceLen + WordLen;
NewRange = true;
RangeEndPos = Pos;
}
else
{
Word = false;
BreakBox = true;
}
}
}
else if(bOperInEndContent || bLowPriority)
{
if(X + SpaceLen + WordLen + BrkLen > XEnd)
{
......@@ -2321,7 +2350,6 @@ ParaRun.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
{
bOverXEnd = X + WordLen + SpaceLen + BrkLen > XEnd; // BrkLen прибавляем дла случая, если идут подряд Brk Operators в конце
if(bOverXEnd && FirstItemOnLine === false) // Слово не убирается в отрезке. Переносим слово в следующий отрезок
{
MoveToLBP = true;
......@@ -2400,9 +2428,19 @@ ParaRun.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
FirstItemOnLine = false;
Word = false;
}
}
}
if(PRS.NewRange == false && true === this.ParaMath.NeedDispOperators(PRS))
{
var W = X - XRange + Item.GapLeft;
if(bOperBefore == false)
W -= BrkLen
PRS.DispositionOpers.push(W);
}
break;
......@@ -2738,6 +2776,7 @@ ParaRun.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
PRS.bFirstCompareOper = bFirstCompareOper;
PRS.bEndRunToContent = bEndRunToContent;
PRS.bNoOneBreakOperator = bNoOneBreakOperator;
PRS.BreakBox = BreakBox;
if(this.Type == para_Math_Run)
......@@ -9169,7 +9208,6 @@ ParaRun.prototype.Math_RecalculateContent = function(PRS)
if (descent < size.height - size.ascent)
descent = size.height - size.ascent;
if(this.bEqArray)
{
if(Type !== para_Math_Ampersand)
......@@ -9231,7 +9269,7 @@ ParaRun.prototype.IsNormalText = function()
ParaRun.prototype.getPropsForWrite = function()
{
var wRPrp = this.Pr.Copy(),
mathRPrp = this.MathPrp.getPropsForWrite();
mathRPrp = this.MathPrp.Copy();
return {wRPrp: wRPrp, mathRPrp: mathRPrp};
};
......@@ -9365,9 +9403,9 @@ ParaRun.prototype.OnlyOnePlaceholder = function()
ParaRun.prototype.Set_MathPr = function(MPrp)
{
var OldValue = this.MathPrp;
this.MathPrp = MPrp;
this.MathPrp.Set_Pr(MPrp);
History.Add( this, { Type : historyitem_ParaRun_MathPrp, New : MPrp, Old : OldValue } );
History.Add( this, { Type : historyitem_ParaRun_MathPrp, New : this.MathPrp, Old : OldValue } );
this.Recalc_CompiledPr(true);
};
......@@ -9388,6 +9426,14 @@ ParaRun.prototype.IsEqArray = function()
{
return this.Parent.IsEqArray();
};
ParaRun.prototype.IsBreak = function()
{
return this.MathPrp.IsBreak();
};
ParaRun.prototype.Get_AlignBrk = function()
{
return this.MathPrp.Get_AlignBrk();
};
ParaRun.prototype.Math_Is_InclineLetter = function()
{
var result = false;
......
......@@ -2031,10 +2031,6 @@ CMathBase.prototype.MeasureJustDraw = function(Item)
Item.Measure(g_oTextMeasurer);
};
CMathBase.prototype.Math_GetWidth = function(_CurLine, _CurRange)
{
return this.size.width;
};
CMathBase.prototype.UpdatePRS_OneLine = function(PRS, WordLen)
{
if(this.bInside == false)
......
......@@ -2,29 +2,33 @@
function CMathBreak()
{
this.AlnAt = undefined;
this.alnAt = undefined;
}
CMathBreak.prototype.Set_FromObject = function(Obj)
{
if(Obj.AlnAt !== undefined && Obj.AlnAt !== null && Obj.AlnAt - 0 == Obj.AlnAt)
if(Obj.alnAt !== undefined && Obj.alnAt !== null && Obj.alnAt - 0 == Obj.alnAt)
{
if(Obj.AlnAt >= 1 && Obj.AlnAt <= 255)
this.AlnAt = Obj.AlnAt;
if(Obj.alnAt >= 1 && Obj.alnAt <= 255)
this.alnAt = Obj.alnAt;
}
};
CMathBreak.prototype.Copy = function()
{
var NewMBreak = new CMathBreak();
NewMBreak.AlnAt = this.AlnAt;
NewMBreak.alnAt = this.alnAt;
return NewMBreak;
};
CMathBreak.prototype.Get_AlignBrk = function()
{
return this.alnAt !== undefined ? this.alnAt : 0;
};
CMathBreak.prototype.Write_ToBinary = function(Writer)
{
if(this.AlnAt !== undefined)
if(this.alnAt !== undefined)
{
Writer.WriteBool(false);
Writer.WriteLong(this.AlnAt);
Writer.WriteLong(this.alnAt);
}
else
{
......@@ -35,14 +39,15 @@ CMathBreak.prototype.Read_FromBinary = function(Reader)
{
if(Reader.GetBool() == false)
{
this.AlnAt = Reader.GetLong();
this.alnAt = Reader.GetLong();
}
else
{
this.AlnAt = undefined;
this.alnAt = undefined;
}
};
function CMathBorderBoxPr()
{
this.hideBot = false;
......@@ -419,6 +424,10 @@ CMathBoxPr.prototype.Set_FromObject = function(Obj)
else
this.opEmu = false;
};
CMathBoxPr.prototype.Get_AlignBrk = function()
{
return this.brk !== undefined ? this.brk.Get_AlignBrk() : 0;
};
CMathBoxPr.prototype.Copy = function()
{
var NewPr = new CMathBoxPr();
......@@ -531,9 +540,13 @@ CBox.prototype.IsOperatorEmulator = function()
{
return this.Pr.opEmu == true;
};
CBox.prototype.IsBreak = function()
CBox.prototype.IsBreak = function(bInline)
{
return bInline == false && this.Pr.opEmu == true && this.Pr.brk !== undefined;
};
CBox.prototype.Get_AlignBrk = function()
{
return this.Pr.opEmu == true && this.Pr.brk !== undefined;
return this.Pr.Get_AlignBrk();
};
......
This diff is collapsed.
......@@ -1216,14 +1216,16 @@ var q_Math_Apostrophe =
var q_Math_BreakOperators =
{
0x002A: 1, 0x002B: 1, 0x002D: 1, 0x002F: 1,0x003C: 2, 0x003D: 2,
0x003E: 2, 0x005C: 1, 0x2190: 2, 0x2191: 2, 0x2192: 2, 0x2193: 2,
0x003E: 2, 0x005C: 1, 0x00B1: 1, 0x2190: 2, 0x2191: 2, 0x2192: 2,
0x2193: 2,
0x2194: 2, 0x2195: 2, 0x2196: 2, 0x2197: 2,0x2198: 2, 0x2199: 2,
0x219A: 2, 0x219B: 2, 0x219C: 2, 0x219D: 2,0x219E: 2,0x219F: 2,
0x219A: 2, 0x219B: 2, 0x219C: 2, 0x219D: 2,0x219E: 2, 0x219F: 2,
0x21A0: 2, 0x21A1: 2, 0x21A2: 2, 0x21A3: 2, 0x21A4: 2, 0x21A5: 2,
0x21A6: 2, 0x21A7: 2, 0x21A8: 2, 0x21A9: 2, 0x21AA: 2, 0x21AB: 2,
0x21AC: 2, 0x21AD: 2, 0x21AE: 2, 0x21AF: 2, 0x21B0: 2, 0x21B1: 2,
0x21B2: 2, 0x21B3: 2, 0x21B4: 2, 0x21B5: 2, 0x21B6: 2, 0x21B7: 2,
0x21BA: 2, 0x21BB: 2, 0x21BC: 2, 0x21BD: 2,
0x21B2: 2, 0x21B3: 2,
// check
0x21B6: 2, 0x21B7: 2, 0x21BA: 2, 0x21BB: 2, 0x21BC: 2, 0x21BD: 2,
0x21BE: 2, 0x21BF: 2, 0x21C0: 2, 0x21C1: 2, 0x21C2: 2, 0x21C3: 2,
0x21C4: 2, 0x21C5: 2, 0x21C6: 2, 0x21C7: 2, 0x21C8: 2, 0x21C9: 2,
0x21CA: 2, 0x21CB: 2, 0x21CC: 2, 0x21CD: 2, 0x21CE: 2, 0x21CF: 2,
......@@ -1253,12 +1255,30 @@ var q_Math_BreakOperators =
0x2282: 2, 0x2283: 2, 0x2284: 2, 0x2285: 2, 0x2286: 2, 0x2287: 2,
0x2288: 2, 0x2289: 2, 0x228A: 2, 0x228B: 2, 0x228C: 1, 0x228D: 1,
0x228E: 1, 0x228F: 2, 0x2290: 2, 0x2291: 2, 0x2292: 2, 0x2293: 1,
0x2294: 1, 0x22D0: 2, 0x22D1: 2, 0x22D2: 1, 0x22D3: 1, 0x22D4: 2,
0x2294: 1, 0x2295: 1, 0x2296: 1, 0x2297: 1, 0x2298: 1, 0x2299: 1,
0x229A: 1, 0x229B: 1, 0x229C: 1, 0x229D: 1, 0x229E: 1, 0x229F: 1,
0x22A0: 1, 0x22A1: 1, 0x22A2: 2, 0x22A3: 2, 0x22A5: 2, 0x22A6: 2,
0x22A7: 2, 0x22A8: 2, 0x22A9: 2, 0x22AA: 2, 0x22AB: 2, 0x22AC: 2,
0x22AD: 2, 0x22AE: 2, 0x22AF: 2, 0x22B0: 2, 0x22B1: 2, 0x22B2: 2,
0x22B3: 2, 0x22B4: 2, 0x22B5: 2, 0x22B6: 2, 0x22B7: 2, 0x22B8: 2,
0x22B9: 2, 0x22BA: 1, 0x22BB: 1, 0x22BC: 1, 0x22BD: 1, 0x22C4: 1,
0x22C5: 1, 0x22C6: 1, 0x22C7: 1, 0x22C8: 2, 0x22C9: 1, 0x22CA: 1,
0x22CB: 1, 0x22CC: 1, 0x22CD: 2, 0x22CE: 1, 0x22CF: 1, 0x22D0: 2,
0x22D1: 2, 0x22D2: 1, 0x22D3: 1, 0x22D4: 2,
0x22D5: 2, 0x22D6: 2, 0x22D7: 2, 0x22D8: 2, 0x22D9: 2, 0x22DA: 2,
0x22DB: 2, 0x22DC: 2, 0x22DD: 2, 0x22DE: 2, 0x22DF: 2, 0x22E0: 2,
0x22E1: 2, 0x22E2: 2, 0x22E3: 2, 0x22E4: 2, 0x22E5: 2, 0x22E6: 2,
0x22E7: 2, 0x22E8: 2, 0x22E9: 2, 0x233F: 2, 0x233D: 1, 0x23B0: 2,
0x23B1: 2, 0x27DC: 2, 0x27DD: 2, 0x27DE: 2,
0x22E7: 2, 0x22E8: 2, 0x22E9: 2, 0x22EA: 2, 0x22EB: 2, 0x22EC: 2,
0x22ED: 2, 0x22EE: 2, 0x22EF: 2, 0x22F0: 2, 0x22F1: 2, 0x22F2: 2,
0x22F3: 2, 0x22F4: 2, 0x22F5: 2, 0x22F6: 2, 0x22F7: 2, 0x22F8: 2,
0x22F9: 2, 0x22FA: 2, 0x22FB: 2, 0x22FC: 2, 0x22FD: 2, 0x22FE: 2,
0x22FF: 2, 0x2305: 1, 0x2306: 1, 0x2322: 2, 0x2323: 2, 0x233D: 1,
0x233F: 2, 0x23B0: 2, 0x23B1: 2, 0x25B3: 1, 0x25CA: 1, 0x25CB: 1,
0x27D1: 1, 0x27D2: 2, 0x27D3: 2, 0x27D4: 2, 0x27DA: 2, 0x27DB: 2,
0x27DC: 2, 0x27DD: 2, 0x27DE: 2, 0x27DF: 2, 0x27E0: 1, 0x27E1: 1,
0x27E2: 1, 0x27E3: 1, 0x27E4: 1, 0x27E5: 1, 0x27F0: 2, 0x27F1: 2,
0x27F2: 2, 0x27F3: 2, 0x27F4: 2,
//end check
0x27F5: 2, 0x27F6: 2, 0x27F7: 2, 0x27F8: 2, 0x27F9: 2, 0x27FA: 2,
0x27FB: 2, 0x27FC: 2, 0x27FD: 2, 0x27FE: 2, 0x27FF: 2, 0x2900: 2,
0x2901: 2, 0x2902: 2, 0x2903: 2, 0x2904: 2, 0x2905: 2, 0x2906: 2,
......
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