Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
S
sdkjs
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Boris Kocherov
sdkjs
Commits
11ee4292
Commit
11ee4292
authored
Sep 16, 2016
by
Ilya Kirillov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Handled the situation when a reference footnote lies inside a table.
parent
7fb3f2d8
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
59 additions
and
51 deletions
+59
-51
word/Editor/DocumentContent.js
word/Editor/DocumentContent.js
+9
-0
word/Editor/Footnotes.js
word/Editor/Footnotes.js
+33
-32
word/Editor/Paragraph_Recalculate.js
word/Editor/Paragraph_Recalculate.js
+10
-1
word/Editor/Table/TableRecalculate.js
word/Editor/Table/TableRecalculate.js
+7
-18
No files found.
word/Editor/DocumentContent.js
View file @
11ee4292
...
...
@@ -8424,6 +8424,10 @@ CDocumentContent.prototype.Get_StartPage_Relative = function()
{
return
this
.
StartPage
;
};
CDocumentContent
.
prototype
.
Get_StartColumn_Absolute
=
function
()
{
return
this
.
Get_AbsoluteColumn
(
0
);
};
CDocumentContent
.
prototype
.
Set_StartPage
=
function
(
StartPage
,
StartColumn
,
ColumnsCount
)
{
this
.
StartPage
=
StartPage
;
...
...
@@ -8459,6 +8463,11 @@ CDocumentContent.prototype.Get_AbsoluteColumn = function(CurPage)
};
CDocumentContent
.
prototype
.
private_GetColumnIndex
=
function
(
CurPage
)
{
// TODO: Разобраться здесь нужно ли данное условие. Оно появилось из-за параграфов в таблице в
// основной части документа и из-за параграфов в сносках.
if
(
1
===
this
.
ColumnsCount
)
return
this
.
Parent
.
Get_AbsoluteColumn
(
this
.
private_GetRelativePageIndex
(
CurPage
));
return
(
this
.
StartColumn
+
CurPage
)
-
(((
this
.
StartColumn
+
CurPage
)
/
this
.
ColumnsCount
|
0
)
*
this
.
ColumnsCount
);
};
//-----------------------------------------------------------------------------------
...
...
word/Editor/Footnotes.js
View file @
11ee4292
...
...
@@ -247,6 +247,8 @@ CFootnotesController.prototype.RecalculateFootnotes = function(nPageAbs, nColumn
if
(
!
oColumn
)
return
true
;
var
isLowerY
=
(
Y
<
oColumn
.
ReferenceY
+
0.001
?
true
:
false
);
if
(
oColumn
.
GetContinuesElements
().
length
>
0
)
{
// Если уже есть элементы, которые переносятся, тогда данные сноски точно не убирутся
...
...
@@ -254,7 +256,7 @@ CFootnotesController.prototype.RecalculateFootnotes = function(nPageAbs, nColumn
// на следующую страницу. Такое возможно в таблицах, когда сноски расположены в разных ячейках одной строки,
// причем вторая сноска выше первой.
if
(
Y
<
oColumn
.
Reference
Y
)
if
(
isLower
Y
)
{
oColumn
.
AddContinuesElements
(
arrFootnotes
);
return
true
;
...
...
@@ -273,7 +275,7 @@ CFootnotesController.prototype.RecalculateFootnotes = function(nPageAbs, nColumn
var
_Y
=
oColumn
.
Height
;
var
_YLimit
=
oColumn
.
YLimit
-
Y
;
if
(
Y
<
oColumn
.
Reference
Y
)
if
(
isLower
Y
)
_YLimit
=
oColumn
.
YLimit
-
oColumn
.
ReferenceY
;
if
(
oColumn
.
Elements
.
length
<=
0
&&
null
!==
this
.
SeparatorFootnote
)
...
...
@@ -303,7 +305,7 @@ CFootnotesController.prototype.RecalculateFootnotes = function(nPageAbs, nColumn
{
// Если у нас первая сноска не убирается, тогда мы переносим. Есть исключение, когда мы находимся в таблице
// и у нас уже есть сноски на странице, а ссылка на данную сноску выше чем те, которые мы уже добавили.
if
(
0
===
nIndex
&&
true
!==
oFootnote
.
Is_ContentOnFirstPage
()
&&
(
0
===
oColumn
.
Elements
.
length
||
Y
>
oColumn
.
Reference
Y
))
if
(
0
===
nIndex
&&
true
!==
oFootnote
.
Is_ContentOnFirstPage
()
&&
(
0
===
oColumn
.
Elements
.
length
||
!
isLower
Y
))
return
false
;
// Начиная с данной сноски мы все оставшиеся сноски заносим в массив ContinuesElements у данной колонки
...
...
@@ -327,7 +329,7 @@ CFootnotesController.prototype.RecalculateFootnotes = function(nPageAbs, nColumn
oColumn
.
Height
=
Math
.
min
(
_YLimit
,
oColumn
.
Height
);
if
(
oColumn
.
ReferenceY
<
Y
)
if
(
!
isLower
Y
)
oColumn
.
ReferenceY
=
Y
;
return
true
;
...
...
@@ -422,9 +424,30 @@ CFootnotesController.prototype.GetFootnoteNumberOnPage = function(nPageAbs, nCol
// Мы делаем не совсем как в Word, если у нас происходит ситуация, что ссылка на сноску на одной странице, а сама
// сноска на следующей, тогда у этих страниц нумерация общая, в Word ставится номер "1" в такой ситуации, и становится
// непонятно, потому что есть две ссылки с номером 1 на странице, ссылающиеся на разные сноски.
// В таблицах сами сноски могут переносится на другую колонку, а ссылки будут оставаться на данной, и они пока еще
// не рассчитаны и никуда не добавлены, поэтому нам также надо учитывать количество переносимы сносок на следующую
// колонку.
var
nAdditional
=
0
;
for
(
var
nColumnIndex
=
nColumnAbs
;
nColumnIndex
>=
0
;
--
nColumnIndex
)
{
var
oColumn
=
this
.
private_GetPageColumn
(
nPageAbs
,
nColumnIndex
);
if
(
nColumnIndex
===
nColumnAbs
)
{
var
arrContinuesElements
=
oColumn
.
GetContinuesElements
();
if
(
arrContinuesElements
.
length
>
0
)
{
var
oFootnote
=
arrContinuesElements
[
0
];
var
nStartPage
=
oFootnote
.
Get_StartPage_Absolute
();
var
nStartColumn
=
oFootnote
.
Get_StartColumn_Absolute
();
if
(
nStartPage
===
nPageAbs
&&
nStartColumn
===
nColumnAbs
&&
true
!==
oFootnote
.
Is_ContentOnFirstPage
())
nAdditional
=
arrContinuesElements
.
length
;
else
nAdditional
=
arrContinuesElements
.
length
-
1
;
}
}
if
(
oColumn
.
Elements
.
length
>
0
)
{
...
...
@@ -432,9 +455,9 @@ CFootnotesController.prototype.GetFootnoteNumberOnPage = function(nPageAbs, nCol
var
nStartPage
=
oFootnote
.
Get_StartPage_Absolute
();
if
(
nStartPage
>=
nPageAbs
||
(
nStartPage
===
nPageAbs
-
1
&&
true
!==
oFootnote
.
Is_ContentOnFirstPage
()))
return
oFootnote
.
GetNumber
()
+
1
;
return
oFootnote
.
GetNumber
()
+
1
+
nAdditional
;
else
return
1
;
return
1
+
nAdditional
;
}
}
...
...
@@ -2995,8 +3018,8 @@ CFootEndnotePageColumn.prototype.SaveRecalculateObject = function()
oColumn
.
ContinuesElements
=
this
.
ContinuesElements
;
oColumn
.
SeparatorRecalculateObject
=
this
.
SeparatorRecalculateObject
;
oColumn
.
ContinuationSeparatorRecalculateObject
=
this
.
SeparatorRecalculateObject
;
oColumn
.
ContinuationNoticeRecalculateObject
=
this
.
Continuation
Separator
RecalculateObject
;
oColumn
.
ContinuationSeparatorRecalculateObject
=
this
.
Continuation
SeparatorRecalculateObject
;
oColumn
.
ContinuationNoticeRecalculateObject
=
this
.
Continuation
Notice
RecalculateObject
;
return
oColumn
;
};
CFootEndnotePageColumn
.
prototype
.
LoadRecalculateObject
=
function
(
oObject
)
...
...
@@ -3018,38 +3041,16 @@ CFootEndnotePageColumn.prototype.LoadRecalculateObject = function(oObject)
this
.
ContinuesElements
=
oObject
.
ContinuesElements
;
this
.
SeparatorRecalculateObject
=
oObject
.
SeparatorRecalculateObject
;
this
.
ContinuationSeparatorRecalculateObject
=
oObject
.
SeparatorRecalculateObject
;
this
.
ContinuationNoticeRecalculateObject
=
oObject
.
Continuation
Separator
RecalculateObject
;
this
.
ContinuationSeparatorRecalculateObject
=
oObject
.
Continuation
SeparatorRecalculateObject
;
this
.
ContinuationNoticeRecalculateObject
=
oObject
.
Continuation
Notice
RecalculateObject
;
};
function
CFootEndnotePage
()
{
this
.
X
=
0
;
this
.
Y
=
0
;
this
.
XLimit
=
0
;
this
.
YLimit
=
0
;
this
.
Elements
=
[];
this
.
SeparatorRecalculateObject
=
null
;
this
.
ContinuationSeparatorRecalculateObject
=
null
;
this
.
ContinuationNoticeRecalculateObject
=
null
;
this
.
Columns
=
[];
}
CFootEndnotePage
.
prototype
.
Reset
=
function
()
{
this
.
X
=
0
;
this
.
Y
=
0
;
this
.
XLimit
=
0
;
this
.
YLimit
=
0
;
this
.
Elements
=
[];
this
.
SeparatorRecalculateObject
=
null
;
this
.
ContinuationSeparatorRecalculateObject
=
null
;
this
.
ContinuationNoticeRecalculateObject
=
null
;
this
.
Columns
=
[];
};
CFootEndnotePage
.
prototype
.
AddColumn
=
function
(
oColumn
)
...
...
word/Editor/Paragraph_Recalculate.js
View file @
11ee4292
...
...
@@ -1377,7 +1377,10 @@ Paragraph.prototype.private_RecalculateLineBottomBound = function(CurLine, CurPa
if
(
nHeight
>
0.001
)
{
bNoFootnotes
=
false
;
YLimit
-=
nHeight
;
// В таблицах граница разруливается по своему
if
(
true
!==
PRS
.
IsInTable
())
YLimit
-=
nHeight
;
}
}
else
if
(
oTopDocument
instanceof
CFootEndnote
)
...
...
@@ -2548,6 +2551,7 @@ function CParagraphRecalculateStateWrap(Para)
this
.
TopDocument
=
null
;
this
.
PageAbs
=
0
;
this
.
ColumnAbs
=
0
;
this
.
InTable
=
false
;
this
.
Fast
=
false
;
// Быстрый ли пересчет
...
...
@@ -2668,6 +2672,7 @@ CParagraphRecalculateStateWrap.prototype =
this
.
TopDocument
=
Paragraph
.
Parent
.
Get_TopDocumentContent
();
this
.
PageAbs
=
Paragraph
.
Get_AbsolutePage
(
CurPage
);
this
.
ColumnAbs
=
Paragraph
.
Get_AbsoluteColumn
(
CurPage
);
this
.
InTable
=
Paragraph
.
Parent
.
Is_TableCellContent
();
this
.
RunRecalcInfoLast
=
(
0
===
CurPage
?
null
:
Paragraph
.
Pages
[
CurPage
-
1
].
EndInfo
.
RunRecalcInfo
);
this
.
RunRecalcInfoBreak
=
this
.
RunRecalcInfoLast
;
...
...
@@ -3027,6 +3032,10 @@ CParagraphRecalculateStateWrap.prototype.LoadFootnotesInfo = function()
if
(
oTopDocument
instanceof
CDocument
&&
this
.
FootnotesRecalculateObject
)
oTopDocument
.
Footnotes
.
LoadRecalculateObject
(
this
.
PageAbs
,
this
.
ColumnAbs
,
this
.
FootnotesRecalculateObject
);
};
CParagraphRecalculateStateWrap
.
prototype
.
IsInTable
=
function
()
{
return
this
.
InTable
;
};
function
CParagraphRecalculateStateCounter
()
{
...
...
word/Editor/Table/TableRecalculate.js
View file @
11ee4292
...
...
@@ -1621,9 +1621,10 @@ CTable.prototype.private_RecalculatePage = function(CurPage)
if
(
true
===
this
.
TurnOffRecalc
)
return
;
var
isInnerTable
=
this
.
Parent
.
Is_TableCellContent
();
var
oTopDocument
=
this
.
Parent
.
Is_TopDocument
(
true
);
var
isTopLogicDocument
=
(
oTopDocument
instanceof
CDocument
?
true
:
false
);
var
oFootnotes
=
(
isTopLogicDocument
?
oTopDocument
.
Footnotes
:
null
);
var
oFootnotes
=
(
isTopLogicDocument
&&
!
isInnerTable
?
oTopDocument
.
Footnotes
:
null
);
var
nPageAbs
=
this
.
Get_AbsolutePage
(
CurPage
);
var
nColumnAbs
=
this
.
Get_AbsoluteColumn
(
CurPage
);
...
...
@@ -2111,7 +2112,7 @@ CTable.prototype.private_RecalculatePage = function(CurPage)
{
if
(
true
===
bResetFootnotes
&&
oFootnotes
)
{
oFootnotesObject
=
oFootnotes
.
SaveRecalculateObject
();
oFootnotesObject
=
oFootnotes
.
SaveRecalculateObject
(
nPageAbs
,
nColumnAbs
);
nFootnotesHeight
=
oFootnotes
.
GetHeight
(
nPageAbs
,
nColumnAbs
);
nSavedY
=
Y
;
nSavedTableHeight
=
TableHeight
;
...
...
@@ -2215,9 +2216,6 @@ CTable.prototype.private_RecalculatePage = function(CurPage)
var
VerticallCells
=
[];
var
bAllCellsVertical
=
true
;
var
bNeedRecalcFootnotes
=
false
;
var
nCurFootnotesHeight
=
0
;
for
(
var
CurCell
=
0
;
CurCell
<
CellsCount
;
CurCell
++
)
{
var
Cell
=
Row
.
Get_Cell
(
CurCell
);
...
...
@@ -2233,7 +2231,7 @@ CTable.prototype.private_RecalculatePage = function(CurPage)
var
X_content_end
=
Page
.
X
+
CellMetrics
.
X_content_end
;
var
Y_content_start
=
Y
+
CellMar
.
Top
.
W
;
var
Y_content_end
=
this
.
Pages
[
CurPage
].
YLimit
+
nFootnotesHeight
;
var
Y_content_end
=
this
.
Pages
[
CurPage
].
YLimit
-
nFootnotesHeight
;
// TODO: При расчете YLimit для ячейки сделать учет толщины нижних
// границ ячейки и таблицы
...
...
@@ -2372,27 +2370,18 @@ CTable.prototype.private_RecalculatePage = function(CurPage)
}
}
if
(
oFootnotes
)
{
nCurFootnotesHeight
=
oFootnotes
.
GetHeight
(
nPageAbs
,
nColumnAbs
);
if
(
Math
.
abs
(
nCurFootnotesHeight
-
nFootnotesHeight
)
>
0.001
)
{
bNeedRecalcFootnotes
=
true
;
break
;
}
}
CurGridCol
+=
GridSpan
;
}
if
(
true
===
bNeedRecalcFootnotes
&&
nCurFootnotesHeight
>
nFootnotesHeight
)
var
nCurFootnotesHeight
=
oFootnotes
?
oFootnotes
.
GetHeight
(
nPageAbs
,
nColumnAbs
)
:
0
;
if
(
oFootnotes
&&
nCurFootnotesHeight
>
nFootnotesHeight
+
0.001
)
{
nFootnotesHeight
=
nCurFootnotesHeight
;
bResetFootnotes
=
false
;
Y
=
nSavedY
;
TableHeight
=
nSavedTableHeight
;
oFootnotes
.
LoadRecalculateObject
(
oFootnotesObject
);
oFootnotes
.
LoadRecalculateObject
(
nPageAbs
,
nColumnAbs
,
oFootnotesObject
);
CurRow
--
;
continue
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment