package tex4ht; import org.w3c.dom.*; public class HtJsml { private static void insertLevelPrefix(Node node, int level){ if( level == 0 ){ return; } if (node.getNodeType() == Node.ELEMENT_NODE) { if( node.getNodeName().equals( "level" ) ){ Node attr = node.getAttributes().getNamedItem("prefix"); if( attr != null ){ String prefix = attr.getNodeValue(); String s = ""; for(int j=0; j= '0') && (ch <= '9') ){ digit[i] = '0'; bool = true; } else if( (ch == '.') || (ch == ',') ){ digit[i] = ch; } else { digit[i] = 'x';} } } } if( bool ){ bool = false; for (int i = 0; i < n; i++) { if( digit[i] == '.' ){ for (; i < n; i++) { if( digit[i] == ',' ){ bool = true; break; } } break; } } if( !bool ){ for (int i = 0; i < n; i++) { if( digit[i] == ',' ){ if( ( ((i+3) >= n) || (digit[i+1] != '0') || (digit[i+2] != '0') || (digit[i+3] != '0') ) || ( ((i+4) < n) && (digit[i+4] == '0') ) || ( (i>3) && (digit[i-4] == '0') ) ){ bool = true; break; } else { i += 3; } } } } if( bool ){ for (int i = 0; i < n; i++) { if( digit[i] == ',' ){ digit[i] = 'x'; } } } bool = false; for (int i = 0; i < n; i++) { if( (digit[i] == 'x') || (digit[i] == ',') ){ bool = false; } else if( digit[i] == '.' ){ if( bool ){ for (int j = 0; j < n; j++) { if( (digit[j] == '.') || (digit[j] == ',') ){ digit[j] = 'x'; } } break; } bool = true; } } if( digit[n-1] == '.' ){ digit[n-1] = 'x'; } } Node parent = node.getParentNode(); Element g = dom.createElement( "mn-group-s" ); Element cur = dom.createElement( "mn-group" ); for(int i=0; i max) { max = d; } } } level += max; if( ndName.equals("msub") || ndName.equals("msup") || ndName.equals("msubsup") ) { return 0; } if (ndName.equals("mfrac")) { if( (clValue != null) && clValue.equals("word-frac") ) { return 0; } if( cont > 0 ){ if ( prevCont == 0 ){ Node child = node.getFirstChild(); if (child.getNodeType() == Node.ELEMENT_NODE) { Node cls = child.getAttributes() .getNamedItem("class"); if (cls != null) { String clsName = cls.getNodeValue(); if ( clsName.equals("begin-end")) { setContinuedNote(child); } } } } Node child = node.getLastChild(); if (child.getNodeType() == Node.ELEMENT_NODE) { Node cls = child.getAttributes() .getNamedItem("class"); if (cls != null) { String clsName = cls.getNodeValue(); if ( clsName.equals("begin-end")) { node.removeChild( child ); } } } level = 0; } else if ( prevCont > 0 ){ Node child = node.getLastChild(); if (child.getNodeType() == Node.ELEMENT_NODE) { Node cls = child.getAttributes() .getNamedItem("class"); if (cls != null) { String clsName = cls.getNodeValue(); if ( clsName.equals("begin-end")) { setContinuedNote(child); } } } level = 0; } else if( level > 0 ){ 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); } } } } } level++; } } return level; } 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") ){ if( !prefix.equals("") ){ 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 ); } } } } if( clName.equals( "mrow-sub" ) ){ prefix += " sub "; } else if( clName.equals( "mrow-super" ) ){ prefix += " super "; } } } } String ndName = node.getNodeName(); if( ndName.equals("msqrt") || ndName.equals("mroot") ){ prefix = ""; } 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); } } } } public static void rootLevel(Node d) { dom = (Document) d; setRootLevel(d.getFirstChild()); } private static int setRootLevel( Node node ){ int level = 0; // String clName = null; if (node.hasChildNodes()) { 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 = setRootLevel(child); if( d > max ){ max = d; } } } level += max; String ndName = node.getNodeName(); if( ndName.equals("msub") || ndName.equals("msup") || ndName.equals("msubsup") ) { return 0; } if( ndName.equals("msqrt") || ndName.equals("mroot") ){ 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-root") || clsName.equals("mid-root") || clsName.equals("end-root") ){ insertLevelPrefix(child, level); } } } } level++; } } return level; } }