2.1 Group MN / MO-Punctuation

<..GroupMn.java..>
 package tex4ht;
 /* GroupMn.java (2014-05-24-11:52), generated from tex4ht-jsml-xtpipes.tex
    Copyright (C) 2009-2010 TeX Users Group
    Copyright (C) 2002-2009 Eitan M. Gurari
 <.TeX4ht copyright.> */
 import org.xml.sax.helpers.*;
 import org.xml.sax.*;
 import java.io.PrintWriter;
 
 public class GroupMn extends XMLFilterImpl {
      PrintWriter out = null;
      boolean inMn = false;
      String ns;
      int level = -1;
    public GroupMn( PrintWriter out, PrintWriter log, boolean trace){
      this.out = out;
    }
    public void startElement(String ns, String sName,
                            String qName, Attributes attr) {
       level++;
       try{
         if( inMn ){
            if( level == 0 ){ <.consider end of num.> }
         } else { <.consider start of num.> }
         super.startElement(ns, sName, qName, attr);
       } catch( Exception e ){
         System.out.println( "--- GroupMn Error 1 --- " + e);
       }
    }
    public void endElement(String ns, String sName, String qName){
       try{
         if( level < 0) {
           <.endElement: consider end of num.>
         }
         super.endElement(ns, sName, qName);
       } catch( Exception e ){
         System.out.println( "--- GroupMn Error 2 --- " + e);
       }
       level--;
    }
    public void characters(char[] ch, int start, int length){
       try{
         if ( inMn  && (level < 0) ) {
            String s = new String(ch, start, length);
            if (!s.trim().equals("")) {
              inMn = false;
              super.endElement(ns, "mn-group", "mn-group");
         }  }
         super.characters(ch, start, length);
       } catch( Exception e ){
         System.out.println( "--- GroupMn Error 3 --- " + e);
 }  }  }
-_-_-

<..consider start of num..>
 if( qName.equals( "mn" ) ){
    inMn = true; level = 0;
    Attributes att = new AttributesImpl();
    super.startElement(ns, "mn-group", "mn-group", att);
    this.ns = ns;
 } else if( qName.equals( "mo" ) ){
    String cls = attr.getValue( "class" );
    if( (cls != null) && cls.equals("MathClass-punc") ){
       inMn = true; level = 0;
       Attributes att = new AttributesImpl();
       super.startElement(ns, "mn-group", "mn-group", att);
       this.ns = ns;
 }  }
-_-_-

<..consider end of num..>
 if( !qName.equals( "mn" ) ){
   if( qName.equals( "mo" ) ){
      String cls = attr.getValue( "class" );
      if( (cls == null) || !cls.equals("MathClass-punc") ){
         inMn = false;
         super.endElement(ns, "mn-group", "mn-group");
      }
   } else {
      inMn = false;
      super.endElement(ns, "mn-group", "mn-group");
 } }
-_-_-

<..endElement: consider end of num..>
 if( inMn ){
    inMn = false;
    super.endElement(ns, "mn-group", "mn-group");
 }
-_-_-