]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
merge from trunk
authorSimon Pepping <spepping@apache.org>
Fri, 11 Feb 2011 11:59:32 +0000 (11:59 +0000)
committerSimon Pepping <spepping@apache.org>
Fri, 11 Feb 2011 11:59:32 +0000 (11:59 +0000)
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/branches/Temp_ComplexScripts@1069764 13f79535-47bb-0310-9956-ffa450edef68

15 files changed:
1  2 
build.xml
src/java/org/apache/fop/fo/Constants.java
src/java/org/apache/fop/fo/FOPropertyMapping.java
src/java/org/apache/fop/fo/PropertyList.java
src/java/org/apache/fop/layoutmgr/AbstractLayoutManager.java
src/java/org/apache/fop/layoutmgr/BlockLayoutManager.java
src/java/org/apache/fop/layoutmgr/ExternalDocumentLayoutManager.java
src/java/org/apache/fop/layoutmgr/inline/AlignmentContext.java
src/java/org/apache/fop/layoutmgr/inline/CharacterLayoutManager.java
src/java/org/apache/fop/layoutmgr/inline/InlineLayoutManager.java
src/java/org/apache/fop/layoutmgr/inline/LeafNodeLayoutManager.java
src/java/org/apache/fop/layoutmgr/inline/LineLayoutManager.java
src/java/org/apache/fop/layoutmgr/inline/ScaledBaselineTable.java
src/java/org/apache/fop/render/intermediate/IFSerializer.java
src/java/org/apache/fop/render/xml/XMLRenderer.java

diff --cc build.xml
Simple merge
index 7af7f3e73b22b47cfff3cd48c91def1d10991133,8e96f3eb124c2bba358f0a22c8ad99e58249e3fb..dd9c34149423d9413182cdfe1e7cf575bedcec58
@@@ -459,8 -446,9 +446,9 @@@ public abstract class AbstractLayoutMan
      }
  
      /** {@inheritDoc} */
+     @Override
      public String toString() {
 -        return (super.toString() + (fobj != null ? "[fobj=" + fobj.toString() + "]" : ""));
 +        return (super.toString() + (fobj != null ? "{fobj = " + fobj.toString() + "}" : ""));
      }
  
      /** {@inheritDoc} */
index ed57b70dde2b79bd8379b1b438144dd424a38358,5cfe72fa2bba913dd8491fa59cfff99627f2ba56..ba7467158c92680890b7512a4fede9b5247f27f2
@@@ -172,7 -173,7 +174,7 @@@ public class AlignmentContext implement
       * @param lineHeight the computed value of the lineHeight property
       * @param writingMode the current writing mode
       */
-     public AlignmentContext(Font font, int lineHeight, WritingMode writingMode) {
 -    AlignmentContext(Font font, int lineHeight, int writingMode) {
++    AlignmentContext(Font font, int lineHeight, WritingMode writingMode) {
          this.areaHeight = font.getAscender() - font.getDescender();
          this.lineHeight = lineHeight;
          this.xHeight = font.getXHeight();
       * Return the dominant baseline identifier.
       * @return the dominant baseline identifier
       */
-     public int getDominantBaselineIdentifier() {
-         return scaledBaselineTable.getDominantBaselineIdentifier();
+     private int getDominantBaselineIdentifier() {
+         return actualBaselineTable.getDominantBaselineIdentifier();
      }
  
-     public WritingMode getWritingMode() {
 +    /**
 +     * Return the writing mode.
 +     * @return the writing mode
 +     */
-     }
++/*    public WritingMode getWritingMode() {
 +        return scaledBaselineTable.getWritingMode();
++    }*/
 +
      /**
       * Calculates the baseline shift value based on the baseline-shift
       * property value.
                      && parentAlignmentContext.usesInitialBaselineTable());
      }
  
-     private boolean isHorizontalWritingMode() {
++    /* private boolean isHorizontalWritingMode() {
 +        return (getWritingMode() == WritingMode.LR_TB || getWritingMode() == WritingMode.RL_TB);
-     }
++    }*/
 +
      /** {@inheritDoc} */
      public String toString() {
          StringBuffer sb = new StringBuffer(64);
index 21daee907ecb4a4507c8fc2c1dc920e46245974f,d5d3e5edbed29117ec40071a8489bb16a4d23e68..1918530378863131e3b73665c98cf1a81a423ac9
  
  package org.apache.fop.layoutmgr.inline;
  
+ import org.apache.fop.fo.Constants;
 +import org.apache.fop.traits.WritingMode;
  
  /**
   * The FOP specific incarnation of the XSL-FO scaled baseline table.
   * All baseline tables are scaled to the font size of the font they
   * where the dominant baseline intersects the start edge of the box.
   * All measurements are in mpt.
   */
- public interface ScaledBaselineTable {
+ final class ScaledBaselineTable {
+     private static final float HANGING_BASELINE_FACTOR = 0.8f;
+     private static final float MATHEMATICAL_BASELINE_FACTOR = 0.5f;
+     private final int altitude;
+     private final int depth;
+     private final int xHeight;
+     private final int dominantBaselineIdentifier;
 -    private final int writingMode;
++    private final WritingMode writingMode;
+     private final int dominantBaselineOffset;
+     private int beforeEdgeOffset;
+     private int afterEdgeOffset;
+     /**
+      *
+      * Creates a new instance of BasicScaledBaselineTable for the given
+      * altitude, depth, xHeight, baseline and writing mode.
+      * @param altitude the height of the box or the font ascender
+      * @param depth the font descender or 0
+      * @param xHeight the font xHeight
+      * @param dominantBaselineIdentifier the dominant baseline given as an integer constant
+      * @param writingMode the writing mode given as an integer constant
+      */
+     ScaledBaselineTable(int altitude,
+             int depth,
+             int xHeight,
+             int dominantBaselineIdentifier,
 -            int writingMode) {
++            WritingMode writingMode) {
+         this.altitude = altitude;
+         this.depth = depth;
+         this.xHeight = xHeight;
+         this.dominantBaselineIdentifier = dominantBaselineIdentifier;
+         this.writingMode = writingMode;
+         this.dominantBaselineOffset = getBaselineDefaultOffset(this.dominantBaselineIdentifier);
+         this.beforeEdgeOffset = altitude - dominantBaselineOffset;
+         this.afterEdgeOffset = depth - dominantBaselineOffset;
+     }
  
      /**
-      * Return the dominant baseline identifer for this alignment context.
-      * @return the dominant baseline identifier
+      * Return the dominant baseline for this baseline table.
+      * @return the dominant baseline
       */
-     int getDominantBaselineIdentifier();
+     int getDominantBaselineIdentifier() {
+         return this.dominantBaselineIdentifier;
+     }
  
      /**
-      * Return the writing mode for this aligment context.
+      * Return the writing mode for this baseline table.
       * @return the writing mode
       */
-     WritingMode getWritingMode();
 -    int getWritingMode() {
++    WritingMode getWritingMode() {
+         return this.writingMode;
+     }
+     /**
+      * Return the offset of the given baseline from the dominant baseline.
+      *
+      * @param baselineIdentifier a baseline identifier
+      * @return the offset from the dominant baseline
+      */
+     int getBaseline(int baselineIdentifier) {
+         int offset = 0;
+         if (!isHorizontalWritingMode()) {
+             switch (baselineIdentifier) {
+                 case Constants.EN_TOP:
+                 case Constants.EN_TEXT_TOP:
+                 case Constants.EN_TEXT_BOTTOM:
+                 case Constants.EN_BOTTOM:
+                 throw new IllegalArgumentException("Baseline " + baselineIdentifier
+                         + " only supported for horizontal writing modes");
+                 default: // TODO
+             }
+         }
+         switch (baselineIdentifier) {
+             case Constants.EN_TOP: // fall through
+             case Constants.EN_BEFORE_EDGE:
+                 offset = beforeEdgeOffset;
+                 break;
+             case Constants.EN_TEXT_TOP:
+             case Constants.EN_TEXT_BEFORE_EDGE:
+             case Constants.EN_HANGING:
+             case Constants.EN_CENTRAL:
+             case Constants.EN_MIDDLE:
+             case Constants.EN_MATHEMATICAL:
+             case Constants.EN_ALPHABETIC:
+             case Constants.EN_IDEOGRAPHIC:
+             case Constants.EN_TEXT_BOTTOM:
+             case Constants.EN_TEXT_AFTER_EDGE:
+                 offset = getBaselineDefaultOffset(baselineIdentifier) - dominantBaselineOffset;
+                 break;
+             case Constants.EN_BOTTOM: // fall through
+             case Constants.EN_AFTER_EDGE:
+                 offset = afterEdgeOffset;
+                 break;
+             default: throw new IllegalArgumentException(String.valueOf(baselineIdentifier));
+         }
+         return offset;
+     }
+     private boolean isHorizontalWritingMode() {
 -        return writingMode == Constants.EN_LR_TB || writingMode == Constants.EN_RL_TB;
++        return writingMode == WritingMode.LR_TB || writingMode == WritingMode.RL_TB;
+     }
  
      /**
-      * Return the offset measured from the dominant
-      * baseline for the given baseline identifier.
+      * Return the baseline offset measured from the font's default
+      * baseline for the given baseline.
       * @param baselineIdentifier the baseline identifier
       * @return the baseline offset
       */
index c5064d9ee18a968717eb000348e2d4ee6cae5742,85995e8b251e44e5f993632a3711871a3b127f0e..0d500d5a83b5e2b84fb7beba173a5a79e7849216
@@@ -815,12 -838,10 +842,13 @@@ public class XMLRenderer extends Abstra
      /**
       * {@inheritDoc}
       */
+     @Override
      protected void renderWord(WordArea word) {
          atts.clear();
 -        addAttribute("offset", word.getOffset());
 +        int offset = word.getBlockProgressionOffset();
 +        if ( offset != 0 ) {
 +            addAttribute("offset", offset);
 +        }
          int[] letterAdjust = word.getLetterAdjustArray();
          if (letterAdjust != null) {
              StringBuffer sb = new StringBuffer(64);
      /**
       * {@inheritDoc}
       */
+     @Override
      protected void renderSpace(SpaceArea space) {
          atts.clear();
 -        addAttribute("offset", space.getOffset());
 +        int offset = space.getBlockProgressionOffset();
 +        if ( offset != 0 ) {
 +            addAttribute("offset", offset);
 +        }
 +        maybeAddLevelAttribute(space);
          if (!space.isAdjustable()) {
              addAttribute("adj", "false"); //default is true
          }