gmazza 2003/11/30 20:47:00
Modified: src/java/org/apache/fop/layoutmgr LineLayoutManager.java
Log:
Hyphenation improvements from Simon Pepping (Bugs #25031 and #25059) added.
Revision Changes Path
1.6 +20 -10 xml-fop/src/java/org/apache/fop/layoutmgr/LineLayoutManager.java
Index: LineLayoutManager.java
===================================================================
RCS file:
/home/cvs/xml-fop/src/java/org/apache/fop/layoutmgr/LineLayoutManager.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- LineLayoutManager.java 16 Oct 2003 23:54:21 -0000 1.5
+++ LineLayoutManager.java 1 Dec 2003 04:47:00 -0000 1.6
@@ -252,14 +252,14 @@
}
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 @@
return null;
}
if (prevBP == null) {
+ vecInlineBreaks.add(bp);
prevBP = bp;
}
@@ -335,11 +336,19 @@
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 @@
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;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]