From 8aa012856f348eb5138de60634712b7460420ad6 Mon Sep 17 00:00:00 2001 From: Kelly Campbell Date: Tue, 16 Jan 2001 08:00:50 +0000 Subject: [PATCH] Packaged build tasks into lib/buildtools.jar Added buildtools.xml for building the build tools jar file. Moved source for ant tasks into src/org/apache/fop/tools/anttasks Set up dual support for Xalan 1 native and Xalan 2 JAXP1.1 transform interfaces. git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@193970 13f79535-47bb-0310-9956-ffa450edef68 --- build.bat | 2 +- build.sh | 2 +- build.xml | 42 ++- buildtools.xml | 75 +++++ docs/bugtests/build.xml | 4 +- docs/bugtests/runtests.bat | 2 +- docs/bugtests/runtests.sh | 2 +- docs/examples/build.xml | 4 +- docs/examples/results.html | 2 +- docs/examples/runtests.bat | 2 +- docs/examples/runtests.sh | 2 +- docs/examples/svg/build.xml | 4 +- docs/examples/svg/makedoc.bat | 2 +- docs/examples/svg/makedoc.sh | 2 +- docs/xml-docs/build.xml | 4 +- docs/xml-docs/makedoc.bat | 2 +- docs/xml-docs/makedoc.sh | 2 +- lib/buildtools.jar | Bin 0 -> 32598 bytes .../fop/tools/anttasks/TraxTransform.class | Bin 2552 -> 0 bytes .../fop/tools/anttasks/Xalan1Transform.class | Bin 2733 -> 0 bytes lib/org/apache/fop/tools/anttasks/Xslt.class | Bin 4692 -> 0 bytes src/org/apache/fop/apps/XalanCommandLine.java | 26 +- .../apache/fop/tools/anttasks/Compare.java | 200 ++++++++++++ .../fop/tools/anttasks/CompileXMLFiles.java | 296 ++++++++++++++++++ src/org/apache/fop/tools/anttasks/Fop.java | 212 +++++++++++++ .../tools/anttasks/SerializeHyphPattern.java | 199 ++++++++++++ .../org/apache/fop/tools/anttasks/Xslt.java | 16 +- .../apache/fop/tools/xslt}/TraxTransform.java | 45 ++- .../apache/fop/tools/xslt/XSLTransform.java | 173 ++++++++++ .../fop/tools/xslt}/Xalan1Transform.java | 26 +- 30 files changed, 1285 insertions(+), 63 deletions(-) create mode 100644 buildtools.xml create mode 100644 lib/buildtools.jar delete mode 100644 lib/org/apache/fop/tools/anttasks/TraxTransform.class delete mode 100644 lib/org/apache/fop/tools/anttasks/Xalan1Transform.class delete mode 100644 lib/org/apache/fop/tools/anttasks/Xslt.class create mode 100644 src/org/apache/fop/tools/anttasks/Compare.java create mode 100644 src/org/apache/fop/tools/anttasks/CompileXMLFiles.java create mode 100644 src/org/apache/fop/tools/anttasks/Fop.java create mode 100644 src/org/apache/fop/tools/anttasks/SerializeHyphPattern.java rename {lib => src}/org/apache/fop/tools/anttasks/Xslt.java (98%) rename {lib/org/apache/fop/tools/anttasks => src/org/apache/fop/tools/xslt}/TraxTransform.java (82%) create mode 100644 src/org/apache/fop/tools/xslt/XSLTransform.java rename {lib/org/apache/fop/tools/anttasks => src/org/apache/fop/tools/xslt}/Xalan1Transform.java (91%) diff --git a/build.bat b/build.bat index 24c5ff862..dc3c46a8e 100755 --- a/build.bat +++ b/build.bat @@ -6,7 +6,7 @@ echo ---------------- if "%JAVA_HOME%" == "" goto error -set LOCALCLASSPATH=%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\classes.zip;lib\ant.jar;lib\w3c.jar;lib +set LOCALCLASSPATH=%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\classes.zip;lib\ant.jar;lib\w3c.jar;lib\buildtools.jar set ANT_HOME=.\lib echo Building with classpath %LOCALCLASSPATH% diff --git a/build.sh b/build.sh index 56901fbb5..5b6dc2f80 100755 --- a/build.sh +++ b/build.sh @@ -13,7 +13,7 @@ if [ "$JAVA_HOME" = "" ] ; then exit 1 fi -LOCALCLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/classes.zip:./lib/ant.jar:./lib/w3c.jar:./lib +LOCALCLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/classes.zip:./lib/ant.jar:./lib/w3c.jar:./lib/buildtools.jar ANT_HOME=./lib echo Building with classpath $CLASSPATH:$LOCALCLASSPATH diff --git a/build.xml b/build.xml index 6141cf4b0..a345fb5ea 100644 --- a/build.xml +++ b/build.xml @@ -121,8 +121,8 @@ Sometimes ant gives out this warnings, but the build is finished without any pro - - + + @@ -192,17 +192,28 @@ Sometimes ant gives out this warnings, but the build is finished without any pro + + + + + + + + - - + + + + + @@ -290,14 +301,29 @@ Sometimes ant gives out this warnings, but the build is finished without any pro + + + + + + + + + + + - + + excludes="**/Makefile*, **/package.html, **/XT*,**/PDFOutputHandler.java,**/${jimi},**/${jai},**/${pfmreader}"/> @@ -422,7 +448,7 @@ Sometimes ant gives out this warnings, but the build is finished without any pro - + @@ -463,7 +489,7 @@ Sometimes ant gives out this warnings, but the build is finished without any pro - + diff --git a/buildtools.xml b/buildtools.xml new file mode 100644 index 000000000..aa1c96d3c --- /dev/null +++ b/buildtools.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/bugtests/build.xml b/docs/bugtests/build.xml index 806569520..7980daa92 100644 --- a/docs/bugtests/build.xml +++ b/docs/bugtests/build.xml @@ -13,8 +13,8 @@ - - + + diff --git a/docs/bugtests/runtests.bat b/docs/bugtests/runtests.bat index ecd04d8dc..8fe5ea89d 100755 --- a/docs/bugtests/runtests.bat +++ b/docs/bugtests/runtests.bat @@ -6,7 +6,7 @@ echo ---------------- if "%JAVA_HOME%" == "" goto error -set LOCALCLASSPATH=%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\classes.zip;..\..\lib\ant.jar;..\..\lib;..\..\lib\w3c.jar;..\..\build\fop.jar +set LOCALCLASSPATH=%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\classes.zip;..\..\lib\ant.jar;..\..\lib\buildtools.jar;..\..\lib\w3c.jar;..\..\build\fop.jar set ANT_HOME=..\..\lib echo Starting Tests ... diff --git a/docs/bugtests/runtests.sh b/docs/bugtests/runtests.sh index 34a2e403c..9e72861f2 100755 --- a/docs/bugtests/runtests.sh +++ b/docs/bugtests/runtests.sh @@ -13,7 +13,7 @@ if [ "$JAVA_HOME" = "" ] ; then exit 1 fi -LOCALCLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/classes.zip:../../lib/ant.jar:../../lib:../../build/fop.jar:../../lib/w3c.jar +LOCALCLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/classes.zip:../../lib/ant.jar:../../lib/buildtools.jar:../../build/fop.jar:../../lib/w3c.jar ANT_HOME=../../lib echo Building with classpath $CLASSPATH:$LOCALCLASSPATH diff --git a/docs/examples/build.xml b/docs/examples/build.xml index 42bd51d87..016227214 100644 --- a/docs/examples/build.xml +++ b/docs/examples/build.xml @@ -13,8 +13,8 @@ - - + + diff --git a/docs/examples/results.html b/docs/examples/results.html index b518c3d38..3fefc0e72 100644 --- a/docs/examples/results.html +++ b/docs/examples/results.html @@ -1,6 +1,6 @@ Test Results

Compare Results
-created 02.08.2000 23:33:08

+created Jan 16, 2001 1:40:19 AM
reference filetest fileidentical?
diff --git a/docs/examples/runtests.bat b/docs/examples/runtests.bat index ecd04d8dc..8fe5ea89d 100755 --- a/docs/examples/runtests.bat +++ b/docs/examples/runtests.bat @@ -6,7 +6,7 @@ echo ---------------- if "%JAVA_HOME%" == "" goto error -set LOCALCLASSPATH=%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\classes.zip;..\..\lib\ant.jar;..\..\lib;..\..\lib\w3c.jar;..\..\build\fop.jar +set LOCALCLASSPATH=%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\classes.zip;..\..\lib\ant.jar;..\..\lib\buildtools.jar;..\..\lib\w3c.jar;..\..\build\fop.jar set ANT_HOME=..\..\lib echo Starting Tests ... diff --git a/docs/examples/runtests.sh b/docs/examples/runtests.sh index 34a2e403c..9e72861f2 100755 --- a/docs/examples/runtests.sh +++ b/docs/examples/runtests.sh @@ -13,7 +13,7 @@ if [ "$JAVA_HOME" = "" ] ; then exit 1 fi -LOCALCLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/classes.zip:../../lib/ant.jar:../../lib:../../build/fop.jar:../../lib/w3c.jar +LOCALCLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/classes.zip:../../lib/ant.jar:../../lib/buildtools.jar:../../build/fop.jar:../../lib/w3c.jar ANT_HOME=../../lib echo Building with classpath $CLASSPATH:$LOCALCLASSPATH diff --git a/docs/examples/svg/build.xml b/docs/examples/svg/build.xml index 8aa448e78..9578538be 100644 --- a/docs/examples/svg/build.xml +++ b/docs/examples/svg/build.xml @@ -73,8 +73,8 @@ These are the meaningful targets for this build file: - - + + diff --git a/docs/examples/svg/makedoc.bat b/docs/examples/svg/makedoc.bat index ce6d65d34..c699a5ed2 100755 --- a/docs/examples/svg/makedoc.bat +++ b/docs/examples/svg/makedoc.bat @@ -5,7 +5,7 @@ echo ---------------- if "%JAVA_HOME%" == "" goto error -set LOCALCLASSPATH=%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\classes.zip;..\..\..\lib\ant.jar;..\..\..\lib\xml.jar;..\..\..\lib;..\..\..\build\fop.jar;..\..\..\lib\w3c.jar +set LOCALCLASSPATH=%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\classes.zip;..\..\..\lib\ant.jar;..\..\..\lib\xml.jar;..\..\..\lib\buildtools.jar;..\..\..\build\fop.jar;..\..\..\lib\w3c.jar set ANT_HOME=..\..\..\lib diff --git a/docs/examples/svg/makedoc.sh b/docs/examples/svg/makedoc.sh index 619733d31..dcf1fd303 100755 --- a/docs/examples/svg/makedoc.sh +++ b/docs/examples/svg/makedoc.sh @@ -13,7 +13,7 @@ if [ "$JAVA_HOME" = "" ] ; then exit 1 fi -LOCALCLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/classes.zip:../../../lib/ant.jar:../../../lib/w3c.jar:../../../lib:../../../build/fop.jar +LOCALCLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/classes.zip:../../../lib/ant.jar:../../../lib/w3c.jar:../../../lib/buildtools.jar:../../../build/fop.jar ANT_HOME=../../../lib echo Building with classpath $CLASSPATH:$LOCALCLASSPATH diff --git a/docs/xml-docs/build.xml b/docs/xml-docs/build.xml index 8be735c05..b66a9310f 100644 --- a/docs/xml-docs/build.xml +++ b/docs/xml-docs/build.xml @@ -27,8 +27,8 @@ These are the meaningful targets for this build file: - - + + diff --git a/docs/xml-docs/makedoc.bat b/docs/xml-docs/makedoc.bat index eac7a1ac3..45b36ba72 100755 --- a/docs/xml-docs/makedoc.bat +++ b/docs/xml-docs/makedoc.bat @@ -6,7 +6,7 @@ echo ---------------- if "%JAVA_HOME%" == "" goto error -set LOCALCLASSPATH=%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\classes.zip;..\..\lib\ant.jar;..\..\lib\xml.jar;..\..\lib\w3c.jar;..\..\lib;..\..\build\fop.jar;..\..\lib\stylebook.jar +set LOCALCLASSPATH=%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\classes.zip;..\..\lib\ant.jar;..\..\lib\xml.jar;..\..\lib\w3c.jar;..\..\lib\buildtools.jar;..\..\build\fop.jar;..\..\lib\stylebook.jar set ANT_HOME=.\lib diff --git a/docs/xml-docs/makedoc.sh b/docs/xml-docs/makedoc.sh index 92b813171..e3859e399 100755 --- a/docs/xml-docs/makedoc.sh +++ b/docs/xml-docs/makedoc.sh @@ -13,7 +13,7 @@ if [ "$JAVA_HOME" = "" ] ; then exit 1 fi -LOCALCLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/classes.zip:../../lib/ant.jar:../../lib/xml.jar:../../lib/w3c.jar:../../lib:../../build/fop.jar:../../lib\stylebook.jar +LOCALCLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/classes.zip:../../lib/ant.jar:../../lib/xml.jar:../../lib/w3c.jar:../../lib/buildtools.jar:../../build/fop.jar:../../lib\stylebook.jar ANT_HOME=../../lib echo Building with classpath $CLASSPATH:$LOCALCLASSPATH diff --git a/lib/buildtools.jar b/lib/buildtools.jar new file mode 100644 index 0000000000000000000000000000000000000000..5169b943a6973556d57841ccec1600c58a823240 GIT binary patch literal 32598 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 G|Nb8pHQZ4E literal 0 HcmV?d00001 diff --git a/lib/org/apache/fop/tools/anttasks/TraxTransform.class b/lib/org/apache/fop/tools/anttasks/TraxTransform.class deleted file mode 100644 index 0f5278c78373356fb9ebbfd8a277b27615b5e072..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2552 zcmb7GZBrXn6n-vm8#YU+DPU>ALQx1IbX9Dngtl5*ED~NU6bf4EvTTxtWH;{K6!@T> zah!3+8GnGkfUj+x2`Dq_H)s4&j_2+sVIe6+KHPgb_uS{4^PHFLKmY#z2kJ45XEORQ z(u}M4NJbB?i{*xdkHcuhsDzs`B#bp9f$5T6Eg1MzE~y& zz-JO3$hd+j37^a8z?e+<(-M+0Ix!Q*EarsnybymO;~^F#EJ}DJ-i}CElCaEh{;A7% zvxb{73_hXh8H1rcxv4$V)B-oN>I2QqaBV$nBp8~;P0QrB8S0~hOAHMY_6BLUCQZwj zE#%e>XHh6JoJ$*g(a|h7Wji^;VYnXk5wn_=Ru{NqTIs}~C)!bWa#@v^mDRvAGT27dQGEljLQc&gxQXbfGkQ~o5ZE6}mV(BV}}Ah&l5sgy{2 zgwnUuquaSW#ndC4)>w~%4HybiNK42lFtMp%3t0s@SX3vq{H(BGI1{#&GSdY|^~sc3$PSopn{s;#_mLT+s|iH9(!}VR$^xt#2ASX9(-I#WmA% zr;T0e+hB|MDv7~WYFFwoM!)CZ`e)xV^CJawA6$ z*#&Z_G-ga&ou`Sw{X(R!_qjSQW{~niDN9w-q~-I5wZRY%MpU*Kh{zZD)kwG@Zu=63 zwo*iDplV5@{|yP9)O2n;#B`V_nzCH3Svoaq?9Kd?UXl$(uv_j=Z#301S{f~{;l2Ev z;Og^&%F!Sbr9=jZDAz)@h{m_a>jKyGElRowhY}f_ma{bFy;*hX^^OuFRAYX6rzkUb ze1A^PrPHG-{|Fck#dW2Yv13)4IMs$1>Ph>R!HZt{N$dl_Ad87grzSenfTcA`|8>*O zXm5<|gT3?=2TMx81e(PlD5?HQKkyB7XTL&Stcdzw(C(ia{z7AN=r=Smyf}okLQtXP zD>O&sBEqyELRr~IOXOS;t@N<9i1Yr1r*MF`X5vFdL}mrra1j@lhkdLhN!!^A&%X>Z zXrq&G?gmtA%Y-9Pu2rLSim)%80mUVhZ4X5)p*$x~ z8VNr^9A0Ml8xi7Utf8}k;_sT>LyIpzK= diff --git a/lib/org/apache/fop/tools/anttasks/Xalan1Transform.class b/lib/org/apache/fop/tools/anttasks/Xalan1Transform.class deleted file mode 100644 index d7e693e8b1b95995c5b3a0c7a0bfda35a1d39fd3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2733 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 diff --git a/src/org/apache/fop/apps/XalanCommandLine.java b/src/org/apache/fop/apps/XalanCommandLine.java index a126e305c..e413a9229 100644 --- a/src/org/apache/fop/apps/XalanCommandLine.java +++ b/src/org/apache/fop/apps/XalanCommandLine.java @@ -63,17 +63,20 @@ import org.xml.sax.SAXParseException; import java.io.*; import java.net.URL; +/* // Xalan import org.apache.xalan.xpath.xml.XMLParserLiaison; import org.apache.xalan.xslt.XSLTInputSource; import org.apache.xalan.xslt.XSLTProcessor; import org.apache.xalan.xslt.XSLTProcessorFactory; import org.apache.xalan.xslt.XSLTResultTarget; +*/ // FOP import org.apache.fop.messaging.MessageHandler; import org.apache.fop.configuration.ConfigurationReader; import org.apache.fop.configuration.Configuration; +import org.apache.fop.tools.xslt.XSLTransform; /** * mainline class. @@ -261,24 +264,27 @@ public class XalanCommandLine { } // Use XSLTProcessorFactory to instantiate an XSLTProcessor. - XSLTProcessor processor = XSLTProcessorFactory.getProcessor(); + // XSLTProcessor processor = XSLTProcessorFactory.getProcessor(); // Create the 3 objects the XSLTProcessor needs to perform the transformation. // Fix up the args... - XMLParserLiaison xmlPL = processor.getXMLProcessorLiaison(); - URL urlTmp = xmlPL.getURLFromString(foFile, null); - MessageHandler.errorln("xml: " + urlTmp); - XSLTInputSource xmlSource = + // XMLParserLiaison xmlPL = processor.getXMLProcessorLiaison(); + // URL urlTmp = xmlPL.getURLFromString(foFile, null); + // MessageHandler.errorln("xml: " + urlTmp); + /* XSLTInputSource xmlSource = new XSLTInputSource (urlTmp.toString()); - urlTmp = xmlPL.getURLFromString(xsltFile, null); - MessageHandler.errorln("xslt: " + urlTmp); - XSLTInputSource xslSheet = + */ + // urlTmp = xmlPL.getURLFromString(xsltFile, null); + // MessageHandler.errorln("xslt: " + urlTmp); + /* XSLTInputSource xslSheet = new XSLTInputSource (urlTmp.toString()); XSLTResultTarget xmlResult = new XSLTResultTarget (writer); - + */ // Perform the transformation. - processor.process(xmlSource, xslSheet, xmlResult); + // processor.process(xmlSource, xslSheet, xmlResult); + + XSLTransform.transform(foFile, xsltFile, writer); if (usefile) { reader = new FileReader(pdfFile + ".tmp"); diff --git a/src/org/apache/fop/tools/anttasks/Compare.java b/src/org/apache/fop/tools/anttasks/Compare.java new file mode 100644 index 000000000..effc7fb88 --- /dev/null +++ b/src/org/apache/fop/tools/anttasks/Compare.java @@ -0,0 +1,200 @@ +/* + * The Apache Software License, Version 1.1 + * + * Copyright (c) 1999 The Apache Software Foundation. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, if + * any, must include the following acknowlegement: + * "This product includes software developed by the + * Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowlegement may appear in the software itself, + * if and wherever such third-party acknowlegements normally appear. + * + * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software + * Foundation" must not be used to endorse or promote products derived + * from this software without prior written permission. For written + * permission, please contact apache@apache.org. + * + * 5. Products derived from this software may not be called "Apache" + * nor may "Apache" appear in their names without prior written + * permission of the Apache Group. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * . + */ +package org.apache.fop.tools.anttasks; + + +import java.util.*; +import java.io.*; +import org.apache.tools.ant.Task; +import org.apache.tools.ant.BuildException; +import java.text.DateFormat; + + /** This class is an extension of Ant, a script utility from + * jakarta.apache.org. + * It provides methods to compare two files + */ + +public class Compare { + private String referenceDirectory, testDirectory; + private String [] filenameList; + private String filenames; + private static boolean IDENTICAL_FILES = true; + private static boolean NOTIDENTICAL_FILES = false; + private BufferedInputStream oldfileInput; + private BufferedInputStream newfileInput; + + //sets directory for test files + public void setTestDirectory(String testDirectory) { + if (!(testDirectory.endsWith("/") | testDirectory.endsWith("\\"))) { + testDirectory += File.separator; + } + this.testDirectory = testDirectory; + } + + //sets directory for reference files + public void setReferenceDirectory(String referenceDirectory) { + if (!(referenceDirectory.endsWith("/") | referenceDirectory.endsWith("\\"))) { + referenceDirectory += File.separator; + } + this.referenceDirectory = referenceDirectory; + } + + public void setFilenames (String filenames) { + StringTokenizer tokens = new StringTokenizer(filenames,","); + Vector filenameListTmp = new Vector(20); + while (tokens.hasMoreTokens()) { + filenameListTmp.addElement(tokens.nextToken()); + } + filenameList = new String [filenameListTmp.size()] ; + filenameListTmp.copyInto((String[]) filenameList); + } + + private boolean compareBytes (File oldFile, File newFile) { + try { + oldfileInput = new BufferedInputStream(new FileInputStream(oldFile)); + newfileInput = new BufferedInputStream(new FileInputStream(newFile)); + int charactO = 0; + int charactN = 0; + boolean identical = true; + + while (identical & (charactO != -1)) { + if (charactO == charactN) { + charactO = oldfileInput.read(); + charactN = newfileInput.read(); + } else { + return NOTIDENTICAL_FILES; + } + } + return IDENTICAL_FILES; + } catch (IOException io) { + System.err.println("Task Compare - Error: \n" + io.toString()); + } + return NOTIDENTICAL_FILES; + } + + private boolean compareFileSize(File oldFile, File newFile) { + if (oldFile.length() != newFile.length()) { + return NOTIDENTICAL_FILES; + } else { + return IDENTICAL_FILES; + } + } //end: compareBytes + + private boolean filesExist (File oldFile, File newFile) { + if (!oldFile.exists()) { + System.err.println("Task Compare - ERROR: File " + + referenceDirectory + oldFile.getName() + + " doesn't exist!"); + return false; + } else if (!newFile.exists()) { + System.err.println("Task Compare - ERROR: File " + + testDirectory + newFile.getName() + " doesn't exist!"); + return false; + } else { + return true; + } + } + + public void writeHeader (PrintWriter results) { + String dateTime = DateFormat.getDateTimeInstance(DateFormat.MEDIUM,DateFormat.MEDIUM).format(new Date()); + results.println("Test Results\n"); + results.println("

Compare Results
"); + results.println("created " + dateTime + "

"); + results.println("" + + ""); + + + } + + //main method of task compare + public void execute () throws BuildException { + boolean identical = false; + File oldFile; + File newFile; + try { + PrintWriter results = new PrintWriter (new FileWriter("results.html"),true); + this.writeHeader(results); + for (int i = 0; i < filenameList.length; i++) { + oldFile = new File (referenceDirectory + filenameList[i]); + newFile = new File (testDirectory + filenameList[i]); + if (filesExist(oldFile, newFile)) { + identical = compareFileSize(oldFile, newFile); + if (identical) { + identical = compareBytes(oldFile,newFile); + } + if (!identical) { + System.out.println("Task Compare: \nFiles " + referenceDirectory + + oldFile.getName()+ " - " + testDirectory + + newFile.getName() + " are *not* identical."); + results.println(""); + } else { + results.println(""); + } + } + } + results.println("
reference filetest fileidentical?
" + + oldFile.getName() + " " + + newFile.getName() +"" + + " No
" + + oldFile.getName() + " " + + newFile.getName() + "" + + " Yes
"); + } catch (IOException ioe) { + System.err.println("ERROR: " + ioe); + } + } //end: execute() +} + diff --git a/src/org/apache/fop/tools/anttasks/CompileXMLFiles.java b/src/org/apache/fop/tools/anttasks/CompileXMLFiles.java new file mode 100644 index 000000000..0a9ab2af5 --- /dev/null +++ b/src/org/apache/fop/tools/anttasks/CompileXMLFiles.java @@ -0,0 +1,296 @@ +/* + * The Apache Software License, Version 1.1 + * + * Copyright (c) 1999 The Apache Software Foundation. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, if + * any, must include the following acknowlegement: + * "This product includes software developed by the + * Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowlegement may appear in the software itself, + * if and wherever such third-party acknowlegements normally appear. + * + * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software + * Foundation" must not be used to endorse or promote products derived + * from this software without prior written permission. For written + * permission, please contact apache@apache.org. + * + * 5. Products derived from this software may not be called "Apache" + * nor may "Apache" appear in their names without prior written + * permission of the Apache Group. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * . + * + * + */ + +package org.apache.fop.tools.anttasks; + + /** This class is an extension of Ant, a script utility from + jakarta.apache.org. + It takes a couple of xml files conforming to the xml-site dtd and + writes them all into one xml file, deleting any reference to + the proprietary protocol sbk. The configFile determines what files + are read in what sequence. + */ +// Ant +import org.apache.tools.ant.Task; +import org.apache.tools.ant.BuildException; + + +// SAX +import org.xml.sax.Parser; +import org.xml.sax.InputSource; +import org.xml.sax.SAXException; +import org.xml.sax.SAXParseException; +import org.xml.sax.Locator; +import org.xml.sax.AttributeList; + +// Java +import java.io.*; +import java.util.*; +import java.net.URL; + +public class CompileXMLFiles extends Task + implements org.xml.sax.EntityResolver, + org.xml.sax.DTDHandler, + org.xml.sax.DocumentHandler, + org.xml.sax.ErrorHandler { + private String configFile, outFile; + private String [] filenameList; + private String filenames; + private Vector files = new Vector(); + + //sets name of configuration file, which must + //be an xml file conforming to the book.dtd used by xml-site + public void setConfigFile(String configFile) { + this.configFile = configFile; + } + + public void setOutFile(String outFile) { + this.outFile = outFile; + } + + + //main method of this task + public void execute () throws BuildException { + boolean errors = false; + + if (!(new File(configFile).exists())) { + errors = true; + System.err.println("Task CompileXMLFiles - ERROR: config file " + configFile + " is missing."); + } + + Parser parser = createParser(); + + if (parser == null) { + System.err.println("Task CompileXMLFiles - ERROR: Unable to create SAX parser"); + errors = true; + } + parser.setDocumentHandler(this); + try { + parser.parse(CompileXMLFiles.fileInputSource(configFile)); + } catch (SAXException e) { + System.out.println(e); + } catch (IOException ioe) { + System.out.println(ioe); + } + } //end: execute() + + + /*the following methods belong to the sax parser and implement the Document Handler*/ + public InputSource resolveEntity (String publicId, String systemId) + throws SAXException + { + return null; + } + + public void notationDecl (String name, String publicId, String systemId) + { + // no op + } + + public void unparsedEntityDecl (String name, String publicId, + String systemId, String notationName) + { + // no op + } + + public void setDocumentLocator (Locator locator) + { + // no op + } + + public void startDocument () + throws SAXException + { + // no op + } + + /* After the cnfiguration file has been parsed all files which + have been collected in the ArrayList files are concatinated + and written to a new (temporary) file */ + public void endDocument () + throws SAXException + { + String line, filename; + BufferedReader in; + Enumeration iterator = files.elements(); + try { + BufferedWriter out = + new BufferedWriter (new FileWriter("compileXMLFiles-tmp.xml")); + out.write("\n" + + "\n" + + "]>\n"); + while (iterator.hasMoreElements()) { + filename = (String) iterator.nextElement(); + in = new BufferedReader(new FileReader(filename)); + while ((line = in.readLine()) != null) { + //kill the lines pointing to the sbk protocol and the xml declaration + if (line.indexOf(""); + out.close(); + } catch (Exception e) { + System.out.println(e); + } + + } + + public void startElement (String name, AttributeList atts) + throws SAXException { + String id, label, source; + if (name.equals("document") || name.equals("entry")) { + source = atts.getValue("source"); + files.addElement(source); + } + } + public void endElement (String name) + throws SAXException + { + // no op + } + + public void characters (char ch[], int start, int length) + throws SAXException + { + // no op + } + + public void ignorableWhitespace (char ch[], int start, int length) + throws SAXException + { + // no op + } + public void processingInstruction (String target, String data) + throws SAXException + { + // no op + } + + public void warning (SAXParseException e) + throws SAXException + { + // no op + } + public void error (SAXParseException e) + throws SAXException + { + // no op + } + + public void fatalError (SAXParseException e) + throws SAXException + { + throw e; + } + + /* ------------------------*/ + /** + * creates a SAX parser, using the value of org.xml.sax.parser + * defaulting to org.apache.xerces.parsers.SAXParser + * + * @return the created SAX parser + */ + static Parser createParser() { + String parserClassName = System.getProperty("org.xml.sax.parser"); + if (parserClassName == null) { + parserClassName = "org.apache.xerces.parsers.SAXParser"; + } + System.err.println("using SAX parser " + parserClassName); + + try { + return (Parser) Class.forName(parserClassName).newInstance(); + } catch (ClassNotFoundException e) { + System.err.println("Could not find " + parserClassName); + } catch (InstantiationException e) { + System.err.println("Could not instantiate " + parserClassName); + } catch (IllegalAccessException e) { + System.err.println("Could not access " + parserClassName); + } catch (ClassCastException e) { + System.err.println(parserClassName + " is not a SAX driver"); + } + return null; + } + + /** + * create an InputSource from a file name + * + * @param filename the name of the file + * @return the InputSource created + */ + protected static InputSource fileInputSource(String filename) { + + /* this code adapted from James Clark's in XT */ + File file = new File(filename); + String path = file.getAbsolutePath(); + String fSep = System.getProperty("file.separator"); + if (fSep != null && fSep.length() == 1) + path = path.replace(fSep.charAt(0), '/'); + if (path.length() > 0 && path.charAt(0) != '/') + path = '/' + path; + try { + return new InputSource(new URL("file", null, path).toString()); + } catch (java.net.MalformedURLException e) { + throw new Error("unexpected MalformedURLException"); + } + } + +} + diff --git a/src/org/apache/fop/tools/anttasks/Fop.java b/src/org/apache/fop/tools/anttasks/Fop.java new file mode 100644 index 000000000..25c3946a7 --- /dev/null +++ b/src/org/apache/fop/tools/anttasks/Fop.java @@ -0,0 +1,212 @@ +/* + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.tools.anttasks; + +// Ant +import org.apache.tools.ant.Task; +import org.apache.tools.ant.BuildException; + + +// SAX +import org.xml.sax.XMLReader; +import org.xml.sax.InputSource; +import org.xml.sax.SAXException; +import org.xml.sax.SAXParseException; + +// Java +import java.io.*; +import java.net.URL; + +// FOP +import org.apache.fop.messaging.MessageHandler; +import org.apache.fop.apps.*; + +/** + * extension to Ant which allows usage of Fop in the + * same way as org.apache.fop.apps.CommandLine (the code is adapted from this class) + * Gets input and output filenames from the script file
+ * needed libraries: Sax 2 parser (defaults to Xerces-J), Jimi for images, w3c.jar + * containing org.w3c.dom.svg etc. for svg support + */ + +public class Fop { + String fofile, pdffile; + + /** + * sets the name of the input file + * @param String name of the input fo file + */ + public void setFofile(String fofile) { + this.fofile = fofile; + } + + /** + * sets the name of the output file + * @param String name of the output pdf file + */ + public void setPdffile(String pdffile) { + this.pdffile = pdffile; + } + + + /** + * creates a SAX parser, using the value of org.xml.sax.parser + * defaulting to org.apache.xerces.parsers.SAXParser + * + * @return the created SAX parser + */ + static XMLReader createParser() { + String parserClassName = System.getProperty("org.xml.sax.parser"); + if (parserClassName == null) { + parserClassName = "org.apache.xerces.parsers.SAXParser"; + } + MessageHandler.logln("using SAX parser " + parserClassName); + + try { + return (XMLReader) Class.forName( + parserClassName).newInstance(); + } catch (ClassNotFoundException e) { + MessageHandler.errorln("Could not find " + parserClassName); + } + catch (InstantiationException e) { + MessageHandler.errorln("Could not instantiate " + + parserClassName); + } + catch (IllegalAccessException e) { + MessageHandler.errorln("Could not access " + parserClassName); + } + catch (ClassCastException e) { + MessageHandler.errorln(parserClassName + " is not a SAX driver"); + } + return null; + } // end: createParser + + /** + * create an InputSource from a file name + * + * @param filename the name of the file + * @return the InputSource created + */ + protected static InputSource fileInputSource(String filename) { + + /* this code adapted from James Clark's in XT */ + File file = new File(filename); + String path = file.getAbsolutePath(); + String fSep = System.getProperty("file.separator"); + if (fSep != null && fSep.length() == 1) + path = path.replace(fSep.charAt(0), '/'); + if (path.length() > 0 && path.charAt(0) != '/') + path = '/' + path; + try { + return new InputSource(new URL("file", null, path).toString()); + } catch (java.net.MalformedURLException e) { + throw new Error("unexpected MalformedURLException"); + } + } // end: fileInputSource + + /** + * main method, starts execution of this task + * + */ + public void execute () throws BuildException { + Driver driver = new Driver(); + driver.setBaseDir(fofile); + boolean errors = false; + String version = Version.getVersion(); + MessageHandler.logln("=======================\nTask " + + version + "\nconverting file " + fofile + " to " + pdffile); + + if (!(new File(fofile).exists())) { + errors = true; + MessageHandler.errorln( + "Task Fop - ERROR: Formatting objects file " + + fofile + " missing."); + } + + XMLReader parser = createParser(); + + if (parser == null) { + MessageHandler.errorln("Task Fop - ERROR: Unable to create SAX parser"); + errors = true; + } + + // setting the parser features + try { + parser.setFeature("http://xml.org/sax/features/namespace-prefixes", + true); + } catch (SAXException e) { + MessageHandler.errorln("Error in setting up parser feature namespace-prefixes"); + MessageHandler.errorln("You need a parser which supports SAX version 2"); + System.exit(1); + } + + if (!errors) { + try { + driver.setRenderer("org.apache.fop.render.pdf.PDFRenderer", + version); + driver.addElementMapping("org.apache.fop.fo.StandardElementMapping"); + driver.addElementMapping("org.apache.fop.svg.SVGElementMapping"); + driver.addPropertyList("org.apache.fop.fo.StandardPropertyListMapping"); + driver.addPropertyList("org.apache.fop.svg.SVGPropertyListMapping"); + driver.setOutputStream(new FileOutputStream(pdffile)); + driver.buildFOTree(parser, fileInputSource(fofile)); + driver.format(); + driver.render(); + } catch (Exception e) { + MessageHandler.errorln("Task Fop - FATAL ERROR: " + + e.getMessage()); + System.exit(1); + } + } + MessageHandler.logln("=======================\n"); + } // end: execute +} + diff --git a/src/org/apache/fop/tools/anttasks/SerializeHyphPattern.java b/src/org/apache/fop/tools/anttasks/SerializeHyphPattern.java new file mode 100644 index 000000000..e3477d325 --- /dev/null +++ b/src/org/apache/fop/tools/anttasks/SerializeHyphPattern.java @@ -0,0 +1,199 @@ +/* + * The Apache Software License, Version 1.1 + * + * Copyright (c) 1999 The Apache Software Foundation. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, if + * any, must include the following acknowlegement: + * "This product includes software developed by the + * Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowlegement may appear in the software itself, + * if and wherever such third-party acknowlegements normally appear. + * + * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software + * Foundation" must not be used to endorse or promote products derived + * from this software without prior written permission. For written + * permission, please contact apache@apache.org. + * + * 5. Products derived from this software may not be called "Apache" + * nor may "Apache" appear in their names without prior written + * permission of the Apache Group. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * . + */ +package org.apache.fop.tools.anttasks; + +//package org.apache.tools.ant.taskdefs; + +import org.apache.tools.ant.taskdefs.MatchingTask; +import org.apache.tools.ant.DirectoryScanner; +import java.net.*; +import java.io.*; +import java.util.*; +import org.xml.sax.SAXException; + +//fop +import org.apache.fop.layout.hyphenation.HyphenationTree; +import org.apache.fop.layout.hyphenation.HyphenationException; + +/** + * SerializeHyphPattern + */ + + +public class SerializeHyphPattern extends MatchingTask { + private File sourceDir, targetDir; + private boolean errorDump = false; + + /** + * Main method, which is called by ant. + */ + public void execute () throws org.apache.tools.ant.BuildException { + DirectoryScanner ds = this.getDirectoryScanner(sourceDir); + String[] files = ds.getIncludedFiles(); + for (int i = 0; i < files.length ; i++) { + processFile(files[i].substring(0, files[i].length() - 4)); + } + } //end execute + + + /** + * Sets the source directory + * + */ + public void setSourceDir (String sourceDir) { + File dir = new File(sourceDir); + if (!dir.exists()) { + System.err.println("Fatal Error: source directory " + + sourceDir + " for hyphenation files doesn't exist."); + System.exit(1); + } + this.sourceDir = dir; + } + + /** + * Sets the target directory + * + */ + public void setTargetDir (String targetDir) { + File dir = new File(targetDir); + this.targetDir = dir; + } + + /** + * more error information + * + */ + public void setErrorDump (boolean errorDump) { + this.errorDump = errorDump; + } + + + /* + * checks whether input or output files exists or the latter is older than input file + * and start build if necessary + */ + private void processFile (String filename) { + File infile = new File (sourceDir , filename + ".xml"); + File outfile = new File(targetDir , filename + ".hyp"); + long outfileLastModified = outfile.lastModified(); + boolean startProcess = true; + + startProcess = rebuild(infile, outfile); + if (startProcess) { + buildPatternFile(infile, outfile); + } + } + + /* + * serializes pattern files + */ + private void buildPatternFile (File infile, File outfile) { + System.out.println("Processing " + infile); + HyphenationTree hTree = new HyphenationTree(); + try { + hTree.loadPatterns(infile.toString()); + if (errorDump) { + System.out.println("Stats: "); + hTree.printStats(); + } + } catch (HyphenationException ex) { + System.err.println("Can't load patterns from xml file " + + infile + " - Maybe hyphenation.dtd is missing?"); + if (errorDump) { + System.err.println(ex.toString()); + } + } + //serialize class + try { + ObjectOutputStream out = new ObjectOutputStream ( + new FileOutputStream(outfile)); + out.writeObject(hTree); + out.close(); + } catch (IOException ioe) { + System.err.println("Can't write compiled pattern file: " + + outfile); + System.err.println(ioe); + } + } + + /** + * Checks for existence of output file and compares + * dates with input and stylesheet file + */ + private boolean rebuild (File infile, File outfile) { + if (outfile.exists()) { + //checks whether output file is older than input file + if (outfile.lastModified() < infile.lastModified()) { + return true; + } + } else { + //if output file does not exist, start process + return true; + } + return false; + } //end rebuild + +/* + //quick access for debugging + public static void main (String args[]) { + SerializeHyphPattern ser = new SerializeHyphPattern(); + ser.setIncludes("*.xml"); + ser.setSourceDir("\\xml-fop\\hyph\\"); + ser.setTargetDir("\\xml-fop\\hyph\\"); + ser.execute(); + } +*/ + + +} diff --git a/lib/org/apache/fop/tools/anttasks/Xslt.java b/src/org/apache/fop/tools/anttasks/Xslt.java similarity index 98% rename from lib/org/apache/fop/tools/anttasks/Xslt.java rename to src/org/apache/fop/tools/anttasks/Xslt.java index d7444dd6e..1b42d9d97 100644 --- a/lib/org/apache/fop/tools/anttasks/Xslt.java +++ b/src/org/apache/fop/tools/anttasks/Xslt.java @@ -209,13 +209,18 @@ public class Xslt extends Task { xsltfile + "\nout: " + outfile); System.out.println("============================"); + /* if (isTraxAvailable()) { TraxTransform.transform(source, xsltfile, outfile); } else { Xalan1Transform.transform(source, xsltfile, outfile); } - } catch (org.xml.sax.SAXException saxerror) { + */ + org.apache.fop.tools.xslt.XSLTransform.transform(source,xsltfile,outfile); + + + } catch (org.xml.sax.SAXException saxerror) { System.out.println("Task xslt - SAX ERROR:\n " + saxerror); } catch (MalformedURLException urlerror) { @@ -224,11 +229,17 @@ public class Xslt extends Task { catch (IOException ioerror) { System.out.println("Task xslt - IO ERROR:\n " + ioerror); } - + + catch (Exception ex) { + ex.printStackTrace(); + } + } //end transform + /* private boolean isTraxAvailable() { + try { // check for trax Class transformer = Class.forName("javax.xml.transform.Transformer"); @@ -241,6 +252,7 @@ public class Xslt extends Task { } return false; } + */ /** * Checks for existence of output file and compares diff --git a/lib/org/apache/fop/tools/anttasks/TraxTransform.java b/src/org/apache/fop/tools/xslt/TraxTransform.java similarity index 82% rename from lib/org/apache/fop/tools/anttasks/TraxTransform.java rename to src/org/apache/fop/tools/xslt/TraxTransform.java index dc9710796..d93a611be 100644 --- a/lib/org/apache/fop/tools/anttasks/TraxTransform.java +++ b/src/org/apache/fop/tools/xslt/TraxTransform.java @@ -52,11 +52,13 @@ * . */ -package org.apache.fop.tools.anttasks; +package org.apache.fop.tools.xslt; import javax.xml.transform.*; import java.io.FileInputStream; +import java.io.Writer; + import java.util.Hashtable; import org.w3c.dom.Document; @@ -69,10 +71,11 @@ public class TraxTransform /** Cache of compiled stylesheets (filename, StylesheetRoot) */ private static Hashtable _stylesheetCache = new Hashtable(); - public static Transformer getTransformer(String xsltFilename) + public static Transformer getTransformer(String xsltFilename, + boolean cache) { try { - if (_stylesheetCache.containsKey(xsltFilename)) { + if (cache && _stylesheetCache.containsKey(xsltFilename)) { Templates cachedStylesheet = (Templates)_stylesheetCache.get(xsltFilename); return cachedStylesheet.newTransformer(); } @@ -81,16 +84,17 @@ public class TraxTransform new javax.xml.transform.stream.StreamSource (xsltFilename); - System.out.println("****************************"); + /* System.out.println("****************************"); System.out.println("trax compile \nin: " + xsltFilename); System.out.println("****************************"); - + */ TransformerFactory factory = TransformerFactory.newInstance(); Templates compiledSheet = factory.newTemplates(xslSheet); - - _stylesheetCache.put(xsltFilename, compiledSheet); + if (cache) { + _stylesheetCache.put(xsltFilename, compiledSheet); + } return compiledSheet.newTransformer(); } catch (TransformerConfigurationException ex) { @@ -100,16 +104,18 @@ public class TraxTransform } - public static void transform(String xmlSource, String xslURL, - String outputFile) + public static void transform(String xmlSource, + String xslURL, + String outputFile) { transform(new javax.xml.transform.stream.StreamSource(xmlSource), new javax.xml.transform.stream.StreamSource(xslURL), new javax.xml.transform.stream.StreamResult(outputFile)); } - public static void transform(Document xmlSource, String xslURL, - String outputFile) + public static void transform(Document xmlSource, + String xslURL, + String outputFile) { transform(new javax.xml.transform.dom.DOMSource(xmlSource), @@ -118,16 +124,27 @@ public class TraxTransform } - public static void transform(Source xmlSource, Source xslSource, Result result) + public static void transform(String xmlSource, + String xslURL, + Writer output) { - try { + transform(new javax.xml.transform.stream.StreamSource(xmlSource), + new javax.xml.transform.stream.StreamSource(xslURL), + new javax.xml.transform.stream.StreamResult(output)); + } + + public static void transform(Source xmlSource, + Source xslSource, + Result result) + { + try { Transformer transformer; if (xslSource.getSystemId() == null) { TransformerFactory factory = TransformerFactory.newInstance(); transformer = factory.newTransformer(xslSource); } else { - transformer = getTransformer(xslSource.getSystemId()); + transformer = getTransformer(xslSource.getSystemId(),true); } transformer.transform(xmlSource, result); } diff --git a/src/org/apache/fop/tools/xslt/XSLTransform.java b/src/org/apache/fop/tools/xslt/XSLTransform.java new file mode 100644 index 000000000..0d876158d --- /dev/null +++ b/src/org/apache/fop/tools/xslt/XSLTransform.java @@ -0,0 +1,173 @@ +/* + * The Apache Software License, Version 1.1 + * + * Copyright (c) 1999 The Apache Software Foundation. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, if + * any, must include the following acknowlegement: + * "This product includes software developed by the + * Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowlegement may appear in the software itself, + * if and wherever such third-party acknowlegements normally appear. + * + * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software + * Foundation" must not be used to endorse or promote products derived + * from this software without prior written permission. For written + * permission, please contact apache@apache.org. + * + * 5. Products derived from this software may not be called "Apache" + * nor may "Apache" appear in their names without prior written + * permission of the Apache Group. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * . + */ + +package org.apache.fop.tools.xslt; + +import java.io.Writer; +import java.lang.reflect.*; + + +public class XSLTransform +{ + + public static void transform(String xmlSource, + String xslURL, + String outputFile) + throws Exception + { + Class[] argTypes = {String.class, String.class, String.class}; + Object[] params = {xmlSource, xslURL, outputFile}; + transform(params, argTypes); + } + + public static void transform(org.w3c.dom.Document xmlSource, + String xslURL, + String outputFile) + throws Exception + { + Class[] argTypes = {org.w3c.dom.Document.class, + String.class, String.class}; + + Object[] params = {xmlSource, xslURL, outputFile}; + transform(params, argTypes); + + } + + public static void transform(String xmlSource, + String xslURL, + Writer outputWriter) + throws Exception + { + Class[] argTypes = {String.class, String.class, Writer.class}; + Object[] params = {xmlSource, xslURL, outputWriter}; + transform(params, argTypes); + + } + + + private static void transform(Object[] args, Class[] argTypes) + throws Exception + { + Class transformer = getTransformClass(); + if (transformer != null) { + Method transformMethod = getTransformMethod(transformer,argTypes); + if (transformMethod != null) { + try { + transformMethod.invoke(null, args); + } + catch (InvocationTargetException ex) { + ex.printStackTrace(); + } + } + else { + throw new Exception("transform method not found"); + } + } + else { + throw new Exception("no transformer class found"); + } + + } + + + private static Class getTransformClass() + { + try { + // try trax first + Class transformer = Class.forName("javax.xml.transform.Transformer"); + // ok, make sure we have a liaison to trax + transformer = Class.forName("org.apache.fop.tools.xslt.TraxTransform"); + return transformer; + + } + catch (ClassNotFoundException ex){ + } + // otherwise, try regular xalan1 + try { + Class transformer = Class.forName("org.apache.xalan.xslt.XSLTProcessor"); + // get the liaison + transformer = Class.forName("org.apache.fop.tools.xslt.Xalan1Transform"); + return transformer; + } + catch (ClassNotFoundException ex){ + } + return null; + + } + + + private static Method getTransformMethod(Class c, Class[] argTypes) + { + // System.out.println("transformer class = "+c); + + try { + // Class[] argTypes = new Class[args.length]; + for (int i=0; i. */ -package org.apache.fop.tools.anttasks; +package org.apache.fop.tools.xslt; import org.apache.xalan.xslt.*; @@ -69,10 +69,11 @@ public class Xalan1Transform /** Cache of compiled stylesheets (filename, StylesheetRoot) */ private static Hashtable _stylesheetCache = new Hashtable(); - public static StylesheetRoot getStylesheet(String xsltFilename) + public static StylesheetRoot getStylesheet(String xsltFilename, + boolean cache) throws org.xml.sax.SAXException { - if (_stylesheetCache.containsKey(xsltFilename)) { + if (cache && _stylesheetCache.containsKey(xsltFilename)) { return (StylesheetRoot)_stylesheetCache.get(xsltFilename); } @@ -86,14 +87,16 @@ public class Xalan1Transform new org.apache.xalan.xslt.XSLTInputSource (xsltFilename); // Perform the transformation. + /* System.out.println("****************************"); System.out.println("new xslt compile \nin: " + xsltFilename); System.out.println("****************************"); - + */ StylesheetRoot compiledSheet = processor.processStylesheet(xslSheet); - - _stylesheetCache.put(xsltFilename, compiledSheet); + if (cache) { + _stylesheetCache.put(xsltFilename, compiledSheet); + } return compiledSheet; } @@ -116,9 +119,12 @@ public class Xalan1Transform } - public static void transform(Document xmlSource, String xslURL, - String outputFile) throws java.io.IOException, - java.net.MalformedURLException, org.xml.sax.SAXException + public static void transform(Document xmlSource, + String xslURL, + String outputFile) + throws java.io.IOException, + java.net.MalformedURLException, + org.xml.sax.SAXException { // Create the 3 objects the XSLTProcessor needs to perform the transformation. org.apache.xalan.xslt.XSLTInputSource source = @@ -126,7 +132,7 @@ public class Xalan1Transform org.apache.xalan.xslt.XSLTResultTarget xmlResult = new org.apache.xalan.xslt.XSLTResultTarget (outputFile); - StylesheetRoot stylesheet = getStylesheet(xslURL); + StylesheetRoot stylesheet = getStylesheet(xslURL,true); // Perform the transformation. stylesheet.process(XSLTProcessorFactory.getProcessor -- 2.39.5