Support for no-chapter stories or stories with descriiption before Chatper
[nikiroo-utils.git] / supported / Text.java
index c54b6a5d44ce0a328d63451420c6a9c00a82bd3c..232eab6ec4f7736b6b470011f51d09548fe733e8 100644 (file)
@@ -85,7 +85,7 @@ class Text extends BasicSupport {
 
                meta.setTitle(getTitle());
                meta.setAuthor(getAuthor());
-               meta.setDate(getDate());
+               meta.setDate(bsHelper.formatDate(getDate()));
                meta.setTags(new ArrayList<String>());
                meta.setSource(getType().getSourceName());
                meta.setUrl(getSourceFile().toURI().toURL().toString());
@@ -97,12 +97,12 @@ class Text extends BasicSupport {
                meta.setType(getType().toString());
                meta.setImageDocument(false);
                meta.setCover(getCover(getSourceFile()));
-
+               
                return meta;
        }
 
        private String getLang() {
-               @SuppressWarnings("resource")
+               @SuppressWarnings("resource") // cannot close, or we loose getInput()!
                Scanner scan = new Scanner(getInput(), "UTF-8");
                scan.useDelimiter("\\n");
                scan.next(); // Title
@@ -128,14 +128,14 @@ class Text extends BasicSupport {
        }
 
        private String getTitle() {
-               @SuppressWarnings("resource")
+               @SuppressWarnings("resource") // cannot close, or we loose getInput()!
                Scanner scan = new Scanner(getInput(), "UTF-8");
                scan.useDelimiter("\\n");
                return scan.next();
        }
 
        private String getAuthor() {
-               @SuppressWarnings("resource")
+               @SuppressWarnings("resource") // cannot close, or we loose getInput()!
                Scanner scan = new Scanner(getInput(), "UTF-8");
                scan.useDelimiter("\\n");
                scan.next();
@@ -151,7 +151,7 @@ class Text extends BasicSupport {
        }
 
        private String getDate() {
-               @SuppressWarnings("resource")
+               @SuppressWarnings("resource") // cannot close, or we loose getInput()!
                Scanner scan = new Scanner(getInput(), "UTF-8");
                scan.useDelimiter("\\n");
                scan.next();
@@ -188,7 +188,7 @@ class Text extends BasicSupport {
                return content;
        }
 
-       private Image getCover(File sourceFile) {
+       protected Image getCover(File sourceFile) {
                String path = sourceFile.getName();
 
                for (String ext : new String[] { ".txt", ".text", ".story" }) {
@@ -215,12 +215,13 @@ class Text extends BasicSupport {
        protected List<Entry<String, URL>> getChapters(Progress pg)
                        throws IOException {
                List<Entry<String, URL>> chaps = new ArrayList<Entry<String, URL>>();
-               @SuppressWarnings("resource")
+               @SuppressWarnings("resource") // cannot close, or we loose getInput()!
                Scanner scan = new Scanner(getInput(), "UTF-8");
                scan.useDelimiter("\\n");
-               boolean prevLineEmpty = false;
+               String line = "first is not empty";
                while (scan.hasNext()) {
-                       String line = scan.next();
+                       boolean prevLineEmpty = line.trim().isEmpty();
+                       line = scan.next();
                        if (prevLineEmpty && detectChapter(line, chaps.size() + 1) != null) {
                                String chapName = Integer.toString(chaps.size() + 1);
                                int pos = line.indexOf(':');
@@ -232,10 +233,8 @@ class Text extends BasicSupport {
                                                chapName, //
                                                getSourceFile().toURI().toURL()));
                        }
-
-                       prevLineEmpty = line.trim().isEmpty();
                }
-
+               
                return chaps;
        }
 
@@ -243,17 +242,27 @@ class Text extends BasicSupport {
        protected String getChapterContent(URL source, int number, Progress pg)
                        throws IOException {
                StringBuilder builder = new StringBuilder();
-               @SuppressWarnings("resource")
+               @SuppressWarnings("resource") // cannot close, or we loose getInput()!
                Scanner scan = new Scanner(getInput(), "UTF-8");
                scan.useDelimiter("\\n");
-               boolean inChap = false;
+               scan.next(); // title
+               scan.next(); // author
+               scan.next(); // date or empty
+               Boolean inChap = null;
+               String line = "";
                while (scan.hasNext()) {
-                       String line = scan.next();
-                       if (!inChap && detectChapter(line, number) != null) {
+                       if (number == 0 && !line.trim().isEmpty()) {
+                               // We found pre-chapter content, we are checking for
+                               // Chapter 0 (fake chapter) --> keep the content
+                               if (inChap == null)
+                                       inChap = true;
+                       }
+                       line = scan.next();
+                       if ((inChap == null || !inChap) && detectChapter(line, number) != null) {
                                inChap = true;
                        } else if (detectChapter(line, number + 1) != null) {
                                break;
-                       } else if (inChap) {
+                       } else if (inChap != null && inChap) {
                                builder.append(line);
                                builder.append("\n");
                        }
@@ -317,7 +326,7 @@ class Text extends BasicSupport {
        }
 
        /**
-        * Remove the ".txt" extension if it is present.
+        * Remove the ".txt" (or ".text") extension if it is present.
         * 
         * @param file
         *            the file to process
@@ -326,9 +335,11 @@ class Text extends BasicSupport {
         *         was present
         */
        protected File assureNoTxt(File file) {
-               if (file.getName().endsWith(".txt")) {
-                       file = new File(file.getPath().substring(0,
-                                       file.getPath().length() - 4));
+               for (String ext : new String[] { ".txt", ".text" }) {
+                       if (file.getName().endsWith(ext)) {
+                               file = new File(file.getPath().substring(0,
+                                               file.getPath().length() - ext.length()));
+                       }
                }
 
                return file;