Use regular expression tokenizer. WIP
[sixth.git] / src / main / java / eu / svjatoslav / sixth / core / document / text / FormattedText.java
index b9d42a2..ae6a421 100644 (file)
@@ -1,17 +1,34 @@
 package eu.svjatoslav.sixth.core.document.text;
 
+import eu.svjatoslav.commons.string.tokenizer.InvalidSyntaxException;
+import eu.svjatoslav.commons.string.tokenizer.Tokenizer;
+import eu.svjatoslav.commons.string.tokenizer.TokenizerMatch;
+
 import java.util.ArrayList;
 import java.util.List;
 
 public class FormattedText {
     List<FormattedTextElement> elements = new ArrayList<>();
 
-    public void parseOrgSyntax(String orgText){
-        PlainText plainText = new PlainText(orgText);
-        elements.add(plainText);
+    public void parseOrgSyntax(String orgText) throws InvalidSyntaxException {
+
+        Tokenizer tokenizer = getTokenizer(orgText);
+        while (tokenizer.hasMoreContent()) {
+            final TokenizerMatch token = tokenizer.getNextToken();
+
+            if (token.terminator == Hyperlink.orgTerminator){
+                elements.add(Hyperlink.fromOrg(token));
+                continue;
+            }
+
+            PlainText plainText = new PlainText(token.token);
+            elements.add(plainText);
+        }
+
     }
 
-    public static FormattedText fromOrg(String orgText){
+
+    public static FormattedText fromOrg(String orgText) throws InvalidSyntaxException {
         FormattedText formattedText = new FormattedText();
         formattedText.parseOrgSyntax(orgText);
         return formattedText;
@@ -25,4 +42,11 @@ public class FormattedText {
 
         return sb.toString();
     }
+
+    private Tokenizer getTokenizer(String contents) {
+        final Tokenizer tokenizer = new Tokenizer(contents);
+        tokenizer.addTerminator(Hyperlink.orgTerminator);
+        return tokenizer;
+    }
+
 }