public write()

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);
    }
  }