#!/bin/bash

# convert input votable to delimited file (tsv,csv)
# vo2dlm [-d DFS] {-H} {-D} {-s} -h infile.vot 
# one of H or D or s must be selected
#
# LAST REVISION: 27 January 2021
#-----------------------------------------------------------------------
DFS="\t"; HEADER=; DATA=; SHOW=; HELP=;
#-----------------------------------------------------------------------
TF="OUT_vo2dlm.tmp" TFh=${TF}h TFe=${TF}e
#trap "[ -e $TFh ] && rm $TFh; [ -e $TFe ] && rm $TFe" EXIT
#-----------------------------------------------------------------------

while getopts d:HDsh OPTVAL
do
    case $OPTVAL in
	d) DFS=$OPTARG;;
	H) HEADER=1;;
	D) DATA=1;;
	s) SHOW=1;;
	h) HELP=1;;
	*) echo "vot2dlm -h for help"; exit -1
    esac
done
shift $((OPTIND-1))

if [ $HELP ]; then
    echo -e "\tvo2dlm [-d DFS] {-H} {-D} {-s} {-h} infile.vot"
    echo -e '\t -d .. field separator for output file, "[\t]" ("," etc)'
    echo -e "\t -H .. write out header"
    echo -e "\t -D .. write out data"
    echo -e "\t -s .. show header & description, one item per line"
    exit
fi

if ! [ $HEADER ] && ! [ $DATA ] && ! [ $SHOW ]; then
    echo "one or more of action -H -D -s must be chosen; quitting"; exit -1
fi
#-----------------------------------------------------------------------

IF=$1

#-----------------------------------------------------------------------
#The heavy lift
#-----------------------------------------------------------------------

if [ $SHOW ]; then 
  sed '/<FIELD/!d' $IF | sed 's/<FIELD.*name="//;s/".*$//' > $TFh
  sed '1,/<FIELD/d;/<DATA>/,$d' $IF | sed -nE '/<DESCRIPTION>/{s/<.?DESCRIPTION>//gp;}' > $TFe
  paste <(nl $TFh) $TFe
fi 

if [ $HEADER ]; then
  sed '/<FIELD/!d' $IF | sed 's/<FIELD.*name="//;s/".*$//' | awk -F"\n" -v RS="" '{gsub(/\n/,DFS);print}' DFS=$DFS
fi

if [ $DATA ]; then
  sed '1,/<TABLEDATA>/d;/<.TABLEDATA>/,$d' $IF | sed -E '/<TR>/d;s/<.?TD>//g;$d'  | awk -F"\n" '{gsub(/\n/,DFS);sub(/.$/,"");print}' RS="</TR>\n" DFS=$DFS
fi 

