#!/usr/bin/env bash
# plik receptury: oodiff
# oodiff -- wyszukiwanie różnić w treści dwóch plików środowiska OpenOffice.org
# Skrypt współdziała jedynie z plikami .odt
#
function usagexit ()
{
    echo "użycie: $0 plik1 plik2"
    echo "obydwa pliku muszą mieć format plików .odt"
    exit $1
} >&2

# sprawdzenie, czy pliki można odczytać i czy nazwa kończy się na .odt
if (( $# != 2 ))
then
    usagexit 1
fi
if [[ $1 != *.odt || $2 != *.odt ]]
then
    usagexit 2
fi
if [[ ! -r $1 || ! -r $2 ]]
then
    usagexit 3
fi

BAS1=$(basename "$1" .odt)
BAS2=$(basename "$2" .odt)

# rozpakowanie plików w prywatnych katalogach
PRIV1="/tmp/${BAS1}.$$_1"
PRIV2="/tmp/${BAS2}.$$_2"

# wyznaczenie ścieżki bezwzględnej
HERE=$(pwd)
if [[ ${1:0:1} == '/' ]]
then
    FULL1="${1}"
else
    FULL1="${HERE}/${1}"
fi

# wyznaczenie ścieżki bezwzględnej
if [[ ${2:0:1} == '/' ]]
then
    FULL2="${2}"
else
    FULL2="${HERE}/${2}"
fi

# utworzenie katalogów obszru roboczego i weryfikacja błędów
# znaki { i } muszą być otoczne znakami odstępu, a w listach {}
# muszą występować końcowe znaki ;
mkdir "$PRIV1" || { echo Unable to mkdir $PRIV1 ; exit 4; }
mkdir "$PRIV2" || { echo Unable to mkdir $PRIV2 ; exit 5; }

cd "$PRIV1"
unzip -q "$FULL1"
sed -e 's/>/>\
/g' -e 's/</\
</g' content.xml > contentwnl.xml

cd "$PRIV2"
unzip -q "$FULL2"
sed -e 's/>/>\
/g' -e 's/</\
</g' content.xml > contentwnl.xml

cd $HERE

diff "${PRIV1}/contentwnl.xml" "${PRIV2}/contentwnl.xml"

rm -rf $PRIV1 $PRIV2
