Simple Perl script for formatting code for posting
This script formats program listings for posting in the site.
It takes two arguments, the name of the file and optionally a number for TAB size. If the TAB size is ommited, it is assumed to be 8.
The script replaces all TABs by a number of spaces sufficient for the next character begin in a column multiple of the TAB size plus 1. It replaces also all "&" by "&" and all "<" by "<".
#!/usr/bin/perl #=============================================================================== # Copyright (c) 2009, Isaac Marino Bavaresco # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Neither the name of the author 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 THE AUTHOR ''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 THE AUTHOR 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. #=============================================================================== # isaacbavaresco@yahoo.com.br #=============================================================================== use strict; use warnings; #------------------------------------------------------------------------------- die "Invalid number of arguments" if( $#ARGV + 1 < 1 || $#ARGV + 1 > 2 ); my $FileName = $ARGV[0]; my $TabSize = 8; if( $#ARGV + 1 == 2 ) { $TabSize = $ARGV[1]; } open( my $Handle, $FileName ) or die "It was not possible to open the file!"; while( my $Line = <$Handle> ) { ( $Line ) = $Line =~ /(.*[^\s])\s*$/; if( !$Line ) { $Line = ""; } for( my $Column = 1, my $Index = 0; ( my $c = substr( $Line, $Index, 1 )) ne ""; $Index++ ) { if( $c eq "\t" ) { my $NextTab = $TabSize - (( $Column - 1 ) % $TabSize ); $Column += $NextTab; for( ; $NextTab; $NextTab-- ) { printf( " " ); } } elsif( $c eq "&" ) { printf( "&" ); $Column++; } elsif( $c eq "<" ) { printf( "<" ); $Column++; } else { printf( "%s", $c ); $Column++; } } printf( "\n" ); } close( $Handle ); #===============================================================================