Selaa lähdekoodia

Change private element-generating methods to add the elements to a passed List (improves code-readability and reduces the amount of temporary LinkedList instances)


git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@653202 13f79535-47bb-0310-9956-ffa450edef68
tags/fop-1_0
Andreas L. Delmelle 16 vuotta sitten
vanhempi
commit
c8cb0583fc
1 muutettua tiedostoa jossa 147 lisäystä ja 155 poistoa
  1. 147
    155
      src/java/org/apache/fop/layoutmgr/inline/TextLayoutManager.java

+ 147
- 155
src/java/org/apache/fop/layoutmgr/inline/TextLayoutManager.java Näytä tiedosto

@@ -88,7 +88,7 @@ public class TextLayoutManager extends LeafNodeLayoutManager {
this.isSpace = isSpace;
this.breakOppAfter = breakOppAfter;
}
public String toString() {
return "[ lscnt=" + letterSpaceCount
+ ", wscnt=" + wordSpaceCount
@@ -190,15 +190,29 @@ public class TextLayoutManager extends LeafNodeLayoutManager {
}

private KnuthPenalty makeInfinitePenalty() {
return new KnuthPenalty(0, KnuthElement.INFINITE, false, getAuxiliaryPosition(), true);
return new KnuthPenalty(
0,
KnuthElement.INFINITE,
false,
getAuxiliaryPosition(),
true);
}

private KnuthPenalty makeZeroPenalty() {
return new KnuthPenalty(0, 0, false, getAuxiliaryPosition(), true);
return new KnuthPenalty(
0,
0,
false,
getAuxiliaryPosition(),
true);
}

private KnuthInlineBox makeZeroWidthBox() {
return new KnuthInlineBox(0, null, notifyPos(getAuxiliaryPosition()), true);
return new KnuthInlineBox(
0,
null,
notifyPos(getAuxiliaryPosition()),
true);
}

/** {@inheritDoc} */
@@ -519,7 +533,7 @@ public class TextLayoutManager extends LeafNodeLayoutManager {
thisStart = nextStart;
boolean inWord = false;
boolean inWhitespace = false;
char ch = 0;
char ch = 0;
while (nextStart < textArray.length) {
ch = textArray[nextStart];
boolean breakOpportunity = false;
@@ -564,12 +578,12 @@ public class TextLayoutManager extends LeafNodeLayoutManager {
} else if (prevAi != null && !prevAi.isSpace && prevAi.breakIndex > 0) {
char previous = textArray[prevAi.breakIndex - 1];
kern = font.getKernValue(previous, c) * font.getFontSize() / 1000;
}
}
if (kern != 0) {
//log.info("Kerning between " + previous + " and " + c + ": " + kern);
addToLetterAdjust(i, kern);
wordIPD.add(kern);
}
}
}
}
if (kerning && breakOpportunity && !isSpace(ch) && lastIndex > 0 && textArray[lastIndex] == CharUtilities.SOFT_HYPHEN) {
@@ -596,8 +610,8 @@ public class TextLayoutManager extends LeafNodeLayoutManager {
tempStart = nextStart;

//add the elements
sequence.addAll(createElementsForAWordFragment(alignment, ai,
vecAreaInfo.size() - 1, letterSpaceIPD));
addElementsForAWordFragment(sequence, alignment, ai,
vecAreaInfo.size() - 1, letterSpaceIPD);
ai = null;
thisStart = nextStart;
}
@@ -613,8 +627,7 @@ public class TextLayoutManager extends LeafNodeLayoutManager {
prevAi = ai;

// create the elements
sequence.addAll
(createElementsForASpace(alignment, ai, vecAreaInfo.size() - 1));
addElementsForASpace(sequence, alignment, ai, vecAreaInfo.size() - 1);
ai = null;

thisStart = nextStart;
@@ -623,16 +636,15 @@ public class TextLayoutManager extends LeafNodeLayoutManager {
if (ai != null) {
vecAreaInfo.add(ai);
prevAi = ai;
ai.breakOppAfter = ch == CharUtilities.SPACE || breakOpportunity;
sequence.addAll
(createElementsForASpace(alignment, ai, vecAreaInfo.size() - 1));
ai.breakOppAfter = (ch == CharUtilities.SPACE) || breakOpportunity;
addElementsForASpace(sequence, alignment, ai, vecAreaInfo.size() - 1);
ai = null;
}
if (breakAction == LineBreakStatus.EXPLICIT_BREAK) {
if (lineEndBAP != 0) {
sequence.add
(new KnuthGlue(lineEndBAP, 0, 0,
getAuxiliaryPosition(), true));
sequence.add(
new KnuthGlue(lineEndBAP, 0, 0,
getAuxiliaryPosition(), true));
}
sequence.endSequence();
sequence = new InlineKnuthSequence();
@@ -690,12 +702,12 @@ public class TextLayoutManager extends LeafNodeLayoutManager {
} else if (prevAi != null && !prevAi.isSpace) {
char previous = textArray[prevAi.breakIndex - 1];
kern = font.getKernValue(previous, c) * font.getFontSize() / 1000;
}
}
if (kern != 0) {
//log.info("Kerning between " + previous + " and " + c + ": " + kern);
addToLetterAdjust(i, kern);
wordIPD.add(kern);
}
}
}
}
int iLetterSpaces = wordLength - 1;
@@ -709,8 +721,8 @@ public class TextLayoutManager extends LeafNodeLayoutManager {
tempStart = nextStart;

// create the elements
sequence.addAll(createElementsForAWordFragment(alignment, ai,
vecAreaInfo.size() - 1, letterSpaceIPD));
addElementsForAWordFragment(sequence, alignment, ai,
vecAreaInfo.size() - 1, letterSpaceIPD);
ai = null;
} else if (inWhitespace) {
ai = new AreaInfo(thisStart, (short) (nextStart),
@@ -720,14 +732,12 @@ public class TextLayoutManager extends LeafNodeLayoutManager {
vecAreaInfo.add(ai);

// create the elements
sequence.addAll
(createElementsForASpace(alignment, ai, vecAreaInfo.size() - 1));
addElementsForASpace(sequence, alignment, ai, vecAreaInfo.size() - 1);
ai = null;
} else if (ai != null) {
vecAreaInfo.add(ai);
ai.breakOppAfter = ch == CharUtilities.ZERO_WIDTH_SPACE;
sequence.addAll
(createElementsForASpace(alignment, ai, vecAreaInfo.size() - 1));
addElementsForASpace(sequence, alignment, ai, vecAreaInfo.size() - 1);
ai = null;
} else if (ch == NEWLINE) {
if (lineEndBAP != 0) {
@@ -945,12 +955,10 @@ public class TextLayoutManager extends LeafNodeLayoutManager {
AreaInfo ai = (AreaInfo) vecAreaInfo.get(returnedIndex);
if (ai.wordSpaceCount == 0) {
// ai refers either to a word or a word fragment
returnList.addAll
(createElementsForAWordFragment(alignment, ai, returnedIndex, letterSpaceIPD));
addElementsForAWordFragment(returnList, alignment, ai, returnedIndex, letterSpaceIPD);
} else {
// ai refers to a space
returnList.addAll
(createElementsForASpace(alignment, ai, returnedIndex));
addElementsForASpace(returnList, alignment, ai, returnedIndex);
}
returnedIndex++;
} // end of while
@@ -969,9 +977,10 @@ public class TextLayoutManager extends LeafNodeLayoutManager {
}
}

private LinkedList createElementsForASpace(int alignment,
AreaInfo ai, int leafValue) {
LinkedList spaceElements = new LinkedList();
private void addElementsForASpace(List baseList,
int alignment,
AreaInfo ai,
int leafValue) {
LeafPosition mainPosition = new LeafPosition(this, leafValue);

if (!ai.breakOppAfter) {
@@ -979,14 +988,14 @@ public class TextLayoutManager extends LeafNodeLayoutManager {
if (alignment == EN_JUSTIFY) {
// the space can stretch and shrink, and must be preserved
// when starting a line
spaceElements.add(makeZeroWidthBox());
spaceElements.add(makeInfinitePenalty());
spaceElements.add(new KnuthGlue(ai.areaIPD.opt, ai.areaIPD.max - ai.areaIPD.opt,
baseList.add(makeZeroWidthBox());
baseList.add(makeInfinitePenalty());
baseList.add(new KnuthGlue(ai.areaIPD.opt, ai.areaIPD.max - ai.areaIPD.opt,
ai.areaIPD.opt - ai.areaIPD.min, mainPosition, false));
} else {
// the space does not need to stretch or shrink, and must be
// preserved when starting a line
spaceElements.add(new KnuthInlineBox(ai.areaIPD.opt, null,
baseList.add(new KnuthInlineBox(ai.areaIPD.opt, null,
mainPosition, true));
}
} else {
@@ -999,17 +1008,17 @@ public class TextLayoutManager extends LeafNodeLayoutManager {
// if the second element is chosen as a line break these elements
// add a constant amount of stretch at the end of a line and at the
// beginning of the next one, otherwise they don't add any stretch
spaceElements.add(new KnuthGlue(lineEndBAP,
baseList.add(new KnuthGlue(lineEndBAP,
3 * LineLayoutManager.DEFAULT_SPACE_WIDTH, 0,
getAuxiliaryPosition(), false));
spaceElements.add(makeZeroPenalty());
spaceElements.add(new KnuthGlue(
baseList.add(makeZeroPenalty());
baseList.add(new KnuthGlue(
- (lineStartBAP + lineEndBAP), -6
* LineLayoutManager.DEFAULT_SPACE_WIDTH, 0,
getAuxiliaryPosition(), false));
spaceElements.add(makeZeroWidthBox());
spaceElements.add(makeInfinitePenalty());
spaceElements.add(new KnuthGlue(ai.areaIPD.opt + lineStartBAP,
baseList.add(makeZeroWidthBox());
baseList.add(makeInfinitePenalty());
baseList.add(new KnuthGlue(ai.areaIPD.opt + lineStartBAP,
3 * LineLayoutManager.DEFAULT_SPACE_WIDTH, 0,
mainPosition, false));
break;
@@ -1020,49 +1029,49 @@ public class TextLayoutManager extends LeafNodeLayoutManager {
// if the second element is chosen as a line break these elements
// add a constant amount of stretch at the end of a line, otherwise
// they don't add any stretch
spaceElements.add(new KnuthGlue(lineEndBAP,
baseList.add(new KnuthGlue(lineEndBAP,
3 * LineLayoutManager.DEFAULT_SPACE_WIDTH, 0,
getAuxiliaryPosition(), false));
spaceElements.add(makeZeroPenalty());
spaceElements.add(new KnuthGlue(
baseList.add(makeZeroPenalty());
baseList.add(new KnuthGlue(
- (lineStartBAP + lineEndBAP), -3
* LineLayoutManager.DEFAULT_SPACE_WIDTH, 0,
getAuxiliaryPosition(), false));
spaceElements.add(makeZeroWidthBox());
spaceElements.add(makeInfinitePenalty());
spaceElements.add(new KnuthGlue(ai.areaIPD.opt + lineStartBAP, 0, 0,
baseList.add(makeZeroWidthBox());
baseList.add(makeInfinitePenalty());
baseList.add(new KnuthGlue(ai.areaIPD.opt + lineStartBAP, 0, 0,
mainPosition, false));
break;

case EN_JUSTIFY:
// justified text:
// the stretch and shrink depends on the space width
spaceElements.add(new KnuthGlue(lineEndBAP, 0, 0,
baseList.add(new KnuthGlue(lineEndBAP, 0, 0,
getAuxiliaryPosition(), false));
spaceElements.add(makeZeroPenalty());
spaceElements.add(new KnuthGlue(
baseList.add(makeZeroPenalty());
baseList.add(new KnuthGlue(
- (lineStartBAP + lineEndBAP), ai.areaIPD.max
- ai.areaIPD.opt, ai.areaIPD.opt - ai.areaIPD.min,
getAuxiliaryPosition(), false));
spaceElements.add(makeZeroWidthBox());
spaceElements.add(makeInfinitePenalty());
spaceElements.add(new KnuthGlue(lineStartBAP + ai.areaIPD.opt, 0, 0,
baseList.add(makeZeroWidthBox());
baseList.add(makeInfinitePenalty());
baseList.add(new KnuthGlue(lineStartBAP + ai.areaIPD.opt, 0, 0,
mainPosition, false));
break;

default:
// last line justified, the other lines unjustified:
// use only the space stretch
spaceElements.add(new KnuthGlue(lineEndBAP, 0, 0,
baseList.add(new KnuthGlue(lineEndBAP, 0, 0,
getAuxiliaryPosition(), false));
spaceElements.add(makeZeroPenalty());
spaceElements.add(new KnuthGlue(
baseList.add(makeZeroPenalty());
baseList.add(new KnuthGlue(
- (lineStartBAP + lineEndBAP), ai.areaIPD.max
- ai.areaIPD.opt, 0,
getAuxiliaryPosition(), false));
spaceElements.add(makeZeroWidthBox());
spaceElements.add(makeInfinitePenalty());
spaceElements.add(new KnuthGlue(lineStartBAP + ai.areaIPD.opt, 0, 0,
baseList.add(makeZeroWidthBox());
baseList.add(makeInfinitePenalty());
baseList.add(new KnuthGlue(lineStartBAP + ai.areaIPD.opt, 0, 0,
mainPosition, false));
}
} else {
@@ -1073,17 +1082,17 @@ public class TextLayoutManager extends LeafNodeLayoutManager {
// if the second element is chosen as a line break these elements
// add a constant amount of stretch at the end of a line and at the
// beginning of the next one, otherwise they don't add any stretch
spaceElements.add(new KnuthGlue(lineEndBAP,
baseList.add(new KnuthGlue(lineEndBAP,
3 * LineLayoutManager.DEFAULT_SPACE_WIDTH, 0,
getAuxiliaryPosition(), false));
spaceElements.add(makeZeroPenalty());
spaceElements.add(new KnuthGlue(ai.areaIPD.opt
baseList.add(makeZeroPenalty());
baseList.add(new KnuthGlue(ai.areaIPD.opt
- (lineStartBAP + lineEndBAP), -6
* LineLayoutManager.DEFAULT_SPACE_WIDTH, 0,
mainPosition, false));
spaceElements.add(makeZeroWidthBox());
spaceElements.add(makeInfinitePenalty());
spaceElements.add(new KnuthGlue(lineStartBAP,
baseList.add(makeZeroWidthBox());
baseList.add(makeInfinitePenalty());
baseList.add(new KnuthGlue(lineStartBAP,
3 * LineLayoutManager.DEFAULT_SPACE_WIDTH, 0,
getAuxiliaryPosition(), false));
break;
@@ -1095,24 +1104,24 @@ public class TextLayoutManager extends LeafNodeLayoutManager {
// add a constant amount of stretch at the end of a line, otherwise
// they don't add any stretch
if (lineStartBAP != 0 || lineEndBAP != 0) {
spaceElements.add(new KnuthGlue(lineEndBAP,
baseList.add(new KnuthGlue(lineEndBAP,
3 * LineLayoutManager.DEFAULT_SPACE_WIDTH, 0,
getAuxiliaryPosition(), false));
spaceElements.add(makeZeroPenalty());
spaceElements.add(new KnuthGlue(ai.areaIPD.opt
baseList.add(makeZeroPenalty());
baseList.add(new KnuthGlue(ai.areaIPD.opt
- (lineStartBAP + lineEndBAP), -3
* LineLayoutManager.DEFAULT_SPACE_WIDTH, 0,
mainPosition, false));
spaceElements.add(makeZeroWidthBox());
spaceElements.add(makeInfinitePenalty());
spaceElements.add(new KnuthGlue(lineStartBAP, 0, 0,
baseList.add(makeZeroWidthBox());
baseList.add(makeInfinitePenalty());
baseList.add(new KnuthGlue(lineStartBAP, 0, 0,
getAuxiliaryPosition(), false));
} else {
spaceElements.add(new KnuthGlue(0,
baseList.add(new KnuthGlue(0,
3 * LineLayoutManager.DEFAULT_SPACE_WIDTH, 0,
getAuxiliaryPosition(), false));
spaceElements.add(makeZeroPenalty());
spaceElements.add(new KnuthGlue(ai.areaIPD.opt, -3
baseList.add(makeZeroPenalty());
baseList.add(new KnuthGlue(ai.areaIPD.opt, -3
* LineLayoutManager.DEFAULT_SPACE_WIDTH, 0,
mainPosition, false));
}
@@ -1122,20 +1131,20 @@ public class TextLayoutManager extends LeafNodeLayoutManager {
// justified text:
// the stretch and shrink depends on the space width
if (lineStartBAP != 0 || lineEndBAP != 0) {
spaceElements.add(new KnuthGlue(lineEndBAP, 0, 0,
baseList.add(new KnuthGlue(lineEndBAP, 0, 0,
getAuxiliaryPosition(), false));
spaceElements.add(makeZeroPenalty());
spaceElements.add(new KnuthGlue(
baseList.add(makeZeroPenalty());
baseList.add(new KnuthGlue(
ai.areaIPD.opt - (lineStartBAP + lineEndBAP),
ai.areaIPD.max - ai.areaIPD.opt,
ai.areaIPD.opt - ai.areaIPD.min,
mainPosition, false));
spaceElements.add(makeZeroWidthBox());
spaceElements.add(makeInfinitePenalty());
spaceElements.add(new KnuthGlue(lineStartBAP, 0, 0,
baseList.add(makeZeroWidthBox());
baseList.add(makeInfinitePenalty());
baseList.add(new KnuthGlue(lineStartBAP, 0, 0,
getAuxiliaryPosition(), false));
} else {
spaceElements.add(new KnuthGlue(ai.areaIPD.opt,
baseList.add(new KnuthGlue(ai.areaIPD.opt,
ai.areaIPD.max - ai.areaIPD.opt,
ai.areaIPD.opt - ai.areaIPD.min,
mainPosition, false));
@@ -1146,32 +1155,33 @@ public class TextLayoutManager extends LeafNodeLayoutManager {
// last line justified, the other lines unjustified:
// use only the space stretch
if (lineStartBAP != 0 || lineEndBAP != 0) {
spaceElements.add(new KnuthGlue(lineEndBAP, 0, 0,
baseList.add(new KnuthGlue(lineEndBAP, 0, 0,
getAuxiliaryPosition(), false));
spaceElements.add(makeZeroPenalty());
spaceElements.add(new KnuthGlue(
baseList.add(makeZeroPenalty());
baseList.add(new KnuthGlue(
ai.areaIPD.opt - (lineStartBAP + lineEndBAP),
ai.areaIPD.max - ai.areaIPD.opt,
0, mainPosition, false));
spaceElements.add(makeZeroWidthBox());
spaceElements.add(makeInfinitePenalty());
spaceElements.add(new KnuthGlue(lineStartBAP, 0, 0,
baseList.add(makeZeroWidthBox());
baseList.add(makeInfinitePenalty());
baseList.add(new KnuthGlue(lineStartBAP, 0, 0,
getAuxiliaryPosition(), false));
} else {
spaceElements.add(new KnuthGlue(ai.areaIPD.opt,
baseList.add(new KnuthGlue(ai.areaIPD.opt,
ai.areaIPD.max - ai.areaIPD.opt, 0,
mainPosition, false));
}
}
}
}
return spaceElements;
}
}

private LinkedList createElementsForAWordFragment(int alignment,
AreaInfo ai, int leafValue, MinOptMax letterSpaceWidth) {
LinkedList wordElements = new LinkedList();
private void addElementsForAWordFragment(List baseList,
int alignment,
AreaInfo ai,
int leafValue,
MinOptMax letterSpaceWidth) {

LeafPosition mainPosition = new LeafPosition(this, leafValue);

// if the last character of the word fragment is '-' or '/',
@@ -1181,8 +1191,7 @@ public class TextLayoutManager extends LeafNodeLayoutManager {

if (letterSpaceWidth.min == letterSpaceWidth.max) {
// constant letter spacing
wordElements.add
(new KnuthInlineBox(
baseList.add(new KnuthInlineBox(
suppressibleLetterSpace
? ai.areaIPD.opt - letterSpaceWidth.opt
: ai.areaIPD.opt,
@@ -1192,18 +1201,18 @@ public class TextLayoutManager extends LeafNodeLayoutManager {
// adjustable letter spacing
int unsuppressibleLetterSpaces
= suppressibleLetterSpace ? ai.letterSpaceCount - 1 : ai.letterSpaceCount;
wordElements.add
baseList.add
(new KnuthInlineBox(ai.areaIPD.opt
- ai.letterSpaceCount * letterSpaceWidth.opt,
alignmentContext,
notifyPos(mainPosition), false));
wordElements.add(makeInfinitePenalty());
wordElements.add
baseList.add(makeInfinitePenalty());
baseList.add
(new KnuthGlue(unsuppressibleLetterSpaces * letterSpaceWidth.opt,
unsuppressibleLetterSpaces * (letterSpaceWidth.max - letterSpaceWidth.opt),
unsuppressibleLetterSpaces * (letterSpaceWidth.opt - letterSpaceWidth.min),
getAuxiliaryPosition(), true));
wordElements.add(makeZeroWidthBox());
baseList.add(makeZeroWidthBox());
}
// extra-elements if the word fragment is the end of a syllable,
@@ -1219,44 +1228,42 @@ public class TextLayoutManager extends LeafNodeLayoutManager {
// the word fragment ends at the end of a syllable:
// if a break occurs the content width increases,
// otherwise nothing happens
wordElements.addAll(createElementsForAHyphen(alignment, hyphIPD, widthIfNoBreakOccurs, ai.breakOppAfter && ai.isHyphenated));
addElementsForAHyphen(baseList, alignment, hyphIPD, widthIfNoBreakOccurs, ai.breakOppAfter && ai.isHyphenated);
} else if (suppressibleLetterSpace) {
// the word fragment ends with a character that acts as a hyphen
// if a break occurs the width does not increase,
// otherwise there is one more letter space
wordElements.addAll(createElementsForAHyphen(alignment, 0, letterSpaceWidth, true));
addElementsForAHyphen(baseList, alignment, 0, letterSpaceWidth, true);
}
return wordElements;
}

// static final int SOFT_HYPHEN_PENALTY = KnuthPenalty.FLAGGED_PENALTY / 10;
static final int SOFT_HYPHEN_PENALTY = 1;
private LinkedList createElementsForAHyphen(int alignment,
int widthIfBreakOccurs, MinOptMax widthIfNoBreakOccurs, boolean unflagged) {

private void addElementsForAHyphen(List baseList,
int alignment,
int widthIfBreakOccurs,
MinOptMax widthIfNoBreakOccurs,
boolean unflagged) {
if (widthIfNoBreakOccurs == null) {
widthIfNoBreakOccurs = ZERO_MINOPTMAX;
}
LinkedList hyphenElements = new LinkedList();

switch (alignment) {
case EN_CENTER :
// centered text:
hyphenElements.add(makeInfinitePenalty());
hyphenElements.add
(new KnuthGlue(lineEndBAP, 3 * LineLayoutManager.DEFAULT_SPACE_WIDTH, 0,
baseList.add(makeInfinitePenalty());
baseList.add(new KnuthGlue(lineEndBAP, 3 * LineLayoutManager.DEFAULT_SPACE_WIDTH, 0,
getAuxiliaryPosition(), true));
hyphenElements.add
(new KnuthPenalty(hyphIPD,
baseList.add(new KnuthPenalty(hyphIPD,
unflagged ? SOFT_HYPHEN_PENALTY : KnuthPenalty.FLAGGED_PENALTY, !unflagged,
getAuxiliaryPosition(), false));
hyphenElements.add
(new KnuthGlue(-(lineEndBAP + lineStartBAP),
baseList.add(new KnuthGlue(-(lineEndBAP + lineStartBAP),
-6 * LineLayoutManager.DEFAULT_SPACE_WIDTH, 0,
getAuxiliaryPosition(), false));
hyphenElements.add(makeZeroWidthBox());
hyphenElements.add(makeInfinitePenalty());
hyphenElements.add
(new KnuthGlue(lineStartBAP, 3 * LineLayoutManager.DEFAULT_SPACE_WIDTH, 0,
baseList.add(makeZeroWidthBox());
baseList.add(makeInfinitePenalty());
baseList.add(new KnuthGlue(lineStartBAP, 3 * LineLayoutManager.DEFAULT_SPACE_WIDTH, 0,
getAuxiliaryPosition(), true));
break;
@@ -1264,34 +1271,27 @@ public class TextLayoutManager extends LeafNodeLayoutManager {
case EN_END :
// left- or right-aligned text:
if (lineStartBAP != 0 || lineEndBAP != 0) {
hyphenElements.add(makeInfinitePenalty());
hyphenElements.add
(new KnuthGlue(lineEndBAP, 3 * LineLayoutManager.DEFAULT_SPACE_WIDTH, 0,
baseList.add(makeInfinitePenalty());
baseList.add(new KnuthGlue(lineEndBAP, 3 * LineLayoutManager.DEFAULT_SPACE_WIDTH, 0,
getAuxiliaryPosition(), false));
hyphenElements.add
(new KnuthPenalty(widthIfBreakOccurs,
baseList.add(new KnuthPenalty(widthIfBreakOccurs,
unflagged ? SOFT_HYPHEN_PENALTY : KnuthPenalty.FLAGGED_PENALTY, !unflagged,
getAuxiliaryPosition(), false));
hyphenElements.add
(new KnuthGlue(widthIfNoBreakOccurs.opt - (lineStartBAP + lineEndBAP),
baseList.add(new KnuthGlue(widthIfNoBreakOccurs.opt - (lineStartBAP + lineEndBAP),
-3 * LineLayoutManager.DEFAULT_SPACE_WIDTH, 0,
getAuxiliaryPosition(), false));
hyphenElements.add(makeZeroWidthBox());
hyphenElements.add(makeInfinitePenalty());
hyphenElements.add
(new KnuthGlue(lineStartBAP, 0, 0,
baseList.add(makeZeroWidthBox());
baseList.add(makeInfinitePenalty());
baseList.add(new KnuthGlue(lineStartBAP, 0, 0,
getAuxiliaryPosition(), false));
} else {
hyphenElements.add(makeInfinitePenalty());
hyphenElements.add
(new KnuthGlue(0, 3 * LineLayoutManager.DEFAULT_SPACE_WIDTH, 0,
baseList.add(makeInfinitePenalty());
baseList.add(new KnuthGlue(0, 3 * LineLayoutManager.DEFAULT_SPACE_WIDTH, 0,
getAuxiliaryPosition(), false));
hyphenElements.add
(new KnuthPenalty(widthIfBreakOccurs,
baseList.add(new KnuthPenalty(widthIfBreakOccurs,
unflagged ? SOFT_HYPHEN_PENALTY : KnuthPenalty.FLAGGED_PENALTY, !unflagged,
getAuxiliaryPosition(), false));
hyphenElements.add
(new KnuthGlue(widthIfNoBreakOccurs.opt,
baseList.add(new KnuthGlue(widthIfNoBreakOccurs.opt,
-3 * LineLayoutManager.DEFAULT_SPACE_WIDTH, 0,
getAuxiliaryPosition(), false));
}
@@ -1301,44 +1301,37 @@ public class TextLayoutManager extends LeafNodeLayoutManager {
// justified text, or last line justified:
// just a flagged penalty
if (lineStartBAP != 0 || lineEndBAP != 0) {
hyphenElements.add(makeInfinitePenalty());
hyphenElements.add
(new KnuthGlue(lineEndBAP, 0, 0,
baseList.add(makeInfinitePenalty());
baseList.add(new KnuthGlue(lineEndBAP, 0, 0,
getAuxiliaryPosition(), false));
hyphenElements.add
(new KnuthPenalty(widthIfBreakOccurs,
baseList.add(new KnuthPenalty(widthIfBreakOccurs,
unflagged ? SOFT_HYPHEN_PENALTY : KnuthPenalty.FLAGGED_PENALTY, !unflagged,
getAuxiliaryPosition(), false));
// extra elements representing a letter space that is suppressed
// if a break occurs
if (widthIfNoBreakOccurs.min != 0
|| widthIfNoBreakOccurs.max != 0) {
hyphenElements.add
(new KnuthGlue(widthIfNoBreakOccurs.opt - (lineStartBAP + lineEndBAP),
baseList.add(new KnuthGlue(widthIfNoBreakOccurs.opt - (lineStartBAP + lineEndBAP),
widthIfNoBreakOccurs.max - widthIfNoBreakOccurs.opt,
widthIfNoBreakOccurs.opt - widthIfNoBreakOccurs.min,
getAuxiliaryPosition(), false));
} else {
hyphenElements.add
(new KnuthGlue(-(lineStartBAP + lineEndBAP), 0, 0,
baseList.add(new KnuthGlue(-(lineStartBAP + lineEndBAP), 0, 0,
getAuxiliaryPosition(), false));
}
hyphenElements.add(new KnuthInlineBox(0, null, notifyPos(getAuxiliaryPosition()), true));
hyphenElements.add(makeInfinitePenalty());
hyphenElements.add
(new KnuthGlue(lineStartBAP, 0, 0,
baseList.add(new KnuthInlineBox(0, null, notifyPos(getAuxiliaryPosition()), true));
baseList.add(makeInfinitePenalty());
baseList.add(new KnuthGlue(lineStartBAP, 0, 0,
getAuxiliaryPosition(), false));
} else {
hyphenElements.add
(new KnuthPenalty(widthIfBreakOccurs,
baseList.add(new KnuthPenalty(widthIfBreakOccurs,
unflagged ? SOFT_HYPHEN_PENALTY : KnuthPenalty.FLAGGED_PENALTY, !unflagged,
getAuxiliaryPosition(), false));
// extra elements representing a letter space that is suppressed
// if a break occurs
if (widthIfNoBreakOccurs.min != 0
|| widthIfNoBreakOccurs.max != 0) {
hyphenElements.add
(new KnuthGlue(widthIfNoBreakOccurs.opt,
baseList.add(new KnuthGlue(widthIfNoBreakOccurs.opt,
widthIfNoBreakOccurs.max - widthIfNoBreakOccurs.opt,
widthIfNoBreakOccurs.opt - widthIfNoBreakOccurs.min,
getAuxiliaryPosition(), false));
@@ -1346,7 +1339,6 @@ public class TextLayoutManager extends LeafNodeLayoutManager {
}
}
return hyphenElements;
}
}

Loading…
Peruuta
Tallenna