git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@277573 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -198,6 +198,8 @@ Other changes: | |||
| * Added length task to get strings' and files' lengths. | |||
| * <natice2ascii> now also supports Kaffe's version. | |||
| Fixed bugs: | |||
| ----------- | |||
| @@ -40,6 +40,15 @@ | |||
| and <code><patternset></code> elements. | |||
| </p> | |||
| <p>It is possible to use different converters. This can be selected | |||
| with the <code>implementation</code> attribute. | |||
| <a name="implementationvalues">Here are the choices</a>:</p> | |||
| <ul> | |||
| <li>default - the default converter (kaffe or sun) for the platform.</li> | |||
| <li>sun (the standard converter of the JDK)</li> | |||
| <li>kaffe (the standard converter of <a href="http://www.kaffe.org" target="_top">Kaffe</a>)</li> | |||
| </ul> | |||
| <table border="1" cellpadding="2" cellspacing="0"> | |||
| <tr> | |||
| <td><b>Attribute</b></td> | |||
| @@ -49,7 +58,8 @@ | |||
| <tr> | |||
| <td>reverse</td> | |||
| <td>Reverse the sense of the conversion, | |||
| i.e. convert from ASCII to native</td> | |||
| i.e. convert from ASCII to native <b>only supported by the | |||
| sun converter</b></td> | |||
| <td align="center">No</td> | |||
| </tr> | |||
| <tr> | |||
| @@ -105,8 +115,57 @@ | |||
| taken to be an exclude pattern</td> | |||
| <td align="center">No</td> | |||
| </tr> | |||
| <tr> | |||
| <td valign="top">implementation</td> | |||
| <td valign="top">The converter implementation to use. | |||
| If this attribute is not set, the default converter for the | |||
| current VM will be used. (See the above <a | |||
| href="#implementationvalues">list</a> of valid converters.)</td> | |||
| <td align="center" valign="top">No</td> | |||
| </tr> | |||
| </table> | |||
| <h3>Parameters specified as nested elements</h3> | |||
| <h4>arg</h4> | |||
| <p>You can specify additional command line arguments for the converter | |||
| with nested <code><arg></code> elements. These elements are | |||
| specified like <a href="../using.html#arg">Command-line Arguments</a> | |||
| but have an additional attribute that can be used to enable arguments | |||
| only if a given converter implementation will be used.</p> | |||
| <table border="1" cellpadding="2" cellspacing="0"> | |||
| <tr> | |||
| <td width="12%" valign="top"><b>Attribute</b></td> | |||
| <td width="78%" valign="top"><b>Description</b></td> | |||
| <td width="10%" valign="top"><b>Required</b></td> | |||
| </tr> | |||
| <tr> | |||
| <td valign="top">value</td> | |||
| <td align="center" rowspan="4">See | |||
| <a href="../using.html#arg">Command-line Arguments</a>.</td> | |||
| <td align="center" rowspan="4">Exactly one of these.</td> | |||
| </tr> | |||
| <tr> | |||
| <td valign="top">line</td> | |||
| </tr> | |||
| <tr> | |||
| <td valign="top">file</td> | |||
| </tr> | |||
| <tr> | |||
| <td valign="top">path</td> | |||
| </tr> | |||
| <tr> | |||
| <td valign="top">implementation</td> | |||
| <td>Only pass the specified argument if the chosen converter | |||
| implementation matches the value of this attribute. Legal values | |||
| are the same as those in the above <a | |||
| href="#implementationvalues">list</a> of valid compilers.)</td> | |||
| <td align="center">No</td> | |||
| </tr> | |||
| </table> | |||
| <h3>Examples</h3> | |||
| <pre> | |||
| @@ -133,6 +192,6 @@ | |||
| </p> | |||
| </body> | |||
| <hr> | |||
| <p align="center">Copyright © 2000-2002,2004 The Apache Software Foundation. All rights | |||
| <p align="center">Copyright © 2000-2002,2004-2005 The Apache Software Foundation. All rights | |||
| Reserved.</p> | |||
| </html> | |||
| @@ -29,6 +29,8 @@ import org.apache.tools.ant.types.Mapper; | |||
| import org.apache.tools.ant.util.FileNameMapper; | |||
| import org.apache.tools.ant.util.IdentityMapper; | |||
| import org.apache.tools.ant.util.SourceFileScanner; | |||
| import org.apache.tools.ant.util.facade.FacadeTaskHelper; | |||
| import org.apache.tools.ant.util.facade.ImplementationSpecificArgument; | |||
| /** | |||
| * Converts files from native encodings to ASCII. | |||
| @@ -44,6 +46,11 @@ public class Native2Ascii extends MatchingTask { | |||
| private String extension = null; // Extension of output files if different | |||
| private Mapper mapper; | |||
| private FacadeTaskHelper facade = null; | |||
| public Native2Ascii() { | |||
| facade = new FacadeTaskHelper(Native2AsciiAdapterFactory.getDefault()); | |||
| } | |||
| /** | |||
| * Flag the conversion to run in the reverse sense, | |||
| @@ -114,6 +121,19 @@ public class Native2Ascii extends MatchingTask { | |||
| this.extension = ext; | |||
| } | |||
| /** | |||
| * Choose the implementation for this particular task. | |||
| * @param compiler the name of the compiler | |||
| * @since Ant 1.6.3 | |||
| */ | |||
| public void setImplementation(String impl) { | |||
| if ("default".equals(impl)) { | |||
| facade.setImplementation(Native2AsciiAdapterFactory.getDefault()); | |||
| } else { | |||
| facade.setImplementation(impl); | |||
| } | |||
| } | |||
| /** | |||
| * Defines the FileNameMapper to use (nested mapper element). | |||
| * | |||
| @@ -139,6 +159,18 @@ public class Native2Ascii extends MatchingTask { | |||
| createMapper().add(fileNameMapper); | |||
| } | |||
| /** | |||
| * Adds an implementation specific command-line argument. | |||
| * @return a ImplementationSpecificArgument to be configured | |||
| * | |||
| * @since Ant 1.6.3 | |||
| */ | |||
| public ImplementationSpecificArgument createArg() { | |||
| ImplementationSpecificArgument arg = | |||
| new ImplementationSpecificArgument(); | |||
| facade.addImplementationArgument(arg); | |||
| return arg; | |||
| } | |||
| /** | |||
| * Execute the task | |||
| @@ -230,12 +262,23 @@ public class Native2Ascii extends MatchingTask { | |||
| log("converting " + srcName, Project.MSG_VERBOSE); | |||
| Native2AsciiAdapter ad = | |||
| Native2AsciiAdapterFactory.getAdapter(null, this); | |||
| Native2AsciiAdapterFactory.getAdapter(facade.getImplementation(), | |||
| this); | |||
| if (!ad.convert(this, srcFile, destFile)) { | |||
| throw new BuildException("conversion failed"); | |||
| } | |||
| } | |||
| /** | |||
| * Returns the (implementation specific) settings given as nested | |||
| * arg elements. | |||
| * | |||
| * @since Ant 1.6.3 | |||
| */ | |||
| public String[] getCurrentArgs() { | |||
| return facade.getArgs(); | |||
| } | |||
| private class ExtMapper implements FileNameMapper { | |||
| public void setFrom(String s) { | |||
| @@ -50,7 +50,8 @@ public abstract class DefaultNative2Ascii implements Native2AsciiAdapter { | |||
| /** | |||
| * Sets up the initial command line. | |||
| * | |||
| * <p>only the -encoding argument gets handled here.</p> | |||
| * <p>only the -encoding argument and nested arg elements get | |||
| * handled here.</p> | |||
| * | |||
| * @param cmd Command line to add to | |||
| * @param args provides the user-setting and access to Ant's | |||
| @@ -62,6 +63,7 @@ public abstract class DefaultNative2Ascii implements Native2AsciiAdapter { | |||
| cmd.createArgument().setValue("-encoding"); | |||
| cmd.createArgument().setValue(args.getEncoding()); | |||
| } | |||
| cmd.addArguments(args.getCurrentArgs()); | |||
| } | |||
| /** | |||