9.2 Level Indicators for Nesting (Hyper Complex Fractions)

                  ${a\over b}\over c$  
 
begin begin fraction  
                     begin fraction   a  
                     over             b  
                     end fraction  
over over          c  
end end fraction

<..set extra levels for frac..>
 for (int i = 0; i < children.getLength(); i++) {
    Node child = children.item(i);
    if (child.getNodeType() == Node.ELEMENT_NODE) {
       Node cls = child.getAttributes()
                       .getNamedItem("class");
       if (cls != null) {
          String clsName = cls.getNodeValue();
          if (clsName.equals("begin-end")) {
             insertLevelPrefix(child, level);
 }  }  }  }
-_-_-

<..HtJsml utility members..>
 private static void insertLevelPrefix(Node node, int level){
    if( level == 0 ){ return; }
    if (node.getNodeType() == Node.ELEMENT_NODE) {
      if( node.getNodeName().equals( "level" ) ){
         <.insert level prefixes.>
      } else {
         NodeList children = node.getChildNodes();
         for (int i = 0; i < children.getLength(); i++) {
            Node child = children.item(i);
            insertLevelPrefix(child, level);
 }  }  } }
-_-_-

<..insert level prefixes..>
 Node attr = node.getAttributes().getNamedItem("prefix");
 if( attr != null ){
   String prefix = attr.getNodeValue();
   String  s = "";
   for(int j=0; j<level; j++){
      s += prefix + " ";
   }
   ((org.w3c.dom.Element) node).setAttribute( "depth", ""+level);
   Node child = node.getFirstChild();
   if( child != null ){
      node.insertBefore( dom.createTextNode(s), child );
 } }
-_-_-

<..level += inherited from children..>
 NodeList children = node.getChildNodes();
 int max = 0;
 for (int i = 0; i < children.getLength(); i++) {
    Node child = children.item(i);
    if (child.getNodeType() == Node.ELEMENT_NODE) {
       int d = setFracLevel(child,
                            <.continued level counter.>);
       if (d > max) { max = d; }
 }  }
 level += max;
-_-_-