ANY23-418 update f8 artifact, cleanup
authorHans <firedrake93@gmail.com>
Sun, 3 Feb 2019 00:59:58 +0000 (18:59 -0600)
committerHans <firedrake93@gmail.com>
Sun, 3 Feb 2019 00:59:58 +0000 (18:59 -0600)
encoding/pom.xml
encoding/src/main/java/org/apache/any23/encoding/EncodingUtils.java
encoding/src/test/java/org/apache/any23/encoding/TikaEncodingDetectorTest.java

index 69f2348..0f6d1d1 100644 (file)
@@ -50,7 +50,7 @@
     <dependency>
       <groupId>org.rypt</groupId>
       <artifactId>f8</artifactId>
-      <version>1.0</version>
+      <version>1.1</version>
     </dependency>
 
     <!-- BEGIN: Tika -->
index 4d79039..69aade1 100644 (file)
@@ -205,18 +205,7 @@ class EncodingUtils {
 
     private static class TextStatisticsOptimizedForUtf8 extends TextStatistics {
 
-        private final Utf8Statistics utf8Stats = new Utf8Statistics() {
-            @Override
-            public void handleCodePoint(int codePoint) {
-                //take a hint from jchardet: count SO, SI, ESC as invalid
-                //(but Tika calls ESC (0x1B) a "safe control", so let's OK that one for now).
-                if (codePoint == 0x0E || codePoint == 0x0F /* || codePoint == 0x1B*/) {
-                    handleError();
-                } else {
-                    super.handleCodePoint(codePoint);
-                }
-            }
-        };
+        private final Utf8Statistics utf8Stats = new Utf8Statistics();
 
         @Override
         public void addData(byte[] buffer, int offset, int length) {
@@ -239,11 +228,6 @@ class EncodingUtils {
         int n;
         while ((n = stream.read(buffer)) != -1) {
             stats.addData(buffer, 0, n);
-
-            //shortcut: avoid reading entire stream if we can detect early on that it's UTF-8
-            if (stats.utf8Stats.looksLikeUtf8() && stats.utf8Stats.countValid() > 10) {
-                return stats;
-            }
         }
         return stats;
     }
@@ -261,10 +245,9 @@ class EncodingUtils {
             charset = charset.replaceAll("(?i)-I\\b", "");
             try {
                 return CharsetUtils.forName(charset);
-            } catch (Exception e1) {
-                //ignore
+            } catch (Exception ignored) {
+                throw e;
             }
-            throw e;
         }
     }
 
@@ -340,17 +323,17 @@ class EncodingUtils {
 //        };
 //
 //        for (String name : cs) {
-//            System.out.println(IntStream.range(0, 256).filter(i -> {
-//                try {
-//                    Charset c = EncodingUtils.forName(name);
-//                    String s = new String(new byte[]{(byte) i}, c);
-//                    byte[] bytes = s.getBytes(c);
-//                    return bytes.length != 1 || bytes[0] != (byte)i;
-//                } catch (Exception e) {
-//                    throw new RuntimeException(e);
-//                }
-//            }).mapToObj(i -> "0x" + Integer.toHexString(i).toUpperCase())
-//                    .collect(Collectors.joining(", ", "undefined " + name + " = {", "};")));
+//            Charset c = EncodingUtils.forName(name);
+//            if (c.newEncoder().maxBytesPerChar() > 1) {
+//                throw new IllegalArgumentException("this method doesn't support " + c);
+//            }
+//            String line = java.util.stream.IntStream
+//                    .range(0, 256)
+//                    .filter(i -> new String(new byte[]{(byte) i}, c).getBytes(c)[0] != (byte)i)
+//                    .mapToObj(i -> "0x" + Integer.toHexString(i).toUpperCase())
+//                    .collect(java.util.stream.Collectors.joining(", ", "undefined " + name + " = {", "};"));
+//
+//            System.out.println(line);
 //        }
 //    }
 
index 33dc552..d734593 100644 (file)
@@ -21,7 +21,6 @@ import org.apache.tika.detect.TextStatistics;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
-import org.rypt.f8.Utf8;
 
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
@@ -31,7 +30,6 @@ import java.nio.charset.Charset;
 import static java.nio.charset.StandardCharsets.ISO_8859_1;
 import static java.nio.charset.StandardCharsets.UTF_8;
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
 
 /**
  * Test case for {@link TikaEncodingDetector}.
@@ -97,73 +95,6 @@ public class TikaEncodingDetectorTest {
         }
     }
 
-    @Test
-    public void testUTF8StateMachineForValid() throws IOException {
-        int state = 0;
-        for (int i = 0; i <= Character.MAX_CODE_POINT; i++) {
-            byte[] bytes = new String(Character.toChars(i)).getBytes(UTF_8);
-
-            for (byte b : bytes) {
-                state = Utf8.nextState(state, b);
-            }
-
-            assertEquals(new String(bytes, UTF_8).codePointAt(0), state);
-        }
-    }
-
-    @Test
-    public void testUTF8StateMachineForInvalid() {
-
-        for (int i = 0x80; i < 0xC2; i++) { //check invalid first byte
-            assertTrue(Utf8.isErrorState(Utf8.nextState(0, (byte)i)));
-        }
-
-        for (int i = 0xF5; i <= 0xFF; i++) { //illegal code points > 0x10FFFF
-            assertTrue(Utf8.isErrorState(Utf8.nextState(0, (byte)i)));
-        }
-
-        for (int i = 0xC2; i <= 0xF4; i++) { //check invalid continuation bytes
-            //check invalid second byte
-            int state0 = Utf8.nextState(0, (byte)i);
-            assertTrue(Utf8.isIncompleteState(state0));
-            int from = i == 0xE0 ? 0xA0 : i == 0xF0 ? 0x90 : 0x80;
-            for (int j = 0; j < from; j++) {
-                assertTrue(Utf8.isErrorState(Utf8.nextState(state0, (byte)j)));
-            }
-            int to = i == 0xED ? 0xA0 : i == 0xF4 ? 0x90 : 0xC0;
-            for (int j = to; j <= 0xFF; j++) {
-                assertTrue(Utf8.isErrorState(Utf8.nextState(state0, (byte)j)));
-            }
-            if (i >= 0xE0) { //check invalid third byte
-                int state1 = Utf8.nextState(state0, (byte) from);
-                assertTrue(Utf8.isIncompleteState(state1));
-                for (int j = from + 1; j < to; j++) {
-                    assertTrue(Utf8.isIncompleteState(Utf8.nextState(state0, (byte)j)));
-                }
-                for (int j = 0; j < 0x80; j++) {
-                    assertTrue(Utf8.isErrorState(Utf8.nextState(state1, (byte) j)));
-                }
-                for (int j = 0xC0; j <= 0xFF; j++) {
-                    assertTrue(Utf8.isErrorState(Utf8.nextState(state1, (byte) j)));
-                }
-
-                if (i >= 0xF0) { //check invalid 4th byte
-                    int state2 = Utf8.nextState(state1, (byte) 0x80);
-                    assertTrue(state2 < -1);
-                    for (int j = 0x81; j < 0xC0; j++) {
-                        assertTrue(Utf8.isIncompleteState(Utf8.nextState(state1, (byte)j)));
-                    }
-                    for (int j = 0; j < 0x80; j++) {
-                        assertTrue(Utf8.isErrorState(Utf8.nextState(state2, (byte) j)));
-                    }
-                    for (int j = 0xC0; j <= 0xFF; j++) {
-                        assertTrue(Utf8.isErrorState(Utf8.nextState(state2, (byte) j)));
-                    }
-                }
-            }
-        }
-    }
-
     private static ByteArrayInputStream bytes(String string, Charset encoding) {
         return new ByteArrayInputStream(string.getBytes(encoding));
     }