Files
oboe/rsrc/schemas/validate-scen.sh
Celtic Minstrel 4e9117035d Small improvements to scenario validation script
- Now works for paths containing spaces
- No longer deletes the scenario/ folder if the scenario was already called that
2016-09-17 19:23:16 -04:00

59 lines
1.2 KiB
Bash
Executable File

#!/bin/bash
function invalid {
echo "$1 is not a valid Blades of Exile scenario."
echo $2
rm "$1.temp"
exit 1
}
BOE_SCHEMAS_DIR=${BOE_SCHEMAS_DIR:-`git rev-parse --show-toplevel`/rsrc/schemas}
if [[ -d $1 ]]; then
SCEN_PATH=$1
elif [[ -f $1 ]]; then
gzip -S .boes -dck "$1" > "$1.temp"
if [[ $? > 0 ]]; then invalid "$1" "(Not valid GZIP data.)"; fi
tar -xf "$1.temp"
if [[ $? > 0 ]]; then invalid "$1" "(Not valid TAR archive.)"; fi
rm "$1.temp"
SCEN_PATH=scenario
else invalid "$1" "(Not a file or directory.)"; fi
function check-file {
xmllint --nonet --noout --schema "$BOE_SCHEMAS_DIR/$1.xsd" "$2"
}
cd "$SCEN_PATH"
check-file scenario "scenario.xml"
check-file terrain "terrain.xml"
check-file items "items.xml"
check-file monsters "monsters.xml"
shopt -s nullglob
for sector in out/out*.xml; do
check-file outdoor "$sector"
done
for town in towns/town*.xml; do
check-file town "$town"
done
for speech in towns/talk*.xml; do
check-file dialogue "$speech"
done
if [[ -d dialogs/ ]]; then
for dlog in dialogs/*.xml; do
check-file dialog "$dlog"
done
fi
cd ..
if [[ $SCEN_PATH = scenario && ${1##*/} != scenario ]]; then
rm -rf scenario
fi