Commit 84e33633 authored by Ilya Kirillov's avatar Ilya Kirillov

Worked out the situation when document ends on a long footnote.

parent 91aac575
...@@ -2022,10 +2022,19 @@ CDocument.prototype.Recalculate = function(bOneParagraph, bRecalcContentLast, _R ...@@ -2022,10 +2022,19 @@ CDocument.prototype.Recalculate = function(bOneParagraph, bRecalcContentLast, _R
this.DrawingDocument.FirePaint(); this.DrawingDocument.FirePaint();
return; return;
} }
else if (ChangeIndex >= this.Content.length)
// Найдем начальную страницу, с которой мы начнем пересчет
var StartPage = 0;
var StartIndex = 0;
if (ChangeIndex >= this.Content.length)
{ {
ChangeIndex = this.Content.length - 1; // Сюда мы попадаем при рассчете сносок, которые выходят за пределы самого документа
StartIndex = this.Content.length;
StartPage = RecalcData.Inline.PageNum;
} }
else
{
// Здсь мы должны проверить предыдущие элементы на наличие параматра KeepNext // Здсь мы должны проверить предыдущие элементы на наличие параматра KeepNext
while (ChangeIndex > 0) while (ChangeIndex > 0)
...@@ -2042,10 +2051,6 @@ CDocument.prototype.Recalculate = function(bOneParagraph, bRecalcContentLast, _R ...@@ -2042,10 +2051,6 @@ CDocument.prototype.Recalculate = function(bOneParagraph, bRecalcContentLast, _R
} }
} }
// Найдем начальную страницу, с которой мы начнем пересчет
var StartPage = 0;
var StartIndex = 0;
var ChangedElement = this.Content[ChangeIndex]; var ChangedElement = this.Content[ChangeIndex];
if (ChangedElement.Pages.length > 0 && -1 !== ChangedElement.Index && ChangedElement.Get_StartPage_Absolute() < RecalcData.Inline.PageNum - 1) if (ChangedElement.Pages.length > 0 && -1 !== ChangedElement.Index && ChangedElement.Get_StartPage_Absolute() < RecalcData.Inline.PageNum - 1)
{ {
...@@ -2094,6 +2099,7 @@ CDocument.prototype.Recalculate = function(bOneParagraph, bRecalcContentLast, _R ...@@ -2094,6 +2099,7 @@ CDocument.prototype.Recalculate = function(bOneParagraph, bRecalcContentLast, _R
this.HdrFtrRecalc.Id = null; this.HdrFtrRecalc.Id = null;
this.DrawingDocument.OnEndRecalculate(false); this.DrawingDocument.OnEndRecalculate(false);
} }
}
this.HdrFtrRecalc.PageCount = -1; this.HdrFtrRecalc.PageCount = -1;
...@@ -2757,6 +2763,24 @@ CDocument.prototype.Recalculate_PageColumn = function() ...@@ -2757,6 +2763,24 @@ CDocument.prototype.Recalculate_PageColumn = function()
} }
if (Index >= Count) if (Index >= Count)
{
// Пересчет основной части документа законечен. Возможна ситуация, при которой последние сноски с данной
// страницы переносятся на следующую (т.е. остались непересчитанные сноски). Эти сноски нужно пересчитать
if (this.Footnotes.HaveContinuesFootnotes(PageIndex, ColumnIndex))
{
bContinue = true;
_PageIndex = PageIndex;
_ColumnIndex = ColumnIndex + 1;
if (_ColumnIndex >= ColumnsCount)
{
_ColumnIndex = 0;
_PageIndex = PageIndex + 1;
}
_bStart = true;
_StartIndex = Count;
}
else
{ {
this.Internal_CheckCurPage(); this.Internal_CheckCurPage();
this.DrawingDocument.OnEndRecalculate(true); this.DrawingDocument.OnEndRecalculate(true);
...@@ -2789,6 +2813,7 @@ CDocument.prototype.Recalculate_PageColumn = function() ...@@ -2789,6 +2813,7 @@ CDocument.prototype.Recalculate_PageColumn = function()
} }
} }
} }
}
if (true === bContinue) if (true === bContinue)
{ {
......
...@@ -488,6 +488,16 @@ CFootnotesController.prototype.LoadRecalculateObject = function(nPageAbs, nColum ...@@ -488,6 +488,16 @@ CFootnotesController.prototype.LoadRecalculateObject = function(nPageAbs, nColum
oColumn.LoadRecalculateObject(oRObject); oColumn.LoadRecalculateObject(oRObject);
}; };
CFootnotesController.prototype.HaveContinuesFootnotes = function(nPageAbs, nColumnAbs)
{
var oColumn = this.private_GetPageColumn(nPageAbs, nColumnAbs);
if (!oColumn)
return false;
var arrContinues = oColumn.GetContinuesElements();
return (arrContinues.length > 0 ? true : false);
};
/** /**
* Проверяем, используется заданная сноска в документе. * Проверяем, используется заданная сноска в документе.
* @param {string} sFootnoteId * @param {string} sFootnoteId
......
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