summaryrefslogtreecommitdiff
path: root/Build/source/texk/tex4htk/java/OoUtilities.java
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/tex4htk/java/OoUtilities.java')
-rwxr-xr-xBuild/source/texk/tex4htk/java/OoUtilities.java243
1 files changed, 243 insertions, 0 deletions
diff --git a/Build/source/texk/tex4htk/java/OoUtilities.java b/Build/source/texk/tex4htk/java/OoUtilities.java
new file mode 100755
index 00000000000..63fa8195ccb
--- /dev/null
+++ b/Build/source/texk/tex4htk/java/OoUtilities.java
@@ -0,0 +1,243 @@
+package tex4ht;
+/**********************************************************/
+/* OoUtilities.java 2008-02-20-10:22 */
+/* Copyright (C) 2006--2008 Eitan M. Gurari */
+/* */
+/* This work may be distributed and/or modified under the */
+/* conditions of the LaTeX Project Public License, either */
+/* version 1.3 of this license or (at your option) any */
+/* later version. The latest version of this license is */
+/* in */
+/* http://www.latex-project.org/lppl.txt */
+/* and version 1.3 or later is part of all distributions */
+/* of LaTeX version 2003/12/01 or later. */
+/* */
+/* This work has the LPPL maintenance status "maintained".*/
+/* */
+/* This Current Maintainer of this work */
+/* is Eitan M. Gurari. */
+/* */
+/* gurari@cse.ohio-state.edu */
+/* http://www.cse.ohio-state.edu/~gurari */
+/**********************************************************/
+
+
+import org.w3c.dom.*;
+public class OoUtilities {
+ public static void mtable(Node dom) {
+ Node mtr, mtd, d;
+ int cols = 0;
+ Node node = dom.getFirstChild();
+ if (node.hasChildNodes()) {
+ mtr = node.getLastChild();
+ while( mtr != null){
+ if( mtr.getNodeType() == Node.ELEMENT_NODE ){
+ if (mtr.hasChildNodes()) {
+ mtd = mtr.getLastChild();
+ int count = 0;
+ while( mtd != null){
+ if( mtd.getNodeType() == Node.ELEMENT_NODE ){
+ count++;
+ d = mtd.getFirstChild();
+ if( d != null ){
+ boolean remove = true;
+for(Node i=d; i!=null; i=i.getNextSibling() ){
+ if( (i.getNodeType() == Node.ELEMENT_NODE)
+ && !i.getNodeName().equals("math:mspace") ) {
+ remove = false; break;
+} }
+if( remove ){
+ while( d != null ){
+ mtd.removeChild(d);
+ d = mtd.getFirstChild();
+} }
+
+ }
+ if( d != null ){
+ if(
+ (d.getNodeType() == Node.TEXT_NODE)
+ && d.getNodeValue().trim().equals("")
+){
+ d.getParentNode().removeChild(d);
+ d = null;
+}
+
+ } }
+ d = mtd;
+ mtd = mtd.getPreviousSibling();
+ if(
+ (d.getNodeType() == Node.TEXT_NODE)
+ && d.getNodeValue().trim().equals("")
+){
+ d.getParentNode().removeChild(d);
+ d = null;
+}
+
+ if( (d != null)
+ && (d.getNodeType() == Node.ELEMENT_NODE) ){
+ if( (d.getNextSibling()==null)
+ && (d.getFirstChild()==null) ){
+ d.getParentNode().removeChild(d);
+ d = null;
+}
+
+ if( d == null ){ count--; }
+ } }
+ if( count > cols ){ cols = count; }
+ } }
+ d = mtr;
+ mtr = mtr.getPreviousSibling();
+ if(
+ (d.getNodeType() == Node.TEXT_NODE)
+ && d.getNodeValue().trim().equals("")
+){
+ d.getParentNode().removeChild(d);
+ d = null;
+}
+
+ if( d != null ){
+ if( (d.getNextSibling()==null)
+ && (d.getFirstChild()==null) ){
+ d.getParentNode().removeChild(d);
+ d = null;
+}
+
+} } }
+
+ if (node.hasChildNodes()) {
+ mtr = node.getFirstChild();
+ while( mtr != null){
+ if( mtr.getNodeType() == Node.ELEMENT_NODE ){
+ int count = 0;
+ if (mtr.hasChildNodes()) {
+ mtd = mtr.getFirstChild();
+ while( mtd != null){
+ if( mtd.getNodeType() == Node.ELEMENT_NODE ){
+ mtr.insertBefore( ((Document) dom).createTextNode("\n"), mtd );
+
+ count++;
+ }
+ mtd = mtd.getNextSibling();
+ }
+ }
+ if( count < cols ){
+ for(int i = count; i < cols; i++){
+ mtr.appendChild( ((Document) dom).createElement("math:mtd") );
+}
+
+ } }
+ mtr = mtr.getNextSibling();
+} }
+
+}
+
+ public static void table(Node dom) {
+ Node mtr, mtd, d;
+// int cols = 0;
+ Node node = dom.getFirstChild();
+
+ mtr = node.getLastChild();
+while( (mtr != null)
+ && (mtr.getNodeType() == Node.TEXT_NODE)
+ && mtr.getNodeValue().trim().equals("") ){
+ node.removeChild(mtr);
+ mtr = node.getLastChild();
+}
+
+ if( (mtr != null) && (mtr.getPreviousSibling() != null) ){
+ boolean bool = false;
+if( mtr.getNodeName().equals("table:table-row")
+ && mtr.hasAttributes()
+){
+ NamedNodeMap attributes = mtr.getAttributes();
+ Node styleAttr = attributes.getNamedItem( "table:style-name" );
+ String style = (styleAttr==null)? null
+ : styleAttr.getNodeValue();
+ if( (style != null)
+ && ( style.equals("hline-row")
+ || style.equals("cline-row")
+ )
+ ){
+ bool = true;
+} }
+
+ if( !bool ){
+ mtd = mtr.getFirstChild();
+while( mtd != null){
+ d = mtd.getNextSibling();
+ if( justSpace(mtd) ){ mtr.removeChild(mtd); }
+ mtd = d;
+}
+
+
+ mtd = mtr.getFirstChild();
+ if( (mtd != null)
+ && (mtd.getNextSibling() == null)
+ && justSpace(mtd)
+ ){
+ node.removeChild(mtr);
+ } } }
+ int n = 0;
+mtr = node.getFirstChild();
+while( mtr != null ){
+ if(
+ (mtr.getNodeType() == Node.ELEMENT_NODE)
+ &&
+ mtr.getNodeName().equals("table:table-row")
+ ){
+ int m = 0;
+mtd = mtr.getFirstChild();
+while( mtd != null ){
+ if(
+ (mtd.getNodeType() == Node.ELEMENT_NODE)
+ &&
+ mtd.getNodeName().equals("table:table-cell")
+ ){
+ m++;
+ }
+ mtd = mtd.getNextSibling();
+}
+
+ if( m > n ){ n = m; }
+ }
+ mtr = mtr.getNextSibling();
+}
+
+ mtr = node.getFirstChild();
+while( mtr != null ){
+ d = mtr.getNextSibling();
+ if(
+ (mtr.getNodeType() == Node.ELEMENT_NODE)
+ &&
+ mtr.getNodeName().equals("table:table-column")
+ ){
+ n--;
+ if( n < 0 ){
+ mtr.getParentNode().removeChild(mtr);
+ } }
+ mtr = d;
+}
+
+}
+
+ static boolean justSpace(Node node){
+ if( node == null ){ return true; }
+ if( node.getNodeType() == Node.TEXT_NODE ){
+ if( !node.getNodeValue().trim().equals("") ){ return false; }
+ } else {
+ if( node.getNodeType() == Node.ELEMENT_NODE ){
+ String nm = node.getNodeName();
+ if(
+ !nm.equals("table:table-cell")
+ && !nm.equals("text:p")
+ ){
+ return false;
+ } }
+ }
+ if(!justSpace( node.getNextSibling() )){ return false; }
+ if(!justSpace( node.getFirstChild() )){ return false; }
+ return true;
+}
+
+}
+