You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

47 lines
1.2 KiB

#!/usr/bin/awk -f
# SOLARIS USERS: Change "awk" to "nawk", above!!!
# This is part of Phil's AWK tutorial at http://www.bolthole.com/AWK.html
# This program adjusts the indentation level based on which keywords are
# found in each line it encounters.
#
# THIS IS A (relatively) COMPLEX PROGRAM. If you're an AWK rookie,
# go back and read the tutorial before trying to understand this program!
# This program shows off awk functions, variables, and its ability to
# perform multiple actions for the same line
function doindent(){
tmpindent=indent;
if(indent<0){
print "ERROR; indent level == " indent
}
while(tmpindent >0){
printf(" ");
tmpindent-=1;
}
}
$1 == "done" { indent -=1; }
$1 == "fi" { indent -=1; }
$0 ~ /}/ { if(indent!=0) indent-=1; }
# This is the 'default' action, that actually prints a line out.
# This gets called AS WELL AS any other matching clause, in the
# order they appear in this program.
# An "if" match is run AFTER we run this clause.
# A "done" match is run BEFORE we run this clause.
{
doindent();
print $0;
}
$0 ~ /if.*;[ ]*then/ { indent+=1; }
$0 ~ /for.*;[ ]*do/ { indent+=1; }
$0 ~ /while.*;[ ]*do/ { indent+=1; }
$1 == "then" { indent+=1; }
$1 == "do" { indent+=1; }
$0 ~ /{$/ { indent+=1; }