As you may have seen I've been working through the layoutengine testcases to fix various failures/bugs last week. One of the last problems that need to be fixed is markers. Markers already work fine under the new page breaking mechanism when an FO is not broken over the page/column boundaries.
The problem is getting the two last booleans on getCurrentPV().addMarkers() right. Currently the calls are hardcoded to: getCurrentPV().addMarkers(markers, true, true, false); and getCurrentPV().addMarkers(markers, false, false, true); The isfirst and islast parameters must be set correctly. Currently, I don't see a reliable way to determine these values. For example, there's some code in AreaAdditionUtils that sets IS_FIRST and IS_LAST flags on the layout context but I found this doesn't work reliably. I've experimented with two other approaches both of which were not good enough. One (flags on Position instances) failed because the first n elements at the beginning of the element list may be removed which also removed the marker for the first element in the list. The other (counting Position instances) failed because the element list may be modified after the initial generation thus throwing off counters. I discarded this mainly because I didn't want to make the code more complicated just to get the indices right again. The only thing that sounds like worth pursuing right now is to do look-behind and look-ahead in the Position iterator, which is in a way extending the approach that is currently visible in AreaAdditionUtils. This approach checks whether the current LM changes or not. Maybe someone has another idea on how to approach this problem. I'll let it rest for a moment until I've made keeps and breaks work on tables. Jeremias Maerki
