aboutsummaryrefslogtreecommitdiffstats
path: root/src/java
diff options
context:
space:
mode:
authorGlen Mazza <gmazza@apache.org>2003-12-01 04:47:00 +0000
committerGlen Mazza <gmazza@apache.org>2003-12-01 04:47:00 +0000
commitd6089e8c09a36a3b2424cdec8ea15e89dbee1cc4 (patch)
tree7ca5b0d5d9317266a1640b84095dcc5b34cbbb82 /src/java
parent7843550a877c0a62aa22858ef77164c13ff0137d (diff)
downloadxmlgraphics-fop-d6089e8c09a36a3b2424cdec8ea15e89dbee1cc4.tar.gz
xmlgraphics-fop-d6089e8c09a36a3b2424cdec8ea15e89dbee1cc4.zip
Hyphenation improvements from Simon Pepping (Bugs #25031 and #25059) added.
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@197028 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/java')
-rw-r--r--src/java/org/apache/fop/layoutmgr/LineLayoutManager.java30
1 files changed, 20 insertions, 10 deletions
diff --git a/src/java/org/apache/fop/layoutmgr/LineLayoutManager.java b/src/java/org/apache/fop/layoutmgr/LineLayoutManager.java
index fab50a379..62014219e 100644
--- a/src/java/org/apache/fop/layoutmgr/LineLayoutManager.java
+++ b/src/java/org/apache/fop/layoutmgr/LineLayoutManager.java
@@ -252,14 +252,14 @@ public class LineLayoutManager extends InlineStackingLayoutManager {
}
inlineLC.setHyphContext(
- getHyphenContext(prevBP, bp));
+ getHyphenContext((prevBP == null) ? prev : prevBP, bp));
if (inlineLC.getHyphContext() == null) {
break;
}
inlineLC.setFlags(LayoutContext.TRY_HYPHENATE,
true);
// Reset to previous acceptable break
- reset();
+ resetBP((prevBP == null) ? prev : prevBP);
} else {
/* If we are not in justified text, we can end the line at
* prevBP.
@@ -313,6 +313,7 @@ public class LineLayoutManager extends InlineStackingLayoutManager {
return null;
}
if (prevBP == null) {
+ vecInlineBreaks.add(bp);
prevBP = bp;
}
@@ -335,11 +336,19 @@ public class LineLayoutManager extends InlineStackingLayoutManager {
return makeLineBreak(iPrevLineEnd, availIPD, talign);
}
- private void reset() {
- while (vecInlineBreaks.get(vecInlineBreaks.size() - 1) != prevBP) {
- vecInlineBreaks.remove(vecInlineBreaks.size() - 1);
+ private void resetBP(BreakPoss resetBP) {
+ if (resetBP == null) {
+ reset((Position) null);
+ } else {
+ while (vecInlineBreaks.get(vecInlineBreaks.size() - 1) != resetBP) {
+ vecInlineBreaks.remove(vecInlineBreaks.size() - 1);
+ }
+ reset(resetBP.getPosition());
}
- reset(prevBP.getPosition());
+ }
+
+ private void reset() {
+ resetBP(prevBP);
}
protected boolean couldEndLine(BreakPoss bp) {
@@ -398,19 +407,20 @@ public class LineLayoutManager extends InlineStackingLayoutManager {
vecInlineBreaks.listIterator(vecInlineBreaks.size());
while (bpIter.hasPrevious() && bpIter.previous() != prev) {
}
- if (bpIter.next() != prev) {
+ if (prev != null && bpIter.next() != prev) {
getLogger().error("findHyphenPoss: problem!");
return null;
}
StringBuffer sbChars = new StringBuffer(30);
while (bpIter.hasNext()) {
BreakPoss bp = (BreakPoss) bpIter.next();
- if (bp.getLayoutManager() == prev.getLayoutManager()) {
+ if (prev != null &&
+ bp.getLayoutManager() == prev.getLayoutManager()) {
bp.getLayoutManager().getWordChars(sbChars,
- prev.getPosition(), bp.getPosition());
+ prev.getPosition(), bp.getPosition());
} else {
bp.getLayoutManager().getWordChars(sbChars, null,
- bp.getPosition());
+ bp.getPosition());
}
prev = bp;
}