/**
   * Process the current node in the default manner, expanding entities in its attributes and
   * processing its children re-entrantly.
   */
  public final void expandCurrentNode() {
    ActiveNode node = input.getActive();
    if (node == null) return;

    // Crock for PI comments:
    if (node.getNodeType() == Node.PROCESSING_INSTRUCTION_NODE && node.getNodeName().equals("--"))
      return;

    // No need to check for an entity; active ones use EntityHandler.
    if (input.hasActiveAttributes()) {
      ActiveElement oe = node.asElement();
      ActiveElement e = oe.editedCopy(expandAttrs(oe.getAttrList()), null);
      output.startNode(e);
      if (input.hasChildren()) {
        processChildren();
      }
      output.endElement(e.isEmptyElement() || e.implicitEnd());
    } else if (input.hasChildren()) {
      output.startNode(node);
      if (input.hasChildren()) processChildren();
      output.endNode();
    } else {
      output.putNode(node);
    }
  }
 /**
  * Look up a name and return its value.
  *
  * @param name the name to look up
  * @return the list of nodes associated with the name. If the binding is an Element (the typical
  *     case) its children are returned.
  */
 public ActiveNodeList getValueNodes(Context c, String name) {
   ActiveNode binding = getBinding(name);
   if (binding == null) {
     binding = getActiveAttr(name);
   }
   if (binding == null) return null;
   else if (binding instanceof Namespace) {
     return new TreeNodeList(((Namespace) binding).getBindings());
   } else {
     return binding.getValueNodes(c);
   }
 }
 public void expandNodes(ActiveNodeList nl, Output dst) {
   int len = nl.getLength();
   for (int i = 0; i < len; ++i) {
     ActiveNode n = nl.activeItem(i);
     if (n.getNodeType() == Node.ENTITY_NODE) {
       expandEntity((ActiveEntity) n, dst);
     } else if (n.getNodeType() == Node.ENTITY_REFERENCE_NODE) {
       expandEntityRef((EntityReference) n, dst);
     } else {
       dst.putNode(n);
     }
   }
 }
 /**
  * Process the current node by expanding entities in its attributes, but blindly copying its
  * children (content).
  */
 public final void expandCurrentAttrs() {
   ActiveNode node = input.getActive();
   if (input.hasActiveAttributes()) {
     ActiveElement oe = node.asElement();
     ActiveElement e = new TreeElement(oe, expandAttrs(oe.getAttrList()));
     output.startNode(e);
     if (input.hasChildren()) {
       copyChildren();
     }
     output.endElement(e.isEmptyElement() || e.implicitEnd());
   } else if (input.hasChildren() && !node.hasChildNodes()) {
     copyCurrentNode(node);
   } else {
     output.putNode(node);
   }
 }