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

1. Откатила назад изменения в ревизии 63481, вместо этого реализовала...

1. Откатила назад изменения в ревизии 63481, вместо этого реализовала Get_LastRunInRange для правки бага описанного в ревизии 63481
2. Поправила баг: не учитывалось, что для отрезка обтекания меньше стартового PRS.Ranges.length = 0, и соответственно в данной ситуации нужно делать перенос 

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@63491 954022d7-b5bf-4e40-9824-e11837661b57
parent 80952ed7
...@@ -1150,9 +1150,10 @@ ParaMath.prototype.Recalculate_Range = function(PRS, ParaPr, Depth) ...@@ -1150,9 +1150,10 @@ ParaMath.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
this.AbsolutePage = AbsolutePage; this.AbsolutePage = AbsolutePage;
if(this.ParaMathRPI.CheckPrevLine(ParaLine, ParaRange)) if(this.ParaMathRPI.CheckPrevLine(ParaLine, ParaRange)) // пропускаем все Range в текущей строке, пока не прийдет пересчет для стартового отрезка
{ {
this.UpdateInfoForBreak(PRS, ParaLine); this.UpdateInfoForBreak(PRS, ParaLine);
PRS.EmptyLine = false;
return; return;
} }
...@@ -1180,6 +1181,7 @@ ParaMath.prototype.Recalculate_Range = function(PRS, ParaPr, Depth) ...@@ -1180,6 +1181,7 @@ ParaMath.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
if(bUpdateWrapMath == true && this.ParaMathRPI.bInternalRanges == false && PRS.bFastRecalculate == false) if(bUpdateWrapMath == true && this.ParaMathRPI.bInternalRanges == false && PRS.bFastRecalculate == false)
{ {
this.ParaMathRPI.bInternalRanges = true; this.ParaMathRPI.bInternalRanges = true;
this.ParaMathRPI.UpdateWrapStartPos(ParaLine, ParaRange);
if(bFirstRange) // т.к. если просто выйдем, то прийдет пересчет для следующего Range 0-ой строки, а не для стартового Range 0-ой строки if(bFirstRange) // т.к. если просто выйдем, то прийдет пересчет для следующего Range 0-ой строки, а не для стартового Range 0-ой строки
{ {
...@@ -1318,9 +1320,10 @@ ParaMath.prototype.private_RecalculateRangeWrap = function(PRS, ParaPr, Depth) ...@@ -1318,9 +1320,10 @@ ParaMath.prototype.private_RecalculateRangeWrap = function(PRS, ParaPr, Depth)
this.PageInfo.ReverseCurrentMaxW(PRS.Line); this.PageInfo.ReverseCurrentMaxW(PRS.Line);
} }
var bNextLine = this.ParaMathRPI.Wrap == WRAP_MATH_ON_SIDE && PRS.Range !== this.ParaMathRPI.IndexRange; var bNextRangeSide = this.ParaMathRPI.Wrap == WRAP_MATH_ON_SIDE && PRS.Ranges.length > 0 && PRS.Range !== this.ParaMathRPI.IndexRange, // пересчитываем только в том отрезке, в котором находится формула
bNextRangeTopBot = this.ParaMathRPI.Wrap == WRAP_MATH_TOPBOTTOM && (this.ParaMathRPI.CheckWrapPos(PRS.Line, PRS.Range) == true || PRS.Ranges.length > 0);
if(PRS.Ranges.length > 0 && (bNextLine || this.ParaMathRPI.Wrap == WRAP_MATH_TOPBOTTOM)) if(bNextRangeSide || bNextRangeTopBot)
{ {
// перенос на следующий строку // перенос на следующий строку
this.Root.Math_Set_EmptyRange(PRS); this.Root.Math_Set_EmptyRange(PRS);
...@@ -1372,7 +1375,7 @@ ParaMath.prototype.private_RecalculateRangeWrap = function(PRS, ParaPr, Depth) ...@@ -1372,7 +1375,7 @@ ParaMath.prototype.private_RecalculateRangeWrap = function(PRS, ParaPr, Depth)
else if(this.ParaMathRPI.Wrap == WRAP_MATH_TOPBOTTOM) else if(this.ParaMathRPI.Wrap == WRAP_MATH_TOPBOTTOM)
{ {
var WrapState = this.PageInfo.GetCurrentWrapState(); var WrapState = this.PageInfo.GetCurrentWrapState();
var bWordLarge = PRS.bMathWordLarge == true && WrapState == ALIGN_EMPTY; var bWordLarge = PRS.bMathWordLarge == true && WrapState !== ALIGN_EMPTY;
this.PageInfo.SetStateWordLarge(PRS.Line, bWordLarge); this.PageInfo.SetStateWordLarge(PRS.Line, bWordLarge);
if(WrapState !== ALIGN_EMPTY) if(WrapState !== ALIGN_EMPTY)
...@@ -1507,8 +1510,11 @@ ParaMath.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine, _Cu ...@@ -1507,8 +1510,11 @@ ParaMath.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine, _Cu
// далее при вычилении отрезков (PRS.Ranges) для следующей строки учитываются PRS.Ascent и PRS.Descent предыдщей строки, а они будут равны 0 , соответственно получим те же самые отрезки обтекания, что и в предыдущей строке // далее при вычилении отрезков (PRS.Ranges) для следующей строки учитываются PRS.Ascent и PRS.Descent предыдщей строки, а они будут равны 0 , соответственно получим те же самые отрезки обтекания, что и в предыдущей строке
// произойдет зацикливание // произойдет зацикливание
var bEmptyRange = PRS.Ranges.length > 0 && this.Root.Is_EmptyRange(_CurLine, _CurRange);
this.Root.Recalculate_LineMetrics(PRS, ParaPr, _CurLine, _CurRange, ContentMetrics, bEmptyRange); //var bEmptyRange = PRS.Ranges.length > 0 && this.Root.Is_EmptyRange(_CurLine, _CurRange);
this.Root.Recalculate_LineMetrics(PRS, ParaPr, _CurLine, _CurRange, ContentMetrics);
//PRS.EmptyLine = PRS.Ranges.length > 0 && this.Root.Is_EmptyRange(_CurLine, _CurRange);
}; };
ParaMath.prototype.Recalculate_Range_Width = function(PRSC, _CurLine, _CurRange) ParaMath.prototype.Recalculate_Range_Width = function(PRSC, _CurLine, _CurRange)
{ {
...@@ -2175,7 +2181,7 @@ ParaMath.prototype.Get_RunElementByPos = function(ContentPos, Depth) ...@@ -2175,7 +2181,7 @@ ParaMath.prototype.Get_RunElementByPos = function(ContentPos, Depth)
ParaMath.prototype.Get_LastRunInRange = function(_CurLine, _CurRange) ParaMath.prototype.Get_LastRunInRange = function(_CurLine, _CurRange)
{ {
return null; return this.Root.Get_LastRunInRange(_CurLine, _CurRange);
}; };
ParaMath.prototype.Get_LeftPos = function(SearchPos, ContentPos, Depth, UseContentPos) ParaMath.prototype.Get_LeftPos = function(SearchPos, ContentPos, Depth, UseContentPos)
...@@ -3466,8 +3472,11 @@ function CMathRecalculateInfo() ...@@ -3466,8 +3472,11 @@ function CMathRecalculateInfo()
this.bInternalRanges = false; this.bInternalRanges = false;
this.bStartRanges = false; this.bStartRanges = false;
this.bRecalcResultPrevLine = false; this.bRecalcResultPrevLine = false;
this.StartLine = -1; this.StartLineRecalc = -1;
this.StartRange = -1; this.StartRangeRecalc = -1;
this.StartLineWrap = -1;
this.StartRangeWrap = -1;
this.InfoLine = new CMathInfoLines(); this.InfoLine = new CMathInfoLines();
} }
...@@ -3502,21 +3511,30 @@ CMathRecalculateInfo.prototype.NeedStartRecalc = function(StartLine, StartRange) ...@@ -3502,21 +3511,30 @@ CMathRecalculateInfo.prototype.NeedStartRecalc = function(StartLine, StartRange)
{ {
this.bRecalcResultPrevLine = true; this.bRecalcResultPrevLine = true;
this.StartLine = StartLine; this.StartLineRecalc = StartLine;
this.StartRange = StartRange; this.StartRangeRecalc = StartRange;
}; };
CMathRecalculateInfo.prototype.CheckPrevLine = function(CurLine, CurRange) CMathRecalculateInfo.prototype.CheckPrevLine = function(CurLine, CurRange)
{ {
if(this.bRecalcResultPrevLine == true && CurLine == this.StartLine && CurRange == this.StartRange) if(this.bRecalcResultPrevLine == true && CurLine == this.StartLineRecalc && CurRange == this.StartRangeRecalc)
{ {
this.bRecalcResultPrevLine = false; this.bRecalcResultPrevLine = false;
this.StartLine = -1; //this.StartLine = -1;
this.StartRange = -1; //this.StartRange = -1;
} }
return this.bRecalcResultPrevLine == true; return this.bRecalcResultPrevLine == true;
}; };
CMathRecalculateInfo.prototype.UpdateWrapStartPos = function(StartLine, StartRange)
{
this.StartLineWrap = StartLine;
this.StartRangeWrap = StartRange;
};
CMathRecalculateInfo.prototype.CheckWrapPos = function(CurLine, CurRange)
{
return CurLine < this.StartLineWrap || (this.StartLineWrap == CurLine && CurRange < this.StartRangeWrap);
};
function CMathInfoLines() function CMathInfoLines()
{ {
......
...@@ -2867,7 +2867,7 @@ ParaRun.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine, _Cur ...@@ -2867,7 +2867,7 @@ ParaRun.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine, _Cur
} }
} }
if ( true === UpdateLineMetricsText || true === bEmptyRange) if ( true === UpdateLineMetricsText)
{ {
// Пересчитаем метрику строки относительно размера данного текста // Пересчитаем метрику строки относительно размера данного текста
if ( PRS.LineTextAscent < this.TextAscent ) if ( PRS.LineTextAscent < this.TextAscent )
......
...@@ -2007,7 +2007,7 @@ CMathBase.prototype.Recalculate_Range_OneLine = function(PRS, ParaPr, Depth) ...@@ -2007,7 +2007,7 @@ 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, ContentMetrics, bEmptyRange) CMathBase.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine, _CurRange, ContentMetrics)
{ {
var CurLine = _CurLine - this.StartLine; var CurLine = _CurLine - this.StartLine;
var CurRange = (0 === CurLine ? _CurRange - this.StartRange : _CurRange); var CurRange = (0 === CurLine ? _CurRange - this.StartRange : _CurRange);
...@@ -2026,7 +2026,7 @@ CMathBase.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine, _C ...@@ -2026,7 +2026,7 @@ CMathBase.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine, _C
for (var CurPos = 0; CurPos <= this.Content.length - 1; CurPos++) for (var CurPos = 0; CurPos <= this.Content.length - 1; CurPos++)
{ {
var Item = this.Content[CurPos]; var Item = this.Content[CurPos];
Item.Recalculate_LineMetrics(PRS, ParaPr, _CurLine, _CurRange, NewContentMetrics, bEmptyRange); Item.Recalculate_LineMetrics(PRS, ParaPr, _CurLine, _CurRange, NewContentMetrics);
} }
//this.Bounds.UpdateMetrics(CurLine, CurRange, this.size); //this.Bounds.UpdateMetrics(CurLine, CurRange, this.size);
...@@ -2049,7 +2049,7 @@ CMathBase.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine, _C ...@@ -2049,7 +2049,7 @@ CMathBase.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine, _C
for (var CurPos = StartPos; CurPos <= EndPos; CurPos++) for (var CurPos = StartPos; CurPos <= EndPos; CurPos++)
{ {
var Item = this.Content[CurPos]; var Item = this.Content[CurPos];
Item.Recalculate_LineMetrics(PRS, ParaPr, _CurLine, _CurRange, ContentMetrics, bEmptyRange); Item.Recalculate_LineMetrics(PRS, ParaPr, _CurLine, _CurRange, ContentMetrics);
var BoundItem = Item.Get_LineBound(_CurLine, _CurRange); var BoundItem = Item.Get_LineBound(_CurLine, _CurRange);
......
...@@ -419,7 +419,7 @@ CDegree.prototype.Document_UpdateInterfaceState = function(MathProps) ...@@ -419,7 +419,7 @@ CDegree.prototype.Document_UpdateInterfaceState = function(MathProps)
MathProps.Type = c_oAscMathInterfaceType.Script; MathProps.Type = c_oAscMathInterfaceType.Script;
MathProps.Pr = null; MathProps.Pr = null;
}; };
CDegree.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine, _CurRange, ContentMetrics, bEmptyRange) CDegree.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine, _CurRange, ContentMetrics)
{ {
var CurLine = PRS.Line - this.StartLine; var CurLine = PRS.Line - this.StartLine;
var CurRange = ( 0 === CurLine ? PRS.Range - this.StartRange : PRS.Range ); var CurRange = ( 0 === CurLine ? PRS.Range - this.StartRange : PRS.Range );
...@@ -434,8 +434,8 @@ CDegree.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine, _Cur ...@@ -434,8 +434,8 @@ CDegree.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine, _Cur
// чтобы при вычислении метрик итератора не были перебили метрики (например, у внутр мат объекта Asc может быть больше Asc текущего объекта) // чтобы при вычислении метрик итератора не были перебили метрики (например, у внутр мат объекта Asc может быть больше Asc текущего объекта)
var NewContentMetrics = new CMathBoundsMeasures(); var NewContentMetrics = new CMathBoundsMeasures();
this.iterContent.Recalculate_LineMetrics(PRS, ParaPr, _CurLine, _CurRange, NewContentMetrics, bEmptyRange); this.iterContent.Recalculate_LineMetrics(PRS, ParaPr, _CurLine, _CurRange, NewContentMetrics);
this.baseContent.Recalculate_LineMetrics(PRS, ParaPr, _CurLine, _CurRange, NewContentMetrics, bEmptyRange); this.baseContent.Recalculate_LineMetrics(PRS, ParaPr, _CurLine, _CurRange, NewContentMetrics);
var BoundBase = this.baseContent.Get_LineBound(_CurLine, _CurRange); var BoundBase = this.baseContent.Get_LineBound(_CurLine, _CurRange);
var Bound; var Bound;
...@@ -456,7 +456,7 @@ CDegree.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine, _Cur ...@@ -456,7 +456,7 @@ CDegree.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine, _Cur
} }
else else
{ {
CDegreeBase.prototype.Recalculate_LineMetrics.call(this, PRS, ParaPr, _CurLine, _CurRange, ContentMetrics, bEmptyRange); CDegreeBase.prototype.Recalculate_LineMetrics.call(this, PRS, ParaPr, _CurLine, _CurRange, ContentMetrics);
} }
}; };
...@@ -824,7 +824,7 @@ CDegreeSubSup.prototype.fillContent = function() ...@@ -824,7 +824,7 @@ CDegreeSubSup.prototype.fillContent = function()
CDegreeSubSup.superclass.fillContent.call(this); CDegreeSubSup.superclass.fillContent.call(this);
}; };
CDegreeSubSup.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine, _CurRange, ContentMetrics, bEmptyRange) CDegreeSubSup.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine, _CurRange, ContentMetrics)
{ {
var CurLine = PRS.Line - this.StartLine; var CurLine = PRS.Line - this.StartLine;
var CurRange = ( 0 === CurLine ? PRS.Range - this.StartRange : PRS.Range ); var CurRange = ( 0 === CurLine ? PRS.Range - this.StartRange : PRS.Range );
...@@ -840,10 +840,10 @@ CDegreeSubSup.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine ...@@ -840,10 +840,10 @@ CDegreeSubSup.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine
var NewContentMetrics = new CMathBoundsMeasures(); var NewContentMetrics = new CMathBoundsMeasures();
this.Content[1].Recalculate_LineMetrics(PRS, ParaPr, _CurLine, _CurRange, NewContentMetrics, bEmptyRange); this.Content[1].Recalculate_LineMetrics(PRS, ParaPr, _CurLine, _CurRange, NewContentMetrics);
this.Content[2].Recalculate_LineMetrics(PRS, ParaPr, _CurLine, _CurRange, NewContentMetrics, bEmptyRange); this.Content[2].Recalculate_LineMetrics(PRS, ParaPr, _CurLine, _CurRange, NewContentMetrics);
// основание, baseContent // основание, baseContent
this.Content[0].Recalculate_LineMetrics(PRS, ParaPr, _CurLine, _CurRange, NewContentMetrics, bEmptyRange); this.Content[0].Recalculate_LineMetrics(PRS, ParaPr, _CurLine, _CurRange, NewContentMetrics);
var BoundBase = this.baseContent.Get_LineBound(_CurLine, _CurRange); var BoundBase = this.baseContent.Get_LineBound(_CurLine, _CurRange);
...@@ -858,7 +858,7 @@ CDegreeSubSup.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine ...@@ -858,7 +858,7 @@ CDegreeSubSup.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine
} }
else else
{ {
CDegreeBase.prototype.Recalculate_LineMetrics.call(this, PRS, ParaPr, _CurLine, _CurRange, ContentMetrics, bEmptyRange); CDegreeBase.prototype.Recalculate_LineMetrics.call(this, PRS, ParaPr, _CurLine, _CurRange, ContentMetrics);
} }
}; };
......
...@@ -4147,7 +4147,7 @@ CMathContent.prototype.Recalculate_MinMaxContentWidth = function(MinMax) ...@@ -4147,7 +4147,7 @@ CMathContent.prototype.Recalculate_MinMaxContentWidth = function(MinMax)
} }
}; };
CMathContent.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine, _CurRange, ContentMetrics, bEmptyRange) CMathContent.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine, _CurRange, ContentMetrics)
{ {
var CurLine = _CurLine - this.StartLine; var CurLine = _CurLine - this.StartLine;
var CurRange = (0 === CurLine ? _CurRange - this.StartRange : _CurRange); var CurRange = (0 === CurLine ? _CurRange - this.StartRange : _CurRange);
...@@ -4165,7 +4165,7 @@ CMathContent.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine, ...@@ -4165,7 +4165,7 @@ CMathContent.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine,
for(var Pos = StartPos; Pos <= EndPos; Pos++) for(var Pos = StartPos; Pos <= EndPos; Pos++)
{ {
var Item = this.Content[Pos]; var Item = this.Content[Pos];
Item.Recalculate_LineMetrics(PRS, ParaPr, _CurLine, _CurRange, NewContentMetrics, bEmptyRange); Item.Recalculate_LineMetrics(PRS, ParaPr, _CurLine, _CurRange, NewContentMetrics);
} }
this.Bounds.UpdateMetrics(CurLine, CurRange, NewContentMetrics); this.Bounds.UpdateMetrics(CurLine, CurRange, NewContentMetrics);
......
...@@ -592,11 +592,11 @@ CNary.prototype.Draw_Elements = function(PDSE) ...@@ -592,11 +592,11 @@ CNary.prototype.Draw_Elements = function(PDSE)
this.Arg.Draw_Elements(PDSE); this.Arg.Draw_Elements(PDSE);
}; };
CNary.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine, _CurRange, ContentMetrics, bEmptyRange) CNary.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine, _CurRange, ContentMetrics)
{ {
if(this.bOneLine) if(this.bOneLine)
{ {
CNary.superclass.Recalculate_LineMetrics.call(this, PRS, ParaPr, _CurLine, _CurRange, ContentMetrics, bEmptyRange); CNary.superclass.Recalculate_LineMetrics.call(this, PRS, ParaPr, _CurLine, _CurRange, ContentMetrics);
} }
else else
{ {
...@@ -606,7 +606,7 @@ CNary.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine, _CurRa ...@@ -606,7 +606,7 @@ CNary.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine, _CurRa
// т.к. ParaNumbering привязывается к первому текстовому элементы, он может находится в аргументе // т.к. ParaNumbering привязывается к первому текстовому элементы, он может находится в аргументе
// обновляем LineMetrics для Base после того, как обновим метрики для аргумента // обновляем LineMetrics для Base после того, как обновим метрики для аргумента
this.Arg.Recalculate_LineMetrics(PRS, ParaPr, _CurLine, _CurRange, ContentMetrics, bEmptyRange); this.Arg.Recalculate_LineMetrics(PRS, ParaPr, _CurLine, _CurRange, ContentMetrics);
var BoundArg = this.Arg.Get_LineBound(_CurLine, _CurRange); var BoundArg = this.Arg.Get_LineBound(_CurLine, _CurRange);
...@@ -631,10 +631,10 @@ CNary.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine, _CurRa ...@@ -631,10 +631,10 @@ CNary.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine, _CurRa
var NewContentMetrics = new CMathBoundsMeasures(); var NewContentMetrics = new CMathBoundsMeasures();
this.LowerIterator.Recalculate_LineMetrics(PRS, ParaPr, _CurLine, _CurRange, NewContentMetrics, bEmptyRange); this.LowerIterator.Recalculate_LineMetrics(PRS, ParaPr, _CurLine, _CurRange, NewContentMetrics);
this.UpperIterator.Recalculate_LineMetrics(PRS, ParaPr, _CurLine, _CurRange, NewContentMetrics, bEmptyRange); this.UpperIterator.Recalculate_LineMetrics(PRS, ParaPr, _CurLine, _CurRange, NewContentMetrics);
this.Base.Recalculate_LineMetrics(PRS, ParaPr, _CurLine, _CurRange, ContentMetrics, bEmptyRange); this.Base.Recalculate_LineMetrics(PRS, ParaPr, _CurLine, _CurRange, ContentMetrics);
this.Bounds.UpdateMetrics(CurLine, CurRange, this.Base.size); this.Bounds.UpdateMetrics(CurLine, CurRange, this.Base.size);
this.UpdatePRS(PRS, this.Base.size); this.UpdatePRS(PRS, this.Base.size);
......
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