#!/bin/bash
# The version check in this script is used to avoid commit battles
# between different developers that use different astyle versions as
# different versions might have different output (this has happened in
# the past).

# If project management wishes to take a newer astyle version into use
# just change this string to match the start of astyle version string.
ASTYLE_VERSION="Artistic Style Version 3.0.1"
ASTYLE="astyle"

DETECTED_VERSION=`$ASTYLE --version 2>&1`
if [[ "$DETECTED_VERSION" != ${ASTYLE_VERSION}* ]]; then
    echo "You should use: ${ASTYLE_VERSION}";
    echo "Detected: ${DETECTED_VERSION}"
    exit 1;
fi

style="--style=kr --indent=spaces=4 --indent-namespaces --lineend=linux --min-conditional-indent=0"
options="--options=none --pad-header --unpad-paren --suffix=none --convert-tabs --attach-inlines --attach-classes --attach-namespaces"

$ASTYLE $style $options cli/*.cpp
$ASTYLE $style $options cli/*.h
$ASTYLE $style $options democlient/*.cpp
$ASTYLE $style $options gui/*.cpp
$ASTYLE $style $options gui/*.h
$ASTYLE $style $options -r gui/test/*.cpp
$ASTYLE $style $options -r gui/test/*.h
$ASTYLE $style $options lib/*.cpp
$ASTYLE $style $options lib/*.h
$ASTYLE $style $options test/*.cpp
$ASTYLE $style $options test/cfg/{std,qt,windows,wxwidgets,posix,gnu,gtk}.c* # Exclude generated test files
$ASTYLE $style $options test/*.h

$ASTYLE $style $options --recursive "tools/*.cpp"
$ASTYLE $style $options --recursive "tools/*.h"

$ASTYLE $style $options --recursive "samples/*.c"
$ASTYLE $style $options --recursive "samples/*.cpp"

# Convert tabs to spaces.. even in strings
# sed -i "s/\t/ /g" test/test*.cpp

# format config files
# TODO: use other tool than xmllint? use tabs instead of spaces?
for CFGFILE in cfg/*.cfg
do
   xmllint --format -o ${CFGFILE}_ ${CFGFILE}
   mv -f ${CFGFILE}_ ${CFGFILE}
done
for PLATFORMFILE in platforms/*.xml
do
   xmllint --format -o ${PLATFORMFILE}_ ${PLATFORMFILE}
   mv -f ${PLATFORMFILE}_ ${PLATFORMFILE}
done
