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]

Reply via email to