#!/bin/bash

# To process a template, run this script with the path to a .tmpl file, e.g.,
#
# $ $DART/utils/template/template srcfile [outfile]
#
# where:
#    srcfile - the template file file.tmpl (if .tmpl missing .tmpl is assumed).
#    outfile - the Dart class file to generate, if outfile not specified then
#              outfile is srcfile.dart (srcfile name w/o ext).
#
# To use your Dart VM must be on your $PATH e.g.,
#
# export PATH=$PATH:/home/<your name>/dart-all/dart/out/Release_ia32/


# Minimum/Maximum number of arguments
MINARGS=1
MAXARGS=2

# get the number of command-line arguments given
ARGC=$#

SRCFILE=
OUTFILE=

# check to make sure enough arguments were given or exit
if [[ $ARGC -eq $MINARGS ]];
then
  SRCFILE=$1
  IDX=`expr index "$SRCFILE" .` 
  if [[ $IDX -eq 0 ]];
  then
    # No extension
    FILENAME=$SRCFILE
    EXT=
  else
    FILENAME=${SRCFILE:0:(IDX-1)}
    EXT=${SRCFILE:IDX}
  fi

  TMPL_EXT='tmpl'
  if [ "$EXT" = "$TMPL_EXT" ];
  then
    SRCFILE="$PWD/$1"
    OUTFILE="$PWD/$FILENAME.dart"
  else 
    SRCFILE="$PWD/$1.$TMPL_EXT"
    OUTFILE="$PWD/$FILENAME.dart"
  fi
elif [[ $ARGC -eq 2 ]]
then
  SRCFILE="$PWD/$1"
  OUTFILE="$PWD/$2"
elif [[ $ARGC -lt $MINARGS ]];
then
 echo -e "\033[31mToo few arguments given (Minimum $MINARGS argument)\033[0m"
 exit 1
elif [[ $ARGC -gt $MAXARGS ]];
then
 echo -e "\033[31mToo many arguments\033[0m"
 exit 1
fi

if [ "$SRCFILE" = "$OUTFILE" ];
then
  echo -e "\033[31msource file must be different from the output file \033[0m"
  echo -e "source file: $SRCFILE"
  echo -e "output file: $OUTFILE"
  exit 1
fi

# Path of this bash script.
BASE_DIR="$( cd "$( dirname "$0" )" && pwd )"

# Pre-process the file
dart $BASE_DIR/tool.dart $SRCFILE $OUTFILE

