Fix e621 getAuthor() which could error out
[fanfix.git] / src / be / nikiroo / fanfix / supported / BasicSupport.java
index 6d44c047d6dccf89907a4345e80b03a670c22ad5..61a4500759bccb26366d23ade04f07053c169dcb 100644 (file)
@@ -360,6 +360,7 @@ public abstract class BasicSupport {
                                        } finally {
                                                chapIn.close();
                                        }
+
                                        i++;
                                }
                        }
@@ -513,7 +514,7 @@ public abstract class BasicSupport {
                                String line = scan.next().trim();
                                boolean image = false;
                                if (line.startsWith("[") && line.endsWith("]")) {
-                                       URL url = getImageUrl(source,
+                                       URL url = getImageUrl(this, source,
                                                        line.substring(1, line.length() - 1).trim());
                                        if (url != null) {
                                                paras.add(new Paragraph(url));
@@ -581,7 +582,7 @@ public abstract class BasicSupport {
                                && Instance.getCoverDir() != null) {
                        try {
                                File fileCover = new File(Instance.getCoverDir(), subject);
-                               return getImage(fileCover.toURI().toURL(), subject);
+                               return getImage(null, fileCover.toURI().toURL(), subject);
                        } catch (MalformedURLException e) {
                        }
                }
@@ -602,8 +603,8 @@ public abstract class BasicSupport {
                }
        }
 
-       static BufferedImage getImage(URL source, String line) {
-               URL url = getImageUrl(source, line);
+       static BufferedImage getImage(BasicSupport support, URL source, String line) {
+               URL url = getImageUrl(support, source, line);
                if (url != null) {
                        InputStream in = null;
                        try {
@@ -635,7 +636,7 @@ public abstract class BasicSupport {
         * @return the image URL if found, or NULL
         * 
         */
-       static URL getImageUrl(URL source, String line) {
+       static URL getImageUrl(BasicSupport support, URL source, String line) {
                URL url = null;
 
                if (line != null) {
@@ -644,11 +645,11 @@ public abstract class BasicSupport {
                        if (source != null) {
                                path = new File(source.getFile()).getParent();
                                try {
-                                       String urlBase = new File(new File(path), line.trim())
-                                                       .toURI().toURL().toString();
+                                       String basePath = new File(new File(path), line.trim())
+                                                       .getAbsolutePath();
                                        for (String ext : getImageExt(true)) {
-                                               if (new File(urlBase + ext).exists()) {
-                                                       url = new File(urlBase + ext).toURI().toURL();
+                                               if (new File(basePath + ext).exists()) {
+                                                       url = new File(basePath + ext).toURI().toURL();
                                                }
                                        }
                                } catch (Exception e) {
@@ -662,6 +663,7 @@ public abstract class BasicSupport {
                                        for (String ext : getImageExt(true)) {
                                                if (Instance.getCache().check(new URL(line + ext))) {
                                                        url = new URL(line + ext);
+                                                       break;
                                                }
                                        }
 
@@ -670,8 +672,7 @@ public abstract class BasicSupport {
                                                for (String ext : getImageExt(true)) {
                                                        try {
                                                                url = new URL(line + ext);
-                                                               Instance.getCache().refresh(url,
-                                                                               getSupport(url), true);
+                                                               Instance.getCache().refresh(url, support, true);
                                                                break;
                                                        } catch (IOException e) {
                                                                // no image with this ext
@@ -687,7 +688,7 @@ public abstract class BasicSupport {
                        // refresh the cached file
                        if (url != null) {
                                try {
-                                       Instance.getCache().refresh(url, getSupport(url), true);
+                                       Instance.getCache().refresh(url, support, true);
                                } catch (IOException e) {
                                        // woops, broken image
                                        url = null;
@@ -767,11 +768,22 @@ public abstract class BasicSupport {
                                line = openDoubleQuote + line + closeDoubleQuote;
                                newParas.add(new Paragraph(ParagraphType.QUOTE, line));
                        } else {
+                               char open = singleQ ? openQuote : openDoubleQuote;
                                char close = singleQ ? closeQuote : closeDoubleQuote;
-                               int posClose = line.indexOf(close, 1);
-                               int posDot = line.indexOf(".");
-                               while (posDot >= 0 && posDot < posClose) {
-                                       posDot = line.indexOf(".", posDot + 1);
+
+                               int posDot = -1;
+                               boolean inQuote = false;
+                               int i = 0;
+                               for (char car : line.toCharArray()) {
+                                       if (car == open) {
+                                               inQuote = true;
+                                       } else if (car == close) {
+                                               inQuote = false;
+                                       } else if (car == '.' && !inQuote) {
+                                               posDot = i;
+                                               break;
+                                       }
+                                       i++;
                                }
 
                                if (posDot >= 0) {