package eu.svjatoslav.sixth.core.document;
+import eu.svjatoslav.commons.string.String2;
import eu.svjatoslav.commons.string.tokenizer.Tokenizer;
import eu.svjatoslav.commons.string.tokenizer.TokenizerMatch;
import eu.svjatoslav.sixth.core.document.content.ListElement;
public final Heading parent;
private final List<Heading> children = new ArrayList<>();
- public final ListElement rootListElement = new ListElement(null, -1, null, "");
+ public final ListElement rootListElement = new ListElement(null, -2, null, "");
private ListElement currentListElement = rootListElement;
public Heading(FormattedText name, int level, Heading parent){
}
private String enlistTitleInMD() {
- StringBuilder sb = new StringBuilder();
- for (int i = 0; i < level; i++)
- sb.append("#");
-
- sb.append(" ").append(name.toMD()).append("\n");
- return sb.toString();
+ String2 s = new String2();
+ s.append("#", level).append(" ").append(name.toMD(0)).append("\n");
+ return s.toString();
}
public ListElement getCurrentHeading(){
String[] listSections = tm.getRegExpGroups();
int indent = listSections[0].length();
String type = listSections[1];
-
- FormattedText title = FormattedText.fromOrg(parseFullListTitle(listSections.length > 2 ? listSections[2] : "", tm.getTokenizer(), indent));
-
-// System.out.println(" indent: " + indent);
-// System.out.println(" type: " + type);
-// System.out.println(" title: " + title);
-
- ListElement parent = null;
+ FormattedText title = FormattedText.fromOrg(parseFullListTitle(getPartialTitle(listSections), tm.getTokenizer(), indent));
if (indent > currentListElement.indent){
- ListElement newElement = new ListElement(title, indent, parent, type);
+ ListElement newElement = new ListElement(title, indent, currentListElement, type);
currentListElement.addContent(newElement);
currentListElement = newElement;
+ return;
+ }
+
+ if (indent == currentListElement.indent){
+ ListElement newElement = new ListElement(title, indent, currentListElement.parent, type);
+ currentListElement.parent.addContent(newElement);
+ currentListElement = newElement;
+ return;
+ }
+
+ while (true){
+ if (currentListElement.parent.indent <= indent){
+ ListElement newElement = new ListElement(title, indent, currentListElement.parent, type);
+ currentListElement.parent.addContent(newElement);
+ currentListElement = newElement;
+ return;
+ }
+ currentListElement = currentListElement.parent;
}
}
+ private String getPartialTitle(String[] listSections) {
+ return listSections.length > 2 ? listSections[2] : "";
+ }
private String parseFullListTitle(String partialTitle, Tokenizer tokenizer, int listIndent){
StringBuilder sb = new StringBuilder();
while (tokenizer.hasMoreContent()){
final TokenizerMatch tm = tokenizer.getNextToken();
- if (isContentContinuation(tm, listIndent, null)){
+ if (isContentContinuation(tm, listIndent, Helper.TG_NORMAL_TEXT)){
String titleContinuation = tm.token.substring(listIndent).trim();
sb.append("\n").append(titleContinuation);
continue;