docs: public String text() {
          final StringBuilder accum = StringUtil.borrowBuilder();
          NodeTraversor.traverse(new NodeVisitor() {
              public void head(Node node, int depth) {
                  if (node instanceof TextNode) {
                      TextNode textNode = (TextNode) node;
                      appendNormalisedText(accum, textNode);
                  } else if (node instanceof Element) {
                      Element element = (Element) node;
                      if (accum.length() > 0 &&
                          (element.isBlock() || element.tag.getName().equals("br")) &&
                          !TextNode.lastCharIsWhitespace(accum))
                          accum.append(' ');
                  }
              }
  
              public void tail(Node node, int depth) {
                  // make sure there is a space between block tags and immediately following text nodes <div>One</div>Two should be "One Two".
                  if (node instanceof Element) {
                      Element element = (Element) node;
                      if (element.isBlock() && (node.nextSibling() instanceof TextNode) && !TextNode.lastCharIsWhitespace(accum))
                          accum.append(' ');
                  }
  
              }
          }, this);
  
          return StringUtil.releaseBuilder(accum).trim();
      }