Commit c80061d1 authored by Ilya Kirillov's avatar Ilya Kirillov

Implemented increasing index number of footnotes on the page.

parent 5847f774
...@@ -41,6 +41,8 @@ ...@@ -41,6 +41,8 @@
function CFootEndnote(DocumentController) function CFootEndnote(DocumentController)
{ {
CFootEndnote.superclass.constructor.call(this, DocumentController, DocumentController ? DocumentController.Get_DrawingDocument() : undefined, 0, 0, 0, 0, true, false, false); CFootEndnote.superclass.constructor.call(this, DocumentController, DocumentController ? DocumentController.Get_DrawingDocument() : undefined, 0, 0, 0, 0, true, false, false);
this.Number = 1;
} }
AscCommon.extendClass(CFootEndnote, CDocumentContent); AscCommon.extendClass(CFootEndnote, CDocumentContent);
...@@ -74,6 +76,14 @@ CFootEndnote.prototype.Read_FromBinary2 = function(Reader) ...@@ -74,6 +76,14 @@ CFootEndnote.prototype.Read_FromBinary2 = function(Reader)
Reader.GetLong(); // Должен вернуть historyitem_type_DocumentContent Reader.GetLong(); // Должен вернуть historyitem_type_DocumentContent
CFootEndnote.superclass.Read_FromBinary2.call(this, Reader); CFootEndnote.superclass.Read_FromBinary2.call(this, Reader);
}; };
CFootEndnote.prototype.SetNumber = function(nNumber)
{
this.Number = nNumber;
};
CFootEndnote.prototype.GetNumber = function()
{
return this.Number;
};
//--------------------------------------------------------export---------------------------------------------------- //--------------------------------------------------------export----------------------------------------------------
window['AscCommonWord'] = window['AscCommonWord'] || {}; window['AscCommonWord'] = window['AscCommonWord'] || {};
......
...@@ -392,75 +392,30 @@ CFootnotesController.prototype.Shift = function(nPageAbs, nColumnAbs, dX, dY) ...@@ -392,75 +392,30 @@ CFootnotesController.prototype.Shift = function(nPageAbs, nColumnAbs, dX, dY)
oFootnote.Shift(nFootnotePageIndex, dX, dY); oFootnote.Shift(nFootnotePageIndex, dX, dY);
} }
}; };
/** CFootnotesController.prototype.GetFootnoteNumberOnPage = function(nPageAbs, nColumnAbs)
* Добавляем заданную сноску на страницу для пересчета.
* @param {number} nPageAbs
* @param {number} nColumnAbs
* @param {CFootEndnote} oFootnote
* @param {number} dBottom
*/
CFootnotesController.prototype.AddFootnoteToPage = function(nPageAbs, nColumnAbs, oFootnote, dBottom)
{
var oColumn = this.private_GetPageColumn(nPageAbs, nColumnAbs);
if (!oColumn)
return;
// TODO: Проверить ссылку с предыдущей колонки
if (oColumn.Elements.length <= 0 || oColumn.Y < dBottom)
oColumn.Y = dBottom;
oColumn.Elements.push(oFootnote);
};
/**
* Убираем заданную сноску со страницы при пересчетею..
* @param {number} nPageAbs
* @param {number} nColumnAbs
* @param {CFootEndnote} oFootnote
*/
CFootnotesController.prototype.RemoveFootnoteFromPage = function(nPageAbs, nColumnAbs, oFootnote)
{ {
var oColumn = this.private_GetPageColumn(nPageAbs, nColumnAbs); // Случай, когда своя отдельная нумерация на каждой странице
if (!oColumn) // Мы делаем не совсем как в Word, если у нас происходит ситуация, что ссылка на сноску на одной странице, а сама
return; // сноска на следующей, тогда у этих страниц нумерация общая, в Word ставится номер "1" в такой ситуации, и становится
// непонятно, потому что есть две ссылки с номером 1 на странице, ссылающиеся на разные сноски.
for (var nIndex = 0, nCount = oColumn.Elements.length; nIndex < nCount; ++nIndex) for (var nColumnIndex = nColumnAbs; nColumnIndex >= 0; --nColumnIndex)
{
if (oColumn.Elements[nIndex] === oFootnote)
{ {
oColumn.Elements.splice(nIndex, 1); var oColumn = this.private_GetPageColumn(nPageAbs, nColumnIndex);
return;
}
}
};
CFootnotesController.prototype.GetFootnoteNumberOnPage = function(nPageAbs, nColumnAbs, oFootnote)
{
var oPage = this.Pages[nPageAbs];
if (!oPage)
return 1;
var nFootnoteIndex = 1; if (oColumn.Elements.length > 0)
for (var nColumnIndex = 0, nColumnsCount = oPage.Columns.length; nColumnIndex <= Math.min(nColumnAbs, nColumnsCount - 1); ++nColumnIndex)
{ {
var oColumn = oPage.Columns[nColumnIndex]; var oFootnote = oColumn.Elements[oColumn.Elements.length - 1];
var nStartPage = oFootnote.Get_StartPage_Absolute();
for (var nIndex = 0, nCount = oColumn.Elements.length; nIndex < nCount; ++nIndex)
{
var oCurFootnote = oColumn.Elements[nIndex];
// Сноски начинающиеся не на данной колонке мы не учитываем
if (0 === oCurFootnote.GetElementPageIndex(nPageAbs, nColumnIndex))
{
if (oFootnote && oFootnote === oCurFootnote)
return nFootnoteIndex;
nFootnoteIndex++; if (nStartPage >= nPageAbs || (nStartPage === nPageAbs - 1 && true !== oFootnote.Is_ContentOnFirstPage()))
} return oFootnote.GetNumber() + 1;
else
return 1;
} }
} }
return nFootnoteIndex; return 1;
}; };
/** /**
* Проверяем, используется заданная сноска в документе. * Проверяем, используется заданная сноска в документе.
......
...@@ -7641,14 +7641,15 @@ ParaFootnoteReference.prototype.Get_Footnote = function() ...@@ -7641,14 +7641,15 @@ ParaFootnoteReference.prototype.Get_Footnote = function()
{ {
return this.Footnote; return this.Footnote;
}; };
ParaFootnoteReference.prototype.UpdateNumber = function(nPageAbs, nColumnAbs) ParaFootnoteReference.prototype.UpdateNumber = function(nPageAbs, nColumnAbs, nAdditional)
{ {
if (this.Footnote) if (this.Footnote)
{ {
var oLogicDocument = this.Footnote.Get_LogicDocument(); var oLogicDocument = this.Footnote.Get_LogicDocument();
var oFootnotesController = oLogicDocument.GetFootnotesController(); var oFootnotesController = oLogicDocument.GetFootnotesController();
this.Number = oFootnotesController.GetFootnoteNumberOnPage(nPageAbs, nColumnAbs, this.Footnote); this.Number = oFootnotesController.GetFootnoteNumberOnPage(nPageAbs, nColumnAbs) + nAdditional;
this.private_Measure(); this.private_Measure();
this.Footnote.SetNumber(this.Number);
} }
}; };
ParaFootnoteReference.prototype.private_Measure = function() ParaFootnoteReference.prototype.private_Measure = function()
...@@ -7698,6 +7699,14 @@ ParaFootnoteRef.prototype.Copy = function() ...@@ -7698,6 +7699,14 @@ ParaFootnoteRef.prototype.Copy = function()
{ {
return new ParaFootnoteRef(this.Get_Footnote()); return new ParaFootnoteRef(this.Get_Footnote());
}; };
ParaFootnoteRef.prototype.UpdateNumber = function()
{
if (this.Footnote)
{
this.Number = this.Footnote.GetNumber();
this.private_Measure();
}
};
/** /**
* Класс представляющий собой разделитель (который в основном используется для сносок). * Класс представляющий собой разделитель (который в основном используется для сносок).
......
...@@ -3014,6 +3014,11 @@ CParagraphRecalculateStateWrap.prototype = ...@@ -3014,6 +3014,11 @@ CParagraphRecalculateStateWrap.prototype =
this.Footnotes.push({FootnoteReference : FootnoteReference, Pos : Pos}); this.Footnotes.push({FootnoteReference : FootnoteReference, Pos : Pos});
}, },
GetFootnoteReferencesCount : function()
{
return this.Footnotes.length;
},
SetFast : function(bValue) SetFast : function(bValue)
{ {
this.Fast = bValue; this.Fast = bValue;
......
...@@ -2343,12 +2343,12 @@ ParaRun.prototype.Recalculate_Range = function(PRS, ParaPr, Depth) ...@@ -2343,12 +2343,12 @@ ParaRun.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
if (para_FootnoteReference === ItemType) if (para_FootnoteReference === ItemType)
{ {
Item.UpdateNumber(Para.Get_AbsolutePage(PRS.Page), Para.Get_AbsoluteColumn(PRS.Page)); Item.UpdateNumber(PRS.PageAbs, PRS.ColumnAbs, PRS.GetFootnoteReferencesCount());
PRS.Add_FootnoteReference(Item, Pos); PRS.Add_FootnoteReference(Item, Pos);
} }
else if (para_FootnoteRef === ItemType) else if (para_FootnoteRef === ItemType)
{ {
Item.UpdateNumber(Para.Get_AbsolutePage(PRS.Page), Para.Get_AbsoluteColumn(PRS.Page)); Item.UpdateNumber();
} }
// При проверке, убирается ли слово, мы должны учитывать ширину предшествующих пробелов. // При проверке, убирается ли слово, мы должны учитывать ширину предшествующих пробелов.
......
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