<html>
  <head><title>Native2Ascii</title></head>
  <body>
    <h2>Native2Ascii</h2>
    
    <h3>Description:</h3>
    
    <p>
      Converts files from native encodings to ASCII with escaped Unicode.
      A common usage is to convert source files maintained in a native
      operating system encoding, to ASCII prior to compilation.
    </p>

    <p>
      Files in the directory <em>src</em>
      are converted from a native encoding to ASCII.
      By default, all files in the directory are converted.
      However, conversion may be limited to selected files using
      <em>includes</em> and <em>excludes</em> attributes.
      For more information on file matching patterns,
      see the section on
      <a href="index.html../dirtasks.html#directorybasedtasks">directory based tasks</a>.
      If no <em>encoding</em> is specified, 
      the default encoding for the JVM is used.
      If <em>ext</em> is specified, then output files are renamed
      to use it as a new extension. 
      More sophisticated file name translations can be achieved using a nested
      <em>&lt;mapper&gt;</em> element. By default an 
      <a href="../CoreTypes/mapper.html#identity-mapper">identity mapper</a> will be used.
      If <em>dest</em> and <em>src</em> point to the same directory,
      the <em>ext</em> attribute or a nested <em>&lt;mapper&gt;</em>
      is required.
    </p>

    <p>
      This task forms an implicit <a href="index.html../CoreTypes/fileset.html">File Set</a>,
      and supports all attributes of <code>&lt;fileset&gt;</code>
      (<code>dir</code> becomes <code>src</code>) as well as 
      nested <code>&lt;include&gt;</code>, <code>&lt;exclude&gt;</code>,
      and <code>&lt;patternset&gt;</code> elements.
    </p>

    <table border="1" cellpadding="2" cellspacing="0">
      <tr>
        <td><b>Attribute</b></td>
        <td><b>Description</b></td>
        <td><b>Required</b></td>
      </tr>
      <tr>
        <td>reverse</td>
        <td>Reverse the sense of the conversion,
          i.e. convert from ASCII to native</td>
        <td align="center">No</td>
      </tr>
      <tr>
        <td>encoding</td>
        <td>The native encoding the files are in
          (default is the default encoding for the JVM)</td>
        <td align="center">No</td>
      </tr>
      <tr>
        <td>src</td>
        <td>The directory to find files in (default is <em>basedir</em>)</td>
        <td align="center">No</td>
      </tr>
      <tr>
        <td>dest</td>
        <td>The directory to output file to</td>
        <td align="center">Yes</td>
      </tr>
      <tr>
        <td>ext</td>
        <td>File extension to use in renaming output files</td>
        <td align="center">No</td>
      </tr>
      <tr>
        <td>defaultexcludes</td>
        <td>indicates whether default excludes should be used or not
          (&quot;yes&quot;/&quot;no&quot;).
          Default excludes are used when omitted.
        </td>
        <td align="center">No</td>
      </tr>
      <tr>
        <td>includes</td>
        <td>comma separated list of patterns of files that must be
          included. All files are included when omitted.</td>
        <td align="center">No</td>
      </tr>
      <tr>
        <td>includesfile</td>
        <td>the name of a file. Each line of this file is
          taken to be an include pattern</td>
        <td align="center">No</td>
      </tr>
      <tr>
        <td>excludes</td>
        <td>comma separated list of patterns of files that must be excluded.
          No files (except default excludes) are excluded when omitted.</td>
        <td align="center">No</td>
      </tr>
      <tr>
        <td>excludesfile</td>
        <td>the name of a file. Each line of this file is
          taken to be an exclude pattern</td>
        <td align="center">No</td>
      </tr>
    </table>
      
    <h3>Examples</h3>

    <pre>
&lt;native2ascii encoding=&quot;EUCJIS&quot; src=&quot;srcdir&quot; dest=&quot;srcdir&quot;
   includes=&quot;**/*.eucjis&quot; ext=&quot;.java&quot; /&gt;
    </pre>

    <p>
      Converts all files in the directory <em>srcdir</em>
      ending in <code>.eucjis</code> from the EUCJIS encoding to ASCII
      and renames them to end in <code>.java</code>.
    </p>

<pre>
&lt;native2ascii encoding='EUCJIS&quot; src=&quot;native/japanese&quot; dest=&quot;src&quot;
   includes=&quot;**/*.java /&gt;
</pre>

    <p>
      Converts all the files ending in <code>.java</code>
      in the directory <em>native/japanese</em> to ASCII,
      placing the results in the directory <em>src</em>.
      The names of the files remain the same.
    </p>
  </body>
</html>
