Code Tidy
A perl script that tidies up the indentation and braces in C, C++, Java or C# program source code.
#!/usr/local/bin/perl
$bs=0; #backslash count
$qu=0; #quote count
$br=0; #brace count
$co=0; #comment count
$prev=""; #previous character;
$pnw=""; #previous non-whitespace character
$prep=0; #pre-processor definition?
if ($#ARGV==0){
$in_file=$ARGV[0];
}else{
print "Invalid Arguments\n";
}
open(IN,"< $in_file");
while(<IN>){
$line=$_;
$len = length($line);
for ($i=0;$i<$len;$i++){
$_ = substr($line,$i,1);
SWITCH: {
/\n/o && do {
if ($prev ne "\n"){
print " ";
}
if ($pre==1 && $pnw ne "\\"){
$pre=0;
new_line();
}
last SWITCH;
};
/\//o && do {
if ($prev eq "*"){
$co++;
}
if ($pnw=~/[;}{]/o && $qu%2==0){
new_line();
}
print "/";
$bs=0;
last SWITCH;
};
if ($pre==0 && $co==0){
/\#/o && do {
if ($pnw=~/[;}{]/o && $qu%2==0){
new_line();
}
print "#";
$bs=0;
if ($i==0){
$pre=1;
}
last SWITCH;
};
/\*/o && do {
if ($prev eq "/"){
$co--;
}
if ($pnw=~/[;}{]/o && $qu%2==0){
new_line();
}
print "*";
$bs=0;
last SWITCH;
};
/{/o && do {
if ($pnw eq "{"){
new_line();
}
$br++;
$bs=0;
print "{";
last SWITCH;
};
/}/o && do {
$br--;
if ($pnw=~/[;}{]/o && $qu%2==0){
new_line();
}
$bs=0;
print "}";
last SWITCH;
};
/\\/o && do {
if ($pnw=~/[;}{]/o && $qu%2==0){
new_line();
}
$bs++;
print "\\";
last SWITCH;
};
/\"/o && do {
if ($pnw=~/[;}{]/o && $qu%2==0){
new_line();
}
if (($bs % 2)==0){
$qu++;
}
$bs=0;
print "\"";
last SWITCH;
};
/;/o && do {
print ";";
$bs=0;
last SWITCH;
};
/\s/o && do {
if ($qu%2==0){
if ($prev ne " " && $prev ne "\n" && $prev ne "\r"){
print " ";
}
}else{
print " ";
}
$bs=0;
last SWITCH;
};
/\t/o && do {
if ($qu%2==0){
if ($prev ne "\t"){
print " ";
}
}else{
print "\t";
}
$bs=0;
last SWITCH;
};
$bs=0;
if ($pnw=~/[;}{]/o && $qu%2==0){
new_line();
}
}#endif pre==0
print $_;
}
if ($_ ne "\r"){
$prev = $_;
}
if ($_ ne " " && $_ ne "\t" && $_ ne "\n" && $_ ne "\r"){
$pnw = $_;
}
}
}
print "\n";
close(IN);
sub new_line {
print "\n";
for ($j=0;$j<$br;$j++){
print " ";
}
}