You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by le...@apache.org on 2012/02/14 20:49:52 UTC

svn commit: r1244192 - in /pdfbox/trunk/pdfbox/src: main/java/org/apache/pdfbox/cos/COSNumber.java test/java/org/apache/pdfbox/cos/TestCOSNumber.java

Author: lehmi
Date: Tue Feb 14 19:49:51 2012
New Revision: 1244192

URL: http://svn.apache.org/viewvc?rev=1244192&view=rev
Log:
PDFBOX-1172: support exponential format for float values as proposed by Stanislav Oaserele

Modified:
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSNumber.java
    pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/cos/TestCOSNumber.java

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSNumber.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSNumber.java?rev=1244192&r1=1244191&r2=1244192&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSNumber.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSNumber.java Tue Feb 14 19:49:51 2012
@@ -76,17 +76,25 @@ public abstract class COSNumber extends 
      */
     public static COSNumber get( String number ) throws IOException
     {
-        if (number.length() == 1) {
+        if (number.length() == 1) 
+        {
             char digit = number.charAt(0);
-            if ('0' <= digit && digit <= '9') {
+            if ('0' <= digit && digit <= '9') 
+            {
                 return COSInteger.get(digit - '0');
-            } else if (digit == '-' || digit == '.') {
+            } 
+            else if (digit == '-' || digit == '.') 
+            {
                 // See https://issues.apache.org/jira/browse/PDFBOX-592
                 return COSInteger.ZERO;
-            } else {
+            } 
+            else 
+            {
                 throw new IOException("Not a number: " + number);
             }
-        } else if (number.indexOf('.') == -1) {
+        } 
+        else if (number.indexOf('.') == -1 && (number.toLowerCase().indexOf('e') == -1)) 
+        {
             try
             {
                 return COSInteger.get( Long.parseLong( number ) );
@@ -95,7 +103,9 @@ public abstract class COSNumber extends 
             {
                 throw new IOException( "Value is not an integer: " + number );
             }
-        } else {
+        } 
+        else 
+        {
             return new COSFloat(number);
         }
     }

Modified: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/cos/TestCOSNumber.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/cos/TestCOSNumber.java?rev=1244192&r1=1244191&r2=1244192&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/cos/TestCOSNumber.java (original)
+++ pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/cos/TestCOSNumber.java Tue Feb 14 19:49:51 2012
@@ -64,6 +64,10 @@ public abstract class TestCOSNumber exte
             assertEquals(new COSFloat(1.1f), COSNumber.get("1.1"));
             assertEquals(new COSFloat(100f), COSNumber.get("100.0"));
             assertEquals(new COSFloat(-100.001f), COSNumber.get("-100.001"));
+            // according to the specs the exponential shall not be used
+            // but obviously there some
+            assertNotNull(COSNumber.get("-2e-006"));
+            assertNotNull(COSNumber.get("-8e+05"));
             try
             {
                 assertEquals("Null Value...", COSNumber.get(null));