<!--
  Copyright 2002,2004 The Apache Software Foundation.
  
  Licensed 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.
-->
<project default="java:jar">

    <!-- define the classpath --> 
    <goal name="create-classpath" prereqs="java:compile,test:compile"> 
        <path id="test.classpath"> 
            <pathelement path="${maven.build.dest}"/> 
            <pathelement path="target/classes"/> 
            <pathelement path="target/test-classes"/> 
            <path refid="maven.dependency.classpath"/> 
        </path> 
    </goal> 

    <!-- demos-->
    
  <goal name="demo:html" prereqs="create-classpath"
        description="Runs the example of parsing HTML with jelly">

    <java classname="org.apache.commons.jelly.Jelly" fork="yes">
      <classpath refid="test.classpath"/>
      <arg value="src/test/org/apache/commons/jelly/html/example.jelly"/>
    </java>
  </goal>

  <goal name="demo:text" prereqs="create-classpath"
        description="Runs the example of parsing text with tags via jelly">

    <java classname="org.apache.commons.jelly.Jelly" fork="yes">
      <classpath refid="test.classpath"/>
      <arg value="src/test/org/apache/commons/jelly/html/example2.jelly"/>
    </java>
  </goal>


  <goal name="demo:radio2pda" prereqs="create-classpath" 
      description="Converts the HTML news output of Radio Userland to simple HTML viewable on a PDA"> 
    <java classname="org.apache.commons.jelly.Jelly" fork="yes"> 
      <classpath refid="test.classpath"/> 
      <arg value="src/test/org/apache/commons/jelly/html/radioToPDA.jelly"/> 
        <sysproperty key="outputFile" value="${pdaOutputFile}"/> 
     </java> 
  </goal> 

</project>
