in src/o-tree.ts [90:130]
public write(sink: OTreeSink) {
if (!sink.tagOnce(this.options.renderOnce)) {
return;
}
const meVisible = sink.renderingForSpan(this.span);
for (const x of this.prefix) {
sink.write(x);
}
const popIndent = sink.requestIndentChange(meVisible ? this.options.indent ?? 0 : 0);
let mark = sink.mark();
for (const child of this.children ?? []) {
if (this.options.separator) {
if (this.options.trailingSeparator) {
sink.ensureNewLine();
} else if (mark.wroteNonWhitespaceSinceMark) {
sink.write(this.options.separator);
}
}
mark = sink.mark();
sink.write(child);
if (this.options.separator && this.options.trailingSeparator) {
sink.write(this.options.separator.trimEnd());
}
}
popIndent();
if (this.options.suffix) {
if (this.options.separator && this.options.trailingSeparator) {
sink.ensureNewLine();
}
sink.renderingForSpan(this.span);
sink.write(this.options.suffix);
}
}