bodewig 2004/04/16 01:36:46 Modified: . Tag: ANT_16_BRANCH WHATSNEW docs/manual/CoreTasks Tag: ANT_16_BRANCH style.html src/etc/testcases/taskdefs/style Tag: ANT_16_BRANCH build.xml src/main/org/apache/tools/ant/taskdefs Tag: ANT_16_BRANCH XSLTProcess.java src/testcases/org/apache/tools/ant/taskdefs Tag: ANT_16_BRANCH StyleTest.java Log: merge Revision Changes Path No revision No revision 1.503.2.70 +2 -0 ant/WHATSNEW Index: WHATSNEW =================================================================== RCS file: /home/cvs/ant/WHATSNEW,v retrieving revision 1.503.2.69 retrieving revision 1.503.2.70 diff -u -r1.503.2.69 -r1.503.2.70 --- WHATSNEW 16 Apr 2004 07:49:42 -0000 1.503.2.69 +++ WHATSNEW 16 Apr 2004 08:36:46 -0000 1.503.2.70 @@ -71,6 +71,8 @@ * <sshexec> now also captures stderr output. Bugzilla Report 28349. +* <xslt> now supports a nested <mapper>. Bugzilla Report 11249. + Changes from Ant 1.6.0 to Ant 1.6.1 =================================== No revision No revision 1.29.2.4 +19 -1 ant/docs/manual/CoreTasks/style.html Index: style.html =================================================================== RCS file: /home/cvs/ant/docs/manual/CoreTasks/style.html,v retrieving revision 1.29.2.3 retrieving revision 1.29.2.4 diff -u -r1.29.2.3 -r1.29.2.4 --- style.html 9 Feb 2004 22:12:07 -0000 1.29.2.3 +++ style.html 16 Apr 2004 08:36:46 -0000 1.29.2.4 @@ -57,7 +57,8 @@ <tr> <td valign="top">extension</td> <td valign="top">desired file extension to be used for the targets. If not - specified, the default is ".html".</td> + specified, the default is ".html". Will be ignored if + a nested <mapper> has been specified.</td> <td align="center" valign="top">No</td> </tr> <tr> @@ -289,6 +290,16 @@ </table> </blockquote> +<h4>mapper</h4> + +<p><em>since Ant 1.6.2</em></p> + +<p>You can define filename transformations by using a nested <a +href="../CoreTypes/mapper.html">mapper</a> element. The default mapper +used by <code><xslt></code> removes the file extension from the +source file and adds the extension specified via the extension +attribute.</p> + <h3>Examples</h3> <blockquote> <pre> @@ -335,6 +346,13 @@ <attribute name="http://xml.apache.org/xalan/features/optimize" value="true"/> </factory> </xslt></pre> + + <h4>Using a mapper</h4> +<pre><xslt basedir="in" destdir="out" + style="style/apache.xsl"> + <mapper type="glob" from="*.xml.en" to="*.html.en"/> +</xslt></pre> + </blockquote> <hr> <p align="center">Copyright © 2000-2004 The Apache Software Foundation. All rights No revision No revision 1.3.2.1 +15 -0 ant/src/etc/testcases/taskdefs/style/build.xml Index: build.xml =================================================================== RCS file: /home/cvs/ant/src/etc/testcases/taskdefs/style/build.xml,v retrieving revision 1.3 retrieving revision 1.3.2.1 diff -u -r1.3 -r1.3.2.1 --- build.xml 12 Sep 2003 13:59:35 -0000 1.3 +++ build.xml 16 Apr 2004 08:36:46 -0000 1.3.2.1 @@ -42,6 +42,21 @@ </style> </target> + <target name="testDefaultMapper"> + <property name="value" value="myvalue"/> + <style style="printParams.xsl" destDir="${out.dir}" basedir="."> + <param name="set" expression="${value}"/> + </style> + </target> + + <target name="testCustomMapper"> + <property name="value" value="myvalue"/> + <style style="printParams.xsl" destDir="${out.dir}" basedir="."> + <param name="set" expression="${value}"/> + <mapper type="glob" from="data.*" to="out.*"/> + </style> + </target> + <target name="testNewerStylesheet"> <antcall target="copyXsl"> <param name="xsl.value" value="old-value"/> No revision No revision 1.78.2.6 +64 -7 ant/src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java Index: XSLTProcess.java =================================================================== RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java,v retrieving revision 1.78.2.5 retrieving revision 1.78.2.6 diff -u -r1.78.2.5 -r1.78.2.6 --- XSLTProcess.java 16 Apr 2004 07:49:42 -0000 1.78.2.5 +++ XSLTProcess.java 16 Apr 2004 08:36:46 -0000 1.78.2.6 @@ -25,9 +25,11 @@ import org.apache.tools.ant.DirectoryScanner; import org.apache.tools.ant.DynamicConfigurator; import org.apache.tools.ant.Project; +import org.apache.tools.ant.types.Mapper; import org.apache.tools.ant.types.Path; import org.apache.tools.ant.types.Reference; import org.apache.tools.ant.types.XMLCatalog; +import org.apache.tools.ant.util.FileNameMapper; import org.apache.tools.ant.util.FileUtils; /** @@ -133,6 +135,13 @@ private AntClassLoader loader = null; /** + * Mapper to use when a set of files gets processed. + * + * @since Ant 1.6.2 + */ + private Mapper mapperElement = null; + + /** * Creates a new XSLTProcess Task. */ public XSLTProcess() { @@ -163,6 +172,21 @@ } /** + * Defines the mapper to map source to destination files. + * @return a mapper to be configured + * @exception BuildException if more than one mapper is defined + * @since Ant 1.6.2 + */ + public Mapper createMapper() throws BuildException { + if (mapperElement != null) { + throw new BuildException("Cannot define more than one mapper", + getLocation()); + } + mapperElement = new Mapper(getProject()); + return mapperElement; + } + + /** * Executes the task. * * @exception BuildException if there is an execution problem. @@ -437,7 +461,6 @@ File stylesheet) throws BuildException { - String fileExt = targetExtension; File outFile = null; File inFile = null; @@ -451,13 +474,26 @@ return; } - int dotPos = xmlFile.lastIndexOf('.'); - if (dotPos > 0) { - outFile = new File(destDir, - xmlFile.substring(0, xmlFile.lastIndexOf('.')) + fileExt); + FileNameMapper mapper = null; + if (mapperElement != null) { + mapper = mapperElement.getImplementation(); } else { - outFile = new File(destDir, xmlFile + fileExt); + mapper = new StyleMapper(); + } + + String[] outFileName = mapper.mapFileName(xmlFile); + if (outFileName == null || outFileName.length == 0) { + log("Skipping " + inFile + " it cannot get mapped to output.", + Project.MSG_VERBOSE); + return; + } else if (outFileName == null || outFileName.length > 1) { + log("Skipping " + inFile + " its mapping is ambiguos.", + Project.MSG_VERBOSE); + return; } + + outFile = new File(destDir, outFileName[0]); + if (force || inFile.lastModified() > outFile.lastModified() || styleSheetLastModified > outFile.lastModified()) { @@ -921,5 +957,26 @@ } // -- class Attribute } // -- class Factory + + /** + * Mapper implementation of the "traditional" way <xslt> + * mapped filenames. + * + * <p>If the file has an extension, chop it off. Append whatever + * the user has specified as extension or ".html".</p> + * + * @since Ant 1.6.2 + */ + private class StyleMapper implements FileNameMapper { + public void setFrom(String from) {} + public void setTo(String to) {} + public String[] mapFileName(String xmlFile) { + int dotPos = xmlFile.lastIndexOf('.'); + if (dotPos > 0) { + xmlFile = xmlFile.substring(0, dotPos); + } + return new String[] {xmlFile + targetExtension}; + } + } } No revision No revision 1.6.2.5 +14 -0 ant/src/testcases/org/apache/tools/ant/taskdefs/StyleTest.java Index: StyleTest.java =================================================================== RCS file: /home/cvs/ant/src/testcases/org/apache/tools/ant/taskdefs/StyleTest.java,v retrieving revision 1.6.2.4 retrieving revision 1.6.2.5 diff -u -r1.6.2.4 -r1.6.2.5 --- StyleTest.java 9 Mar 2004 17:02:02 -0000 1.6.2.4 +++ StyleTest.java 16 Apr 2004 08:36:46 -0000 1.6.2.5 @@ -82,6 +82,20 @@ } + public void testDefaultMapper() throws Exception { + assertTrue(!getProject().resolveFile("out/data.html").exists()); + expectFileContains("testDefaultMapper", + "out/data.html", + "set='myvalue'"); + } + + public void testCustomMapper() throws Exception { + assertTrue(!getProject().resolveFile("out/out.xml").exists()); + expectFileContains("testCustomMapper", + "out/out.xml", + "set='myvalue'"); + } + // ************* copied from ConcatTest ************* // ------------------------------------------------------
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]