Version 4.4.5 nikiroo-utils-4.4.5
authorNiki Roo <niki@nikiroo.be>
Sun, 3 Mar 2019 10:46:15 +0000 (11:46 +0100)
committerNiki Roo <niki@nikiroo.be>
Sun, 3 Mar 2019 10:46:15 +0000 (11:46 +0100)
VERSION
changelog.md
src/be/nikiroo/utils/IOUtils.java
src/be/nikiroo/utils/StringUtils.java

diff --git a/VERSION b/VERSION
index cbe06cdbfc24cb088e0b332d22b5560e180e55a0..fa1ba0458a1510feff742c365f6f4097fc92bf24 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-4.4.4
+4.4.5
index fa621abd956d4506eaed14f301ae4c408d29112c..085898e37f065bfc2dcadce8581113ede917528e 100644 (file)
@@ -1,5 +1,12 @@
 # nikiroo-utils
 
+## Version 4.4.5
+
+- Base64: allow access to not-zipped Base64 utilities
+- Justify text: better handling of full text lines
+- jDoc: improve
+- IOUtils: new convenience method for reading a File into bytes
+
 ## Version 4.4.4
 
 - Java 1.6: fix bad dependency so it can compiles on 1.6 again
index 0d9bc378a83b856599eae7f2afaec30fa3711332..e9a378c0fd6e279c1568afb848808ab83f9cdf5e 100644 (file)
@@ -17,7 +17,7 @@ import java.util.zip.ZipInputStream;
 import java.util.zip.ZipOutputStream;
 
 /**
- * This class offer some utilities based around Streams.
+ * This class offer some utilities based around Streams and Files.
  * 
  * @author niki
  */
@@ -448,4 +448,24 @@ public class IOUtils {
 
                return array;
        }
+
+       /**
+        * Convert the {@link File} into a byte array.
+        * 
+        * @param file
+        *            the input {@link File}
+        * 
+        * @return the array
+        * 
+        * @throws IOException
+        *             in case of I/O error
+        */
+       public static byte[] toByteArray(File file) throws IOException {
+               FileInputStream fis = new FileInputStream(file);
+               try {
+                       return toByteArray(fis);
+               } finally {
+                       fis.close();
+               }
+       }
 }
index 2c90d29d0e1bc45c1cb4dfadfb64d4cd7988ee21..79bccec76f26ba9148c3b7658e219e863ec7ac65 100644 (file)
@@ -512,11 +512,15 @@ public class StringUtils {
        /**
         * Zip the data and then encode it into Base64.
         * 
+        * @deprecated use {@link StringUtils#base64(byte[], boolean)} with the
+        *             correct parameter instead
+        * 
         * @param data
         *            the data
         * 
         * @return the Base64 zipped version
         */
+       @Deprecated
        public static String zip64(String data) {
                try {
                        return Base64.encodeBytes(data.getBytes(), Base64.GZIP);
@@ -529,6 +533,9 @@ public class StringUtils {
        /**
         * Unconvert from Base64 then unzip the content.
         * 
+        * @deprecated use {@link StringUtils#unbase64s(String, boolean)} with the
+        *             correct parameter instead
+        * 
         * @param data
         *            the data in Base64 format
         * 
@@ -537,6 +544,7 @@ public class StringUtils {
         * @throws IOException
         *             in case of I/O error
         */
+       @Deprecated
        public static String unzip64(String data) throws IOException {
                ByteArrayInputStream in = new ByteArrayInputStream(Base64.decode(data,
                                Base64.GZIP));
@@ -550,6 +558,73 @@ public class StringUtils {
                }
        }
 
+       /**
+        * Convert the given data to Base64 format.
+        * 
+        * @param data
+        *            the data to convert
+        * @param zip
+        *            TRUE to also compress the data in GZIP format; remember that
+        *            compressed and not-compressed content are different; you need
+        *            to know which is which when decoding
+        * 
+        * @return the Base64 {@link String} representation of the data
+        * 
+        * @throws IOException
+        *             in case of I/O errors
+        */
+       public static String base64(byte[] data, boolean zip) throws IOException {
+               return Base64.encodeBytes(data, zip ? Base64.GZIP : Base64.NO_OPTIONS);
+       }
+
+       /**
+        * Unonvert the given data from Base64 format back to a raw array of bytes.
+        * 
+        * @param data
+        *            the data to unconvert
+        * @param zip
+        *            TRUE to also uncompress the data from a GZIP format; take care
+        *            about this flag, as it could easily cause errors in the
+        *            returned content or an {@link IOException}
+        * 
+        * @return the raw data represented by the given Base64 {@link String},
+        *         optionally compressed with GZIP
+        * 
+        * @throws IOException
+        *             in case of I/O errors
+        */
+       public static byte[] unbase64(String data, boolean zip) throws IOException {
+               return Base64.decode(data, zip ? Base64.GZIP : Base64.NO_OPTIONS);
+       }
+
+       /**
+        * Unonvert the given data from Base64 format back to a {@link String}.
+        * 
+        * @param data
+        *            the data to unconvert
+        * @param zip
+        *            TRUE to also uncompress the data from a GZIP format; take care
+        *            about this flag, as it could easily cause errors in the
+        *            returned content or an {@link IOException}
+        * 
+        * @return the {@link String} represented by the given Base64 {@link String}
+        *         , optionally compressed with GZIP
+        * 
+        * @throws IOException
+        *             in case of I/O errors
+        */
+       public static String unbase64s(String data, boolean zip) throws IOException {
+               ByteArrayInputStream in = new ByteArrayInputStream(unbase64(data, zip));
+
+               Scanner scan = new Scanner(in);
+               scan.useDelimiter("\\A");
+               try {
+                       return scan.next();
+               } finally {
+                       scan.close();
+               }
+       }
+
        /**
         * The "remove accents" pattern.
         * 
@@ -565,21 +640,70 @@ public class StringUtils {
                }
        }
 
+       //
        // justify List<String> related:
+       //
 
+       /**
+        * Check if this line ends as a complete line (ends with a "." or similar).
+        * <p>
+        * Note that we consider an empty line as full, and a line ending with
+        * spaces as not complete.
+        * 
+        * @param line
+        *            the line to check
+        * 
+        * @return TRUE if it does
+        */
        static private boolean isFullLine(StringBuilder line) {
-               return line.length() == 0 //
-                               || line.charAt(line.length() - 1) == '.'
-                               || line.charAt(line.length() - 1) == '"'
-                               || line.charAt(line.length() - 1) == '»';
+               if (line.length() == 0) {
+                       return true;
+               }
+
+               char lastCar = line.charAt(line.length() - 1);
+               switch (lastCar) {
+               case '.': // points
+               case '?':
+               case '!':
+
+               case '\'': // quotes
+               case '‘':
+               case '’':
+
+               case '"': // double quotes
+               case '”':
+               case '“':
+               case '»':
+               case '«':
+                       return true;
+               default:
+                       return false;
+               }
        }
 
+       /**
+        * Check if this line represent an item in a list or description (i.e.,
+        * check that the first non-space char is "-").
+        * 
+        * @param line
+        *            the line to check
+        * 
+        * @return TRUE if it is
+        */
        static private boolean isItemLine(String line) {
                String spacing = getItemSpacing(line);
                return spacing != null && !spacing.isEmpty()
                                && line.charAt(spacing.length()) == '-';
        }
 
+       /**
+        * Return all the spaces that start this line (or Empty if none).
+        * 
+        * @param line
+        *            the line to get the starting spaces from
+        * 
+        * @return the left spacing
+        */
        static private String getItemSpacing(String line) {
                int i;
                for (i = 0; i < line.length(); i++) {
@@ -591,6 +715,14 @@ public class StringUtils {
                return "";
        }
 
+       /**
+        * This line is an horizontal spacer line.
+        * 
+        * @param line
+        *            the line to test
+        * 
+        * @return TRUE if it is
+        */
        static private boolean isHrLine(CharSequence line) {
                int count = 0;
                if (line != null) {