You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-commits@xmlgraphics.apache.org by je...@apache.org on 2005/08/10 11:07:54 UTC

svn commit: r231198 - in /xmlgraphics/fop/trunk: src/documentation/content/xdocs/ src/java/org/apache/fop/fo/ src/java/org/apache/fop/fo/properties/ test/layoutengine/ test/layoutengine/testcases/

Author: jeremias
Date: Wed Aug 10 02:07:41 2005
New Revision: 231198

URL: http://svn.apache.org/viewcvs?rev=231198&view=rev
Log:
Bugzilla #36067
Support for relative font sizes.
Submitted by: Manuel Mall <mm.at.arcus.com.au>

Added:
    xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/properties/FontSizePropertyMaker.java   (with props)
    xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/properties/FontStretchPropertyMaker.java   (with props)
Modified:
    xmlgraphics/fop/trunk/src/documentation/content/xdocs/compliance.ihtml
    xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/FOPropertyMapping.java
    xmlgraphics/fop/trunk/test/layoutengine/disabled-testcases.txt
    xmlgraphics/fop/trunk/test/layoutengine/testcases/font-size-percentage.xml
    xmlgraphics/fop/trunk/test/layoutengine/testcases/font-size-relative.xml

Modified: xmlgraphics/fop/trunk/src/documentation/content/xdocs/compliance.ihtml
URL: http://svn.apache.org/viewcvs/xmlgraphics/fop/trunk/src/documentation/content/xdocs/compliance.ihtml?rev=231198&r1=231197&r2=231198&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/documentation/content/xdocs/compliance.ihtml (original)
+++ xmlgraphics/fop/trunk/src/documentation/content/xdocs/compliance.ihtml Wed Aug 10 02:07:41 2005
@@ -2854,19 +2854,16 @@
       <td align="center">
         <a href="http://www.w3.org/TR/xsl/slice7.html#font-size">&sect;7.8.4</a>
       </td>
-      <td class="yes">
-        yes
-      </td>
       <td class="partial">
         partial
       </td>
+      <td class="yes">
+        yes
+      </td>
       <td align="left">
         <ul>
           <li>
-            [Trunk] TODO &lt;absolute&gt; font sizes
-          </li>
-          <li>
-            [Trunk] TODO &lt;relative&gt; font sizes
+            [0.20.5] "smaller" and "larger" not implemented
           </li>
         </ul>
       </td>
@@ -2921,14 +2918,18 @@
       <td align="center">
         <a href="http://www.w3.org/TR/xsl/slice7.html#font-style">&sect;7.8.7</a>
       </td>
-      <td class="yes">
-        yes
+      <td class="partial">
+        partial
       </td>
       <td class="yes">
         yes
       </td>
-      <td align="center">
-        &nbsp;
+      <td align="left">
+        <ul>
+          <li>
+            [0.20.5] "normal" is not supported
+          </li>
+        </ul>
       </td>
     </tr>
     <tr>
@@ -2961,14 +2962,21 @@
       <td align="center">
         <a href="http://www.w3.org/TR/xsl/slice7.html#font-weight">&sect;7.8.9</a>
       </td>
-      <td class="yes">
-        yes
+      <td class="partial">
+        partial
       </td>
-      <td class="yes">
-        yes
+      <td class="partial">
+        partial
       </td>
-      <td align="center">
-        &nbsp;
+      <td align="left">
+        <ul>
+          <li>
+            [0.20.5] "normal", "bolder" and "lighter" are not supported
+          </li>
+          <li>
+            [Trunk] TODO &lt;relative&gt; font weights
+          </li>
+        </ul>
       </td>
     </tr>
     <tr>

Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/FOPropertyMapping.java
URL: http://svn.apache.org/viewcvs/xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/FOPropertyMapping.java?rev=231198&r1=231197&r2=231198&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/FOPropertyMapping.java (original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/FOPropertyMapping.java Wed Aug 10 02:07:41 2005
@@ -32,6 +32,8 @@
 import org.apache.fop.fo.properties.CorrespondingPropertyMaker;
 import org.apache.fop.fo.properties.DimensionPropertyMaker;
 import org.apache.fop.fo.properties.EnumProperty;
+import org.apache.fop.fo.properties.FontSizePropertyMaker;
+import org.apache.fop.fo.properties.FontStretchPropertyMaker;
 import org.apache.fop.fo.properties.GenericShorthandParser;
 import org.apache.fop.fo.properties.IndentPropertyMaker;
 import org.apache.fop.fo.properties.KeepProperty;
@@ -1081,7 +1083,7 @@
         addPropertyMaker("font-selection-strategy", m);
 
         // font-size
-        m  = new LengthProperty.Maker(PR_FONT_SIZE);
+        m  = new FontSizePropertyMaker(PR_FONT_SIZE);
         m.setInherited(true);
         m.setDefault("12pt");
         m.addKeyword("xx-small", "6.944pt");
@@ -1091,11 +1093,13 @@
         m.addKeyword("large", "14.4pt");
         m.addKeyword("x-large", "17.28pt");
         m.addKeyword("xx-large", "20.736pt");
+        m.addEnum("larger", getEnumProperty(EN_LARGER, "LARGER"));
+        m.addEnum("smaller", getEnumProperty(EN_SMALLER, "SMALLER"));
         m.setPercentBase(LengthBase.INH_FONTSIZE);
         addPropertyMaker("font-size", m);
 
         // font-stretch
-        m  = new EnumProperty.Maker(PR_FONT_STRETCH);
+        m  = new FontStretchPropertyMaker(PR_FONT_STRETCH);
         m.addEnum("normal", getEnumProperty(EN_NORMAL, "NORMAL"));
         m.addEnum("wider", getEnumProperty(EN_WIDER, "WIDER"));
         m.addEnum("narrower", getEnumProperty(EN_NARROWER, "NARROWER"));

Added: xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/properties/FontSizePropertyMaker.java
URL: http://svn.apache.org/viewcvs/xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/properties/FontSizePropertyMaker.java?rev=231198&view=auto
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/properties/FontSizePropertyMaker.java (added)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/properties/FontSizePropertyMaker.java Wed Aug 10 02:07:41 2005
@@ -0,0 +1,96 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Id: $ */
+
+package org.apache.fop.fo.properties;
+import org.apache.fop.fo.Constants;
+import org.apache.fop.fo.FObj;
+import org.apache.fop.fo.PropertyList;
+import org.apache.fop.fo.expr.PropertyException;
+
+/**
+ * This subclass of LengthProperty.Maker handles the special treatment of 
+ * relative font sizes described in 7.8.4.
+ */
+public class FontSizePropertyMaker 
+    extends LengthProperty.Maker implements Constants {
+
+    /** The default normal font size in mpt */
+    private static final int FONT_SIZE_NORMAL = 12000;
+    /** The factor to be applied when stepping font sizes upwards */
+    private static final double FONT_SIZE_GROWTH_FACTOR = 1.2;
+    
+    /**
+     * Create a length property which can handle relative font sizes 
+     * @param propId the font size property id.
+     */
+    public FontSizePropertyMaker(int propId) {
+        super(propId);
+    }
+    
+    /**
+     * @see PropertyMaker#convertProperty
+     * Implements the parts of 7.8.4 relevant to relative font sizes
+     */
+    public Property convertProperty(Property p,
+                                    PropertyList propertyList,
+                                    FObj fo) throws PropertyException {
+        if (p.getEnum() == EN_LARGER || p.getEnum() == EN_SMALLER) {
+            // get the corresponding property from parent
+            Property pp = propertyList.getFromParent(this.getPropId());
+            int baseFontSize = computeClosestAbsoluteFontSize(pp.getLength().getValue());
+            if (p.getEnum() == EN_LARGER) {
+                return new FixedLength((int)Math.round((baseFontSize * FONT_SIZE_GROWTH_FACTOR)));
+            } else {
+                return new FixedLength((int)Math.round((baseFontSize / FONT_SIZE_GROWTH_FACTOR)));
+            }
+        }
+        return super.convertProperty(p, propertyList, fo);
+    }
+    
+    /**
+     * Calculates the nearest absolute font size to the given
+     * font size.
+     * @param baseFontSize the font size in mpt of the parent fo
+     * @return the closest absolute font size
+     */
+    private int computeClosestAbsoluteFontSize(int baseFontSize) {
+        double scale = FONT_SIZE_GROWTH_FACTOR;
+        int lastStepFontSize = FONT_SIZE_NORMAL;
+        if (baseFontSize < FONT_SIZE_NORMAL) {
+            // Need to shrink the font sizes = scale downwards
+            scale = 1 / FONT_SIZE_GROWTH_FACTOR;
+        }
+        // Calculate the inital next step font size
+        int nextStepFontSize = (int)Math.round(lastStepFontSize * scale);
+        while (scale < 1 && nextStepFontSize > baseFontSize
+                || scale > 1 && nextStepFontSize < baseFontSize) {
+            // baseFontSize is still bigger (if we grow) or smaller (if we shrink)
+            // than the last caculated step
+            lastStepFontSize = nextStepFontSize;
+            nextStepFontSize = (int)Math.round(lastStepFontSize * scale);
+        }
+        // baseFontSize is between last and next step font size
+        // Return the step value closer to the baseFontSize
+        if (Math.abs(lastStepFontSize - baseFontSize) 
+                <= Math.abs(baseFontSize - nextStepFontSize)) {
+            return lastStepFontSize;
+        }
+        return nextStepFontSize;
+    }
+
+}

Propchange: xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/properties/FontSizePropertyMaker.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/properties/FontStretchPropertyMaker.java
URL: http://svn.apache.org/viewcvs/xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/properties/FontStretchPropertyMaker.java?rev=231198&view=auto
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/properties/FontStretchPropertyMaker.java (added)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/properties/FontStretchPropertyMaker.java Wed Aug 10 02:07:41 2005
@@ -0,0 +1,95 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Id: $ */
+
+package org.apache.fop.fo.properties;
+import org.apache.fop.fo.Constants;
+import org.apache.fop.fo.FObj;
+import org.apache.fop.fo.PropertyList;
+import org.apache.fop.fo.expr.PropertyException;
+
+/**
+ * This subclass of EnumProperty.Maker handles the special treatment of 
+ * relative font stretch values described in 7.8.5.
+ */
+public class FontStretchPropertyMaker 
+    extends EnumProperty.Maker implements Constants {
+    
+    /* Ordered list of absolute font stretch properties so we can easily find the next /
+     * previous one */
+    private Property[] orderedFontStretchValues = null;
+        
+    /**
+     * Create an enum property which can handle relative font stretches 
+     * @param propId the font size property id.
+     */
+    public FontStretchPropertyMaker(int propId) {
+        super(propId);
+    }
+    
+    /**
+     * @see PropertyMaker#convertProperty
+     * Implements the parts of 7.8.5 relevant to relative font stretches
+     */
+    public Property convertProperty(Property p,
+                                    PropertyList propertyList,
+                                    FObj fo) throws PropertyException {
+        // if it is a relative font stretch value get current parent value and step
+        // up or down accordingly
+        if (p.getEnum() == EN_NARROWER) {
+            return computeNextAbsoluteFontStretch(propertyList.getFromParent(this.getPropId()), -1);
+        } else if (p.getEnum() == EN_WIDER) {
+            return computeNextAbsoluteFontStretch(propertyList.getFromParent(this.getPropId()), 1);
+        }
+        return super.convertProperty(p, propertyList, fo);
+    }
+
+    /**
+     * Calculates the nearest absolute font stretch property to the given
+     * font stretch
+     * @param baseProperty the font stretch property as set on the parent fo
+     * @param direction should be -1 to get the next narrower value or +1 for the next wider value
+     */
+    private Property computeNextAbsoluteFontStretch(Property baseProperty, int direction) {
+        // Create the table entries the first time around
+        // @todo is this thread safe, do we need to worry about this here?
+        if (orderedFontStretchValues == null) {
+            orderedFontStretchValues = new Property[] {
+                checkEnumValues("ultra-condensed"),
+                checkEnumValues("extra-condensed"),
+                checkEnumValues("condensed"),
+                checkEnumValues("semi-condensed"),
+                checkEnumValues("normal"),
+                checkEnumValues("semi-expanded"),
+                checkEnumValues("expanded"),
+                checkEnumValues("extra-expanded"),
+                checkEnumValues("ultra-expanded")
+            };
+        }
+        int baseValue = baseProperty.getEnum();
+        for (int i = 0; i < orderedFontStretchValues.length; i++) {
+            if (baseValue == orderedFontStretchValues[i].getEnum()) {
+                // increment/decrement the index and make sure its within the array bounds
+                i = Math.min(Math.max(0, i + direction), orderedFontStretchValues.length - 1);
+                return orderedFontStretchValues[i];
+            }
+        }
+        // return the normal value
+        return orderedFontStretchValues[4];
+    }
+
+}

Propchange: xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/properties/FontStretchPropertyMaker.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: xmlgraphics/fop/trunk/test/layoutengine/disabled-testcases.txt
URL: http://svn.apache.org/viewcvs/xmlgraphics/fop/trunk/test/layoutengine/disabled-testcases.txt?rev=231198&r1=231197&r2=231198&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/test/layoutengine/disabled-testcases.txt (original)
+++ xmlgraphics/fop/trunk/test/layoutengine/disabled-testcases.txt Wed Aug 10 02:07:41 2005
@@ -1,6 +1,5 @@
 external-graphic1.xml
 external-graphic2.xml
-font-size-relative.xml
 inline1.xml
 keep-with-previous2.xml
 keep-with-previous3.xml

Modified: xmlgraphics/fop/trunk/test/layoutengine/testcases/font-size-percentage.xml
URL: http://svn.apache.org/viewcvs/xmlgraphics/fop/trunk/test/layoutengine/testcases/font-size-percentage.xml?rev=231198&r1=231197&r2=231198&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/test/layoutengine/testcases/font-size-percentage.xml (original)
+++ xmlgraphics/fop/trunk/test/layoutengine/testcases/font-size-percentage.xml Wed Aug 10 02:07:41 2005
@@ -140,5 +140,35 @@
     <eval expected="16200" xpath="//flow/block[1]/block/block/block/block/block/block/block/block/block/block/block/block/lineArea/text/@font-size"/>
     <eval expected="19440" xpath="//flow/block[1]/block/block/block/block/block/block/block/block/block/block/block/block/block/lineArea/text/@font-size"/>
     <eval expected="23328" xpath="//flow/block[1]/block/block/block/block/block/block/block/block/block/block/block/block/block/block/lineArea/text/@font-size"/>
+    <eval expected="24000" xpath="//flow/block[2]/lineArea/text/@font-size"/>
+    <eval expected="19920" xpath="//flow/block[2]/block/lineArea/text/@font-size"/>
+    <eval expected="16533" xpath="//flow/block[2]/block/block/lineArea/text/@font-size"/>
+    <eval expected="13722" xpath="//flow/block[2]/block/block/block/lineArea/text/@font-size"/>
+    <eval expected="11389" xpath="//flow/block[2]/block/block/block/block/lineArea/text/@font-size"/>
+    <eval expected="9452" xpath="//flow/block[2]/block/block/block/block/block/lineArea/text/@font-size"/>
+    <eval expected="7845" xpath="//flow/block[2]/block/block/block/block/block/block/lineArea/text/@font-size"/>
+    <eval expected="6511" xpath="//flow/block[2]/block/block/block/block/block/block/block/lineArea/text/@font-size"/>
+    <eval expected="7813" xpath="//flow/block[2]/block/block/block/block/block/block/block/block/lineArea/text/@font-size"/>
+    <eval expected="9375" xpath="//flow/block[2]/block/block/block/block/block/block/block/block/block/lineArea/text/@font-size"/>
+    <eval expected="11250" xpath="//flow/block[2]/block/block/block/block/block/block/block/block/block/block/lineArea/text/@font-size"/>
+    <eval expected="13500" xpath="//flow/block[2]/block/block/block/block/block/block/block/block/block/block/block/lineArea/text/@font-size"/>
+    <eval expected="16200" xpath="//flow/block[2]/block/block/block/block/block/block/block/block/block/block/block/block/lineArea/text/@font-size"/>
+    <eval expected="19440" xpath="//flow/block[2]/block/block/block/block/block/block/block/block/block/block/block/block/block/lineArea/text/@font-size"/>
+    <eval expected="23328" xpath="//flow/block[2]/block/block/block/block/block/block/block/block/block/block/block/block/block/block/lineArea/text/@font-size"/>
+    <eval expected="24000" xpath="//flow/block[3]/lineArea/text/@font-size"/>
+    <eval expected="19920" xpath="//flow/block[3]/block/lineArea/text/@font-size"/>
+    <eval expected="16533" xpath="//flow/block[3]/block/block/lineArea/text/@font-size"/>
+    <eval expected="13722" xpath="//flow/block[3]/block/block/block/lineArea/text/@font-size"/>
+    <eval expected="11389" xpath="//flow/block[3]/block/block/block/block/lineArea/text/@font-size"/>
+    <eval expected="9452" xpath="//flow/block[3]/block/block/block/block/block/lineArea/text/@font-size"/>
+    <eval expected="7845" xpath="//flow/block[3]/block/block/block/block/block/block/lineArea/text/@font-size"/>
+    <eval expected="6511" xpath="//flow/block[3]/block/block/block/block/block/block/block/lineArea/text/@font-size"/>
+    <eval expected="7813" xpath="//flow/block[3]/block/block/block/block/block/block/block/block/lineArea/text/@font-size"/>
+    <eval expected="9375" xpath="//flow/block[3]/block/block/block/block/block/block/block/block/block/lineArea/text/@font-size"/>
+    <eval expected="11250" xpath="//flow/block[3]/block/block/block/block/block/block/block/block/block/block/lineArea/text/@font-size"/>
+    <eval expected="13500" xpath="//flow/block[3]/block/block/block/block/block/block/block/block/block/block/block/lineArea/text/@font-size"/>
+    <eval expected="16200" xpath="//flow/block[3]/block/block/block/block/block/block/block/block/block/block/block/block/lineArea/text/@font-size"/>
+    <eval expected="19440" xpath="//flow/block[3]/block/block/block/block/block/block/block/block/block/block/block/block/block/lineArea/text/@font-size"/>
+    <eval expected="23328" xpath="//flow/block[3]/block/block/block/block/block/block/block/block/block/block/block/block/block/block/lineArea/text/@font-size"/>
   </checks>
 </testcase>

Modified: xmlgraphics/fop/trunk/test/layoutengine/testcases/font-size-relative.xml
URL: http://svn.apache.org/viewcvs/xmlgraphics/fop/trunk/test/layoutengine/testcases/font-size-relative.xml?rev=231198&r1=231197&r2=231198&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/test/layoutengine/testcases/font-size-relative.xml (original)
+++ xmlgraphics/fop/trunk/test/layoutengine/testcases/font-size-relative.xml Wed Aug 10 02:07:41 2005
@@ -24,124 +24,144 @@
   <fo>
     <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:svg="http://www.w3.org/2000/svg">
       <fo:layout-master-set>
-        <fo:simple-page-master master-name="normal" page-width="210mm" page-height="297mm">
+        <fo:simple-page-master master-name="normal" page-width="210mm" page-height="500mm">
           <fo:region-body/>
         </fo:simple-page-master>
       </fo:layout-master-set>
       <fo:page-sequence master-reference="normal" white-space-collapse="true">
         <fo:flow flow-name="xsl-region-body">
-          <fo:block font-family="serif"> font-family="serif" font-size not specified
-            <fo:block font-family="serif" font-size="smaller"> font-family="serif" font-size="smaller"
-              <fo:block font-family="serif" font-size="smaller"> font-family="serif" font-size="smaller"
-                <fo:block font-family="serif" font-size="smaller"> font-family="serif" font-size="smaller"
-                  <fo:block font-family="serif" font-size="smaller"> font-family="serif" font-size="smaller"
-                    <fo:block font-family="serif" font-size="smaller"> font-family="serif" font-size="smaller"
-                    </fo:block>
+          <fo:block font-size="36pt">font-size="36pt"
+            <fo:block font-size="smaller">font-size="smaller"
+              <fo:block font-size="smaller">font-size="smaller"
+                <fo:block font-size="larger">font-size="larger"
+                  <fo:block font-size="larger">font-size="larger"
                   </fo:block>
                 </fo:block>
               </fo:block>
             </fo:block>
           </fo:block>
-          <fo:block font-family="serif"> font-family="serif" font-size not specified
-            <fo:block font-family="serif" font-size="larger"> font-family="serif" font-size="larger"
-              <fo:block font-family="serif" font-size="larger"> font-family="serif" font-size="larger"
-                <fo:block font-family="serif" font-size="larger"> font-family="serif" font-size="larger"
-                  <fo:block font-family="serif" font-size="larger"> font-family="serif" font-size="larger"
-                    <fo:block font-family="serif" font-size="larger"> font-family="serif" font-size="larger"
-                    </fo:block>
+          <fo:block font-size="24pt">font-size="24pt"
+            <fo:block font-size="smaller">font-size="smaller"
+              <fo:block font-size="smaller">font-size="smaller"
+                <fo:block font-size="larger">font-size="larger"
+                  <fo:block font-size="larger">font-size="larger"
                   </fo:block>
                 </fo:block>
               </fo:block>
             </fo:block>
           </fo:block>
-          <fo:block font-family="sans-serif"> font-family="sans-serif" font-size not specified
-            <fo:block font-family="sans-serif" font-size="smaller"> font-family="sans-serif" font-size="smaller"
-              <fo:block font-family="sans-serif" font-size="smaller"> font-family="sans-serif" font-size="smaller"
-                <fo:block font-family="sans-serif" font-size="smaller"> font-family="sans-serif" font-size="smaller"
-                  <fo:block font-family="sans-serif" font-size="smaller"> font-family="sans-serif" font-size="smaller"
-                    <fo:block font-family="sans-serif" font-size="smaller"> font-family="sans-serif" font-size="smaller"
-                    </fo:block>
+          <fo:block font-size="12pt">font-size="12pt"
+            <fo:block font-size="smaller">font-size="smaller"
+              <fo:block font-size="smaller">font-size="smaller"
+                <fo:block font-size="larger">font-size="larger"
+                  <fo:block font-size="larger">font-size="larger"
                   </fo:block>
                 </fo:block>
               </fo:block>
             </fo:block>
           </fo:block>
-          <fo:block font-family="sans-serif"> font-family="sans-serif" font-size not specified
-            <fo:block font-family="sans-serif" font-size="larger"> font-family="sans-serif" font-size="larger"
-              <fo:block font-family="sans-serif" font-size="larger"> font-family="sans-serif" font-size="larger"
-                <fo:block font-family="sans-serif" font-size="larger"> font-family="sans-serif" font-size="larger"
-                  <fo:block font-family="sans-serif" font-size="larger"> font-family="sans-serif" font-size="larger"
-                    <fo:block font-family="sans-serif" font-size="larger"> font-family="sans-serif" font-size="larger"
-                    </fo:block>
+          <fo:block font-size="6pt">font-size="6pt"
+            <fo:block font-size="smaller">font-size="smaller"
+              <fo:block font-size="smaller">font-size="smaller"
+                <fo:block font-size="larger">font-size="larger"
+                  <fo:block font-size="larger">font-size="larger"
                   </fo:block>
                 </fo:block>
               </fo:block>
             </fo:block>
           </fo:block>
-          <fo:block font-family="monospace"> font-family="monospace" font-size not specified
-            <fo:block font-family="monospace" font-size="smaller"> font-family="monospace" font-size="smaller"
-              <fo:block font-family="monospace" font-size="smaller"> font-family="monospace" font-size="smaller"
-                <fo:block font-family="monospace" font-size="smaller"> font-family="monospace" font-size="smaller"
-                  <fo:block font-family="monospace" font-size="smaller"> font-family="monospace" font-size="smaller"
-                    <fo:block font-family="monospace" font-size="smaller"> font-family="monospace" font-size="smaller"
-                    </fo:block>
+          <fo:block font-size="6pt">font-size="6pt"
+            <fo:block font-size="larger">font-size="larger"
+              <fo:block font-size="larger">font-size="larger"
+                <fo:block font-size="smaller">font-size="smaller"
+                  <fo:block font-size="smaller">font-size="smaller"
                   </fo:block>
                 </fo:block>
               </fo:block>
             </fo:block>
           </fo:block>
-          <fo:block font-family="monospace"> font-family="monospace" font-size not specified
-            <fo:block font-family="monospace" font-size="larger"> font-family="monospace" font-size="larger"
-              <fo:block font-family="monospace" font-size="larger"> font-family="monospace" font-size="larger"
-                <fo:block font-family="monospace" font-size="larger"> font-family="monospace" font-size="larger"
-                  <fo:block font-family="monospace" font-size="larger"> font-family="monospace" font-size="larger"
-                    <fo:block font-family="monospace" font-size="larger"> font-family="monospace" font-size="larger"
-                    </fo:block>
+          <fo:block font-size="12pt">font-size="12pt"
+            <fo:block font-size="larger">font-size="larger"
+              <fo:block font-size="larger">font-size="larger"
+                <fo:block font-size="smaller">font-size="smaller"
+                  <fo:block font-size="smaller">font-size="smaller"
                   </fo:block>
                 </fo:block>
               </fo:block>
             </fo:block>
           </fo:block>
+          <fo:block font-size="24pt">font-size="24pt"
+            <fo:block font-size="larger">font-size="larger"
+              <fo:block font-size="larger">font-size="larger"
+                <fo:block font-size="smaller">font-size="smaller"
+                  <fo:block font-size="smaller">font-size="smaller"
+                  </fo:block>
+                </fo:block>
+              </fo:block>
+            </fo:block>
+          </fo:block>
+          <fo:block font-size="36pt">font-size="36pt"
+            <fo:block font-size="larger">font-size="larger"
+              <fo:block font-size="larger">font-size="larger"
+                <fo:block font-size="smaller">font-size="smaller"
+                  <fo:block font-size="smaller">font-size="smaller"
+                  </fo:block>
+                </fo:block>
+              </fo:block>
+            </fo:block>
+          </fo:block>
+          <fo:block font-size="larger">font-size="larger"
+            <fo:block font-size="larger">font-size="larger"
+              <fo:block font-size="smaller">font-size="smaller"
+                <fo:block font-size="smaller">font-size="smaller"
+                </fo:block>
+              </fo:block>
+            </fo:block>
+          </fo:block>
         </fo:flow>
       </fo:page-sequence>
     </fo:root>
   </fo>
   <checks>
-    <eval expected="12000" xpath="//flow/block[1]/lineArea/text/@font-size"/>
-    <eval expected="9999" xpath="//flow/block[1]/block/lineArea/text/@font-size"/>
-    <eval expected="8332" xpath="//flow/block[1]/block/block/lineArea/text/@font-size"/>
-    <eval expected="6943" xpath="//flow/block[1]/block/block/block/lineArea/text/@font-size"/>
-    <eval expected="5785" xpath="//flow/block[1]/block/block/block/block/lineArea/text/@font-size"/>
-    <eval expected="4820" xpath="//flow/block[1]/block/block/block/block/block/lineArea/text/@font-size"/>
-    <eval expected="12000" xpath="//flow/block[2]/lineArea/text/@font-size"/>
-    <eval expected="14400" xpath="//flow/block[2]/block/lineArea/text/@font-size"/>
+    <eval expected="36000" xpath="//flow/block[1]/lineArea/text/@font-size"/>
+    <eval expected="29860" xpath="//flow/block[1]/block/lineArea/text/@font-size"/>
+    <eval expected="24883" xpath="//flow/block[1]/block/block/lineArea/text/@font-size"/>
+    <eval expected="29860" xpath="//flow/block[1]/block/block/block/lineArea/text/@font-size"/>
+    <eval expected="35832" xpath="//flow/block[1]/block/block/block/block/lineArea/text/@font-size"/>
+    <eval expected="24000" xpath="//flow/block[2]/lineArea/text/@font-size"/>
+    <eval expected="20736" xpath="//flow/block[2]/block/lineArea/text/@font-size"/>
     <eval expected="17280" xpath="//flow/block[2]/block/block/lineArea/text/@font-size"/>
     <eval expected="20736" xpath="//flow/block[2]/block/block/block/lineArea/text/@font-size"/>
     <eval expected="24883" xpath="//flow/block[2]/block/block/block/block/lineArea/text/@font-size"/>
-    <eval expected="29859" xpath="//flow/block[2]/block/block/block/block/block/lineArea/text/@font-size"/>
     <eval expected="12000" xpath="//flow/block[3]/lineArea/text/@font-size"/>
-    <eval expected="9999" xpath="//flow/block[3]/block/lineArea/text/@font-size"/>
-    <eval expected="8332" xpath="//flow/block[3]/block/block/lineArea/text/@font-size"/>
-    <eval expected="6943" xpath="//flow/block[3]/block/block/block/lineArea/text/@font-size"/>
-    <eval expected="5785" xpath="//flow/block[3]/block/block/block/block/lineArea/text/@font-size"/>
-    <eval expected="4820" xpath="//flow/block[3]/block/block/block/block/block/lineArea/text/@font-size"/>
-    <eval expected="12000" xpath="//flow/block[4]/lineArea/text/@font-size"/>
-    <eval expected="14400" xpath="//flow/block[4]/block/lineArea/text/@font-size"/>
-    <eval expected="17280" xpath="//flow/block[4]/block/block/lineArea/text/@font-size"/>
-    <eval expected="20736" xpath="//flow/block[4]/block/block/block/lineArea/text/@font-size"/>
-    <eval expected="24883" xpath="//flow/block[4]/block/block/block/block/lineArea/text/@font-size"/>
-    <eval expected="29859" xpath="//flow/block[4]/block/block/block/block/block/lineArea/text/@font-size"/>
-    <eval expected="12000" xpath="//flow/block[5]/lineArea/text/@font-size"/>
-    <eval expected="9999" xpath="//flow/block[5]/block/lineArea/text/@font-size"/>
-    <eval expected="8332" xpath="//flow/block[5]/block/block/lineArea/text/@font-size"/>
-    <eval expected="6943" xpath="//flow/block[5]/block/block/block/lineArea/text/@font-size"/>
-    <eval expected="5785" xpath="//flow/block[5]/block/block/block/block/lineArea/text/@font-size"/>
-    <eval expected="4820" xpath="//flow/block[5]/block/block/block/block/block/lineArea/text/@font-size"/>
+    <eval expected="10000" xpath="//flow/block[3]/block/lineArea/text/@font-size"/>
+    <eval expected="8333" xpath="//flow/block[3]/block/block/lineArea/text/@font-size"/>
+    <eval expected="10000" xpath="//flow/block[3]/block/block/block/lineArea/text/@font-size"/>
+    <eval expected="12000" xpath="//flow/block[3]/block/block/block/block/lineArea/text/@font-size"/>
+    <eval expected="6000" xpath="//flow/block[4]/lineArea/text/@font-size"/>
+    <eval expected="4823" xpath="//flow/block[4]/block/lineArea/text/@font-size"/>
+    <eval expected="4019" xpath="//flow/block[4]/block/block/lineArea/text/@font-size"/>
+    <eval expected="4823" xpath="//flow/block[4]/block/block/block/lineArea/text/@font-size"/>
+    <eval expected="5788" xpath="//flow/block[4]/block/block/block/block/lineArea/text/@font-size"/>
+    <eval expected="6000" xpath="//flow/block[5]/lineArea/text/@font-size"/>
+    <eval expected="6944" xpath="//flow/block[5]/block/lineArea/text/@font-size"/>
+    <eval expected="8333" xpath="//flow/block[5]/block/block/lineArea/text/@font-size"/>
+    <eval expected="6944" xpath="//flow/block[5]/block/block/block/lineArea/text/@font-size"/>
+    <eval expected="5787" xpath="//flow/block[5]/block/block/block/block/lineArea/text/@font-size"/>
     <eval expected="12000" xpath="//flow/block[6]/lineArea/text/@font-size"/>
     <eval expected="14400" xpath="//flow/block[6]/block/lineArea/text/@font-size"/>
     <eval expected="17280" xpath="//flow/block[6]/block/block/lineArea/text/@font-size"/>
-    <eval expected="20736" xpath="//flow/block[6]/block/block/block/lineArea/text/@font-size"/>
-    <eval expected="24883" xpath="//flow/block[6]/block/block/block/block/lineArea/text/@font-size"/>
-    <eval expected="29859" xpath="//flow/block[6]/block/block/block/block/block/lineArea/text/@font-size"/>
+    <eval expected="14400" xpath="//flow/block[6]/block/block/block/lineArea/text/@font-size"/>
+    <eval expected="12000" xpath="//flow/block[6]/block/block/block/block/lineArea/text/@font-size"/>
+    <eval expected="24000" xpath="//flow/block[7]/lineArea/text/@font-size"/>
+    <eval expected="29860" xpath="//flow/block[7]/block/lineArea/text/@font-size"/>
+    <eval expected="35832" xpath="//flow/block[7]/block/block/lineArea/text/@font-size"/>
+    <eval expected="29860" xpath="//flow/block[7]/block/block/block/lineArea/text/@font-size"/>
+    <eval expected="24883" xpath="//flow/block[7]/block/block/block/block/lineArea/text/@font-size"/>
+    <eval expected="36000" xpath="//flow/block[8]/lineArea/text/@font-size"/>
+    <eval expected="42998" xpath="//flow/block[8]/block/lineArea/text/@font-size"/>
+    <eval expected="51598" xpath="//flow/block[8]/block/block/lineArea/text/@font-size"/>
+    <eval expected="42998" xpath="//flow/block[8]/block/block/block/lineArea/text/@font-size"/>
+    <eval expected="35832" xpath="//flow/block[8]/block/block/block/block/lineArea/text/@font-size"/>
   </checks>
 </testcase>



---------------------------------------------------------------------
To unsubscribe, e-mail: fop-commits-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: fop-commits-help@xmlgraphics.apache.org