<?xml version="1.0" encoding="UTF-8" ?>
<!--

    Licensed to the Apache Software Foundation (ASF) under one
    or more contributor license agreements.  See the NOTICE file
    distributed with this work for additional information
    regarding copyright ownership.  The ASF licenses this file
    to you under the Apache License, Version 2.0 (the
    "License"); you may not use this file except in compliance
    with the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing,
    software distributed under the License is distributed on an
    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    KIND, either express or implied.  See the License for the
    specific language governing permissions and limitations
    under the License.

-->

<!-- arguments below are taken form the upper ANT task -->

<!-- basedir == directory, where the localizable files are -->
<!-- destdir == directory, where will be saved final JAR file -->
<!-- locale  == a locale ... files with these locale will be added to the archive (JAR file) -->

<!-- idedir  == part in the IDE, where will be stored final file -->


<project name="Sub_form" default="sub_form" basedir="${dir}">

	<!-- setup the destination directory -->
	<property name="idedir" value="modules/local" />

	<target name="sub_form">
                <!-- create full destination directory -->
                <mkdir dir="${destdir}/${idedir}" />
                <!-- create final jar file -->
                <jar jarfile="${destdir}/${idedir}/form_${locale}.jar" basedir="${basedir}/src" includes="**/*_${locale}.*" />
        </target>

</project>
