package org.apache.fop.layoutmgr;
import java.util.LinkedList;
import java.util.List;
import org.apache.fop.fo.FObj;
import org.apache.fop.layoutmgr.PageBreakingAlgorithm.PageBreakingLayoutListener;
import org.apache.fop.layoutmgr.inline.TextLayoutManager;
public abstract class LocalBreaker extends AbstractBreaker {
protected BlockStackingLayoutManager lm;
private int displayAlign;
private int ipd;
private int overflow;
private boolean ;
private boolean ;
private boolean ;
public void (boolean repeatedFooter) {
this.repeatedFooter = repeatedFooter;
}
public void (boolean isDescendantOfTableFooter) {
this.isDescendantOfTableFooter = isDescendantOfTableFooter;
}
public LocalBreaker(BlockStackingLayoutManager lm, int ipd, int displayAlign) {
this.lm = lm;
this.ipd = ipd;
this.displayAlign = displayAlign;
}
public void (boolean repeatedHeader) {
this.repeatedHeader = repeatedHeader;
}
protected boolean isPartOverflowRecoveryActivated() {
return false;
}
public boolean isOverflow() {
return (this.overflow != 0);
}
public int getOverflowAmount() {
return this.overflow;
}
protected PageBreakingLayoutListener createLayoutListener() {
return new PageBreakingLayoutListener() {
public void notifyOverflow(int part, int amount, FObj obj) {
if (LocalBreaker.this.overflow == 0) {
LocalBreaker.this.overflow = amount;
}
}
};
}
protected LayoutManager getTopLevelLM() {
return lm;
}
protected LayoutContext createLayoutContext() {
LayoutContext lc = super.createLayoutContext();
lc.setRefIPD(ipd);
return lc;
}
protected List getNextKnuthElements(LayoutContext context, int alignment) {
LayoutManager curLM;
List returnList = new LinkedList();
while ((curLM = lm.getChildLM()) != null) {
LayoutContext childLC = LayoutContext.newInstance();
childLC.setStackLimitBP(context.getStackLimitBP());
childLC.setRefIPD(context.getRefIPD());
childLC.setWritingMode(context.getWritingMode());
List returnedList = null;
boolean ignore = curLM instanceof TextLayoutManager;
if (!curLM.isFinished()) {
returnedList = curLM.getNextKnuthElements(childLC, alignment);
}
if (returnedList != null && !ignore) {
lm.wrapPositionElements(returnedList, returnList);
}
}
SpaceResolver.resolveElementList(returnList);
lm.setFinished(true);
return returnList;
}
protected int getCurrentDisplayAlign() {
return displayAlign;
}
protected boolean hasMoreContent() {
return !lm.isFinished();
}
protected void addAreas(PositionIterator posIter, LayoutContext context) {
if (isDescendantOfTableFooter) {
if (repeatedHeader) {
context.setTreatAsArtifact(true);
}
} else {
if (repeatedFooter) {
context.setTreatAsArtifact(true);
}
}
AreaAdditionUtil.addAreas(lm, posIter, context);
}
protected void doPhase3(PageBreakingAlgorithm alg, int partCount, BlockSequence originalList,
BlockSequence effectiveList) {
if (partCount > 1) {
PageBreakPosition pos = alg.getPageBreaks().getFirst();
int firstPartLength = ElementListUtils.calcContentLength(effectiveList,
effectiveList.ignoreAtStart, pos.getLeafPos());
overflow += alg.totalWidth - firstPartLength;
}
alg.removeAllPageBreaks();
this.addAreas(alg, 1, originalList, effectiveList);
}
protected void finishPart(PageBreakingAlgorithm alg, PageBreakPosition pbp) {
}
protected LayoutManager getCurrentChildLM() {
return null;
}
}