X-Git-Url: http://www2.svjatoslav.eu/gitweb/?p=sixth.git;a=blobdiff_plain;f=src%2Fmain%2Fjava%2Feu%2Fsvjatoslav%2Fsixth%2Fcore%2Fdocument%2FHeading.java;fp=src%2Fmain%2Fjava%2Feu%2Fsvjatoslav%2Fsixth%2Fcore%2Fdocument%2FHeading.java;h=fe335f5e886c02b6886cc2f9172e8986d4fe9d0a;hp=6159e1d689d5870b0243c8a08851a979366c6e58;hb=e37d8d2a8afaf35a27bc65d8d700eeea5ed5bd46;hpb=f9ba1a34f75fc8bfe9e6507762947566c8e22bce diff --git a/src/main/java/eu/svjatoslav/sixth/core/document/Heading.java b/src/main/java/eu/svjatoslav/sixth/core/document/Heading.java index 6159e1d..fe335f5 100644 --- a/src/main/java/eu/svjatoslav/sixth/core/document/Heading.java +++ b/src/main/java/eu/svjatoslav/sixth/core/document/Heading.java @@ -1,16 +1,26 @@ package eu.svjatoslav.sixth.core.document; +import eu.svjatoslav.commons.string.tokenizer.InvalidSyntaxException; +import eu.svjatoslav.commons.string.tokenizer.Tokenizer; +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.TG_DOCUMENT_PROPERTY; +import static eu.svjatoslav.sixth.core.document.Helper.TG_LIST; +import static eu.svjatoslav.sixth.core.document.text.FormattedText.fromOrg; + public class Heading { public final FormattedText name; public final int level; public final Heading parent; private final List children = new ArrayList<>(); + public final ListElement rootListElement = new ListElement(null, 0, null); + private ListElement currentListElement = rootListElement; + public Heading(FormattedText name, int level, Heading parent){ this.level = level; this.name = name; @@ -25,4 +35,77 @@ public class Heading { return children; } + public String toMD () { + StringBuilder sb = new StringBuilder(); + + if (level > 0) sb.append(enlistTitleInMD()); + + // sb.append(unparsedContent); + + + children.stream().map(Heading::toMD).forEach(sb::append); + + return sb.toString(); + } + + private String enlistTitleInMD() { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < level; i++) + sb.append("#"); + + sb.append(" ").append(name.compileMd()).append("\n"); + return sb.toString(); + } + + public ListElement createListElement(FormattedText name, int targetLevel){ + if (currentListElement.level == (targetLevel - 1)){ + ListElement newListElement = new ListElement(name, targetLevel, currentListElement); + currentListElement.addChild(newListElement); + currentListElement = newListElement; + return newListElement; + } + + if (currentListElement.level > (targetLevel - 1)){ + currentListElement = currentListElement.parent; + return createListElement(name, targetLevel); + } + + try { + ListElement missingIntermediate = new ListElement( + fromOrg(""), currentListElement.level + 1, currentListElement); + currentListElement.addChild(missingIntermediate); + currentListElement = missingIntermediate; + return createListElement(name, targetLevel); + } catch (InvalidSyntaxException e) { + throw new IllegalStateException("impossible situation"); + } + } + + public ListElement getCurrentHeading(){ + return currentListElement; + } + + public void parse(Tokenizer tokenizer){ + while (tokenizer.hasMoreContent()) { + final TokenizerMatch tm = tokenizer.getNextToken(); + + if (tm.isGroup(TG_LIST)){ + System.out.println("LIST!: " + tm.token); + continue; + } + + if (tm.isGroup(TG_DOCUMENT_PROPERTY)){ +// System.out.println("DOCUMENT PROPERTY!!!: " + tm.token); + continue; + } + + if (tm.isGroup(null)){ +// System.out.println(" HC: " + tm.token); + continue; + } + + tokenizer.unreadToken(); + break; + } + } }