Added support for: Verse, Multiline code block, drawer property. Fixes.
[sixth.git] / src / main / java / eu / svjatoslav / sixth / core / document / content / ListElement.java
index a82fd53..e1cf33d 100644 (file)
@@ -7,8 +7,7 @@ import eu.svjatoslav.sixth.core.document.text.FormattedText;
 import java.util.ArrayList;
 import java.util.List;
 
-import static eu.svjatoslav.sixth.core.document.Helper.TG_DOCUMENT_PROPERTY;
-import static eu.svjatoslav.sixth.core.document.Helper.TG_NORMAL_TEXT;
+import static eu.svjatoslav.sixth.core.document.Helper.*;
 
 public class ListElement implements Content {
     public final FormattedText name;
@@ -16,6 +15,7 @@ public class ListElement implements Content {
     public final ListElement parent;
     private final String type;
     private final List<Content> content = new ArrayList<>();
+    StringBuilder normalTextAccumulator = new StringBuilder();
 
     public ListElement(FormattedText name, int indent, ListElement parent, String type) {
         this.indent = indent;
@@ -24,19 +24,52 @@ public class ListElement implements Content {
         this.parent = parent;
     }
 
-    public void addContent(ListElement content) {
+    public void addContent(Content content) {
+        applyTextAccumulator();
         this.content.add(content);
     }
 
+    private void applyTextAccumulator(){
+        if (normalTextAccumulator.length() == 0)
+            return;
+
+        content.add(new TextBlock(normalTextAccumulator.toString()));
+
+        normalTextAccumulator.setLength(0);
+    }
+
     public void parse(TokenizerMatch tm) {
 
         if (tm.isGroup(TG_DOCUMENT_PROPERTY)) {
-//            System.out.println("DOCUMENT PROPERT!!!: " + tm.token);
+            // TODO
+            // System.out.println("DOCUMENT PROPERTY!!!: " + tm.token);
+            return;
+        }
+
+        if (tm.isGroup(TG_DRAWER_PROPERTY)) {
+            // TODO
+            // System.out.println("DOCUMENT PROPERTY!!!: " + tm.token);
             return;
         }
 
         if (tm.isGroup(TG_NORMAL_TEXT)) {
-//            System.out.println("  Plain text content: " + tm.token);
+            normalTextAccumulator.append(tm.token);
+            return;
+        }
+
+        if (tm.isGroup(TG_MULTILINE_CODE)){
+           // System.out.println(tm.toString());
+            String[] groups = tm.getRegExpGroups();
+            addContent(new MultilineCode(
+                    groups[3], // language
+                    groups[5]  // code
+            ));
+            return;
+        }
+
+        if (tm.isGroup(TG_VERSE)){
+            String[] groups = tm.getRegExpGroups();
+            addContent(new Verse(groups[5]));
             return;
         }
 
@@ -45,6 +78,8 @@ public class ListElement implements Content {
 
 
     public void toMD(StringBuilder sb, int indent) {
+        applyTextAccumulator();
+
         if (this.indent >= 0) {
             String2 s = new String2();
             s.append(" ", indent).append(type).append(" ").append(name.toMD(indent + 2)).append("\n");