Parse multiline list headings
[sixth.git] / src / main / java / eu / svjatoslav / sixth / core / document / Document.java
index e626304..c4e18cd 100644 (file)
@@ -27,14 +27,10 @@ public class Document {
             return createHeading(name, targetLevel);
         }
 
-        try {
-            Heading missingIntermediate = new Heading(fromOrg("<noname>"), currentHeading.level + 1, currentHeading);
-            currentHeading.addChild(missingIntermediate);
-            currentHeading = missingIntermediate;
-            return createHeading(name, targetLevel);
-        } catch (InvalidSyntaxException e) {
-            throw new IllegalStateException("impossible situation");
-        }
+        Heading missingIntermediate = new Heading(fromOrg("<noname>"), currentHeading.level + 1, currentHeading);
+        currentHeading.addChild(missingIntermediate);
+        currentHeading = missingIntermediate;
+        return createHeading(name, targetLevel);
     }
 
     public Heading getCurrentHeading(){
@@ -42,9 +38,10 @@ public class Document {
     }
 
     private void parseHeading(TokenizerMatch token) throws InvalidSyntaxException {
-        System.out.println("HEADING!! " + token.token);
-        int level = token.token.length()-1;
-//        createHeading(fromOrg(token.reminder), level);
+        String[] headingSections = token.getRegExpGroups();
+        int level = headingSections[0].length();
+        String title = headingSections[1];
+        createHeading(fromOrg(title), level);
     }
 
     public void parse(String fileContentsAsString) throws InvalidSyntaxException {
@@ -52,13 +49,15 @@ public class Document {
 
         // Org heading:
         // "*** Example Heading 1234"
-        tokenizer.addTerminator(PRESERVE, "\\*+\\s.*\\r?\\n", TG_HEADING);
+        tokenizer.addTerminator(PRESERVE, "(\\*+)[ \\t](.*)\\r?\\n", TG_HEADING);
 
         // Org list. Examples:
         // "   + my list title"
-        // "+"
-        tokenizer.addTerminator(PRESERVE, "\\s*(\\+|-)(\\s.*)?\\r?\\n", TG_LIST);
-        tokenizer.addTerminator(PRESERVE, "\\s+\\*(\\s.*)?\\r?\\n", TG_LIST);
+        // "   - my list title"
+        tokenizer.addTerminator(PRESERVE, "([ \\t]*)(\\+|-)[ \\t]?(.*)?\\r?\\n", TG_LIST);
+
+        // "   * my list title"
+        tokenizer.addTerminator(PRESERVE, "([ \\t]+)(\\*)[ \\t]?(.*)?\\r?\\n", TG_LIST);
 
         // DocumentProperty:
         // "#+OPTIONS: H:20 num:20"
@@ -76,8 +75,7 @@ public class Document {
                 continue;
             }
 
-            tokenizer.unreadToken();
-            currentHeading.parse(tokenizer);
+            currentHeading.parse(tm);
         }
 
     }