4.1 Insert Sub-Levels Info

<..set levels for sub and sup scripts..>
 <dom name="." xml="." method="scriptLevel" class="tex4ht.HtSpk" />
 <.remove xml declaration.>
-_-_-

<..static void scriptLevel(dom)..>
 public static void scriptLevel(Node dom) {
    setScriptLevel(dom.getFirstChild(), "");
 }
 private static void setScriptLevel(Node node, String prefix) {
   String clName = null;
   if (node.hasChildNodes()) {
     if (node.hasAttributes()) {
       Node cl = node.getAttributes().getNamedItem("class");
       if (cl != null) {
         clName = cl.getNodeValue();
         if( clName.equals("mrow-sub")
             ||
             clName.equals("mrow-super")
         ){
           <.append script prefix.>
         } else if(
            clName.equals("msqrt")
         ){  prefix = ""; }
     } }
     <.script invoke children.>
 } }
-_-_-

<..script invoke children..>
 NodeList children = node.getChildNodes();
 for (int i = 0; i < children.getLength(); i++) {
    Node child = children.item(i);
    if (child.getNodeType() == Node.ELEMENT_NODE) {
       setScriptLevel(child, prefix);
 }  }
-_-_-

<..append script prefix..>
 if( !prefix.equals("") ){
   <.use current script prefix.>
 }
 if( clName.equals( "mrow-sub" ) ){ prefix += " sub "; }
 else
 if( clName.equals( "mrow-super" ) ){ prefix += " super "; }
-_-_-

<..use current script prefix..>
 Node child = node.getFirstChild();
 if( (child.getNodeType() == Node.ELEMENT_NODE)
     &&
     child.hasAttributes()
 ){
    Node cls = child.getAttributes().getNamedItem("class");
    if (cls != null) {
       String clsName = cls.getNodeValue();
       if ( clsName.equals("begin-script")
            ||
            clsName.equals("mid-script")
       ) {
          child = child.getFirstChild();
          String s = child.getNodeValue();
          ((org.w3c.dom.Text) child).setData( prefix + s );
 }  }  }
-_-_-