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 vh...@apache.org on 2013/11/07 13:27:22 UTC

svn commit: r1539610 - in /xmlgraphics/fop/branches/Temp_InlineContainer: src/java/org/apache/fop/layoutmgr/inline/InlineContainerLayoutManager.java test/layoutengine/standard-testcases/inline-container_alignment-adjust.xml

Author: vhennebert
Date: Thu Nov  7 12:27:22 2013
New Revision: 1539610

URL: http://svn.apache.org/r1539610
Log:
Added support for non-default values of alignment-adjust

Added:
    xmlgraphics/fop/branches/Temp_InlineContainer/test/layoutengine/standard-testcases/inline-container_alignment-adjust.xml   (with props)
Modified:
    xmlgraphics/fop/branches/Temp_InlineContainer/src/java/org/apache/fop/layoutmgr/inline/InlineContainerLayoutManager.java

Modified: xmlgraphics/fop/branches/Temp_InlineContainer/src/java/org/apache/fop/layoutmgr/inline/InlineContainerLayoutManager.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_InlineContainer/src/java/org/apache/fop/layoutmgr/inline/InlineContainerLayoutManager.java?rev=1539610&r1=1539609&r2=1539610&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_InlineContainer/src/java/org/apache/fop/layoutmgr/inline/InlineContainerLayoutManager.java (original)
+++ xmlgraphics/fop/branches/Temp_InlineContainer/src/java/org/apache/fop/layoutmgr/inline/InlineContainerLayoutManager.java Thu Nov  7 12:27:22 2013
@@ -27,6 +27,8 @@ import org.apache.fop.area.Area;
 import org.apache.fop.area.Trait;
 import org.apache.fop.area.inline.Container;
 import org.apache.fop.area.inline.InlineViewport;
+import org.apache.fop.datatypes.Length;
+import org.apache.fop.fo.Constants;
 import org.apache.fop.fo.flow.InlineContainer;
 import org.apache.fop.fo.properties.CommonBorderPaddingBackground;
 import org.apache.fop.fo.properties.LengthRangeProperty;
@@ -152,7 +154,7 @@ public class InlineContainerLayoutManage
                 ic.getAlignmentAdjust(), ic.getAlignmentBaseline(),
                 ic.getBaselineShift(), ic.getDominantBaseline(),
                 context.getAlignmentContext());
-        int baselineOffset = hasLineAreaDescendant() ? getBaselineOffset() : contentAreaBPD;
+        int baselineOffset = getAlignmentPoint();
         ac.resizeLine(contentAreaBPD, baselineOffset);
         return ac;
     }
@@ -182,6 +184,45 @@ public class InlineContainerLayoutManage
         return ((InlineContainer) fobj).getOverflow() != EN_ERROR_IF_OVERFLOW;
     }
 
+    private int getAlignmentPoint() {
+        Length alignmentAdjust = ((InlineContainer) fobj).getAlignmentAdjust();
+        int baseline = alignmentAdjust.getEnum();
+        if (baseline == Constants.EN_AUTO
+                || baseline == Constants.EN_BASELINE) {
+            return getInlineContainerBaselineOffset(alignmentBaseline);
+        } else if (baseline != 0) {
+            return getInlineContainerBaselineOffset(baseline);
+        } else {
+            return 0;
+        }
+    }
+
+    private int getInlineContainerBaselineOffset(int property) {
+        switch (property) {
+        case Constants.EN_BEFORE_EDGE:
+        case Constants.EN_TEXT_BEFORE_EDGE:
+            return 0;
+        case Constants.EN_AFTER_EDGE:
+        case Constants.EN_TEXT_AFTER_EDGE:
+            return contentAreaBPD;
+        case Constants.EN_MIDDLE:
+        case Constants.EN_CENTRAL:
+        case Constants.EN_MATHEMATICAL:
+            return contentAreaBPD / 2;
+        case Constants.EN_IDEOGRAPHIC:
+            return contentAreaBPD * 7 / 10;
+        case Constants.EN_ALPHABETIC:
+            return contentAreaBPD * 6 / 10;
+        case Constants.EN_HANGING:
+            return contentAreaBPD * 2 / 10;
+        case Constants.EN_AUTO:
+        case Constants.EN_BASELINE:
+            return hasLineAreaDescendant() ? getBaselineOffset() : contentAreaBPD;
+        default:
+            throw new AssertionError("Unknown baseline value: " + property);
+        }
+    }
+
     @Override
     public boolean getGeneratesReferenceArea() {
         return true;

Added: xmlgraphics/fop/branches/Temp_InlineContainer/test/layoutengine/standard-testcases/inline-container_alignment-adjust.xml
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_InlineContainer/test/layoutengine/standard-testcases/inline-container_alignment-adjust.xml?rev=1539610&view=auto
==============================================================================
--- xmlgraphics/fop/branches/Temp_InlineContainer/test/layoutengine/standard-testcases/inline-container_alignment-adjust.xml (added)
+++ xmlgraphics/fop/branches/Temp_InlineContainer/test/layoutengine/standard-testcases/inline-container_alignment-adjust.xml Thu Nov  7 12:27:22 2013
@@ -0,0 +1,210 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You 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$ -->
+<testcase>
+  <info>
+    <p>
+      Checks that the alignment-adjust property on inline-container behaves properly.
+    </p>
+  </info>
+  <fo>
+    <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
+      <fo:layout-master-set>
+        <fo:simple-page-master master-name="page"
+          page-height="170pt" page-width="220pt" margin="10pt">
+          <fo:region-body/>
+        </fo:simple-page-master>
+      </fo:layout-master-set>
+
+      <fo:page-sequence master-reference="page">
+        <fo:flow flow-name="xsl-region-body">
+          <fo:block space-after="10pt">alignment-adjust="before-edge":</fo:block>
+          <fo:block>The line before. The line before. Before: <fo:inline-container width="100pt" 
+              alignment-adjust="before-edge">
+              <fo:block>Inside the inline-container.</fo:block>
+            </fo:inline-container> After the inline-container.</fo:block>
+        </fo:flow>
+      </fo:page-sequence>
+
+      <fo:page-sequence master-reference="page">
+        <fo:flow flow-name="xsl-region-body">
+          <fo:block space-after="10pt">alignment-adjust="text-before-edge":</fo:block>
+          <fo:block>The line before. The line before. Before: <fo:inline-container width="100pt" 
+              alignment-adjust="text-before-edge">
+              <fo:block>Inside the inline-container.</fo:block>
+            </fo:inline-container> After the inline-container.</fo:block>
+        </fo:flow>
+      </fo:page-sequence>
+
+      <fo:page-sequence master-reference="page">
+        <fo:flow flow-name="xsl-region-body">
+          <fo:block space-after="10pt">alignment-adjust="after-edge":</fo:block>
+          <fo:block>The line before. The line before. Before: <fo:inline-container width="100pt" 
+              alignment-adjust="after-edge">
+              <fo:block>Inside the inline-container.</fo:block>
+            </fo:inline-container> After the inline-container.</fo:block>
+        </fo:flow>
+      </fo:page-sequence>
+
+      <fo:page-sequence master-reference="page">
+        <fo:flow flow-name="xsl-region-body">
+          <fo:block space-after="10pt">alignment-adjust="text-after-edge":</fo:block>
+          <fo:block>The line before. The line before. Before: <fo:inline-container width="100pt" 
+              alignment-adjust="text-after-edge">
+              <fo:block>Inside the inline-container.</fo:block>
+            </fo:inline-container> After the inline-container.</fo:block>
+        </fo:flow>
+      </fo:page-sequence>
+
+      <fo:page-sequence master-reference="page">
+        <fo:flow flow-name="xsl-region-body">
+          <fo:block space-after="10pt">alignment-adjust="middle":</fo:block>
+          <fo:block>The line before. The line before. Before: <fo:inline-container width="100pt" 
+              alignment-adjust="middle">
+              <fo:block>Inside the inline-container.</fo:block>
+            </fo:inline-container> After the inline-container.</fo:block>
+        </fo:flow>
+      </fo:page-sequence>
+
+      <fo:page-sequence master-reference="page">
+        <fo:flow flow-name="xsl-region-body">
+          <fo:block space-after="10pt">alignment-adjust="central":</fo:block>
+          <fo:block>The line before. The line before. Before: <fo:inline-container width="100pt" 
+              alignment-adjust="central">
+              <fo:block>Inside the inline-container.</fo:block>
+            </fo:inline-container> After the inline-container.</fo:block>
+        </fo:flow>
+      </fo:page-sequence>
+
+      <fo:page-sequence master-reference="page">
+        <fo:flow flow-name="xsl-region-body">
+          <fo:block space-after="10pt">alignment-adjust="ideographic":</fo:block>
+          <fo:block>The line before. The line before. Before: <fo:inline-container width="100pt" 
+              alignment-adjust="ideographic">
+              <fo:block>Inside the inline-container.</fo:block>
+            </fo:inline-container> After the inline-container.</fo:block>
+        </fo:flow>
+      </fo:page-sequence>
+
+      <fo:page-sequence master-reference="page">
+        <fo:flow flow-name="xsl-region-body">
+          <fo:block space-after="10pt">alignment-adjust="alphabetic":</fo:block>
+          <fo:block>The line before. The line before. Before: <fo:inline-container width="100pt" 
+              alignment-adjust="alphabetic">
+              <fo:block>Inside the inline-container.</fo:block>
+            </fo:inline-container> After the inline-container.</fo:block>
+        </fo:flow>
+      </fo:page-sequence>
+
+      <fo:page-sequence master-reference="page">
+        <fo:flow flow-name="xsl-region-body">
+          <fo:block space-after="10pt">alignment-adjust="hanging":</fo:block>
+          <fo:block>The line before. The line before. Before: <fo:inline-container width="100pt" 
+              alignment-adjust="hanging">
+              <fo:block>Inside the inline-container.</fo:block>
+            </fo:inline-container> After the inline-container.</fo:block>
+        </fo:flow>
+      </fo:page-sequence>
+
+      <fo:page-sequence master-reference="page">
+        <fo:flow flow-name="xsl-region-body">
+          <fo:block space-after="10pt">alignment-adjust="mathematical":</fo:block>
+          <fo:block>The line before. The line before. Before: <fo:inline-container width="100pt" 
+              alignment-adjust="mathematical">
+              <fo:block>Inside the inline-container.</fo:block>
+            </fo:inline-container> After the inline-container.</fo:block>
+        </fo:flow>
+      </fo:page-sequence>
+
+    </fo:root>
+  </fo>
+
+  <checks>
+
+    <!-- before-edge -->
+    <eval expected="37416" xpath="//pageSequence[1]//flow/block[2]/lineArea[2]/@bpd"/>
+    <eval expected="0"     xpath="//pageSequence[1]//flow/block[2]/lineArea[2]/text[1]/@offset"/>
+    <eval expected="8616"  xpath="//pageSequence[1]//flow/block[2]/lineArea[2]/text[1]/@baseline"/>
+    <eval expected="28800" xpath="//pageSequence[1]//flow/block[2]/lineArea[2]/viewport/@bpd"/>
+    <eval expected="8616"  xpath="//pageSequence[1]//flow/block[2]/lineArea[2]/viewport/@offset"/>
+
+    <!-- text-before-edge -->
+    <eval expected="37416" xpath="//pageSequence[2]//flow/block[2]/lineArea[2]/@bpd"/>
+    <eval expected="0"     xpath="//pageSequence[2]//flow/block[2]/lineArea[2]/text[1]/@offset"/>
+    <eval expected="8616"  xpath="//pageSequence[2]//flow/block[2]/lineArea[2]/text[1]/@baseline"/>
+    <eval expected="28800" xpath="//pageSequence[2]//flow/block[2]/lineArea[2]/viewport/@bpd"/>
+    <eval expected="8616"  xpath="//pageSequence[2]//flow/block[2]/lineArea[2]/viewport/@offset"/>
+
+    <!-- after-edge -->
+    <eval expected="31284" xpath="//pageSequence[3]//flow/block[2]/lineArea[2]/@bpd"/>
+    <eval expected="20184" xpath="//pageSequence[3]//flow/block[2]/lineArea[2]/text[1]/@offset"/>
+    <eval expected="8616"  xpath="//pageSequence[3]//flow/block[2]/lineArea[2]/text[1]/@baseline"/>
+    <eval expected="28800" xpath="//pageSequence[3]//flow/block[2]/lineArea[2]/viewport/@bpd"/>
+    <eval expected="0"     xpath="//pageSequence[3]//flow/block[2]/lineArea[2]/viewport/@offset"/>
+
+    <!-- text-after-edge -->
+    <eval expected="31284" xpath="//pageSequence[4]//flow/block[2]/lineArea[2]/@bpd"/>
+    <eval expected="20184" xpath="//pageSequence[4]//flow/block[2]/lineArea[2]/text[1]/@offset"/>
+    <eval expected="8616"  xpath="//pageSequence[4]//flow/block[2]/lineArea[2]/text[1]/@baseline"/>
+    <eval expected="28800" xpath="//pageSequence[4]//flow/block[2]/lineArea[2]/viewport/@bpd"/>
+    <eval expected="0"     xpath="//pageSequence[4]//flow/block[2]/lineArea[2]/viewport/@offset"/>
+
+    <!-- middle -->
+    <eval expected="28800" xpath="//pageSequence[5]//flow/block[2]/lineArea[2]/@bpd"/>
+    <eval expected="5784"  xpath="//pageSequence[5]//flow/block[2]/lineArea[2]/text[1]/@offset"/>
+    <eval expected="8616"  xpath="//pageSequence[5]//flow/block[2]/lineArea[2]/text[1]/@baseline"/>
+    <eval expected="28800" xpath="//pageSequence[5]//flow/block[2]/lineArea[2]/viewport/@bpd"/>
+    <eval expected="0"     xpath="//pageSequence[5]//flow/block[2]/lineArea[2]/viewport/@offset"/>
+
+    <!-- central -->
+    <eval expected="28800" xpath="//pageSequence[6]//flow/block[2]/lineArea[2]/@bpd"/>
+    <eval expected="5784"  xpath="//pageSequence[6]//flow/block[2]/lineArea[2]/text[1]/@offset"/>
+    <eval expected="8616"  xpath="//pageSequence[6]//flow/block[2]/lineArea[2]/text[1]/@baseline"/>
+    <eval expected="28800" xpath="//pageSequence[6]//flow/block[2]/lineArea[2]/viewport/@bpd"/>
+    <eval expected="0"     xpath="//pageSequence[6]//flow/block[2]/lineArea[2]/viewport/@offset"/>
+
+    <!-- ideographic -->
+    <eval expected="28800" xpath="//pageSequence[7]//flow/block[2]/lineArea[2]/@bpd"/>
+    <eval expected="11544" xpath="//pageSequence[7]//flow/block[2]/lineArea[2]/text[1]/@offset"/>
+    <eval expected="8616"  xpath="//pageSequence[7]//flow/block[2]/lineArea[2]/text[1]/@baseline"/>
+    <eval expected="28800" xpath="//pageSequence[7]//flow/block[2]/lineArea[2]/viewport/@bpd"/>
+    <eval expected="0"     xpath="//pageSequence[7]//flow/block[2]/lineArea[2]/viewport/@offset"/>
+
+    <!-- alphabetic -->
+    <eval expected="28800" xpath="//pageSequence[8]//flow/block[2]/lineArea[2]/@bpd"/>
+    <eval expected="8664"  xpath="//pageSequence[8]//flow/block[2]/lineArea[2]/text[1]/@offset"/>
+    <eval expected="8616"  xpath="//pageSequence[8]//flow/block[2]/lineArea[2]/text[1]/@baseline"/>
+    <eval expected="28800" xpath="//pageSequence[8]//flow/block[2]/lineArea[2]/viewport/@bpd"/>
+    <eval expected="0"     xpath="//pageSequence[8]//flow/block[2]/lineArea[2]/viewport/@offset"/>
+
+    <!-- hanging -->
+    <eval expected="31656" xpath="//pageSequence[9]//flow/block[2]/lineArea[2]/@bpd"/>
+    <eval expected="0"     xpath="//pageSequence[9]//flow/block[2]/lineArea[2]/text[1]/@offset"/>
+    <eval expected="8616"  xpath="//pageSequence[9]//flow/block[2]/lineArea[2]/text[1]/@baseline"/>
+    <eval expected="28800" xpath="//pageSequence[9]//flow/block[2]/lineArea[2]/viewport/@bpd"/>
+    <eval expected="2856"  xpath="//pageSequence[9]//flow/block[2]/lineArea[2]/viewport/@offset"/>
+
+    <!-- mathematical -->
+    <eval expected="28800" xpath="//pageSequence[10]//flow/block[2]/lineArea[2]/@bpd"/>
+    <eval expected="5784"  xpath="//pageSequence[10]//flow/block[2]/lineArea[2]/text[1]/@offset"/>
+    <eval expected="8616"  xpath="//pageSequence[10]//flow/block[2]/lineArea[2]/text[1]/@baseline"/>
+    <eval expected="28800" xpath="//pageSequence[10]//flow/block[2]/lineArea[2]/viewport/@bpd"/>
+    <eval expected="0"     xpath="//pageSequence[10]//flow/block[2]/lineArea[2]/viewport/@offset"/>
+
+  </checks>
+</testcase>

Propchange: xmlgraphics/fop/branches/Temp_InlineContainer/test/layoutengine/standard-testcases/inline-container_alignment-adjust.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: xmlgraphics/fop/branches/Temp_InlineContainer/test/layoutengine/standard-testcases/inline-container_alignment-adjust.xml
------------------------------------------------------------------------------
    svn:keywords = Revision Id



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