]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
Renamed PageScaleAttributes class into PageScale.
authorVincent Hennebert <vhennebert@apache.org>
Wed, 12 Aug 2009 10:46:39 +0000 (10:46 +0000)
committerVincent Hennebert <vhennebert@apache.org>
Wed, 12 Aug 2009 10:46:39 +0000 (10:46 +0000)
Simplified and improved its behaviour:
- return null for an empty string
- allow for an arbitrary sequence of white spaces between the scales
- check that number of arguments is no more than 2
- other small improvements

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

src/java/org/apache/fop/render/awt/AWTRenderer.java
src/java/org/apache/fop/render/extensions/prepress/PageScale.java [new file with mode: 0644]
src/java/org/apache/fop/render/extensions/prepress/PageScaleAttributes.java [deleted file]
src/java/org/apache/fop/render/java2d/Java2DRenderer.java
src/java/org/apache/fop/render/pdf/PDFDocumentHandler.java
test/java/org/apache/fop/render/extensions/prepress/PageScaleTest.java

index 170df3f4dc624f09b814895e88f7b5b29d907fa5..b50708112a3b136f2f67e8e0b9644ea04fd031e0 100644 (file)
@@ -47,7 +47,7 @@ import org.apache.fop.render.awt.viewer.PreviewDialog;
 import org.apache.fop.render.awt.viewer.Renderable;
 import org.apache.fop.render.awt.viewer.StatusListener;
 import org.apache.fop.render.java2d.Java2DRenderer;
-import org.apache.fop.render.extensions.prepress.PageScaleAttributes;
+import org.apache.fop.render.extensions.prepress.PageScale;
 
 /**
  * The AWTRender outputs the pages generated by the layout engine to a Swing
@@ -159,8 +159,8 @@ public class AWTRenderer extends Java2DRenderer implements Pageable {
                 / userAgent.getTargetPixelUnitToMillimeter();
         if (getPageViewport(pageNum).getForeignAttributes() != null) {
             String scale = (String) getPageViewport(pageNum).getForeignAttributes().get(
-                    PageScaleAttributes.EXT_PAGE_SCALE);
-            Point2D scales = PageScaleAttributes.getScaleAttributes(scale);
+                    PageScale.EXT_PAGE_SCALE);
+            Point2D scales = PageScale.getScale(scale);
             if (scales != null) {
                 scaleX *= scales.getX();
                 scaleY *= scales.getY();
diff --git a/src/java/org/apache/fop/render/extensions/prepress/PageScale.java b/src/java/org/apache/fop/render/extensions/prepress/PageScale.java
new file mode 100644 (file)
index 0000000..3614237
--- /dev/null
@@ -0,0 +1,92 @@
+/*
+ * 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$ */
+
+package org.apache.fop.render.extensions.prepress;
+
+import java.awt.geom.Point2D;
+import java.text.MessageFormat;
+import java.util.regex.Pattern;
+
+import org.apache.xmlgraphics.util.QName;
+
+import org.apache.fop.fo.extensions.ExtensionElementMapping;
+
+/**
+ * This class provides utility methods to parse the 'fox:scale' extension attribute.
+ */
+public final class PageScale {
+
+    /**
+     * The extension 'scale' attribute for the simple-page-master element.
+     */
+    public static final QName EXT_PAGE_SCALE
+            = new QName(ExtensionElementMapping.URI, null, "scale");
+
+    private static final Pattern WHITESPACE_PATTERN = Pattern.compile("\\s+");
+
+    /**
+     * Utility classes should not have a public or default constructor
+     */
+    private PageScale() {
+    }
+
+    /**
+     * Compute scale parameters from given fox:scale attribute which has the format: scaleX [scaleY]
+     * If scaleY is not defined, it equals scaleX.
+     * @param scale scale attribute, input format: scaleX [scaleY]
+     * @return the pair of (sx, sy) values
+     */
+    public static Point2D getScale(String scale) {
+        // TODO throw appropriate exceptions that can be caught by the event
+        // notification mechanism
+        final String err = "Extension 'scale' attribute has incorrect value(s): {0}";
+
+        if (scale == null || scale.equals("")) {
+            return null;
+        }
+
+        String[] scales = WHITESPACE_PATTERN.split(scale);
+        double scaleX;
+        try {
+            scaleX = Double.parseDouble(scales[0]);
+        } catch (NumberFormatException nfe) {
+            throw new IllegalArgumentException(MessageFormat.format(err, new Object[]{scale}));
+        }
+        double scaleY;
+        switch (scales.length) {
+        case 1:
+            scaleY = scaleX;
+            break;
+        case 2:
+            try {
+                scaleY = Double.parseDouble(scales[1]);
+            } catch (NumberFormatException nfe) {
+                throw new IllegalArgumentException(MessageFormat.format(err, new Object[]{scale}));
+            }
+            break;
+        default:
+            throw new IllegalArgumentException("Too many arguments");
+        }
+        if (scaleX <= 0 || scaleY <= 0) {
+            throw new IllegalArgumentException(MessageFormat.format(err, new Object[]{scale}));
+        }
+
+        return new Point2D.Double(scaleX, scaleY);
+    }
+}
diff --git a/src/java/org/apache/fop/render/extensions/prepress/PageScaleAttributes.java b/src/java/org/apache/fop/render/extensions/prepress/PageScaleAttributes.java
deleted file mode 100644 (file)
index d57ea70..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * 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$ */
-
-package org.apache.fop.render.extensions.prepress;
-
-import java.awt.geom.Point2D;
-import java.text.MessageFormat;
-
-import org.apache.xmlgraphics.util.QName;
-
-import org.apache.fop.fo.extensions.ExtensionElementMapping;
-
-/**
- * This class provides utility methods to parse the 'fox:scale' extension attribute.
- */
-public final class PageScaleAttributes {
-
-    /**
-     * The extension 'scale' attribute for the simple-page-master element.
-     */
-    public static final QName EXT_PAGE_SCALE
-            = new QName(ExtensionElementMapping.URI, null, "scale");
-
-
-    /**
-     * Utility classes should not have a public or default constructor
-     */
-    private PageScaleAttributes() {
-    }
-
-    /**
-     * Compute scale parameters from given fox:scale attribute which has the format: scaleX [scaleY]
-     * If scaleY is not defined, it equals scaleX.
-     * @param scale scale attribute, input format: scaleX [scaleY]
-     * @return the pair of (sx, sy) values
-     */
-    public static Point2D.Double getScaleAttributes(String scale) {
-        final String err = "Extension 'scale' attribute has incorrect value(s): {0}";
-
-        if (scale == null) {
-            return null;
-        }
-
-        Point2D.Double result = null;
-
-        try {
-            String[] scales = scale.split(" ");
-            if (scales.length > 0) {
-                result = new Point2D.Double(Double.parseDouble(scales[0]),
-                        Double.parseDouble(scales[0]));
-            }
-            if (scales.length > 1) {
-                result.y = Double.parseDouble(scales[1]);
-            }
-            if (result.x <= 0 || result.y <= 0) {
-                throw new IllegalArgumentException(MessageFormat.format(err, new Object[]{scale}));
-            }
-        } catch (NumberFormatException nfe) {
-            throw new IllegalArgumentException(MessageFormat.format(err, new Object[]{scale}));
-        }
-
-        return result;
-    }
-}
index aa25b3325778624c4ed752d334e18bf978c51572..f09794ff20e2e361b0e423f2d1584def1dbccb3c 100644 (file)
@@ -77,7 +77,7 @@ import org.apache.fop.render.AbstractPathOrientedRenderer;
 import org.apache.fop.render.Graphics2DAdapter;
 import org.apache.fop.render.RendererContext;
 import org.apache.fop.render.extensions.prepress.PageBoundaries;
-import org.apache.fop.render.extensions.prepress.PageScaleAttributes;
+import org.apache.fop.render.extensions.prepress.PageScale;
 import org.apache.fop.render.pdf.CTMHelper;
 import org.apache.fop.util.CharUtilities;
 import org.apache.fop.util.ColorUtil;
@@ -309,8 +309,8 @@ public abstract class Java2DRenderer extends AbstractPathOrientedRenderer implem
             double scaleX = scaleFactor;
             double scaleY = scaleFactor;
             String scale = (String) currentPageViewport.getForeignAttributes().get(
-                    PageScaleAttributes.EXT_PAGE_SCALE);
-            Point2D scales = PageScaleAttributes.getScaleAttributes(scale);
+                    PageScale.EXT_PAGE_SCALE);
+            Point2D scales = PageScale.getScale(scale);
             if (scales != null) {
                 scaleX *= scales.getX();
                 scaleY *= scales.getY();
index fab93e3c4fd29b02b7137fbfaee37302a53f9081..12f99780bdb3586e2cf6e5afa8cd4944d3588c7e 100644 (file)
@@ -42,7 +42,7 @@ import org.apache.fop.pdf.PDFReference;
 import org.apache.fop.pdf.PDFResourceContext;
 import org.apache.fop.pdf.PDFResources;
 import org.apache.fop.render.extensions.prepress.PageBoundaries;
-import org.apache.fop.render.extensions.prepress.PageScaleAttributes;
+import org.apache.fop.render.extensions.prepress.PageScale;
 import org.apache.fop.render.intermediate.AbstractBinaryWritingIFDocumentHandler;
 import org.apache.fop.render.intermediate.IFContext;
 import org.apache.fop.render.intermediate.IFDocumentHandlerConfigurator;
@@ -183,8 +183,8 @@ public class PDFDocumentHandler extends AbstractBinaryWritingIFDocumentHandler {
         double scaleX = 1;
         double scaleY = 1;
         String scale = (String) getContext().getForeignAttribute(
-                PageScaleAttributes.EXT_PAGE_SCALE);
-        Point2D scales = PageScaleAttributes.getScaleAttributes(scale);
+                PageScale.EXT_PAGE_SCALE);
+        Point2D scales = PageScale.getScale(scale);
         if (scales != null) {
             scaleX = scales.getX();
             scaleY = scales.getY();
index fc95e854d22ae981cf723512fbf2312f890065e0..cbf6f5226f9ec36adc7152b5b7b567a803c57ed7 100644 (file)
@@ -46,14 +46,14 @@ public class PageScaleTest extends TestCase {
 
     /** 1 value is used for both x and y. */
     public void testScale1() {
-        Point2D res = PageScaleAttributes.getScaleAttributes(".5");
+        Point2D res = PageScale.getScale(".5");
         assertEquals(0.5, res.getX(), 0.0);
         assertEquals(0.5, res.getY(), 0.0);
     }
 
     /** Two values, used resp. for x and y. */
     public void testScale2() {
-        Point2D res = PageScaleAttributes.getScaleAttributes("1. 1.2");
+        Point2D res = PageScale.getScale("1. \t \n 1.2");
         assertEquals(1.0, res.getX(), 0.0);
         assertEquals(1.2, res.getY(), 0.0);
     }
@@ -61,7 +61,7 @@ public class PageScaleTest extends TestCase {
     /** Scale must not contain units. */
     public void testScaleFail() {
         try {
-            PageScaleAttributes.getScaleAttributes("0.5mm 0.5cm");
+            PageScale.getScale("0.5mm 0.5cm");
             fail("Expected IllegalArgumentException. Scale shouldn't contain units");
         } catch (IllegalArgumentException iae) {
             // Good!
@@ -70,7 +70,9 @@ public class PageScaleTest extends TestCase {
 
     /** @{code null} is returned when scale is unspecified. */
     public void testScaleNull() {
-        Point2D res = PageScaleAttributes.getScaleAttributes(null);
+        Point2D res = PageScale.getScale(null);
+        assertNull("Result should be null", res);
+        res = PageScale.getScale("");
         assertNull("Result should be null", res);
     }