- Now works for paths containing spaces - No longer deletes the scenario/ folder if the scenario was already called that
59 lines
1.2 KiB
Bash
Executable File
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
|