#!/bin/sh
##
## HTML
tag to line up
##
## author : "Chilbong Kim" http://linuxchannel.net/
## changes :
## - 2004.11.09 : support null space
## - 2004.10.28 : support cygwin
## - 2004.10.14 : support FreeBSD
## - 2003.04.22 : add comments and usage
## - 2003.04.20 : new build
##
## download :
## - don't download 'html2arr.sh'
## - http://ftp.linuxchannel.net/devel/html2arr/html2arr.sh.tar.gz
##
## usage(example) :
## shell> tar zxvf html2arr.sh.tar.gz
## shell> mv html2arr.sh /usr/local/bin/html2arr
## shell> chmod a+x /usr/local/bin/html2arr
## shell> html2arr index.html
## or
## shell> html2arr index.html login.php xxx.htm
usage()
{
echo 'HTML tag to lineup' >&2
echo "usage : `basename $0` [-s|--status] filename.html [filname.html ...]" >&2
exit 1
}
mktab()
{
N=$1
MAKETAB=''
while [ "$N" -gt "1" ] ; do
MAKETAB="`echo -e "\t"`$MAKETAB"
N=`expr $N - 1`
done
echo "$MAKETAB"
}
mkspace()
{
N=$1
MAKESPACE=''
while [ "$N" -gt "1" ] ; do
MAKESPACE=" $MAKESPACE"
N=`expr $N - 1`
done
echo "$MAKESPACE"
}
mklinesplit()
{
echo "$1" | sed \
-e "s;^[[:space:]]*;;" \
-e "s;>[[:space:]]*\(*TABLE\);
>\1;g" \
-e "s;>[[:space:]]*\(*table\);
>\1;g" \
-e "s;>[[:space:]]*\(*Table\);
>\1;g" \
-e "s;\(
<;\1
><;g" \
-e "s;\(
<;\1
><;g" \
-e "s;\(<;\1
><;g" \
| tr "
" "\n"
}
lineup()
{
LINE=$1
MAKETAB=`mktab "$I"`
for T in $LINE ; do
if [ -n "`echo $T | grep -i '> $FILE
if [ -n "`echo $T | grep -i '
/dev/null | tr "
" "\n"`
TOTAL=`echo "$CONTENTS" | wc -l | sed -e 's; ;;g'`
## make new file
##
cat /dev/null > $FILE
for LINE in $CONTENTS ; do
[ "X$LINE" = "X_____CRLF" ] &&
{
[ -n "$STATUS" ] && echo "$L / $TOTAL $I $SKIP" >&2
[ "X$CRLF" = "Xnskip" ] && echo "" >> $FILE
CRLF='skip'
L=`expr $L + 1`
continue
}
[ -n "`echo $LINE | grep -Ei '<(SCRIPT|STYLE)'`" ] && SKIP='skip'
[ -n "`echo $LINE | grep -Ei '^[[:space:]]*<(\?|%)'`" ] && SKIP='skip'
## print of status
##
[ -n "$STATUS" ] && echo "$L / $TOTAL $I $SKIP" >&2
if [ "X$SKIP" = "Xskip" ] ; then
echo "$LINE" | sed -e "s;${SPACE};${TAB};g" >> $FILE
elif [ "X$SKIP" = "Xnskip" ] ; then
[ -n "`echo $LINE | grep -i '\?TABLE'`" ] &&
{
LINE=`mklinesplit "$LINE"`
lineup "$LINE"
} || {
MAKETAB=`mktab "$I"`
echo "$LINE" | sed -e "s;^[[:space:]]*;;" -e "s;^;${MAKETAB};" >> $FILE
}
fi
[ -n "`echo $LINE | grep -Ei '(SCRIPT|STYLE)'`" ] && SKIP='nskip'
[ -n "`echo $LINE | grep -E '[[:space:]]*(\?|%)>'`" ] && SKIP='nskip'
CRLF='nskip'
L=`expr $L + 1`
done
}
[ X"$1" = "X" ] && usage
[ X"$1" = X"-s" -o X"$1" = X"--status" ] && { STATUS=1; shift; }
TAB=`echo -e "\t"`
SPACE=`mkspace 8`
IFS='
'
for F in $* ; do
[ -s "$F" ] && [ X$(file "$F" 2>/dev/null | grep -i 'text') != "X" ] &&
(
cp -f "$F" "$F.bak"
tag2arr "$F"
)
done
exit 0