Commit 60872e69 authored by Ilya.Kirillov's avatar Ilya.Kirillov Committed by Alexander.Trofimov

Доработана нумерация в новом варианте параграфа. Исправлены баги с пересчетом прилегания параграфа.

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@53998 954022d7-b5bf-4e40-9824-e11837661b57
parent 1de29d0e
...@@ -386,7 +386,7 @@ CHistory.prototype = ...@@ -386,7 +386,7 @@ CHistory.prototype =
var Item = Point.Items[Index]; var Item = Point.Items[Index];
if ( Class !== Item.Class ) if ( Class !== Item.Class )
return null; return [];
} }
if ( Class instanceof ParaRun && Class.Is_SimpleChanges(Point.Items) ) if ( Class instanceof ParaRun && Class.Is_SimpleChanges(Point.Items) )
......
...@@ -3706,27 +3706,18 @@ Paragraph.prototype = ...@@ -3706,27 +3706,18 @@ Paragraph.prototype =
this.Lines[CurLine].Set_RangeStartPos( CurRange, StartPos ); this.Lines[CurLine].Set_RangeStartPos( CurRange, StartPos );
if ( 0 !== CurRange && 0 === CurLine && true === PRS.EmptyLine )
if ( 0 === CurLine && true === PRS.EmptyLine )
{ {
if ( ParaPr.Ind.FirstLine < 0 ) if ( ParaPr.Ind.FirstLine < 0 )
{
Range.X += ParaPr.Ind.Left + ParaPr.Ind.FirstLine; Range.X += ParaPr.Ind.Left + ParaPr.Ind.FirstLine;
}
else else
{
Range.X += ParaPr.Ind.FirstLine; Range.X += ParaPr.Ind.FirstLine;
}
Range.FirstRange = true;
}
// TODO: Проверить корректность данного условия
if ( true === Range.FirstRange && 0 !== CurRange )
{
if ( ParaPr.Ind.FirstLine < 0 )
Range.X1 += ParaPr.Ind.Left + ParaPr.Ind.FirstLine;
else
Range.X1 += ParaPr.Ind.FirstLine;
} }
var X = Range.X; var X = Range.X;
var XEnd = ( CurRange == RangesCount ? PRS.XLimit : PRS.Ranges[CurRange].X0 ); var XEnd = ( CurRange == RangesCount ? PRS.XLimit : PRS.Ranges[CurRange].X0 );
...@@ -3742,13 +3733,7 @@ Paragraph.prototype = ...@@ -3742,13 +3733,7 @@ Paragraph.prototype =
if ( ( 0 === Pos && 0 === CurLine ) || Pos !== StartPos ) if ( ( 0 === Pos && 0 === CurLine ) || Pos !== StartPos )
{ {
Item.Recalculate_Reset( CurLine ); Item.Recalculate_Reset( CurLine, ( 0 === Pos && 0 === CurLine ? null : this.Content[Pos - 1].Get_RecalcInfo() ) );
// TODO: пересмотреть работу с нумерацией
if ( 0 === Pos && 0 === CurLine )
Item.NeedAddNumbering = true;
else if ( Pos > 1 )
Item.NeedAddNumbering = this.Content[Pos - 1].NeedAddNumbering;
} }
PRS.Update_CurPos( Pos, 0 ); PRS.Update_CurPos( Pos, 0 );
...@@ -3833,25 +3818,6 @@ Paragraph.prototype = ...@@ -3833,25 +3818,6 @@ Paragraph.prototype =
// 1. Обновляем метрики данной строки // 1. Обновляем метрики данной строки
//------------------------------------------------------------------------------------------------------------- //-------------------------------------------------------------------------------------------------------------
// TODO: Данная часть была перенесена, необходимо проверить ее корректность
if ( linerule_Exact === ParaPr.Spacing.LineRule )
{
// Смещение не учитывается в метриках строки, когда расстояние между строк точное
if ( PRS.LineAscent < this.TextAscent )
PRS.LineAscent = this.TextAscent;
if ( PRS.LineDescent < this.TextDescent )
PRS.LineDescent = this.TextDescent;
}
else
{
if ( PRS.LineAscent < this.TextAscent + this.YOffset )
PRS.LineAscent = this.TextAscent + this.YOffset;
if ( PRS.LineDescent < this.TextDescent - this.YOffset )
PRS.LineDescent = this.TextDescent - this.YOffset;
}
// Строка пустая, у нее надо выставить ненулевую высоту. Делаем как Word, выставляем высоту по размеру // Строка пустая, у нее надо выставить ненулевую высоту. Делаем как Word, выставляем высоту по размеру
// текста, на котором закончилась данная строка. // текста, на котором закончилась данная строка.
if ( true === PRS.EmptyLine || PRS.LineAscent < 0.001 ) if ( true === PRS.EmptyLine || PRS.LineAscent < 0.001 )
...@@ -4756,7 +4722,7 @@ Paragraph.prototype = ...@@ -4756,7 +4722,7 @@ Paragraph.prototype =
if ( true === bCheckLeft && TabPos > PageStart.X + ParaPr.Ind.Left ) if ( true === bCheckLeft && TabPos > PageStart.X + ParaPr.Ind.Left )
{ {
TabsPos.push( PageStart.X + ParaPr.Ind.Left ); TabsPos.push( new CParaTab(tab_Left, ParaPr.Ind.Left) );
bCheckLeft = false; bCheckLeft = false;
} }
...@@ -4765,7 +4731,7 @@ Paragraph.prototype = ...@@ -4765,7 +4731,7 @@ Paragraph.prototype =
} }
if ( true === bCheckLeft ) if ( true === bCheckLeft )
TabsPos.push( PageStart.X + ParaPr.Ind.Left ); TabsPos.push( new CParaTab(tab_Left, ParaPr.Ind.Left) );
TabsCount = TabsPos.length; TabsCount = TabsPos.length;
...@@ -4781,7 +4747,7 @@ Paragraph.prototype = ...@@ -4781,7 +4747,7 @@ Paragraph.prototype =
} }
} }
var NewX = null; var NewX = 0;
// Если табов нет, либо их позиции левее текущей позиции ставим таб по умолчанию // Если табов нет, либо их позиции левее текущей позиции ставим таб по умолчанию
if ( null === Tab ) if ( null === Tab )
...@@ -4797,16 +4763,7 @@ Paragraph.prototype = ...@@ -4797,16 +4763,7 @@ Paragraph.prototype =
} }
else else
{ {
// Если таб левый, тогда мы сразу смещаемся к нему NewX = Tab.Pos + PageStart.X;
if ( tab_Left === Tab.Value )
{
NewX = Tab.Pos + PageStart.X;
}
else
{
// Ставим отрицательно значение, чтобы дать понять, что данный таб не левый
NewX = -(Tab.Pos + PageStart.X)
}
} }
return { NewX : NewX, TabValue : ( null === Tab ? tab_Left : Tab.Value ) }; return { NewX : NewX, TabValue : ( null === Tab ? tab_Left : Tab.Value ) };
...@@ -7783,6 +7740,7 @@ Paragraph.prototype = ...@@ -7783,6 +7740,7 @@ Paragraph.prototype =
case para_PageNum: case para_PageNum:
case para_Tab: case para_Tab:
case para_Drawing: case para_Drawing:
case para_NewLine:
{ {
// Элементы данного типа добавляем во внутренний элемент // Элементы данного типа добавляем во внутренний элемент
this.Content[this.CurPos.ContentPos].Add( Item ); this.Content[this.CurPos.ContentPos].Add( Item );
...@@ -8458,11 +8416,6 @@ Paragraph.prototype = ...@@ -8458,11 +8416,6 @@ Paragraph.prototype =
else else
SearchPos.InText = false; SearchPos.InText = false;
if ( SearchPos.NumberingDiffX <= SearchPos.DiffX )
SearchPos.Numbering = true;
else
SearchPos.Numbering = false;
SearchPos.Line = CurLine; SearchPos.Line = CurLine;
return SearchPos; return SearchPos;
...@@ -10235,7 +10188,7 @@ Paragraph.prototype = ...@@ -10235,7 +10188,7 @@ Paragraph.prototype =
} }
else else
{ {
// TODO: Надо перейти в предыдущий элемент документа // Надо перейти в предыдущий элемент документа
return false; return false;
} }
...@@ -10261,7 +10214,7 @@ Paragraph.prototype = ...@@ -10261,7 +10214,7 @@ Paragraph.prototype =
else else
{ {
this.Selection.Use = false; this.Selection.Use = false;
// TODO: Надо перейти в предыдущий элемент документа // Надо перейти в предыдущий элемент документа
return false; return false;
} }
} }
...@@ -10539,7 +10492,7 @@ Paragraph.prototype = ...@@ -10539,7 +10492,7 @@ Paragraph.prototype =
} }
else else
{ {
// TODO: Надо перейти в предыдущий элемент документа // Надо перейти в предыдущий элемент документа
return false; return false;
} }
} }
...@@ -10564,7 +10517,7 @@ Paragraph.prototype = ...@@ -10564,7 +10517,7 @@ Paragraph.prototype =
else else
{ {
this.Selection.Use = false; this.Selection.Use = false;
// TODO: Надо перейти в предыдущий элемент документа // Надо перейти в предыдущий элемент документа
return false; return false;
} }
} }
...@@ -10615,7 +10568,7 @@ Paragraph.prototype = ...@@ -10615,7 +10568,7 @@ Paragraph.prototype =
} }
else else
{ {
// TODO: Надо перейти в следующий элемент документа // Надо перейти в следующий элемент документа
return false; return false;
} }
...@@ -11869,12 +11822,11 @@ Paragraph.prototype = ...@@ -11869,12 +11822,11 @@ Paragraph.prototype =
var NumPr = this.Numbering_Get(); var NumPr = this.Numbering_Get();
if ( true === SearchPosXY.Numbering && undefined != NumPr ) if ( true === SearchPosXY.Numbering && undefined != NumPr )
{ {
// TODO: Разобраться с нумерацией // Передвигаем курсор в начало параграфа
this.Set_ParaContentPos(this.Get_StartPos(), -1, true);
// Ставим именно 0, а не this.Internal_GetStartPos(), чтобы при нажатии на клавишу "направо" // Производим выделение нумерации
// мы оказывались в начале параграфа. this.Parent.Document_SelectNumbering( NumPr );
//this.Set_ContentPos( 0, true, -1 );
//this.Parent.Document_SelectNumbering( NumPr );
} }
else else
{ {
...@@ -12253,42 +12205,47 @@ Paragraph.prototype = ...@@ -12253,42 +12205,47 @@ Paragraph.prototype =
} }
case selectionflag_Numbering: case selectionflag_Numbering:
{ {
// TODO: Реализовать нумерацию var ParaNum = this.Numbering;
var NumberingRun = ParaNum.Run;
// var ParaNum = this.Numbering; if ( null === NumberingRun )
// var NumberingPos = this.Numbering.Pos; break;
// if ( -1 === NumberingPos )
// break; var CurLine = ParaNum.Line;
// var CurRange = ParaNum.Range;
// var ParaNumPos = this.Internal_Get_ParaPos_By_Pos(NumberingPos);
// if ( ParaNumPos.Page != CurPage ) var SelectY = this.Lines[CurLine].Top + this.Pages[CurPage].Y;
// break; var SelectX = this.Lines[CurLine].Ranges[CurRange].XVisible;
// var SelectW = ParaNum.WidthVisible;
// var CurRange = ParaNumPos.Range; var SelectH = this.Lines[CurLine].Bottom - this.Lines[CurLine].Top;
// var CurLine = ParaNumPos.Line;
// var NumPr = this.Numbering_Get();
// var NumPr = this.Numbering_Get(); var NumJc = this.Parent.Get_Numbering().Get_AbstractNum( NumPr.NumId ).Lvl[NumPr.Lvl].Jc;
// var SelectX = this.Lines[CurLine].Ranges[CurRange].XVisible;
// var SelectW = ParaNum.WidthVisible; switch ( NumJc )
// var NumJc = this.Parent.Get_Numbering().Get_AbstractNum( NumPr.NumId ).Lvl[NumPr.Lvl].Jc; {
// switch ( NumJc ) case align_Center:
// { {
// case align_Center: SelectX = this.Lines[CurLine].Ranges[CurRange].XVisible - ParaNum.WidthNum / 2;
// SelectX = this.Lines[CurLine].Ranges[CurRange].XVisible - ParaNum.WidthNum / 2; SelectW = ParaNum.WidthVisible + ParaNum.WidthNum / 2;
// SelectW = ParaNum.WidthVisible + ParaNum.WidthNum / 2; break;
// break; }
// case align_Right: case align_Right:
// SelectX = this.Lines[CurLine].Ranges[CurRange].XVisible - ParaNum.WidthNum; {
// SelectW = ParaNum.WidthVisible + ParaNum.WidthNum; SelectX = this.Lines[CurLine].Ranges[CurRange].XVisible - ParaNum.WidthNum;
// break; SelectW = ParaNum.WidthVisible + ParaNum.WidthNum;
// case align_Left: break;
// default: }
// SelectX = this.Lines[CurLine].Ranges[CurRange].XVisible; case align_Left:
// SelectW = ParaNum.WidthVisible; default:
// break; {
// } SelectX = this.Lines[CurLine].Ranges[CurRange].XVisible;
// SelectW = ParaNum.WidthVisible;
// this.DrawingDocument.AddPageSelection(Page_abs, SelectX, this.Lines[CurLine].Top + this.Pages[CurPage].Y, SelectW, this.Lines[CurLine].Bottom - this.Lines[CurLine].Top); break;
}
}
this.DrawingDocument.AddPageSelection( Page_abs, SelectX, SelectY, SelectW, SelectH );
break; break;
} }
...@@ -18124,10 +18081,10 @@ CParaLineMetrics.prototype = ...@@ -18124,10 +18081,10 @@ CParaLineMetrics.prototype =
this.Descent = Descent; this.Descent = Descent;
if ( this.Ascent < this.TextAscent ) if ( this.Ascent < this.TextAscent )
this.TextAscent = this.Ascent; this.Ascent = this.TextAscent;
if ( this.Descent < this.TextDescent ) if ( this.Descent < this.TextDescent )
this.TextDescent = this.Descent; this.Descent = this.TextDescent;
this.LineGap = this.Recalculate_LineGap( ParaPr, this.TextAscent, this.TextDescent ); this.LineGap = this.Recalculate_LineGap( ParaPr, this.TextAscent, this.TextDescent );
}, },
......
...@@ -2662,8 +2662,12 @@ ParaEmpty.prototype = ...@@ -2662,8 +2662,12 @@ ParaEmpty.prototype =
function ParaNumbering() function ParaNumbering()
{ {
this.Type = para_Numbering; this.Type = para_Numbering;
this.Item = undefined;
this.Pos = new CParagraphContentPos(); this.Item = null; // Элемент в ране, к которому привязана нумерация
this.Run = null; // Ран, к которому привязана нумерация
this.Line = 0;
this.Range = 0;
this.Internal = this.Internal =
{ {
......
...@@ -16,7 +16,6 @@ function ParaRun(Document,Parent) ...@@ -16,7 +16,6 @@ function ParaRun(Document,Parent)
this.State = new CParaRunState(); // Положение курсора и селекта в данного run this.State = new CParaRunState(); // Положение курсора и селекта в данного run
this.CompiledPr = new CTextPr(); // Скомпилированные настройки this.CompiledPr = new CTextPr(); // Скомпилированные настройки
this.RecalcInfo = new CParaRunRecalcInfo(); // Флаги для пересчета (там же флаг пересчета стиля) this.RecalcInfo = new CParaRunRecalcInfo(); // Флаги для пересчета (там же флаг пересчета стиля)
this.TextRun = false;
this.TextAscent = 0; // текстовый ascent + linegap this.TextAscent = 0; // текстовый ascent + linegap
this.TextDescent = 0; // текстовый descent this.TextDescent = 0; // текстовый descent
...@@ -319,6 +318,7 @@ ParaRun.prototype = ...@@ -319,6 +318,7 @@ ParaRun.prototype =
Recalculate_CurPos : function(X, Y, CurrentRun, _CurRange, _CurLine, CurPage, UpdateCurPos, UpdateTarget, ReturnTarget) Recalculate_CurPos : function(X, Y, CurrentRun, _CurRange, _CurLine, CurPage, UpdateCurPos, UpdateTarget, ReturnTarget)
{ {
var Para = this.Paragraph; var Para = this.Paragraph;
var NumberingItem = Para.Numbering.Item;
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 );
...@@ -332,9 +332,8 @@ ParaRun.prototype = ...@@ -332,9 +332,8 @@ ParaRun.prototype =
{ {
var Item = this.Content[Pos]; var Item = this.Content[Pos];
// TODO: Подумать насчет нумерации if ( true === this.RecalcInfo.NumberingUse && Item === NumberingItem )
//if ( ItemNum === this.Numbering.Pos ) X += Para.Numbering.WidthVisible;
// X += this.Numbering.WidthVisible;
switch( Item.Type ) switch( Item.Type )
{ {
...@@ -360,21 +359,17 @@ ParaRun.prototype = ...@@ -360,21 +359,17 @@ ParaRun.prototype =
} }
} }
// Если следующий элемент именно тот, к которому привязана нумерация, тогда добавляем сдвиг нумерации
if ( true === this.RecalcInfo.NumberingUse && _EndPos < this.Content.length && this.Content[_EndPos] === NumberingItem )
X += Para.Numbering.WidthVisible;
if ( true === CurrentRun && Pos === this.State.ContentPos ) if ( true === CurrentRun && Pos === this.State.ContentPos )
{ {
// Если так случилось, что у нас заданная позиция идет до позиции с нумерацией, к которой привязана нумерация,
// тогда добавляем ширину нумерации.
var _X = X;
// TODO: Подумать насчет нумерации
//if ( ItemNum < this.Numbering.Pos )
// _X += this.Numbering.WidthVisible;
if ( true === UpdateCurPos ) if ( true === UpdateCurPos )
{ {
// Обновляем позицию курсора в параграфе // Обновляем позицию курсора в параграфе
Para.CurPos.X = _X; Para.CurPos.X = X;
Para.CurPos.Y = Y; Para.CurPos.Y = Y;
Para.CurPos.PagesPos = CurPage; Para.CurPos.PagesPos = CurPage;
...@@ -472,10 +467,10 @@ ParaRun.prototype = ...@@ -472,10 +467,10 @@ ParaRun.prototype =
} }
} }
return { X : _X, Y : TargetY, Height : Height, Internal : { Line : CurLine, Page : CurPage, Range : CurRange } }; return { X : X, Y : TargetY, Height : Height, Internal : { Line : CurLine, Page : CurPage, Range : CurRange } };
} }
else else
return { X : _X, Y : Y, PageNum : CurPage + Para.Get_StartPage_Absolute(), Internal : { Line : CurLine, Page : CurPage, Range : CurRange } }; return { X : X, Y : Y, PageNum : CurPage + Para.Get_StartPage_Absolute(), Internal : { Line : CurLine, Page : CurPage, Range : CurRange } };
} }
return { X : X }; return { X : X };
...@@ -522,10 +517,20 @@ ParaRun.prototype = ...@@ -522,10 +517,20 @@ ParaRun.prototype =
//----------------------------------------------------------------------------------- //-----------------------------------------------------------------------------------
// Выставляем начальную строку и обнуляем массив строк // Выставляем начальную строку и обнуляем массив строк
Recalculate_Reset : function(StartLine) Recalculate_Reset : function(StartLine, RecalcInfo)
{ {
this.StartLine = StartLine; this.StartLine = StartLine;
this.LinesLength = 0; this.LinesLength = 0;
if ( null === RecalcInfo )
this.RecalcInfo.NumberingAdd = true;
else
{
this.RecalcInfo.NumberingAdd = RecalcInfo.NumberingAdd;
}
this.RecalcInfo.NumberingUse = false;
this.RecalcInfo.NumberingItem = null;
}, },
// Пересчитываем размеры всех элементов // Пересчитываем размеры всех элементов
...@@ -538,9 +543,6 @@ ParaRun.prototype = ...@@ -538,9 +543,6 @@ ParaRun.prototype =
g_oTextMeasurer.SetTextPr( Pr ); g_oTextMeasurer.SetTextPr( Pr );
g_oTextMeasurer.SetFontSlot( fontslot_ASCII ); g_oTextMeasurer.SetFontSlot( fontslot_ASCII );
var bText = false;
var bNoText = false;
// Запрашиваем текущие метрики шрифта, под TextAscent мы будем понимать ascent + linegap(которые записаны в шрифте) // Запрашиваем текущие метрики шрифта, под TextAscent мы будем понимать ascent + linegap(которые записаны в шрифте)
this.TextHeight = g_oTextMeasurer.GetHeight(); this.TextHeight = g_oTextMeasurer.GetHeight();
this.TextDescent = Math.abs( g_oTextMeasurer.GetDescender() ); this.TextDescent = Math.abs( g_oTextMeasurer.GetDescender() );
...@@ -554,11 +556,6 @@ ParaRun.prototype = ...@@ -554,11 +556,6 @@ ParaRun.prototype =
{ {
var Item = this.Content[Pos]; var Item = this.Content[Pos];
if ( ( para_Text === Item.Type && true !== Item.SpaceAfter ) || para_Sym === Item.Type )
bText = true;
else
bNoText = true;
if ( para_Drawing === Item.Type ) if ( para_Drawing === Item.Type )
{ {
Item.Parent = this; Item.Parent = this;
...@@ -569,13 +566,6 @@ ParaRun.prototype = ...@@ -569,13 +566,6 @@ ParaRun.prototype =
Item.Measure( g_oTextMeasurer, Pr ); Item.Measure( g_oTextMeasurer, Pr );
} }
if ( true === bText && true !== bNoText )
this.TextRun = true;
else
this.TextRun = false;
this.TextRun = false;
this.RecalcInfo.Recalc = true; this.RecalcInfo.Recalc = true;
this.RecalcInfo.Measure = false; this.RecalcInfo.Measure = false;
}, },
...@@ -671,10 +661,12 @@ ParaRun.prototype = ...@@ -671,10 +661,12 @@ ParaRun.prototype =
var ItemType = Item.Type; var ItemType = Item.Type;
// Проверяем, не нужно ли добавить нумерацию к данному элементу // Проверяем, не нужно ли добавить нумерацию к данному элементу
if ( true === this.NeedAddNumbering && true === Item.Can_AddNumbering() ) if ( true === this.RecalcInfo.NumberingAdd && true === Item.Can_AddNumbering() )
{ {
this.Internal_Recalculate_Numbering( Item, PRS, ParaPr ); var TempRes = this.Internal_Recalculate_Numbering( Item, PRS.Paragraph, ParaPr, X, PRS.LineAscent, PRS.Page, PRS.Line, PRS.Range );
PRS.Set_NumberingPos( Pos, Item );
X = TempRes.X;
PRS.LineAscent = TempRes.LineAscent;
} }
switch( Item.Type ) switch( Item.Type )
...@@ -1005,14 +997,15 @@ ParaRun.prototype = ...@@ -1005,14 +997,15 @@ ParaRun.prototype =
WordLen = 0; WordLen = 0;
var TabPos = Para.Internal_GetTabPos(X, ParaPr, PRS.CurPage); var TabPos = Para.Internal_GetTabPos(X, ParaPr, PRS.CurPage);
var NewX = TabPos.NewX; var NewX = TabPos.NewX;
var TabValue = TabPos.TabValue;
// Если таб не левый (NewX < 0), значит он не может быть сразу рассчитан, а если левый, тогда // Если таб не левый, значит он не может быть сразу рассчитан, а если левый, тогда
// рассчитываем его сразу здесь // рассчитываем его сразу здесь
if ( NewX < 0 ) if ( tab_Left !== TabValue )
{ {
PRS.LastTab.TabPos = -NewX; PRS.LastTab.TabPos = NewX;
PRS.LastTab.Value = TabPos.TabValue; PRS.LastTab.Value = TabValue;
PRS.LastTab.X = X; PRS.LastTab.X = X;
PRS.LastTab.Item = Item; PRS.LastTab.Item = Item;
...@@ -1140,6 +1133,24 @@ ParaRun.prototype = ...@@ -1140,6 +1133,24 @@ ParaRun.prototype =
if ( PRS.LineTextDescent < this.TextDescent ) if ( PRS.LineTextDescent < this.TextDescent )
PRS.LineTextDescent = this.TextDescent; PRS.LineTextDescent = this.TextDescent;
if ( linerule_Exact === ParaPr.Spacing.LineRule )
{
// Смещение не учитывается в метриках строки, когда расстояние между строк точное
if ( PRS.LineAscent < this.TextAscent )
PRS.LineAscent = this.TextAscent;
if ( PRS.LineDescent < this.TextDescent )
PRS.LineDescent = this.TextDescent;
}
else
{
if ( PRS.LineAscent < this.TextAscent + this.YOffset )
PRS.LineAscent = this.TextAscent + this.YOffset;
if ( PRS.LineDescent < this.TextDescent - this.YOffset )
PRS.LineDescent = this.TextDescent - this.YOffset;
}
} }
PRS.MoveToLBP = MoveToLBP; PRS.MoveToLBP = MoveToLBP;
...@@ -1203,7 +1214,7 @@ ParaRun.prototype = ...@@ -1203,7 +1214,7 @@ ParaRun.prototype =
{ {
var Item = this.Content[Pos]; var Item = this.Content[Pos];
if ( Item === NumberingItem ) if ( true === this.RecalcInfo.NumberingUse && Item === NumberingItem )
PRSC.Range.W += PRSC.Paragraph.Numbering.WidthVisible; PRSC.Range.W += PRSC.Paragraph.Numbering.WidthVisible;
switch( Item.Type ) switch( Item.Type )
...@@ -1316,8 +1327,6 @@ ParaRun.prototype = ...@@ -1316,8 +1327,6 @@ ParaRun.prototype =
{ {
if ( true === PRSC.Word && PRSC.Range.Words > 1 ) if ( true === PRSC.Word && PRSC.Range.Words > 1 )
PRSC.Range.Spaces += PRSC.SpacesCount; PRSC.Range.Spaces += PRSC.SpacesCount;
else
PRSC.Range.SpacesSkip += PRSC.SpacesCount;
PRSC.SpacesCount = 0; PRSC.SpacesCount = 0;
PRSC.Word = false; PRSC.Word = false;
...@@ -1348,7 +1357,7 @@ ParaRun.prototype = ...@@ -1348,7 +1357,7 @@ ParaRun.prototype =
{ {
var Item = this.Content[Pos]; var Item = this.Content[Pos];
if ( Item === NumberingItem ) if ( true === this.RecalcInfo.NumberingUse && Item === NumberingItem )
PRSA.X += PRSA.Paragraph.Numbering.WidthVisible; PRSA.X += PRSA.Paragraph.Numbering.WidthVisible;
switch( Item.Type ) switch( Item.Type )
...@@ -1559,10 +1568,11 @@ ParaRun.prototype = ...@@ -1559,10 +1568,11 @@ ParaRun.prototype =
} }
}, },
Internal_Recalculate_Numbering : function(Item, PRS, ParaPr) Internal_Recalculate_Numbering : function(Item, Para, ParaPr, _X, _LineAscent, CurPage, CurLine, CurRange)
{ {
var X = _X, LineAscent = _LineAscent;
// Если нужно добавить нумерацию и на текущем элементе ее можно добавить, тогда добавляем её // Если нужно добавить нумерацию и на текущем элементе ее можно добавить, тогда добавляем её
var Para = PRS.Paragraph;
var NumberingItem = Para.Numbering; var NumberingItem = Para.Numbering;
var NumberingType = Para.Numbering.Type; var NumberingType = Para.Numbering.Type;
...@@ -1580,8 +1590,8 @@ ParaRun.prototype = ...@@ -1580,8 +1590,8 @@ ParaRun.prototype =
var NumLvl = Numbering.Get_AbstractNum( NumPr.NumId ).Lvl[NumPr.Lvl]; var NumLvl = Numbering.Get_AbstractNum( NumPr.NumId ).Lvl[NumPr.Lvl];
var NumSuff = NumLvl.Suff; var NumSuff = NumLvl.Suff;
var NumJc = NumLvl.Jc; var NumJc = NumLvl.Jc;
var NumInfo = Para.Parent.Internal_GetNumInfo( this.Id, NumPr ); var NumInfo = Para.Parent.Internal_GetNumInfo( Para.Id, NumPr );
var NumTextPr = Pr.TextPr.Copy(); var NumTextPr = Para.Get_CompiledPr2(false).TextPr.Copy();
NumTextPr.Merge( Para.TextPr.Value ); NumTextPr.Merge( Para.TextPr.Value );
NumTextPr.Merge( NumLvl.TextPr ); NumTextPr.Merge( NumLvl.TextPr );
...@@ -1604,18 +1614,18 @@ ParaRun.prototype = ...@@ -1604,18 +1614,18 @@ ParaRun.prototype =
case align_Center: case align_Center:
{ {
NumberingItem.WidthVisible = NumberingItem.WidthNum / 2; NumberingItem.WidthVisible = NumberingItem.WidthNum / 2;
PRS.X += NumberingItem.WidthNum / 2;
break; break;
} }
case align_Left: case align_Left:
default: default:
{ {
NumberingItem.WidthVisible = NumberingItem.WidthNum; NumberingItem.WidthVisible = NumberingItem.WidthNum;
PRS.X += NumberingItem.WidthNum;
break; break;
} }
} }
X += NumberingItem.WidthVisible;
switch( NumSuff ) switch( NumSuff )
{ {
case numbering_suff_Nothing: case numbering_suff_Nothing:
...@@ -1634,60 +1644,9 @@ ParaRun.prototype = ...@@ -1634,60 +1644,9 @@ ParaRun.prototype =
} }
case numbering_suff_Tab: case numbering_suff_Tab:
{ {
var NewX = null; var NewX = Para.Internal_GetTabPos(X, ParaPr, CurPage).NewX;
var PageStart = Para.Parent.Get_PageContentStartPos( Para.PageNum + PRS.Page );
// Если у данного параграфа есть табы, тогда ищем среди них
var TabsCount = ParaPr.Tabs.Get_Count();
// Добавим в качестве таба левую границу
var TabsPos = new Array();
var bCheckLeft = true;
for ( var Index = 0; Index < TabsCount; Index++ )
{
var Tab = ParaPr.Tabs.Get(Index);
var TabPos = Tab.Pos + PageStart.X;
if ( true === bCheckLeft && TabPos > PageStart.X + ParaPr.Ind.Left )
{
TabsPos.push( PageStart.X + ParaPr.Ind.Left );
bCheckLeft = false;
}
if ( tab_Clear != Tab.Value )
TabsPos.push( TabPos );
}
if ( true === bCheckLeft )
TabsPos.push( PageStart.X + ParaPr.Ind.Left );
TabsCount++;
for ( var Index = 0; Index < TabsCount; Index++ )
{
var TabPos = TabsPos[Index];
if ( X < TabPos ) NumberingItem.WidthSuff = NewX - X;
{
NewX = TabPos;
break;
}
}
// Если табов нет, либо их позиции левее текущей позиции ставим таб по умолчанию
if ( null === NewX )
{
if ( X < PageStart.X + ParaPr.Ind.Left )
NewX = PageStart.X + ParaPr.Ind.Left;
else
{
NewX = this.X;
while ( X >= NewX )
NewX += Default_Tab_Stop;
}
}
NumberingItem.WidthSuff = NewX - PRS.X;
break; break;
} }
...@@ -1696,7 +1655,7 @@ ParaRun.prototype = ...@@ -1696,7 +1655,7 @@ ParaRun.prototype =
NumberingItem.Width = NumberingItem.WidthNum; NumberingItem.Width = NumberingItem.WidthNum;
NumberingItem.WidthVisible += NumberingItem.WidthSuff; NumberingItem.WidthVisible += NumberingItem.WidthSuff;
PRS.X += NumberingItem.WidthSuff; X += NumberingItem.WidthSuff;
} }
} }
else if ( para_PresentationNumbering === NumberingType ) else if ( para_PresentationNumbering === NumberingType )
...@@ -1705,15 +1664,27 @@ ParaRun.prototype = ...@@ -1705,15 +1664,27 @@ ParaRun.prototype =
if ( numbering_presentationnumfrmt_None != Bullet.Get_Type() ) if ( numbering_presentationnumfrmt_None != Bullet.Get_Type() )
{ {
if ( ParaPr.Ind.FirstLine < 0 ) if ( ParaPr.Ind.FirstLine < 0 )
NumberingItem.WidthVisible = Math.max( NumberingItem.Width, Para.X + ParaPr.Ind.Left + ParaPr.Ind.FirstLine - PRS.X, Para.X + ParaPr.Ind.Left - PRS.X ); NumberingItem.WidthVisible = Math.max( NumberingItem.Width, Para.X + ParaPr.Ind.Left + ParaPr.Ind.FirstLine - X, Para.X + ParaPr.Ind.Left - X );
else else
NumberingItem.WidthVisible = Math.max( Para.X + ParaPr.Ind.Left + NumberingItem.Width - PRS.X, Para.X + ParaPr.Ind.Left + ParaPr.Ind.FirstLine - PRS.X, Para.X + ParaPr.Ind.Left - PRS.X ); NumberingItem.WidthVisible = Math.max( Para.X + ParaPr.Ind.Left + NumberingItem.Width - X, Para.X + ParaPr.Ind.Left + ParaPr.Ind.FirstLine - X, Para.X + ParaPr.Ind.Left - X );
} }
PRS.X += NumberingItem.WidthVisible; X += NumberingItem.WidthVisible;
} }
this.NeedAddNumbering = false; // Запоминаем, что на данном элементе была добавлена нумерация
this.RecalcInfo.NumberingAdd = false;
this.RecalcInfo.NumberingUse = true;
this.RecalcInfo.NumberingItem = NumberingItem;
// Заполним обратные данные в элементе нумерации
NumberingItem.Item = Item;
NumberingItem.Run = this;
NumberingItem.Line = CurLine;
NumberingItem.Range = CurRange;
return { X : X, LineAscent : LineAscent };
}, },
Internal_Recalculate_LineMetrics : function(PRS, SpacingLineRule) Internal_Recalculate_LineMetrics : function(PRS, SpacingLineRule)
...@@ -1804,6 +1775,11 @@ ParaRun.prototype = ...@@ -1804,6 +1775,11 @@ ParaRun.prototype =
this.LinesLength = SL.LinesLength; this.LinesLength = SL.LinesLength;
this.Range = this.Lines[0].Ranges[0]; this.Range = this.Lines[0].Ranges[0];
}, },
Get_RecalcInfo : function()
{
return this.RecalcInfo;
},
//----------------------------------------------------------------------------------- //-----------------------------------------------------------------------------------
// Функции отрисовки // Функции отрисовки
//----------------------------------------------------------------------------------- //-----------------------------------------------------------------------------------
...@@ -2010,6 +1986,7 @@ ParaRun.prototype = ...@@ -2010,6 +1986,7 @@ ParaRun.prototype =
//var CurParaPos = PDSE.CurPos.Copy(); //var CurParaPos = PDSE.CurPos.Copy();
// var CurDepth = CurParaPos.Add( 0 ); // var CurDepth = CurParaPos.Add( 0 );
var Para = PDSE.Paragraph; var Para = PDSE.Paragraph;
var NumItem = PDSE.Paragraph.Numbering.Item;
var pGraphics = PDSE.Graphics; var pGraphics = PDSE.Graphics;
var AutoColor = PDSE.AutoColor; var AutoColor = PDSE.AutoColor;
...@@ -2050,137 +2027,135 @@ ParaRun.prototype = ...@@ -2050,137 +2027,135 @@ ParaRun.prototype =
//CurParaPos.Update( Pos, CurDepth ); //CurParaPos.Update( Pos, CurDepth );
// if ( 0 === CurParaPos.Compare( Para.Numbering.Pos ) ) if ( true === this.RecalcInfo.NumberingUse && Item === NumItem )
// { {
// var NumberingItem = Para.Numbering; var NumberingItem = Para.Numbering;
// if ( para_Numbering === Para.Numbering.Type ) if ( para_Numbering === Para.Numbering.Type )
// { {
// var Pr = Para.Get_CompiledPr2(false); var Pr = Para.Get_CompiledPr2(false);
// var NumPr = Pr.ParaPr.NumPr; var NumPr = Pr.ParaPr.NumPr;
// if ( undefined === NumPr || undefined === NumPr.NumId || 0 === NumPr.NumId || "0" === NumPr.NumId ) if ( undefined === NumPr || undefined === NumPr.NumId || 0 === NumPr.NumId || "0" === NumPr.NumId )
// { {
// // Ничего не делаем // Ничего не делаем
// } }
// else else
// { {
// var Numbering = Para.Parent.Get_Numbering(); var Numbering = Para.Parent.Get_Numbering();
// var NumLvl = Numbering.Get_AbstractNum( NumPr.NumId ).Lvl[NumPr.Lvl]; var NumLvl = Numbering.Get_AbstractNum( NumPr.NumId ).Lvl[NumPr.Lvl];
// var NumSuff = NumLvl.Suff; var NumSuff = NumLvl.Suff;
// var NumJc = NumLvl.Jc; var NumJc = NumLvl.Jc;
// var NumTextPr = Para.Get_CompiledPr2(false).TextPr.Copy(); var NumTextPr = Para.Get_CompiledPr2(false).TextPr.Copy();
//
// // Word не рисует подчеркивание у символа списка, если оно пришло из настроек для // Word не рисует подчеркивание у символа списка, если оно пришло из настроек для
// // символа параграфа. // символа параграфа.
//
// var TextPr_temp = Para.TextPr.Value.Copy(); var TextPr_temp = Para.TextPr.Value.Copy();
// TextPr_temp.Underline = undefined; TextPr_temp.Underline = undefined;
//
// NumTextPr.Merge( TextPr_temp ); NumTextPr.Merge( TextPr_temp );
// NumTextPr.Merge( NumLvl.TextPr ); NumTextPr.Merge( NumLvl.TextPr );
//
// var X_start = X; var X_start = X;
//
// if ( align_Right === NumJc ) if ( align_Right === NumJc )
// X_start = X - NumberingItem.WidthNum; X_start = X - NumberingItem.WidthNum;
// else if ( align_Center === NumJc ) else if ( align_Center === NumJc )
// X_start = X - NumberingItem.WidthNum / 2; X_start = X - NumberingItem.WidthNum / 2;
//
// if ( true === NumTextPr.Color.Auto ) if ( true === NumTextPr.Color.Auto )
// pGraphics.b_color1( AutoColor.r, AutoColor.g, AutoColor.b, 255); pGraphics.b_color1( AutoColor.r, AutoColor.g, AutoColor.b, 255);
// else else
// pGraphics.b_color1( NumTextPr.Color.r, NumTextPr.Color.g, NumTextPr.Color.b, 255 ); pGraphics.b_color1( NumTextPr.Color.r, NumTextPr.Color.g, NumTextPr.Color.b, 255 );
//
// // Рисуется только сам символ нумерации // Рисуется только сам символ нумерации
// switch ( NumJc ) switch ( NumJc )
// { {
// case align_Right: case align_Right:
// NumberingItem.Draw( X - NumberingItem.WidthNum, Y, pGraphics, Numbering, NumTextPr, NumPr ); NumberingItem.Draw( X - NumberingItem.WidthNum, Y, pGraphics, Numbering, NumTextPr, NumPr );
// break; break;
//
// case align_Center: case align_Center:
// NumberingItem.Draw( X - NumberingItem.WidthNum / 2, Y, pGraphics, Numbering, NumTextPr, NumPr ); NumberingItem.Draw( X - NumberingItem.WidthNum / 2, Y, pGraphics, Numbering, NumTextPr, NumPr );
// break; break;
//
// case align_Left: case align_Left:
// default: default:
// NumberingItem.Draw( X, Y, pGraphics, Numbering, NumTextPr, NumPr ); NumberingItem.Draw( X, Y, pGraphics, Numbering, NumTextPr, NumPr );
// break; break;
// } }
//
// if ( true === editor.ShowParaMarks && numbering_suff_Tab === NumSuff ) if ( true === editor.ShowParaMarks && numbering_suff_Tab === NumSuff )
// { {
// var TempWidth = NumberingItem.WidthSuff; var TempWidth = NumberingItem.WidthSuff;
// var TempRealWidth = 3.143; // ширина символа "стрелка влево" в шрифте Wingding3,10 var TempRealWidth = 3.143; // ширина символа "стрелка влево" в шрифте Wingding3,10
//
// var X1 = X; var X1 = X;
// switch ( NumJc ) switch ( NumJc )
// { {
// case align_Right: case align_Right:
// break; break;
//
// case align_Center: case align_Center:
// X1 += NumberingItem.WidthNum / 2; X1 += NumberingItem.WidthNum / 2;
// break; break;
//
// case align_Left: case align_Left:
// default: default:
// X1 += NumberingItem.WidthNum; X1 += NumberingItem.WidthNum;
// break; break;
// } }
//
// var X0 = TempWidth / 2 - TempRealWidth / 2; var X0 = TempWidth / 2 - TempRealWidth / 2;
//
// pGraphics.SetFont( {FontFamily: { Name : "Wingdings 3", Index : -1 }, FontSize: 10, Italic: false, Bold : false} ); pGraphics.SetFont( {FontFamily: { Name : "Wingdings 3", Index : -1 }, FontSize: 10, Italic: false, Bold : false} );
//
// if ( X0 > 0 ) if ( X0 > 0 )
// pGraphics.FillText2( X1 + X0, Y, String.fromCharCode( tab_Symbol ), 0, TempWidth ); pGraphics.FillText2( X1 + X0, Y, String.fromCharCode( tab_Symbol ), 0, TempWidth );
// else else
// pGraphics.FillText2( X1, Y, String.fromCharCode( tab_Symbol ), TempRealWidth - TempWidth, TempWidth ); pGraphics.FillText2( X1, Y, String.fromCharCode( tab_Symbol ), TempRealWidth - TempWidth, TempWidth );
// } }
//
// if ( true === NumTextPr.Strikeout || true === NumTextPr.Underline ) if ( true === NumTextPr.Strikeout || true === NumTextPr.Underline )
// { {
// if ( true === NumTextPr.Color.Auto ) if ( true === NumTextPr.Color.Auto )
// pGraphics.p_color( AutoColor.r, AutoColor.g, AutoColor.b, 255); pGraphics.p_color( AutoColor.r, AutoColor.g, AutoColor.b, 255);
// else else
// pGraphics.p_color( NumTextPr.Color.r, NumTextPr.Color.g, NumTextPr.Color.b, 255 ); pGraphics.p_color( NumTextPr.Color.r, NumTextPr.Color.g, NumTextPr.Color.b, 255 );
// } }
//
// if ( true === NumTextPr.Strikeout ) if ( true === NumTextPr.Strikeout )
// pGraphics.drawHorLine(0, (Y - NumTextPr.FontSize * g_dKoef_pt_to_mm * 0.27), X_start, X_start + NumberingItem.WidthNum, (NumTextPr.FontSize / 18) * g_dKoef_pt_to_mm); pGraphics.drawHorLine(0, (Y - NumTextPr.FontSize * g_dKoef_pt_to_mm * 0.27), X_start, X_start + NumberingItem.WidthNum, (NumTextPr.FontSize / 18) * g_dKoef_pt_to_mm);
//
// if ( true === NumTextPr.Underline ) if ( true === NumTextPr.Underline )
// pGraphics.drawHorLine( 0, (Y + this.Lines[CurLine].Metrics.TextDescent * 0.4), X_start, X_start + NumberingItem.WidthNum, (NumTextPr.FontSize / 18) * g_dKoef_pt_to_mm); pGraphics.drawHorLine( 0, (Y + this.Lines[CurLine].Metrics.TextDescent * 0.4), X_start, X_start + NumberingItem.WidthNum, (NumTextPr.FontSize / 18) * g_dKoef_pt_to_mm);
//
//
// X += NumberingItem.WidthVisible; X += NumberingItem.WidthVisible;
// }
// // Восстановим настройки }
// pGraphics.SetTextPr( CurTextPr ); else if ( para_PresentationNumbering === this.Numbering.Type )
// if ( true === bVisitedHyperlink ) {
// pGraphics.b_color1( 128, 0, 151, 255 ); if ( true != Para.IsEmpty() )
// else if ( true === CurTextPr.Color.Auto ) {
// pGraphics.b_color1( AutoColor.r, AutoColor.g, AutoColor.b, 255); if ( Pr.ParaPr.Ind.FirstLine < 0 )
// else NumberingItem.Draw( X, Y, pGraphics, CurTextPr );
// pGraphics.b_color1( CurTextPr.Color.r, CurTextPr.Color.g, CurTextPr.Color.b, 255); else
// } NumberingItem.Draw( Para.X + Pr.ParaPr.Ind.Left, Y, pGraphics, CurTextPr );
// } }
// else if ( para_PresentationNumbering === this.Numbering.Type )
// { X += NumberingItem.WidthVisible;
// if ( true != Para.IsEmpty() ) }
// {
// // Найдем настройки для первого текстового элемента // Восстановим настройки
// var FirstTextPr = this.Internal_CalculateTextPr( this.Internal_GetStartPos() ); pGraphics.SetTextPr( CurTextPr );
//
// if ( Pr.ParaPr.Ind.FirstLine < 0 ) if ( true === PDSE.VisitedHyperlink )
// NumberingItem.Draw( X, Y, pGraphics, FirstTextPr ); pGraphics.b_color1( 128, 0, 151, 255 );
// else else if ( true === CurTextPr.Color.Auto )
// NumberingItem.Draw( Para.X + Pr.ParaPr.Ind.Left, Y, pGraphics, FirstTextPr ); pGraphics.b_color1( AutoColor.r, AutoColor.g, AutoColor.b, 255);
// } else
// pGraphics.b_color1( CurTextPr.Color.r, CurTextPr.Color.g, CurTextPr.Color.b, 255);
// X += NumberingItem.WidthVisible; }
// }
// }
switch( Item.Type ) switch( Item.Type )
{ {
...@@ -2284,6 +2259,7 @@ ParaRun.prototype = ...@@ -2284,6 +2259,7 @@ ParaRun.prototype =
//var CurParaPos = PDSL.CurPos.Copy(); //var CurParaPos = PDSL.CurPos.Copy();
//var CurDepth = CurParaPos.Add( 0 ); //var CurDepth = CurParaPos.Add( 0 );
var Para = PDSL.Paragraph; var Para = PDSL.Paragraph;
var NumItem = PDSL.Paragraph.Numbering.Item;
var aStrikeout = PDSL.Strikeout; var aStrikeout = PDSL.Strikeout;
var aDStrikeout = PDSL.DStrikeout; var aDStrikeout = PDSL.DStrikeout;
...@@ -2312,8 +2288,8 @@ ParaRun.prototype = ...@@ -2312,8 +2288,8 @@ ParaRun.prototype =
var Item = this.Content[Pos]; var Item = this.Content[Pos];
// TODO: Нумерация зачеркивается и подчеркивается отдельно в Draw_Elements (неплохо бы сюда перенести) // TODO: Нумерация зачеркивается и подчеркивается отдельно в Draw_Elements (неплохо бы сюда перенести)
// if ( 0 === CurParaPos.Compare( Para.Numbering.Pos ) ) if ( true === this.RecalcInfo.NumberingUse && Item === NumItem )
// X += Para.Numbering.WidthVisible; X += Para.Numbering.WidthVisible;
switch( Item.Type ) switch( Item.Type )
{ {
...@@ -2486,57 +2462,55 @@ ParaRun.prototype = ...@@ -2486,57 +2462,55 @@ ParaRun.prototype =
var StartPos = Range.StartPos; var StartPos = Range.StartPos;
var EndPos = Range.EndPos; var EndPos = Range.EndPos;
var NumberingItem = this.Paragraph.Numbering;
var NumItem = NumberingItem.Item;
for ( var CurPos = StartPos; CurPos < EndPos; CurPos++ ) for ( var CurPos = StartPos; CurPos < EndPos; CurPos++ )
{ {
var Item = this.Content[CurPos]; var Item = this.Content[CurPos];
var TempDx = 0; var TempDx = 0;
// TODO: Сделать поддержку нумерации
// if ( ItemNum === this.Numbering.Pos ) // Проверим попадание в нумерацию
// { if ( true === this.RecalcInfo.NumberingUse && Item === NumItem )
// if ( para_Numbering === this.Numbering.Type ) {
// { var NumPr = this.Paragraph.Numbering_Get();
// var NumberingItem = this.Numbering; if ( para_Numbering === NumberingItem.Type && undefined !== NumPr )
// var NumPr = this.Numbering_Get(); {
// var NumJc = this.Parent.Get_Numbering().Get_AbstractNum( NumPr.NumId ).Lvl[NumPr.Lvl].Jc; var NumJc = this.Paragraph.Parent.Get_Numbering().Get_AbstractNum( NumPr.NumId ).Lvl[NumPr.Lvl].Jc;
//
// var NumX0 = CurX; var NumX0 = SearchPos.CurX;
// var NumX1 = CurX; var NumX1 = SearchPos.CurX;
//
// switch( NumJc ) switch( NumJc )
// { {
// case align_Right: case align_Right:
// { {
// NumX0 -= NumberingItem.WidthNum; NumX0 -= NumberingItem.WidthNum;
// break; break;
// } }
// case align_Center: case align_Center:
// { {
// NumX0 -= NumberingItem.WidthNum / 2; NumX0 -= NumberingItem.WidthNum / 2;
// NumX1 += NumberingItem.WidthNum / 2; NumX1 += NumberingItem.WidthNum / 2;
// break; break;
// } }
// case align_Left: case align_Left:
// default: default:
// { {
// NumX1 += NumberingItem.WidthNum; NumX1 += NumberingItem.WidthNum;
// break; break;
// } }
// } }
//
// if ( X >= NumX0 && X <= NumX1 ) if ( SearchPos.X >= NumX0 && SearchPos.X <= NumX1 )
// NumberingDiffX = 0; {
// } SearchPos.Numbering = true;
// }
// CurX += this.Numbering.WidthVisible; }
//
// if ( -1 != DiffPos ) SearchPos.CurX += NumberingItem.WidthVisible;
// { }
// DiffX = Math.abs( X - CurX );
// DiffPos = ItemNum;
// }
// }
if ( para_Drawing != Item.Type || true === Item.Is_Inline() ) if ( para_Drawing != Item.Type || true === Item.Is_Inline() )
{ {
...@@ -2847,14 +2821,14 @@ ParaRun.prototype = ...@@ -2847,14 +2821,14 @@ ParaRun.prototype =
for ( var CurPos = StartPos; CurPos < EndPos; CurPos++ ) for ( var CurPos = StartPos; CurPos < EndPos; CurPos++ )
{ {
var Item = this.Content[CurPos]; var Item = this.Content[CurPos];
if ( !((para_Drawing === Item.Type && true !== Item.Is_Inline) || para_End === Item.Type) ) if ( !((para_Drawing === Item.Type && true !== Item.Is_Inline) || para_End === Item.Type || (para_NewLine === Item.Type && break_Line === Item.BreakType ) ) )
LastPos = CurPos + 1; LastPos = CurPos + 1;
} }
// Проверяем, попал ли хоть один элемент в данный отрезок, если нет, тогда не регистрируем такой ран // Проверяем, попал ли хоть один элемент в данный отрезок, если нет, тогда не регистрируем такой ран
if ( -1 !== LastPos ) if ( -1 !== LastPos )
{ {
SearchPos.Pos.Update( EndPos, Depth ); SearchPos.Pos.Update( LastPos, Depth );
return true; return true;
} }
else else
...@@ -2995,11 +2969,21 @@ ParaRun.prototype = ...@@ -2995,11 +2969,21 @@ ParaRun.prototype =
var FindStart = SelectionDraw.FindStart; var FindStart = SelectionDraw.FindStart;
var NumItem = ( true === this.RecalcInfo.NumberingUse ? this.Paragraph.Numbering.Item : null );
for ( var CurPos = StartPos; CurPos < EndPos; CurPos++ ) for ( var CurPos = StartPos; CurPos < EndPos; CurPos++ )
{ {
var Item = this.Content[CurPos]; var Item = this.Content[CurPos];
var DrawSelection = false; var DrawSelection = false;
if ( NumItem === Item )
{
if ( true === FindStart )
SelectionDraw.StartX += this.Paragraph.Numbering.WidthVisible;
else // Такого не должно быть
SelectionDraw.W += this.Paragraph.Numbering.WidthVisible;
}
if ( true === FindStart ) if ( true === FindStart )
{ {
if ( true === Selection.Use && CurPos >= SelectionStartPos && CurPos < SelectionEndPos ) if ( true === Selection.Use && CurPos >= SelectionStartPos && CurPos < SelectionEndPos )
...@@ -3649,8 +3633,18 @@ function CParaRunRecalcInfo() ...@@ -3649,8 +3633,18 @@ function CParaRunRecalcInfo()
this.Measure = true; // Нужно ли перемерять элементы this.Measure = true; // Нужно ли перемерять элементы
this.Recalc = true; // Нужно ли пересчитывать (только если текстовый ран) this.Recalc = true; // Нужно ли пересчитывать (только если текстовый ран)
this.RunLen = 0; this.RunLen = 0;
// Далее идут параметры, которые выставляются после пересчета данного Range, такие как пересчитывать ли нумерацию
this.NumberingItem = null;
this.NumberingUse = false; // Используется ли нумерация в данном ране
this.NumberingAdd = true; // Нужно ли в следующем ране использовать нумерацию
} }
CParaRunRecalcInfo.prototype =
{
};
function CParaRunRange(StartPos, EndPos) function CParaRunRange(StartPos, EndPos)
{ {
this.StartPos = StartPos; // Начальная позиция в контенте, с которой начинается данный отрезок this.StartPos = StartPos; // Начальная позиция в контенте, с которой начинается данный отрезок
......
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