]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
using leader-length.optimum instead of maximum for line break and length calculation
authorfotis <fotis@unknown>
Wed, 20 Dec 2000 18:20:18 +0000 (18:20 +0000)
committerfotis <fotis@unknown>
Wed, 20 Dec 2000 18:20:18 +0000 (18:20 +0000)
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@193915 13f79535-47bb-0310-9956-ffa450edef68

src/org/apache/fop/fo/flow/Leader.java
src/org/apache/fop/layout/BlockArea.java
src/org/apache/fop/layout/LineArea.java

index 4608254e4a45bbbdba61cd41010b7f6c10a84377..f5792d024d691af65692507db16f044d4bdb3a07 100644 (file)
@@ -118,17 +118,8 @@ public class Leader extends FObjMixed {
                                     "leader-length.optimum").getLength().mvalue();
         int leaderLengthMinimum = this.properties.get(
                                     "leader-length.minimum").getLength().mvalue();
-        //brute force method to set default, because default values cannot be set
-        //in the properties classes for all subtypes
-        if (leaderLengthMinimum == 12000) {
-            leaderLengthMinimum = 0;
-        }
         int leaderLengthMaximum = this.properties.get(
                                     "leader-length.maximum").getLength().mvalue();
-        //here too
-        if (leaderLengthMaximum == 12000) {
-            leaderLengthMaximum = 24000;
-        }
         //the following properties only apply for leader-pattern = "rule"
         int ruleThickness = this.properties.get(
                               "rule-thickness").getLength().mvalue();
index fc31e89f24067e3bc0629f9ec8e6894641761fb9..9f65f5bdccaedb4b73b93f1933d558847b26d47b 100644 (file)
@@ -230,8 +230,11 @@ public class BlockArea extends Area {
         this.currentLineArea.changeColor(red, green, blue);
 
         //check whether leader fits into the (rest of the) line
+        //using length.optimum to determine where to break the line as defined 
+        // in the xsl:fo spec: "User agents may choose to use the value of 'leader-length.optimum'
+        // to determine where to break the line" (7.20.4)
         //if leader is longer then create a new LineArea and put leader there
-        if (leaderLengthMinimum <= (this.getContentWidth() -
+        if (leaderLengthOptimum <= (this.getContentWidth() -
                                     this.currentLineArea.finalWidth -
                                     this.currentLineArea.pendingWidth)) {
             this.currentLineArea.addLeader(leaderPattern,
index 1da1435cbff3b752342c833c8aeb5ba0d6d2e925..6393dc607824e0abd738d0b2d48f3ca3c733bd2e 100644 (file)
@@ -442,15 +442,12 @@ public class LineArea extends Area {
         int leaderLength;
         int remainingWidth =
           this.getContentWidth() - this.getCurrentXPosition();
-
-        //here is the point to decide which leader-length is to be used, either
-        //optimum or maximum. At the moment maximum is used if the remaining
-        //width isn't smaller. In this case only the remaining width is used for
-        //the leader. Actually this means, optimum is never used at the moment.
-        if (remainingWidth < leaderLengthMaximum) {
+        //checks whether leaderLenghtOptimum fits into rest of line;
+        //should never overflow, asit has been checked already in BlockArea
+        if (remainingWidth < leaderLengthOptimum) {
             leaderLength = remainingWidth;
         } else {
-            leaderLength = leaderLengthMaximum;
+            leaderLength = leaderLengthOptimum;
         }
         switch (leaderPattern) {
             case LeaderPattern.SPACE:
@@ -751,6 +748,10 @@ public class LineArea extends Area {
     }
 
 
+    /** extracts word for hyphenation and calls hyphenation package, 
+     *  handles cases of inword punctuation and quotation marks at the beginning
+     *  of words, but not in a internationalized way 
+     */
     private int doHyphenation (char [] characters, int position, int wordStart, int remainingWidth) {
         //check whether the language property has been set
         if (this.language.equalsIgnoreCase("none")) {
@@ -783,12 +784,9 @@ public class LineArea extends Area {
             //extracts whole word from string
             wordToHyphenate = getHyphenationWord(characters,wordStart+1);
         } else {
-//            remainingString = "";
             wordToHyphenate = getHyphenationWord(characters,wordStart);
         }
 
-
-
         //if the extracted word is smaller than the remaining width
         //we have a non letter character inside the word. at the moment
         //we will only handle hard hyphens and slashes
@@ -844,6 +842,7 @@ public class LineArea extends Area {
         return wordStart;
     }
 
+
     /** calculates the wordWidth using the actual fontstate*/
     private int getWordWidth (String word) {
       int wordLength = word.length();
@@ -856,6 +855,8 @@ public class LineArea extends Area {
       return width;
     }
 
+
+    /** adds a single character to the line area tree*/ 
     public int addCharacter (char data, LinkSet ls, boolean ul) {
         InlineArea ia = null;
         int remainingWidth =
@@ -886,7 +887,8 @@ public class LineArea extends Area {
         }
     }
 
-    /** adds a string to the line area children. insert a space before the word */
+
+    /** adds a InlineArea containing the String startChar+wordBuf to the line area children.  */
     private void addWord (char startChar, StringBuffer wordBuf) {
         String word = wordBuf.toString();
         InlineArea hia;
@@ -910,6 +912,7 @@ public class LineArea extends Area {
     }
 
 
+    /** extracts from a hyphenated word the best (most greedy) fit */ 
     private int getFinalHyphenationPoint(Hyphenation hyph, int remainingWidth) {
         int [] hyphenationPoints = hyph.getHyphenationPoints();
         int numberOfHyphenationPoints = hyphenationPoints.length;