Parse multiline list headings
[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.Tokenizer;
4 import eu.svjatoslav.commons.string.tokenizer.TokenizerMatch;
5
6 import java.util.ArrayList;
7 import java.util.List;
8
9 import static eu.svjatoslav.sixth.core.document.Helper.TG_HYPERLINK;
10
11 public class FormattedText {
12     List<FormattedTextElement> elements = new ArrayList<>();
13
14     public void parseOrgSyntax(String orgText) {
15
16         Tokenizer tokenizer = getTokenizer(orgText);
17         while (tokenizer.hasMoreContent()) {
18             final TokenizerMatch token = tokenizer.getNextToken();
19
20             if (token.isGroup(TG_HYPERLINK)){
21                 elements.add(Hyperlink.fromOrg(token));
22                 continue;
23             }
24
25             PlainText plainText = new PlainText(token.token);
26             elements.add(plainText);
27         }
28
29     }
30
31
32     public static FormattedText fromOrg(String orgText){
33         FormattedText formattedText = new FormattedText();
34         formattedText.parseOrgSyntax(orgText);
35         return formattedText;
36     }
37
38     public String toMD(){
39         StringBuilder sb = new StringBuilder();
40
41         for (FormattedTextElement element : elements)
42             sb.append(element.toMD());
43
44         return sb.toString();
45     }
46
47     private Tokenizer getTokenizer(String contents) {
48         final Tokenizer tokenizer = new Tokenizer(contents);
49         tokenizer.addTerminator(Hyperlink.orgTerminator);
50         tokenizer.addTerminator(Hyperlink.orgTerminator2);
51         return tokenizer;
52     }
53
54 }