X-Git-Url: http://www2.svjatoslav.eu/gitweb/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Feu%2Fsvjatoslav%2Fsixth%2Fcore%2Fdocument%2Ftext%2FFormattedText.java;h=ad7d8ca4165c1bf5a645cb8dbc9b9a2e3ee477dd;hb=06527b2a72ee8f1c8434288d522fe2fe8aea5e8b;hp=ae6a42151fec0adda690dd137ad1700f5c9ad036;hpb=e37d8d2a8afaf35a27bc65d8d700eeea5ed5bd46;p=sixth.git diff --git a/src/main/java/eu/svjatoslav/sixth/core/document/text/FormattedText.java b/src/main/java/eu/svjatoslav/sixth/core/document/text/FormattedText.java index ae6a421..ad7d8ca 100644 --- a/src/main/java/eu/svjatoslav/sixth/core/document/text/FormattedText.java +++ b/src/main/java/eu/svjatoslav/sixth/core/document/text/FormattedText.java @@ -1,22 +1,24 @@ 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 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; } @@ -27,18 +29,33 @@ public class FormattedText { } - - 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(); } @@ -46,6 +63,7 @@ public class FormattedText { private Tokenizer getTokenizer(String contents) { final Tokenizer tokenizer = new Tokenizer(contents); tokenizer.addTerminator(Hyperlink.orgTerminator); + tokenizer.addTerminator(Hyperlink.orgTerminator2); return tokenizer; }