<?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.

-->
<!-- You may freely edit this file. See harness/README in the NetBeans platform -->
<!-- for some information on what you could do (e.g. targets to override). -->
<!-- If you delete this file and reopen the project it will be recreated. -->
<project name="java/languages.antlr" default="build" basedir=".">
    <description>Builds, tests, and runs the project org.netbeans.modules.languages.antlr</description>
    <import file="../../nbbuild/templates/projectized.xml"/>

    <target name="download-antlr-grammar" depends="init">
        <property name="antlr.outdir" location="${src.dir}/org/antlr/parser/antlr4"/>
        <mkdir dir="${antlr.outdir}"/>

        <get src="https://raw.githubusercontent.com/antlr/grammars-v4/${antlr4.grammar.version}/antlr/antlr4/ANTLRv4Lexer.g4" dest="${antlr.outdir}"/>
        <get src="https://raw.githubusercontent.com/antlr/grammars-v4/${antlr4.grammar.version}/antlr/antlr4/ANTLRv4Parser.g4" dest="${antlr.outdir}"/>
        <get src="https://raw.githubusercontent.com/antlr/grammars-v4/${antlr4.grammar.version}/antlr/antlr4/LexBasic.g4" dest="${antlr.outdir}"/>
        <get src="https://raw.githubusercontent.com/antlr/grammars-v4/${antlr4.grammar.version}/antlr/antlr4/Java/LexerAdaptor.java" dest="${antlr.outdir}"/>
        <replace file="${antlr.outdir}/LexerAdaptor.java" token="//package" value="package"/>
    </target>

    <target name="generate-antlr-parser" description="Regenerate the ANTLRv4 parser" depends="init">
        <property name="antlr.outdir" location="${src.dir}/org/antlr/parser/antlr4"/>
        <path id="antlr4.tool">
            <fileset dir="../../ide/libs.antlr4.runtime/external" includes="*.jar"/>
            <fileset dir="../../ide/libs.antlr3.runtime/external" includes="antlr-runtime-*.jar"/>
        </path>

        <java classname="org.antlr.v4.Tool" classpathref="antlr4.tool" fork="true" dir="${antlr.outdir}">
            <arg value="-o"/>
            <arg value="${antlr.outdir}"/>
            <arg value="-package"/>
            <arg value="org.antlr.parser.antlr4"/>
            <arg value="ANTLRv4Lexer.g4"/>
            <arg value="ANTLRv4Parser.g4"/>
        </java>

        <delete dir="${antlr.outdir}" includes="*.tokens"/>
        <delete dir="${antlr.outdir}" includes="*.interp"/>
        <!--delete dir="${antlr.outdir}" includes="*.g4"/-->

    </target>
</project>
