
# Copyright (C) 2006 Michael Emmel<mike.emmel@gmail.com>  All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# 1.  Redistributions of source code must retain the above copyright
#     notice, this list of conditions and the following disclaimer.
# 2.  Redistributions in binary form must reproduce the above copyright
#     notice, this list of conditions and the following disclaimer in the
#     documentation and/or other materials provided with the distribution.
# 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
#     its contributors may be used to endorse or promote products derived
#     from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

cmdcpp="astyle \
--unpad=paren \
--style=linux \
--brackets=linux \
--indent=spaces=4 \
--indent-switches \
--convert-tabs" 

cmdh="astyle \
--unpad=paren \
--style=linux \
--brackets=break \
--indent=spaces=4 \
--convert-tabs" 

#astyle does not support unpadding so we use sed
for i in $@
do
echo $i

ext=`echo $i|awk -F . '{print $NF}'`

cmd=$cmdcpp

if [ $ext == "h" ] ; then
    cmd=$cmdh
fi

$cmd $i

#first print the changes we are making
sed  -n -e '
/( .*/p  
s/( /(/gp   
/*. )/p
s/ )/)/gp   
#supress printing this
#/^namespace WebCore/{
#N
#s/\n{/ {/p
#}
' $i 

#do it for real
sed -e '
#unpad leading spaces
s/( /(/g
#unpad traling spaces
s/ )/)/g
#fixup the namspec decl
/^namespace WebCore/{
N
s/\n{/ {/
}
#fixup extra tab in constructor initalizer
/^ \+,/{s/^    //}
/^ \+:/{s/^    //}
' $i > $i.sed
mv $i.sed $i
done


