1 package org.simantics.scl.compiler.markdown.nodes;
3 import java.util.ArrayList;
6 import org.simantics.scl.compiler.markdown.internal.ExtensionNodeHandler;
7 import org.simantics.scl.compiler.markdown.internal.MarkdownParser;
10 public abstract class Node {
14 public Node firstChild;
15 public Node lastChild;
16 public boolean open = true;
17 public boolean lastLineBlank = false;
18 public StringBuilder stringContent;
19 public int lineNumber;
21 public void setLastLineBlank(boolean value) {
22 if(MarkdownParser.DEBUG)
23 System.out.println(" " + getClass().getSimpleName() + "@" + hashCode() + " lastLineBlank: " +
24 lastLineBlank + " -> " + value);
25 this.lastLineBlank = value;
28 public boolean canContain(Node node) {
32 public boolean acceptLines() {
36 public void toHtml(StringBuilder b) {
37 for(Node child = firstChild; child != null; child = child.next)
41 public List<HeaderNode> extractHeaders() {
42 ArrayList<HeaderNode> result = new ArrayList<HeaderNode>();
43 for(Node child = firstChild; child != null; child = child.next)
44 if(child instanceof HeaderNode)
45 result.add((HeaderNode)child);
49 public String toHtml() {
50 StringBuilder b = new StringBuilder();
53 if(len > 0 && b.charAt(len-1) == '\n')
58 public void toPlainText(StringBuilder b) {
59 for(Node child = firstChild; child != null; child = child.next)
63 public void remove() {
65 parent.firstChild = next;
69 parent.lastChild = prev;
74 public void processExtensionNodes(ExtensionNodeHandler handler) {
75 for(Node child = firstChild; child != null; child = child.next)
76 child.processExtensionNodes(handler);
79 public void addChild(Node child) {
84 lastChild.next = child;
85 child.prev = lastChild;