ae6a42151fec0adda690dd137ad1700f5c9ad036
[sixth.git] / src / main / java / eu / svjatoslav / sixth / core / document / text / FormattedText.java
1 package eu.svjatoslav.sixth.core.document.text;
2
3 import eu.svjatoslav.commons.string.tokenizer.InvalidSyntaxException;
4 import eu.svjatoslav.commons.string.tokenizer.Tokenizer;
5 import eu.svjatoslav.commons.string.tokenizer.TokenizerMatch;
6
7 import java.util.ArrayList;
8 import java.util.List;
9
10 public class FormattedText {
11     List<FormattedTextElement> elements = new ArrayList<>();
12
13     public void parseOrgSyntax(String orgText) throws InvalidSyntaxException {
14
15         Tokenizer tokenizer = getTokenizer(orgText);
16         while (tokenizer.hasMoreContent()) {
17             final TokenizerMatch token = tokenizer.getNextToken();
18
19             if (token.terminator == Hyperlink.orgTerminator){
20                 elements.add(Hyperlink.fromOrg(token));
21                 continue;
22             }
23
24             PlainText plainText = new PlainText(token.token);
25             elements.add(plainText);
26         }
27
28     }
29
30
31     public static FormattedText fromOrg(String orgText) throws InvalidSyntaxException {
32         FormattedText formattedText = new FormattedText();
33         formattedText.parseOrgSyntax(orgText);
34         return formattedText;
35     }
36
37     public String compileMd(){
38         StringBuilder sb = new StringBuilder();
39
40         for (FormattedTextElement element : elements)
41             sb.append(element.compileMd());
42
43         return sb.toString();
44     }
45
46     private Tokenizer getTokenizer(String contents) {
47         final Tokenizer tokenizer = new Tokenizer(contents);
48         tokenizer.addTerminator(Hyperlink.orgTerminator);
49         return tokenizer;
50     }
51
52 }