int PR_XML_LANG = 268;
/** Property constant */
int PR_Z_INDEX = 269;
- /** Property constant - FOP proprietary: Custom extension for line alignment */
- int PR_X_BLOCK_PROGRESSION_UNIT = 270;
/** Property constant - FOP proprietary: limit for widow content in lists and tables */
- int PR_X_WIDOW_CONTENT_LIMIT = 271;
+ int PR_X_WIDOW_CONTENT_LIMIT = 270;
/** Property constant - FOP proprietary: limit for orphan content in lists and tables */
- int PR_X_ORPHAN_CONTENT_LIMIT = 272;
+ int PR_X_ORPHAN_CONTENT_LIMIT = 271;
/**
* Property constant - FOP proprietary: disable balancing of columns in
* multi-column layouts.
*/
- int PR_X_DISABLE_COLUMN_BALANCING = 273;
+ int PR_X_DISABLE_COLUMN_BALANCING = 272;
/**
* Property constant - FOP proprietary: alternative text for e-g and i-f-o.
* Used for accessibility.
*/
- int PR_X_ALT_TEXT = 274;
+ int PR_X_ALT_TEXT = 273;
/** Property constant - FOP proprietary prototype (in XSL-FO 2.0 Requirements) */
- int PR_X_XML_BASE = 275;
+ int PR_X_XML_BASE = 274;
/** Property constant FOP proprietary*/
- int PR_X_BORDER_BEFORE_RADIUS_START = 276;
+ int PR_X_BORDER_BEFORE_RADIUS_START = 275;
/** Property constant FOP proprietary*/
- int PR_X_BORDER_BEFORE_RADIUS_END = 277;
+ int PR_X_BORDER_BEFORE_RADIUS_END = 276;
/** Property constant FOP proprietary*/
- int PR_X_BORDER_AFTER_RADIUS_START = 278;
+ int PR_X_BORDER_AFTER_RADIUS_START = 277;
/** Property constant FOP proprietary*/
- int PR_X_BORDER_AFTER_RADIUS_END = 279;
+ int PR_X_BORDER_AFTER_RADIUS_END = 278;
/** Property constant FOP proprietary*/
- int PR_X_BORDER_START_RADIUS_BEFORE = 280;
+ int PR_X_BORDER_START_RADIUS_BEFORE = 279;
/** Property constant FOP proprietary*/
- int PR_X_BORDER_START_RADIUS_AFTER = 281;
+ int PR_X_BORDER_START_RADIUS_AFTER = 280;
/** Property constant FOP proprietary*/
- int PR_X_BORDER_END_RADIUS_BEFORE = 282;
+ int PR_X_BORDER_END_RADIUS_BEFORE = 281;
/** Property constant FOP proprietary*/
- int PR_X_BORDER_END_RADIUS_AFTER = 283;
+ int PR_X_BORDER_END_RADIUS_AFTER = 282;
/** Property constant FOP proprietary*/
- int PR_X_BORDER_RADIUS = 284;
+ int PR_X_BORDER_RADIUS = 283;
/** Property constant FOP proprietary*/
- int PR_X_BORDER_BEFORE_START_RADIUS = 285;
+ int PR_X_BORDER_BEFORE_START_RADIUS = 284;
/** Property constant FOP proprietary*/
- int PR_X_BORDER_BEFORE_END_RADIUS = 286;
+ int PR_X_BORDER_BEFORE_END_RADIUS = 285;
/** Property constant FOP proprietary*/
- int PR_X_BORDER_AFTER_START_RADIUS = 287;
+ int PR_X_BORDER_AFTER_START_RADIUS = 286;
/** Property constant FOP proprietary*/
- int PR_X_BORDER_AFTER_END_RADIUS = 288;
+ int PR_X_BORDER_AFTER_END_RADIUS = 287;
/**
* Property constant - FOP proprietary extension (see NumberConverter) used
* to perform additional control over number conversion when generating page
* numbers.
*/
- int PR_X_NUMBER_CONVERSION_FEATURES = 289;
+ int PR_X_NUMBER_CONVERSION_FEATURES = 288;
/** Scope for table header */
- int PR_X_HEADER_COLUMN = 290;
+ int PR_X_HEADER_COLUMN = 289;
/** For specifying PDF optional content group (layer) binding. */
- int PR_X_LAYER = 291;
+ int PR_X_LAYER = 290;
/** Property constant */
- int PR_X_AUTO_TOGGLE = 292;
+ int PR_X_AUTO_TOGGLE = 291;
/** Used for scaling of background images */
- int PR_X_BACKGROUND_IMAGE_WIDTH = 293;
- int PR_X_BACKGROUND_IMAGE_HEIGHT = 294;
+ int PR_X_BACKGROUND_IMAGE_WIDTH = 292;
+ int PR_X_BACKGROUND_IMAGE_HEIGHT = 293;
/** Number of property constants defined */
- int PROPERTY_COUNT = 294;
+ int PROPERTY_COUNT = 293;
// compound property constants
int EN_WIDER = 160;
/** Enumeration constant */
int EN_WRAP = 161;
- /** Enumeration constant - non-standard for display-align */
- int EN_X_FILL = 162;
- /** Enumeration constant - non-standard for display-align */
- int EN_X_DISTRIBUTE = 163;
/** Enumeration constant */
- int EN_ITALIC = 164;
+ int EN_ITALIC = 162;
/** Enumeration constant */
- int EN_OBLIQUE = 165;
+ int EN_OBLIQUE = 163;
/** Enumeration constant */
- int EN_BACKSLANT = 166;
+ int EN_BACKSLANT = 164;
/** Enumeration constant */
- int EN_BOLDER = 167;
+ int EN_BOLDER = 165;
/** Enumeration constant */
- int EN_LIGHTER = 168;
+ int EN_LIGHTER = 166;
/** Enumeration constant */
- int EN_100 = 169;
+ int EN_100 = 167;
/** Enumeration constant */
- int EN_200 = 170;
+ int EN_200 = 168;
/** Enumeration constant */
- int EN_300 = 171;
+ int EN_300 = 169;
/** Enumeration constant */
- int EN_400 = 172;
+ int EN_400 = 170;
/** Enumeration constant */
- int EN_500 = 173;
+ int EN_500 = 171;
/** Enumeration constant */
- int EN_600 = 174;
+ int EN_600 = 172;
/** Enumeration constant */
- int EN_700 = 175;
+ int EN_700 = 173;
/** Enumeration constant */
- int EN_800 = 176;
+ int EN_800 = 174;
/** Enumeration constant */
- int EN_900 = 177;
+ int EN_900 = 175;
/** Enumeration constant -- page-break-shorthand */
- int EN_AVOID = 178;
+ int EN_AVOID = 176;
/** Enumeration constant -- white-space shorthand */
- int EN_PRE = 179;
+ int EN_PRE = 177;
/** Enumeration constant -- font shorthand */
- int EN_CAPTION = 180;
+ int EN_CAPTION = 178;
/** Enumeration constant -- font shorthand */
- int EN_ICON = 181;
+ int EN_ICON = 179;
/** Enumeration constant -- font shorthand */
- int EN_MENU = 182;
+ int EN_MENU = 180;
/** Enumeration constant -- font shorthand */
- int EN_MESSAGE_BOX = 183;
+ int EN_MESSAGE_BOX = 181;
/** Enumeration constant -- font shorthand */
- int EN_SMALL_CAPTION = 184;
+ int EN_SMALL_CAPTION = 182;
/** Enumeration constant -- font shorthand */
- int EN_STATUS_BAR = 185;
+ int EN_STATUS_BAR = 183;
/** Enumeration constant -- for page-position, XSL 1.1 */
- int EN_ONLY = 186;
+ int EN_ONLY = 184;
/** Enumeration constant -- for instream-foreign-object and external-graphic, XSL 1.1 */
- int EN_SCALE_DOWN_TO_FIT = 187;
+ int EN_SCALE_DOWN_TO_FIT = 185;
/** Enumeration constant -- for instream-foreign-object and external-graphic, XSL 1.1 */
- int EN_SCALE_UP_TO_FIT = 188;
+ int EN_SCALE_UP_TO_FIT = 186;
/** Enumeration constant -- for fo:basic-link show-destination */
- int EN_REPLACE = 189;
+ int EN_REPLACE = 187;
/** Enumeration constant -- for fo:basic-link show-destination */
- int EN_NEW = 190;
+ int EN_NEW = 188;
/** Enumeration constant -- for fo:retrieve-table-marker */
- int EN_FIRST_STARTING = 191;
+ int EN_FIRST_STARTING = 189;
/** Enumeration constant -- for fo:retrieve-table-marker */
- int EN_LAST_STARTING = 192;
+ int EN_LAST_STARTING = 190;
/** Enumeration constant -- for fo:retrieve-table-marker */
- int EN_LAST_ENDING = 193;
+ int EN_LAST_ENDING = 191;
/** Enumeration constant -- for fo:retrieve-table-marker */
- int EN_TABLE = 194;
+ int EN_TABLE = 192;
/** Enumeration constant -- for fo:retrieve-table-marker */
- int EN_TABLE_FRAGMENT = 195;
+ int EN_TABLE_FRAGMENT = 193;
/** Enumeration constant -- XSL 1.1 */
- int EN_MERGE = 196;
+ int EN_MERGE = 194;
/** Enumeration constant -- XSL 1.1 */
- int EN_LEAVE_SEPARATE = 197;
+ int EN_LEAVE_SEPARATE = 195;
/** Enumeration constant -- XSL 1.1 */
- int EN_LINK = 198;
+ int EN_LINK = 196;
/** Enumeration constant -- XSL 1.1 */
- int EN_NO_LINK = 199;
+ int EN_NO_LINK = 197;
/** Enumeration constant -- XSL 1.1 */
- int EN_ALTERNATE = 200;
+ int EN_ALTERNATE = 198;
/** Enumeration constant -- for *-direction traits */
- int EN_LR = 201; // left to right
+ int EN_LR = 199; // left to right
/** Enumeration constant -- for *-direction traits */
- int EN_RL = 202; // right to left
+ int EN_RL = 200; // right to left
/** Enumeration constant -- for *-direction traits */
- int EN_TB = 203; // top to bottom
+ int EN_TB = 201; // top to bottom
/** Enumeration constant -- for *-direction traits */
- int EN_BT = 204; // bottom to top
+ int EN_BT = 202; // bottom to top
/** Enumeration constant */
- int EN_TB_LR = 205; // for top-to-bottom, left-to-right writing mode
+ int EN_TB_LR = 203; // for top-to-bottom, left-to-right writing mode
/** Enumeration constant -- for fo:retrieve-table-marker */
- int EN_FIRST_INCLUDING_CARRYOVER = 206;
+ int EN_FIRST_INCLUDING_CARRYOVER = 204;
/** Enumeration constant -- for auto-toggle */
- int EN_SELECT_FIRST_FITTING = 207;
+ int EN_SELECT_FIRST_FITTING = 205;
/** Number of enumeration constants defined */
- int ENUM_COUNT = 207;
+ int ENUM_COUNT = 205;
}
if (this.size() > ignoreAtStart) {
// add the elements representing the space at the end of the last line
// and the forced break
- if (getDisplayAlign() == Constants.EN_X_DISTRIBUTE && isSinglePartFavored()) {
- this.add(new KnuthPenalty(0, -KnuthElement.INFINITE,
- false, breakPosition, false));
- ignoreAtEnd = 1;
- } else {
- this.add(new KnuthPenalty(0, KnuthElement.INFINITE,
- false, null, false));
- this.add(new KnuthGlue(0, 10000000, 0, null, false));
- this.add(new KnuthPenalty(0, -KnuthElement.INFINITE,
- false, breakPosition, false));
- ignoreAtEnd = 3;
- }
+ this.add(new KnuthPenalty(0, KnuthElement.INFINITE,
+ false, null, false));
+ this.add(new KnuthGlue(0, 10000000, 0, null, false));
+ this.add(new KnuthPenalty(0, -KnuthElement.INFINITE,
+ false, breakPosition, false));
+ ignoreAtEnd = 3;
return this;
} else {
this.clear();
public void doLayout(int flowBPD, boolean autoHeight) {
LayoutContext childLC = createLayoutContext();
childLC.setStackLimitBP(MinOptMax.getInstance(flowBPD));
-
- if (getCurrentDisplayAlign() == Constants.EN_X_FILL) {
- //EN_X_FILL is non-standard (by LF)
- alignment = Constants.EN_JUSTIFY;
- } else if (getCurrentDisplayAlign() == Constants.EN_X_DISTRIBUTE) {
- //EN_X_DISTRIBUTE is non-standard (by LF)
- alignment = Constants.EN_JUSTIFY;
- } else {
- alignment = Constants.EN_START;
- }
+ alignment = Constants.EN_START;
alignmentLast = Constants.EN_START;
- if (isSinglePartFavored() && alignment == Constants.EN_JUSTIFY) {
- alignmentLast = Constants.EN_JUSTIFY;
- }
childLC.setBPAlignment(alignment);
BlockSequence blockList;
alignment, alignmentLast, footnoteSeparatorLength,
isPartOverflowRecoveryActivated(), autoHeight, isSinglePartFavored());
- BlockSequence effectiveList;
- if (getCurrentDisplayAlign() == Constants.EN_X_FILL) {
- /* justification */
- effectiveList = justifyBoxes(blockList, alg, flowBPD);
- } else {
- /* no justification */
- effectiveList = blockList;
- }
-
alg.setConstantLineWidth(flowBPD);
- int optimalPageCount = alg.findBreakingPoints(effectiveList, 1, true,
+ int optimalPageCount = alg.findBreakingPoints(blockList, 1, true,
BreakingAlgorithm.ALL_BREAKS);
if (Math.abs(alg.getIPDdifference()) > 1) {
- addAreas(alg, optimalPageCount, blockList, effectiveList);
+ addAreas(alg, optimalPageCount, blockList, blockList);
// *** redo Phase 1 ***
log.trace("IPD changes after page " + optimalPageCount);
blockLists.clear();
nextSequenceStartsOn = getNextBlockListChangedIPD(childLC, alg,
- effectiveList);
+ blockList);
blockListIndex = -1;
} else {
log.debug("PLM> optimalPageCount= " + optimalPageCount
+ " pageBreaks.size()= " + alg.getPageBreaks().size());
//*** Phase 3: Add areas ***
- doPhase3(alg, optimalPageCount, blockList, effectiveList);
+ doPhase3(alg, optimalPageCount, blockList, blockList);
}
}
}
childLC.setSpaceBefore(pbp.difference / 2);
} else if (pbp.difference != 0 && displayAlign == Constants.EN_AFTER) {
childLC.setSpaceBefore(pbp.difference);
- } else if (pbp.difference != 0 && displayAlign == Constants.EN_X_DISTRIBUTE
- && p < (partCount - 1)) {
- // count the boxes whose width is not 0
- int boxCount = 0;
- @SuppressWarnings("unchecked")
- ListIterator<KnuthElement> effectiveListIterator = effectiveList
- .listIterator(startElementIndex);
- while (effectiveListIterator.nextIndex() <= endElementIndex) {
- KnuthElement tempEl = effectiveListIterator.next();
- if (tempEl.isBox() && tempEl.getWidth() > 0) {
- boxCount++;
- }
- }
- // split the difference
- if (boxCount >= 2) {
- childLC.setSpaceAfter(pbp.difference / (boxCount - 1));
- }
- }
-
- /* *** *** non-standard extension *** *** */
- if (displayAlign == Constants.EN_X_FILL) {
- int averageLineLength = optimizeLineLength(effectiveList,
- startElementIndex, endElementIndex);
- if (averageLineLength != 0) {
- childLC.setStackLimitBP(MinOptMax.getInstance(averageLineLength));
- }
}
- /* *** *** non-standard extension *** *** */
// Handle SpaceHandling(Break)Positions, see SpaceResolver!
SpaceResolver.performConditionalsNotification(effectiveList,
return nextSequenceStartsOn;
}
- /**
- * Returns the average width of all the lines in the given range.
- * @param effectiveList effective block list to work on
- * @param startElementIndex index of the element starting the range
- * @param endElementIndex index of the element ending the range
- * @return the average line length, 0 if there's no content
- */
- private int optimizeLineLength(KnuthSequence effectiveList, int startElementIndex,
- int endElementIndex) {
- ListIterator<KnuthElement> effectiveListIterator;
- // optimize line length
- int boxCount = 0;
- int accumulatedLineLength = 0;
- int greatestMinimumLength = 0;
- effectiveListIterator = effectiveList.listIterator(startElementIndex);
- while (effectiveListIterator.nextIndex() <= endElementIndex) {
- KnuthElement tempEl = effectiveListIterator
- .next();
- if (tempEl instanceof KnuthBlockBox) {
- KnuthBlockBox blockBox = (KnuthBlockBox) tempEl;
- if (blockBox.getBPD() > 0) {
- log.debug("PSLM> nominal length of line = " + blockBox.getBPD());
- log.debug(" range = "
- + blockBox.getIPDRange());
- boxCount++;
- accumulatedLineLength += ((KnuthBlockBox) tempEl)
- .getBPD();
- }
- if (blockBox.getIPDRange().getMin() > greatestMinimumLength) {
- greatestMinimumLength = blockBox
- .getIPDRange().getMin();
- }
- }
- }
- int averageLineLength = 0;
- if (accumulatedLineLength > 0 && boxCount > 0) {
- averageLineLength = accumulatedLineLength / boxCount;
- log.debug("Average line length = " + averageLineLength);
- if (averageLineLength < greatestMinimumLength) {
- averageLineLength = greatestMinimumLength;
- log.debug(" Correction to: " + averageLineLength);
- }
- }
- return averageLineLength;
- }
-
- /**
- * Justifies the boxes and returns them as a new KnuthSequence.
- * @param blockList block list to justify
- * @param alg reference to the algorithm instance
- * @param availableBPD the available BPD
- * @return the effective list
- */
- private BlockSequence justifyBoxes(
- BlockSequence blockList, PageBreakingAlgorithm alg, int availableBPD) {
- int optimalPageCount;
- alg.setConstantLineWidth(availableBPD);
- optimalPageCount = alg.findBreakingPoints(blockList, /*availableBPD,*/
- 1, true, BreakingAlgorithm.ALL_BREAKS);
- log.debug("PLM> optimalPageCount= " + optimalPageCount);
-
- //
- ListIterator<KnuthElement> sequenceIterator = blockList.listIterator();
- ListIterator<PageBreakPosition> breakIterator = alg.getPageBreaks().listIterator();
- KnuthElement thisElement = null;
- PageBreakPosition thisBreak;
- int adjustedDiff; // difference already adjusted
-
- while (breakIterator.hasNext()) {
- thisBreak = breakIterator.next();
- if (log.isDebugEnabled()) {
- log.debug("| first page: break= "
- + thisBreak.getLeafPos() + " difference= "
- + thisBreak.difference + " ratio= "
- + thisBreak.bpdAdjust);
- }
- adjustedDiff = 0;
-
- // glue and penalty items at the beginning of the page must
- // be ignored:
- // the first element returned by sequenceIterator.next()
- // inside the
- // while loop must be a box
- KnuthElement firstElement;
- while (sequenceIterator.hasNext()) {
- firstElement = sequenceIterator.next();
- if (!firstElement.isBox()) {
- log.debug("PLM> ignoring glue or penalty element "
- + "at the beginning of the sequence");
- if (firstElement.isGlue()) {
- ((BlockLevelLayoutManager) firstElement
- .getLayoutManager())
- .discardSpace((KnuthGlue) firstElement);
- }
- } else {
- break;
- }
- }
- sequenceIterator.previous();
-
- // scan the sub-sequence representing a page,
- // collecting information about potential adjustments
- MinOptMax lineNumberMaxAdjustment = MinOptMax.ZERO;
- MinOptMax spaceMaxAdjustment = MinOptMax.ZERO;
- LinkedList<KnuthGlue> blockSpacesList = new LinkedList<KnuthGlue>();
- LinkedList<KnuthGlue> unconfirmedList = new LinkedList<KnuthGlue>();
- LinkedList<KnuthGlue> adjustableLinesList = new LinkedList<KnuthGlue>();
- boolean bBoxSeen = false;
- while (sequenceIterator.hasNext()
- && sequenceIterator.nextIndex() <= thisBreak.getLeafPos()) {
- thisElement = sequenceIterator.next();
- if (thisElement.isGlue()) {
- // glue elements are used to represent adjustable
- // lines
- // and adjustable spaces between blocks
- KnuthGlue thisGlue = (KnuthGlue) thisElement;
- Adjustment adjustment = thisGlue.getAdjustmentClass();
- if (adjustment.equals(Adjustment.SPACE_BEFORE_ADJUSTMENT)
- || adjustment.equals(Adjustment.SPACE_AFTER_ADJUSTMENT)) {
- // potential space adjustment
- // glue items before the first box or after the
- // last one
- // must be ignored
- unconfirmedList.add(thisGlue);
- } else if (adjustment.equals(Adjustment.LINE_NUMBER_ADJUSTMENT)) {
- // potential line number adjustment
- lineNumberMaxAdjustment
- = lineNumberMaxAdjustment.plusMax(thisElement.getStretch());
- lineNumberMaxAdjustment
- = lineNumberMaxAdjustment.minusMin(thisElement.getShrink());
- adjustableLinesList.add(thisGlue);
- } else if (adjustment.equals(Adjustment.LINE_HEIGHT_ADJUSTMENT)) {
- // potential line height adjustment
- }
- } else if (thisElement.isBox()) {
- if (!bBoxSeen) {
- // this is the first box met in this page
- bBoxSeen = true;
- } else {
- while (!unconfirmedList.isEmpty()) {
- // glue items in unconfirmedList were not after
- // the last box
- // in this page; they must be added to
- // blockSpaceList
- KnuthGlue blockSpace = unconfirmedList.removeFirst();
- spaceMaxAdjustment
- = spaceMaxAdjustment.plusMax(blockSpace.getStretch());
- spaceMaxAdjustment
- = spaceMaxAdjustment.minusMin(blockSpace.getShrink());
- blockSpacesList.add(blockSpace);
- }
- }
- }
- }
- log.debug("| line number adj= "
- + lineNumberMaxAdjustment);
- log.debug("| space adj = "
- + spaceMaxAdjustment);
-
- if (thisElement.isPenalty() && thisElement.getWidth() > 0) {
- log.debug(" mandatory variation to the number of lines!");
- ((BlockLevelLayoutManager) thisElement
- .getLayoutManager()).negotiateBPDAdjustment(
- thisElement.getWidth(), thisElement);
- }
-
- if (thisBreak.bpdAdjust != 0
- && (thisBreak.difference > 0 && thisBreak.difference <= spaceMaxAdjustment
- .getMax())
- || (thisBreak.difference < 0 && thisBreak.difference >= spaceMaxAdjustment
- .getMin())) {
- // modify only the spaces between blocks
- adjustedDiff += adjustBlockSpaces(
- blockSpacesList,
- thisBreak.difference,
- (thisBreak.difference > 0 ? spaceMaxAdjustment.getMax()
- : -spaceMaxAdjustment.getMin()));
- log.debug("single space: "
- + (adjustedDiff == thisBreak.difference
- || thisBreak.bpdAdjust == 0 ? "ok"
- : "ERROR"));
- } else if (thisBreak.bpdAdjust != 0) {
- adjustedDiff += adjustLineNumbers(
- adjustableLinesList,
- thisBreak.difference,
- (thisBreak.difference > 0 ? lineNumberMaxAdjustment.getMax()
- : -lineNumberMaxAdjustment.getMin()));
- adjustedDiff += adjustBlockSpaces(
- blockSpacesList,
- thisBreak.difference - adjustedDiff,
- ((thisBreak.difference - adjustedDiff) > 0 ? spaceMaxAdjustment.getMax()
- : -spaceMaxAdjustment.getMin()));
- log.debug("lines and space: "
- + (adjustedDiff == thisBreak.difference
- || thisBreak.bpdAdjust == 0 ? "ok"
- : "ERROR"));
-
- }
- }
-
- // create a new sequence: the new elements will contain the
- // Positions
- // which will be used in the addAreas() phase
- BlockSequence effectiveList = new BlockSequence(blockList.getStartOn(),
- blockList.getDisplayAlign());
- effectiveList.addAll(getCurrentChildLM().getChangedKnuthElements(
- blockList.subList(0, blockList.size() - blockList.ignoreAtEnd),
- /* 0, */0));
- //effectiveList.add(new KnuthPenalty(0, -KnuthElement.INFINITE,
- // false, new Position(this), false));
- effectiveList.endSequence();
-
- ElementListObserver.observe(effectiveList, "breaker-effective", null);
-
- alg.getPageBreaks().clear(); //Why this?
- return effectiveList;
- }
-
- private int adjustBlockSpaces(LinkedList<KnuthGlue> spaceList, int difference, int total) {
- if (log.isDebugEnabled()) {
- log.debug("AdjustBlockSpaces: difference " + difference + " / " + total
- + " on " + spaceList.size() + " spaces in block");
- }
- ListIterator<KnuthGlue> spaceListIterator = spaceList.listIterator();
- int adjustedDiff = 0;
- int partial = 0;
- while (spaceListIterator.hasNext()) {
- KnuthGlue blockSpace = spaceListIterator.next();
- partial += (difference > 0 ? blockSpace.getStretch() : blockSpace.getShrink());
- if (log.isDebugEnabled()) {
- log.debug("available = " + partial + " / " + total);
- log.debug("competenza = "
- + (((int)((float) partial * difference / total)) - adjustedDiff)
- + " / " + difference);
- }
- int newAdjust = ((BlockLevelLayoutManager) blockSpace.getLayoutManager())
- .negotiateBPDAdjustment(
- ((int) ((float) partial * difference / total)) - adjustedDiff, blockSpace);
- adjustedDiff += newAdjust;
- }
- return adjustedDiff;
- }
-
- private int adjustLineNumbers(LinkedList<KnuthGlue> lineList, int difference, int total) {
- if (log.isDebugEnabled()) {
- log.debug("AdjustLineNumbers: difference "
- + difference
- + " / "
- + total
- + " on "
- + lineList.size()
- + " elements");
- }
-
- ListIterator<KnuthGlue> lineListIterator = lineList.listIterator();
- int adjustedDiff = 0;
- int partial = 0;
- while (lineListIterator.hasNext()) {
- KnuthGlue line = lineListIterator.next();
- partial += (difference > 0 ? line.getStretch() : line.getShrink());
- int newAdjust = ((BlockLevelLayoutManager) line.getLayoutManager())
- .negotiateBPDAdjustment(
- ((int) ((float) partial * difference / total)) - adjustedDiff, line);
- adjustedDiff += newAdjust;
- }
- return adjustedDiff;
- }
-
}
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<!-- $Id$ -->
-<testcase>
- <info>
- <p>
- This test checks display-align="distribute" (The value "distribute" is a proprietary extension to XSL-FO).
- </p>
- </info>
- <fo>
- <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:svg="http://www.w3.org/2000/svg">
- <fo:layout-master-set>
- <fo:simple-page-master master-name="normal" page-width="5in" page-height="5in">
- <fo:region-body column-count="4" column-gap="5pt"/>
- </fo:simple-page-master>
- </fo:layout-master-set>
- <fo:page-sequence master-reference="normal" white-space-collapse="true">
- <fo:flow flow-name="xsl-region-body">
- <fo:block-container width="100%" height="4.2in" display-align="distribute" background-color="yellow">
- <fo:block space-after.minimum="0.5em" space-after.optimum="1em" space-after.maximum="2em">
- "distribute" 4.2in
- Text 1 Text 1 Text 1 Text 1 Text 1 Text 1 Text 1 Text 1
- </fo:block>
- <fo:block space-after.minimum="0.5em" space-after.optimum="1em" space-after.maximum="2em">
- Text 1 Text 1 Text 1 Text 1 Text 1 Text 1 Text 1 Text 1
- </fo:block>
- <fo:block space-after.minimum="0.5em" space-after.optimum="1em" space-after.maximum="2em">
- Text 1 Text 1 Text 1 Text 1 Text 1 Text 1 Text 1 Text 1
- </fo:block>
- <fo:block space-after.minimum="0.5em" space-after.optimum="1em" space-after.maximum="2em">
- <!-- last -->
- Text 1 Text 1 Text 1 Text 1 Text 1 Text 1 Text 1 Text 1
- </fo:block>
- </fo:block-container>
- <fo:block-container width="100%" height="4.8in" display-align="distribute" background-color="yellow">
- <fo:block space-after.minimum="0.5em" space-after.optimum="1em" space-after.maximum="2em">
- "distribute" 4.8in
- Text 1 Text 1 Text 1 Text 1 Text 1 Text 1 Text 1 Text 1
- </fo:block>
- <fo:block space-after.minimum="0.5em" space-after.optimum="1em" space-after.maximum="2em">
- Text 1 Text 1 Text 1 Text 1 Text 1 Text 1 Text 1 Text 1
- </fo:block>
- <fo:block space-after.minimum="0.5em" space-after.optimum="1em" space-after.maximum="2em">
- Text 1 Text 1 Text 1 Text 1 Text 1 Text 1 Text 1 Text 1
- </fo:block>
- <fo:block space-after.minimum="0.5em" space-after.optimum="1em" space-after.maximum="2em">
- <!-- last -->
- Text 1 Text 1 Text 1 Text 1 Text 1 Text 1 Text 1 Text 1
- </fo:block>
- </fo:block-container>
- <fo:block-container width="100%" height="3.85in" display-align="distribute" background-color="yellow">
- <fo:block space-after.minimum="0.5em" space-after.optimum="1em" space-after.maximum="2em">
- "distribute" 3.85in
- Text 1 Text 1 Text 1 Text 1 Text 1 Text 1 Text 1 Text 1
- </fo:block>
- <fo:block space-after.minimum="0.5em" space-after.optimum="1em" space-after.maximum="2em">
- Text 1 Text 1 Text 1 Text 1 Text 1 Text 1 Text 1 Text 1
- </fo:block>
- <fo:block space-after.minimum="0.5em" space-after.optimum="1em" space-after.maximum="2em">
- Text 1 Text 1 Text 1 Text 1 Text 1 Text 1 Text 1 Text 1
- </fo:block>
- <fo:block space-after.minimum="0.5em" space-after.optimum="1em" space-after.maximum="2em">
- <!-- last -->
- Text 1 Text 1 Text 1 Text 1 Text 1 Text 1 Text 1 Text 1
- </fo:block>
- </fo:block-container>
- <fo:block-container width="100%" height="4.2in" display-align="auto" background-color="orange">
- <fo:block space-after.minimum="0.5em" space-after.optimum="1em" space-after.maximum="2em">
- "auto"
- Text 1 Text 1 Text 1 Text 1 Text 1 Text 1 Text 1 Text 1
- </fo:block>
- <fo:block space-after.minimum="0.5em" space-after.optimum="1em" space-after.maximum="2em">
- Text 1 Text 1 Text 1 Text 1 Text 1 Text 1 Text 1 Text 1
- </fo:block>
- <fo:block space-after.minimum="0.5em" space-after.optimum="1em" space-after.maximum="2em">
- Text 1 Text 1 Text 1 Text 1 Text 1 Text 1 Text 1 Text 1
- </fo:block>
- <fo:block space-after.minimum="0.5em" space-after.optimum="1em" space-after.maximum="2em">
- <!-- last -->
- Text 1 Text 1 Text 1 Text 1 Text 1 Text 1 Text 1 Text 1
- </fo:block>
- </fo:block-container>
- </fo:flow>
- </fo:page-sequence>
- </fo:root>
- </fo>
- <checks>
- <!-- check with 3 mpt tolerance -->
- <eval expected="0" xpath="//flow[1]/block[1]/@bpd - //flow[1]/block[1]/block[1]/@bpd" tolerance="3"/>
- <eval expected="14400" xpath="//flow[2]/block[1]/@bpd - //flow[2]/block[1]/block[1]/@bpd" tolerance="3"/>
- <eval expected="0" xpath="//flow[3]/block[1]/@bpd - //flow[3]/block[1]/block[1]/@bpd" tolerance="3"/>
- <eval expected="21600" xpath="//flow[4]/block[1]/@bpd - //flow[4]/block[1]/block[1]/@bpd" tolerance="3"/>
- </checks>
-</testcase>