]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
Better fix for setting TextDecoration.
authorJoerg Pietschmann <pietsch@apache.org>
Sat, 10 Aug 2002 20:09:40 +0000 (20:09 +0000)
committerJoerg Pietschmann <pietsch@apache.org>
Sat, 10 Aug 2002 20:09:40 +0000 (20:09 +0000)
Changed error handling and detection of markers which
are not initial children of their parent.

git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/branches/fop-0_20_2-maintain@195076 13f79535-47bb-0310-9956-ffa450edef68

src/org/apache/fop/fo/FONode.java
src/org/apache/fop/fo/FOText.java
src/org/apache/fop/fo/FObj.java
src/org/apache/fop/fo/FObjMixed.java
src/org/apache/fop/fo/PropertyManager.java
src/org/apache/fop/fo/flow/Block.java
src/org/apache/fop/fo/flow/Inline.java
src/org/apache/fop/fo/flow/Leader.java
src/org/apache/fop/fo/flow/Marker.java
src/org/apache/fop/fo/flow/Wrapper.java

index 78a6f8b22db99db947032b6b40387066bc2e06d7..03828659e42d16782aa30c62ab75bba085823555 100644 (file)
@@ -202,4 +202,9 @@ abstract public class FONode {
         ((FONode)children.get(this.marker)).rollback(snapshot);
     }
 
+
+    public boolean mayPrecedeMarker() {
+        return false;
+    }  
+
 }
index dd01555c34c6922c6072c7f1e71602e3781ceb4b..f03cbea502e93d5d951d52361dc6a0857079e863 100644 (file)
@@ -22,53 +22,38 @@ import org.apache.fop.apps.FOPException;
  */
 public class FOText extends FONode {
 
-    protected char[] ca;
-    protected int length;
+    private char[] ca;
 
-    FontState fs;
-    float red;
-    float green;
-    float blue;
-    int wrapOption;
-    int whiteSpaceCollapse;
-    int verticalAlign;
+    private FontState fs;
+    private float red;
+    private float green;
+    private float blue;
+    private int wrapOption;
+    private int whiteSpaceCollapse;
+    private int verticalAlign;
 
     // Textdecoration
-    protected boolean underlined = false;
-    protected boolean overlined = false;
-    protected boolean lineThrough = false;
-
-    TextState ts;
+    private TextState ts;
 
     public FOText(StringBuffer b, FObj parent) {
         super(parent);
-        this.length = b.length();
-        this.ca = new char[this.length];
-        b.getChars(0,length,ca,0);
-    }
-
-    public void setUnderlined(boolean ul) {
-        this.underlined = ul;
+        this.ca = new char[b.length()];
+        b.getChars(0,b.length(),ca,0);
     }
 
-    public void setOverlined(boolean ol) {
-        this.overlined = ol;
+    public void setTextState(TextState ts) {
+        this.ts = ts;
     }
 
-    public void setLineThrough(boolean lt) {
-        this.lineThrough = lt;
-    }
-
-
     public boolean willCreateArea() {
         this.whiteSpaceCollapse =
             this.parent.properties.get("white-space-collapse").getEnum();
         if (this.whiteSpaceCollapse == WhiteSpaceCollapse.FALSE
-                && length > 0) {
+                && ca.length > 0) {
             return true;
         }
 
-        for (int i = 0; i < length; i++) {
+        for (int i = 0; i < ca.length; i++) {
             char ch = ca[i];
             if (!((ch == ' ') || (ch == '\n') || (ch == '\r')
                     || (ch == '\t'))) {    // whitespace
@@ -78,10 +63,21 @@ public class FOText extends FONode {
         return false;
     }
 
+    public boolean mayPrecedeMarker() {
+        for (int i = 0; i < ca.length; i++) {
+            char ch = ca[i];
+            if ((ch != ' ') || (ch != '\n') || (ch != '\r')
+                    || (ch != '\t')) {    // whitespace
+                return true;
+            }
+        }
+        return false;
+    }
+  
     public Status layout(Area area) throws FOPException {
         if (!(area instanceof BlockArea)) {
             log.error("text outside block area"
-                                   + new String(ca, 0, length));
+                                   + new String(ca, 0, ca.length));
             return new Status(Status.OK);
         }
         if (this.marker == START) {
@@ -116,17 +112,12 @@ public class FOText extends FONode {
                 this.parent.properties.get("wrap-option").getEnum();
             this.whiteSpaceCollapse =
                 this.parent.properties.get("white-space-collapse").getEnum();
-            this.ts = new TextState();
-            ts.setUnderlined(underlined);
-            ts.setOverlined(overlined);
-            ts.setLineThrough(lineThrough);
-
             this.marker = 0;
         }
         int orig_start = this.marker;
         this.marker = addText((BlockArea)area, fs, red, green, blue,
                               wrapOption, this.getLinkSet(),
-                              whiteSpaceCollapse, ca, this.marker, length,
+                              whiteSpaceCollapse, ca, this.marker, ca.length,
                               ts, verticalAlign);
         if (this.marker == -1) {
 
index 86e15b479570e6efa22c97185a4b5699444a2ce0..a6f2b73eab24203d9a03bca959fa30942ae22cb5 100644 (file)
@@ -27,10 +27,6 @@ public abstract class FObj extends FONode {
                                   PropertyList propertyList) throws FOPException;
     }
 
-//      public static Maker maker() {
-//          return new Maker();
-//      }
-
     // protected PropertyList properties;
     public PropertyList properties;
     protected PropertyManager propMgr;
@@ -38,8 +34,6 @@ public abstract class FObj extends FONode {
     // markers
     private HashMap markers;
 
-//    protected String name;
-
     protected FObj(FObj parent, PropertyList propertyList) {
         super(parent);
         this.properties = propertyList;    // TO BE REMOVED!!!
@@ -159,9 +153,14 @@ public abstract class FObj extends FONode {
 
     public void addMarker(Marker marker) throws FOPException {
         String mcname = marker.getMarkerClassName();
-        if (!children.isEmpty()) {
-            throw new FOPException("A fo:marker must be an initial child of '"
-                                   + getName());
+        if (children != null) {
+            for (int i = 0; i < children.size(); i++) {
+                FONode child = (FONode)children.get(i);
+                if (!child.mayPrecedeMarker()) {
+                  throw new FOPException("A fo:marker must be an initial child of '"
+                                         + getName()+"'");
+                }
+            }
         }
         if (markers==null) {
             markers = new HashMap();
index 1b45a88e99600d946fa011531e4d450a6c28830b..2d2a55f11057ba9d395675472b4ffd97e07f5e4f 100644 (file)
@@ -18,16 +18,19 @@ import org.apache.fop.apps.FOPException;
 public abstract class FObjMixed extends FObj {
 
     // Textdecoration
-    protected TextState ts;
+    protected TextState textState;
 
     private StringBuffer textBuffer;
 
-    protected FObjMixed(FObj parent, PropertyList propertyList) {
+    protected FObjMixed(FObj parent, PropertyList propertyList)
+      throws FOPException {
         super(parent, propertyList);
+        textState = propMgr.getTextDecoration(parent);
+
     }
 
     public TextState getTextState() {
-        return ts;
+        return textState;
     }
 
     protected void addCharacters(char data[], int start, int length) {
@@ -40,12 +43,7 @@ public abstract class FObjMixed extends FObj {
     private final void finalizeText() {
         if (textBuffer!=null) {
             FOText ft = new FOText(textBuffer, this);
-            ft.setLogger(log);
-            if (ts != null) {
-              ft.setUnderlined(ts.getUnderlined());
-              ft.setOverlined(ts.getOverlined());
-              ft.setLineThrough(ts.getLineThrough());
-            }
+            ft.setTextState(textState);
             super.addChild(ft);
             textBuffer.setLength(0);
         }
index cd6b57d9e6dd9aef185bf66bb078c471916b9994..c63be2dd5f459db1fe3023af8dfdf670c12831d3 100644 (file)
@@ -12,6 +12,7 @@ import java.text.FieldPosition;
 import java.text.MessageFormat;
 
 import org.apache.fop.apps.FOPException;
+import org.apache.fop.fo.flow.AbstractFlow;
 import org.apache.fop.fo.properties.BreakAfter;
 import org.apache.fop.fo.properties.BreakBefore;
 import org.apache.fop.fo.properties.Constants;
@@ -300,10 +301,9 @@ public class PropertyManager {
         boolean found = false;
 
         do {
-            String fname = parent.getName();
-            if (fname.equals("fo:flow") || fname.equals("fo:static-content")) {
+            if (parent instanceof AbstractFlow) {
                 found = true;
-            } else if (fname.equals("fo:block") || fname.equals("fo:inline")) {
+            } else if (parent instanceof FObjMixed) {
                 FObjMixed fom = (FObjMixed) parent;
                 tsp = fom.getTextState();
                 found = true;
index 95de8721262b2b25359378c84c7765fe2456ae35..c130235f5cb26eeb0920e9a100a5240f8fae9731 100644 (file)
@@ -68,7 +68,6 @@ public class Block extends FObjMixed {
 
         super(parent, propertyList);
         this.span = this.properties.get("span").getEnum();
-        ts = propMgr.getTextDecoration(parent);
     }
 
     public String getName() {
index 1418ce863b535b29b771a1dbf2d2e593d4082085..943d183db9f912818e08950d2bdae9978f4dd049 100644 (file)
@@ -69,9 +69,6 @@ public class Inline extends FObjMixed {
         // this.properties.get("visibility");
         // this.properties.get("z-index");
 
-        // Text Decoration Properties
-        ts = propMgr.getTextDecoration(parent);
-
     }
 
     public String getName() {
index 55b08acba14f9b3953f57cd2d1a27d75658effbe..53a3d6436a9161d0a6307b9286aa189c05de5f8f 100644 (file)
@@ -38,7 +38,8 @@ public class Leader extends FObjMixed {
         return new Leader.Maker();
     }
 
-    public Leader(FObj parent, PropertyList propertyList) {
+    public Leader(FObj parent, PropertyList propertyList)
+      throws FOPException {
         super(parent, propertyList);
     }
 
index 0b3ffdcc929be6cad9807ff33ec2ed94653c2bfe..3773d3c4532b9b2b11409d60ebafa0d166f33f8d 100644 (file)
@@ -31,7 +31,8 @@ public class Marker extends FObjMixed {
         return new Marker.Maker();
     }
 
-    public Marker(FObj parent, PropertyList propertyList) {
+    public Marker(FObj parent, PropertyList propertyList)
+      throws FOPException {
         super(parent, propertyList);
 
         // do check to see that 'this' is under fo:flow
@@ -41,13 +42,7 @@ public class Marker extends FObjMixed {
 
         // check to ensure that no other marker with same parent
         // has this 'marker-class-name' is in addMarker() method
-        try {
-            parent.addMarker(this);
-        } catch (FOPException fopex) {
-            // log is null in constructor
-            //log.error("marker cannot be added to '" + parent
-            //                     + "'");
-        }
+        parent.addMarker(this);
     }
 
     public String getName() {
@@ -89,4 +84,7 @@ public class Marker extends FObjMixed {
         return registryArea;
     }
 
+    public boolean mayPrecedeMarker() {
+        return true;
+    }  
 }
index 14510be935bc76c826cd73c848e38135758a18e4..1e7c39ab1225cb6122d596e441ca0986d814c890 100644 (file)
@@ -42,7 +42,6 @@ public class Wrapper extends FObjMixed {
        throws FOPException {
         super(parent, propertyList);
         // check that this occurs inside an fo:flow
-        ts = propMgr.getTextDecoration(parent);
     }
 
 }