]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
Bugzilla #38453:
authorJeremias Maerki <jeremias@apache.org>
Thu, 2 Feb 2006 16:20:22 +0000 (16:20 +0000)
committerJeremias Maerki <jeremias@apache.org>
Thu, 2 Feb 2006 16:20:22 +0000 (16:20 +0000)
Bugfix: Text-decoration was not promoted if no text-decoration attribute was specified on a nested element.
Nice side-effect: more efficient evaluation of text-decoration.

git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@374425 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/fop/fo/properties/CommonTextDecoration.java
status.xml
test/layoutengine/standard-testcases/text-decoration_2.xml

index a48fd170fd2aa53e01715a9fb60a2384dd7d7c57..072cb5417ac06a1ced3d948b899ff6c0bd087b54 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2005 The Apache Software Foundation.
+ * Copyright 2005-2006 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.
@@ -68,60 +68,63 @@ public class CommonTextDecoration {
             deco = calcTextDecoration(parentList);
         }
         //For rules, see XSL 1.0, chapters 5.5.6 and 7.16.4
-        List list = pList.get(Constants.PR_TEXT_DECORATION).getList();
-        Iterator i = list.iterator();
-        while (i.hasNext()) {
-            Property prop = (Property)i.next(); 
-            int prop_enum = prop.getEnum();
-            if (prop_enum == Constants.EN_NONE) {
-                if (deco != null) {
-                    deco.decoration = 0;
-                }
-                return deco;
-            } else if (prop_enum == Constants.EN_UNDERLINE) {
-                if (deco == null) {
-                    deco = new CommonTextDecoration();
-                }
-                deco.decoration |= UNDERLINE;
-                deco.underColor = pList.get(Constants.PR_COLOR).getColorType();
-            } else if (prop_enum == Constants.EN_NO_UNDERLINE) {
-                if (deco != null) {
-                    deco.decoration &= OVERLINE | LINE_THROUGH | BLINK;
+        Property textDecoProp = pList.getExplicit(Constants.PR_TEXT_DECORATION);
+        if (textDecoProp != null) {
+            List list = textDecoProp.getList();
+            Iterator i = list.iterator();
+            while (i.hasNext()) {
+                Property prop = (Property)i.next(); 
+                int propEnum = prop.getEnum();
+                if (propEnum == Constants.EN_NONE) {
+                    if (deco != null) {
+                        deco.decoration = 0;
+                    }
+                    return deco;
+                } else if (propEnum == Constants.EN_UNDERLINE) {
+                    if (deco == null) {
+                        deco = new CommonTextDecoration();
+                    }
+                    deco.decoration |= UNDERLINE;
                     deco.underColor = pList.get(Constants.PR_COLOR).getColorType();
-                }
-            } else if (prop_enum == Constants.EN_OVERLINE) {
-                if (deco == null) {
-                    deco = new CommonTextDecoration();
-                }
-                deco.decoration |= OVERLINE;
-                deco.overColor = pList.get(Constants.PR_COLOR).getColorType();
-            } else if (prop_enum == Constants.EN_NO_OVERLINE) {
-                if (deco != null) {
-                    deco.decoration &= UNDERLINE | LINE_THROUGH | BLINK;
+                } else if (propEnum == Constants.EN_NO_UNDERLINE) {
+                    if (deco != null) {
+                        deco.decoration &= OVERLINE | LINE_THROUGH | BLINK;
+                        deco.underColor = pList.get(Constants.PR_COLOR).getColorType();
+                    }
+                } else if (propEnum == Constants.EN_OVERLINE) {
+                    if (deco == null) {
+                        deco = new CommonTextDecoration();
+                    }
+                    deco.decoration |= OVERLINE;
                     deco.overColor = pList.get(Constants.PR_COLOR).getColorType();
-                }
-            } else if (prop_enum == Constants.EN_LINE_THROUGH) {
-                if (deco == null) {
-                    deco = new CommonTextDecoration();
-                }
-                deco.decoration |= LINE_THROUGH;
-                deco.throughColor = pList.get(Constants.PR_COLOR).getColorType();
-            } else if (prop_enum == Constants.EN_NO_LINE_THROUGH) {
-                if (deco != null) {
-                    deco.decoration &= UNDERLINE | OVERLINE | BLINK;
+                } else if (propEnum == Constants.EN_NO_OVERLINE) {
+                    if (deco != null) {
+                        deco.decoration &= UNDERLINE | LINE_THROUGH | BLINK;
+                        deco.overColor = pList.get(Constants.PR_COLOR).getColorType();
+                    }
+                } else if (propEnum == Constants.EN_LINE_THROUGH) {
+                    if (deco == null) {
+                        deco = new CommonTextDecoration();
+                    }
+                    deco.decoration |= LINE_THROUGH;
                     deco.throughColor = pList.get(Constants.PR_COLOR).getColorType();
+                } else if (propEnum == Constants.EN_NO_LINE_THROUGH) {
+                    if (deco != null) {
+                        deco.decoration &= UNDERLINE | OVERLINE | BLINK;
+                        deco.throughColor = pList.get(Constants.PR_COLOR).getColorType();
+                    }
+                } else if (propEnum == Constants.EN_BLINK) {
+                    if (deco == null) {
+                        deco = new CommonTextDecoration();
+                    }
+                    deco.decoration |= BLINK;
+                } else if (propEnum == Constants.EN_NO_BLINK) {
+                    if (deco != null) {
+                        deco.decoration &= UNDERLINE | OVERLINE | LINE_THROUGH;
+                    }
+                } else {
+                    throw new PropertyException("Illegal value encountered: " + prop.getString());
                 }
-            } else if (prop_enum == Constants.EN_BLINK) {
-                if (deco == null) {
-                    deco = new CommonTextDecoration();
-                }
-                deco.decoration |= BLINK;
-            } else if (prop_enum == Constants.EN_NO_BLINK) {
-                if (deco != null) {
-                    deco.decoration &= UNDERLINE | OVERLINE | LINE_THROUGH;
-                }
-            } else {
-                throw new PropertyException("Illegal value encountered: " + prop.getString());
             }
         }
         return deco;
index 5c17e4b58823966fd8d0e35e5b59705d98b3a8b5..216c6c593d53c217847548de98909f56f55a9a6d 100644 (file)
 
   <changes>
     <release version="FOP Trunk">
+      <action context="Code" dev="JM" type="fix" fixes-bug="38453">
+        Bugfix: Text-decoration was not promoted if no text-decoration attribute was
+        specified on a nested element.
+      </action>
       <action context="Code" dev="AD" type="add">
         Added support for the from-table-column() function.
         (Thanks to gerhard.oettl.at.oesoft.at for the inspiration.)
index 04229fcc878a863b15a40bb39498a5907eab1034..c481f6d2ffcd9e21f6ac17f139feb17b42d7cba6 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-  Copyright 2005 The Apache Software Foundation
+  Copyright 2005-2006 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.
@@ -32,6 +32,7 @@
         <fo:flow flow-name="xsl-region-body">
           <!-- nested inlines -->
           <fo:block>normal <fo:inline color="blue" text-decoration="underline">under <fo:inline color="red" font-size="14pt" text-decoration="line-through">through</fo:inline> <fo:inline text-decoration="none">none</fo:inline> under</fo:inline> normal</fo:block>
+          <fo:block color="blue" text-decoration="underline">Everything in this paragraph including this <fo:basic-link external-destination="http://xmlgraphics.apache.org/fop/">link</fo:basic-link> must be underlined.</fo:block>
         </fo:flow>
       </fo:page-sequence>
     </fo:root>
@@ -84,5 +85,9 @@
     <eval xpath="name(//flow/block[1]/lineArea/*[3])" expected="text"/>
     <eval xpath="//flow/block[1]/lineArea/*[3]/@color" expected="#000000"/>
     
+    <true xpath="//flow/block[2]/lineArea/text[1]/@underline-score"/>
+    <true xpath="//flow/block[2]/lineArea/inlineparent/text[1]/@underline-score"/>
+    <true xpath="//flow/block[2]/lineArea/text[2]/@underline-score"/>
+    
   </checks>
 </testcase>