public final void endNode() {
   endNodeInternally();
   final Object node = nodeStack.pop();
   if (nodeStack.size() == 0) {
     result.add(node);
   }
 }
  public void startNode(String name) {
    startPointer = writer.getPointer();
    quickNodeValue = false;
    lastTagHadAttributes = false;
    tagIsEmpty = false;
    finishTag();
    if (depth != 0) writer.write(LF);
    writer.write(
        WikiTableDriver.DELIM
            + WikiTableDriver.QUOTES
            + WikiTableDriver.START_NODE
            + WikiTableDriver.QUOTES
            + WikiTableDriver.DELIM);

    if (this.useLineSeparateBetweenTags) {
      writer.write(LF + WikiTableDriver.DELIM);
    }

    writer.write(name + WikiTableDriver.DELIM);
    elementStack.push(name);
    tagInProgress = true;
    depth++;
    readyForNewLine = true;
    tagIsEmpty = true;
  }
 /**
  * Constructs an AbstractDocumentWriter.
  *
  * @param container the top level container for the nodes to create (may be <code>null</code>)
  * @param replacer the object that creates XML-friendly names
  * @since 1.2.1
  */
 public AbstractDocumentWriter(final Object container, final XmlFriendlyReplacer replacer) {
   super(replacer);
   if (container != null) {
     nodeStack.push(container);
     result.add(container);
   }
 }
 /** Marks end of node */
 public void endNode() {
   depth--;
   if (tagIsEmpty) {
     String prevTag = (String) elementStack.pop(); // Silently();
     if (!quickNodeValue) {
       writer.write(
           LF
               + WikiTableDriver.DELIM
               + WikiTableDriver.QUOTES
               + WikiTableDriver.END_NODE
               + WikiTableDriver.QUOTES
               + WikiTableDriver.DELIM);
       if (this.useLineSeparateBetweenTags) {
         writer.write(LF + WikiTableDriver.DELIM);
       }
       writer.write(prevTag + WikiTableDriver.DELIM);
     }
     readyForNewLine = false;
   } else {
     String prevTag = (String) elementStack.pop();
     if (!quickNodeValue) {
       writer.write(
           LF
               + WikiTableDriver.DELIM
               + WikiTableDriver.QUOTES
               + WikiTableDriver.END_NODE
               + WikiTableDriver.QUOTES
               + WikiTableDriver.DELIM);
       if (this.useLineSeparateBetweenTags) {
         writer.write(LF + WikiTableDriver.DELIM);
       }
       writer.write(prevTag + WikiTableDriver.DELIM);
     }
   }
   finishTag();
   readyForNewLine = true;
   if (depth == 0) {
     writer.flush();
   }
   quickNodeValue = false;
 }
 /** @since 1.2.1 */
 protected final Object getCurrent() {
   return nodeStack.peek();
 }
 public final void startNode(final String name) {
   final Object node = createNode(name);
   nodeStack.push(node);
 }