package eu.svjatoslav.sixth.core.document.text;
-import eu.svjatoslav.commons.string.tokenizer.InvalidSyntaxException;
+import eu.svjatoslav.commons.string.String2;
import eu.svjatoslav.commons.string.tokenizer.Tokenizer;
import eu.svjatoslav.commons.string.tokenizer.TokenizerMatch;
import java.util.ArrayList;
import java.util.List;
+import static eu.svjatoslav.sixth.core.document.Helper.TG_HYPERLINK;
+
public class FormattedText {
List<FormattedTextElement> elements = new ArrayList<>();
- public void parseOrgSyntax(String orgText) throws InvalidSyntaxException {
+ public void parseOrgSyntax(String orgText) {
Tokenizer tokenizer = getTokenizer(orgText);
while (tokenizer.hasMoreContent()) {
final TokenizerMatch token = tokenizer.getNextToken();
- if (token.terminator == Hyperlink.orgTerminator){
+ if (token.isGroup(TG_HYPERLINK)){
elements.add(Hyperlink.fromOrg(token));
continue;
}
}
-
- public static FormattedText fromOrg(String orgText) throws InvalidSyntaxException {
+ public static FormattedText fromOrg(String orgText){
FormattedText formattedText = new FormattedText();
formattedText.parseOrgSyntax(orgText);
return formattedText;
}
- public String compileMd(){
+ public String toMD(int indent){
StringBuilder sb = new StringBuilder();
for (FormattedTextElement element : elements)
- sb.append(element.compileMd());
+ sb.append(element.toMD());
+
+ return ensureIndent(sb.toString(), indent);
+ }
+
+ public static String ensureIndent(String input, int indent) {
+ String[] lines = input.split("\\r?\\n");
+
+ StringBuilder sb = new StringBuilder();
+
+ sb.append(lines[0]);
+
+ for (int i = 1; i< lines.length; i++) {
+ sb.append("\n");
+ sb.append(new String2(" ").repeat(indent).toString());
+ sb.append(lines[i]);
+ }
return sb.toString();
}
private Tokenizer getTokenizer(String contents) {
final Tokenizer tokenizer = new Tokenizer(contents);
tokenizer.addTerminator(Hyperlink.orgTerminator);
+ tokenizer.addTerminator(Hyperlink.orgTerminator2);
return tokenizer;
}
+
+ public String toString(){
+ return toMD(0);
+ }
}