#!/bin/bash
## 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.

# Parser builder

GRAMMAR="${GRAMMAR:-"sse.jj"}"
ROOT="../.."
# --------------------------------------------------------

function grammar
{
    FILE="$1"
    PKG="$2"
    CLASS="$3"

    echo $1 $2 $3

    DIR="$ROOT/src/main/java/org/apache/jena/sparql/$PKG"
    (cd "$DIR" ; rm -f TokenMgrError.java ParseException.java Token.java JavaCharStream.java )

    echo "---- Process grammar -- $1"
    javacc -OUTPUT_DIRECTORY=$DIR -JDK_VERSION=1.5 "${FILE}"
    RC=$?

    [ "$RC" = 0 ] || return $RC

##     echo "---- Create HTML"
##     jjdoc -OUTPUT_FILE=${FILE%%.jj}.html "${FILE}"
##     echo "---- Create text form"
##     jjdoc -TEXT=true -OUTPUT_FILE=${FILE%%.jj}.txt "${FILE}"

    echo "---- Fixing Java warnings in TokenMgrError"
    F="$DIR/TokenMgrError.java"
    if [ -e "$F" ]
    then
	sed -e 's/public class TokenMgrError/\n@SuppressWarnings("all")\npublic class TokenMgrError/' < $F > F 
	mv F $F
    fi

    echo "---- Done"
}

if [ $# == 0 ]
then
    set -- unisyn
fi

for G in "$@"
do
    case "$G" in
	unisyn)
## 	    cp ../header.jj parser.jj
## 	    # The parser that is exactly the working group grammar
## 	    cat "$GRAMMAR" | cpp -P >> parser.jj
## 	    grammar parser.jj sse/lang/parser SSE_ParserCore
## 	    [ "$RC" = 0 ] && rm parser.jj
	    grammar sse.jj sse/lang/parser SSE_ParserCore
	    ;;
	*)    echo "**** Unknown grammar: $G" 1>&2
	      ;;
    esac
done
