On Thu, 16 Jan 2003, Tomas Frydrych wrote: > > > > The corner case of inserting footnote into the last line doesn't quite > > work yet. I suspect a rounding erreo. > > Martin, it might be some consolation to you that MS is not able to > handle this case ever since the 32 verison of Word came out, in > spite of numerous complains from the academia (I recall that > Edinburgh University had an entire webpage dedicated to > workaround for this nuisance). I am sure, though, we can do better. >
He He :-) This commit gives us perfect behaviour. The last line gets pushed onto the next page along with it's footnote if you insert a footnote there. The algorithim is very simple and appears nicely robust. It works perfectly for multiple columns per page. The algorthimn works by simply subtracting the height of the footnotes from the height available for columns during the column breaking. If the footnote is not on the same page as the current column it's height is added to the height of the line containing the footnote - so the line containing footnote reference's is efectively it's own height plus the footnote(s) height. During the procedure where containers are inserted into columns footnotes are paced on the same page as the line containing the reference. It all works nicely :-) Next I'll do some simple corner case detection of back-space or forward deletion of a footnote reference. Then RTF import/export. On the down-side I'm currently getting a number of these asserts followed by crashes during import and zoom changes... **** (1) Assert **** **** (1) (!m_pLastRunToKeep) || (pLine->getLastRun() == m_pLastRunToKeep) at ../../../../../abi-unstable/src/text/fmt/xp/fb_LineBreaker.cpp:622 **** **** (1) Continue ? (y/n) [y] : As is David Chart. I don't really understand what is causing these and I suspect they're related to Jesper Skov's recent work. Does anybody else have an idea of what causes these? Anyway, enjoy footnotes :-) Cheers Martin CVS: ---------------------------------------------------------------------- CVS: Enter Log. Lines beginning with `CVS:' are removed automatically CVS: CVS: Committing in . CVS: CVS: Modified Files: CVS: fmt/xp/fb_ColumnBreaker.cpp fmt/xp/fb_ColumnBreaker.h CVS: fmt/xp/fp_FootnoteContainer.cpp fmt/xp/fp_Line.cpp CVS: fmt/xp/fp_Page.cpp ptbl/xp/pt_PT_DeleteSpan.cpp CVS: ---------------------------------------------------------------------- Footnotes placement algorithim perfect :-)
