+++ /dev/null
-package eu.svjatoslav.sixth.core.document.content;
-
-import eu.svjatoslav.commons.string.String2;
-import eu.svjatoslav.commons.string.tokenizer.TokenizerMatch;
-import eu.svjatoslav.sixth.core.document.text.FormattedText;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import static eu.svjatoslav.sixth.core.document.Helper.*;
-import static eu.svjatoslav.sixth.core.document.Utils.isBlank;
-import static eu.svjatoslav.sixth.core.document.Utils.removePrefix;
-
-public class ListElement implements Content {
- StringBuilder nameInOrg = new StringBuilder();
- public final int indent;
- public final ListElement parent;
- private final String type;
- private final List<Content> content = new ArrayList<>();
-
- public ListElement(String nameInOrg, int indent, ListElement parent, String type) {
- this.indent = indent;
- this.nameInOrg.append(nameInOrg);
- this.type = type;
- this.parent = parent;
- }
-
- private Content findCurrentContentElement(){
- if (content.isEmpty()) return null;
- return content.get(content.size()-1);
- }
-
- private boolean isLastContentElement(Class aClass){
- Content contentElement = findCurrentContentElement();
- if (contentElement == null) return false;
-
- return aClass.isInstance(contentElement);
- }
-
- public void addContent(Content contentElement){
- content.add(contentElement);
- }
-
- public void parse(TokenizerMatch tm) {
-
- if (tm.isGroup(TG_DOCUMENT_PROPERTY)) {
- parseDocumentProperty(tm);
- return;
- }
-
- if (tm.isGroup(TG_DRAWER_PROPERTY)) {
- // TODO
- // System.out.println("DOCUMENT PROPERTY!!!: " + tm.token);
- return;
- }
-
- if (tm.isGroup(TG_NORMAL_TEXT)) {
- if (isBlank(tm.token)){
- parseSeparator();
- return;
- }
-
- parseTextBlock(tm);
- return;
- }
-
- if (tm.isGroup(TG_MULTILINE_CODE)){
- // System.out.println(tm.toString());
- String[] groups = tm.getRegExpGroups();
- content.add(new MultilineCode(
- groups[3], // language
- groups[5] // code
- ));
- return;
- }
-
- if (tm.isGroup(TG_VERSE)){
- String[] groups = tm.getRegExpGroups();
- content.add(new Verse(groups[5]));
- return;
- }
-
- System.out.println("ERROR!!!! Unable to handle: " + tm);
- }
-
- private void parseTextBlock(TokenizerMatch tm) {
- TextBlock textBlock;
- if (isLastContentElement(TextBlock.class)) {
- textBlock = ((TextBlock) findCurrentContentElement());
- } if (content.isEmpty()){
- // list title continuation
- nameInOrg.append("\n").append(removePrefix(tm.token, indent + 2));
- return;
- } else {
- textBlock = new TextBlock();
- content.add(textBlock);
- }
-
- textBlock.addContent(tm.token);
- }
-
- private void parseDocumentProperty(TokenizerMatch tm) {
- DocumentPropertyCollection documentPropertyCollection;
-
- if (isLastContentElement(DocumentPropertyCollection.class)){
- documentPropertyCollection = (DocumentPropertyCollection)findCurrentContentElement();
- } else {
- documentPropertyCollection = new DocumentPropertyCollection();
- content.add(documentPropertyCollection);
- }
-
- documentPropertyCollection.addProperty(
- tm.getRegExpGroups()[0],
- tm.getRegExpGroups()[1]);
- }
-
- private void parseSeparator() {
- if (isLastContentElement(Separator.class)){
- ((Separator)findCurrentContentElement()).addLine();
- } else {
- content.add(new Separator());
- }
- }
-
-
- public void toMD(StringBuilder sb, int indent) {
- disablePlantUmlExport();
-
- if (this.indent >= 0) {
- String2 s = new String2();
- s.append(" ", indent).append(type).append(" ").append(getName().toMD(indent + 2)).append("\n");
- sb.append(s.toString());
- }
-
- for (Content c : content) {
- c.toMD(sb, this.indent + 2);
- }
- }
-
- private FormattedText getName(){
- return FormattedText.fromOrg(nameInOrg.toString());
- }
-
- private void disablePlantUmlExport() {
-
- for (int i = 0; i< (content.size()-2); i++){
- if (!(content.get(i) instanceof MultilineCode)) continue;
-
- MultilineCode code = (MultilineCode) content.get(i);
- if (!"plantuml".equalsIgnoreCase(code.language)) continue;
-
- if (!(content.get(i+1) instanceof DocumentPropertyCollection)) continue;
- DocumentPropertyCollection property = (DocumentPropertyCollection) content.get(i+1);
-
- if (!property.hasProperty("results")) continue;
-
- if (!(content.get(i+2) instanceof TextBlock)) continue;
- TextBlock textBlock = (TextBlock) content.get(i+2);
-
- textBlock.disableForExport();
- }
- }
-}