123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- #! /usr/bin/env perl
- use strict;
- use warnings;
- use File::Temp qw/tempfile/;
- my $topdir = shift;
- processallfiles($topdir);
- print "Success\n";
- sub processallfiles {
- my $dir = shift;
- my @files = glob "$dir/*.c $dir/*.h $dir/*.h.in $dir/*.pod *dir/*.pod.in";
- open (my $STDOUT_ORIG, '>&', STDOUT);
- foreach my $file (@files) {
- my ($tmpfh, $tmpfile) = tempfile();
- print "Processing $file\n";
- open(STDOUT, '>>', $tmpfile);
- open(INFILE, $file);
- processfile(\*INFILE);
- close(STDOUT);
- rename($tmpfile, $file);
- unlink($tmpfile);
- # restore STDOUT
- open (STDOUT, '>&', $STDOUT_ORIG);
- }
- #Recurse through subdirs
- opendir my $dh, $dir or die "Cannot open directory";
- while (defined(my $subdir = readdir $dh)) {
- next unless -d "$dir/$subdir";
- next if (rindex $subdir, ".", 0) == 0;
- processallfiles("$dir/$subdir");
- }
- closedir $dh;
- }
- sub processfile {
- my $fh = shift;
- my $multiline = 0;
- my @params;
- my $indent;
- my $paramstr = "";
- foreach my $line (<$fh>) {
- chomp($line);
- if (!$multiline) {
- if ($line =~ /^(.+)_with_libctx\((.*[^\\])$/) {
- my $preline = $1;
- my $postline = $2;
- #Strip trailing whitespace
- $postline =~ s/\s+$//;
- print $preline.'_ex(';
- my @rets = extracttoclose($postline);
- if (@rets) {
- print "$postline\n";
- $multiline = 0;
- } else {
- $multiline = 1;
- $paramstr = $postline;
- $indent = (length $preline) + (length '_ex(');
- }
- } else {
- #Any other reference to _with_libctx we just replace
- $line =~ s/_with_libctx/_ex/g;
- print $line."\n";
- }
- } else {
- #Strip leading whitespace
- $line =~ s/^\s+//;
- #Strip trailing whitespace
- $line =~ s/\s+$//;
- my @rets = extracttoclose($paramstr.$line);
- if (@rets) {
- my $pre = shift @rets;
- my $post = shift @rets;
- @params = split(",", $pre);
- my @params = grep(s/^\s*|\s*$//g, @params);
- formatparams($indent, @params);
- print ')'.$post."\n";
- $multiline = 0;
- } else {
- $paramstr .= $line;
- }
- }
- }
- die "End of multiline not found" if $multiline;
- }
- sub formatparams {
- my $indent = shift;
- my @params = @_;
- if (@params) {
- my $param = shift @params;
- my $lensofar += $indent + (length $param) + 1;
- print "$param";
- print "," if @params;
- while (@params) {
- my $param = shift @params;
- if (($lensofar + (length $param) + 2) > 80) {
- print "\n".(" " x $indent);
- print $param;
- $lensofar = $indent + (length $param) + 1;
- } else {
- print ' '.$param;
- $lensofar += (length $param) + 2;
- }
- print "," if @params;
- }
- }
- }
- sub extracttoclose {
- my $inline = shift;
- my $outline = "";
- while ($inline =~ /^([^\)]*?)\((.*)$/) {
- my @rets = extracttoclose($2);
- if (!@rets) {
- return ();
- }
- my $inside = shift @rets;
- my $post = shift @rets;
- $outline .= $1.'('.$inside.')';
- $inline = $post;
- }
- if ($inline =~ /^(.*?)\)(.*)$/) {
- return ($outline.$1, $2);
- }
- return ();
- }
|