File indexing completed on 2024-04-14 05:35:06

0001 #!/usr/bin/perl -w
0002 
0003 # Laurent Montel <montel@kde.org> (2014)
0004 # KSaveFile->QSaveFile
0005 # find -iname "*.cpp" -o -iname "*.h" |xargs kde-dev-scripts/kf5/convert-ksavefile.pl
0006 # TODO need to improve it.
0007 use strict;
0008 use File::Basename;
0009 use lib dirname($0);
0010 use functionUtilkde;
0011 
0012 foreach my $file (@ARGV) {
0013 
0014     my $modified;
0015     open(my $FILE, "<", $file) or warn "We can't open file $file:$!\n";
0016     my %varname = ();
0017     my %finalized_called = ();
0018     my @l = map {
0019         my $orig = $_;
0020 
0021         #KSaveFile file( filename );
0022 
0023         my $regexp = qr/
0024           ^(\s*)           # (1) Indentation
0025           KSaveFile\s+
0026           (\w+)            # (2) variable name
0027           /x; # /x Enables extended whitespace mode
0028         if (my ($left, $var) = $_ =~ $regexp) {
0029            $varname{$var} = 1;
0030            s/\bKSaveFile\b/QSaveFile/;
0031         }
0032         if (/(\w+)\.finalize\(/) {
0033            my $var = $1;
0034            if ( defined $varname{$var} ) {
0035               s/$var\.finalize/$var\.commit/;
0036               $finalized_called{$var} = 1;
0037            }
0038         }
0039         # Add default argument
0040         if (/(\w+)\.open\(\s*\)/) {
0041            my $var = $1;
0042            if ( defined $varname{$var} ) {
0043               s/$var\.open\(\s*\)/$var\.open\(QIODevice::WriteOnly\)/;
0044            }
0045         }
0046         if (/(\w+)\.abort\(\s*\)/) {
0047            my $var = $1;
0048            if ( defined $varname{$var} ) {
0049               s/$var\.abort\(\s*\)/$var\.cancelWriting\(\)/;
0050            }
0051         }
0052 
0053         s/\bKSaveFile\b/QSaveFile/g;
0054         s/\<KSaveFile\b\>/\<QSaveFile>/ if (/#include/);
0055         s/\<ksavefile.h\>/\<QSaveFile>/ if (/#include/);
0056         $modified ||= $orig ne $_;
0057         $_;
0058     } <$FILE>;
0059 
0060     foreach my $var (keys %varname) {
0061         if (not defined($finalized_called{$var})) {
0062             warn "WARNING: add $var.commit() at the time it is destructed. KSaveFile called finalize() in the dtor, and this code never calls it, but QSaveFile requires an explicit call to commit(), otherwise the changes are discarded\n";
0063          }
0064     }
0065 
0066     if ($modified) {
0067         open (my $OUT, ">", $file);
0068         print $OUT @l;
0069         close ($OUT);
0070     }
0071 }
0072 
0073 functionUtilkde::diffFile( "@ARGV" );